commit 3bc37e0e15640ce3ce1021d3f612e3afe42a5812
parent 646b78abc60f684b511dbf7d872c09e517311565
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Fri, 14 Feb 2020 09:20:24 +0100
Revert "Add a smtl_program_setup function"
This reverts commit 646b78abc60f684b511dbf7d872c09e517311565.
Diffstat:
4 files changed, 139 insertions(+), 245 deletions(-)
diff --git a/src/htsky.c b/src/htsky.c
@@ -27,7 +27,6 @@
#include <star/svx.h>
#include <rsys/clock_time.h>
-#include <rsys/cstr.h>
#include <rsys/double3.h>
#include <omp.h>
@@ -132,9 +131,6 @@ release_sky(ref_T* ref)
if(sky->sw_bands) MEM_RM(sky->allocator, sky->sw_bands);
darray_split_release(&sky->svx2htcp_z);
str_release(&sky->name);
- str_release(&sky->htcp_filename);
- str_release(&sky->htmie_filename);
- str_release(&sky->htgop_filename);
ASSERT(MEM_ALLOCATED_SIZE(&sky->svx_allocator) == 0);
mem_shutdown_proxy_allocator(&sky->svx_allocator);
MEM_RM(sky->allocator, sky);
@@ -150,22 +146,153 @@ htsky_create
const struct htsky_args* args,
struct htsky** out_sky)
{
+ struct time t0, t1;
+ struct mem_allocator* allocator = NULL;
struct htsky* sky = NULL;
+ char buf[128];
+ int nthreads_max;
res_T res = RES_OK;
- if(!out_sky) {
+ if(!check_args(args) || !out_sky) {
+ res = RES_BAD_ARG;
+ goto error;
+ }
+
+ allocator = mem_allocator ? mem_allocator : &mem_default_allocator;
+ sky = MEM_CALLOC(allocator, 1, sizeof(*sky));
+ if(!sky) {
+ if(args->verbose) {
+ #define ERR_STR "Could not allocate the HTSky data structure.\n"
+ if(logger) {
+ logger_print(logger, LOG_ERROR, ERR_STR);
+ } else {
+ fprintf(stderr, MSG_ERROR_PREFIX ERR_STR);
+ }
+ #undef ERR_STR
+ }
+ res = RES_MEM_ERR;
+ goto error;
+ }
+ nthreads_max = MMAX(omp_get_max_threads(), omp_get_num_procs());
+ ref_init(&sky->ref);
+ sky->allocator = allocator;
+ sky->verbose = args->verbose;
+ sky->repeat_clouds = args->repeat_clouds;
+ sky->is_cloudy = args->htcp_filename != NULL;
+ darray_split_init(sky->allocator, &sky->svx2htcp_z);
+ str_init(sky->allocator, &sky->name);
+ sky->sw_bands_range[0] = 1;
+ sky->sw_bands_range[1] = 0;
+ sky->nthreads = MMIN(args->nthreads, (unsigned)nthreads_max);
+
+ if(logger) {
+ sky->logger = logger;
+ } else {
+ setup_log_default(sky);
+ }
+
+ res = str_set(&sky->name, args->name);
+ if(res != RES_OK) {
+ log_err(sky, "cannot setup the material name to `%s'.\n", args->name);
+ goto error;
+ }
+
+ /* Setup an allocator specific to the SVX library */
+ res = mem_init_proxy_allocator(&sky->svx_allocator, sky->allocator);
+ if(res != RES_OK) {
+ log_err(sky, "cannot init the allocator used to manage the Star-VX data.\n");
+ goto error;
+ }
+
+ /* Create the Star-VX library device */
+ res = svx_device_create
+ (sky->logger, &sky->svx_allocator, sky->verbose, &sky->svx);
+ if(res != RES_OK) {
+ log_err(sky, "error creating the Star-VX library device.\n");
+ goto error;
+ }
+
+ /* Load the gas optical properties */
+ res = htgop_create(sky->logger, sky->allocator, sky->verbose, &sky->htgop);
+ if(res != RES_OK) {
+ log_err(sky, "could not create the gas optical properties loader.\n");
+ goto error;
+ }
+ res = htgop_load(sky->htgop, args->htgop_filename);
+ if(res != RES_OK) {
+ log_err(sky, "error loading the gas optical properties -- `%s'.\n",
+ args->htgop_filename);
+ goto error;
+ }
+
+ /* Fetch short wave bands range */
+ res = htgop_get_sw_spectral_intervals_CIE_XYZ(sky->htgop, sky->sw_bands_range);
+ if(res != RES_OK) goto error;
+
+ /* Setup the atmopshere */
+ time_current(&t0);
+ res = atmosphere_setup(sky, args->optical_thickness);
+ if(res != RES_OK) goto error;
+ time_sub(&t0, time_current(&t1), &t0);
+ time_dump(&t0, TIME_ALL, NULL, buf, sizeof(buf));
+ log_info(sky, "setup atmosphere in %s\n", buf);
+
+ /* Nothing more to do */
+ if(!sky->is_cloudy) goto exit;
+
+ if(!args->htmie_filename) {
+ log_err(sky, "missing the HTMie filename.\n");
res = RES_BAD_ARG;
goto error;
}
- res = sky_create(logger, mem_allocator, args, &sky);
+ if(!args->htcp_filename) {
+ log_err(sky, "missing the HTCP filename.\n");
+ res = RES_BAD_ARG;
+ goto error;
+ }
+
+ /* Load MIE data */
+ res = htmie_create(sky->logger, sky->allocator, sky->verbose, &sky->htmie);
+ if(res != RES_OK) {
+ log_err(sky, "could not create the Mie's data loader.\n");
+ goto error;
+ }
+ res = htmie_load(sky->htmie, args->htmie_filename);
+ if(res != RES_OK) {
+ log_err(sky, "error loading the Mie's data -- `%s'.\n", args->htmie_filename);
+ goto error;
+ }
+
+ res = setup_sw_bands_properties(sky);
if(res != RES_OK) goto error;
- res = sky_setup(sky);
+ /* Load clouds properties */
+ res = htcp_create(sky->logger, sky->allocator, sky->verbose, &sky->htcp);
+ if(res != RES_OK) {
+ log_err(sky, "could not create the loader of cloud properties.\n");
+ goto error;
+ }
+ res = htcp_load(sky->htcp, args->htcp_filename);
+ if(res != RES_OK) {
+ log_err(sky, "error loading the cloud properties -- `%s'.\n",
+ args->htcp_filename);
+ goto error;
+ }
+
+ time_current(&t0);
+ res = cloud_setup(sky, args->grid_max_definition, args->optical_thickness);
if(res != RES_OK) goto error;
+ time_sub(&t0, time_current(&t1), &t0);
+ time_dump(&t0, TIME_ALL, NULL, buf, sizeof(buf));
+ log_info(sky, "setup clouds in %s\n", buf);
+
+ if(sky->verbose) {
+ log_svx_memory_usage(sky);
+ }
exit:
- if(out_sky) *out_sky = sky;
+ *out_sky = sky;
return res;
error:
if(sky) {
@@ -466,200 +593,6 @@ htsky_sample_sw_spectral_data_CIE_1931_Z
/*******************************************************************************
* Local functions
******************************************************************************/
-res_T
-sky_create
- (struct logger* logger, /* NULL <=> use default logger */
- struct mem_allocator* mem_allocator, /* NULL <=> use default allocator */
- const struct htsky_args* args,
- struct htsky** out_sky)
-{
- struct mem_allocator* allocator = NULL;
- struct htsky* sky = NULL;
- int nthreads_max;
- res_T res = RES_OK;
-
- if(!check_args(args) || !out_sky) {
- res = RES_BAD_ARG;
- goto error;
- }
-
- allocator = mem_allocator ? mem_allocator : &mem_default_allocator;
- sky = MEM_CALLOC(allocator, 1, sizeof(*sky));
- if(!sky) {
- if(args->verbose) {
- #define ERR_STR "Could not allocate the HTSky data structure.\n"
- if(logger) {
- logger_print(logger, LOG_ERROR, ERR_STR);
- } else {
- fprintf(stderr, MSG_ERROR_PREFIX ERR_STR);
- }
- #undef ERR_STR
- }
- res = RES_MEM_ERR;
- goto error;
- }
- nthreads_max = MMAX(omp_get_max_threads(), omp_get_num_procs());
- ref_init(&sky->ref);
- sky->allocator = allocator;
- sky->verbose = args->verbose;
- sky->repeat_clouds = args->repeat_clouds;
- sky->is_cloudy = args->htcp_filename != NULL;
- darray_split_init(sky->allocator, &sky->svx2htcp_z);
- str_init(sky->allocator, &sky->name);
- str_init(sky->allocator, &sky->htcp_filename);
- str_init(sky->allocator, &sky->htgop_filename);
- str_init(sky->allocator, &sky->htmie_filename);
- sky->grid_max_definition[0] = args->grid_max_definition[0];
- sky->grid_max_definition[1] = args->grid_max_definition[1];
- sky->grid_max_definition[2] = args->grid_max_definition[2];
- sky->optical_thickness = args->optical_thickness;
- sky->sw_bands_range[0] = 1;
- sky->sw_bands_range[1] = 0;
- sky->nthreads = MMIN(args->nthreads, (unsigned)nthreads_max);
-
- if(logger) {
- sky->logger = logger;
- } else {
- setup_log_default(sky);
- }
-
- res = str_set(&sky->name, args->name);
- if(res != RES_OK) {
- log_err(sky, "cannot setup the material name to `%s' -- %s.\n",
- args->name, res_to_cstr(res));
- goto error;
- }
-
- if(sky->is_cloudy && !args->htmie_filename) {
- log_err(sky, "missing the HTMie filename.\n");
- res = RES_BAD_ARG;
- goto error;
- }
-
- #define CP_STR(Var) { \
- res = str_set(&sky->Var##_filename, args->Var##_filename); \
- if(res != RES_OK) { \
- log_err(sky, "cannot copy the "STR(Var)" filename.\n"); \
- goto error; \
- } \
- } (void)0
- CP_STR(htgop);
- if(sky->is_cloudy) {
- CP_STR(htcp);
- CP_STR(htmie);
- }
- #undef CP_STR
-
- /* Setup an allocator specific to the SVX library */
- res = mem_init_proxy_allocator(&sky->svx_allocator, sky->allocator);
- if(res != RES_OK) {
- log_err(sky,
- "cannot init the allocator used to manage the Star-VX data -- %s.\n",
- res_to_cstr(res));
- goto error;
- }
-
- /* Create the Star-VX library device */
- res = svx_device_create
- (sky->logger, &sky->svx_allocator, sky->verbose, &sky->svx);
- if(res != RES_OK) {
- log_err(sky, "error creating the Star-VX library device.\n");
- goto error;
- }
-
-error:
- if(out_sky) *out_sky = sky;
- return res;
-exit:
- if(sky) { htsky_ref_put(sky); sky = NULL; }
- goto exit;
-}
-
-res_T
-sky_setup(struct htsky* sky)
-{
- struct time t0, t1;
- char buf[128];
- res_T res = RES_OK;
- ASSERT(sky);
-
- /* Load the gas optical properties */
- res = htgop_create(sky->logger, sky->allocator, sky->verbose, &sky->htgop);
- if(res != RES_OK) {
- log_err(sky, "could not create the gas optical properties loader.\n");
- goto error;
- }
- res = htgop_load(sky->htgop, str_cget(&sky->htgop_filename));
- if(res != RES_OK) {
- log_err(sky, "error loading the gas optical properties -- `%s'.\n",
- str_cget(&sky->htgop_filename));
- goto error;
- }
-
- /* Fetch short wave bands range */
- res = htgop_get_sw_spectral_intervals_CIE_XYZ(sky->htgop, sky->sw_bands_range);
- if(res != RES_OK) goto error;
-
- /* Setup the atmopshere */
- time_current(&t0);
- res = atmosphere_setup(sky, sky->optical_thickness);
- if(res != RES_OK) goto error;
- time_sub(&t0, time_current(&t1), &t0);
- time_dump(&t0, TIME_ALL, NULL, buf, sizeof(buf));
- log_info(sky, "setup atmosphere in %s\n", buf);
-
- /* Nothing more to do */
- if(!sky->is_cloudy) goto exit;
-
- ASSERT(!str_is_empty(&sky->htcp_filename));
- ASSERT(!str_is_empty(&sky->htmie_filename));
-
- /* Load MIE data */
- res = htmie_create(sky->logger, sky->allocator, sky->verbose, &sky->htmie);
- if(res != RES_OK) {
- log_err(sky, "could not create the Mie's data loader.\n");
- goto error;
- }
- res = htmie_load(sky->htmie, str_cget(&sky->htmie_filename));
- if(res != RES_OK) {
- log_err(sky, "error loading the Mie's data -- `%s'.\n",
- str_cget(&sky->htmie_filename));
- goto error;
- }
-
- res = setup_sw_bands_properties(sky);
- if(res != RES_OK) goto error;
-
- /* Load clouds properties */
- res = htcp_create(sky->logger, sky->allocator, sky->verbose, &sky->htcp);
- if(res != RES_OK) {
- log_err(sky, "could not create the loader of cloud properties.\n");
- goto error;
- }
- res = htcp_load(sky->htcp, str_cget(&sky->htcp_filename));
- if(res != RES_OK) {
- log_err(sky, "error loading the cloud properties -- `%s'.\n",
- str_cget(&sky->htcp_filename));
- goto error;
- }
-
- time_current(&t0);
- res = cloud_setup(sky, sky->grid_max_definition, sky->optical_thickness);
- if(res != RES_OK) goto error;
- time_sub(&t0, time_current(&t1), &t0);
- time_dump(&t0, TIME_ALL, NULL, buf, sizeof(buf));
- log_info(sky, "setup clouds in %s\n", buf);
-
- if(sky->verbose) {
- log_svx_memory_usage(sky);
- }
-
-exit:
- return res;
-error:
- goto exit;
-}
-
double*
world_to_cloud
(const struct htsky* sky,
diff --git a/src/htsky_c.h b/src/htsky_c.h
@@ -29,11 +29,10 @@
#define H2O_MOLAR_MASS 0.01801528 /* In kg.mol^-1 */
#define GAS_CONSTANT 8.3144598 /* In kg.m^2.s^-2.mol^-1.K */
-/* Forward declarations */
+/* Forward declaration of external data types */
struct htcp;
struct htgop;
struct htmie;
-struct htsky_args;
struct svx_tree;
struct svx_tree_desc;
@@ -59,14 +58,6 @@ struct sw_band_prop {
double g_avg;
};
-struct delayed_args {
- struct str htcp_filename;
- struct str htgop_filename;
- struct str htmie_filename;
- unsigned grid_max_definition[3]; /* Maximum definition of the grid */
- double optical_thickness; /* Threshold used during octree building */
-};
-
struct htsky {
struct cloud** clouds; /* Per sw_band cloud data structure */
@@ -100,14 +91,6 @@ struct htsky {
struct str name; /* Name of the sky used by the Star-MTL binding */
- /* Filename of the input files */
- struct str htcp_filename;
- struct str htgop_filename;
- struct str htmie_filename;
-
- unsigned grid_max_definition[3]; /* Maximum definition of the grid */
- double optical_thickness; /* Threshold used during octree building */
-
struct mem_allocator* allocator;
struct mem_allocator svx_allocator;
struct logger* logger;
@@ -116,17 +99,6 @@ struct htsky {
ref_T ref;
};
-extern LOCAL_SYM res_T
-sky_create
- (struct logger* logger, /* NULL <=> use default logger */
- struct mem_allocator* mem_allocator, /* NULL <=> use default allocator */
- const struct htsky_args* args,
- struct htsky** out_sky);
-
-extern LOCAL_SYM res_T
-sky_setup
- (struct htsky* sky);
-
static FINLINE double
wavenumber_to_wavelength(const double nu/*In cm^-1*/)
{
diff --git a/src/htsky_smtl.c b/src/htsky_smtl.c
@@ -17,7 +17,6 @@
#define _POSIX_C_SOURCE 200112L /* getopt support */
#include "htsky.h"
-#include "htsky_c.h"
#include "htsky_smtl.h"
#include <rsys/cstr.h>
@@ -155,7 +154,7 @@ smtl_program_init
res = args_init(&args, argc, argv);
if(res != RES_OK) goto error;
- res = sky_create(logger, allocator, &args, &sky);
+ res = htsky_create(logger, allocator, &args, &sky);
if(res != RES_OK) goto error;
exit:
@@ -169,12 +168,6 @@ error:
goto exit;
}
-res_T
-smtl_program_setup(void* prog)
-{
- return sky_setup(prog);
-}
-
void
smtl_program_release(void* program)
{
@@ -188,7 +181,7 @@ smtl_program_get_mtl_name(void* program)
}
enum smtl_mtl_type
-smtl_program_get_mtl_type(void* program)
+smtl_prgram_get_mtl_type(void* program)
{
(void)program;
return SMTL_MTL_SEMI_TRANSPARENT;
diff --git a/src/htsky_smtl.h b/src/htsky_smtl.h
@@ -50,10 +50,6 @@ smtl_program_init
char* argv[],
void** out_prog);
-HTSKY_API res_T
-smtl_program_setup
- (void* program);
-
HTSKY_API void
smtl_program_release
(void* program);
@@ -66,7 +62,7 @@ smtl_program_get_mtl_name
(void* program);
HTSKY_API enum smtl_mtl_type
-smtl_program_get_mtl_type
+smtl_prgram_get_mtl_type
(void* program);
/*******************************************************************************