Skip to content

Commit 206c5ae

Browse files
authored
Merge pull request #14206 from gforney/smoke
FDS source: output 3D smoke using density
2 parents 9c6a89b + d542c7e commit 206c5ae

File tree

6 files changed

+712
-74
lines changed

6 files changed

+712
-74
lines changed

Manuals/FDS_User_Guide/FDS_User_Guide.tex

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10070,7 +10070,6 @@ \section{Plot3D Static Data Dumps}
1007010070

1007110071
\section{SMOKE3D: Realistic Smoke and Fire}
1007210072
\label{info:SMOKE3D}
10073-
\label{info:smoke16}
1007410073

1007510074
For any simulation involving combustion, FDS automatically creates three output files that are rendered by Smokeview as realistic looking smoke, fire, and/or hot gas. By default, the output quantities are the \ct{'DENSITY'} of \ct{'SOOT'}, the \ct{'HRRPUV'} (Heat Release Rate Per Unit Volume), and the \ct{TEMPERATURE} of the gases. These quantities are rendered as semi-transparent slices that give you the illusion of looking through smoke or fire. The greater the value of the quantity, the darker the slices will appear en masse. For \ct{HRRPUV}, the lowest value rendered is:
1007610075
\be
@@ -10085,7 +10084,7 @@ \section{SMOKE3D: Realistic Smoke and Fire}
1008510084
\end{lstlisting}
1008610085
The \ct{MASS_EXTINCTION_COEFFICIENT} is passed to Smokeview to be used for visualization.
1008710086

10088-
FDS outputs 3D smoke quantities as 8 bit integers compressed using run length encoding. Soot density, HRRPUV or temperatures are first scaled to 8 bit integers (soot density is converted to an opacity first). Repeated integers are replaced by $n$I where $n$ is the number of repeats and I is the value repeated. When higher resolution is desired, set \ct{SMOKE3D_16=T} on the \ct{MISC} line to output these quantities as 16 bit integers. For each time frame, FDS then outputs the time, the minimum value, the maximum value, and 16 bit integers scaled between the minimum and maximum value. This data is then output to a file with extension \ct{.s16} rather than \ct{.s3d} . These 16 bit integer values are not compressed.
10087+
FDS outputs 3D smoke quantities as 8 bit integers compressed using run length encoding. Soot density, HRRPUV or temperatures are first scaled to 8 bit integers (soot density is converted to an opacity first). Repeated integers are replaced by $n$I where $n$ is the number of repeats and I is the value repeated.
1008910088

1009010089
\newpage
1009110090

@@ -12655,7 +12654,6 @@ \section{\texorpdfstring{{\tt MISC}}{MISC} (Miscellaneous Parameters)}
1265512654
\ct{RND_SEED} & Integer & Section~\ref{info:restart} & & \\ \hline
1265612655
\ct{SC} & Real & Section~\ref{info:NOISE} & & 0.5 \\ \hline
1265712656
\ct{SIMULATION_MODE} & Character & Section~\ref{Sim_Mode} & & \ct{'VLES'} \\ \hline
12658-
\ct{SMOKE3D_16} & Logical & Section~\ref{info:smoke16} & & \ct{F} \\ \hline
1265912657
\ct{SMOKE_ALBEDO} & Real & Reference~\cite{Smokeview_Users_Guide} & & 0.3 \\ \hline
1266012658
\ct{SOLID_PHASE_ONLY} & Logical & Section~\ref{solid_phase_verification} & & \ct{F} \\ \hline
1266112659
\ct{SOOT_DENSITY} & Real & Section~\ref{info:deposition} & & 1800 \\ \hline

Source/cons.f90

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,6 @@ MODULE GLOBAL_CONSTANTS
267267
LOGICAL :: NO_PRESSURE_ZONES=.FALSE. !< Flag to suppress pressure zones
268268
LOGICAL :: CTRL_DIRECT_FORCE=.FALSE. !< Allow adjustable direct force via CTRL logic
269269
LOGICAL :: REACTING_THIN_OBSTRUCTIONS=.FALSE. !< Thin obstructions that off-gas are present
270-
LOGICAL :: SMOKE3D_16=.FALSE. !< Output 3D smoke values using 16 bit integers
271270
LOGICAL :: CHECK_BOUNDARY_ONE_D_ARRAYS=.FALSE. !< Flag that indicates that ONE_D array dimensions need to be checked
272271
LOGICAL :: TENSOR_DIFFUSIVITY=.FALSE. !< If true, use experimental tensor diffusivity model for spec and tmp
273272
LOGICAL :: OXPYRO_MODEL=.FALSE. !< Flag to use oxidative pyrolysis mass transfer model
@@ -736,17 +735,17 @@ MODULE GLOBAL_CONSTANTS
736735
REAL(EB), ALLOCATABLE, DIMENSION(:) :: VIEW_ANGLE_FACTOR !< View angle area ORIENTATION_VECTOR
737736
INTEGER :: N_ORIENTATION_VECTOR !< Number of ORIENTATION_VECTORs
738737

739-
INTEGER :: TGA_MESH_INDEX=HUGE(INTEGER_ONE) !< Mesh for the special TGA calculation
740-
INTEGER :: TGA_SURF_INDEX=-100 !< Surface properties to use for special TGA calculation
741-
INTEGER :: TGA_WALL_INDEX=-100 !< Wall index to use for special TGA calculation
742-
INTEGER :: TGA_PARTICLE_INDEX=-100 !< Particle index to use for special TGA calculation
743-
REAL(EB) :: TGA_DT=0.01_EB !< Time step (s) to use for special TGA calculation
744-
REAL(EB) :: TGA_DUMP=1._EB !< Temperature output interval (K), starting at TMPA, to use for special TGA calculation
745-
REAL(EB) :: TGA_HEATING_RATE=5._EB !< Heat rate (K/min) to use for special TGA calculation
746-
REAL(EB) :: TGA_FINAL_TEMPERATURE=800._EB !< Final Temperature (C) to use for special TGA calculation
747-
REAL(EB) :: TGA_CONVERSION_FACTOR=1._EB !< Conversion factor for TGA output
748-
REAL(EB) :: MCC_CONVERSION_FACTOR=1._EB !< Conversion factor for MCC output
749-
REAL(EB) :: DSC_CONVERSION_FACTOR=1._EB !< Conversion factor for DSC output
738+
INTEGER :: TGA_MESH_INDEX=HUGE(INTEGER_ONE) !< Mesh for the special TGA calculation
739+
INTEGER :: TGA_SURF_INDEX=-100 !< Surface properties to use for special TGA calculation
740+
INTEGER :: TGA_WALL_INDEX=-100 !< Wall index to use for special TGA calculation
741+
INTEGER :: TGA_PARTICLE_INDEX=-100 !< Particle index to use for special TGA calculation
742+
REAL(EB) :: TGA_DT=0.01_EB !< Time step (s) to use for special TGA calculation
743+
REAL(EB) :: TGA_DUMP=1._EB !< Temperature output interval (K), starting at TMPA, to use for special TGA calculation
744+
REAL(EB) :: TGA_HEATING_RATE=5._EB !< Heat rate (K/min) to use for special TGA calculation
745+
REAL(EB) :: TGA_FINAL_TEMPERATURE=800._EB !< Final Temperature (C) to use for special TGA calculation
746+
REAL(EB) :: TGA_CONVERSION_FACTOR=1._EB !< Conversion factor for TGA output
747+
REAL(EB) :: MCC_CONVERSION_FACTOR=1._EB !< Conversion factor for MCC output
748+
REAL(EB) :: DSC_CONVERSION_FACTOR=1._EB !< Conversion factor for DSC output
750749

751750
LOGICAL :: IBLANK_SMV=.TRUE. !< Parameter passed to smokeview (in .smv file) to control generation of blockages
752751

Source/dump.f90

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -393,13 +393,8 @@ SUBROUTINE ASSIGN_FILE_NAMES
393393
ALLOCATE(FN_TERRAIN(NMESHES))
394394
ALLOCATE(LU_TERRAIN(NMESHES))
395395
ENDIF
396-
IF (.NOT.SMOKE3D_16) THEN
397-
ALLOCATE(FN_SMOKE3D(N_SMOKE3D*2,NMESHES))
398-
ALLOCATE(LU_SMOKE3D(N_SMOKE3D*2,NMESHES))
399-
ELSE
400-
ALLOCATE(FN_SMOKE3D(N_SMOKE3D*3,NMESHES)) ! also allocate unit numbers and file names for the size files
401-
ALLOCATE(LU_SMOKE3D(N_SMOKE3D*3,NMESHES)) ! and the SMOKE3D_16 files (16 bit integers)
402-
ENDIF
396+
ALLOCATE(FN_SMOKE3D(N_SMOKE3D*3,NMESHES)) ! also allocate unit numbers and file names for the size files
397+
ALLOCATE(LU_SMOKE3D(N_SMOKE3D*3,NMESHES)) ! and the SMOKE3D_DENSITY files
403398
ALLOCATE(FN_PART(2*NMESHES))
404399
ALLOCATE(LU_PART(2*NMESHES))
405400
ALLOCATE(FN_CORE(NMESHES))
@@ -445,10 +440,8 @@ SUBROUTINE ASSIGN_FILE_NAMES
445440
WRITE(FN_SMOKE3D(N,NM), '(A,A,I0,A,I0,A)') TRIM(RESULTS_DIR)//TRIM(CHID),'_',NM,'_',N,'.s3d'
446441
LU_SMOKE3D(N+N_SMOKE3D,NM) = GET_FILE_NUMBER()
447442
WRITE(FN_SMOKE3D(N+N_SMOKE3D,NM),'(A,A,I0,A,I0,A)') TRIM(RESULTS_DIR)//TRIM(CHID),'_',NM,'_',N,'.s3d.sz'
448-
IF (SMOKE3D_16) THEN
449-
LU_SMOKE3D(N+2*N_SMOKE3D,NM) = GET_FILE_NUMBER()
450-
WRITE(FN_SMOKE3D(N+2*N_SMOKE3D,NM), '(A,A,I0,A,I0,A)') TRIM(RESULTS_DIR)//TRIM(CHID),'_',NM,'_',N,'.s16'
451-
ENDIF
443+
LU_SMOKE3D(N+2*N_SMOKE3D,NM) = GET_FILE_NUMBER()
444+
WRITE(FN_SMOKE3D(N+2*N_SMOKE3D,NM), '(A,A,I0,A,I0,A)') TRIM(RESULTS_DIR)//TRIM(CHID),'_',NM,'_',N,'.s3dd'
452445
ENDDO
453446

454447
! Slice Files
@@ -906,7 +899,6 @@ SUBROUTINE INITIALIZE_MESH_DUMPS(NM)
906899
TYPE(PATCH_TYPE), POINTER :: PA
907900
TYPE(MESH_TYPE), POINTER :: M4
908901
INTEGER :: CC_VAL,NSTEPS
909-
INTEGER :: SMOKE3D_16_COMPRESS, SMOKE3D_16_VERSION
910902
LOGICAL :: OVERLAPPING_X,OVERLAPPING_Y,OVERLAPPING_Z
911903
TYPE (BOUNDARY_COORD_TYPE), POINTER :: BC
912904
TYPE (RAD_FILE_TYPE), POINTER :: RF
@@ -1075,11 +1067,9 @@ SUBROUTINE INITIALIZE_MESH_DUMPS(NM)
10751067
OPEN(LU_SMOKE3D(N+N_SMOKE3D,NM),FILE=FN_SMOKE3D(N+N_SMOKE3D,NM),FORM='FORMATTED',STATUS='REPLACE')
10761068
WRITE(LU_SMOKE3D(N+N_SMOKE3D,NM),*) INTEGER_ZERO
10771069
CLOSE(LU_SMOKE3D(N+N_SMOKE3D,NM))
1078-
IF (SMOKE3D_16) THEN
1079-
SMOKE3D_16_COMPRESS = 0
1080-
SMOKE3D_16_VERSION = 1
1070+
IF (SMOKE3D_FILE(N)%DISPLAY_TYPE=='GAS') THEN
10811071
OPEN(LU_SMOKE3D(N+2*N_SMOKE3D,NM), FILE=FN_SMOKE3D(N+2*N_SMOKE3D,NM),FORM='UNFORMATTED',STATUS='REPLACE')
1082-
WRITE(LU_SMOKE3D(N+2*N_SMOKE3D,NM)) INTEGER_ONE,SMOKE3D_16_VERSION,SMOKE3D_16_COMPRESS,M%IBP1,M%JBP1,M%KBP1
1072+
WRITE(LU_SMOKE3D(N+2*N_SMOKE3D,NM)) INTEGER_ONE,INTEGER_ZERO,0,M%IBAR,0,M%JBAR,0,M%KBAR
10831073
CLOSE(LU_SMOKE3D(N+2*N_SMOKE3D,NM))
10841074
ENDIF
10851075
IF (M%N_STRINGS+5>M%N_STRINGS_MAX) CALL RE_ALLOCATE_STRINGS(NM)
@@ -4451,7 +4441,7 @@ SUBROUTINE DUMP_SMOKE3D(T,DT,NM)
44514441

44524442
ALLOCATE(QQ_PACK(IBP1*JBP1*KBP1))
44534443
QQ_PACK = PACK(QQ(0:IBAR,0:JBAR,0:KBAR,1),MASK=.TRUE.)
4454-
CALL SMOKE3D_TO_FILE(NM,STIME,DXX,N,QQ_PACK,IBP1,JBP1,KBP1,SMOKE3D_16)
4444+
CALL SMOKE3D_TO_FILE(NM,STIME,DXX,N,QQ_PACK,IBP1,JBP1,KBP1)
44554445
DEALLOCATE(QQ_PACK)
44564446

44574447
ENDDO DATA_FILE_LOOP

Source/read.f90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1743,7 +1743,7 @@ SUBROUTINE READ_MISC
17431743
P_INF,RAMP_GX,RAMP_GY,RAMP_GZ,&
17441744
RAMP_UX,RAMP_UY,RAMP_UZ,RAMP_VX,RAMP_VY,RAMP_VZ,RAMP_WX,RAMP_WY,RAMP_WZ,&
17451745
RESTART,RESTART_CHID,SC,&
1746-
RND_SEED,SIMULATION_MODE,SMOKE3D_16,SMOKE_ALBEDO,SOLID_PHASE_ONLY,SOOT_DENSITY,SOOT_OXIDATION,&
1746+
RND_SEED,SIMULATION_MODE,SMOKE_ALBEDO,SOLID_PHASE_ONLY,SOOT_DENSITY,SOOT_OXIDATION,&
17471747
TAU_DEFAULT,TENSOR_DIFFUSIVITY,TERRAIN_IMAGE,TEST_NEW_CHAR_MODEL,TEXTURE_ORIGIN,&
17481748
THERMOPHORETIC_DEPOSITION,THERMOPHORETIC_SETTLING,THICKEN_OBSTRUCTIONS,&
17491749
TMPA,TURBULENCE_MODEL,TURBULENT_DEPOSITION,UVW_FILE,&
@@ -1800,7 +1800,6 @@ SUBROUTINE READ_MISC
18001800
MAX_LEAK_PATHS = 200
18011801
FLUX_LIMITER = 'null'
18021802
LES_FILTER_TYPE = 'null'
1803-
SMOKE3D_16 = .FALSE.
18041803

18051804
! Initial read of the MISC line
18061805

Source/smvv.f90

Lines changed: 33 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -921,22 +921,17 @@ END SUBROUTINE SLICE_TO_RLEFILE
921921

922922
!> \brief Routine to generate SMOKE3D compressed data to send to Smokeview
923923

924-
SUBROUTINE SMOKE3D_TO_FILE(NM,TIME,DX,SMOKE3D_INDEX,VALS,NX,NY,NZ,SMOKE3D_16_FLAG)
924+
SUBROUTINE SMOKE3D_TO_FILE(NM,TIME,DX,SMOKE3D_INDEX,VALS,NX,NY,NZ)
925925

926926
USE OUTPUT_DATA, ONLY: SMOKE3D_TYPE,SMOKE3D_FILE,N_SMOKE3D
927927
USE GLOBAL_CONSTANTS, ONLY: TMPA,TMPM,LU_SMOKE3D,FN_SMOKE3D,TEMP_MAX_SMV,HRRPUV_MAX_SMV
928928
INTEGER, INTENT(IN) :: NX,NY,NZ,NM,SMOKE3D_INDEX
929-
LOGICAL, INTENT(IN) :: SMOKE3D_16_FLAG
930929
REAL(FB), INTENT(IN) :: TIME, DX
931930
REAL(FB), INTENT(IN), DIMENSION(NX*NY*NZ) :: VALS
932-
CHARACTER(LEN=1), DIMENSION(:), ALLOCATABLE :: BUFFER_IN, BUFFER_OUT
933-
CHARACTER(LEN=1), DIMENSION(:), ALLOCATABLE, TARGET :: BUFFER16_IN
934-
REAL(FB) :: FACTOR,TEMP_MIN,VAL_FDS,VAL_SMV,MAX_VAL
935-
INTEGER :: I,NCHARS_OUT,NVALS,NCHARS_IN
936-
INTEGER :: VAL16, FACTOR16, NVALS16_OUT
937-
INTEGER :: VAL_LOW, VAL_HIGH
931+
CHARACTER(LEN=1), DIMENSION(:), ALLOCATABLE :: BUFFER_IN, BUFFER_OUT, BUFFER_DENSITY_IN, BUFFER_DENSITY_OUT
932+
REAL(FB) :: FACTOR,TEMP_MIN,VAL_FDS,VAL_SMV,MAX_VAL,MAX_DENSITY_VAL
933+
INTEGER :: I,NCHARS_OUT,NVALS,NCHARS_IN,NCHARS_DENSITY_OUT
938934
TYPE(SMOKE3D_TYPE), POINTER :: S3
939-
REAL(FB) :: SMOKE3D_16_VALMIN, SMOKE3D_16_VALMAX
940935

941936
S3 => SMOKE3D_FILE(SMOKE3D_INDEX)
942937

