📄 main.f90
字号:
ENDIF IF (NIC(NOM,NM)==0 .AND. NIC(NM,NOM)==0) CYCLE OTHER_MESH_LOOP IF (CODE>0) THEN IF (.NOT.ACTIVE_MESH(NM) .OR. .NOT.ACTIVE_MESH(NOM)) CYCLE OTHER_MESH_LOOP ENDIF IF (DEBUG) WRITE(0,*) NOM,' receiving data from ',NM,' code=',CODE M =>MESHES(NM) M2=>MESHES(NOM)%OMESH(NM) M3=>MESHES(NM)%OMESH(NOM) M4=>MESHES(NOM) IMIN = I_MIN(NOM,NM) IMAX = I_MAX(NOM,NM) JMIN = J_MIN(NOM,NM) JMAX = J_MAX(NOM,NM) KMIN = K_MIN(NOM,NM) KMAX = K_MAX(NOM,NM) INITIALIZE_IF: IF (CODE==0 .AND. RADIATION) THEN DO IW=1,M%NEWC IF (M%IJKW(9,IW)==NOM) THEN ALLOCATE(M2%WALL(IW)%ILW(NRA,NSB)) M2%WALL(IW)%ILW = SIGMA*TMPA4*RPI ENDIF ENDDO ENDIF INITIALIZE_IF PREDICTOR_IF: IF (CODE==1 .AND. NIC(NOM,NM)>0) THEN M2%TMP(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX)= M%TMP(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX) M2%H(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX)= M%H(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX) IF (N_SPECIES>0) M2%YYS(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX,1:N_SPECIES)= M%YYS(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX,1:N_SPECIES) ENDIF PREDICTOR_IF CORRECTOR_IF: IF (CODE==0 .OR. CODE==2) THEN IF (NIC(NOM,NM)>0) THEN M2%BOUNDARY_TYPE(0:M%NEWC) = M%BOUNDARY_TYPE(0:M%NEWC) M2%TMP(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX)= M%TMP(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX) M2%H(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX)= M%H(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX) M2%U(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX)= M%U(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX) M2%V(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX)= M%V(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX) M2%W(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX)= M%W(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX) IF (N_SPECIES>0) M2%YY(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX,1:N_SPECIES)= M%YY(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX,1:N_SPECIES) ENDIF RADIATION_IF: IF (RADIATION .AND. CODE==2 .AND. NIC(NOM,NM)>0) THEN DO IW=1,M4%NEWC IF (M4%IJKW(9,IW)==NM .AND. M4%BOUNDARY_TYPE(IW)==INTERPOLATED_BOUNDARY) & M4%WALL(IW)%ILW(1:NRA,1:NSB) = M3%WALL(IW)%ILW(1:NRA,1:NSB) ENDDO ENDIF RADIATION_IF ENDIF CORRECTOR_IF ! Get Number of Droplet Orphans IF (DROPLET_FILE) THEN M2%N_DROP_ADOPT = MIN(M3%N_DROP_ORPHANS,N_DROP_ADOPT_MAX) IF (M4%NLP+M2%N_DROP_ADOPT>M4%NLPDIM) CALL RE_ALLOCATE_DROPLETS(1,NOM,0,N_DROP_ADOPT_MAX) ENDIF ! Sending/Receiving Droplet Buffer Arrays IF_DROPLETS: IF (DROPLET_FILE) THEN IF_DROPLETS_SENT: IF (M2%N_DROP_ADOPT>0) THEN M4%DROPLET(M4%NLP+1:M4%NLP+M2%N_DROP_ADOPT)= M3%DROPLET(1:M2%N_DROP_ADOPT) M4%NLP = M4%NLP + M2%N_DROP_ADOPT M3%N_DROP_ORPHANS = 0 ENDIF IF_DROPLETS_SENT ENDIF IF_DROPLETS ENDDO OTHER_MESH_LOOPENDDO MESH_LOOP TUSED(11,:)=TUSED(11,:) + SECOND() - TNOWEND SUBROUTINE MESH_EXCHANGE SUBROUTINE EXCHANGE_DIAGNOSTICS INTEGER :: NM,NECYC,IREAL(EB) :: T_SUM,TNOW TNOW = SECOND() MESH_LOOP: DO NM=1,NMESHES T_SUM = 0. SUM_LOOP: DO I=2,N_TIMERS IF (I==9 .OR. I==10) CYCLE SUM_LOOP T_SUM = T_SUM + TUSED(I,NM) ENDDO SUM_LOOP NECYC = MAX(1,NTCYC(NM)-NCYC(NM)) T_PER_STEP(NM) = (T_SUM-T_ACCUM(NM))/REAL(NECYC,EB) T_ACCUM(NM) = T_SUM NCYC(NM) = NTCYC(NM)ENDDO MESH_LOOP TUSED(11,:) = TUSED(11,:) + SECOND() - TNOWEND SUBROUTINE EXCHANGE_DIAGNOSTICS SUBROUTINE CORRECT_PRESSURE USE MATH_FUNCTIONS, ONLY : GAUSSJREAL(EB) :: A(NCGC,NCGC),B(NCGC),C(NMESHES),AA(NMESHES,NMESHES)TYPE (MESH_TYPE), POINTER :: MTYPE (OMESH_TYPE), POINTER :: OMINTEGER :: IERROR,NM!REAL(EB)::SUM1,SUM4,SUM,SUM41,SUM14,SUM23,SUM32,SUM13,SUM31, &!SUM25,SUM52,SUM36,SUM63,SUM12,SUM21,SUM34,SUM43,SUM15,SUM51 MESH_LOOP_1: DO NM=1,NMESHES OTHER_MESH_LOOP: DO NOM=1,NMESHES IF (NIC(NOM,NM)==0 .AND. NIC(NM,NOM)==0) CYCLE OTHER_MESH_LOOP M =>MESHES(NM) OM=>MESHES(NOM)%OMESH(NM) IMIN = I_MIN(NOM,NM) IMAX = I_MAX(NOM,NM) JMIN = J_MIN(NOM,NM) JMAX = J_MAX(NOM,NM) KMIN = K_MIN(NOM,NM) KMAX = K_MAX(NOM,NM) OM%H(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX)= M%H(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX) OM%FVX(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX)= M%FVX(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX) OM%FVY(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX)= M%FVY(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX) OM%FVZ(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX)= M%FVZ(IMIN:IMAX,JMIN:JMAX,KMIN:KMAX) ENDDO OTHER_MESH_LOOPENDDO MESH_LOOP_1 A = 0._EBB = 0._EB MESH_LOOP_2: DO NM=1,NMESHES CALL COMPUTE_A_B(A,B,NM)ENDDO MESH_LOOP_2 CALL GAUSSJ(A,NCGC,NCGC,B,1,1,IERROR) IF (IERROR>0) WRITE(0,*) ' COMPUTE B IERROR= ',IERROR MESH_LOOP_3: DO NM=1,NMESHESCALL COMPUTE_CORRECTION_PRESSURE(B,NM)ENDDO MESH_LOOP_3 AA = 0._EBC = 0._EB MESH_LOOP_4: DO NM=1,NMESHES CALL COMPUTE_C(AA,C,NM)ENDDO MESH_LOOP_4!!IF (ALL(SEALED)) THEN! AA(1,:) = 0._EB! AA(1,1) = 1._EB! C(1) = 0._EB!ENDIF!! DO I=1,NMESHES! WRITE(0,'(9E12.5,3X,E12.5)') (A(I,J),J=1,NMESHES),C(I)! ENDDO!CALL GAUSSJ(AA,NMESHES,NMESHES,C,1,1,IERROR)IF (IERROR>0) WRITE(0,*) ' COMPUTE_C IERROR= ',IERROR! DO I=1,NMESHES! WRITE(0,'(E12.5)') C(I)! ENDDO!MESH_LOOP_5: DO NM=1,NMESHES CALL UPDATE_PRESSURE(C,NM)ENDDO MESH_LOOP_5!!SUM=0._EB!SUM1=0._EB!SUM4=0._EB!SUM14=0._EB!SUM41=0._EB!SUM23=0._EB!SUM32=0._EB!SUM25=0._EB!SUM52=0._EB!SUM36=0._EB!SUM63=0._EB!SUM12=0._EB!SUM13=0._EB!SUM31=0._EB!SUM21=0._EB!SUM34=0._EB!SUM32=0._EB!SUM43=0._EB!SUM15=0._EB!SUM51=0._EB!DO K=1,20!SUM12=SUM12+MESHES(1)%DZ(K)*MESHES(1)%DY(1)*MESHES(1)%U(75,1,K)!SUM21=SUM21+MESHES(2)%DZ(K)*MESHES(2)%DY(1)*MESHES(2)%U( 0,1,K)!SUM23=SUM23+MESHES(2)%DZ(K)*MESHES(2)%DY(1)*MESHES(2)%U(75,1,K)!SUM32=SUM32+MESHES(3)%DZ(K)*MESHES(3)%DY(1)*MESHES(3)%U( 0,1,K)!SUM34=SUM34+MESHES(3)%DZ(K)*MESHES(3)%DY(1)*MESHES(3)%U(75,1,K)!SUM43=SUM43+MESHES(4)%DZ(K)*MESHES(4)%DY(1)*MESHES(4)%U( 0,1,K)!ENDDO!! WRITE(0,*) 'SUM12=',SUM12,' SUM21=',SUM21! WRITE(0,*) 'SUM23=',SUM23,' SUM32=',SUM32! IF (CORRECTOR) THEN! WRITE(0,*) MESHES(4)%U(0,1, 1),MESHES(4)%W(1,1, 0)! WRITE(0,*) MESHES(3)%U(0,1,10),MESHES(3)%W(1,1,10)! WRITE(0,*)! ENDIF!END SUBROUTINE CORRECT_PRESSURESUBROUTINE WRITE_STRINGS ! Write character strings out to the .smv fileINTEGER :: N,NM MESH_LOOP: DO NM=1,NMESHES DO N=1,MESHES(NM)%N_STRINGS WRITE(LU_SMV,'(A)') TRIM(MESHES(NM)%STRING(N)) ENDDO MESHES(NM)%N_STRINGS = 0ENDDO MESH_LOOP END SUBROUTINE WRITE_STRINGSSUBROUTINE DUMP_GLOBAL_OUTPUTS(T)USE COMP_FUNCTIONS, ONLY :SECONDREAL(EB), INTENT(IN) :: TREAL(EB) :: TNOWTNOW = SECOND()! Dump out HRR infoIF (T>=HRR_CLOCK .AND. MINVAL(HRR_COUNT,MASK=.NOT.EVACUATION_ONLY)>0._EB) THEN CALL DUMP_HRR(T) HRR_CLOCK = HRR_CLOCK + DT_HRR HRR_SUM = 0. RHRR_SUM = 0. CHRR_SUM = 0. FHRR_SUM = 0. MLR_SUM = 0. HRR_COUNT = 0.ENDIF! Dump out Evac infoCALL EVAC_CSV(T)! Dump out Mass infoIF (T>=MINT_CLOCK .AND. MINVAL(MINT_COUNT,MASK=.NOT.EVACUATION_ONLY)>0._EB) THEN CALL DUMP_MASS(T) MINT_CLOCK = MINT_CLOCK + DT_MASS MINT_SUM = 0._EB MINT_COUNT = 0._EBENDIF! Dump out DEViCe dataIF (T >= DEVC_CLOCK) THEN IF (MINVAL(DEVICE(1:N_DEVC)%COUNT)/=0) THEN CALL DUMP_DEVICES(T) DEVC_CLOCK = DEVC_CLOCK + DT_DEVC DEVICE(1:N_DEVC)%VALUE = 0. DEVICE(1:N_DEVC)%COUNT = 0 ENDIFENDIF! Dump out ConTRoL dataIF (T >= CTRL_CLOCK) THEN CALL DUMP_CONTROLS(T) CTRL_CLOCK = CTRL_CLOCK + DT_CTRLENDIFTUSED(7,1) = TUSED(7,1) + SECOND() - TNOW END SUBROUTINE DUMP_GLOBAL_OUTPUTSSUBROUTINE EVAC_READ_DATAImplicit None ! Read input for EVACUATION routines IF (.Not. ANY(EVACUATION_GRID)) N_EVAC = 0IF (ANY(EVACUATION_GRID)) CALL READ_EVACEND SUBROUTINE EVAC_READ_DATASUBROUTINE INITIALIZE_EVAC(NM)Implicit None ! Initialize evacuation meshes INTEGER, INTENT(IN) :: NM IF (ANY(EVACUATION_GRID)) CALL INITIALIZE_EVACUATION(NM,MESH_STOP_STATUS(NM))! IF (EVACUATION_ONLY(NM)) T(NM) = -EVAC_DT_FLOWFIELD*EVAC_TIME_ITERATIONSIF (EVACUATION_GRID(NM)) PART_CLOCK(NM) = T_EVAC + DT_PARTIF (EVACUATION_GRID(NM)) CALL DUMP_EVAC(T_EVAC,NM)IF (ANY(EVACUATION_GRID)) ICYC = -EVAC_TIME_ITERATIONSEND SUBROUTINE INITIALIZE_EVACSUBROUTINE INIT_EVAC_DUMPSImplicit None ! Initialize evacuation dumps T_EVAC = - EVAC_DT_FLOWFIELD*EVAC_TIME_ITERATIONST_EVAC_SAVE = T_EVACIF (ANY(EVACUATION_GRID)) CALL INITIALIZE_EVAC_DUMPSEND SUBROUTINE INIT_EVAC_DUMPSSUBROUTINE EVAC_CSV(T)Implicit NoneREAL(EB), INTENT(IN) :: T ! Dump out Evac info IF (T>=EVAC_CLOCK .AND. ANY(EVACUATION_GRID)) THEN CALL DUMP_EVAC_CSV(T) EVAC_CLOCK = EVAC_CLOCK + DT_HRRENDIFEND SUBROUTINE EVAC_CSVSUBROUTINE EVAC_EXCHANGEImplicit None ! Fire mesh information ==> Evac meshes IF (.NOT.ANY(EVACUATION_GRID)) RETURNIF (ANY(EVACUATION_GRID)) CALL EVAC_MESH_EXCHANGE(T_EVAC,T_EVAC_SAVE,I_EVAC,ICYC)END SUBROUTINE EVAC_EXCHANGESUBROUTINE EVAC_PRESSURE_LOOP(NM)Implicit None ! Evacuation flow field calculation INTEGER, INTENT(IN) :: NMINTEGER :: N IF (EVACUATION_ONLY(NM)) THEN PRESSURE_ITERATION_LOOP: DO N=1,EVAC_PRESSURE_ITERATIONS CALL NO_FLUX CALL PRESSURE_SOLVER(NM) ENDDO PRESSURE_ITERATION_LOOPEND IFEND SUBROUTINE EVAC_PRESSURE_LOOPSUBROUTINE EVAC_MAIN_LOOPImplicit None ! Call evacuation routine and adjust time steps for evac meshes REAL(EB) :: T_FIRE, FIRE_DT IF (.NOT.ANY(EVACUATION_GRID)) RETURN IF (ANY(EVACUATION_ONLY).AND.(ICYC <= 0)) ACTIVE_MESH = .FALSE.EVAC_DT = EVAC_DT_STEADY_STATEIF (ICYC < 1) EVAC_DT = EVAC_DT_FLOWFIELDT_FIRE = T_EVAC + EVAC_DTIF (ICYC > 0) THEN IF (.NOT.ALL(EVACUATION_ONLY)) THEN T_FIRE = MINVAL(T,MASK= (.NOT.EVACUATION_ONLY).AND.ACTIVE_MESH) DTNEXT_SYNC(1:NMESHES) = MESHES(1:NMESHES)%DTNEXT FIRE_DT = MINVAL(DTNEXT_SYNC,MASK= (.NOT.EVACUATION_ONLY).AND.ACTIVE_MESH) T_FIRE = T_FIRE + FIRE_DT ENDIFENDIFEVAC_TIME_STEP_LOOP: DO WHILE (T_EVAC < T_FIRE) T_EVAC = T_EVAC + EVAC_DT DO NM=1,NMESHES IF (EVACUATION_ONLY(NM)) THEN ACTIVE_MESH(NM) = .FALSE. CHANGE_TIME_STEP(NM) = .FALSE. MESHES(NM)%DT = EVAC_DT MESHES(NM)%DTNEXT = EVAC_DT T(NM) = T_EVAC IF (ICYC <= 1 .And. .Not. BTEST(I_EVAC,2) ) THEN IF (ICYC <= 0) ACTIVE_MESH(NM) = .TRUE. IF (ICYC <= 0) T(NM) = T_EVAC + EVAC_DT_FLOWFIELD*EVAC_TIME_ITERATIONS - EVAC_DT ENDIF IF (EVACUATION_GRID(NM) ) THEN CALL EVACUATE_HUMANS(T_EVAC,NM,ICYC) IF (T_EVAC >= PART_CLOCK(NM)) THEN CALL DUMP_EVAC(T_EVAC,NM) DO PART_CLOCK(NM) = PART_CLOCK(NM) + DT_PART IF (PART_CLOCK(NM) >= T_EVAC) EXIT ENDDO ENDIF ENDIF ENDIF ENDDO IF (ICYC < 1) EXIT EVAC_TIME_STEP_LOOPENDDO EVAC_TIME_STEP_LOOPEND SUBROUTINE EVAC_MAIN_LOOPSUBROUTINE GET_REVISION_NUMBER(REV_NUMBER,REV_DATE)USE isodefs, ONLY : GET_REV_smvvUSE POIS, ONLY : GET_REV_poisUSE COMP_FUNCTIONS, ONLY : GET_REV_funcUSE MESH_POINTERS, ONLY : GET_REV_meshUSE RADCALV, ONLY : GET_REV_iradUSE DCDFLIB, ONLY : GET_REV_ievaINTEGER,INTENT(INOUT) :: REV_NUMBERCHARACTER(255),INTENT(INOUT) :: REV_DATEINTEGER :: MODULE_REVCHARACTER(255) :: MODULE_DATECALL GET_REV_cons(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_ctrl(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_devc(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_divg(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_dump(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_evac(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_fire(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_func(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_ieva(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_init(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_irad(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_mass(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_mesh(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_part(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_pois(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_prec(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_pres(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_radi(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_read(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_smvv(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_type(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_velo(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFCALL GET_REV_wall(MODULE_REV,MODULE_DATE)IF (MODULE_REV > REV_NUMBER) THEN REV_NUMBER = MODULE_REV WRITE(REV_DATE,'(A)') MODULE_DATEENDIFEND SUBROUTINE GET_REVISION_NUMBER END PROGRAM FDS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -