stardis

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

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:
Msrc/stardis-compute.c | 12++++--------
Msrc/stardis-fluid.c | 4+---
Msrc/stardis-output.c | 26+++++++++++++++++++++++++-
Msrc/stardis-solid.c | 8++------
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! */