?? dump.f90
字號:
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 + -