文件
tem3dfdtd-open/tem3dfdtd/module/pml-parameters.f90
T
2026-08-14 20:51:58 +08:00

34 行
2.4 KiB
Fortran

!Copyright (c) 2013 by https://git.em3d.cn/ under guide of Xiu Li(lixiu@chd.edu.cn)
!written by Huaifeng Sun(sunhuaifeng@email.sdu.edu.cn) and Xushan Lu(luxushan@gmail.com)
!Code distribution @ https://git.em3d.cn/
!The PML part follows the CPML scheme of Roden & Gedney (2000), integrated by the
!author of the PML version (tem3dfdtd_第二版), with tuned parameters:
!sig_x_max=1.0D2, alpha_x_max=1.0D-1, kappa_x_max=1.0 (RESTORED to the EXACT
!values of the reference tem3dfdtd_第二版 which stays stable in the off phase;
!alpha=1e-1 absorbs low-frequency diffusion fields much better than 1e-2 and
!prevented the reflection feedback that made the CPML diverge)
MODULE PML_PARAMETER
INTEGER, PARAMETER :: ma = 3, mb = 1
REAL*8, PARAMETER ::sig_x_max = 1.0D2,sig_y_max =sig_x_max,sig_z_max = sig_x_max, &
alpha_x_max = 1.0D-1,alpha_y_max = alpha_x_max, alpha_z_max = alpha_x_max, &
kappa_x_max = 1.0,kappa_y_max = kappa_x_max, kappa_z_max = kappa_x_max
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_e_x1,c_e_x1,alpha_PML_e_x1,sig_PML_e_x1,kappa_PML_e_x1
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_h_x1,c_h_x1,alpha_PML_h_x1,sig_PML_h_x1,kappa_PML_h_x1
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_e_x2,c_e_x2,alpha_PML_e_x2,sig_PML_e_x2,kappa_PML_e_x2
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_h_x2,c_h_x2,alpha_PML_h_x2,sig_PML_h_x2,kappa_PML_h_x2
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_e_y1,c_e_y1,alpha_PML_e_y1,sig_PML_e_y1,kappa_PML_e_y1
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_h_y1,c_h_y1,alpha_PML_h_y1,sig_PML_h_y1,kappa_PML_h_y1
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_e_y2,c_e_y2,alpha_PML_e_y2,sig_PML_e_y2,kappa_PML_e_y2
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_h_y2,c_h_y2,alpha_PML_h_y2,sig_PML_h_y2,kappa_PML_h_y2
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_e_z1,c_e_z1,alpha_PML_e_z1,sig_PML_e_z1,kappa_PML_e_z1
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_h_z1,c_h_z1,alpha_PML_h_z1,sig_PML_h_z1,kappa_PML_h_z1
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_e_z2,c_e_z2,alpha_PML_e_z2,sig_PML_e_z2,kappa_PML_e_z2
REAL*8 ,DIMENSION(:),ALLOCATABLE :: b_h_z2,c_h_z2,c_h_zz,alpha_PML_h_z2,sig_PML_h_z2,kappa_PML_h_z2
REAL*8 ,DIMENSION(:),ALLOCATABLE :: inv_hz_den !1/(den_hz+c_h_zz), precomputed per step for the Hz recursion
REAL*8 ,DIMENSION(:),ALLOCATABLE :: den_ex,den_hx
REAL*8 ,DIMENSION(:),ALLOCATABLE :: den_ey,den_hy
REAL*8 ,DIMENSION(:),ALLOCATABLE :: den_ez,den_hz
ENDMODULE PML_PARAMETER