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

📄 dump.f90

📁 FDS为火灾动力学模拟软件源代码,该软件为开源项目,代码语言主要为FORTRAN,可在WINDOWS和LINUX下编译运行,详细说明可参考http://fire.nist.gov/fds/官方网址
💻 F90
📖 第 1 页 / 共 5 页
字号:
MODULE DUMP ! Create and write (dump) to various output files USE PRECISION_PARAMETERSUSE MESH_VARIABLESUSE GLOBAL_CONSTANTSUSE TRANUSE ISODEFSUSE COMPRESSDEFSUSE MESH_POINTERSUSE DEVICE_VARIABLESUSE CONTROL_VARIABLESUSE TYPESIMPLICIT NONEPRIVATECHARACTER(50), DIMENSION(:), ALLOCATABLE :: FNDUMPINTEGER, PARAMETER :: ONE_INTEGER=1,ZERO_INTEGER=0INTEGER, DIMENSION(:), ALLOCATABLE :: LUDUMPREAL(EB), POINTER, DIMENSION(:,:,:) :: WFX,WFY,WFZINTEGER :: N_DEVC_FILESCHARACTER(50) :: TCFORMLOGICAL :: EXCHARACTER(255), PARAMETER :: dumpid='$Id: dump.f90 719 2007-10-01 17:09:23Z mcgratta $'CHARACTER(255), PARAMETER :: dumprev='$Revision: 719 $'CHARACTER(255), PARAMETER :: dumpdate='$Date: 2007-10-01 13:09:23 -0400 (Mon, 01 Oct 2007) $'TYPE (MESH_TYPE), POINTER :: MTYPE (DROPLET_TYPE), POINTER :: DRTYPE (OBSTRUCTION_TYPE), POINTER :: OBTYPE (VENTS_TYPE), POINTER :: VTTYPE (PARTICLE_CLASS_TYPE), POINTER :: PCTYPE (SPECIES_TYPE), POINTER :: SSTYPE (REACTION_TYPE), POINTER :: RNTYPE (SURFACE_TYPE),POINTER :: SFTYPE (MATERIAL_TYPE),POINTER :: MLTYPE (PROPERTY_TYPE), POINTER :: PYTYPE (DEVICE_TYPE), POINTER :: DV, DV2TYPE (SLICE_TYPE), POINTER :: SLTYPE (WALL_TYPE), POINTER :: WCTYPE (BOUNDARY_FILE_TYPE), POINTER :: BFTYPE (ISOSURFACE_FILE_TYPE), POINTER :: ISPUBLIC ASSIGN_FILE_NAMES,INITIALIZE_GLOBAL_DUMPS,INITIALIZE_MESH_DUMPS, &       TIMINGS,FLUSH_GLOBAL_BUFFERS,FLUSH_LOCAL_BUFFERS,READ_RESTART,WRITE_DIAGNOSTICS, &       WRITE_SMOKEVIEW_FILE,DUMP_MESH_OUTPUTS,UPDATE_OUTPUTS,DUMP_DEVICES,DUMP_HRR,DUMP_MASS, DUMP_CONTROLS,&       GET_REV_dump       CONTAINS SUBROUTINE UPDATE_OUTPUTS(T,NM)USE COMP_FUNCTIONS, ONLY : SECONDREAL(EB) :: TNOWINTEGER, INTENT(IN) :: NMREAL(EB),INTENT(IN) :: TTNOW = SECOND()CALL UPDATE_HRR(NM)CALL UPDATE_MASS(NM)CALL UPDATE_DEVICES(T,NM)TUSED(7,NM) = TUSED(7,NM) + SECOND() - TNOWEND SUBROUTINE UPDATE_OUTPUTSSUBROUTINE DUMP_MESH_OUTPUTS(T,NM)USE COMP_FUNCTIONS, ONLY : SECONDREAL(EB) :: TNOWREAL(EB), INTENT(IN) :: TINTEGER, INTENT(IN) :: NMTNOW = SECOND()EVACUATION_DUMP: IF (ANY(EVACUATION_GRID) .AND. EVACUATION_ONLY(NM)) THEN! Dump the EVAC flowfieds for all EVAC meshes   CALL DUMP_SLCF(T-EVAC_DT_FLOWFIELD*EVAC_TIME_ITERATIONS,NM,0)ELSE   IF (T>=PART_CLOCK(NM).AND.DROPLET_FILE) THEN      IF (SYNCHRONIZE) THEN         CALL DUMP_PART(T,NM)      ELSE         CALL DUMP_PART(PART_CLOCK(NM),NM)      ENDIF            DO         PART_CLOCK(NM) = PART_CLOCK(NM) + DT_PART         IF (PART_CLOCK(NM)>=T) EXIT      ENDDO   ENDIF   IF (T>=ISOF_CLOCK(NM)) THEN      IF (SYNCHRONIZE) THEN         CALL DUMP_ISOF(T,NM)      ELSE         CALL DUMP_ISOF(ISOF_CLOCK(NM),NM)      ENDIF      DO         ISOF_CLOCK(NM) = ISOF_CLOCK(NM) + DT_ISOF         IF (ISOF_CLOCK(NM)>=T) EXIT      ENDDO   ENDIF   IF (T>=SLCF_CLOCK(NM)) THEN      IF (SYNCHRONIZE) THEN         CALL DUMP_SLCF(T,NM,0)      ELSE         CALL DUMP_SLCF(SLCF_CLOCK(NM),NM,0)      ENDIF      IF (SMOKE3D) CALL DUMP_SMOKE3D(SLCF_CLOCK(NM),NM)      DO         SLCF_CLOCK(NM) = SLCF_CLOCK(NM) + DT_SLCF         IF (SLCF_CLOCK(NM)>=T) EXIT      ENDDO   ENDIF   IF (T>=BNDF_CLOCK(NM)) THEN      IF (SYNCHRONIZE) THEN         CALL DUMP_BNDF(T,NM)      ELSE         CALL DUMP_BNDF(BNDF_CLOCK(NM),NM)      ENDIF      DO         BNDF_CLOCK(NM) = BNDF_CLOCK(NM) + DT_BNDF         IF (BNDF_CLOCK(NM)>=T) EXIT      ENDDO   ENDIF   IF (T>=PL3D_CLOCK(NM) .OR. GLOBAL_STOP_STATUS/=NO_STOP) THEN      CALL DUMP_SLCF(T,NM,1)      DO         PL3D_CLOCK(NM) = PL3D_CLOCK(NM) + DT_PL3D         IF (PL3D_CLOCK(NM)>=T) EXIT      ENDDO   ENDIF   IF (T>=PROF_CLOCK(NM)) THEN      IF (SYNCHRONIZE) THEN         CALL DUMP_PROF(T,NM)      ELSE         CALL DUMP_PROF(PROF_CLOCK(NM),NM)      ENDIF      DO         PROF_CLOCK(NM) = PROF_CLOCK(NM) + DT_PROF         IF (PROF_CLOCK(NM)>=T) EXIT      ENDDO   ENDIF   IF (T>=CORE_CLOCK(NM) .OR. GLOBAL_STOP_STATUS==USER_STOP) THEN      CALL DUMP_CORE(T,NM)      CORE_CLOCK(NM) = CORE_CLOCK(NM) + DT_RESTART   ENDIFENDIF EVACUATION_DUMPTUSED(7,NM) = TUSED(7,NM) + SECOND() - TNOWEND SUBROUTINE DUMP_MESH_OUTPUTSSUBROUTINE ASSIGN_FILE_NAMES ! Assign names and logical units for all output files INTEGER :: NM,I,NCHARACTER(30) :: CFORM ! Endian FileLU_END = 2FN_END = TRIM(CHID)//'.end'! Smokeview FileLU_SMV = 4FN_SMV = TRIM(CHID)//'.smv'! Diagnostic Output FileLU_OUTPUT = 6FN_OUTPUT = TRIM(CHID)//'.out'! Mass and HRR FilesLU_MASS  = 11FN_MASS  = TRIM(CHID)//'_mass.csv'LU_HRR   = 12FN_HRR   = TRIM(CHID)//'_hrr.csv'! Evacuation filesLU_EVACCSV = 121FN_EVACCSV = TRIM(CHID)//'_evac.csv'LU_EVACEFF = 122FN_EVACEFF = TRIM(CHID)//'_evac.eff'LU_EVACFED = 123FN_EVACFED = TRIM(CHID)//'_evac.fed'! Device and Control FilesIF (COLUMN_DUMP_LIMIT) THEN    N_DEVC_FILES = N_DEVC / 254   IF (N_DEVC_FILES * 254 < N_DEVC) N_DEVC_FILES = N_DEVC_FILES + 1   N_CTRL_FILES = N_CTRL / 254   IF (N_CTRL_FILES * 254 < N_CTRL) N_CTRL_FILES = N_CTRL_FILES + 1ELSE   IF (N_DEVC > 1) N_DEVC_FILES = 1   IF (N_CTRL > 1) N_CTRL_FILES = 1ENDIFALLOCATE(LU_DEVC(N_DEVC_FILES))ALLOCATE(FN_DEVC(N_DEVC_FILES))ALLOCATE(LU_CTRL(N_CTRL_FILES))ALLOCATE(FN_CTRL(N_CTRL_FILES))DO I=1,N_DEVC_FILES   LU_DEVC(I) = 20 + I   WRITE(FN_DEVC(I),'(A,A,I0,A)') TRIM(CHID),'_',I,'_devc.csv'ENDDO         IF (N_DEVC_FILES==1) FN_DEVC(1) = TRIM(CHID)//'_devc.csv'DO I=1,N_CTRL_FILES   LU_CTRL(I) = 30 + I   WRITE(FN_CTRL(I),'(A,A,I0,A)') TRIM(CHID),'_',I,'_ctrl.csv'ENDDO         IF (N_CTRL_FILES==1) FN_CTRL(1) = TRIM(CHID)//'_ctrl.csv'! Profile FilesALLOCATE(LU_PROF(N_PROF))ALLOCATE(FN_PROF(N_PROF))DO N=1,N_PROF   LU_PROF(N) = 4000 + N   IF (N_PROF <100) CFORM = '(A,A,I2.2,A)'   IF (N_PROF>=100) CFORM = '(A,A,I3.3,A)'   WRITE(FN_PROF(N),CFORM) TRIM(CHID),'_prof_',N,'.csv'ENDDO! State FilesALLOCATE(LU_STATE(N_SPECIES))ALLOCATE(FN_STATE(N_SPECIES))DO N=1,N_SPECIES      LU_STATE(N) = 40 + N   IF (SPECIES(N)%MODE==MIXTURE_FRACTION_SPECIES) THEN      WRITE(FN_STATE(N),'(A,A,I2.2,A)') TRIM(CHID),'_state_',N,'.csv'   ENDIFENDDO! Plot3DALLOCATE(FN_XYZ(NMESHES))ALLOCATE(LU_XYZ(NMESHES))ALLOCATE(FN_PL3D(NMESHES))ALLOCATE(LU_PL3D(NMESHES))ALLOCATE(FN_ISOF(N_ISOF,NMESHES))ALLOCATE(LU_ISOF(N_ISOF,NMESHES))ALLOCATE(FN_SLCF(N_SLCF_MAX,NMESHES))ALLOCATE(LU_SLCF(N_SLCF_MAX,NMESHES))ALLOCATE(FN_BNDF(N_BNDF,NMESHES))ALLOCATE(LU_BNDF(N_BNDF,NMESHES))ALLOCATE(FN_SMOKE3D(2,NMESHES))ALLOCATE(LU_SMOKE3D(2,NMESHES))ALLOCATE(FN_PART(NMESHES))ALLOCATE(LU_PART(NMESHES))ALLOCATE(FN_CORE(NMESHES))ALLOCATE(LU_CORE(NMESHES))ALLOCATE(FN_RESTART(NMESHES))ALLOCATE(LU_RESTART(NMESHES))MESH_LOOP: DO NM=1,NMESHES   M => MESHES(NM)   ! Plot3D Files   LU_XYZ(NM)  = 13   LU_PL3D(NM) = 14   IF (NMESHES >1) WRITE(FN_XYZ(NM),'(A,A,I2.2,A)') TRIM(CHID),'_',NM,'.xyz'   IF (NMESHES==1) WRITE(FN_XYZ(NM),'(A,A)')        TRIM(CHID),       '.xyz'   DO N=1,N_ISOF      IF (NMESHES >1) WRITE(FN_ISOF(N,NM),'(A,A,I2.2,A,I2.2,A)') TRIM(CHID),'_',NM,'_',N,'.iso'      IF (NMESHES==1) WRITE(FN_ISOF(N,NM),'(A,A,I2.2,A)')        TRIM(CHID),'_',N,'.iso'   ENDDO   IF (NMESHES >1) WRITE(FN_SMOKE3D(1,NM),'(A,A,I2.2,A)') TRIM(CHID),'_',NM,'_01.s3d'   IF (NMESHES==1) WRITE(FN_SMOKE3D(1,NM),'(A,A)')        TRIM(CHID),       '_01.s3d'   IF (NMESHES >1) WRITE(FN_SMOKE3D(2,NM),'(A,A,I2.2,A)') TRIM(CHID),'_',NM,'_02.s3d'   IF (NMESHES==1) WRITE(FN_SMOKE3D(2,NM),'(A,A)')        TRIM(CHID),       '_02.s3d'   ! Slice Files   DO N=1,M%N_SLCF      LU_SLCF(N,NM) = 2000 + N_SLCF_MAX*(NM-1)  + N      IF (NMESHES>1) THEN         IF (M%N_SLCF <100) CFORM = '(A,2(A,I2.2),A)'         IF (M%N_SLCF>=100) CFORM = '(A,A,I2.2,A,I3.3,A)'         WRITE(FN_SLCF(N,NM),CFORM) TRIM(CHID),'_',NM,'_',N,'.sf'      ELSE         IF (M%N_SLCF <100) CFORM = '(A,A,I2.2,A)'         IF (M%N_SLCF>=100) CFORM = '(A,A,I3.3,A)'         WRITE(FN_SLCF(N,NM),CFORM) TRIM(CHID),'_',N,'.sf'      ENDIF   ENDDO   ! Boundary Files   DO N=1,N_BNDF      LU_BNDF(N,NM) = 3000 + N_BNDF*(NM-1) + N      IF (NMESHES>1) THEN         WRITE(FN_BNDF(N,NM),'(A,A,I2.2,A,I2.2,A)') TRIM(CHID),'_',NM,'_',N,'.bf'      ELSE         WRITE(FN_BNDF(N,NM),'(A,A,I2.2,A)') TRIM(CHID),'_',N,'.bf'      ENDIF   ENDDO   ! Particle Files   LU_PART(NM) = 7000 + NM   IF (NMESHES>1) THEN      WRITE(FN_PART(NM),'(A,I2.2,A)') TRIM(CHID)//'_',NM,'.prt5'   ELSE      WRITE(FN_PART(NM),'(A,A)') TRIM(CHID),'.prt5'   ENDIF   ! Restart Files   LU_RESTART(NM) = 90   WRITE(FN_RESTART(NM),'(A,A,I2.2,A)') TRIM(RESTART_CHID),'_',NM,'.restart'   LU_CORE(NM)    = 91   WRITE(FN_CORE(NM),   '(A,A,I2.2,A)') TRIM(CHID),'_',NM,'.restart'ENDDO MESH_LOOPEND SUBROUTINE ASSIGN_FILE_NAMESSUBROUTINE INITIALIZE_GLOBAL_DUMPS! Open and initialize all files that are not tied to a particular meshUSE COMP_FUNCTIONS, ONLY : SECONDUSE CONTROL_VARIABLESREAL(EB) :: DZZ,TNOWINTEGER :: NN,I,J,K,NCHARACTER(30), DIMENSION(20) :: LABELTNOW=SECOND() ! Open and initialize diagnostic output file IF (APPEND) THEN   INQUIRE(FILE=FN_OUTPUT,EXIST=EX)   IF (EX) OPEN(LU_OUTPUT,FILE=FN_OUTPUT,FORM='FORMATTED',STATUS='OLD',POSITION='APPEND')ELSE   OPEN(LU_OUTPUT,FILE=FN_OUTPUT,FORM='FORMATTED',STATUS='REPLACE')ENDIF CALL INITIALIZE_DIAGNOSTIC_FILE! Initialize device output file (CHID_devc.csv) IF (N_DEVC>0) THEN   IF (COLUMN_DUMP_LIMIT) THEN      DO I = 1,N_DEVC_FILES         IF (APPEND) THEN            OPEN(LU_DEVC(I),FILE=FN_DEVC(I),FORM='FORMATTED',STATUS='OLD',POSITION='APPEND')         ELSE            OPEN(LU_DEVC(I),FILE=FN_DEVC(I),FORM='FORMATTED',STATUS='REPLACE')            WRITE(TCFORM,'(A,I4.4,A)') "(",MIN(254, N_DEVC - 254 * (I - 1)),"(A,','),A)"            WRITE(LU_DEVC(I),TCFORM) 's',(TRIM(OUTPUT_QUANTITY(DEVICE(N)%OUTPUT_INDEX)%UNITS),N=254*(I-1)+1,MIN(N_DEVC,I*254))            WRITE(TCFORM,'(A,I4.4,A)') "(",MIN(254, N_DEVC - 254 * (I - 1)),"(A,','),A)"            WRITE(LU_DEVC(I),TCFORM) 'FDS Time',(TRIM(DEVICE(N)%ID),N=254 * (I - 1) + 1,MIN(N_DEVC, I * 254))         ENDIF      ENDDO   ELSE      IF (APPEND) THEN         OPEN(LU_DEVC(1),FILE=FN_DEVC(1),FORM='FORMATTED',STATUS='OLD',POSITION='APPEND')      ELSE         OPEN(LU_DEVC(1),FILE=FN_DEVC(1),FORM='FORMATTED',STATUS='REPLACE')         WRITE(TCFORM,'(A,I4.4,A)') "(",N_DEVC,"(A,','),A)"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -