Skip to content

Commit fa595cb

Browse files
authored
Merge pull request #2236 from gforney/master
corrections to 3D smoke when using frame routines
2 parents e33698f + 91fddad commit fa595cb

File tree

15 files changed

+80
-49
lines changed

15 files changed

+80
-49
lines changed

Manuals/Bibliography/authors.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ \chapter{About the Developers}
6969

7070
\item[Glenn Forney] is a computer scientist in the Fire Research Division of NIST. He received a bachelor of science degree in mathematics from Salisbury State College and a master of science and a doctorate in mathematics from Clemson University. He joined NIST in 1986 (then the National Bureau of Standards) and has since worked on developing tools that provide a better understanding of fire phenomena, most notably Smokeview, an advanced scientific software tool for visualizing Fire Dynamics Simulation data.
7171

72-
\item[Eric Mueller] joined the Fire Research Division at NIST in 2021. He recieved a B.S.~in Engineering Physics from Tufts University (2010), an M.S.~from Worcester Polytechnic Institute (2012), and a Ph.D.~from the University of Edinburgh (2017), both in fire safety engineering. His research interests include the development of sub-models relevant to heat and mass transfer in wildland and wildland-urban interface fires.
72+
\item[Eric Mueller] joined the Fire Research Division at NIST in 2021. He received a B.S.~in Engineering Physics from Tufts University (2010), an M.S.~from Worcester Polytechnic Institute (2012), and a Ph.D.~from the University of Edinburgh (2017), both in fire safety engineering. His research interests include the development of sub-models relevant to heat and mass transfer in wildland and wildland-urban interface fires.
7373

7474
\item[Chandan Paul] joined the Fire Research Division at NIST in 2023. He received a Ph.D. in Mechanical Engineering with a minor in Computational Science from The Pennsylvania State University in 2018. His research interests include the development of combustion and radiative heat transfer models for practical engineering applications.
7575

