stardis

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

commit f40a8c9cf21b315ad8aa9770461236d2aa3e9920
parent 7e798ae83cdc5b98dac70fb79bd04fbdd42d0be3
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Thu,  8 Nov 2018 15:05:47 +0100

C99 conformity, Windows build, many warnings fixed.

Diffstat:
Msrc/args.h | 36+++++++++++++++++++++++-------------
Msrc/main.c | 2+-
Msrc/stardis-app.c | 44++++++++++++++++++++++++++++----------------
Msrc/stardis-compute.c | 32++++++++++++++++++++++----------
4 files changed, 74 insertions(+), 40 deletions(-)

diff --git a/src/args.h b/src/args.h @@ -4,6 +4,8 @@ #define ARGS_H #include <getopt.h> +#include <stdlib.h> + #include <rsys/rsys.h> #include <rsys/cstr.h> #include <sdis_version.h> @@ -19,10 +21,10 @@ struct args{ char* bc_filename; size_t N; unsigned nthreads; - union { - struct { double p[3]; uint64_t t; }; + union u { + struct pt { double p[3]; uint64_t t; } pt; double probe[4]; - }; + } u; enum stardis_mode mode; double scale_factor; double radiative_temp[2]; @@ -30,7 +32,7 @@ struct args{ }; #define ARGS_DEFAULT__ {\ NULL, NULL, 10000, SDIS_NTHREADS_DEFAULT,\ - { .p={0.0, 0.0, 0.0}, .t=0x7FF0000000000000 /* probe[3]=INF */},\ + { { {0.0, 0.0, 0.0}, 0x7FF0000000000000 /* probe[3]=INF */}},\ PROBE_COMPUTE, 1.0, {300.0, 300.0}, NULL} static const struct args ARGS_DEFAULT = ARGS_DEFAULT__; @@ -105,13 +107,15 @@ parse_args(const int argc, char** argv, struct args* args) goto error; break; - case 'n': - res = cstr_to_ulong(optarg, &args->N); - if (res != RES_OK || args->N <= 0){ + case 'n': { + args->N = strtoull(optarg, NULL, 10); + if (args->N <= 0) { + res = RES_BAD_ARG; fprintf(stderr, "Invalid argument -n %s\n", optarg); goto error; } break; + } case 'b': args->bc_filename = optarg; @@ -123,16 +127,19 @@ parse_args(const int argc, char** argv, struct args* args) case 't': res = cstr_to_uint(optarg, &args->nthreads); - if (res != RES_OK || args->nthreads <= 0){ + if (res != RES_OK + || args->nthreads <= 0){ + res = RES_BAD_ARG; fprintf(stderr, "Invalid argument -t %s\n", optarg); goto error; } break; case 'p': - cstr_to_list_double(optarg, ',', args->probe, &len, 4); - if(res == RES_OK && len != 4) res = RES_BAD_ARG; - if (res != RES_OK){ + cstr_to_list_double(optarg, ',', args->u.probe, &len, 4); + if(len != 4 + || res != RES_OK){ + res = RES_BAD_ARG; fprintf(stderr, "Invalid argument -p %s\n", optarg); goto error; } @@ -144,7 +151,9 @@ parse_args(const int argc, char** argv, struct args* args) case 's': cstr_to_double(optarg, &args->scale_factor); - if (res != RES_OK || args->scale_factor <=0){ + if (res != RES_OK + || args->scale_factor <=0){ + res = RES_BAD_ARG; fprintf(stderr, "Invalid argument -s %s\n", optarg); goto error; } @@ -152,10 +161,11 @@ parse_args(const int argc, char** argv, struct args* args) case 'r': cstr_to_list_double(optarg, ',', args->radiative_temp, &len, 2); - if(res == RES_OK && len != 2) res = RES_BAD_ARG; if (res != RES_OK + || len != 2 || args->radiative_temp[0] <=0 || args->radiative_temp[1] <=0){ + res = RES_BAD_ARG; fprintf(stderr, "Invalid argument -r %s\n", optarg); goto error; } diff --git a/src/main.c b/src/main.c @@ -11,7 +11,7 @@ int main(int argc, char** argv){ res_T res = RES_OK; /* Check proper init for ARGS_DEFAULT */ - ASSERT(ARGS_DEFAULT.probe[3] == INF); + ASSERT(ARGS_DEFAULT.u.probe[3] == INF); res = parse_args(argc, argv, &args); if (res != RES_OK) goto error; diff --git a/src/stardis-app.c b/src/stardis-app.c @@ -70,7 +70,11 @@ char** split_line(char* a_str, const char a_delim) while (token) { assert(idx < count); +#ifdef COMPILER_CL + *(result + idx++) = _strdup(token); +#else *(result + idx++) = strdup(token); +#endif token = strtok(0, delim); } assert(idx == count - 1); @@ -194,10 +198,10 @@ error: } static res_T read_vertices -(struct sstl_desc* desc, - struct htable_vertex* vertex2id, - unsigned** id2id, - struct vertex** vert_list) + (struct sstl_desc* desc, + struct htable_vertex* vertex2id, + unsigned** id2id, + struct vertex** vert_list) { res_T res = RES_OK; int vtx_index = 0; @@ -215,7 +219,10 @@ read_vertices if (found_id){ sa_push(*id2id, *found_id); } else { - unsigned size = htable_vertex_size_get(vertex2id); + size_t sz = htable_vertex_size_get(vertex2id); + unsigned size; + ASSERT(sz < UINT_MAX); + size = (unsigned)sz; htable_vertex_set(vertex2id, &vtx, &size); sa_push(*vert_list, vtx); sa_push(*id2id, size); @@ -227,15 +234,16 @@ read_vertices static res_T read_triangles -(int FLAG, - struct sstl_desc* desc, - struct htable_triangle* triangle2id, - unsigned* id2id, char** cl_type, - const unsigned* id, - struct triangle** tri_list) + (int FLAG, + struct sstl_desc* desc, + struct htable_triangle* triangle2id, + unsigned* id2id, char** cl_type, + const unsigned* id, + struct triangle** tri_list) { res_T res = RES_OK; int tri_index = 0; + (void)cl_type; for (tri_index = 0; tri_index < desc->triangles_count; ++tri_index){ struct triangle tri = NULL_TRIANGLE; unsigned *found_id = NULL; @@ -253,8 +261,12 @@ read_triangles if (FLAG==MEDIUM) (*tri_list)[*found_id].medium_back = *id; if (FLAG==BOUNDARY) (*tri_list)[*found_id].bound_id = *id; } else { - unsigned size = htable_triangle_size_get(triangle2id); + size_t sz; + unsigned size; if (FLAG==MEDIUM) tri.medium_front = *id; + sz = htable_triangle_size_get(triangle2id); + ASSERT(sz < UINT_MAX); + size = (unsigned)sz; htable_triangle_set(triangle2id, &tri, &size); /*printf("triangle %i %i %i\n added at index %i\n", SPLIT3(tri.indices), size);*/ sa_push(*tri_list, tri); @@ -464,10 +476,10 @@ stardis_init stardis->N = args->N; stardis->nthreads = args->nthreads; - stardis->probe[0] = args->probe[0]; - stardis->probe[1] = args->probe[1]; - stardis->probe[2] = args->probe[2]; - stardis->probe[3] = args->probe[3]; + stardis->probe[0] = args->u.probe[0]; + stardis->probe[1] = args->u.probe[1]; + stardis->probe[2] = args->u.probe[2]; + stardis->probe[3] = args->u.probe[3]; stardis->scale_factor = args->scale_factor; stardis->radiative_temp[0] = args->radiative_temp[0]; stardis->radiative_temp[1] = args->radiative_temp[1]; diff --git a/src/stardis-compute.c b/src/stardis-compute.c @@ -55,6 +55,7 @@ fluid_get_calorific_capacity (const struct sdis_rwalk_vertex* vtx, struct sdis_data* data) { const struct fluid* fluid_props = sdis_data_cget(data); + (void)vtx; return fluid_props->cp; } @@ -63,6 +64,7 @@ fluid_get_volumic_mass (const struct sdis_rwalk_vertex* vtx, struct sdis_data* data) { const struct fluid* fluid_props = sdis_data_cget(data); + (void)vtx; return fluid_props->rho; } @@ -73,7 +75,7 @@ fluid_get_temperature const struct fluid* fluid_props = sdis_data_cget(data); double temperature = 0; char* math_expr = fluid_props->temperature; - double x, y, z, t; + static double x, y, z, t; /* Store variable names and pointers. */ te_variable vars[] = {{"x", &x}, {"y", &y}, {"z", &z}, {"t", &t}}; int err; @@ -106,6 +108,7 @@ solid_get_calorific_capacity (const struct sdis_rwalk_vertex* vtx, struct sdis_data* data) { const struct solid* solid_props = sdis_data_cget(data); + (void)vtx; return solid_props->cp; } @@ -114,6 +117,7 @@ solid_get_thermal_conductivity (const struct sdis_rwalk_vertex* vtx, struct sdis_data* data) { const struct solid* solid_props = sdis_data_cget(data); + (void)vtx; return solid_props->lambda; } @@ -122,6 +126,7 @@ solid_get_volumic_mass (const struct sdis_rwalk_vertex* vtx, struct sdis_data* data) { const struct solid* solid_props = sdis_data_cget(data); + (void)vtx; return solid_props->rho; } @@ -130,6 +135,7 @@ solid_get_delta (const struct sdis_rwalk_vertex* vtx, struct sdis_data* data) { const struct solid* solid_props = sdis_data_cget(data); + (void)vtx; return solid_props->delta; } @@ -156,7 +162,7 @@ solid_get_temperature return -1; }else{ char* math_expr = solid_props->temperature; - double x, y, z; + static double x, y, z; /* Store variable names and pointers. */ te_variable vars[] = {{"x", &x}, {"y", &y}, {"z", &z}}; int err; @@ -179,7 +185,7 @@ solid_get_power double power = 0; const struct solid* solid_props = sdis_data_cget(data); char* math_expr = solid_props->temperature; - double x, y, z, t; + static double x, y, z, t; /* Store variable names and pointers. */ te_variable vars[] = {{"x", &x}, {"y", &y}, {"z", &z}, {"t", &t}}; int err; @@ -211,6 +217,7 @@ interface_get_convection_coef (const struct sdis_interface_fragment* frag, struct sdis_data* data) { const struct intface* interface_props = sdis_data_cget(data); + (void)frag; return interface_props->hc; } @@ -226,7 +233,7 @@ interface_get_temperature double temperature = 0; char* math_expr = interface_props->temperature; - double x, y, z, t; + static double x, y, z, t; /* Store variable names and pointers. */ te_variable vars[] = {{"x", &x}, {"y", &y}, {"z", &z}, {"t", &t}}; int err; @@ -255,7 +262,7 @@ interface_get_flux double flux = 0; char* math_expr = interface_props->flux; - double x, y, z, t; + static double x, y, z, t; /* Store variable names and pointers. */ te_variable vars[] = {{"x", &x}, {"y", &y}, {"z", &z}, {"t", &t}}; int err; @@ -277,6 +284,7 @@ interface_get_emissivity (const struct sdis_interface_fragment* frag, struct sdis_data* data) { const struct intface* interface_props = sdis_data_cget(data); + (void)frag; return interface_props->emissivity; } @@ -286,6 +294,7 @@ interface_get_alpha (const struct sdis_interface_fragment* frag, struct sdis_data* data) { const struct intface* interface_props = sdis_data_cget(data); + (void)frag; return interface_props->alpha; } @@ -316,7 +325,8 @@ select_probe_type delta = mat[triangle[i].medium_front].delta; if (d3_len(dp) < delta){ *iprim = i; - fprintf(stderr,"The probe is very close to the primitive %lu.\n",*iprim ); + fprintf(stderr,"The probe is very close to the primitive %llu.\n", + (long long int)*iprim ); fprintf(stderr,"So the probe is moved to this primitive at the position: %g %g %g\n", SPLIT3(projected_pos)); d3_set(pos, projected_pos); @@ -399,7 +409,7 @@ stardis_compute(struct stardis* stardis, enum stardis_mode mode) double pos[3] = {0,0,0}; double time[2] = { 0, 0}; size_t nfailures; - int i = 0; + unsigned i = 0; SDIS(device_create(NULL, NULL, stardis->nthreads, 1, &dev)); @@ -418,7 +428,9 @@ stardis_compute(struct stardis* stardis, enum stardis_mode mode) SDIS(fluid_create(dev, &fluid_shader, data, sa_add(fluid_medium, 1))); SDIS(data_ref_put(data)); if (stardis->boundary[i].hc > -1) { - sa_push(bound2fluid, sa_size(fluid_medium)-1); + size_t sz = sa_size(fluid_medium) - 1; + ASSERT(sz < INT_MAX); + sa_push(bound2fluid, (int)sz); } else { sa_push(bound2fluid, 0); } @@ -558,7 +570,7 @@ stardis_compute(struct stardis* stardis, enum stardis_mode mode) time[0] = time[1] = stardis->probe[3]; { double uv[2] = {0,0}; - size_t iprim = -1; + size_t iprim = SIZE_MAX; res = select_probe_type(scn, stardis->geometry.triangle, @@ -567,7 +579,7 @@ stardis_compute(struct stardis* stardis, enum stardis_mode mode) &iprim, uv); - if(iprim == -1){ + if(iprim == SIZE_MAX){ SDIS(solve_probe(scn, stardis->N, pos,