包含基于射线追踪的任意复杂界面计算
这个提交包含在:
@@ -0,0 +1,148 @@
|
||||
!Copyright (c) 2013 by tdem.org under guide of Xiu Li(lixiu@chd.edu.cn)
|
||||
!written by Huaifeng Sun(sunhuaifeng@gmail.com) and Xushan Lu(luxushan@gmail.com)
|
||||
!Code distribution @ tdem.org or sunhuaifeng.com
|
||||
|
||||
subroutine Get_pml_parameters
|
||||
use constantparameters
|
||||
USE PML_PARAMETER
|
||||
implicit none
|
||||
integer i,j,k,II,JJ,KK
|
||||
DO i = 1,PML_X1
|
||||
sig_PML_e_x1(i) = sig_x_max * ( (PML_X1 - i) / (PML_X1 - 1.0) )**ma
|
||||
alpha_PML_e_x1(i) = alpha_x_max*((i-1.0)/(PML_X1-1.0))**mb
|
||||
kappa_PML_e_x1(i) = 1.0+(kappa_x_max-1.0)*((PML_X1 - i) / (PML_X1 - 1.0))**ma
|
||||
ENDDO
|
||||
DO i = 1,PML_X1-1
|
||||
sig_PML_h_x1(i) = sig_x_max * ( (PML_X1 - i - 0.5)/(PML_X1-1.0))**ma
|
||||
alpha_PML_h_x1(i) = alpha_x_max*((i-0.5)/(PML_X1-1.0))**mb
|
||||
kappa_PML_h_x1(i) = 1.0+(kappa_x_max-1.0)*((PML_X1 - i - 0.5) / (PML_X1 - 1.0))**ma
|
||||
ENDDO
|
||||
DO i = 1,PML_X2
|
||||
sig_PML_e_x2(i) = sig_x_max * ( (PML_X2 - i) / (PML_X2 - 1.0) )**ma
|
||||
alpha_PML_e_x2(i) = alpha_x_max*((i-1.0)/(PML_X2-1.0))**mb
|
||||
kappa_PML_e_x2(i) = 1.0+(kappa_x_max-1.0)*((PML_X2 - i) / (PML_X2 - 1.0))**ma
|
||||
ENDDO
|
||||
DO i = 1,PML_X2-1
|
||||
sig_PML_h_x2(i) = sig_x_max * ( (PML_X2 - i - 0.5)/(PML_X2-1.0))**ma
|
||||
alpha_PML_h_x2(i) = alpha_x_max*((i-0.5)/(PML_X2-1.0))**mb
|
||||
kappa_PML_h_x2(i) = 1.0+(kappa_x_max-1.0)*((PML_X2 - i - 0.5) / (PML_X2 - 1.0))**ma
|
||||
ENDDO
|
||||
|
||||
!*************************************************************************************************
|
||||
!y方向pml参数的求解
|
||||
DO j = 1,PML_Y1
|
||||
sig_PML_e_y1(j) = sig_y_max * ( (PML_Y1 - j ) / (PML_Y1 - 1.0) )**ma
|
||||
alpha_PML_e_y1(j) = alpha_y_max*((j-1)/(PML_Y1-1.0))**mb
|
||||
kappa_PML_e_y1(j) = 1.0+(kappa_y_max-1.0)*((PML_Y1 - j) / (PML_Y1 - 1.0))**ma
|
||||
ENDDO
|
||||
DO j = 1,PML_Y1-1
|
||||
sig_PML_h_y1(j) = sig_y_max * ( (PML_Y1 - j - 0.5)/(PML_Y1-1.0))**ma
|
||||
alpha_PML_h_y1(j) = alpha_y_max*((j-0.5)/(PML_Y1-1.0))**mb
|
||||
kappa_PML_h_y1(j) = 1.0+(kappa_y_max-1.0)*((PML_Y1 - j - 0.5) / (PML_Y1 - 1.0))**ma
|
||||
ENDDO
|
||||
DO j = 1,PML_Y2
|
||||
sig_PML_e_y2(j) = sig_y_max * ( (PML_Y2 - j ) / (PML_Y2 - 1.0) )**ma
|
||||
alpha_PML_e_y2(j) = alpha_y_max*((j-1)/(PML_Y2-1.0))**mb
|
||||
kappa_PML_e_y2(j) = 1.0+(kappa_y_max-1.0)*((PML_Y2 - j) / (PML_Y2 - 1.0))**ma
|
||||
ENDDO
|
||||
DO j = 1,PML_Y2-1
|
||||
sig_PML_h_y2(j) = sig_y_max * ( (PML_Y2 - j - 0.5)/(PML_Y2-1.0))**ma
|
||||
alpha_PML_h_y2(j) = alpha_y_max*((j-0.5)/(PML_Y2-1.0))**mb
|
||||
kappa_PML_h_y2(j) = 1.0+(kappa_y_max-1.0)*((PML_Y2 - j - 0.5) / (PML_Y2 - 1.0))**ma
|
||||
ENDDO
|
||||
|
||||
!*************************************************************************************************
|
||||
!Z方向pml参数的求解
|
||||
DO k = 1,PML_Z1
|
||||
sig_PML_e_z1(k) = sig_z_max * ( (PML_Z1 - k ) / (PML_Z1 - 1.0) )**ma
|
||||
alpha_PML_e_z1(k) = alpha_z_max*((k-1)/(PML_Z1-1.0))**mb
|
||||
kappa_PML_e_z1(k) = 1.0+(kappa_z_max-1.0)*((PML_Z1 - k) / (PML_Z1 - 1.0))**ma
|
||||
ENDDO
|
||||
DO k = 1,PML_Z1-1
|
||||
sig_PML_h_z1(k) = sig_z_max * ( (PML_Z1 - k - 0.5)/(PML_Z1-1.0))**ma
|
||||
alpha_PML_h_z1(k) = alpha_z_max*((k-0.5)/(PML_Z1-1.0))**mb
|
||||
kappa_PML_h_z1(k) = 1.0+(kappa_z_max-1.0)*((PML_Z1 - k - 0.5) / (PML_Z1 - 1.0))**ma
|
||||
ENDDO
|
||||
DO k = 1,PML_Z2
|
||||
sig_PML_e_z2(k) = sig_z_max * ( (PML_Z2 - k ) / (PML_Z2 - 1.0) )**ma
|
||||
alpha_PML_e_z2(k) = alpha_z_max*((k-1)/(PML_Z2-1.0))**mb
|
||||
kappa_PML_e_z2(k) = 1.0+(kappa_z_max-1.0)*((PML_Z2 - k) / (PML_Z2 - 1.0))**ma
|
||||
ENDDO
|
||||
DO k = 1,PML_Z2-1
|
||||
sig_PML_h_z2(k) = sig_z_max * ( (PML_Z2 - k - 0.5)/(PML_Z2-1.0))**ma
|
||||
alpha_PML_h_z2(k) = alpha_z_max*((k-0.5)/(PML_Z2-1.0))**mb
|
||||
kappa_PML_h_z2(k) = 1.0+(kappa_z_max-1.0)*((PML_Z2 - k - 0.5) / (PML_Z2 - 1.0))**ma
|
||||
ENDDO
|
||||
|
||||
!求解den
|
||||
!x方向
|
||||
ii =PML_X2
|
||||
DO i = 1,NX
|
||||
if (i <= PML_X1) then
|
||||
den_ex(i) = 1.0/kappa_PML_e_x1(i)
|
||||
elseif (i >= NX+2-PML_X2) then
|
||||
den_ex(i) = 1.0/kappa_PML_e_x2(ii)
|
||||
ii = ii-1
|
||||
else
|
||||
den_ex(i) = 1.0
|
||||
endif
|
||||
ENDDO
|
||||
ii =PML_X2-1
|
||||
DO i = 1,NX
|
||||
if (i <= PML_X1-1) then
|
||||
den_hx(i) = 1.0/kappa_PML_h_x1(i)
|
||||
elseif (i >= NX+2-PML_X2) then
|
||||
den_hx(i) = 1.0/kappa_PML_h_x2(ii)
|
||||
ii = ii-1
|
||||
else
|
||||
den_hx(i) = 1.0
|
||||
endif
|
||||
ENDDO
|
||||
!y方向
|
||||
jj = PML_Y2
|
||||
DO j = 1,NY
|
||||
if (j <= PML_Y1) then
|
||||
den_ey(j) = 1.0/kappa_PML_e_y1(j)
|
||||
elseif (j >= NY+2-PML_Y2) then
|
||||
den_ey(j) = 1.0/kappa_PML_e_y2(jj)
|
||||
jj = jj-1
|
||||
else
|
||||
den_ey(j) = 1.0
|
||||
endif
|
||||
ENDDO
|
||||
jj =PML_Y2-1
|
||||
DO j = 1,NY
|
||||
if (j <= PML_Y1-1) then
|
||||
den_hy(j) = 1.0/kappa_PML_h_y1(j)
|
||||
elseif (j >= NY+2-PML_Y2) then
|
||||
den_hy(j) = 1.0/kappa_PML_h_y2(jj)
|
||||
jj = jj-1
|
||||
else
|
||||
den_hy(j) = 1.0
|
||||
endif
|
||||
ENDDO
|
||||
!z方向
|
||||
kk =PML_Z2
|
||||
DO k = 1,NZ
|
||||
if (k <= PML_Z1) then
|
||||
den_ez(k) = 1.0/kappa_PML_e_z1(k)
|
||||
elseif (k >= NZ+2-PML_Z2) then
|
||||
den_ez(k) = 1.0/kappa_PML_e_z2(kk)
|
||||
kk = kk - 1
|
||||
else
|
||||
den_ez(k) = 1.0
|
||||
endif
|
||||
ENDDO
|
||||
kk =PML_Z2-1
|
||||
DO k = 1,NZ
|
||||
if (k <= PML_Z1-1) then
|
||||
den_hz(k) = 1.0/kappa_PML_h_z1(k)
|
||||
elseif (k >= NZ+2-PML_Z2) then
|
||||
den_hz(k) = 1.0/kappa_PML_h_z2(kk)
|
||||
kk = kk - 1
|
||||
else
|
||||
den_hz(k) = 1.0
|
||||
endif
|
||||
ENDDO
|
||||
|
||||
end subroutine Get_pml_parameters
|
||||
在新工单中引用
屏蔽一个用户