文件
tem3dfdtd-open/tem3dfdtd/lib/tixing-source-upcos.f90
T
2026-08-14 20:51:58 +08:00

55 行
2.5 KiB
Fortran
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
!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/
!βҿغͽҿغ
SUBROUTINE TIXING_SOURCE_UPCOS
USE CONSTANTPARAMETERS
USE ELECTROMAGNETIC_VARIABLES
USE RES_MODEL_PARAMETER
USE TIME_PARAMETER
USE OMP_LIB
IMPLICIT NONE
REAL(KIND=8)T0
integer i,j,k
WAVESTEP=TIME_MAX !Time_max is given in Time_series subroutine: TIME_MAX=GridSize*SQRT(EPS0*MU0/3.0)
T0=1.13*MU0*SIGMA_MIN*GridSize*GridSize
CTIME(1)=0.0D0 !RAISESTEP !RAISETIME/STEP !1.13*MU0*DELX*DELX/RES(1,1,1)
DELT(1)=RAISESTEP !RAISETIME/STEP
DELT(0)=DELT(1)
SOURCE(1)=AMP*0.5*(1-COS(PI*CTIME(1)/RAISETIME)) !AMP*CTIME(1)/RAISETIME
DO I=2,NSTOP
CTIME(I)=CTIME(I-1)+DELT(I-1)
IF(CTIME(I) .LT. RAISETIME)THEN !Сraistime
DELT(I)=RAISESTEP
SOURCE(I)=AMP*0.5*(1-COS(PI*CTIME(I)/RAISETIME)) !AMP*CTIME(I)/RAISETIME
ELSEIF(CTIME(I) .GE. RAISETIME .AND. CTIME(I) .LT. RAISETIME+WAVE-TIME_RAMP2WAVE_SUM)THEN !RAISETIMEСڵCTIME(I)<RAISETIME+WAVE-TIME_RAMP2WAVE_SUM
DELT(I)=DELT(I-1)*1.0005
IF(DELT(I) .GE. WAVESTEP)THEN
DELT(I)=WAVESTEP
ENDIF
SOURCE(I)=AMP !1.0D0
ELSEIF(CTIME(I) .GE. RAISETIME+WAVE-TIME_RAMP2WAVE_SUM .AND. CTIME(I) .LT. RAISETIME+WAVE)THEN !RAISETIME+WAVE-TIME_RAMP2WAVE_SUMСڵCTIME(I)<RAISETIME+WAVE
DELT(I)=DELT(I-1)*0.9995
IF(DELT(I) .LE. RAMPSTEP)THEN
DELT(I)=RAMPSTEP
ENDIF
SOURCE(I)=AMP
ELSEIF(CTIME(I) .GE. RAISETIME+WAVE .AND. CTIME(I) .LT. RAISETIME+WAVE+RAMP)THEN
DELT(I)=RAMPSTEP
SOURCE(I)=AMP-AMP*0.5*(1-COS(PI*(CTIME(I)-RAISETIME-WAVE)/RAMP)) !+AMP*(+RAMP)/RAMP !-AMP*CTIME(I)/RAMP+AMP*(RAISETIME+WAVE+RAMP)/RAMP
ELSEIF(CTIME(I) .LT. RAISETIME+WAVE+RAMP+T0)THEN
DELT(I)=RAMPSTEP
SOURCE(I)=0.0D0
ELSE
DELT(I)=0.1*GridSize*SQRT(MU0*SIGMA_MIN*(CTIME(I)-RAISETIME-WAVE-RAMP)/6.0D0) !This can be changed if the value of GridSize is less than 1m.
SOURCE(I)=0.0D0
IF(DELT(I) .GT. 2.0D-7)THEN
DELT(I)=2.0D-7 !1.0D-9 !
ELSEIF(DELT(I) .LT. RAMPSTEP)THEN
DELT(I)=RAMPSTEP
ENDIF
ENDIF
ENDDO
RETURN
ENDSUBROUTINE TIXING_SOURCE_UPCOS