stardis

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

commit 40881d3cef159030137df9bb704b1b6fd51e898b
parent 4bed8785f21ba28e69da2aee13f6c87c23079198
Author: Benjamin Piaud <benjamin.piaud@meso-star.com>
Date:   Mon,  7 May 2018 21:45:41 +0200

quelques modifs

Diffstat:
Msrc/Makefile | 9+++++----
Msrc/args.h | 13+++++++------
Msrc/stardis-app.c | 40+++++++++++++++++++---------------------
Msrc/stardis-app.h | 13+++++++++----
Msrc/stardis-compute.c | 19+++++++------------
5 files changed, 47 insertions(+), 47 deletions(-)

diff --git a/src/Makefile b/src/Makefile @@ -1,9 +1,10 @@ -SDIS_SDK=../Stardis-0.3.0-GNU-Linux64 +#SDIS_SDK=../Stardis-0.3.0-GNU-Linux64 +SDIS_SDK=/home/piaud/code/star-engine-stardis/local/ SDIS_SDK_DBG=/home/piaud/code/star-engine-stardis/local/ INC=-I${SDIS_SDK}/include -#CFLAGS=-std=c90 -LDFLAGS =-lsdis -lsstl -lrsys -ltinyexpr -lm -L${SDIS_SDK}/lib -Wl,-rpath=${SDIS_SDK}/lib +CFLAGS=-std=c99 -pedantic -Wall +LDFLAGS =-lsdis -lsstl -lrsys -ltinyexpr -lm -L${SDIS_SDK_DBG}/lib -Wl,-rpath=${SDIS_SDK_DBG}/lib LDFLAGS_DBG=-lsdis-dbg -lsstl -lrsys -ltinyexpr -lm -L${SDIS_SDK_DBG}/lib -Wl,-rpath=${SDIS_SDK_DBG}/lib SRC=main.c stardis-app.c stardis-compute.c @@ -12,7 +13,7 @@ DEPS=args.h stardis-app.h all: stardis-app stardis-app: ${SRC} ${DEPS} - ${CC} -o stardis-app ${SRC} ${INC} ${CFLAGS} ${LDFLAGS} + ${CC} -o stardis-app -O2 ${SRC} ${INC} ${CFLAGS} ${LDFLAGS} debug: $(SRC) $(DEPS) ${CC} -g -o stardis-app-dbg ${SRC} ${INC} ${CFLAGS} ${LDFLAGS_DBG} diff --git a/src/args.h b/src/args.h @@ -4,6 +4,7 @@ #define ARGS_H #include <unistd.h> +#include <getopt.h> #include <rsys/rsys.h> #include <rsys/cstr.h> @@ -30,7 +31,7 @@ static const struct args ARGS_DEFAULT = ARGS_DEFAULT__; static void print_help(char* prog) { - printf("usage : \n%s -m MEDIUM.txt -b BOUNDARY.txt [-p X:Y:Z:TIME]\n", prog); + printf("usage : \n%s -m MEDIUM.txt -b BOUNDARY.txt [-p X,Y,Z,TIME]\n", prog); printf("[-s SCALE_FACTOR] [-d] [-n NUM_OF_REALIZATIONS] [-t NUM_OF_THREADS]\n"); printf("[-r AMBIENT_RAD_TEMP:REFERENCE_TEMP]\n"); printf("\n -h : print this help.\n"); @@ -59,7 +60,7 @@ print_help(char* prog) printf(" default value: 10000.\n"); printf("\n -t NUM_OF_THREADS :\n"); printf(" default value: all threads available.\n"); - printf("\n -r AMBIENT_RAD_TEMP:REFERENCE_TEMP :\n"); + printf("\n -r AMBIENT_RAD_TEMP,REFERENCE_TEMP :\n"); printf(" Parameters for the radiative transfer.\n"); printf(" AMBIENT_RAD_TEMP is the ambient radiative temperature .\n"); printf(" REFERENCE_TEMP is the temperature used for the linearization.\n"); @@ -75,7 +76,7 @@ print_help(char* prog) } -static res_T +static inline res_T parse_args(const int argc, char** argv, struct args* args) { int opt = 0; @@ -124,7 +125,7 @@ parse_args(const int argc, char** argv, struct args* args) cstr_to_list_double(optarg, ',', args->probe, &len, 4); if(res == RES_OK && len != 4) res = RES_BAD_ARG; if (res != RES_OK){ - fprintf(stderr, "Invalid argument -p\n", optarg); + fprintf(stderr, "Invalid argument -p %s\n", optarg); goto error; } break; @@ -136,7 +137,7 @@ 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){ - fprintf(stderr, "Invalid argument -s\n", optarg); + fprintf(stderr, "Invalid argument -s %s\n", optarg); goto error; } break; @@ -147,7 +148,7 @@ parse_args(const int argc, char** argv, struct args* args) if (res != RES_OK || args->radiative_temp[0] <=0 || args->radiative_temp[1] <=0){ - fprintf(stderr, "Invalid argument -r\n", optarg); + fprintf(stderr, "Invalid argument -r %s\n", optarg); goto error; } break; diff --git a/src/stardis-app.c b/src/stardis-app.c @@ -1,5 +1,6 @@ /* Copyright (C) 2018 |Meso|Star> (contact@meso-star.com) */ +#define _GNU_SOURCE 1 #include <string.h> #include "stardis-app.h" @@ -278,7 +279,6 @@ read_stl SSTL(create(NULL, NULL, 0, &sstl)); - SSTL(load(sstl, *stl_filename)); SSTL(get_desc(sstl, &desc)); @@ -286,12 +286,8 @@ read_stl read_triangles(FLAG, &desc, triangle2id, id2id, NULL, &id, &geometry->triangle); sa_release(id2id); - -exit: - SSTL(ref_put(sstl)); + SSTL(ref_put(sstl)); return res; -error: - goto exit; } @@ -339,6 +335,7 @@ geometry_analyse &vertex2id, &triangle2id, geometry); geometry->medium_count += 1; + if (stl_filename) free(stl_filename); } fclose(input); @@ -363,6 +360,7 @@ geometry_analyse &vertex2id, &triangle2id, geometry); geometry->boundary_count += 1; + if (stl_filename) free(stl_filename); } fclose(input); @@ -437,20 +435,8 @@ parse_camera } exit: - if (line){ - int i = 0; - for (i=0; *(line+i);i++){ - free(line[i]); - } - free(line); - } - if (opt){ - int i = 0; - for (i=0; *(opt+i);i++){ - free(opt[i]); - } - free(opt); - } + FREE_AARRAY(line) + FREE_AARRAY(opt) return res; error: @@ -505,12 +491,24 @@ error: res_T stardis_release(struct stardis* stardis) { + int i = 0; res_T res = RES_OK; - res = release_geometry(&stardis->geometry); + for (i=0; i<sa_size(stardis->material); ++i){ + free(stardis->material[i].Tinit); + free(stardis->material[i].power); + } sa_release(stardis->material); + + for (i=0; i<sa_size(stardis->boundary); ++i){ + free(stardis->boundary[i].T); + free(stardis->boundary[i].flux); + } sa_release(stardis->boundary); + res = release_geometry(&stardis->geometry); + if (res != RES_OK) goto error; + exit: return res; error: diff --git a/src/stardis-app.h b/src/stardis-app.h @@ -12,6 +12,14 @@ #include <tinyexpr.h> #include "args.h" +#define FREE_AARRAY(ARRAY) if (ARRAY) {\ + int i = 0; \ + for (i=0; *(ARRAY+i);i++){\ + free(ARRAY[i]);\ + }\ + free(ARRAY);\ +} + struct vertex{ float xyz[3]; }; @@ -73,7 +81,7 @@ struct geometry{ #define NULL_GEOMETRY__ {NULL, NULL, 0, 0, NULL} static const struct geometry NULL_GEOMETRY = NULL_GEOMETRY__; -static res_T +static inline res_T release_geometry (struct geometry* geom) { @@ -83,10 +91,7 @@ release_geometry sa_release(geom->triangle); sa_release(geom->interfaces); -exit: return res; -error: - goto exit; } struct material{ diff --git a/src/stardis-compute.c b/src/stardis-compute.c @@ -320,10 +320,7 @@ select_probe_type break; } } -exit: return res; -error: - goto exit; } static void @@ -537,8 +534,8 @@ stardis_compute(struct stardis* stardis, enum stardis_mode mode) if (mode == IR_COMPUTE){ - size_t width = (size_t)stardis->camera.img[0]; - size_t height = (size_t)stardis->camera.img[1]; + size_t width = (size_t)stardis->camera.img[0]; + size_t height = (size_t)stardis->camera.img[1]; /* Setup the camera */ SDIS(camera_create(dev, &cam)); @@ -564,7 +561,7 @@ stardis_compute(struct stardis* stardis, enum stardis_mode mode) stardis->radiative_temp[1], width, height, - stardis->camera.spp, + (size_t)stardis->camera.spp, sdis_accum_buffer_write, buf)); @@ -582,11 +579,11 @@ stardis_compute(struct stardis* stardis, enum stardis_mode mode) double uv[2] = {0,0}; size_t iprim = -1; - res = select_probe_type(scn, + res = select_probe_type(scn, stardis->geometry.triangle, stardis->material, - pos, - &iprim, + pos, + &iprim, uv); if(iprim == -1){ @@ -625,7 +622,6 @@ stardis_compute(struct stardis* stardis, enum stardis_mode mode) (unsigned long)stardis->N); } -exit: for (i=0; i<sa_size(solid_medium); ++i){ SDIS(medium_ref_put(solid_medium[i])); } @@ -649,8 +645,7 @@ exit: if (estimator) SDIS(estimator_ref_put(estimator)); if (scn) SDIS(scene_ref_put(scn)); if (dev) SDIS(device_ref_put(dev)); + return res; -error: - goto exit; }