commit 1f5374da723e4ded7ac868975bdbd01b6057437c
parent 86a1b15a43d968304f4f6114cfe89ff1e3a39bdc
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Fri, 28 Feb 2025 11:24:11 +0100
BugFix: cannot use -l, -L options with count 1
Raised an assert if the probe list file contained a single probe point.
Diffstat:
2 files changed, 29 insertions(+), 34 deletions(-)
diff --git a/src/stardis-compute-probe-boundary.c b/src/stardis-compute-probe-boundary.c
@@ -1111,41 +1111,34 @@ error:
res_T
compute_probe_on_interface(struct stardis* stardis, struct time* start)
{
+ int temp_flags = MODE_COMPUTE_PROBE_TEMP_ON_SURF
+ | MODE_COMPUTE_LIST_PROBE_TEMP_ON_SURF;
+ int flux_flags = MODE_COMPUTE_PROBE_FLUX_DNSTY_ON_SURF
+ | MODE_COMPUTE_LIST_PROBE_FLUX_DNSTY_ON_SURF;
res_T res = RES_OK;
ASSERT(stardis && start);
- ASSERT((stardis->mode & MODE_COMPUTE_PROBE_TEMP_ON_SURF)
- || (stardis->mode & MODE_COMPUTE_LIST_PROBE_TEMP_ON_SURF)
- || (stardis->mode & MODE_COMPUTE_LIST_PROBE_FLUX_DNSTY_ON_SURF)
- || (stardis->mode & MODE_COMPUTE_PROBE_FLUX_DNSTY_ON_SURF));
+ ASSERT((stardis->mode & temp_flags) != (stardis->mode & flux_flags)); /* xor */
- /* Multiple probes */
- if(stardis->mode & MODE_COMPUTE_LIST_PROBE_TEMP_ON_SURF) {
- ASSERT(darray_probe_boundary_size_get(&stardis->probe_boundary_list) > 1);
-
- res = compute_multiple_probes_on_interface(stardis, start);
- if(res != RES_OK) goto error;
-
- } else if(stardis->mode & MODE_COMPUTE_LIST_PROBE_FLUX_DNSTY_ON_SURF) {
- ASSERT(darray_probe_boundary_size_get(&stardis->probe_boundary_list) > 1);
-
- res = compute_multiple_flux_probes_on_interface(stardis, start);
- if(res != RES_OK) goto error;
-
- /* Single probe */
- } else if(stardis->mode & MODE_COMPUTE_PROBE_TEMP_ON_SURF) {
- const struct stardis_probe_boundary* probe = NULL;
- ASSERT(darray_probe_boundary_size_get(&stardis->probe_boundary_list) == 1);
-
- probe = darray_probe_boundary_cdata_get(&stardis->probe_boundary_list);
- res = compute_single_probe_on_interface(stardis, start, probe);
- if(res != RES_OK) goto error;
- } else if(stardis->mode & MODE_COMPUTE_PROBE_FLUX_DNSTY_ON_SURF) {
- const struct stardis_probe_boundary* probe = NULL;
- ASSERT(darray_probe_boundary_size_get(&stardis->probe_boundary_list) == 1);
-
- probe = darray_probe_boundary_cdata_get(&stardis->probe_boundary_list);
- res = compute_single_flux_probe_on_interface(stardis, start, probe);
- if(res != RES_OK) goto error;
+ if(stardis->mode & temp_flags) {
+ if(darray_probe_boundary_size_get(&stardis->probe_boundary_list) > 1) {
+ res = compute_multiple_probes_on_interface(stardis, start);
+ if(res != RES_OK) goto error;
+ } else {
+ const struct stardis_probe_boundary* probe
+ = darray_probe_boundary_cdata_get(&stardis->probe_boundary_list);
+ res = compute_single_probe_on_interface(stardis, start, probe);
+ if(res != RES_OK) goto error;
+ }
+ } else if(stardis->mode & flux_flags) {
+ if(darray_probe_boundary_size_get(&stardis->probe_boundary_list) > 1) {
+ res = compute_multiple_flux_probes_on_interface(stardis, start);
+ if(res != RES_OK) goto error;
+ } else {
+ const struct stardis_probe_boundary* probe
+ = darray_probe_boundary_cdata_get(&stardis->probe_boundary_list);
+ res = compute_single_flux_probe_on_interface(stardis, start, probe);
+ if(res != RES_OK) goto error;
+ }
}
exit:
diff --git a/src/stardis-output.c b/src/stardis-output.c
@@ -1649,7 +1649,9 @@ print_single_MC_result
else fprintf(stream, "%g %g %lu %lu\n",
result.E, result.SE, nfailures, nsamples);
break;
- case MODE_COMPUTE_PROBE_TEMP_ON_SURF: {
+ case MODE_COMPUTE_PROBE_TEMP_ON_SURF:
+ case MODE_COMPUTE_LIST_PROBE_TEMP_ON_SURF:
+ {
const struct stardis_probe_boundary* probe = NULL;
probe = darray_probe_boundary_cdata_get(&stardis->probe_boundary_list);
ERR(print_single_MC_result_probe_boundary
@@ -1869,7 +1871,7 @@ print_single_MC_result
}
break;
}
- default: FATAL("Invalid mode.");
+ default: FATAL("Invalid mode\n.");
}
if(stardis->mode & MODE_EXTENDED_RESULTS)
fprintf(stream, "#failures: %lu/%lu\n", nfailures, nsamples);