stardis

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

commit 0353830ee6137a3e9bb18c294e2eeb81dd420919
parent cf608e6ad8ef4d6053fd6e16224d43fe69bd118d
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Mon,  3 Jun 2019 15:04:19 +0200

Adapt to changes in solver camera API

Diffstat:
Mcmake/CMakeLists.txt | 6+++---
Msrc/stardis-compute.c | 87++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------
2 files changed, 67 insertions(+), 26 deletions(-)

diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt @@ -22,9 +22,9 @@ set(SDIS_SOURCE_DIR ${PROJECT_SOURCE_DIR}/../src) # Check dependencies ################################################################################ find_package(RCMake 0.4 REQUIRED) -find_package(RSys 0.6.1 REQUIRED) -find_package(StarEnc 0.3 REQUIRED) -find_package(Stardis 0.6.1 REQUIRED) +find_package(RSys 0.8.1 REQUIRED) +find_package(StarEnc 0.3.1 REQUIRED) +find_package(Stardis 0.7.1 REQUIRED) find_package(StarSTL 0.3 REQUIRED) set(TINYEXPR_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../tinyexpr" CACHE PATH "Directory for TinyExpr source files") diff --git a/src/stardis-compute.c b/src/stardis-compute.c @@ -371,34 +371,77 @@ select_probe_type } static void -dump_image(const struct sdis_accum_buffer* buf) +dump_image(const struct sdis_estimator_buffer* buf) { - struct sdis_accum_buffer_layout layout = SDIS_ACCUM_BUFFER_LAYOUT_NULL; + size_t definition[2]; double* temps = NULL; - const struct sdis_accum* accums = NULL; size_t ix, iy; CHK(buf != NULL); - CHK(sdis_accum_buffer_get_layout(buf, &layout) == RES_OK); + CHK(sdis_estimator_buffer_get_definition(buf, definition) == RES_OK); - temps = mem_alloc(layout.width*layout.height*sizeof(double)); + temps = mem_alloc(definition[0] * definition[1] *sizeof(double)); CHK(temps != NULL); /* Compute the per pixel temperature */ - CHK(sdis_accum_buffer_map(buf, &accums) == RES_OK); fprintf(stdout,"# vtk DataFile Version 2.0\nvtk output\nASCII\nDATASET STRUCTURED_POINTS\n"); - fprintf(stdout,"DIMENSIONS %i %i 1\n", (int)layout.width, (int)layout.height); + fprintf(stdout,"DIMENSIONS %zu %zu 1\n", definition[0], definition[1]); fprintf(stdout,"ORIGIN 0 0 0\n"); fprintf(stdout,"SPACING 1 1 1\n"); - fprintf(stdout,"POINT_DATA %i\n", (int)layout.width*(int)layout.height); - fprintf(stdout,"SCALARS temperature float 1\n"); + fprintf(stdout,"POINT_DATA %zu\n", definition[0] * definition[1]); + fprintf(stdout,"SCALARS temperature_estimate float 1\n"); fprintf(stdout,"LOOKUP_TABLE default\n"); - FOR_EACH(iy, 0, layout.height) { - const struct sdis_accum* row_accums = accums + (layout.height - 1 - iy) * layout.width; - double* row = temps + iy * layout.width; - FOR_EACH(ix, 0, layout.width) { - row[ix] = row_accums[ix].sum_weights / (double)row_accums[ix].nweights; - fprintf(stdout,"%f\n",row[ix]); + FOR_EACH(iy, 0, definition[1]) { + FOR_EACH(ix, 0, definition[0]) { + const struct sdis_estimator* estimator; + struct sdis_mc T; + CHK(sdis_estimator_buffer_at(buf, ix, iy, &estimator) == RES_OK); + CHK(sdis_estimator_get_temperature(estimator, &T) == RES_OK); + fprintf(stdout,"%f\n", T.E); + } + } + fprintf(stdout, "SCALARS temperature_std_dev float 1\n"); + fprintf(stdout, "LOOKUP_TABLE default\n"); + FOR_EACH(iy, 0, definition[1]) { + FOR_EACH(ix, 0, definition[0]) { + const struct sdis_estimator* estimator; + struct sdis_mc T; + CHK(sdis_estimator_buffer_at(buf, ix, iy, &estimator) == RES_OK); + CHK(sdis_estimator_get_temperature(estimator, &T) == RES_OK); + fprintf(stdout, "%f\n", T.SE); + } + } + fprintf(stdout, "SCALARS computation_time float 1\n"); + fprintf(stdout, "LOOKUP_TABLE default\n"); + FOR_EACH(iy, 0, definition[1]) { + FOR_EACH(ix, 0, definition[0]) { + const struct sdis_estimator* estimator; + struct sdis_mc time; + CHK(sdis_estimator_buffer_at(buf, ix, iy, &estimator) == RES_OK); + CHK(sdis_estimator_get_realisation_time(estimator, &time) == RES_OK); + fprintf(stdout, "%f\n", time.E); + } + } + fprintf(stdout, "SCALARS computation_time_std_dev float 1\n"); + fprintf(stdout, "LOOKUP_TABLE default\n"); + FOR_EACH(iy, 0, definition[1]) { + FOR_EACH(ix, 0, definition[0]) { + const struct sdis_estimator* estimator; + struct sdis_mc time; + CHK(sdis_estimator_buffer_at(buf, ix, iy, &estimator) == RES_OK); + CHK(sdis_estimator_get_realisation_time(estimator, &time) == RES_OK); + fprintf(stdout, "%f\n", time.SE); + } + } + fprintf(stdout, "SCALARS temperature_failures_count int 1\n"); + fprintf(stdout, "LOOKUP_TABLE default\n"); + FOR_EACH(iy, 0, definition[1]) { + FOR_EACH(ix, 0, definition[0]) { + const struct sdis_estimator* estimator; + size_t nfails; + CHK(sdis_estimator_buffer_at(buf, ix, iy, &estimator) == RES_OK); + CHK(sdis_estimator_get_failure_count(estimator, &nfails) == RES_OK); + fprintf(stdout, "%zu\n", nfails); } } mem_rm(temps); @@ -981,7 +1024,7 @@ stardis_compute(struct stardis* stardis, enum stardis_mode mode) struct sdis_scene* scn = NULL; struct sdis_estimator* estimator = NULL; struct sdis_mc temperature; - struct sdis_accum_buffer* buf = NULL; + struct sdis_estimator_buffer* buf = NULL; struct sdis_camera* cam = NULL; struct htable_intface htable_interfaces; @@ -1574,21 +1617,19 @@ stardis_compute(struct stardis* stardis, enum stardis_mode mode) stardis->camera.tgt, stardis->camera.up)); - /* Create the accum buffer */ - SDIS(accum_buffer_create(dev, width, height, &buf)); - /* Launch the simulation */ + time[0] = time[1] = stardis->camera.u.time; res = sdis_solve_camera(scn, cam, - stardis->camera.u.time, + time, stardis->scale_factor, stardis->radiative_temp[0], stardis->radiative_temp[1], width, height, (size_t)stardis->camera.spp, - sdis_accum_buffer_write, - buf); + stardis->dump_paths, + &buf); if (res != RES_OK) goto error; /* Write the image */ @@ -1753,7 +1794,7 @@ end: sa_release(media); if (cam) SDIS(camera_ref_put(cam)); - if (buf) SDIS(accum_buffer_ref_put(buf)); + if (buf) SDIS(estimator_buffer_ref_put(buf)); if (estimator) SDIS(estimator_ref_put(estimator)); if (scn) SDIS(scene_ref_put(scn)); if (dev) SDIS(device_ref_put(dev));