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:
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));