commit 1be4618808bbeb31a5b401f9640109acc6b32e28
parent 18aa04ddff2f68ad1f5b3ccef79967f68c499383
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 7 Sep 2022 12:02:02 +0200
Use the sck_find_bands function rather than a handmade implementation
Diffstat:
2 files changed, 15 insertions(+), 19 deletions(-)
diff --git a/src/rnatm_c.h b/src/rnatm_c.h
@@ -190,6 +190,10 @@ struct rnatm {
unsigned grid_definition[3];
+ /* Spectral range to consider (in nanometers). Limits are inclusive */
+ double spectral_range[2];
+ double optical_thickness; /* Threshold used during octree building */
+
unsigned nthreads;
int verbose;
diff --git a/src/rnatm_octree.c b/src/rnatm_octree.c
@@ -257,28 +257,12 @@ find_band_range
{
struct sck_band band_low;
struct sck_band band_upp;
- size_t nbands;
size_t nbands_overlaped;
- size_t ilow, iupp;
res_T res = RES_OK;
ASSERT(atm && range && bands && range[0] <= range[1]);
- nbands = sck_get_bands_count(atm->gas.ck);
-
- /* Find the lower bound (inclusive) */
- FOR_EACH(ilow, 0, nbands) {
- SCK(get_band(atm->gas.ck, ilow, &band_low));
- if(band_low.upper >= range[0]) break;
- }
-
- /* Find the upper bound (inclusive) */
- FOR_EACH(iupp, ilow, nbands) {
- SCK(get_band(atm->gas.ck, iupp, &band_upp));
- if(band_upp.upper > range[1]) break;
- }
-
- bands[0] = ilow;
- bands[1] = MMIN(iupp, nbands-1); /* Make the boundary inclusive */
+ res = sck_find_bands(atm->gas.ck, range, bands);
+ if(res != RES_OK) goto error;
if(bands[0] > bands[1]) {
log_err(atm,
@@ -289,6 +273,9 @@ find_band_range
}
nbands_overlaped = bands[1] - bands[0] + 1;
+
+ SCK(get_band(atm->gas.ck, bands[0], &band_low));
+ SCK(get_band(atm->gas.ck, bands[1], &band_upp));
log_info(atm,
"the spectral range [%g, %g] nm overlaps %lu band%sin [%g, %g[ nm\n",
SPLIT2(range),
@@ -1531,9 +1518,14 @@ setup_octrees(struct rnatm* atm, const struct rnatm_create_args* args)
/* Start time recording */
time_current(&t0);
+ /* Setup miscellaneous parameters */
+ atm->spectral_range[0] = args->spectral_range[0];
+ atm->spectral_range[1] = args->spectral_range[1];
+ atm->optical_thickness = args->optical_thickness;
+
res = compute_grid_definition(atm, args);
if(res != RES_OK) goto error;
- res = find_band_range(atm, args->spectral_range, bands);
+ res = find_band_range(atm, atm->spectral_range, bands);
if(res != RES_OK) goto error;
res = create_octrees(atm, args, bands);
if(res != RES_OK) goto error;