Source/shared/IOframe.c

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,6 @@ void FRAMESetTimes(framedata *fi, int iframe, int nframes){
195195

196196
last_frame = first_frame + nframes - 1;
197197
if(last_frame>fi->nframes - 1)last_frame = fi->nframes-1;
198-
nframes = last_frame + 1 - first_frame;
199198
for(i = first_frame;i <= last_frame;i++){
200199
FILE_SIZE offset;
201200

@@ -256,7 +255,7 @@ unsigned char *FRAMEGetSubFramePtr(framedata *fi, int iframe, int isubframe){
256255

257256
/* ------------------ FRAMELoadData ------------------------ */
258257

259-
framedata *FRAMELoadData(framedata *frameinfo, char *file, int load_flag, int time_frame, int file_type,
258+
framedata *FRAMELoadData(framedata *frameinfo, char *file, char *size_file, int *options, int load_flag, int time_frame, int file_type,
260259
void GetFrameInfo(bufferdata *bufferinfo, int *headersize, int **sizes, int *nsizes,
261260
int **subframeptrs, int **subframesizesptr, int *nsubframes,
262261
int *compression_type, FILE_SIZE *filesizeptr)){
@@ -273,10 +272,10 @@ framedata *FRAMELoadData(framedata *frameinfo, char *file, int load_flag, int ti
273272
FreeBufferInfo(frameinfo->bufferinfo);
274273
frameinfo->bufferinfo = NULL;
275274
}
276-
frameinfo->bufferinfo = InitBufferData(file);
275+
frameinfo->bufferinfo = InitBufferData(file, size_file, options);
277276
}
278277
nframes_before = frameinfo->nframes;
279-
frameinfo->bufferinfo = File2Buffer(file, frameinfo->bufferinfo, &nread);
278+
frameinfo->bufferinfo = File2Buffer(file, size_file, options, frameinfo->bufferinfo, &nread);
280279
FRAMESetup(frameinfo);
281280
frameinfo->bytes_read = nread;
282281
if(nread > 0){
@@ -324,6 +323,7 @@ int FRAMEGetNFrames(char *file, int type){
324323
frameinfo->bufferinfo->file = file;
325324
frameinfo->bufferinfo->buffer = NULL;
326325
frameinfo->bufferinfo->nbuffer = 0;
326+
frameinfo->bufferinfo->options = NULL;
327327
FRAMESetup(frameinfo);
328328
nframes = frameinfo->nframes;
329329
FRAMEFree(frameinfo);
@@ -343,8 +343,6 @@ void GetSmoke3DFrameInfo(bufferdata *bufferinfo, int *headersizeptr, int **frame
343343
char buffer[255];
344344
int headersize, nframes, *frames;
345345
FILE_SIZE filesize;
346-
char sizefile[1024];
347-
char *ext;
348346

349347
*compression_type = FRAME_RLE;
350348
if(bufferinfo == NULL)return;
@@ -353,23 +351,11 @@ void GetSmoke3DFrameInfo(bufferdata *bufferinfo, int *headersizeptr, int **frame
353351
if(stream == NULL)return;
354352
fclose(stream);
355353

356-
strcpy(sizefile, bufferinfo->file);
357-
ext = strrchr(sizefile, '.');
358-
if(ext != NULL)ext[0] = 0;
359-
strcat(sizefile, ".szz");
360-
stream = fopen(sizefile, "r");
361-
if(stream!=NULL){
362-
*compression_type = FRAME_ZLIB;
363-
}
364-
else{
365-
strcpy(sizefile, bufferinfo->file);
366-
strcat(sizefile, ".sz");
367-
stream = fopen(sizefile, "r");
368-
if(stream == NULL){
369-
*nframesptr = 0;
370-
*framesptr = NULL;
371-
return;
372-
}
354+
stream = fopen(bufferinfo->size_file, "r");
355+
if(stream == NULL){
356+
*nframesptr = 0;
357+
*framesptr = NULL;
358+
return;
373359
}
374360

375361
fgets(buffer, 255, stream);
@@ -400,7 +386,14 @@ void GetSmoke3DFrameInfo(bufferdata *bufferinfo, int *headersizeptr, int **frame
400386
// IF(NCHARS_OUT > 0) WRITE(LU_SMOKE3D)(BUFFER_OUT(I), I = 1, NCHARS_OUT)
401387
if(fgets(buffer, 255, stream) == NULL)break;
402388
if(*compression_type == FRAME_RLE){
403-
sscanf(buffer, "%f %i %i", &time_local, &nchars, &nchars_compressed);
389+
if(bufferinfo->options==NULL||bufferinfo->options[1]==0){
390+
sscanf(buffer, "%f %i %i", &time_local, &nchars, &nchars_compressed);
391+
}
392+
else{
393+
float rval;
394+
int ival;
395+
sscanf(buffer, "%f %i %i %f %i", &time_local, &nchars, &ival, &rval, &nchars_compressed);
396+
}
404397
framesize = 4 + 4 + 4;
405398
framesize += 4 + 8 + 4;
406399
if(nchars_compressed > 0)framesize += 4 + nchars_compressed + 4;
@@ -671,7 +664,7 @@ void GetIsoFrameInfo(bufferdata *bufferinfo, int *headersizeptr, int **framesptr
671664
headersize = 4 + 4 + 4; // ONE
672665
headersize += 4 + 4 + 4; // VERSION
673666
fseek_m(stream, headersize, SEEK_CUR);
674-
fseek_m(stream, 4, SEEK_CUR);returncode = fread_m(&niso_levels, 4, 1, stream);fseek_m(stream, 4, SEEK_CUR);
667+
fseek_m(stream, 4, SEEK_CUR);fread_m(&niso_levels, 4, 1, stream);fseek_m(stream, 4, SEEK_CUR);
675668
headersize += 4+4+4; // NISO_LEVELS
676669

677670
levelsize = 0;
@@ -723,7 +716,7 @@ void GetIsoFrameInfo(bufferdata *bufferinfo, int *headersizeptr, int **framesptr
723716
*filesizeptr = filesize;
724717
}
725718

726-
/* ------------------ GetIsoFrameInfo ------------------------ */
719+
/* ------------------ GetGeomDataFrameInfo ------------------------ */
727720

728721
void GetGeomDataFrameInfo(bufferdata *bufferinfo, int *headersizeptr, int **framesptr, int *nframesptr,
729722
int **subframeoffsetsptr, int **subframesizesptr, int *nsubframesptr,
@@ -850,7 +843,7 @@ void GetPartFrameInfo(bufferdata *bufferinfo, int *headersizeptr, int **framespt
850843
headersize += 4 + 4 + 4; // FDS VERSION
851844
fseek_m(stream, headersize, SEEK_CUR);
852845

853-
fseek_m(stream, 4, SEEK_CUR);returncode = fread_m(&n_part, 4, 1, stream);fseek_m(stream, 4, SEEK_CUR);
846+
fseek_m(stream, 4, SEEK_CUR);fread_m(&n_part, 4, 1, stream);fseek_m(stream, 4, SEEK_CUR);
854847
headersize += 4 + 4 + 4; // n_part
855848

856849
NewMemory((void **)&nquants, 2*n_part*sizeof(int));
@@ -859,7 +852,7 @@ void GetPartFrameInfo(bufferdata *bufferinfo, int *headersizeptr, int **framespt
859852
for(i=0; i<n_part; i++){
860853
int labelsize;
861854

862-
fseek_m(stream, 4, SEEK_CUR);returncode = fread_m(nquants + 2 * i, 4, 2, stream);fseek_m(stream, 4, SEEK_CUR);
855+
fseek_m(stream, 4, SEEK_CUR);fread_m(nquants + 2 * i, 4, 2, stream);fseek_m(stream, 4, SEEK_CUR);
863856
headersize += 4 + 2*4 + 4;
864857

865858
labelsize = 2*nquants[2*i]*(4+30+4);
@@ -887,7 +880,7 @@ void GetPartFrameInfo(bufferdata *bufferinfo, int *headersizeptr, int **framespt
887880
int nplim;
888881
long int skip;
889882

890-
fseek_m(stream, 4, SEEK_CUR);returncode = fread_m(&nplim, 4, 1, stream);fseek_m(stream, 4, SEEK_CUR);
883+
fseek_m(stream, 4, SEEK_CUR);fread_m(&nplim, 4, 1, stream);fseek_m(stream, 4, SEEK_CUR);
891884
framesize += 4 + 4 + 4; // nplim
892885

893886
// fprintf(stderr, "nplim %i: %i\n",i, nplim);

Source/shared/IOframe.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ unsigned char *FRAMEGetFramePtr(framedata *fi, int iframe);
5757
int FRAMEGetMinMax(framedata *fi);
5858
int FRAMEGetNFrames(char *file, int type);
5959
unsigned char *FRAMEGetSubFramePtr(framedata *fi, int iframe, int isubframe);
60-
framedata *FRAMELoadData(framedata *frameinfo, char *file, int load_flag, int time_frame, int file_type,
60+
framedata *FRAMELoadData(framedata *frameinfo, char *file, char *sizefile, int *options, int load_flag, int time_frame, int file_type,
6161
void GetFrameInfo(bufferdata *bufferinfo, int *headersize, int **sizes, int *nsizes, int **subframeptrs, int **subframesizesptr, int *nsubframes, int *compression_type, FILE_SIZE *filesizeptr));
6262

6363
bufferdata *FRAMEReadFrame(framedata *fi, int iframe, int nframes, int *nreadptr);

Source/shared/file_util.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -656,13 +656,22 @@ void PrintTime(const char *filepath, int line, float *timer, const char *label,
656656

657657
/* ------------------ InitBufferData ------------------------ */
658658

659-
bufferdata *InitBufferData(char *file){
659+
bufferdata *InitBufferData(char *file, char *size_file, int *options){
660660
bufferdata *buffinfo = NULL;
661661
unsigned char *buffer = NULL;
662662
FILE_SIZE nbuffer = 0;
663663

664664
NewMemory((void **)&buffinfo, sizeof(bufferdata));
665665
buffinfo->file = file;
666+
buffinfo->size_file = size_file;
667+
buffinfo->options = options;
668+
if(options != NULL && options[0]>0){
669+
int *optionsptr;
670+
671+
NewMemory((void **)&optionsptr, (options[0]+1)*sizeof(int));
672+
memcpy(optionsptr, options, (options[0]+1)*sizeof(int));
673+
buffinfo->options = optionsptr;
674+
}
666675
nbuffer = GetFileSizeSMV(file);
667676
NewMemory((void **)&buffer, nbuffer);
668677
buffinfo->buffer = buffer;
@@ -676,20 +685,21 @@ bufferdata *InitBufferData(char *file){
676685
void FreeBufferInfo(bufferdata *bufferinfo){
677686
if(bufferinfo == NULL)return;
678687
FREEMEMORY(bufferinfo->buffer);
688+
FREEMEMORY(bufferinfo->options);
679689
FREEMEMORY(bufferinfo);
680690
}
681691

682692
/* ------------------ File2Buffer ------------------------ */
683693

684-
bufferdata *File2Buffer(char *file, bufferdata *bufferinfo, FILE_SIZE *nreadptr){
694+
bufferdata *File2Buffer(char *file, char *size_file, int *options, bufferdata *bufferinfo, FILE_SIZE *nreadptr){
685695
FILE_SIZE nfile=0, offset_buffer = 0, offset_file = 0, nread_actual, nread_try;
686696

687697
*nreadptr = 0;
688698
if(file==NULL || strlen(file)==0 || FileExistsOrig(file) == 0)return NULL;
689699

690700
INIT_PRINT_TIMER(timer_file2buffer);
691701
if(bufferinfo == NULL){ // read entire file
692-
bufferinfo = InitBufferData(file);
702+
bufferinfo = InitBufferData(file, size_file, options);
693703
offset_file = 0;
694704
offset_buffer = 0;
695705
nread_try = bufferinfo->nbuffer;

Source/shared/file_util.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@ typedef struct {
5656
*/
5757

5858
typedef struct {
59-
char *file;
60-
unsigned char *buffer; // copy of file
61-
FILE_SIZE nbuffer; // size of buffer
62-
FILE_SIZE nfile; // amount of data in buffer
59+
char *file, *size_file;
60+
int *options; // parameter array
61+
unsigned char *buffer; // copy of file
62+
FILE_SIZE nbuffer; // size of buffer
63+
FILE_SIZE nfile; // amount of data in buffer
6364
} bufferdata;
6465

6566
// vvvvvvvvvvvvvvvvvvvvvvvv preprocessing directives
@@ -142,8 +143,8 @@ int FileExistsOrig(char *filename);
142143
// vvvvvvvvvvvvvvvvvvvvvvvv headers vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
143144
EXTERNCPP int MakeFile(char *file, int size);
144145
EXTERNCPP void FreeBufferInfo(bufferdata *bufferinfoptr);
145-
EXTERNCPP bufferdata *InitBufferData(char *file);
146-
EXTERNCPP bufferdata *File2Buffer(char *file, bufferdata *bufferinfo, FILE_SIZE *nreadptr);
146+
EXTERNCPP bufferdata *InitBufferData(char *file, char *size_file, int *options);
147+
EXTERNCPP bufferdata *File2Buffer(char *file, char *size_file, int *options, bufferdata *bufferinfo, FILE_SIZE *nreadptr);
147148
EXTERNCPP FILE_SIZE fread_p(char *file, unsigned char *buffer, FILE_SIZE offset, FILE_SIZE nchars, int nthreads);
148149
EXTERNCPP void FileErase(char *file);
149150
EXTERNCPP FILE *FOPEN(const char *file, const char *mode);

Source/shared/shared_structures.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,6 +1478,9 @@ typedef struct _smoke3ddata {
14781478
char *file;
14791479
char *comp_file, *reg_file;
14801480
char *smoke_density_file;
1481+
#ifdef pp_SMOKEFRAME
1482+
char *size_file;
1483+
#endif
14811484
int filetype;
14821485
int skip_smoke, skip_fire;
14831486
int is_smoke, is_fire;

Source/smokeview/IOboundary.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1470,7 +1470,7 @@ FILE_SIZE ReadBoundaryBndf(int ifile, int load_flag, int *errorcode){
14701470
}
14711471

14721472
#ifdef pp_BOUNDFRAME
1473-
patchi->frameinfo = FRAMELoadData(patchi->frameinfo, patchi->file, load_flag, time_frame, FORTRAN_FILE, GetBoundaryFrameInfo);
1473+
patchi->frameinfo = FRAMELoadData(patchi->frameinfo, patchi->file, patchi->size_file, NULL, load_flag, time_frame, FORTRAN_FILE, GetBoundaryFrameInfo);
14741474
patchi->ntimes = patchi->frameinfo->nframes;
14751475
NewMemory((void **)&meshi->patch_times, patchi->ntimes*sizeof(float));
14761476
memcpy(meshi->patch_times, patchi->frameinfo->times, patchi->ntimes*sizeof(float));

Source/smokeview/IOgeometry.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2310,7 +2310,7 @@ FILE_SIZE GetGeomData(patchdata *patchi, char *filename, int load_flag, int ntim
23102310

23112311
#ifdef pp_BOUNDFRAME
23122312
if(patchi != NULL&&load_flag!=UNLOAD){
2313-
patchi->frameinfo = FRAMELoadData(patchi->frameinfo, patchi->file, load_flag, time_frame, FORTRAN_FILE, GetGeomDataFrameInfo);
2313+
patchi->frameinfo = FRAMELoadData(patchi->frameinfo, patchi->file, patchi->size_file, NULL, load_flag, time_frame, FORTRAN_FILE, GetGeomDataFrameInfo);
23142314
update_frame = 1;
23152315
}
23162316
#endif

Source/smokeview/IOiso.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ FILE_SIZE ReadIsoGeom(int ifile, int load_flag, int *geom_frame_index, int *erro
493493
int nbuffer=0;
494494

495495
if(load_flag != UNLOAD){
496-
isoi->frameinfo = FRAMELoadData(isoi->frameinfo, isoi->file, load_flag, time_frame, FORTRAN_FILE, GetIsoFrameInfo);
496+
isoi->frameinfo = FRAMELoadData(isoi->frameinfo, isoi->file, isoi->size_file, NULL, load_flag, time_frame, FORTRAN_FILE, GetIsoFrameInfo);
497497
update_frame = 1;
498498

499499
geomi->frameinfo = isoi->frameinfo;

Source/smokeview/IOpart.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2259,7 +2259,7 @@ FILE_SIZE ReadPart(char *file_arg, int ifile_arg, int load_flag, int *errorcode_
22592259
}
22602260

22612261
#ifdef pp_PARTFRAME
2262-
parti->frameinfo = FRAMELoadData(parti->frameinfo, parti->file, load_flag, time_frame, FORTRAN_FILE, GetPartFrameInfo);
2262+
parti->frameinfo = FRAMELoadData(parti->frameinfo, parti->file, parti->size_file, NULL, load_flag, time_frame, FORTRAN_FILE, GetPartFrameInfo);
22632263
update_frame = 1;
22642264
#endif
22652265

0 commit comments

Comments
 (0)