stardis

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

commit 89c04bddf4a34740babed5bbcdd3cf0ba33ca146
parent f4409b68c6bf71bc35c3bc221e47733e2f2e61b3
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Thu, 24 Sep 2020 15:36:22 +0200

BugFix: fix an assert in conflict situation

Diffstat:
Msrc/stardis-app.c | 92+++++++++++++++++++++++++++++++++++++++++--------------------------------------
1 file changed, 48 insertions(+), 44 deletions(-)

diff --git a/src/stardis-app.c b/src/stardis-app.c @@ -123,55 +123,59 @@ check_delta_and_create_solid /* The enclosures where created using description ids */ ERR(senc3d_scene_get_enclosure_count_by_medium(stardis->senc3d_scn, desc_id, &ecount)); - CHK(ecount != 0); /* This solid cannot be unused */ - /* Can be unused if conflicts; in this case, avoid delta warnings */ - int external = 0; - FOR_EACH(e, 0, ecount) { - ERR(senc3d_scene_get_enclosure_by_medium(stardis->senc3d_scn, desc_id, - e, &enc)); - ERR(senc3d_enclosure_get_header(enc, &header)); - if(header.is_infinite) { - /* External solid, volume is negative and no delta walk expected */ - external = 1; - } else { - double d = header.volume / (header.area * 6); - ASSERT(d >= 0); - delta_range[0] = MMIN(delta_range[0], d); - delta_range[1] = MMAX(delta_range[1], d); + if(ecount == 0) { + unsigned ccount; + ERR(sg3d_geometry_get_unique_triangles_with_properties_conflict_count( + stardis->geometry.sg3d, &ccount)); + CHK(ccount == 0); /* This solid can only be unused if in conflict*/ + } else { + int external = 0; + FOR_EACH(e, 0, ecount) { + ERR(senc3d_scene_get_enclosure_by_medium(stardis->senc3d_scn, desc_id, + e, &enc)); + ERR(senc3d_enclosure_get_header(enc, &header)); + if(header.is_infinite) { + /* External solid, volume is negative and no delta walk expected */ + external = 1; + } else { + double d = header.volume / (header.area * 6); + ASSERT(d >= 0); + delta_range[0] = MMIN(delta_range[0], d); + delta_range[1] = MMAX(delta_range[1], d); + } + ERR(senc3d_enclosure_ref_put(enc)); + enc = NULL; } - ERR(senc3d_enclosure_ref_put(enc)); - enc = NULL; - } - if(ecount > 1 || !external) { - ASSERT(0 < delta_range[0] && delta_range[0] <= delta_range[1]); - ratio = delta_range[1] / delta_range[0]; - if(ratio > acceptance_ratio) - logger_print(stardis->logger, LOG_WARNING, - "Solid %s is used in %u different enclosures that have different " - "delta requirements.\n", - str_cget(&description->d.solid.name), ecount); - /* Delta needs to be substituted with actual value */ - if(description->d.solid.delta == DELTA_AUTO) { - description->d.solid.delta = delta_range[0]; - logger_print(stardis->logger, LOG_OUTPUT, - "Auto delta for solid %s set to %g\n", - str_cget(&description->d.solid.name), description->d.solid.delta); - } else { - int too_small - = (delta_range[0] > description->d.solid.delta * acceptance_ratio); - int too_big - = (delta_range[0] * acceptance_ratio < description->d.solid.delta); - /* Check if user delta is OK */ - if(too_small || too_big) { + if(ecount > 1 || !external) { + ASSERT(0 < delta_range[0] && delta_range[0] <= delta_range[1]); + ratio = delta_range[1] / delta_range[0]; + if(ratio > acceptance_ratio) logger_print(stardis->logger, LOG_WARNING, - "User delta for solid %s seems too %s: %g; " - "auto delta would have set it to %g.\n", - str_cget(&description->d.solid.name), (too_big ? "big" : "small"), - description->d.solid.delta, delta_range[0]); + "Solid %s is used in %u different enclosures that have different " + "delta requirements.\n", + str_cget(&description->d.solid.name), ecount); + /* Delta needs to be substituted with actual value */ + if(description->d.solid.delta == DELTA_AUTO) { + description->d.solid.delta = delta_range[0]; + logger_print(stardis->logger, LOG_OUTPUT, + "Auto delta for solid %s set to %g\n", + str_cget(&description->d.solid.name), description->d.solid.delta); + } else { + int too_small + = (delta_range[0] > description->d.solid.delta * acceptance_ratio); + int too_big + = (delta_range[0] * acceptance_ratio < description->d.solid.delta); + /* Check if user delta is OK */ + if(too_small || too_big) { + logger_print(stardis->logger, LOG_WARNING, + "User delta for solid %s seems too %s: %g; " + "auto delta would have set it to %g.\n", + str_cget(&description->d.solid.name), (too_big ? "big" : "small"), + description->d.solid.delta, delta_range[0]); + } } } } - } ERR(create_solver_solid(stardis, &description->d.solid));