stardis-solver

Solve coupled heat transfers
git clone git://git.meso-star.fr/stardis-solver.git
Log | Files | Refs | README | LICENSE

commit 96aa2eebf4bcfd710c073cd5487b4fff74e9467f
parent 1d6c1d47a62c5b6ccdf2a275339df7948652a123
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue, 19 Feb 2019 16:26:12 +0100

Handle the t0 medium parameter in sdis_green_function_solve

Diffstat:
Msrc/sdis_green.c | 22++++++++++++++--------
Msrc/sdis_medium_c.h | 15++++++++++++++-
2 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/src/sdis_green.c b/src/sdis_green.c @@ -314,13 +314,21 @@ green_function_solve_path flux += flux_terms[i].term * interface_side_get_flux(interf, &frag); } - /* Setup time. TODO handle t0 of the media */ + /* Setup time. */ switch(path->limit_type) { - case LIMIT_FRAGMENT: time_curr = time + path->limit.fragment.time; break; - case LIMIT_VERTEX: time_curr = time + path->limit.vertex.time; break; + case LIMIT_FRAGMENT: + time_curr = time + path->limit.fragment.time; + interf = green_function_fetch_interf(green, path->limit_id); + break; + case LIMIT_VERTEX: + time_curr = time + path->limit.vertex.time; + medium = green_function_fetch_medium(green, path->limit_id); + break; default: FATAL("Unreachable code.\n"); break; } - if(time_curr <= 0) { + + if(time_curr <= 0 + || (path->limit_type == LIMIT_VERTEX && time_curr <= medium_get_t0(medium))) { log_err(green->dev, "%s: invalid observation time \"%g\": the initial condition is reached " "while instationary system are not supported by the green function.\n", @@ -334,14 +342,12 @@ green_function_solve_path case LIMIT_FRAGMENT: frag = path->limit.fragment; frag.time = time_curr; - interf = green_function_fetch_interf(green, path->limit_id); temperature = interface_side_get_temperature(interf, &frag); break; case LIMIT_VERTEX: vtx = path->limit.vertex; vtx.time = time_curr; - medium = green_function_fetch_medium(green, path->limit_id); - temperature = medium_get_temerature(medium, &vtx); + temperature = medium_get_temperature(medium, &vtx); break; default: FATAL("Unreachable code.\n"); break; } @@ -450,7 +456,7 @@ sdis_green_function_solve npaths = darray_green_path_size_get(&green->paths); /* Solve the green function */ - FOR_EACH(ipath, 0, npaths) { /* TODO add multi-threading */ + FOR_EACH(ipath, 0, npaths) { /* TODO add multi-threading (?) */ const double time = sample_time(rng, time_range); double w; diff --git a/src/sdis_medium_c.h b/src/sdis_medium_c.h @@ -143,7 +143,7 @@ solid_get_t0(const struct sdis_medium* mdm) * Generic functions ******************************************************************************/ static FINLINE double -medium_get_temerature +medium_get_temperature (const struct sdis_medium* mdm, const struct sdis_rwalk_vertex* vtx) { double temp; @@ -156,5 +156,18 @@ medium_get_temerature return temp; } +static FINLINE double +medium_get_t0(const struct sdis_medium* mdm) +{ + double t0; + ASSERT(mdm); + switch(mdm->type) { + case SDIS_FLUID: t0 = fluid_get_t0(mdm); break; + case SDIS_SOLID: t0 = solid_get_t0(mdm); break; + default: FATAL("Unreachable code.\n"); break; + } + return t0; +} + #endif /* SDIS_MEDIUM_C_H */