⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.f90

📁 FDS为火灾动力学模拟软件源代码,该软件为开源项目,代码语言主要为FORTRAN,可在WINDOWS和LINUX下编译运行,详细说明可参考http://fire.nist.gov/fds/官方网址
💻 F90
📖 第 1 页 / 共 2 页
字号:
      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 + -