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

这个提交包含在:
2026-08-14 08:00:47 +08:00
父节点 d1a709985d
当前提交 b4cf75ce78
修改 91 个文件,包含 1612224 行新增515 行删除
+26 -11
查看文件
@@ -4,7 +4,7 @@
! This is a finite difference time domain (FDTD) code for the simulation of transient electromagnetic (TEM);
! This code is designed to be used in semi_airborne TEM with a loop source;
! This code is written by Huaifeng Sun (sunhuaifeng@gmail.com) and Xushan Lu (luxushan@gmail.com);
! This code is written by Huaifeng Sun (sunhuaifeng@gmail.com) and Xushan Lu (luxushan@gmail.com), The conformal mesh part is written by Xinyu Li (202335098@mail.sdu.edu.cn) and Qi Zhao(zhaoqi_326326@163.com);
! OpenACC API is used in this code for the acceleration with GPU device; therefore, you are recommended to compile this code with --
! --PGI Accelerator Fortran Workstation compiler. A Nvidia GPU card with CUDA capability is required if you want to run this code in parallel mode.
! Nobody is allowed to copy or distribute this code to people outside of TDEM.org group without the permission from Prof. Xiu Li (lixiu@chd.edu.cn)--
@@ -14,7 +14,7 @@
!------------------------------------------------Instruction part--------------------------------------------------!
! This module is used to declare most of the parameters which are used in the entire code.
!-----------------------------------------------------------------------------------------------------------------------!
!==========================Ö÷³ÌÐò¿ªÊ¼==============================
!==========================The main program begins==============================
PROGRAM MAIN
USE OMP_LIB
USE CONSTANTPARAMETERS
@@ -25,7 +25,7 @@ PROGRAM MAIN
CHARACTER*20, XSTRING
CHARACTER*20, SYS_TIME
OPEN(10005,FILE='logfile.log',STATUS='UNKNOWN')
CALL GET_SYS_TIMEDATA(SYS_TIME)
!CALL GET_SYS_TIMEDATA(SYS_TIME)
WRITE(10005,*)'----------------------',SYS_TIME,'----------------------'
CALL GETDATA !This subroutine is used to input all the needed parameter of each calculation from 'input.dat' file.
CALL CHECKPARAMETERS !This subroutine is used to chech the correctness of input
@@ -34,28 +34,43 @@ PROGRAM MAIN
XSTRING = TRIM(ADJUSTL(XSTRING))
CALL MEMORY_USE_ESTIMATION !This subroutine is used to estimate the total memory usage according to the input,
CALL ALLOCATEMEMORY !This subroutine is used to allocate the memory in Host.
WRITE(*,*)'Preparing the non-uniform grid.. .. .. ..'
CALL GET_NON_UNIFORMGRID !This subroutine is used to mesh the non-uniform grid model.
WRITE(*,*)'Preparing the grid.. .. .. ..'
IF(Logic_PML==1)THEN
WRITE(*,*)'Boundary condition: CPML absorbing boundary -> uniform grid meshing'
CALL GET_UNIFORM_GRID !CPML 吸收边界:采用均匀网格剖分(与参考实现 tem3dfdtd_第二版 的组合一致)
ELSE
WRITE(*,*)'Boundary condition: Dirichlet (zero-field) boundary -> non-uniform grid meshing'
CALL GET_NON_UNIFORMGRID !Dirichlet 边界:采用非均匀网格剖分(原版方式)
ENDIF
WRITE(*,*)'Initializing the parameters.. .. ..'
CALL ZERO !This subroutine is used to initialize the value of array.
WRITE(*,*)'Creating resistivity model.. .. ..'
CALL GET_COORDINATES
CALL Get_Receiver_Gridlabel !This subroutine is used to calculate the global coordinates and grid dispersion at the receiving point
CALL RES_CONFIGURE !This subroutine is used to distribute the resistivity (or conductivity) of the geology model to each grid
WRITE(*,*)'Creating computing time series.. .. ..'
CALL TIME_SERIOUS !This subroutine is used to creat the time series of the entire computation
WRITE(*,*)'Preparing array receiver points.. .. ..'
WRITE(*,*)'Starting computing.. .. ..'
CALL GET_SYS_TIMEDATA(SYS_TIME)
!CALL GET_SYS_TIMEDATA(SYS_TIME)
WRITE(10005,*)'----------------------',SYS_TIME,'----------------------'
call Get_eps_r !This subroutine is used to get the fictitious dielectric constant
IF(Logic_PML==1)THEN
call Get_pml_parameters !This subroutine is used to get the CPML sigma/alpha/kappa profiles and the den_* scaling arrays
ENDIF
call Get_mstop !This subroutine is used to cut the entire computation process into computation fractions
call GetSourcePosition !This subroutine is used to get the source position in the model.
call OpenRecFiles !This subroutine is used to open all the files for the record of simulation data.
call Iteration !This subroutine is the iteration subroutine of EM filed
call CloseRecFiles !This subroutine is used to close all the opened recording files
IF(Logic_PML==1)THEN
WRITE(*,*)'Starting CPML iteration (Iteration_cpml) .. .. .. ..'
call Iteration_cpml !CPML 吸收边界迭代子程序
ELSE
WRITE(*,*)'Starting Dirichlet iteration (Iteration) .. .. .. ..'
call Iteration !Dirichlet 边界迭代子程序(原版)
ENDIF
CALL FREE_MEMORY !This subroutine is used to deallocate all the memory allocated before iteration
CALL GET_SYS_TIMEDATA(SYS_TIME)
!CALL GET_SYS_TIMEDATA(SYS_TIME)
WRITE(10005,*)'----------------------',SYS_TIME,'----------------------'
WRITE(10005,*)'Computation finished£¡'
WRITE(10005,*)'Computation finished'
CLOSE(10005)
END PROGRAM MAIN