commit ba8334b60414f391b0e58dcc7f493e4defb12785
parent 11aa198e4afa1f0a152b4ff21b467f45123dd72e
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Wed, 23 Sep 2020 10:43:16 +0200
Allow unsteady green computations
Diffstat:
4 files changed, 32 insertions(+), 18 deletions(-)
diff --git a/src/stardis-compute.c b/src/stardis-compute.c
@@ -383,12 +383,12 @@ compute_probe(struct stardis* stardis)
args.nrealisations = stardis->samples;
d3_set(args.position, stardis->probe);
+ d2_splat(args.time_range, stardis->probe[3]);
args.fp_to_meter = stardis->scale_factor;
args.ambient_radiative_temperature = stardis->ambient_temp;
args.reference_temperature = stardis->ref_temp;
if(stardis->mode & (MODE_BIN_GREEN | MODE_GREEN)) {
- d2_splat(args.time_range, INF);
ERR(sdis_solve_probe_green_function(stardis->sdis_scn, &args, &green));
if(stardis->mode & MODE_BIN_GREEN) {
ASSERT(!str_is_empty(&stardis->bin_green_filename));
@@ -404,7 +404,6 @@ compute_probe(struct stardis* stardis)
ERR(dump_green_ascii(green, stardis, stdout));
}
} else {
- d2_splat(args.time_range, stardis->probe[3]);
args.register_paths = stardis->dump_paths;
ERR(sdis_solve_probe(stardis->sdis_scn, &args, &estimator));
ERR(print_single_MC_result(estimator, stardis, stdout));
@@ -444,12 +443,12 @@ compute_probe_on_interface(struct stardis* stardis)
args.iprim = iprim;
d3_set(args.uv, uv);
args.side = SDIS_FRONT;
+ d2_splat(args.time_range, stardis->probe[3]);
args.fp_to_meter = stardis->scale_factor;
args.ambient_radiative_temperature = stardis->ambient_temp;
args.reference_temperature = stardis->ref_temp;
if(stardis->mode & (MODE_BIN_GREEN | MODE_GREEN)) {
- d2_splat(args.time_range, INF);
ERR(sdis_solve_probe_boundary_green_function(stardis->sdis_scn, &args,
&green));
if(stardis->mode & MODE_BIN_GREEN) {
@@ -466,7 +465,6 @@ compute_probe_on_interface(struct stardis* stardis)
ERR(dump_green_ascii(green, stardis, stdout));
}
} else {
- d2_splat(args.time_range, stardis->probe[3]);
args.register_paths = stardis->dump_paths;
ERR(sdis_solve_probe_boundary(stardis->sdis_scn, &args, &estimator));
ERR(print_single_MC_result(estimator, stardis, stdout));
@@ -660,12 +658,12 @@ compute_medium(struct stardis* stardis)
args.nrealisations = stardis->samples;
args.medium = medium;
+ d2_splat(args.time_range, stardis->probe[3]);
args.fp_to_meter = stardis->scale_factor;
args.ambient_radiative_temperature = stardis->ambient_temp;
args.reference_temperature = stardis->ref_temp;
if(stardis->mode & (MODE_BIN_GREEN | MODE_GREEN)) {
- d2_splat(args.time_range, INF);
ERR(sdis_solve_medium_green_function(stardis->sdis_scn, &args, &green));
if(stardis->mode & MODE_BIN_GREEN) {
ASSERT(!str_is_empty(&stardis->bin_green_filename));
@@ -681,7 +679,6 @@ compute_medium(struct stardis* stardis)
ERR(dump_green_ascii(green, stardis, stdout));
}
} else {
- d2_splat(args.time_range, stardis->probe[3]);
args.register_paths = stardis->dump_paths;
ERR(sdis_solve_medium(stardis->sdis_scn, &args, &estimator));
ERR(print_single_MC_result(estimator, stardis, stdout));
@@ -766,12 +763,12 @@ compute_boundary(struct stardis* stardis)
args.sides = darray_sides_cdata_get(&stardis->compute_surface.sides);
args.nprimitives
= darray_size_t_size_get(&stardis->compute_surface.primitives);
+ d2_splat(args.time_range, stardis->probe[3]);
args.fp_to_meter = stardis->scale_factor;
args.ambient_radiative_temperature = stardis->ambient_temp;
args.reference_temperature = stardis->ref_temp;
if(stardis->mode & (MODE_BIN_GREEN | MODE_GREEN)) {
- d2_splat(args.time_range, INF);
ERR(sdis_solve_boundary_green_function(stardis->sdis_scn, &args, &green));
if(stardis->mode & MODE_BIN_GREEN) {
ASSERT(!str_is_empty(&stardis->bin_green_filename));
@@ -787,7 +784,6 @@ compute_boundary(struct stardis* stardis)
ERR(dump_green_ascii(green, stardis, stdout));
}
} else {
- d2_splat(args.time_range, stardis->probe[3]);
args.register_paths = stardis->dump_paths;
ERR(sdis_solve_boundary(stardis->sdis_scn, &args, &estimator));
ERR(print_single_MC_result(estimator, stardis, stdout));
diff --git a/src/stardis-fluid.c b/src/stardis-fluid.c
@@ -51,10 +51,8 @@ fluid_get_temperature
struct sdis_data* data)
{
const struct fluid* fluid_props = sdis_data_cget(data);
- if(fluid_props->is_green || vtx->time > fluid_props->t0) {
- /* Always use temp for Green mode, regardless of time */
+ if(vtx->time > fluid_props->t0)
return fluid_props->imposed_temperature;
- }
/* Time is <= 0: use tinit */
if(fluid_props->tinit >= 0) return fluid_props->tinit;
/* Must have had tinit defined: error! */
diff --git a/src/stardis-output.c b/src/stardis-output.c
@@ -350,8 +350,28 @@ error:
struct path_header {
unsigned id;
unsigned pcount, fcount;
+ char at_initial;
};
+static FINLINE double
+medium_get_t0
+ (struct sdis_medium* medium)
+{
+ struct sdis_data* data = NULL;
+ enum sdis_medium_type type;
+ ASSERT(medium);
+ type = sdis_medium_get_type(medium);
+ data = sdis_medium_get_data(medium);
+ if(type == SDIS_FLUID) {
+ const struct fluid* fluid_props = sdis_data_cget(data);
+ return fluid_props->t0;
+ } else {
+ ASSERT(type == SDIS_SOLID);
+ const struct solid* solid_props = sdis_data_cget(data);
+ return solid_props->t0;
+ }
+}
+
static res_T
dump_sample
(struct sdis_green_path* path,
@@ -369,6 +389,7 @@ dump_sample
unsigned* ids = NULL;
double* weights = NULL;
size_t sz, i;
+ double t0;
CHK(path && ctx);
@@ -390,11 +411,14 @@ dump_sample
desc_id = d__->desc_id;
CHK(DESC_IS_T(descs[desc_id].type) || DESC_IS_H(descs[desc_id].type));
header.id = desc_id;
+ header.at_initial = 0;
break;
}
case SDIS_VERTEX:
type = sdis_medium_get_type(pt.data.mdmvert.medium);
data = sdis_medium_get_data(pt.data.mdmvert.medium);
+ t0 = medium_get_t0(pt.data.mdmvert.medium);
+ header.at_initial = (pt.data.mdmvert.vertex.time <= t0);
if(pt.data.mdmvert.vertex.P[0] == INF) {
/* Radiative output (ambient temperature)*/
sz = darray_descriptions_size_get(w_ctx->desc);
@@ -503,7 +527,7 @@ dump_green_bin
szd = (unsigned)sz;
descs = darray_descriptions_cdata_get(&stardis->descriptions);
- /* Save names that donot fit inplace */
+ /* Save names that do not fit inplace */
FOR_EACH(i, 0, szd) {
const struct description* desc = descs + i;
const struct str* name = get_description_name(desc);
diff --git a/src/stardis-solid.c b/src/stardis-solid.c
@@ -82,12 +82,8 @@ solid_get_temperature
struct sdis_data* data)
{
const struct solid* solid_props = sdis_data_cget(data);
- if(solid_props->is_green || vtx->time > solid_props->t0) {
- /* Always use temp for Green mode, regardless of time */
- if(solid_props->imposed_temperature >= 0)
- return solid_props->imposed_temperature;
- else return -1;
- }
+ if(vtx->time > solid_props->t0)
+ return solid_props->imposed_temperature;
/* Time is <= 0: use tinit */
if(solid_props->tinit >= 0) return solid_props->tinit;
/* Must have had t_init defined: error! */