solstice

Compute collected power and efficiencies of a solar plant
git clone git://git.meso-star.com/solstice.git
Log | Files | Refs | README | LICENSE

commit 32e28cdeaa549d6762c0108c583902a173cbf889
parent 5765dab7fefe1381761cfbd8f25f285bb84221c0
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Wed,  1 Feb 2017 16:11:01 +0100

BugFix: default number of slices not set for spheres and cylinders.

Diffstat:
Msrc/parser/solparser.c | 28+++++++++++++++++++++++-----
Msrc/parser/test_solparser3.c | 18++++++++++++++++--
2 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/src/parser/solparser.c b/src/parser/solparser.c @@ -1602,6 +1602,13 @@ parse_cylinder CHECK_PARAM(RADIUS, "radius"); #undef CHECK_PARAM + #define DEFAULT_PARAM(Flag, Ptr, Value) \ + if(!(mask & BIT(Flag))) { \ + *(Ptr) = Value; \ + } (void)0 + DEFAULT_PARAM(SLICES, &shape->nslices, 16); + #undef DEFAULT_PARAM + exit: out_ishape->i = ishape; return res; @@ -1955,11 +1962,22 @@ parse_sphere #undef SETUP_MASK } - if(!(mask & BIT(RADIUS))) { - log_err(parser, sphere, "the sphere radius is missing.\n"); - res = RES_BAD_ARG; - goto error; - } + #define CHECK_PARAM(Flag, Name) \ + if(!(mask & BIT(Flag))) { \ + log_err(parser, sphere, \ + "the sphere parameter `"Name"' is missing.\n"); \ + res = RES_BAD_ARG; \ + goto error; \ + } (void)0 + CHECK_PARAM(RADIUS, "radius"); + #undef CHECK_PARAM + + #define DEFAULT_PARAM(Flag, Ptr, Value) \ + if(!(mask & BIT(Flag))) { \ + *(Ptr) = Value; \ + } (void)0 + DEFAULT_PARAM(SLICES, &shape->nslices, 16); + #undef DEFAULT_PARAM exit: out_ishape->i = ishape; diff --git a/src/parser/test_solparser3.c b/src/parser/test_solparser3.c @@ -22,6 +22,9 @@ static const char* input[] = { "- geometry: &cylinder\n", " - cylinder: { radius: 1, height: 10, slices: 128 }\n", " material: *lambertian\n", + "- geometry: &cylinder2\n", + " - cylinder: { radius: 1, height: 10 }\n", + " material: *lambertian\n", "- sun: \n", " dni: 1\n", " spectrum: [{wavelength: 1, data: 1}]\n", @@ -37,7 +40,7 @@ static const char* input[] = { " children:\n", " - name: entity0a\n", " primary: 1\n", - " geometry: *cylinder\n", + " geometry: *cylinder2\n", " - name: entity0b\n", " primary: 1\n", " geometry: *cylinder\n", @@ -135,10 +138,21 @@ check_entity0 entity0a = solparser_get_entity(parser, entity_id); CHECK(strcmp(str_cget(&entity0a->name), "entity0a"), 0); CHECK(entity0a->type, SOLPARSER_ENTITY_GEOMETRY); - CHECK(entity0->data.geometry.i, entity0a->data.geometry.i); + NCHECK(entity0->data.geometry.i, entity0a->data.geometry.i); CHECK(solparser_entity_get_anchors_count(entity0a), 0); CHECK(solparser_entity_get_children_count(entity0a), 0); + geom = solparser_get_geometry(parser, entity0a->data.geometry); + CHECK(solparser_geometry_get_objects_count(geom), 1); + obj_id = solparser_geometry_get_object(geom, 0); + obj = solparser_get_object(parser, obj_id); + shape = solparser_get_shape(parser, obj->shape); + CHECK(shape->type, SOLPARSER_SHAPE_CYLINDER); + cylinder = solparser_get_shape_cylinder(parser, shape->data.cylinder); + CHECK(cylinder->height, 10); + CHECK(cylinder->radius, 1); + CHECK(cylinder->nslices, 16); + entity_id = solparser_entity_get_child(entity0, 1); entity0b = solparser_get_entity(parser, entity_id); CHECK(strcmp(str_cget(&entity0b->name), "entity0b"), 0);