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:
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,