From 3b78022edcf97c829c789519f48f6ee4f895e5ae Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmail.com> Date: Tue, 9 Jan 2024 15:54:53 -0500 Subject: [PATCH 01/13] smv ug: add some notes on the data loading dialog box --- Manuals/SMV_User_Guide/SMV_User_Guide.tex | 29 +++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/Manuals/SMV_User_Guide/SMV_User_Guide.tex b/Manuals/SMV_User_Guide/SMV_User_Guide.tex index 56e812a812..4d7a48f3fc 100644 --- a/Manuals/SMV_User_Guide/SMV_User_Guide.tex +++ b/Manuals/SMV_User_Guide/SMV_User_Guide.tex @@ -1983,11 +1983,36 @@ \part{Controlling and Customizing Smokeview} \chapter{Setting Options} \label{chapter:settingoptions} +%--------------------------------------------------------------------------------- +%--------------------------------------------------------------------------------- +\section{Loading Data} + +Data is loaded in smokeview by clicking the right mouse buttons and selecting one of the data types +under the Load/Unload menu. Smokeview loads data for all available times and meshes by default. +For large cases, it is useful to reduce the amount of data that is loaded in order to shorten load times . +To do this, one uses the Data loading dialog box +illustrated in Figure \ref{figDataloading}. To shorten the time interval over which +data is loaded, specify a min and/or max time. To reduce the number of meshes over which +data is loaded specify an intersection box. Only data in meshes within this intersection will +then be loaded. The intersection box is colored red and the meshes that are contained within this box +are drawn as outlines and colored black. Mesh indices (1 to number of meshes) may be displayed and used +to set the intersection box to that mesh. + +\begin{figure}[bph] +\centerline{ +\includegraphics[width=4.0in]{\SMVfigdir/figDataloading}} +\caption[Dialog box for setting data loading constraints.] +{Dialog box for setting data loading constraints. +A subset of data files may be loaded by specifying min and/or max load times. +Data may also be loaded on a selected subset of meshes. +}\ \label{figDataloading} +\end{figure} + %--------------------------------------------------------------------------------- %--------------------------------------------------------------------------------- \section{Data Bounds} -Smokeview visualizes data by mapping data values to color +Smokeview visualizes data by mapping data values to color indices ranging from 0 to 255 using a mapping of the form \begin{eqnarray*} @@ -2014,7 +2039,7 @@ \section{Data Bounds} \begin{figure}[bph] \centerline{ -\includegraphics[width=5.4028in]{\SMVfigdir/figBOUNDset}} +\includegraphics[width=4.0in]{\SMVfigdir/figBOUNDset}} \caption[Dialog box for setting Slice file data bounds.] {Dialog box for setting Slice file data bounds. Select a variable and bound type (set, global or percentile). Enter a lower From ca386362bec0dad80907587c9a3bb0a6592ab639 Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmail.com> Date: Tue, 9 Jan 2024 21:54:09 -0500 Subject: [PATCH 02/13] smokeview source: change some intersection/box variable names to make code clearer --- Source/smokeview/glui_bounds.cpp | 168 +++++++++++++++++-------------- Source/smokeview/readsmv.c | 40 ++++---- Source/smokeview/showscene.c | 2 +- Source/smokeview/smokeviewvars.h | 16 +-- Source/smokeview/update.c | 4 +- 5 files changed, 122 insertions(+), 108 deletions(-) diff --git a/Source/smokeview/glui_bounds.cpp b/Source/smokeview/glui_bounds.cpp index 6169811ce2..eb652caeb1 100644 --- a/Source/smokeview/glui_bounds.cpp +++ b/Source/smokeview/glui_bounds.cpp @@ -2516,7 +2516,7 @@ GLUI_Spinner *SPINNER_slice_dz = NULL; GLUI_Spinner *SPINNER_size_factor2 = NULL; GLUI_Spinner *SPINNER_plot2d_dt = NULL; #ifdef pp_LOAD_BOUNDS -GLUI_Spinner *SPINNER_load_bounds[6]; +GLUI_Spinner *SPINNER_meshclip[6]; GLUI_Spinner *SPINNER_set_mesh = NULL; #endif @@ -2554,7 +2554,7 @@ GLUI_Checkbox *CHECKBOX_use_lighting = NULL; GLUI_Checkbox *CHECKBOX_show_extreme_mindata = NULL; GLUI_Checkbox *CHECKBOX_show_extreme_maxdata = NULL; #ifdef pp_LOAD_BOUNDS -GLUI_Checkbox *CHECKBOX_use_load_bounds[6]; +GLUI_Checkbox *CHECKBOX_use_meshclip[6]; GLUI_Checkbox *CHECKBOX_show_intersection_box=NULL; GLUI_Checkbox *CHECKBOX_show_intersected_meshes = NULL; #endif @@ -3626,35 +3626,35 @@ void BoundBoundCB(int var){ /* ------------------ CheckBounds ------------------------ */ void CheckBounds(int var){ - if((var==-1||var==0)&&use_load_bounds[0] == 0){ - load_bounds_save[0] = load_bounds[0]; - load_bounds[0] = xbar0FDS; - SPINNER_load_bounds[0]->set_float_val(load_bounds[0]); + if((var==-1||var==0)&&use_meshclip[0] == 0){ + meshclip_save[0] = meshclip[0]; + meshclip[0] = xbar0FDS; + SPINNER_meshclip[0]->set_float_val(meshclip[0]); } - if((var == -1 || var == 1) && use_load_bounds[1] == 0){ - load_bounds_save[1] = load_bounds[1]; - load_bounds[1] = xbarFDS; - SPINNER_load_bounds[1]->set_float_val(load_bounds[1]); + if((var == -1 || var == 1) && use_meshclip[1] == 0){ + meshclip_save[1] = meshclip[1]; + meshclip[1] = xbarFDS; + SPINNER_meshclip[1]->set_float_val(meshclip[1]); } - if((var == -1 || var == 2) && use_load_bounds[2] == 0){ - load_bounds_save[2] = load_bounds[2]; - load_bounds[2] = ybar0FDS; - SPINNER_load_bounds[2]->set_float_val(load_bounds[2]); + if((var == -1 || var == 2) && use_meshclip[2] == 0){ + meshclip_save[2] = meshclip[2]; + meshclip[2] = ybar0FDS; + SPINNER_meshclip[2]->set_float_val(meshclip[2]); } - if((var == -1 || var == 3) && use_load_bounds[3] == 0){ - load_bounds_save[3] = load_bounds[3]; - load_bounds[3] = ybarFDS; - SPINNER_load_bounds[3]->set_float_val(load_bounds[3]); + if((var == -1 || var == 3) && use_meshclip[3] == 0){ + meshclip_save[3] = meshclip[3]; + meshclip[3] = ybarFDS; + SPINNER_meshclip[3]->set_float_val(meshclip[3]); } - if((var == -1 || var == 4) && use_load_bounds[4] == 0){ - load_bounds_save[4] = load_bounds[4]; - load_bounds[4] = zbar0FDS; - SPINNER_load_bounds[4]->set_float_val(load_bounds[4]); + if((var == -1 || var == 4) && use_meshclip[4] == 0){ + meshclip_save[4] = meshclip[4]; + meshclip[4] = zbar0FDS; + SPINNER_meshclip[4]->set_float_val(meshclip[4]); } - if((var == -1 || var == 5) && use_load_bounds[5] == 0){ - load_bounds_save[5] = load_bounds[5]; - load_bounds[5] = zbarFDS; - SPINNER_load_bounds[5]->set_float_val(load_bounds[5]); + if((var == -1 || var == 5) && use_meshclip[5] == 0){ + meshclip_save[5] = meshclip[5]; + meshclip[5] = zbarFDS; + SPINNER_meshclip[5]->set_float_val(meshclip[5]); } } @@ -3689,17 +3689,17 @@ void MeshBoundCB(int var){ GLUTPOSTREDISPLAY; switch(var){ case USEMESH_SET_ALL: - load_bounds[0] = xbar0FDS; - load_bounds[1] = xbarFDS; - load_bounds[2] = ybar0FDS; - load_bounds[3] = ybarFDS; - load_bounds[4] = zbar0FDS; - load_bounds[5] = zbarFDS; + meshclip[0] = xbar0FDS; + meshclip[1] = xbarFDS; + meshclip[2] = ybar0FDS; + meshclip[3] = ybarFDS; + meshclip[4] = zbar0FDS; + meshclip[5] = zbarFDS; for(i = 0;i < 6;i++){ - use_load_bounds[i] = 1; - CHECKBOX_use_load_bounds[i]->set_int_val(use_load_bounds[i]); - SPINNER_load_bounds[i]->set_float_val(load_bounds[i]); - SPINNER_load_bounds[i]->enable(); + use_meshclip[i] = 1; + CHECKBOX_use_meshclip[i]->set_int_val(use_meshclip[i]); + SPINNER_meshclip[i]->set_float_val(meshclip[i]); + SPINNER_meshclip[i]->enable(); } MeshBoundCB(USEMESH_XYZ); break; @@ -3708,18 +3708,18 @@ void MeshBoundCB(int var){ meshdata *meshi; meshi = meshinfo + set_mesh - 1; - load_bounds[0] = meshi->boxmin[0]; - load_bounds[2] = meshi->boxmin[1]; - load_bounds[4] = meshi->boxmin[2]; - load_bounds[1] = meshi->boxmax[0]; - load_bounds[3] = meshi->boxmax[1]; - load_bounds[5] = meshi->boxmax[2]; + meshclip[0] = meshi->boxmin[0]; + meshclip[2] = meshi->boxmin[1]; + meshclip[4] = meshi->boxmin[2]; + meshclip[1] = meshi->boxmax[0]; + meshclip[3] = meshi->boxmax[1]; + meshclip[5] = meshi->boxmax[2]; } for(i = 0;i < 6;i++){ - use_load_bounds[i] = 1; - CHECKBOX_use_load_bounds[i]->set_int_val(use_load_bounds[i]); - SPINNER_load_bounds[i]->set_float_val(load_bounds[i]); - SPINNER_load_bounds[i]->enable(); + use_meshclip[i] = 1; + CHECKBOX_use_meshclip[i]->set_int_val(use_meshclip[i]); + SPINNER_meshclip[i]->set_float_val(meshclip[i]); + SPINNER_meshclip[i]->enable(); } MeshBoundCB(USEMESH_XYZ); break; @@ -3739,12 +3739,12 @@ void MeshBoundCB(int var){ } #define MESH_EPS 0.01 if( - use_load_bounds[0] == 0 && - use_load_bounds[1] == 0 && - use_load_bounds[2] == 0 && - use_load_bounds[3] == 0 && - use_load_bounds[4] == 0 && - use_load_bounds[5] == 0 + use_meshclip[0] == 0 && + use_meshclip[1] == 0 && + use_meshclip[2] == 0 && + use_meshclip[3] == 0 && + use_meshclip[4] == 0 && + use_meshclip[5] == 0 )break; for(i=0;i<nmeshes;i++){ meshdata *meshi; @@ -3753,27 +3753,41 @@ void MeshBoundCB(int var){ meshi = meshinfo + i; meshmin = meshi->boxmin; meshmax = meshi->boxmax; - if(use_load_bounds[0] == 1 && load_bounds[0] > meshmax[0]-MESH_EPS){ + float meshclip_min[3], meshclip_max[3]; + int use_meshclip_min[3], use_meshclip_max[3]; + meshclip_min[0] = meshclip[0]; + meshclip_min[1] = meshclip[2]; + meshclip_min[2] = meshclip[4]; + meshclip_max[0] = meshclip[1]; + meshclip_max[1] = meshclip[3]; + meshclip_max[2] = meshclip[5]; + use_meshclip_min[0] = use_meshclip[0]; + use_meshclip_min[1] = use_meshclip[2]; + use_meshclip_min[2] = use_meshclip[4]; + use_meshclip_max[0] = use_meshclip[1]; + use_meshclip_max[1] = use_meshclip[3]; + use_meshclip_max[2] = use_meshclip[5]; + if(use_meshclip_min[0] == 1 && meshclip_min[0] > meshmin[0]+MESH_EPS){ meshi->use = 0; continue; } - if(use_load_bounds[1] == 1 && load_bounds[1] < meshmin[0]+MESH_EPS){ + if(use_meshclip_min[1] == 1 && meshclip_min[1] > meshmin[1] + MESH_EPS){ meshi->use = 0; continue; } - if(use_load_bounds[2] == 1 && load_bounds[2] > meshmax[1]-MESH_EPS){ + if(use_meshclip_min[2] == 1 && meshclip_min[2] > meshmin[2] + MESH_EPS){ meshi->use = 0; continue; } - if(use_load_bounds[3] == 1 && load_bounds[3] < meshmin[1]+MESH_EPS){ + if(use_meshclip_max[0] == 1 && meshclip_max[0] < meshmax[0] - MESH_EPS){ meshi->use = 0; continue; } - if(use_load_bounds[4] == 1 && load_bounds[4] > meshmax[2]-MESH_EPS){ + if(use_meshclip_max[1] == 1 && meshclip_max[1] < meshmax[1] - MESH_EPS){ meshi->use = 0; continue; } - if(use_load_bounds[5] == 1 && load_bounds[5] < meshmin[2]+MESH_EPS){ + if(use_meshclip_max[2] == 1 && meshclip_max[2] < meshmax[2] - MESH_EPS){ meshi->use = 0; continue; } @@ -3782,11 +3796,11 @@ void MeshBoundCB(int var){ break; case USEMESH_USE_XYZ_ALL: for(i = 0;i < 6;i++){ - if(use_load_bounds[i] == 1){ - SPINNER_load_bounds[i]->enable(); + if(use_meshclip[i] == 1){ + SPINNER_meshclip[i]->enable(); } else{ - SPINNER_load_bounds[i]->disable(); + SPINNER_meshclip[i]->disable(); } } CheckBounds(-1); @@ -3799,13 +3813,13 @@ void MeshBoundCB(int var){ case USEMESH_USE_XYZ + 4: case USEMESH_USE_XYZ + 5: i = var - USEMESH_USE_XYZ; - if(use_load_bounds[i]==1){ - load_bounds[i] = load_bounds_save[i]; - SPINNER_load_bounds[i]->set_float_val(load_bounds[i]); - SPINNER_load_bounds[i]->enable(); + if(use_meshclip[i]==1){ + meshclip[i] = meshclip_save[i]; + SPINNER_meshclip[i]->set_float_val(meshclip[i]); + SPINNER_meshclip[i]->enable(); } else{ - SPINNER_load_bounds[i]->disable(); + SPINNER_meshclip[i]->disable(); } CheckBounds(i); MeshBoundCB(USEMESH_XYZ); @@ -3822,8 +3836,8 @@ extern "C" void GLUIUpdateMeshBounds(void){ int i; for(i = 0;i < 6;i++){ - SPINNER_load_bounds[i]->set_float_val(load_bounds[i]); - CHECKBOX_use_load_bounds[i]->set_int_val(use_load_bounds[i]); + SPINNER_meshclip[i]->set_float_val(meshclip[i]); + CHECKBOX_use_meshclip[i]->set_int_val(use_meshclip[i]); } CHECKBOX_show_intersection_box->set_int_val(show_intersection_box); CHECKBOX_show_intersected_meshes->set_int_val(show_intersected_meshes); @@ -4948,16 +4962,16 @@ hvacductboundsCPP.setup("hvac", ROLLOUT_hvacduct, hvacductbounds_cpp, nhvacductb strcpy(lbl[4], "Z"); strcpy(lbl[5], "Z"); for(i=0;i<6;i++){ - SPINNER_load_bounds[i] = glui_bounds->add_spinner_to_panel(PANEL_meshxyz[i], lbl[i], GLUI_SPINNER_FLOAT, load_bounds+i, USEMESH_XYZ, MeshBoundCB); + SPINNER_meshclip[i] = glui_bounds->add_spinner_to_panel(PANEL_meshxyz[i], lbl[i], GLUI_SPINNER_FLOAT, meshclip+i, USEMESH_XYZ, MeshBoundCB); glui_bounds->add_column_to_panel(PANEL_meshxyz[i], false); - CHECKBOX_use_load_bounds[i] = glui_bounds->add_checkbox_to_panel(PANEL_meshxyz[i], "", use_load_bounds+i, USEMESH_USE_XYZ+i, MeshBoundCB); + CHECKBOX_use_meshclip[i] = glui_bounds->add_checkbox_to_panel(PANEL_meshxyz[i], "", use_meshclip+i, USEMESH_USE_XYZ+i, MeshBoundCB); } - SPINNER_load_bounds[0]->set_float_limits(xbar0FDS, xbarFDS); - SPINNER_load_bounds[1]->set_float_limits(xbar0FDS, xbarFDS); - SPINNER_load_bounds[2]->set_float_limits(ybar0FDS, ybarFDS); - SPINNER_load_bounds[3]->set_float_limits(ybar0FDS, ybarFDS); - SPINNER_load_bounds[4]->set_float_limits(zbar0FDS, zbarFDS); - SPINNER_load_bounds[5]->set_float_limits(zbar0FDS, zbarFDS); + SPINNER_meshclip[0]->set_float_limits(xbar0FDS, xbarFDS); + SPINNER_meshclip[1]->set_float_limits(xbar0FDS, xbarFDS); + SPINNER_meshclip[2]->set_float_limits(ybar0FDS, ybarFDS); + SPINNER_meshclip[3]->set_float_limits(ybar0FDS, ybarFDS); + SPINNER_meshclip[4]->set_float_limits(zbar0FDS, zbarFDS); + SPINNER_meshclip[5]->set_float_limits(zbar0FDS, zbarFDS); PANEL_mesh1 = glui_bounds->add_panel_to_panel(PANEL_mesh, "", false); CHECKBOX_show_intersection_box = glui_bounds->add_checkbox_to_panel(PANEL_mesh1, "show intersection box", &show_intersection_box, USEMESH_DRAW_BOX, MeshBoundCB); @@ -4974,7 +4988,7 @@ hvacductboundsCPP.setup("hvac", ROLLOUT_hvacduct, hvacductbounds_cpp, nhvacductb SPINNER_set_mesh->set_int_limits(1, nmeshes); glui_bounds->add_button_to_panel(PANEL_setmesh, "all meshes", USEMESH_SET_ALL, MeshBoundCB); MeshBoundCB(USEMESH_USE_XYZ_ALL); - glui_load_bounds_defined = 1; + glui_meshclip_defined = 1; #endif // -------------- Data coloring ------------------- diff --git a/Source/smokeview/readsmv.c b/Source/smokeview/readsmv.c index 6cb32c3179..d3480ec5bc 100644 --- a/Source/smokeview/readsmv.c +++ b/Source/smokeview/readsmv.c @@ -3528,18 +3528,18 @@ void UpdateMeshCoords(void){ zbarFDS = zbar; #ifdef pp_LOAD_BOUNDS - use_load_bounds[0] = 0; - use_load_bounds[1] = 0; - use_load_bounds[2] = 0; - use_load_bounds[3] = 0; - use_load_bounds[4] = 0; - use_load_bounds[5] = 0; - load_bounds[0] = xbar0FDS; - load_bounds[1] = xbarFDS; - load_bounds[2] = ybar0FDS; - load_bounds[3] = ybarFDS; - load_bounds[4] = zbar0FDS; - load_bounds[5] = zbarFDS; + use_meshclip[0] = 0; + use_meshclip[1] = 0; + use_meshclip[2] = 0; + use_meshclip[3] = 0; + use_meshclip[4] = 0; + use_meshclip[5] = 0; + meshclip[0] = xbar0FDS; + meshclip[1] = xbarFDS; + meshclip[2] = ybar0FDS; + meshclip[3] = ybarFDS; + meshclip[4] = zbar0FDS; + meshclip[5] = zbarFDS; #endif geomlistdata *geomlisti; @@ -12328,20 +12328,20 @@ int ReadIni2(char *inifile, int localfile){ sscanf(buffer, " %i %i", &show_intersection_box, &show_intersected_meshes); fgets(buffer, 255, stream); - sscanf(buffer, " %i %f %i %f", use_load_bounds + 0, load_bounds + 0, use_load_bounds + 1, load_bounds + 1); + sscanf(buffer, " %i %f %i %f", use_meshclip + 0, meshclip + 0, use_meshclip + 1, meshclip + 1); fgets(buffer, 255, stream); - sscanf(buffer, " %i %f %i %f", use_load_bounds + 2, load_bounds + 2, use_load_bounds + 3, load_bounds + 3); + sscanf(buffer, " %i %f %i %f", use_meshclip + 2, meshclip + 2, use_meshclip + 3, meshclip + 3); fgets(buffer, 255, stream); - sscanf(buffer, " %i %f %i %f", use_load_bounds + 4, load_bounds + 4, use_load_bounds + 5, load_bounds + 5); + sscanf(buffer, " %i %f %i %f", use_meshclip + 4, meshclip + 4, use_meshclip + 5, meshclip + 5); for(i = 0;i < 6;i++){ - if(use_load_bounds[i] != 0)use_load_bounds[i] = 1; + if(use_meshclip[i] != 0)use_meshclip[i] = 1; } if(show_intersection_box != 0)show_intersection_box = 1; if(show_intersected_meshes != 0)show_intersected_meshes = 1; - update_load_bounds = 1; + update_meshclip = 1; } #endif if(MatchINI(buffer, "GEOMDOMAIN") == 1){ @@ -16516,9 +16516,9 @@ void WriteIniLocal(FILE *fileout){ #ifdef pp_LOAD_BOUNDS fprintf(fileout, "LOADMESH\n"); fprintf(fileout, " %i %i\n", show_intersection_box, show_intersected_meshes); - fprintf(fileout, " %i %f %i %f\n", use_load_bounds[0], load_bounds[0], use_load_bounds[1], load_bounds[1]); - fprintf(fileout, " %i %f %i %f\n", use_load_bounds[2], load_bounds[2], use_load_bounds[3], load_bounds[3]); - fprintf(fileout, " %i %f %i %f\n", use_load_bounds[4], load_bounds[4], use_load_bounds[5], load_bounds[5]); + fprintf(fileout, " %i %f %i %f\n", use_meshclip[0], meshclip[0], use_meshclip[1], meshclip[1]); + fprintf(fileout, " %i %f %i %f\n", use_meshclip[2], meshclip[2], use_meshclip[3], meshclip[3]); + fprintf(fileout, " %i %f %i %f\n", use_meshclip[4], meshclip[4], use_meshclip[5], meshclip[5]); #endif fprintf(fileout, "PATCHDATAOUT\n"); fprintf(fileout, " %i %f %f %f %f %f %f %f %f\n", output_patchdata, diff --git a/Source/smokeview/showscene.c b/Source/smokeview/showscene.c index 427f79b6e8..116930f763 100644 --- a/Source/smokeview/showscene.c +++ b/Source/smokeview/showscene.c @@ -203,7 +203,7 @@ void ShowScene2(int mode){ glPushMatrix(); glScalef(SCALE2SMV(1.0), SCALE2SMV(1.0), SCALE2SMV(1.0)); glTranslatef(-xbar0, -ybar0, -zbar0); - DrawBox(load_bounds, box_red); + DrawBox(meshclip, box_red); glPopMatrix(); } #endif diff --git a/Source/smokeview/smokeviewvars.h b/Source/smokeview/smokeviewvars.h index 3e4cf43681..2fae1ed4d9 100644 --- a/Source/smokeview/smokeviewvars.h +++ b/Source/smokeview/smokeviewvars.h @@ -2227,18 +2227,18 @@ SVEXTERN int SVDECL(hidepatchsurface,0); #ifdef pp_LOAD_BOUNDS #ifdef INMAIN -SVEXTERN float load_bounds[6] = {0.0, 1.0, 0.0, 1.0, 0.0, 1.0}; -SVEXTERN float load_bounds_save[6] = {0.0, 1.0, 0.0, 1.0, 0.0, 1.0}; -SVEXTERN int use_load_bounds[6] = {0, 0, 0, 0, 0, 0}; +SVEXTERN float meshclip[6] = {0.0, 1.0, 0.0, 1.0, 0.0, 1.0}; +SVEXTERN float meshclip_save[6] = {0.0, 1.0, 0.0, 1.0, 0.0, 1.0}; +SVEXTERN int use_meshclip[6] = {0, 0, 0, 0, 0, 0}; #else -SVEXTERN float load_bounds[6]; -SVEXTERN float load_bounds_save[6]; -SVEXTERN int use_load_bounds[6]; +SVEXTERN float meshclip[6]; +SVEXTERN float meshclip_save[6]; +SVEXTERN int use_meshclip[6]; #endif SVEXTERN int SVDECL(show_intersection_box, 0); SVEXTERN int SVDECL(show_intersected_meshes, 0); -SVEXTERN int SVDECL(update_load_bounds, 0); -SVEXTERN int SVDECL(glui_load_bounds_defined, 0); +SVEXTERN int SVDECL(update_meshclip, 0); +SVEXTERN int SVDECL(glui_meshclip_defined, 0); SVEXTERN int SVDECL(set_mesh, 0); SVEXTERN int SVDECL(load_only_when_unloaded, 0); SVEXTERN int SVDECL(show_mesh_labels, 0); diff --git a/Source/smokeview/update.c b/Source/smokeview/update.c index ec4ced224a..9b144516c6 100644 --- a/Source/smokeview/update.c +++ b/Source/smokeview/update.c @@ -1889,8 +1889,8 @@ void UpdateShowScene(void){ have_smoke = HaveSootLoaded(); #ifdef pp_LOAD_BOUNDS - if(glui_load_bounds_defined==1&&update_load_bounds == 1){ - update_load_bounds = 0; + if(glui_meshclip_defined==1&&update_meshclip == 1){ + update_meshclip = 0; GLUIUpdateMeshBounds(); } #endif From 63fcb4c99ec8d3b89d21e99fee12323f50759c31 Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmail.com> Date: Tue, 9 Jan 2024 23:02:26 -0500 Subject: [PATCH 03/13] smv ug: update intersection box section --- Manuals/SMV_User_Guide/SMV_User_Guide.tex | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Manuals/SMV_User_Guide/SMV_User_Guide.tex b/Manuals/SMV_User_Guide/SMV_User_Guide.tex index 4d7a48f3fc..07a1318c67 100644 --- a/Manuals/SMV_User_Guide/SMV_User_Guide.tex +++ b/Manuals/SMV_User_Guide/SMV_User_Guide.tex @@ -1987,14 +1987,18 @@ \chapter{Setting Options} %--------------------------------------------------------------------------------- \section{Loading Data} -Data is loaded in smokeview by clicking the right mouse buttons and selecting one of the data types +Data is loaded in smokeview by clicking the right mouse button and selecting one of the data types under the Load/Unload menu. Smokeview loads data for all available times and meshes by default. -For large cases, it is useful to reduce the amount of data that is loaded in order to shorten load times . +For large cases, it is useful to reduce the amount of data loaded in order to shorten load times . To do this, one uses the Data loading dialog box -illustrated in Figure \ref{figDataloading}. To shorten the time interval over which -data is loaded, specify a min and/or max time. To reduce the number of meshes over which -data is loaded specify an intersection box. Only data in meshes within this intersection will -then be loaded. The intersection box is colored red and the meshes that are contained within this box +illustrated in Figure \ref{figDataloading}. +To open this dialog box select the Dialogs>File/Data/Coloring menu entry then select the Data loading tab. +To shorten the time interval over which +data is loaded, specify a min and/or max time in this dialog box. +To reduce the number of meshes over which +data is loaded specify an intersection box. Only data in meshes within this intersection box will +then be loaded. The intersection box may be viewd by selecting the show intersection box checkbox. +The intersection box is colored red. The meshes that are contained within this box are drawn as outlines and colored black. Mesh indices (1 to number of meshes) may be displayed and used to set the intersection box to that mesh. From 68e3631b5ac6a95edb758e3b9ae0c2eab6eab383 Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmail.com> Date: Tue, 9 Jan 2024 23:14:36 -0500 Subject: [PATCH 04/13] smv ug: fix typo --- Manuals/SMV_User_Guide/SMV_User_Guide.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Manuals/SMV_User_Guide/SMV_User_Guide.tex b/Manuals/SMV_User_Guide/SMV_User_Guide.tex index 07a1318c67..d6833c5b59 100644 --- a/Manuals/SMV_User_Guide/SMV_User_Guide.tex +++ b/Manuals/SMV_User_Guide/SMV_User_Guide.tex @@ -1997,7 +1997,7 @@ \section{Loading Data} data is loaded, specify a min and/or max time in this dialog box. To reduce the number of meshes over which data is loaded specify an intersection box. Only data in meshes within this intersection box will -then be loaded. The intersection box may be viewd by selecting the show intersection box checkbox. +then be loaded. The intersection box may be viewed by selecting the show intersection box checkbox. The intersection box is colored red. The meshes that are contained within this box are drawn as outlines and colored black. Mesh indices (1 to number of meshes) may be displayed and used to set the intersection box to that mesh. From 5364bcdbf57b43858ad1cc69248b5633946d9380 Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmail.com> Date: Tue, 9 Jan 2024 23:48:00 -0500 Subject: [PATCH 05/13] smv ug: update to intersection box section --- Manuals/SMV_User_Guide/SMV_User_Guide.tex | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Manuals/SMV_User_Guide/SMV_User_Guide.tex b/Manuals/SMV_User_Guide/SMV_User_Guide.tex index d6833c5b59..010a245ca1 100644 --- a/Manuals/SMV_User_Guide/SMV_User_Guide.tex +++ b/Manuals/SMV_User_Guide/SMV_User_Guide.tex @@ -1990,17 +1990,23 @@ \section{Loading Data} Data is loaded in smokeview by clicking the right mouse button and selecting one of the data types under the Load/Unload menu. Smokeview loads data for all available times and meshes by default. For large cases, it is useful to reduce the amount of data loaded in order to shorten load times . -To do this, one uses the Data loading dialog box +To do this, one uses the Data loading options tab of the Files/Data/Coloring dialog box illustrated in Figure \ref{figDataloading}. -To open this dialog box select the Dialogs>File/Data/Coloring menu entry then select the Data loading tab. +To open this dialog box select the Dialogs>File/Data/Coloring menu entry then select the Data loading options tab. To shorten the time interval over which data is loaded, specify a min and/or max time in this dialog box. To reduce the number of meshes over which -data is loaded specify an intersection box. Only data in meshes within this intersection box will -then be loaded. The intersection box may be viewed by selecting the show intersection box checkbox. +data is loaded specify an intersection box. +The intersection box may be viewed by selecting the show intersection box checkbox. The intersection box is colored red. The meshes that are contained within this box are drawn as outlines and colored black. Mesh indices (1 to number of meshes) may be displayed and used to set the intersection box to that mesh. +Only data in meshes within the intersection box will +then be loaded. +If the `Load a file only if unloaded` checkbox is selected and if the intersection box +is expanded to include more meshes then only data in these extra meshes where data was not loaded before will be loaded +(data will not be loaded twice). + \begin{figure}[bph] \centerline{ From d4970912c8e6a5d95741d2ed3f7c587fa9ca0037 Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmail.com> Date: Tue, 9 Jan 2024 23:55:28 -0500 Subject: [PATCH 06/13] smokeview source: minor formatting edits to intersection box dialog box - change radio button to a checkbox --- Source/smokeview/glui_bounds.cpp | 10 +++------- Source/smokeview/menus.c | 2 -- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/Source/smokeview/glui_bounds.cpp b/Source/smokeview/glui_bounds.cpp index eb652caeb1..8eb6b3ca61 100644 --- a/Source/smokeview/glui_bounds.cpp +++ b/Source/smokeview/glui_bounds.cpp @@ -2557,11 +2557,9 @@ GLUI_Checkbox *CHECKBOX_show_extreme_maxdata = NULL; GLUI_Checkbox *CHECKBOX_use_meshclip[6]; GLUI_Checkbox *CHECKBOX_show_intersection_box=NULL; GLUI_Checkbox *CHECKBOX_show_intersected_meshes = NULL; +GLUI_Checkbox *CHECKBOX_load_only_when_unloaded = NULL; #endif -#ifdef pp_LOAD_BOUNDS -GLUI_RadioGroup *RADIO_load_only_when_unloaded = NULL; -#endif GLUI_RadioGroup *RADIO_iso_setmin=NULL; GLUI_RadioGroup *RADIO_iso_setmax=NULL; GLUI_RadioGroup *RADIO_transparency_option=NULL; @@ -2687,7 +2685,7 @@ extern "C" void GLUIUpdatePartPointSize(void){ #ifdef pp_LOAD_BOUNDS extern "C" void GLUIUpdateLoadWhenLoaded(void){ - RADIO_load_only_when_unloaded->set_int_val(load_only_when_unloaded); + CHECKBOX_load_only_when_unloaded->set_int_val(load_only_when_unloaded); } #endif @@ -4977,9 +4975,7 @@ hvacductboundsCPP.setup("hvac", ROLLOUT_hvacduct, hvacductbounds_cpp, nhvacductb CHECKBOX_show_intersection_box = glui_bounds->add_checkbox_to_panel(PANEL_mesh1, "show intersection box", &show_intersection_box, USEMESH_DRAW_BOX, MeshBoundCB); CHECKBOX_show_intersected_meshes = glui_bounds->add_checkbox_to_panel(PANEL_mesh1, "show intersected meshes", &show_intersected_meshes, USEMESH_DRAW_MESH, MeshBoundCB); glui_bounds->add_checkbox_to_panel(PANEL_mesh1, "show intersected mesh indices", &show_mesh_labels); - RADIO_load_only_when_unloaded = glui_bounds->add_radiogroup_to_panel(PANEL_mesh1, &load_only_when_unloaded, USEMESH_LOAD_WHEN_LOADED, MeshBoundCB); - glui_bounds->add_radiobutton_to_group(RADIO_load_only_when_unloaded, "Load a file if either loaded or unloaded"); - glui_bounds->add_radiobutton_to_group(RADIO_load_only_when_unloaded, "Load a file only if unloaded"); + CHECKBOX_load_only_when_unloaded = glui_bounds->add_checkbox_to_panel(PANEL_mesh1, "Load a file only if unloaded", &load_only_when_unloaded, USEMESH_LOAD_WHEN_LOADED, MeshBoundCB); glui_bounds->add_column_to_panel(PANEL_mesh1, false); diff --git a/Source/smokeview/menus.c b/Source/smokeview/menus.c index e3b3281590..df9a951a4e 100644 --- a/Source/smokeview/menus.c +++ b/Source/smokeview/menus.c @@ -12810,11 +12810,9 @@ static int menu_count=0; GLUTADDSUBMENU(_("Reload"),reloadmenu); #ifdef pp_LOAD_BOUNDS if(load_only_when_unloaded==1){ - glutAddMenuEntry(_("Load a file if either loaded or unloaded"), LOAD_WHEN_LOADED); glutAddMenuEntry(_("*Load a file only if unloaded"), LOAD_WHEN_LOADED); } else{ - glutAddMenuEntry(_("*Load a file if either loaded or unloaded"), LOAD_WHEN_LOADED); glutAddMenuEntry(_("Load a file only if unloaded"), LOAD_WHEN_LOADED); } #endif From 84ab45f8a05efa04ccaba7b6892dfc97d063243e Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmail.com> Date: Wed, 10 Jan 2024 15:19:14 -0500 Subject: [PATCH 07/13] smokeview source: fix to bounds computation when reloading a slice file while fds is running --- Source/smokeview/IOslice.c | 8 ++++++-- Source/smokeview/getdatabounds.c | 12 +++++++----- Source/smokeview/glui_bounds.cpp | 1 - Source/smokeview/main.c | 5 +++++ Source/smokeview/readsmv.c | 4 ++++ Source/smokeview/smokeheaders.h | 3 ++- Source/smokeview/smokeview.c | 13 +++++++++++++ Source/smokeview/smokeviewvars.h | 3 +++ 8 files changed, 40 insertions(+), 9 deletions(-) diff --git a/Source/smokeview/IOslice.c b/Source/smokeview/IOslice.c index 12d221dbf5..d10ff0dc1a 100644 --- a/Source/smokeview/IOslice.c +++ b/Source/smokeview/IOslice.c @@ -5041,6 +5041,7 @@ FILE_SIZE ReadSlice(const char *file, int ifile, int time_frame, float *time_val slicefile_labelindex = GetSliceBoundsIndex(sd); plotstate = GetPlotState(DYNAMIC_PLOTS); + int recompute = 0; if(sd->finalize==1){ int set_valmin, set_valmax; @@ -5048,8 +5049,10 @@ FILE_SIZE ReadSlice(const char *file, int ifile, int time_frame, float *time_val if(runscript == 0){ THREADcontrol(slicebound_threads, THREAD_JOIN); } - if(force_bound_update==1||slice_bounds_defined==0){ - GetGlobalSliceBounds(1); + if(force_bound_update==1||slice_bounds_defined==0||IsFDSRunning()==1){ + recompute = 1; +#define DONOT_SET_FLAG 0 + GetGlobalSliceBounds(1, DONOT_SET_FLAG); SetLoadedSliceBounds(NULL, 0); } GLUIGetMinMax(BOUND_SLICE, sd->label.shortlabel, &set_valmin, &qmin, &set_valmax, &qmax); @@ -5132,6 +5135,7 @@ FILE_SIZE ReadSlice(const char *file, int ifile, int time_frame, float *time_val PRINTF(" - %.0f KB/%.1f s\n", (float)file_size / 1000., total_time); } } + if(recompute==1)printf("***recomputing slice bounds\n"); update_flipped_colorbar=1; diff --git a/Source/smokeview/getdatabounds.c b/Source/smokeview/getdatabounds.c index 74a720c924..82173b26fa 100644 --- a/Source/smokeview/getdatabounds.c +++ b/Source/smokeview/getdatabounds.c @@ -541,7 +541,7 @@ void GetLoadedPlot3dBounds(int *compute_loaded, float *loaded_min, float *loaded /* ------------------ GetGlobalSliceBounds ------------------------ */ -void GetGlobalSliceBounds(int flag){ +void GetGlobalSliceBounds(int flag, int set_flag){ int i; if(nsliceinfo==0)return; @@ -617,13 +617,13 @@ void GetGlobalSliceBounds(int flag){ boundscppi->cache = cache_slice_data; boundscppi->set_valtype = 0; - boundscppi->set_valmin = 0; + if(set_flag == 1)boundscppi->set_valmin = 0; boundscppi->valmin[BOUND_SET_MIN] = boundi->dlg_global_valmin; boundscppi->valmin[BOUND_LOADED_MIN] = boundi->dlg_global_valmin; boundscppi->valmin[BOUND_GLOBAL_MIN] = boundi->dlg_global_valmin; boundscppi->valmin[BOUND_PERCENTILE_MIN] = boundi->dlg_global_valmin; - boundscppi->set_valmax = 0; + if(set_flag == 1)boundscppi->set_valmax = 0; boundscppi->valmax[BOUND_SET_MAX] = boundi->dlg_global_valmax; boundscppi->valmax[BOUND_LOADED_MAX] = boundi->dlg_global_valmax; boundscppi->valmax[BOUND_GLOBAL_MAX] = boundi->dlg_global_valmax; @@ -638,11 +638,13 @@ void GetGlobalSliceBounds(int flag){ } } +#define SET_FLAG 1 + /* ------------------ GetGlobalSliceBoundsFull ------------------------ */ void *GetGlobalSliceBoundsFull(void *arg){ THREADcontrol(slicebound_threads, THREAD_LOCK); - GetGlobalSliceBounds(1); + GetGlobalSliceBounds(1,SET_FLAG); THREADcontrol(slicebound_threads, THREAD_UNLOCK); THREAD_EXIT(slicebound_threads); } @@ -650,7 +652,7 @@ void *GetGlobalSliceBoundsFull(void *arg){ /* ------------------ GetGlobalSliceBoundsReduced ------------------------ */ void GetGlobalSliceBoundsReduced(void){ - GetGlobalSliceBounds(0); + GetGlobalSliceBounds(0,SET_FLAG); } /* ------------------ GetHVACDuctBounds ------------------------ */ diff --git a/Source/smokeview/glui_bounds.cpp b/Source/smokeview/glui_bounds.cpp index 8eb6b3ca61..8b81ad6e08 100644 --- a/Source/smokeview/glui_bounds.cpp +++ b/Source/smokeview/glui_bounds.cpp @@ -1162,7 +1162,6 @@ extern "C" void GLUISetValTypeIndex(int type, int valtype_index){ /* ------------------ GLUIGetOnlyMinMax ------------------------ */ - extern "C" void GLUIGetOnlyMinMax(int type, char *label, int *set_valmin, float *valmin, int *set_valmax, float *valmax){ switch(type){ case BOUND_HVACDUCT: diff --git a/Source/smokeview/main.c b/Source/smokeview/main.c index 9c8c08f71b..87a5aa8764 100644 --- a/Source/smokeview/main.c +++ b/Source/smokeview/main.c @@ -308,6 +308,11 @@ char *ProcessCommandLine(CommandlineArgs *args) { STRCPY(expcsv_filename, fdsprefix); STRCAT(expcsv_filename, "_exp.csv"); + FREEMEMORY(stepcsv_filename); + NewMemory(( void ** )&stepcsv_filename, len_casename + strlen("_steps.csv") + 1); + STRCPY(stepcsv_filename, fdsprefix); + STRCAT(stepcsv_filename, "_steps.csv"); + FREEMEMORY(dEcsv_filename); NewMemory(( void ** )&dEcsv_filename, len_casename + strlen("_dE.csv") + 1); STRCPY(dEcsv_filename, fdsprefix); diff --git a/Source/smokeview/readsmv.c b/Source/smokeview/readsmv.c index d3480ec5bc..944143bfe6 100644 --- a/Source/smokeview/readsmv.c +++ b/Source/smokeview/readsmv.c @@ -11634,6 +11634,10 @@ int ReadSMV_Configure(){ PRINTF(" wrapping up\n"); + INIT_PRINT_TIMER(fdsrunning_timer); + last_file_size = GetFileSizeSMV(stepcsv_filename); // used by IsFDSRunning + PRINT_TIMER(fdsrunning_timer, "filesize_timer"); // if file size changes then assume fds is running + have_obsts = 0; for(i=0;i<nmeshes;i++){ meshdata *meshi; diff --git a/Source/smokeview/smokeheaders.h b/Source/smokeview/smokeheaders.h index 91d2fc16cb..e1c51350ae 100644 --- a/Source/smokeview/smokeheaders.h +++ b/Source/smokeview/smokeheaders.h @@ -437,7 +437,8 @@ EXTERNCPP void GetGlobalPatchBounds(int flag); EXTERNCPP void GetGlobalPatchBoundsReduced(void); EXTERNCPP void GetLoadedPlot3dBounds(int *compute_loaded, float *loaded_min, float *loaded_max); EXTERNCPP void GetGlobalPlot3DBounds(void); -EXTERNCPP void GetGlobalSliceBounds(int flag); +EXTERNCPP void GetGlobalSliceBounds(int flag, int set_flag); +EXTERNCPP int IsFDSRunning(void); EXTERNCPP void GetGlobalSliceBoundsReduced(void); EXTERNCPP void GetGlobalHVACDuctBounds(int flag); EXTERNCPP void GetGlobalHVACNodeBounds(int flag); diff --git a/Source/smokeview/smokeview.c b/Source/smokeview/smokeview.c index 2facdf4093..fa534a2526 100644 --- a/Source/smokeview/smokeview.c +++ b/Source/smokeview/smokeview.c @@ -237,6 +237,19 @@ void DisplayVersionInfo(char *progname){ } } +/* ------------------ IsFDSRunning ------------------------ */ + +int IsFDSRunning(void){ + FILE_SIZE file_size; + + file_size = GetFileSizeSMV(stepcsv_filename); + if(file_size != last_file_size){ + last_file_size = file_size; + return 1; + } + return 0; +} + /* ------------------ SMV_EXIT ------------------------ */ void SMV_EXIT(int code){ diff --git a/Source/smokeview/smokeviewvars.h b/Source/smokeview/smokeviewvars.h index 2fae1ed4d9..246ea90218 100644 --- a/Source/smokeview/smokeviewvars.h +++ b/Source/smokeview/smokeviewvars.h @@ -120,6 +120,9 @@ SVEXTERN int hvac_duct_color[3]; SVEXTERN int hvac_node_color[3]; #endif +SVEXTERN FILE_SIZE SVDECL(last_file_size, 0); +SVEXTERN char SVDECL(*stepcsv_filename, NULL); + SVEXTERN int SVDECL(histogram_nframes, 40); SVEXTERN int SVDECL(glui_surf_index, 0); SVEXTERN int SVDECL(clip_commandline, 0), SVDECL(special_modifier, 0); From 100ca4d9722b9a03f2dd7203a542fba74a437e5d Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmail.com> Date: Wed, 10 Jan 2024 16:19:55 -0500 Subject: [PATCH 08/13] smokeview source: fix to bounds computation when loading boundary files while fds is running --- Source/shared/datadefs.h | 3 +++ Source/smokeview/IOboundary.c | 7 +++++-- Source/smokeview/IOslice.c | 7 +++---- Source/smokeview/getdatabounds.c | 16 +++++++--------- Source/smokeview/glui_bounds.cpp | 2 +- Source/smokeview/readsmv.c | 3 ++- Source/smokeview/smokeheaders.h | 4 ++-- Source/smokeview/smokeview.c | 6 +++--- Source/smokeview/smokeviewvars.h | 3 ++- 9 files changed, 28 insertions(+), 23 deletions(-) diff --git a/Source/shared/datadefs.h b/Source/shared/datadefs.h index cb2c6b7179..5075574303 100644 --- a/Source/shared/datadefs.h +++ b/Source/shared/datadefs.h @@ -54,6 +54,9 @@ #define SMV2FDS_Y(y) (ybar0+(y)*xyzmaxdiff) #define SMV2FDS_Z(z) (zbar0+(z)*xyzmaxdiff) +#define DONOT_SET_MINMAX_FLAG 0 +#define SET_MINMAX_FLAG 1 + #define VERT_AVG2(v1,v2,vavg) \ vavg[0]=(v1[0]+v2[0])/2.0;\ vavg[1]=(v1[1]+v2[1])/2.0;\ diff --git a/Source/smokeview/IOboundary.c b/Source/smokeview/IOboundary.c index c9100cc25a..9f33dec9e2 100644 --- a/Source/smokeview/IOboundary.c +++ b/Source/smokeview/IOboundary.c @@ -2361,6 +2361,7 @@ FILE_SIZE ReadBoundaryBndf(int ifile, int flag, int *errorcode){ patchi->display = 1; patchi->hist_update = 1; + int recompute = 0; if(patchi->finalize==1){ GLUIUpdateBoundaryListIndex(patchfilenum); #define BOUND_UPDATE_COLORS 110 @@ -2371,10 +2372,11 @@ FILE_SIZE ReadBoundaryBndf(int ifile, int flag, int *errorcode){ if(runscript == 0){ THREADcontrol(patchbound_threads, THREAD_JOIN); } - if(force_bound_update==1||patch_bounds_defined==0){ - GetGlobalPatchBounds(1); + if(force_bound_update==1||patch_bounds_defined==0 || IsFDSRunning(&last_size_for_boundary) == 1){ + GetGlobalPatchBounds(1,DONOT_SET_MINMAX_FLAG); SetLoadedPatchBounds(NULL, 0); GLUIPatchBoundsCPP_CB(BOUND_DONTUPDATE_COLORS); + recompute = 1; } else{ bounds = GLUIGetBoundsData(BOUND_PATCH); @@ -2427,6 +2429,7 @@ FILE_SIZE ReadBoundaryBndf(int ifile, int flag, int *errorcode){ else{ PRINTF(" - %.0f kB in %.1f s\n", (float)return_filesize / 1000., total_time); } + if(recompute == 1)printf("***recomputing bounds\n"); update_patch_bounds = ifile; diff --git a/Source/smokeview/IOslice.c b/Source/smokeview/IOslice.c index d10ff0dc1a..21895c0937 100644 --- a/Source/smokeview/IOslice.c +++ b/Source/smokeview/IOslice.c @@ -5049,10 +5049,9 @@ FILE_SIZE ReadSlice(const char *file, int ifile, int time_frame, float *time_val if(runscript == 0){ THREADcontrol(slicebound_threads, THREAD_JOIN); } - if(force_bound_update==1||slice_bounds_defined==0||IsFDSRunning()==1){ + if(force_bound_update==1||slice_bounds_defined==0||IsFDSRunning(&last_size_for_slice)==1){ recompute = 1; -#define DONOT_SET_FLAG 0 - GetGlobalSliceBounds(1, DONOT_SET_FLAG); + GetGlobalSliceBounds(1, DONOT_SET_MINMAX_FLAG); SetLoadedSliceBounds(NULL, 0); } GLUIGetMinMax(BOUND_SLICE, sd->label.shortlabel, &set_valmin, &qmin, &set_valmax, &qmax); @@ -5135,7 +5134,7 @@ FILE_SIZE ReadSlice(const char *file, int ifile, int time_frame, float *time_val PRINTF(" - %.0f KB/%.1f s\n", (float)file_size / 1000., total_time); } } - if(recompute==1)printf("***recomputing slice bounds\n"); + if(recompute==1)printf("***recomputing bounds\n"); update_flipped_colorbar=1; diff --git a/Source/smokeview/getdatabounds.c b/Source/smokeview/getdatabounds.c index 82173b26fa..bdaf886993 100644 --- a/Source/smokeview/getdatabounds.c +++ b/Source/smokeview/getdatabounds.c @@ -266,7 +266,7 @@ int GetBounds(char *file, float *valmin, float *valmax, /* ------------------ GetGlobalPatchBounds ------------------------ */ -void GetGlobalPatchBounds(int flag){ +void GetGlobalPatchBounds(int flag, int set_flag){ int i; if(npatchinfo==0)return; @@ -351,7 +351,7 @@ void GetGlobalPatchBounds(int flag){ boundscppi->cache = cache_boundary_data; boundscppi->set_valtype = 0; - boundscppi->set_valmin = 0; + if(set_flag==1)boundscppi->set_valmin = 0; boundscppi->valmin[BOUND_SET_MIN] = boundi->dlg_global_valmin; boundscppi->valmin[BOUND_LOADED_MIN] = boundi->dlg_global_valmin; boundscppi->valmin[BOUND_GLOBAL_MIN] = boundi->dlg_global_valmin; @@ -361,7 +361,7 @@ void GetGlobalPatchBounds(int flag){ boundscppi->valmax[BOUND_LOADED_MAX] = boundi->dlg_global_valmax; boundscppi->valmax[BOUND_GLOBAL_MAX] = boundi->dlg_global_valmax; boundscppi->valmax[BOUND_PERCENTILE_MAX] = boundi->dlg_global_valmax; - boundscppi->set_valmax = 0; + if(set_flag==1)boundscppi->set_valmax = 0; boundscppi->set_chopmin = boundi->setchopmin; boundscppi->set_chopmax = boundi->setchopmax; @@ -376,7 +376,7 @@ void GetGlobalPatchBounds(int flag){ void *GetGlobalPatchBoundsFull(void *arg){ THREADcontrol(patchbound_threads, THREAD_LOCK); - GetGlobalPatchBounds(1); + GetGlobalPatchBounds(1,SET_MINMAX_FLAG); THREADcontrol(patchbound_threads, THREAD_UNLOCK); THREAD_EXIT(patchbound_threads); } @@ -384,7 +384,7 @@ void *GetGlobalPatchBoundsFull(void *arg){ /* ------------------ GetGlobalPatchBoundsReduced ------------------------ */ void GetGlobalPatchBoundsReduced(void){ - GetGlobalPatchBounds(0); + GetGlobalPatchBounds(0,SET_MINMAX_FLAG); } /* ------------------ GetPlot3DFileBounds ------------------------ */ @@ -638,13 +638,11 @@ void GetGlobalSliceBounds(int flag, int set_flag){ } } -#define SET_FLAG 1 - /* ------------------ GetGlobalSliceBoundsFull ------------------------ */ void *GetGlobalSliceBoundsFull(void *arg){ THREADcontrol(slicebound_threads, THREAD_LOCK); - GetGlobalSliceBounds(1,SET_FLAG); + GetGlobalSliceBounds(1,SET_MINMAX_FLAG); THREADcontrol(slicebound_threads, THREAD_UNLOCK); THREAD_EXIT(slicebound_threads); } @@ -652,7 +650,7 @@ void *GetGlobalSliceBoundsFull(void *arg){ /* ------------------ GetGlobalSliceBoundsReduced ------------------------ */ void GetGlobalSliceBoundsReduced(void){ - GetGlobalSliceBounds(0,SET_FLAG); + GetGlobalSliceBounds(0,SET_MINMAX_FLAG); } /* ------------------ GetHVACDuctBounds ------------------------ */ diff --git a/Source/smokeview/glui_bounds.cpp b/Source/smokeview/glui_bounds.cpp index 8b81ad6e08..8c12600057 100644 --- a/Source/smokeview/glui_bounds.cpp +++ b/Source/smokeview/glui_bounds.cpp @@ -3565,7 +3565,7 @@ void BoundBoundCB(int var){ BoundBoundCB(UPDATE_DATA_COLORS); break; case UPDATE_DATA_COLORS: - GetGlobalPatchBounds(1); + GetGlobalPatchBounds(1,SET_MINMAX_FLAG); if(patchlabellist != NULL)Global2GLUIBoundaryBounds(patchlabellist[list_patch_index]); UpdateAllBoundaryColors(1); break; diff --git a/Source/smokeview/readsmv.c b/Source/smokeview/readsmv.c index 944143bfe6..4356966e14 100644 --- a/Source/smokeview/readsmv.c +++ b/Source/smokeview/readsmv.c @@ -11635,7 +11635,8 @@ int ReadSMV_Configure(){ PRINTF(" wrapping up\n"); INIT_PRINT_TIMER(fdsrunning_timer); - last_file_size = GetFileSizeSMV(stepcsv_filename); // used by IsFDSRunning + last_size_for_slice = GetFileSizeSMV(stepcsv_filename); // used by IsFDSRunning + last_size_for_boundary = last_size_for_slice; PRINT_TIMER(fdsrunning_timer, "filesize_timer"); // if file size changes then assume fds is running have_obsts = 0; diff --git a/Source/smokeview/smokeheaders.h b/Source/smokeview/smokeheaders.h index e1c51350ae..5c014814b6 100644 --- a/Source/smokeview/smokeheaders.h +++ b/Source/smokeview/smokeheaders.h @@ -433,12 +433,12 @@ EXTERNCPP void UpdateBlockType(void); boundsdata *GetSliceBoundsInfo(char *shortlabel); boundsdata *GetPatchBoundsInfo(char *shortlabel); EXTERNCPP int GetGlobalPartBounds(int flag); -EXTERNCPP void GetGlobalPatchBounds(int flag); +EXTERNCPP void GetGlobalPatchBounds(int flag, int set_flag); EXTERNCPP void GetGlobalPatchBoundsReduced(void); EXTERNCPP void GetLoadedPlot3dBounds(int *compute_loaded, float *loaded_min, float *loaded_max); EXTERNCPP void GetGlobalPlot3DBounds(void); EXTERNCPP void GetGlobalSliceBounds(int flag, int set_flag); -EXTERNCPP int IsFDSRunning(void); +EXTERNCPP int IsFDSRunning(FILE_SIZE *last_size); EXTERNCPP void GetGlobalSliceBoundsReduced(void); EXTERNCPP void GetGlobalHVACDuctBounds(int flag); EXTERNCPP void GetGlobalHVACNodeBounds(int flag); diff --git a/Source/smokeview/smokeview.c b/Source/smokeview/smokeview.c index fa534a2526..732a340bac 100644 --- a/Source/smokeview/smokeview.c +++ b/Source/smokeview/smokeview.c @@ -239,12 +239,12 @@ void DisplayVersionInfo(char *progname){ /* ------------------ IsFDSRunning ------------------------ */ -int IsFDSRunning(void){ +int IsFDSRunning(FILE_SIZE *last_size){ FILE_SIZE file_size; file_size = GetFileSizeSMV(stepcsv_filename); - if(file_size != last_file_size){ - last_file_size = file_size; + if(file_size != *last_size){ + *last_size = file_size; return 1; } return 0; diff --git a/Source/smokeview/smokeviewvars.h b/Source/smokeview/smokeviewvars.h index 246ea90218..2c1ff559b8 100644 --- a/Source/smokeview/smokeviewvars.h +++ b/Source/smokeview/smokeviewvars.h @@ -120,7 +120,8 @@ SVEXTERN int hvac_duct_color[3]; SVEXTERN int hvac_node_color[3]; #endif -SVEXTERN FILE_SIZE SVDECL(last_file_size, 0); +SVEXTERN FILE_SIZE SVDECL(last_size_for_slice, 0); +SVEXTERN FILE_SIZE SVDECL(last_size_for_boundary, 0); SVEXTERN char SVDECL(*stepcsv_filename, NULL); SVEXTERN int SVDECL(histogram_nframes, 40); From eb5afe28110845ce5fa3464341778e701e84c862 Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmail.com> Date: Wed, 10 Jan 2024 23:16:09 -0500 Subject: [PATCH 09/13] smokeview source: fixto bounds computation when loading geometry boundary files and geometry slice files when fds is running --- Source/smokeview/IOboundary.c | 3 --- Source/smokeview/IOgeometry.c | 17 +++++++++++++++++ Source/smokeview/glui_bounds.cpp | 2 +- Source/smokeview/menus.c | 1 - Source/smokeview/smokeviewdefs.h | 6 ++++-- 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Source/smokeview/IOboundary.c b/Source/smokeview/IOboundary.c index 9f33dec9e2..c3c704199a 100644 --- a/Source/smokeview/IOboundary.c +++ b/Source/smokeview/IOboundary.c @@ -2364,9 +2364,6 @@ FILE_SIZE ReadBoundaryBndf(int ifile, int flag, int *errorcode){ int recompute = 0; if(patchi->finalize==1){ GLUIUpdateBoundaryListIndex(patchfilenum); -#define BOUND_UPDATE_COLORS 110 -#define BOUND_DONTUPDATE_COLORS 128 -#define BOUND_COMPUTE_PERCENTILES 116 cpp_boundsdata *bounds; if(runscript == 0){ diff --git a/Source/smokeview/IOgeometry.c b/Source/smokeview/IOgeometry.c index a3b7f1d26b..a986f91516 100644 --- a/Source/smokeview/IOgeometry.c +++ b/Source/smokeview/IOgeometry.c @@ -3029,6 +3029,7 @@ FILE_SIZE ReadGeomData(patchdata *patchi, slicedata *slicei, int load_flag, int else{ slicefile_labelindex = GetSliceBoundsIndexFromLabel(patchi->label.shortlabel); } + int recompute = 0; if((slicei==NULL&&patchi->finalize==1)||(slicei!=NULL&&slicei->finalize==1)){ plotstate = GetPlotState(DYNAMIC_PLOTS); if(patchi->boundary==1)UpdateBoundaryType(); @@ -3044,6 +3045,21 @@ FILE_SIZE ReadGeomData(patchdata *patchi, slicedata *slicei, int load_flag, int bounds = GLUIGetBoundsData(bound_type); INIT_PRINT_TIMER(geom_bounds_timer); + if(patchi->boundary == 1){ + if(force_bound_update==1||patch_bounds_defined==0 || IsFDSRunning(&last_size_for_boundary) == 1){ + GetGlobalPatchBounds(1,DONOT_SET_MINMAX_FLAG); + SetLoadedPatchBounds(NULL, 0); + GLUIPatchBoundsCPP_CB(BOUND_DONTUPDATE_COLORS); + recompute = 1; + } + } + else{ + if(force_bound_update==1||slice_bounds_defined==0||IsFDSRunning(&last_size_for_slice)==1){ + GetGlobalSliceBounds(1, DONOT_SET_MINMAX_FLAG); + SetLoadedSliceBounds(NULL, 0); + recompute = 1; + } + } if(bounds->set_valmin==BOUND_SET_MIN||bounds->set_valmax==BOUND_SET_MAX){ if(patchi->boundary==1){ } @@ -3079,6 +3095,7 @@ FILE_SIZE ReadGeomData(patchdata *patchi, slicedata *slicei, int load_flag, int PRINTF(" - %.1f MB/%.1f s\n", (float)return_filesize/1000000., total_time); } PrintMemoryInfo; + if(recompute == 1)printf("***recomputing bounds\n"); return return_filesize; } diff --git a/Source/smokeview/glui_bounds.cpp b/Source/smokeview/glui_bounds.cpp index 8c12600057..24fb8f1923 100644 --- a/Source/smokeview/glui_bounds.cpp +++ b/Source/smokeview/glui_bounds.cpp @@ -47,7 +47,7 @@ GLUI *glui_bounds=NULL; #define BOUND_PERCENTILE_MODE 125 #define BOUND_PLOT_MINMAX 126 #define BOUND_COLORBAR_DIGITS 127 -#define BOUND_DONTUPDATE_COLORS 128 +//#define BOUND_DONTUPDATE_COLORS 128 // moved to datadefs.h #define SET_PERCENTILE_MIN_VAL 129 #define SET_PERCENTILE_MAX_VAL 130 #define SET_PERCENTILE_MIN_LEVEL 131 diff --git a/Source/smokeview/menus.c b/Source/smokeview/menus.c index df9a951a4e..d8286190e8 100644 --- a/Source/smokeview/menus.c +++ b/Source/smokeview/menus.c @@ -3471,7 +3471,6 @@ void LoadUnloadMenu(int value){ //*** reload vector slice and slice files -#define BOUND_UPDATE_COLORS 110 slicefile_labelindex_save = slicefile_labelindex; START_TIMER(load_time); SetLoadedSliceBounds(NULL, 0); diff --git a/Source/smokeview/smokeviewdefs.h b/Source/smokeview/smokeviewdefs.h index df6b6d1f8f..9ca234d52c 100644 --- a/Source/smokeview/smokeviewdefs.h +++ b/Source/smokeview/smokeviewdefs.h @@ -7,11 +7,13 @@ EXTERNCPP void _Sniff_Errors(const char *whereat, const char *file, int line); #define SNIFF_ERRORS(f) #endif +#define BOUND_UPDATE_COLORS 110 +#define BOUND_DONTUPDATE_COLORS 128 +#define BOUND_COMPUTE_PERCENTILES 116 + #define MENU_HVAC_LOAD 0 #define MENU_HVAC_UNLOAD 1 -#define BOUND_UPDATE_COLORS 110 - #define HVAC_FILTER_NO 0 #define HVAC_FILTER_YES 1 #define HVAC_NONE 0 From 54d729e80af5123e77b62baa6b43524cc9458ec2 Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmail.com> Date: Thu, 11 Jan 2024 10:43:51 -0500 Subject: [PATCH 10/13] smv vv: add bound test cases --- Verification/Visualization/boundtest1.fds | 80 +++++++++++++++++++++++ Verification/Visualization/boundtest2.fds | 44 +++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 Verification/Visualization/boundtest1.fds create mode 100644 Verification/Visualization/boundtest2.fds diff --git a/Verification/Visualization/boundtest1.fds b/Verification/Visualization/boundtest1.fds new file mode 100644 index 0000000000..da98d741ea --- /dev/null +++ b/Verification/Visualization/boundtest1.fds @@ -0,0 +1,80 @@ +&HEAD CHID='boundtest1',TITLE='Plume whirl case' / + + same as plume5a except there is a blockage in the middle of the scene to block the flow + The purpose of this case is to demonstrate the curved flow (via streak lines) that results. + +&MESH IJK=8,8,16, XB=0.0,0.8,0.0,0.8,0.0,1.6, MULT_ID='mesh'/ +&MULT ID='mesh', DX=0.8, DY=0.8, DZ=1.6, I_UPPER=1, J_UPPER=1, K_UPPER=1 / + + +&DUMP NFRAMES=4000 DT_PL3D=8.0, DT_SL3D=0.1 / + +&TIME T_END=400. / Total simulation time + +&MATL ID = 'FABRIC' + FYI = 'Properties completely fabricated' + SPECIFIC_HEAT = 1.0 + CONDUCTIVITY = 0.1 + DENSITY = 100.0 + N_REACTIONS = 1 + NU_SPEC = 1. + SPEC_ID = 'PROPANE' + REFERENCE_TEMPERATURE = 350. + HEAT_OF_REACTION = 3000. + HEAT_OF_COMBUSTION = 15000. / + +&MATL ID = 'FOAM' + FYI = 'Properties completely fabricated' + SPECIFIC_HEAT = 1.0 + CONDUCTIVITY = 0.05 + DENSITY = 40.0 + N_REACTIONS = 1 + NU_SPEC = 1. + SPEC_ID = 'PROPANE' + REFERENCE_TEMPERATURE = 350. + HEAT_OF_REACTION = 1500. + HEAT_OF_COMBUSTION = 30000. / + +&SURF ID = 'UPHOLSTERY_LOWER' + FYI = 'Properties completely fabricated' + RGB = 151,96,88 + BURN_AWAY = .FALSE. + MATL_ID(1:2,1) = 'FABRIC','FOAM' + THICKNESS(1:2) = 0.002,0.1 +/ + +&SURF ID = 'UPHOLSTERY_UPPER' + FYI = 'Properties completely fabricated' + RGB = 151,96,88 + BURN_AWAY = .FALSE. + TMP_FRONT = 600.0 +/ +&REAC SOOT_YIELD=0.01,FUEL='PROPANE'/ +&SURF ID='BURNER',HRRPUA=600.0,RAMP_Q='FRAMP',PART_ID='tracers' / Ignition source +&RAMP ID='FRAMP',T=0,F=0/ +&RAMP ID='FRAMP',T=400,F=1/ + +&VENT XB=0.5,1.1,0.5,1.1,0.1,0.1,SURF_ID='BURNER' / fire source on kitchen stove + + +&OBST XB=0.5,1.1,0.5,1.1,0.0,0.1 / +&OBST XB=0.3,1.3,0.3,1.3,0.4,0.8 SURF_ID='UPHOLSTERY_LOWER'/ +&HOLE XB=0.6,1.0,0.2,0.8,0.3,0.9 / +&OBST XB=0.3,1.3,0.3,1.3,1.2,1.6 SURF_ID='UPHOLSTERY_UPPER' / + +&VENT MB='XMIN', SURF_ID='OPEN' / +&VENT MB='XMAX', SURF_ID='OPEN' / +&VENT MB='YMIN', SURF_ID='OPEN' / +&VENT MB='YMAX', SURF_ID='OPEN' / +&VENT MB='ZMAX', SURF_ID='OPEN' / + +&PART ID='tracers',MASSLESS=.TRUE.,DEBUG=T, + QUANTITIES(1:3)='PARTICLE U','PARTICLE V','PARTICLE W' + SAMPLING_FACTOR=10 / Description of massless tracer particles. Apply at a + solid surface with the PART_ID='tracers' + +&SLCF PBY=0.8,QUANTITY='TEMPERATURE',DEBUG=T / + +&BNDF QUANTITY='WALL TEMPERATURE',DEBUG=1 / + +&TAIL / diff --git a/Verification/Visualization/boundtest2.fds b/Verification/Visualization/boundtest2.fds new file mode 100644 index 0000000000..9513758be6 --- /dev/null +++ b/Verification/Visualization/boundtest2.fds @@ -0,0 +1,44 @@ +&HEAD CHID='boundtest2', TITLE='Complex Geometry: Test propane burning around sphere.' / + +# 1 MESH: +#& MESH IJK=64,64,96, XB=-2.0,2.0,-2.0,2.0,0.0,6.0 / + +# 2 MESHES: +#& MESH IJK=64,64,48, XB=-2.0,2.0,-2.0,2.0,0.0,3.0, MULT_ID='mesh' / +#& MULT ID='mesh', DZ=3, K_UPPER=1 / + +# 6 MESHES: +&MESH IJK=32,16,16, XB=-2.0,2.0,-2.0,0.0,0.0,2.0, MULT_ID='mesh' / +&MULT ID='mesh', DY=2, DZ=2, J_UPPER=1, K_UPPER=2 / + +&TIME T_END=500.0 / +&MISC STRATIFICATION=.FALSE. / +&PRES SOLVER='UGLMAT' / +&RADI RADIATION=.FALSE. / + +# Vents: +&VENT MB='YMIN', SURF_ID='OPEN' / +&VENT MB='YMAX', SURF_ID='OPEN' / +&VENT MB='XMIN', SURF_ID='OPEN' / +&VENT MB='XMAX', SURF_ID='OPEN' / +&VENT MB='ZMAX', SURF_ID='OPEN' / + +# Species: +&REAC FUEL='PROPANE', SOOT_YIELD=0.02 / + +&SURF ID='BURNER', HRRPUA=3200., COLOR='RED' / +&SURF ID='SPHERE', COLOR='GREEN', MATL_ID='SPHERE', THICKNESS=0.1, BACKING='VOID' / +&MATL ID='SPHERE', DENSITY=100, CONDUCTIVITY=1, SPECIFIC_HEAT=1 / + +# Export Parameters: +# ------ ---------- +&SLCF PBY=0, QUANTITY='TEMPERATURE',DEBUG=T / + +# Boundary colormap in &GEOM surface: +&BNDF QUANTITY='WALL TEMPERATURE',DEBUG=1 / + +# Geometries: +&OBST XB=-.5,.5,-.5,.5,0.2,.4, SURF_IDS='BURNER','INERT','INERT' / +&GEOM ID='SPHERE', SURF_ID='SPHERE', SPHERE_ORIGIN=0.,0.,2., SPHERE_RADIUS=1., N_LEVELS=3 / + +&TAIL / From 0709a3e2576c27d788295ab6b18e5468b42c0a07 Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmailcom> Date: Thu, 11 Jan 2024 10:48:04 -0500 Subject: [PATCH 11/13] smv vv: move bound test cases --- vistest/bounds/.gitignore | 0 {Verification/Visualization => vistest/bounds}/boundtest1.fds | 0 {Verification/Visualization => vistest/bounds}/boundtest2.fds | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 vistest/bounds/.gitignore rename {Verification/Visualization => vistest/bounds}/boundtest1.fds (100%) rename {Verification/Visualization => vistest/bounds}/boundtest2.fds (100%) diff --git a/vistest/bounds/.gitignore b/vistest/bounds/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Verification/Visualization/boundtest1.fds b/vistest/bounds/boundtest1.fds similarity index 100% rename from Verification/Visualization/boundtest1.fds rename to vistest/bounds/boundtest1.fds diff --git a/Verification/Visualization/boundtest2.fds b/vistest/bounds/boundtest2.fds similarity index 100% rename from Verification/Visualization/boundtest2.fds rename to vistest/bounds/boundtest2.fds From 7a23afb361e6bb4e23bef303970acb58dcd5b446 Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmailcom> Date: Thu, 11 Jan 2024 10:48:43 -0500 Subject: [PATCH 12/13] dummy commit --- Source/smokebot_trigger.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/smokebot_trigger.txt b/Source/smokebot_trigger.txt index 3a6c4d13f5..92bbd8a058 100644 --- a/Source/smokebot_trigger.txt +++ b/Source/smokebot_trigger.txt @@ -1,4 +1,4 @@ master: dummy text to trigger smokebot - devel: dummy text to trigger smokebot + devel: dummy text to trigger smokebot devel2: dummy text to trigger smokebot test: dummy text to trigger smokebot From dedd42acd78ec8a6369bf0f95cb8f5bccd3b47c1 Mon Sep 17 00:00:00 2001 From: gforney <gforney@gmailcom> Date: Thu, 11 Jan 2024 10:51:29 -0500 Subject: [PATCH 13/13] smv vv: change names of bound test cases --- vistest/bounds/{boundtest2.fds => bound_geom.fds} | 2 +- vistest/bounds/{boundtest1.fds => bound_struct.fds} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename vistest/bounds/{boundtest2.fds => bound_geom.fds} (95%) rename vistest/bounds/{boundtest1.fds => bound_struct.fds} (98%) diff --git a/vistest/bounds/boundtest2.fds b/vistest/bounds/bound_geom.fds similarity index 95% rename from vistest/bounds/boundtest2.fds rename to vistest/bounds/bound_geom.fds index 9513758be6..a77681f80b 100644 --- a/vistest/bounds/boundtest2.fds +++ b/vistest/bounds/bound_geom.fds @@ -1,4 +1,4 @@ -&HEAD CHID='boundtest2', TITLE='Complex Geometry: Test propane burning around sphere.' / +&HEAD CHID='bound_geom', TITLE='Complex Geometry: Test propane burning around sphere.' / # 1 MESH: #& MESH IJK=64,64,96, XB=-2.0,2.0,-2.0,2.0,0.0,6.0 / diff --git a/vistest/bounds/boundtest1.fds b/vistest/bounds/bound_struct.fds similarity index 98% rename from vistest/bounds/boundtest1.fds rename to vistest/bounds/bound_struct.fds index da98d741ea..49bae552ae 100644 --- a/vistest/bounds/boundtest1.fds +++ b/vistest/bounds/bound_struct.fds @@ -1,4 +1,4 @@ -&HEAD CHID='boundtest1',TITLE='Plume whirl case' / +&HEAD CHID='bound_struct',TITLE='Plume whirl case' / same as plume5a except there is a blockage in the middle of the scene to block the flow The purpose of this case is to demonstrate the curved flow (via streak lines) that results.