@@ -950,13 +945,30 @@ SUBROUTINE SMOKE3D_TO_FILE(NM,TIME,DX,SMOKE3D_INDEX,VALS,NX,NY,NZ,SMOKE3D_16_FLA
950945

951946
IF (S3%DISPLAY_TYPE=='GAS') THEN
952947

948+
MAX_DENSITY_VAL=0.0_FB
953949
FACTOR=-REAL(S3%MASS_EXTINCTION_COEFFICIENT,FB)*DX
954950
DO I=1,NVALS
955951
VAL_FDS = MAX(0.0_FB,VALS(I))
956952
VAL_SMV = 254*(1.0_FB-EXP(FACTOR*VAL_FDS))
957953
BUFFER_IN(I) = CHAR(NINT(VAL_SMV))
958954
MAX_VAL = MAX(VAL_SMV,MAX_VAL) ! If MAX_VAL=0, soot in mesh is completely transparent
955+
MAX_DENSITY_VAL = MAX(VALS(I),MAX_DENSITY_VAL)
959956
ENDDO
957+
ALLOCATE(BUFFER_DENSITY_IN(NVALS))
958+
ALLOCATE(BUFFER_DENSITY_OUT(NVALS))
959+
IF (MAX_DENSITY_VAL .LE. 0.0_FB) THEN
960+
MAX_DENSITY_VAL = 0.0_FB
961+
DO I=1,NVALS
962+
BUFFER_DENSITY_IN(I) = CHAR(0)
963+
ENDDO
964+
ELSE
965+
DO I=1,NVALS
966+
VAL_FDS = 254.0_FB*(VALS(I)/MAX_DENSITY_VAL)
967+
VAL_FDS = MAX( 0.0_FB, VAL_FDS)
968+
VAL_FDS = MIN(254.0_FB, VAL_FDS)
969+
BUFFER_DENSITY_IN(I) = CHAR(NINT(VAL_FDS))
970+
ENDDO
971+
ENDIF
960972

961973
ELSEIF (S3%DISPLAY_TYPE=='FIRE') THEN
962974

@@ -988,7 +1000,7 @@ SUBROUTINE SMOKE3D_TO_FILE(NM,TIME,DX,SMOKE3D_INDEX,VALS,NX,NY,NZ,SMOKE3D_16_FLA
9881000

9891001
! Write size information to a text file
9901002

991-
IF (.NOT.SMOKE3D_16_FLAG) THEN ! write out an extra column below if SMOKE3D_16_FLAG is true
1003+
IF (S3%DISPLAY_TYPE.NE.'GAS') THEN ! write out an extra column below if SMOKE3D_DENSITY_FLAG is true
9921004
OPEN(LU_SMOKE3D(SMOKE3D_INDEX+N_SMOKE3D,NM),FILE=FN_SMOKE3D(SMOKE3D_INDEX+N_SMOKE3D,NM),&
9931005
FORM='FORMATTED',STATUS='OLD',POSITION='APPEND')
9941006
WRITE(LU_SMOKE3D(SMOKE3D_INDEX+N_SMOKE3D,NM),*) TIME,NCHARS_IN,NCHARS_OUT,MAX_VAL
@@ -1002,43 +1014,24 @@ SUBROUTINE SMOKE3D_TO_FILE(NM,TIME,DX,SMOKE3D_INDEX,VALS,NX,NY,NZ,SMOKE3D_16_FLA
10021014
WRITE(LU_SMOKE3D(SMOKE3D_INDEX,NM)) NCHARS_IN,NCHARS_OUT
10031015
WRITE(LU_SMOKE3D(SMOKE3D_INDEX,NM)) (BUFFER_OUT(I),I=1,NCHARS_OUT)
10041016
CLOSE(LU_SMOKE3D(SMOKE3D_INDEX,NM))
1005-
! write out data as 2 byte integers
1006-
1007-
IF (SMOKE3D_16_FLAG) THEN
1008-
NVALS16_OUT = NVALS ! after compression is added, NVALS16_OUT will be smaller than NVALS
1009-
ALLOCATE(BUFFER16_IN(2*NVALS))
1010-
SMOKE3D_16_VALMIN = VALS(1)
1011-
SMOKE3D_16_VALMAX = SMOKE3D_16_VALMIN
1012-
DO I=2,NVALS
1013-
SMOKE3D_16_VALMIN = MIN(SMOKE3D_16_VALMIN,VALS(I))
1014-
SMOKE3D_16_VALMAX = MAX(SMOKE3D_16_VALMAX,VALS(I))
1015-
ENDDO
1016-
IF (SMOKE3D_16_VALMIN == SMOKE3D_16_VALMAX) THEN
1017-
SMOKE3D_16_VALMAX = SMOKE3D_16_VALMIN + 1.0_FB
1018-
ENDIF
1019-
FACTOR16 = 2**16 - 1
1020-
DO I=1,NVALS
1021-
VAL16 = INT(FACTOR16*(VALS(I)-SMOKE3D_16_VALMIN)/(SMOKE3D_16_VALMAX-SMOKE3D_16_VALMIN))
1022-
VAL16 = MIN(MAX(0, VAL16), FACTOR16)
1023-
VAL_LOW = MOD(VAL16, 256)
1024-
VAL_HIGH = VAL16/256
1025-
BUFFER16_IN(2*I-1) = CHAR(VAL_HIGH)
1026-
BUFFER16_IN(2*i) = CHAR(VAL_LOW)
1027-
ENDDO
10281017

1018+
IF ( S3%DISPLAY_TYPE=='GAS') THEN
1019+
! Pack the values into a compressed buffer
1020+
1021+
CALL RLE(BUFFER_DENSITY_IN,NCHARS_IN,BUFFER_DENSITY_OUT,NCHARS_DENSITY_OUT)
10291022
OPEN(LU_SMOKE3D(SMOKE3D_INDEX+N_SMOKE3D,NM),FILE=FN_SMOKE3D(SMOKE3D_INDEX+N_SMOKE3D,NM),&
10301023
FORM='FORMATTED',STATUS='OLD',POSITION='APPEND')
1031-
WRITE(LU_SMOKE3D(SMOKE3D_INDEX+N_SMOKE3D,NM),*) TIME,NCHARS_IN,NCHARS_OUT,MAX_VAL,NVALS16_OUT
1024+
WRITE(LU_SMOKE3D(SMOKE3D_INDEX+N_SMOKE3D,NM),*) TIME,NCHARS_IN,NCHARS_OUT,MAX_VAL,NCHARS_DENSITY_OUT,MAX_DENSITY_VAL
10321025
CLOSE(LU_SMOKE3D(SMOKE3D_INDEX+N_SMOKE3D,NM))
10331026

10341027
OPEN(LU_SMOKE3D(SMOKE3D_INDEX+2*N_SMOKE3D,NM),FILE=FN_SMOKE3D(SMOKE3D_INDEX+2*N_SMOKE3D,NM),FORM='UNFORMATTED',&
10351028
STATUS='OLD',POSITION='APPEND')
1036-
WRITE(LU_SMOKE3D(SMOKE3D_INDEX + 2*N_SMOKE3D,NM)) TIME
1037-
WRITE(LU_SMOKE3D(SMOKE3D_INDEX + 2*N_SMOKE3D,NM)) NVALS,NVALS16_OUT,SMOKE3D_16_VALMIN,SMOKE3D_16_VALMAX
1038-
! output (2**16 - 1)(val-valmin)/(valmax-valmin)
1039-
WRITE(LU_SMOKE3D(SMOKE3D_INDEX + 2*N_SMOKE3D,NM)) (BUFFER16_IN(I),I=1,2*NVALS)
1040-
CLOSE(LU_SMOKE3D(SMOKE3D_INDEX + 2*N_SMOKE3D,NM))
1041-
DEALLOCATE(BUFFER16_IN)
1029+
WRITE(LU_SMOKE3D(SMOKE3D_INDEX+2*N_SMOKE3D,NM)) TIME
1030+
WRITE(LU_SMOKE3D(SMOKE3D_INDEX+2*N_SMOKE3D,NM)) NCHARS_IN,NCHARS_DENSITY_OUT
1031+
WRITE(LU_SMOKE3D(SMOKE3D_INDEX+2*N_SMOKE3D,NM)) (BUFFER_DENSITY_OUT(I),I=1,NCHARS_DENSITY_OUT)
1032+
CLOSE(LU_SMOKE3D(SMOKE3D_INDEX+2*N_SMOKE3D,NM))
1033+
DEALLOCATE(BUFFER_DENSITY_IN)
1034+
DEALLOCATE(BUFFER_DENSITY_OUT)
10421035
ENDIF
10431036

10441037
DEALLOCATE(BUFFER_IN)

0 commit comments

Comments
 (0)