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