stardis

Perform coupled heat transfer calculations
git clone git://git.meso-star.fr/stardis.git
Log | Files | Refs | README | LICENSE

commit a333d6ab323c63e51a9a6b150d6c7a48e4b19667
parent cafa938c3245e1348985beec7e94010c8e86d9ca
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue,  9 Apr 2024 15:52:31 +0200

CLI -I option added to set initial time

This was previously set to 0 and could not be changed by the user.  In
addition, while it was saved as a constant media property, it was not
defined on the solver side as it should have been. This commit corrects
this problem.

Diffstat:
Mdoc/stardis.1.in | 5+++++
Msrc/stardis-app.c | 1+
Msrc/stardis-app.h | 1+
Msrc/stardis-args.c | 14++++++++++----
Msrc/stardis-args.h.in | 1+
Msrc/stardis-fluid-prog.c | 2++
Msrc/stardis-fluid.c | 1+
Msrc/stardis-parsing.c | 6++++++
Msrc/stardis-solid-prog.c | 1+
Msrc/stardis-solid.c | 1+
10 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/doc/stardis.1.in b/doc/stardis.1.in @@ -26,6 +26,7 @@ .Op Fl d Ar file_base_name .Op Fl F Pa surface Ns Op , Ns Ar time Ns Op , Ns Ar time .Op Fl G Pa green_bin Ns Op , Ns Pa green_ascii +.Op Fl I Ar initial_time .Op Fl L Pa interface_probes .Op Fl m Ar medium_name Ns Op , Ns Ar time Ns Op , Ns Ar time .Op Fl n Ar samples_count @@ -218,6 +219,10 @@ and cannot be used in conjunction with option .Fl D . .It Fl h Output short help and exit. +.It Fl I Ar initial_time +Define initial time in seconds. +It can take any value between +/- infinity. +The default initial time is 0. .It Fl i Disable internal radiative exchanges. External radiative exchanges are still processed, i.e. the external diff --git a/src/stardis-app.c b/src/stardis-app.c @@ -273,6 +273,7 @@ stardis_init stardis->trad = STARDIS_DEFAULT_TRAD; stardis->trad_ref = STARDIS_DEFAULT_TRAD_REFERENCE; stardis->trad_def = 0; + stardis->initial_time = args->initial_time; stardis->geometry_initialized = 0; d2(stardis->t_range, INF, -INF); stardis->dump_paths = SDIS_HEAT_PATH_NONE; diff --git a/src/stardis-app.h b/src/stardis-app.h @@ -229,6 +229,7 @@ struct stardis { double scale_factor; double trad, trad_ref; double t_range[2]; + double initial_time; /* [s] */ int mode; int trad_def; unsigned nthreads; diff --git a/src/stardis-args.c b/src/stardis-args.c @@ -459,9 +459,10 @@ usage(FILE* stream) #define PRINT(Msg) fprintf(stream, Msg) PRINT("stardis [-eghiv] [-a diff_algo] [-D path_type,files_name_prefix]\n"); PRINT(" [-d file_base_name] [-F surface[,time[,time]]]\n"); - PRINT(" [-G green_bin[,green_ascii]] [-L interface_probes]\n"); - PRINT(" [-m medium_name[,time[,time]]] [-n samples_count]\n"); - PRINT(" [-o picard_order] [-P x,y,z[,time[,time]][:side_indicator]]\n"); + PRINT(" [-G green_bin[,green_ascii]] [-I initial_time]\n"); + PRINT(" [-L interface_probes] [-m medium_name[,time[,time]]]\n"); + PRINT(" [-n samples_count] [-o picard_order]\n"); + PRINT(" [-P x,y,z[,time[,time]][:side_indicator]]\n"); PRINT(" [-p x,y,z[,time[,time]]] [-R rendering_opt[:rendering_opt ...]]\n"); PRINT(" [-S surface[,time[,time]]] [-s surface[,time[,time]]]\n"); PRINT(" [-t threads_count] [-V verbosity_level] [-X output_rng]\n"); @@ -524,7 +525,7 @@ parse_args { int opt = 0, n_used = 0, o_used = 0; size_t len = 0; - const char option_list[] = "a:c:d:D:eF:gG:hiL:m:M:n:o:p:P:R:s:S:t:vV:x:X:"; + const char option_list[] = "a:c:d:D:eF:gG:hiI:L:m:M:n:o:p:P:R:s:S:t:vV:x:X:"; char buf[128]; struct str keep; char** line = NULL; @@ -658,6 +659,11 @@ parse_args args->mode |= MODE_DUMP_HELP; break; + case 'I': + res = cstr_to_double(optarg, &args->initial_time); + if(res != RES_OK) goto error; + break; + case 'i': args->disable_intrad = 1; break; diff --git a/src/stardis-args.h.in b/src/stardis-args.h.in @@ -137,6 +137,7 @@ struct args { char* camera; size_t samples; double pos_and_time[5]; + double initial_time; /* [s] */ unsigned nthreads; unsigned picard_order; int mode; diff --git a/src/stardis-fluid-prog.c b/src/stardis-fluid-prog.c @@ -81,6 +81,7 @@ create_solver_fluid_prog fluid_shader.calorific_capacity = fluid_prog_get_calorific_capacity; fluid_shader.volumic_mass = fluid_prog_get_volumic_mass; fluid_shader.temperature = fluid_prog_get_temperature; + fluid_shader.t0 = stardis->initial_time; ERR(sdis_data_create(stardis->dev, sizeof(struct fluid_prog*), ALIGNOF(struct fluid_prog*), NULL, &data)); @@ -114,6 +115,7 @@ create_solver_external_fluid_prog fluid_shader.calorific_capacity = fluid_prog_get_calorific_capacity; fluid_shader.volumic_mass = fluid_prog_get_volumic_mass; fluid_shader.temperature = fluid_prog_get_temperature; + fluid_shader.t0 = stardis->initial_time; /* temperature has to be provided by h_boundary_prog */ ERR(sdis_data_create(stardis->dev, sizeof(struct fluid_prog*), ALIGNOF(struct fluid_prog*), NULL, &data)); diff --git a/src/stardis-fluid.c b/src/stardis-fluid.c @@ -88,6 +88,7 @@ create_solver_fluid fluid_shader.calorific_capacity = fluid_get_calorific_capacity; fluid_shader.volumic_mass = fluid_get_volumic_mass; fluid_shader.temperature = fluid_get_temperature; + fluid_shader.t0 = stardis->initial_time; ERR(sdis_data_create(stardis->dev, sizeof(struct fluid*), ALIGNOF(struct fluid*), NULL, &data)); diff --git a/src/stardis-parsing.c b/src/stardis-parsing.c @@ -458,6 +458,7 @@ process_h ASSERT(sz <= UINT_MAX); fluid->desc_id = (unsigned)sz; fluid->imposed_temperature = h_boundary->imposed_temperature; + fluid->t0 = stardis->initial_time; fluid->is_outside = 1; fluid->is_green = stardis->mode & (MODE_BIN_GREEN | MODE_GREEN); ERR(create_solver_fluid(stardis, fluid)); @@ -578,6 +579,7 @@ process_hf ASSERT(sz <= UINT_MAX); fluid->desc_id = (unsigned)sz; fluid->imposed_temperature = hf_boundary->imposed_temperature; + fluid->t0 = stardis->initial_time; fluid->is_outside = 1; fluid->is_green = stardis->mode & (MODE_BIN_GREEN | MODE_GREEN); ERR(create_solver_fluid(stardis, fluid)); @@ -1643,6 +1645,7 @@ process_solid desc->type = DESC_MAT_SOLID; solid->solid_id = allocate_stardis_medium_id(stardis); solid->is_green = stardis->mode & (MODE_BIN_GREEN | MODE_GREEN); + solid->t0 = stardis->initial_time; solid->is_outside = 0; ASSERT(sz <= UINT_MAX); solid->desc_id = (unsigned)sz; @@ -1831,6 +1834,7 @@ process_fluid ERR(init_fluid(stardis->allocator, &desc->d.fluid)); fluid = desc->d.fluid; desc->type = DESC_MAT_FLUID; + fluid->t0 = stardis->initial_time; fluid->fluid_id = allocate_stardis_medium_id(stardis); fluid->is_green = stardis->mode & (MODE_BIN_GREEN | MODE_GREEN); ASSERT(sz <= UINT_MAX); @@ -2304,6 +2308,7 @@ get_dummy_solid_id dummies->stardis_solid = dummy; dummies->dummy_solid_id = allocate_stardis_medium_id(stardis); dummy->solid_id = dummies->dummy_solid_id; + dummy->t0 = stardis->initial_time; dummy->is_outside = 1; dummy->is_green = stardis->mode & (MODE_BIN_GREEN | MODE_GREEN); create_solver_solid(stardis, dummy); @@ -2337,6 +2342,7 @@ get_dummy_fluid_id dummies->stardis_fluid = dummy; dummies->dummy_fluid_id = allocate_stardis_medium_id(stardis); dummy->fluid_id = dummies->dummy_fluid_id; + dummy->t0 = stardis->initial_time; dummy->is_outside = 1; dummy->is_green = stardis->mode & (MODE_BIN_GREEN | MODE_GREEN); create_solver_fluid(stardis, dummy); diff --git a/src/stardis-solid-prog.c b/src/stardis-solid-prog.c @@ -120,6 +120,7 @@ create_solver_solid_prog solid_shader.delta= solid_prog_get_delta; solid_shader.volumic_power = solid_prog_get_volumic_power; solid_shader.temperature = solid_prog_get_temperature; + solid_shader.t0 = stardis->initial_time; ERR(sdis_data_create(stardis->dev, sizeof(struct solid_prog*), ALIGNOF(struct solid_prog*), NULL, &data)); diff --git a/src/stardis-solid.c b/src/stardis-solid.c @@ -135,6 +135,7 @@ create_solver_solid solid_shader.delta_boundary = solid_get_delta_boundary; #endif solid_shader.temperature = solid_get_temperature; + solid_shader.t0 = stardis->initial_time; ERR(sdis_data_create(stardis->dev, sizeof(struct solid), ALIGNOF(struct solid), NULL, &data));