Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions Source/smokeview/IOsmoke.c
Original file line number Diff line number Diff line change
Expand Up @@ -4226,7 +4226,9 @@ FILE_SIZE ReadSmoke3D(int time_frame,int ifile_arg,int load_flag, int first_time
int fortran_skip=0;
#endif

#ifdef pp_SMOKE_THREAD
update_glui_merge_smoke = 1;
#endif
GLUTPOSTREDISPLAY;
SetTimeState();
update_smokefire_colors = 1;
Expand Down Expand Up @@ -4891,6 +4893,7 @@ void MergeSmoke3D(smoke3ddata *smoke3dset){
PRINT_TIMER(merge_smoke_time, "MergeSmoke3D");
}

#ifdef pp_SMOKE_THREAD
/* ------------------ UpdateGluiMergeSmoke ------------------------ */

void UpdateGluiMergeSmoke(void){
Expand Down Expand Up @@ -4932,6 +4935,27 @@ void *MtMergeSmoke3D(void *arg){
}
THREAD_EXIT(mergesmoke_threads);
}
#else
void MergeSmoke3DAll(void){
int i;

for(i = 0;i < global_scase.smoke3dcoll.nsmoke3dinfo;i++){
smoke3ddata *smoke3di;

smoke3di = global_scase.smoke3dcoll.smoke3dinfo + i;
if(smoke3di->loaded == 0 || smoke3di->display == 0)continue;
assert(smoke3di->timeslist != NULL);
if(smoke3di->timeslist==NULL)continue;
smoke3di->ismoke3d_time = smoke3di->timeslist[itimes];
if(IsSmokeComponentPresent(smoke3di) == 0)continue;
if(smoke3di->ismoke3d_time != smoke3di->lastiframe){
smoke3di->lastiframe = smoke3di->ismoke3d_time;
UpdateSmoke3D(smoke3di);
}
MergeSmoke3D(smoke3di);
}
}
#endif

/* ------------------ UpdateSmoke3dMenuLabels ------------------------ */

Expand Down
10 changes: 10 additions & 0 deletions Source/smokeview/glui_smoke.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ GLUI_Spinner *SPINNER_skipframe=NULL;
GLUI_Spinner *SPINNER_hrrpuv_cutoff=NULL;
GLUI_Spinner *SPINNER_nongpu_vol_factor=NULL;
GLUI_Spinner *SPINNER_gpu_vol_factor=NULL;
#ifdef pp_SMOKE_THREAD
GLUI_Spinner *SPINNER_smoke3d_draw_threads = NULL;
#endif
GLUI_Spinner *SPINNER_smoke3d_load_start=NULL;
GLUI_Spinner *SPINNER_smoke3d_load_skip=NULL;

Expand Down Expand Up @@ -116,7 +118,9 @@ GLUI_Checkbox **CHECKBOX_meshvisptr = NULL;
GLUI_Checkbox *CHECKBOX_meshvis = NULL;
GLUI_Checkbox *CHECKBOX_edit_colormap=NULL;
GLUI_Checkbox *CHECKBOX_plane_normal=NULL;
#ifdef pp_SMOKE_THREAD
GLUI_Checkbox *CHECKBOX_view_parallel = NULL;
#endif

GLUI_Panel *PANEL_colormap3 = NULL;
GLUI_Panel *PANEL_fire_opacity = NULL;
Expand All @@ -129,7 +133,9 @@ GLUI_Panel *PANEL_fire_cutoff = NULL;
GLUI_Panel *PANEL_blackbody = NULL;
GLUI_Panel *PANEL_settings1 = NULL;
GLUI_Panel *PANEL_skip_planes = NULL;
#ifdef pp_SMOKE_THREAD
GLUI_Panel *PANEL_smoke_parallel = NULL;
#endif
GLUI_Panel *PANEL_smokesensor = NULL;
GLUI_Panel *PANEL_color = NULL;
GLUI_Panel *PANEL_smoke = NULL;
Expand Down Expand Up @@ -380,11 +386,13 @@ extern "C" void GLUI3dSmokeSetup(int main_window){
CHECKBOX_smoke_flip = glui_3dsmoke->add_checkbox_to_panel(PANEL_settings1, _("flip background"), &background_flip,BACKGROUND_FLIP, GLUISmoke3dCB);
CHECKBOX_triangle_display_rate = glui_3dsmoke->add_checkbox_to_panel(PANEL_settings1, _("triangle display rate"), &show_trirates);

#ifdef pp_SMOKE_THREAD
PANEL_smoke_parallel = glui_3dsmoke->add_panel_to_panel(PANEL_settings1,"parallel");
CHECKBOX_view_parallel = glui_3dsmoke->add_checkbox_to_panel(PANEL_smoke_parallel, _("drawing setup"), &use_mergesmoke_glui_threads, MERGE_SMOKE, GLUISmoke3dCB);
SPINNER_smoke3d_draw_threads = glui_3dsmoke->add_spinner_to_panel(PANEL_smoke_parallel, _("threads"), GLUI_SPINNER_INT, &n_mergesmoke_glui_threads, MERGE_SMOKE, GLUISmoke3dCB);
SPINNER_smoke3d_draw_threads->set_int_limits(1, MAX_THREADS);
GLUISmoke3dCB(MERGE_SMOKE);
#endif

//---------------------------------------------Slice render settings--------------------------------------------------------------

Expand Down Expand Up @@ -845,9 +853,11 @@ extern "C" void GLUISmoke3dCB(int var){
ShowHideMenu(MENU_SHOWHIDE_FLIP);
updatemenu = 1;
break;
#ifdef pp_SMOKE_THREAD
case MERGE_SMOKE:
UpdateGluiMergeSmoke();
break;
#endif
case SMOKE_BLACK:
break;
case SMOKE_SKIP_XYZ:
Expand Down
2 changes: 2 additions & 0 deletions Source/smokeview/glui_smoke.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,9 @@
#define VOLTEST_DEPTH 102
#define VOLTEST_UPDATE 103
#define FORCE_ALPHA_OPAQUE 104
#ifdef pp_SMOKE_THREAD
#define MERGE_SMOKE 105
#endif
#define SMOKE_FRAME_INC 113
#define REFRESH_FIRE 114

Expand Down
2 changes: 2 additions & 0 deletions Source/smokeview/menus.c
Original file line number Diff line number Diff line change
Expand Up @@ -3362,7 +3362,9 @@ void UnloadSmoke3D(smoke3ddata *smoke3di){
void UnloadAllSmoke3D(int type){
int i;

#ifdef pp_SMOKE_THREAD
update_glui_merge_smoke = 1;
#endif
if(global_scase.smoke3dcoll.nsmoke3dinfo > 0){
for(i = 0; i < global_scase.smoke3dcoll.nsmoke3dinfo; i++){
smoke3ddata *smoke3di;
Expand Down
1 change: 1 addition & 0 deletions Source/smokeview/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
//#define pp_LUA // turn on LUA option
#define pp_GPU // support the GPU
#define pp_THREAD // turn on multi-threading
//#define pp_SMOKE_THREAD // use multi-threading for merging smoke

#ifdef pp_FRAME // turn on each frame type if pp_FRAME is set
#define pp_BOUNDFRAME // turn on frame code for boundary files
Expand Down
4 changes: 4 additions & 0 deletions Source/smokeview/readsmv.c
Original file line number Diff line number Diff line change
Expand Up @@ -6871,7 +6871,9 @@ int ReadSMV_Init(smv_case *scase){
use_ffmpeg_threads = 0;
use_readallgeom_threads = 0;
use_isosurface_threads = 0;
#ifdef pp_SMOKE_THREAD
use_mergesmoke_threads = 0;
#endif
use_meshnabors_threads = 0;
}

Expand Down Expand Up @@ -11535,13 +11537,15 @@ int ReadSMV_Configure(){
MakeIBlankCarve();
PRINT_TIMER(timer_readsmv, "MakeIBlankCarve");

#ifdef pp_SMOKE_THREAD
if(mergesmoke_threads == NULL){
mergesmoke_threads = THREADinit(&n_mergesmoke_threads, &use_mergesmoke_threads, MtMergeSmoke3D);
for(i = 0; i < n_mergesmoke_threads; i++){
smokethreadinfo[i].ithread = i;
smokethreadinfo[i].nthreads = n_mergesmoke_threads;
}
}
#endif

if(ffmpeg_threads == NULL){
ffmpeg_threads = THREADinit(&n_ffmpeg_threads, &use_ffmpeg_threads, SetupFF);
Expand Down
6 changes: 6 additions & 0 deletions Source/smokeview/smokeheaders.h
Original file line number Diff line number Diff line change
Expand Up @@ -575,11 +575,17 @@ EXTERNCPP int IsSmokeComponentPresent(smoke3ddata *smoke3di);
EXTERNCPP void MakeIBlankSmoke3D(void);
EXTERNCPP void MakeTimesMap(float *times, unsigned char **times_map_ptr, int n);
EXTERNCPP void MergeSmoke3D(smoke3ddata *smoke3dset);
#ifdef pp_SMOKE_THREAD
EXTERNCPP void *MtMergeSmoke3D(void *arg);
#else
EXTERNCPP void MergeSmoke3DAll(void);
#endif
EXTERNCPP FILE_SIZE ReadSmoke3D(int iframe, int ifile, int flag, int first_time, int *errorcode);
EXTERNCPP void ReadSmoke3DAllMeshes(int iframe, int smoketype, int *errorcode);
EXTERNCPP void SmokeWrapup(void);
#ifdef pp_SMOKE_THREAD
EXTERNCPP void UpdateGluiMergeSmoke(void);
#endif
EXTERNCPP int UpdateSmoke3D(smoke3ddata *smoke3di);
EXTERNCPP void UpdateSmoke3dFileParms(void);
EXTERNCPP void UpdateSmoke3dMenuLabels(void);
Expand Down
6 changes: 4 additions & 2 deletions Source/smokeview/smokeviewvars.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,13 @@
//*** threader variables

//***mergesmoke
SVEXTERN int SVDECL(n_mergesmoke_threads, 4), SVDECL(use_mergesmoke_threads, 1);
#ifdef pp_SMOKE_THREAD
SVEXTERN int SVDECL(n_mergesmoke_threads, 4), SVDECL(use_mergesmoke_threads, 0);
SVEXTERN threaderdata SVDECL(*mergesmoke_threads, NULL);
SVEXTERN smokethreaddata smokethreadinfo[MAX_THREADS];
SVEXTERN int SVDECL(n_mergesmoke_glui_threads, 4), SVDECL(use_mergesmoke_glui_threads, 1);
SVEXTERN int SVDECL(n_mergesmoke_glui_threads, 4), SVDECL(use_mergesmoke_glui_threads, 0);
SVEXTERN int SVDECL(update_glui_merge_smoke, 1);
#endif

//***isosurface
SVEXTERN int SVDECL(n_isosurface_threads, 1), SVDECL(use_isosurface_threads, 1);
Expand Down
6 changes: 6 additions & 0 deletions Source/smokeview/update.c
Original file line number Diff line number Diff line change
Expand Up @@ -170,10 +170,14 @@ void UpdateFrameNumber(int changetime){
}
if(show3dsmoke==1 && global_scase.smoke3dcoll.nsmoke3dinfo > 0){
INIT_PRINT_TIMER(merge_smoke_time);
#ifdef pp_SMOKE_THREAD
THREADcontrol(mergesmoke_threads, THREAD_LOCK);
THREADruni(mergesmoke_threads, (unsigned char *)smokethreadinfo, sizeof(smokethreaddata));
THREADcontrol(mergesmoke_threads, THREAD_JOIN);
THREADcontrol(mergesmoke_threads, THREAD_UNLOCK);
#else
MergeSmoke3DAll();
#endif
PrintMemoryInfo;
PRINT_TIMER(merge_smoke_time, "UpdateSmoke3D + MergeSmoke3D");
}
Expand Down Expand Up @@ -2327,12 +2331,14 @@ void BoundBoundCB(int var);
UpdateSmoke3dMenuLabels();
END_SHOW_UPDATE(update_smoke3dmenulabels);
}
#ifdef pp_SMOKE_THREAD
if(update_glui_merge_smoke == 1){
SHOW_UPDATE(update_glui_merge_smoke);
update_glui_merge_smoke = 0;
GLUISmoke3dCB(MERGE_SMOKE);
END_SHOW_UPDATE(update_glui_merge_smoke);
}
#endif
if(glui_meshclip_defined==1&&update_meshclip == 1){
SHOW_UPDATE(update_meshclip);
update_meshclip = 0;
Expand Down