stardis

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

commit fb0ce8af1449fcc8435d6046b39e634ccb6cd973
parent 9eb54af747caf43db5ea09f3d1b731e0b028aba8
Author: Benjamin Piaud <benjamin.piaud@meso-star.com>
Date:   Thu, 26 Apr 2018 16:32:32 +0200

ajout de la puissance volumique

Diffstat:
Msrc/bc.txt | 4++--
Msrc/material.txt | 8++++----
Msrc/stardis-app.c | 5+++++
Msrc/stardis-app.h | 3++-
Msrc/stardis-compute.c | 27++++++++++++++++++++++++++-
5 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/src/bc.txt b/src/bc.txt @@ -1,4 +1,4 @@ #STL_filename h h_coeff T_env(x,y,z,t) | STL_filename T T_value(x,y,z,t) b_h_1.stl h 0 "300" -b_T_1.stl T "300 + sin(2*pi*t)" -b_T_2.stl T "300 + sin(2*pi*t)" +b_T_1.stl T "300" +b_T_2.stl T "300" diff --git a/src/material.txt b/src/material.txt @@ -1,4 +1,4 @@ -#STL_filename lambda rho cp delta Tinit(x,y,z) -m_1.stl 1.0 1.0 1.0 0.05 "300 + x" -m_2.stl 1.0 1.0 1.0 0.05 "300 - 2*y + z " -m_3.stl 1.0 1.0 1.0 0.05 "300 + 10*x" +#STL_filename lambda rho cp delta Tinit(x,y,z) volumic_power(x,y,z,t) +m_1.stl 1.0 1.0 1.0 0.05 "300" "1" +m_2.stl 1.0 1.0 1.0 0.05 "300" "1" +m_3.stl 1.0 1.0 1.0 0.05 "300" "1" diff --git a/src/stardis-app.c b/src/stardis-app.c @@ -69,6 +69,11 @@ parse_medium_line(char* line, char** stl_filename, struct material* mat) mat->Tinit = malloc(strlen(tk) + 1); strcpy(mat->Tinit,tk); + tk = strtok(NULL,"\""); + tk = strtok(NULL,"\""); + mat->power = malloc(strlen(tk) + 1); + strcpy(mat->power,tk); + exit: return res; error: diff --git a/src/stardis-app.h b/src/stardis-app.h @@ -95,8 +95,9 @@ struct material{ double cp; double delta; char* Tinit; + char* power; }; -#define NULL_MATERIAL__ {0.0 ,0.0 ,0.0, 0.0, NULL} +#define NULL_MATERIAL__ {0.0 ,0.0 ,0.0, 0.0, NULL, NULL} static const struct material NULL_MATERIAL = NULL_MATERIAL__; struct boundary{ diff --git a/src/stardis-compute.c b/src/stardis-compute.c @@ -94,6 +94,7 @@ struct solid { double rho; /* Volumic mass */ double delta; /* Numerical parameter */ char* temperature; + char* power; }; static double @@ -165,6 +166,29 @@ solid_get_temperature } } +static double +solid_get_power + (const struct sdis_rwalk_vertex* vtx, struct sdis_data* data) +{ + double power = 0; + const struct solid* solid_props = sdis_data_cget(data); + char* math_expr = solid_props->temperature; + double x, y, z, t; + /* Store variable names and pointers. */ + te_variable vars[] = {{"x", &x}, {"y", &y}, {"z", &z}, {"t", &t}}; + int err; + + /* Compile the expression with variables. */ + te_expr *expr = te_compile(math_expr, vars, 3, &err); + x = vtx->P[0]; + y = vtx->P[1]; + z = vtx->P[2]; + t = vtx->time; + power = te_eval(expr); + te_free(expr); + return power; +} + /******************************************************************************* * Interface data ******************************************************************************/ @@ -295,7 +319,7 @@ stardis_compute(struct stardis* stardis) solid_shader.delta_solid = solid_get_delta; solid_shader.delta_boundary = solid_get_delta_boundary; solid_shader.temperature = solid_get_temperature; - solid_shader.volumic_power = NULL; + solid_shader.volumic_power = solid_get_power; /* Create the solid medium */ for (i=0; i<stardis->geometry.medium_count; ++i){ @@ -307,6 +331,7 @@ stardis_compute(struct stardis* stardis) solid_props->rho = stardis->material[i].rho; solid_props->delta = stardis->material[i].delta; solid_props->temperature = stardis->material[i].Tinit; + solid_props->temperature = stardis->material[i].power; SDIS(solid_create(dev, &solid_shader, data, sa_add(solid_medium, 1))); SDIS(data_ref_put(data)); }