📄 dump.f90
字号:
WRITE(LU_DEVC(1),TCFORM) 's',(TRIM(OUTPUT_QUANTITY(DEVICE(N)%OUTPUT_INDEX)%UNITS),N=1,N_DEVC) WRITE(TCFORM,'(A,I4.4,A)') "(",N_DEVC,"(A,','),A)" WRITE(LU_DEVC(1),TCFORM) 'FDS Time',(TRIM(DEVICE(N)%ID),N=1,N_DEVC) ENDIF ENDIFENDIF! Initialize control output file (CHID_ctrl.csv) IF (N_CTRL>0) THEN IF (COLUMN_DUMP_LIMIT) THEN DO I = 1,N_CTRL_FILES IF (APPEND) THEN OPEN(LU_CTRL(I),FILE=FN_CTRL(I),FORM='FORMATTED',STATUS='OLD',POSITION='APPEND') ELSE OPEN(LU_CTRL(I),FILE=FN_CTRL(I),FORM='FORMATTED',STATUS='REPLACE') WRITE(TCFORM,'(A,I4.4,A)') "(",MIN(254, N_CTRL - 254 * (I - 1)),"(A,','),A)" WRITE(LU_CTRL(I),TCFORM) 's',('status',N=254 * (I - 1) + 1,MIN(N_CTRL, I * 254)) WRITE(TCFORM,'(A,I4.4,A)') "(",MIN(254, N_CTRL - 254 * (I - 1)),"(A,','),A)" WRITE(LU_CTRL(I),TCFORM) 'FDS Time',(TRIM(CONTROL(N)%ID),N=254 * (I - 1) + 1,MIN(N_CTRL, I * 254)) ENDIF ENDDO ELSE IF (APPEND) THEN OPEN(LU_CTRL(1),FILE=FN_CTRL(1),FORM='FORMATTED',STATUS='OLD',POSITION='APPEND') ELSE OPEN(LU_CTRL(1),FILE=FN_CTRL(1),FORM='FORMATTED',STATUS='REPLACE') WRITE(TCFORM,'(A,I4.4,A)') "(",N_CTRL,"(A,','),A)" WRITE(LU_CTRL(1),TCFORM) 's',('status',N=1,N_CTRL) WRITE(TCFORM,'(A,I4.4,A)') "(",N_CTRL,"(A,','),A)" WRITE(LU_CTRL(1),TCFORM) 'FDS Time',(TRIM(CONTROL(N)%ID),N=1,N_CTRL) ENDIF ENDIFENDIF! Open heat release rate file (CHID_hrr.csv) IF (APPEND) THEN OPEN(LU_HRR,FILE=FN_HRR,FORM='FORMATTED',STATUS='OLD',POSITION='APPEND')ELSE OPEN(LU_HRR,FILE=FN_HRR,FORM='FORMATTED',STATUS='REPLACE') WRITE(TCFORM,'(A,I4.4,A)') "(",5+N_ZONE,"(A,','),A)" WRITE(LU_HRR,TCFORM) 's','kW','kW','kW','kW','kg/s',('atm',N=1,N_ZONE) WRITE(LU_HRR,TCFORM) 'FDS_HRR_Time','HRR','RAD_LOSS','CONV_LOSS','COND_LOSS','BURN_RATE',(TRIM(P_ZONE(N)%ID),N=1,N_ZONE) ENDIF ! Write out info about mixture fraction-based state relationships for all mixture fraction SPECies DO N=1,N_SPECIES IF (SPECIES(N)%MODE==MIXTURE_FRACTION_SPECIES) THEN DZZ = 1._EB/10000._EB OPEN(LU_STATE(N),FILE=FN_STATE(N),FORM='FORMATTED',STATUS='REPLACE') WRITE(TCFORM,'(A,I4.4,A)') "(",10,"(A,','),A)" WRITE(LU_STATE(N),TCFORM) ('kg/kg',NN=1,10),'g/mol' WRITE(LU_STATE(N),TCFORM) 'Z','Fuel','O2','N2','H2O','CO2','CO','H2','Soot','Other','Wgt' WRITE(LU_STATE(N),'(10(ES12.4,","),ES12.4)') (K*DZZ,(SPECIES(N)%Y_MF(K,J),J=1,9),SPECIES(N)%MW_MF(K),K=0,10000,10) CLOSE(LU_STATE(N)) ENDIFENDDO ! Open species mass file IF_DUMP_SPECIES_INFO: IF (MASS_FILE) THEN IF (APPEND) THEN OPEN(LU_MASS,FILE=FN_MASS,FORM='FORMATTED',STATUS='OLD',POSITION='APPEND') ELSE OPEN(LU_MASS,FILE=FN_MASS,FORM='FORMATTED',STATUS='REPLACE') IF (MIXTURE_FRACTION) THEN LABEL(1) = 'Time' LABEL(2) = 'Total' LABEL(3) = 'Fuel' LABEL(4) = 'O2' LABEL(5) = 'N2' LABEL(6) = 'H2O' LABEL(7) = 'CO2' LABEL(8) = 'CO' LABEL(9) = 'H2' LABEL(10)= 'Soot' LABEL(11)= 'Other' NN = 11 DO N=1,N_SPECIES IF (SPECIES(N)%MODE==GAS_SPECIES) THEN NN = NN+1 LABEL(NN) = SPECIES(N)%NAME ENDIF ENDDO WRITE(TCFORM,'(A,I4.4,A)') "(",NN-1,"(A,','),A)" WRITE(LU_MASS,TCFORM) 's',('kg',N=1,NN-1) WRITE(LU_MASS,TCFORM) (TRIM(LABEL(N)),N=1,NN) ELSE WRITE(TCFORM,'(A,I4.4,A)') "(",N_SPECIES+1,"(A,','),A)" WRITE(LU_MASS,TCFORM) 's',('kg',N=0,N_SPECIES) WRITE(LU_MASS,TCFORM)'FDS Time','Total',(TRIM(SPECIES(N)%NAME),N=1,N_SPECIES) ENDIF ENDIFENDIF IF_DUMP_SPECIES_INFOTUSED(7,:) = TUSED(7,:) + SECOND() - TNOWEND SUBROUTINE INITIALIZE_GLOBAL_DUMPS SUBROUTINE INITIALIZE_MESH_DUMPS(NM)USE COMP_FUNCTIONS, ONLY : SECONDUSE MEMORY_FUNCTIONS, ONLY:RE_ALLOCATE_STRINGS,CHKMEMERR INTEGER, INTENT(IN) :: NMINTEGER :: IOR,IZERO,I,J,K,N,ERROR,I1,I2,J1,J2,K1,K2,I1B,I2B,IW,NN,NFCHARACTER(30) :: LABEL1,LABEL2,LABEL3REAL(EB) :: TNOW TNOW=SECOND() M => MESHES(NM) IBAR=>M%IBARJBAR=>M%JBARKBAR=>M%KBARIBP1=>M%IBP1JBP1=>M%JBP1KBP1=>M%KBP1 ! Compute grid coords in single precision for output ALLOCATE(M%XPLT(0:IBAR),STAT=IZERO)CALL ChkMemErr('DUMP','XPLT',IZERO)ALLOCATE(M%YPLT(0:JBAR),STAT=IZERO)CALL ChkMemErr('DUMP','YPLT',IZERO)ALLOCATE(M%ZPLT(0:KBAR),STAT=IZERO)CALL ChkMemErr('DUMP','ZPLT',IZERO) DO I=0,IBAR M%XPLT(I) = M%X(I)ENDDODO J=0,JBAR M%YPLT(J) = M%Y(J)ENDDODO K=0,KBAR M%ZPLT(K) = M%Z(K)ENDDO ! Initialize PLOT3D grid file (CHID.xyz) ALLOCATE(M%IBLK(0:IBAR,0:JBAR,0:KBAR),STAT=IZERO)CALL ChkMemErr('DUMP','IBLK',IZERO)ALLOCATE(M%QQ(0:IBP1,0:JBP1,0:KBP1,5),STAT=IZERO)CALL ChkMemErr('DUMP','QQ',IZERO)M%QQ=0._FB WRITE_XYZ_FILE: IF (WRITE_XYZ .AND..NOT.EVACUATION_ONLY(NM)) THEN OPEN(LU_XYZ(NM),FILE=FN_XYZ(NM),FORM='UNFORMATTED',STATUS='REPLACE') DO K=0,KBAR DO J=0,JBAR DO I=0,IBAR IF (M%SOLID(M%CELL_INDEX(I,J,K)) .AND. M%SOLID(M%CELL_INDEX(I+1,J,K)) .AND. & M%SOLID(M%CELL_INDEX(I,J+1,K)) .AND. M%SOLID(M%CELL_INDEX(I,J,K+1)) .AND. & M%SOLID(M%CELL_INDEX(I+1,J+1,K)).AND. M%SOLID(M%CELL_INDEX(I+1,J,K+1)) .AND. & M%SOLID(M%CELL_INDEX(I,J+1,K+1)).AND. M%SOLID(M%CELL_INDEX(I+1,J+1,K+1)) ) THEN M%IBLK(I,J,K) = 0 ELSE M%IBLK(I,J,K) = 1 ENDIF ENDDO ENDDO ENDDO WRITE(LU_XYZ(NM)) IBP1,JBP1,KBP1 WRITE(LU_XYZ(NM)) (((M%XPLT(I),I=0,IBAR),J=0,JBAR),K=0,KBAR),(((M%YPLT(J),I=0,IBAR),J=0,JBAR),K=0,KBAR), & (((M%ZPLT(K),I=0,IBAR),J=0,JBAR),K=0,KBAR),(((M%IBLK(I,J,K),I=0,IBAR),J=0,JBAR),K=0,KBAR) CLOSE(LU_XYZ(NM)) IF (M%N_STRINGS+2>M%N_STRINGS_MAX) THEN CALL RE_ALLOCATE_STRINGS(NM) ENDIF M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') 'XYZ' M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') FN_XYZ(NM)ENDIF WRITE_XYZ_FILE ! Re-allocate IBLK array for use with isosurface generation DEALLOCATE(M%IBLK)ALLOCATE(M%IBLK(1:IBAR,1:JBAR,1:KBAR),STAT=IZERO)CALL ChkMemErr('DUMP','IBLK',IZERO) ! Initialize isosurface file IF (.NOT.APPEND .AND. .NOT.EVACUATION_ONLY(NM)) THEN DO N=1,N_ISOF IS => ISOSURFACE_FILE(N) IF (M%N_STRINGS+5>M%N_STRINGS_MAX) CALL RE_ALLOCATE_STRINGS(NM) M%N_STRINGS = M%N_STRINGS + 1 IF (IS%INDEX2==0) THEN WRITE(M%STRING(M%N_STRINGS),'(A,1X,I2)') 'ISOF',NM ELSE WRITE(M%STRING(M%N_STRINGS),'(A,1X,I2)') 'TISOF',NM ENDIF M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') FN_ISOF(N,NM) M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(IS%INDEX)%NAME M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(IS%INDEX)%SHORT_NAME M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(IS%INDEX)%UNITS LABEL1 = TRIM(OUTPUT_QUANTITY(IS%INDEX)%NAME)//CHAR(0) LABEL2 = TRIM(OUTPUT_QUANTITY(IS%INDEX)%SHORT_NAME)//CHAR(0) LABEL3 = TRIM(OUTPUT_QUANTITY(IS%INDEX)%UNITS)//CHAR(0) ERROR = 0 IF (IS%INDEX2==0) CALL ISOHEADER(TRIM(FN_ISOF(N,NM))//CHAR(0),LABEL1,LABEL2,LABEL3, & IS%VALUE(1:IS%N_VALUES),IS%N_VALUES,ERROR) IF (IS%INDEX2/=0) CALL TISOHEADER(TRIM(FN_ISOF(N,NM))//CHAR(0),LABEL1,LABEL2,LABEL3, & IS%VALUE(1:IS%N_VALUES),IS%N_VALUES,ERROR) ENDDO ENDIF ! Initialize Smoke3d file SMOKE3D_INITIALIZATION: IF (SMOKE3D .AND..NOT.EVACUATION_ONLY(NM)) THEN IF (.NOT.APPEND) THEN IF (M%N_STRINGS+5>M%N_STRINGS_MAX) CALL RE_ALLOCATE_STRINGS(NM) M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A,1X,I4)') 'SMOKE3D',NM M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') FN_SMOKE3D(1,NM) M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(148)%NAME M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(148)%SHORT_NAME M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(148)%UNITS CALL SMOKE3DHEADER(TRIM(FN_SMOKE3D(1,NM))//CHAR(0),0,M%IBAR,0,M%JBAR,0,M%KBAR) ENDIF IF (.NOT.APPEND) THEN IF (M%N_STRINGS+5>M%N_STRINGS_MAX) CALL RE_ALLOCATE_STRINGS(NM) M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A,1X,I4)') 'SMOKE3D',NM M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') FN_SMOKE3D(2,NM) M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(11)%NAME M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(11)%SHORT_NAME M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(11)%UNITS CALL SMOKE3DHEADER(TRIM(FN_SMOKE3D(2,NM))//CHAR(0),0,M%IBAR,0,M%JBAR,0,M%KBAR) ENDIF ENDIF SMOKE3D_INITIALIZATION ! Initialize Slice Files DO N=1,M%N_SLCF SL => M%SLICE(N) IF (APPEND) THEN OPEN(LU_SLCF(N,NM),FILE=FN_SLCF(N,NM),FORM='UNFORMATTED',STATUS='OLD',POSITION='APPEND') ELSE IF (M%N_STRINGS+5>M%N_STRINGS_MAX) CALL RE_ALLOCATE_STRINGS(NM) M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A,1X,I4)') 'SLCF',NM M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') FN_SLCF(N,NM) M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(SL%INDEX)%NAME M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(SL%INDEX)%SHORT_NAME M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(SL%INDEX)%UNITS OPEN(LU_SLCF(N,NM),FILE=FN_SLCF(N,NM),FORM='UNFORMATTED',STATUS='REPLACE') WRITE(LU_SLCF(N,NM)) OUTPUT_QUANTITY(SL%INDEX)%NAME WRITE(LU_SLCF(N,NM)) OUTPUT_QUANTITY(SL%INDEX)%SHORT_NAME WRITE(LU_SLCF(N,NM)) OUTPUT_QUANTITY(SL%INDEX)%UNITS WRITE(LU_SLCF(N,NM)) SL%I1,SL%I2,SL%J1,SL%J2,SL%K1,SL%K2 ENDIFENDDO ! Initialize Boundary Files IF_BOUNDARY_FILES: IF (N_BNDF>0 .AND. .NOT.EVACUATION_ONLY(NM)) THEN I1B = MAX(IBP1,JBP1) I2B = MAX(JBP1,KBP1) ALLOCATE(M%PP(0:I1B,0:I2B),STAT=IZERO) CALL ChkMemErr('DUMP','PP',IZERO) ALLOCATE(M%PPN(0:I1B,0:I2B),STAT=IZERO) CALL ChkMemErr('DUMP','PPN',IZERO) ALLOCATE(M%IBK(0:I1B,0:I2B),STAT=IZERO) CALL ChkMemErr('DUMP','IBK',IZERO) IF_NOT_APPEND: IF (.NOT.APPEND) THEN M%INC = 0 DO IW=1,M%NWC IOR = M%IJKW(4,IW) IF (M%BOUNDARY_TYPE(IW)==SOLID_BOUNDARY .OR. M%BOUNDARY_TYPE(IW)==NULL_BOUNDARY) M%INC(IOR,M%OBST_INDEX_W(IW)) = 1 ENDDO M%NPATCH = 0 DO N=0,M%N_OBST OB=>M%OBSTRUCTION(N) DO I=-3,3 IF (.NOT.OB%SHOW_BNDF(I)) M%INC(I,N) = 0 IF (M%INC(I,N)==1) M%NPATCH = M%NPATCH + 1 ENDDO ENDDO ENDIF IF_NOT_APPENDENDIF IF_BOUNDARY_FILES BOUNDARY_FILES: DO NF=1,N_BNDF BF => BOUNDARY_FILE(NF) IF (M%NPATCH==0) EXIT BOUNDARY_FILES IF (EVACUATION_ONLY(NM)) EXIT BOUNDARY_FILES RESTART: IF (APPEND) THEN OPEN(LU_BNDF(NF,NM),FILE=FN_BNDF(NF,NM),FORM='UNFORMATTED',STATUS='OLD',POSITION='APPEND') ELSE RESTART IF (M%N_STRINGS+5>M%N_STRINGS_MAX) CALL RE_ALLOCATE_STRINGS(NM) M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A,1X,2I2)') 'BNDF',NM,1 M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') FN_BNDF(NF,NM) M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(BF%INDEX)%NAME M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(BF%INDEX)%SHORT_NAME M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') OUTPUT_QUANTITY(BF%INDEX)%UNITS OPEN(LU_BNDF(NF,NM),FILE=FN_BNDF(NF,NM),FORM='UNFORMATTED',STATUS='REPLACE') WRITE(LU_BNDF(NF,NM)) OUTPUT_QUANTITY(BF%INDEX)%NAME WRITE(LU_BNDF(NF,NM)) OUTPUT_QUANTITY(BF%INDEX)%SHORT_NAME WRITE(LU_BNDF(NF,NM)) OUTPUT_QUANTITY(BF%INDEX)%UNITS WRITE(LU_BNDF(NF,NM)) M%NPATCH IF (M%INC(-3,0)==1) WRITE(LU_BNDF(NF,NM)) 0,IBAR,0,JBAR,KBAR,KBAR,-3,0,NM IF (M%INC(-2,0)==1) WRITE(LU_BNDF(NF,NM)) 0,IBAR,JBAR,JBAR,0,KBAR,-2,0,NM IF (M%INC(-1,0)==1) WRITE(LU_BNDF(NF,NM)) IBAR,IBAR,0,JBAR,0,KBAR,-1,0,NM IF (M%INC( 1,0)==1) WRITE(LU_BNDF(NF,NM)) 0, 0,0,JBAR,0,KBAR, 1,0,NM IF (M%INC( 2,0)==1) WRITE(LU_BNDF(NF,NM)) 0,IBAR, 0,0,0,KBAR, 2,0,NM IF (M%INC( 3,0)==1) WRITE(LU_BNDF(NF,NM)) 0,IBAR, 0,JBAR,0,0, 3,0,NM DO N=1,M%N_OBST OB=>M%OBSTRUCTION(N) I1 = OB%I1 I2 = OB%I2 J1 = OB%J1 J2 = OB%J2 K1 = OB%K1 K2 = OB%K2 IF (M%INC(-3,N)==1) WRITE(LU_BNDF(NF,NM)) I1,I2,J1,J2,K1,K1,-3,N,NM IF (M%INC(-2,N)==1) WRITE(LU_BNDF(NF,NM)) I1,I2,J1,J1,K1,K2,-2,N,NM IF (M%INC(-1,N)==1) WRITE(LU_BNDF(NF,NM)) I1,I1,J1,J2,K1,K2,-1,N,NM IF (M%INC( 1,N)==1) WRITE(LU_BNDF(NF,NM)) I2,I2,J1,J2,K1,K2, 1,N,NM IF (M%INC( 2,N)==1) WRITE(LU_BNDF(NF,NM)) I1,I2,J2,J2,K1,K2, 2,N,NM IF (M%INC( 3,N)==1) WRITE(LU_BNDF(NF,NM)) I1,I2,J1,J2,K2,K2, 3,N,NM ENDDO ENDIF RESTART ENDDO BOUNDARY_FILES ! Initialize particle dump file DROPLET_IF: IF ( (DROPLET_FILE .AND. .NOT.EVACUATION_ONLY(NM)).OR. (EVACUATION_ONLY(NM).AND.EVACUATION_GRID(NM)) ) THEN APPEND_DROPLET_FILE: IF (APPEND) THEN OPEN(LU_PART(NM),FILE=FN_PART(NM),FORM='UNFORMATTED',STATUS='OLD',POSITION='APPEND') ELSE APPEND_DROPLET_FILE IF (M%N_STRINGS+10*N_PART>M%N_STRINGS_MAX) CALL RE_ALLOCATE_STRINGS(NM) EVAC_ONLY: IF (EVACUATION_ONLY(NM)) THEN M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A,I3)') 'EVA5',NM M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') FN_PART(NM) M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(I3)') N_EVAC DO N=1,N_EVAC M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(I3)') N+N_PART ENDDO ELSE M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A,I3)') 'PRT5',NM M%N_STRINGS = M%N_STRINGS + 1 WRITE(M%STRING(M%N_STRINGS),'(A)') FN_PART(NM)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -