rnatm

Load and structure data describing an atmosphere
git clone git://git.meso-star.fr/rnatm.git
Log | Files | Refs | README | LICENSE

commit 5d798a24629b997ca0c1087227f13c112b28c25a
parent 05af49ab50f02853f9a919517b9263ac9c7664f5
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed, 31 Aug 2022 12:08:34 +0200

Take into account the Star-Aerosol API updates

Diffstat:
Msrc/rnatm.c | 2+-
Msrc/rnatm.h | 9+++++++--
Msrc/rnatm_octree.c | 42+++++++++++++++++++++---------------------
Msrc/test_rnatm.c | 2+-
4 files changed, 30 insertions(+), 25 deletions(-)

diff --git a/src/rnatm.c b/src/rnatm.c @@ -296,7 +296,7 @@ rnatm_get_k_svx_voxel } size_t -rnatm_get_octrees_count(const struct rnatm* atm) +rnatm_get_spectral_items_count(const struct rnatm* atm) { ASSERT(atm); return darray_accel_struct_size_get(&atm->accel_structs); diff --git a/src/rnatm.h b/src/rnatm.h @@ -161,14 +161,19 @@ rnatm_get_k_svx_voxel const enum rnatm_radcoef radcoef, const enum rnatm_svx_op op); +/* Returns the number of spectral items. One acceleration structure is built + * per spectral item from the gas and aerosols meshes */ RNATM_API size_t -rnatm_get_octrees_count +rnatm_get_spectral_items_count (const struct rnatm* atm); +/* Writes a set of octrees following the VTK file format */ RNATM_API res_T rnatm_write_vtk_octrees (struct rnatm* atm, - const size_t octrees[2], /* Range to consider. Limits are inclusive */ + /* Spectral items to consider. Limits are inclusive. There is one octree per + * spectral item */ + const size_t spectral_items[2], FILE* stream); #endif /* RNATM_H */ diff --git a/src/rnatm_octree.c b/src/rnatm_octree.c @@ -523,22 +523,22 @@ setup_tetra_radcoefs_aerosol && ars_band.lower <= gas_band.lower && ars_band.upper >= gas_band.upper) { - /* Compute the scattering coefficient range of the tetrahedron */ - ks[0] = ars_band.ks_list[tetra->indices[0]]; - ks[1] = ars_band.ks_list[tetra->indices[1]]; - ks[2] = ars_band.ks_list[tetra->indices[2]]; - ks[3] = ars_band.ks_list[tetra->indices[3]]; - radcoefs->ks_min = MMIN(MMIN(ks[0], ks[1]), MMIN(ks[2], ks[3])); - radcoefs->ks_max = MMAX(MMAX(ks[0], ks[1]), MMAX(ks[2], ks[3])); - /* Compute the absorption coefficient range of the tetrahedron */ - ka[0] = ars_band.ka_list[tetra->indices[0]]; - ka[1] = ars_band.ka_list[tetra->indices[1]]; - ka[2] = ars_band.ka_list[tetra->indices[2]]; - ka[3] = ars_band.ka_list[tetra->indices[3]]; + ka[0] = sars_band_get_ka(&ars_band, tetra->indices[0]); + ka[1] = sars_band_get_ka(&ars_band, tetra->indices[1]); + ka[2] = sars_band_get_ka(&ars_band, tetra->indices[2]); + ka[3] = sars_band_get_ka(&ars_band, tetra->indices[3]); radcoefs->ka_min = MMIN(MMIN(ka[0], ka[1]), MMIN(ka[2], ka[3])); radcoefs->ka_max = MMAX(MMAX(ka[0], ka[1]), MMAX(ka[2], ka[3])); + /* Compute the scattering coefficient range of the tetrahedron */ + ks[0] = sars_band_get_ks(&ars_band, tetra->indices[0]); + ks[1] = sars_band_get_ks(&ars_band, tetra->indices[1]); + ks[2] = sars_band_get_ks(&ars_band, tetra->indices[2]); + ks[3] = sars_band_get_ks(&ars_band, tetra->indices[3]); + radcoefs->ks_min = MMIN(MMIN(ks[0], ks[1]), MMIN(ks[2], ks[3])); + radcoefs->ks_max = MMAX(MMAX(ks[0], ks[1]), MMAX(ks[2], ks[3])); + /* The gas band overlaid N aerosol bands (N >= 1) */ } else { float tau_ka[4] = {0, 0, 0, 0}; @@ -549,7 +549,7 @@ setup_tetra_radcoefs_aerosol size_t iars_band; FOR_EACH(iars_band, ars_ibands[0], ars_ibands[1]+1) { - float lambda_len; + float lambda_len; SARS(get_band(aerosol->sars, iars_band, &ars_band)); lambda_min = MMAX(gas_band.lower, ars_band.lower); @@ -558,15 +558,15 @@ setup_tetra_radcoefs_aerosol lambda_len = (float)(lambda_max - lambda_min); ASSERT(lambda_len > 0); - tau_ks[0] += ars_band.ks_list[tetra->indices[0]] * lambda_len; - tau_ks[1] += ars_band.ks_list[tetra->indices[1]] * lambda_len; - tau_ks[2] += ars_band.ks_list[tetra->indices[2]] * lambda_len; - tau_ks[3] += ars_band.ks_list[tetra->indices[3]] * lambda_len; + tau_ka[0] += sars_band_get_ka(&ars_band, tetra->indices[0]) * lambda_len; + tau_ka[1] += sars_band_get_ka(&ars_band, tetra->indices[1]) * lambda_len; + tau_ka[2] += sars_band_get_ka(&ars_band, tetra->indices[2]) * lambda_len; + tau_ka[3] += sars_band_get_ka(&ars_band, tetra->indices[3]) * lambda_len; - tau_ka[0] += ars_band.ka_list[tetra->indices[0]] * lambda_len; - tau_ka[1] += ars_band.ka_list[tetra->indices[1]] * lambda_len; - tau_ka[2] += ars_band.ka_list[tetra->indices[2]] * lambda_len; - tau_ka[3] += ars_band.ka_list[tetra->indices[3]] * lambda_len; + tau_ks[0] += sars_band_get_ks(&ars_band, tetra->indices[0]) * lambda_len; + tau_ks[1] += sars_band_get_ks(&ars_band, tetra->indices[1]) * lambda_len; + tau_ks[2] += sars_band_get_ks(&ars_band, tetra->indices[2]) * lambda_len; + tau_ks[3] += sars_band_get_ks(&ars_band, tetra->indices[3]) * lambda_len; } /* Compute the radiative coefficients of the tetrahedron */ diff --git a/src/test_rnatm.c b/src/test_rnatm.c @@ -440,7 +440,7 @@ write_vtk_octrees(struct rnatm* atm, const char* filename) } octrees_range[0] = 0; - octrees_range[1] = rnatm_get_octrees_count(atm) - 1; + octrees_range[1] = rnatm_get_spectral_items_count(atm) - 1; res = rnatm_write_vtk_octrees(atm, octrees_range, fp); if(res != RES_OK) goto error;