包含基于射线追踪的任意复杂界面计算

这个提交包含在:
2026-08-14 08:00:47 +08:00
父节点 d1a709985d
当前提交 b4cf75ce78
修改 91 个文件,包含 1612224 行新增515 行删除
+60 -6
查看文件
@@ -13,15 +13,22 @@ SUBROUTINE ALLOCATEMEMORY
USE ELECTROMAGNETIC_VARIABLES
USE RES_MODEL_PARAMETER
USE TIME_PARAMETER
USE PML_PARAMETER
IMPLICIT NONE
INTEGER ERR
!分配ELECTROMAGNETIC_VARIABLES中的数组
WRITE(*,*)'Allocating memory... ...'
!>Allocate the arrays in ELECTROMAGNETIC_VARIABLES
!! Allocate electric field components EX, EY, EZ
!! Allocate magnetic field components HX, HY, HZ
ALLOCATE(EX(NX,NYB,NZB), EY(NXB,NY,NZB), EZ(NXB,NYB,NZ), STAT=ERR)
ALLOCATE(HX(NXB,NY,0:NZ), HY(NX,NYB,0:NZ), HZ(NX,NY,NZB), STAT=ERR)
!分配RES_MODEL_PARAMETER中的数组
ALLOCATE(CCSIG(NX,NY,NZ), STAT=ERR)
!分配TIME_PARAMETER中的数组
!>Allocate the array in RES_MODEL_PARAMETER
!! Allocate conductivity arrays
ALLOCATE(CCSIG(NX,NY,NZ))
ALLOCATE(CCSIGX(NX,NYB,NZB), CCSIGY(NXB,NY,NZB), CCSIGZ(NXB,NYB,NZ))
ALLOCATE(LenRatio_CCSIGX(NX,NYB,NZB), LenRatio_CCSIGY(NXB,NY,NZB), LenRatio_CCSIGZ(NXB,NYB,NZ))
allocate(Coordix(NX),Coordiy(NY),Coordiz(NZ))
!>Allocate the array in TIME_PARAMETER
ALLOCATE(CTIME(NSTOP), STAT=ERR)
ALLOCATE(DELT(0:NSTOP), STAT=ERR)
allocate(Eps_r(nstop),Cq(nstop))
@@ -30,8 +37,55 @@ SUBROUTINE ALLOCATEMEMORY
allocate(RecFile(NumRecHeights+1,NumRecLines),RecFilePid(NumRecHeights+1,NumRecLines))
allocate(RecHzFilePid(NumRecHeights+1,NumRecLines),RecHEFilePid(NumRecHeights+1,NumRecLines))
allocate(Height(NumRecHeights))
allocate(Coordix3(Nx),Coordiy3(Ny),Coordiz3(Nzb))
!THIS IS THE ARRAY FOR NON-UNIFORM GRID
!>THIS IS THE ARRAY FOR NON-UNIFORM GRID
ALLOCATE(CDELX(NX),CDELY(NY),CDELZ(NZ),STAT=ERR)
!>Arrays of the CPML absorbing boundary
!! den_* = 1/kappa_* scaling arrays: always allocated; they are initialized to
!! 1.0 in ZERO, and overwritten by Get_pml_parameters only when Logic_PML=1.
!! So the iteration loop always multiplies the curl terms by den_*, and the
!! scheme degenerates exactly to the original Dirichlet-boundary version
!! (den=1, psi never updated) when the CPML boundary is disabled.
ALLOCATE(den_ex(NX),den_hx(NX),den_ey(NY),den_hy(NY),den_ez(NZ),den_hz(NZ))
ALLOCATE(c_h_zz(NZ))
ALLOCATE(inv_hz_den(NZ))
IF(Logic_PML==1)THEN
ALLOCATE(psi_Exy_1(NX,PML_Y1,NZB), psi_Exy_2(NX,PML_Y2,NZB), &
psi_Exz_1(NX,NYB,PML_Z1), psi_Exz_2(NX,NYB,PML_Z2), &
psi_Eyx_1(PML_X1,NY,NZB), psi_Eyx_2(PML_X2,NY,NZB), &
psi_Eyz_1(NXB,NY,PML_Z1), psi_Eyz_2(NXB,NY,PML_Z2), &
psi_Ezx_1(PML_X1,NYB,NZ), psi_Ezx_2(PML_X2,NYB,NZ), &
psi_Ezy_1(NXB,PML_Y1,NZ), psi_Ezy_2(NXB,PML_Y2,NZ), &
psi_Hxy_1(NXB,PML_Y1-1,NZ), psi_Hxy_2(NXB,PML_Y2-1,NZ),&
psi_Hxz_1(NXB,NY,PML_Z1-1), psi_Hxz_2(NXB,NY,PML_Z2-1),&
psi_Hyx_1(PML_X1-1,NYB,NZ), psi_Hyx_2(PML_X2-1,NYB,NZ),&
psi_Hyz_1(NX,NYB,PML_Z1-1), psi_Hyz_2(NX,NYB,PML_Z2-1),&
psi_Hzx_1(PML_X1-1,NY,NZB), psi_Hzx_2(PML_X2-1,NY,NZB),&
psi_Hzy_1(NX,PML_Y1-1,NZB), psi_Hzy_2(NX,PML_Y2-1,NZB),&
psi_Hzz_1(NX,NY,PML_Z1-1), psi_Hzz_2(NX,NY,PML_Z2-1),STAT=ERR)
ALLOCATE(b_e_x1(PML_X1),c_e_x1(PML_X1),&
alpha_PML_e_x1(PML_X1),sig_PML_e_x1(PML_X1),kappa_PML_e_x1(PML_X1))
ALLOCATE(b_h_x1(PML_X1-1),c_h_x1(PML_X1-1),&
alpha_PML_h_x1(PML_X1-1),sig_PML_h_x1(PML_X1-1),kappa_PML_h_x1(PML_X1-1))
ALLOCATE(b_e_x2(PML_X2),c_e_x2(PML_X2),&
alpha_PML_e_x2(PML_X2),sig_PML_e_x2(PML_X2),kappa_PML_e_x2(PML_X2))
ALLOCATE(b_h_x2(PML_X2-1),c_h_x2(PML_X2-1),&
alpha_PML_h_x2(PML_X2-1),sig_PML_h_x2(PML_X2-1),kappa_PML_h_x2(PML_X2-1))
ALLOCATE(b_e_y1(PML_Y1),c_e_y1(PML_Y1),&
alpha_PML_e_y1(PML_Y1),sig_PML_e_y1(PML_Y1),kappa_PML_e_y1(PML_Y1))
ALLOCATE(b_h_y1(PML_Y1-1),c_h_y1(PML_Y1-1),&
alpha_PML_h_y1(PML_Y1-1),sig_PML_h_y1(PML_Y1-1),kappa_PML_h_y1(PML_Y1-1))
ALLOCATE(b_e_y2(PML_Y2),c_e_y2(PML_Y2),&
alpha_PML_e_y2(PML_Y2),sig_PML_e_y2(PML_Y2),kappa_PML_e_y2(PML_Y2))
ALLOCATE(b_h_y2(PML_Y2-1),c_h_y2(PML_Y2-1),&
alpha_PML_h_y2(PML_Y2-1),sig_PML_h_y2(PML_Y2-1),kappa_PML_h_y2(PML_Y2-1))
ALLOCATE(b_e_z1(PML_Z1),c_e_z1(PML_Z1),&
alpha_PML_e_z1(PML_Z1),sig_PML_e_z1(PML_Z1),kappa_PML_e_z1(PML_Z1))
ALLOCATE(b_h_z1(PML_Z1-1),c_h_z1(PML_Z1-1),&
alpha_PML_h_z1(PML_Z1-1),sig_PML_h_z1(PML_Z1-1),kappa_PML_h_z1(PML_Z1-1))
ALLOCATE(b_e_z2(PML_Z2),c_e_z2(PML_Z2),&
alpha_PML_e_z2(PML_Z2),sig_PML_e_z2(PML_Z2),kappa_PML_e_z2(PML_Z2))
ALLOCATE(b_h_z2(PML_Z2-1),c_h_z2(PML_Z2-1),&
alpha_PML_h_z2(PML_Z2-1),sig_PML_h_z2(PML_Z2-1),kappa_PML_h_z2(PML_Z2-1))
ENDIF
RETURN
ENDSUBROUTINE ALLOCATEMEMORY