stardis

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

commit 36a4162d15e16faa34a7358382677cfb2f375ed2
parent fbc86b2ea01666c6bd138e1f2aebf4240c4ae402
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Wed, 12 Jan 2022 12:24:22 +0100

Add mandatory functions for programmed descriptions

These functions are getters for copyright and license

Diffstat:
Msrc/stardis-fbound-prog.h | 3+++
Msrc/stardis-fluid-prog.h | 3+++
Msrc/stardis-hbound-prog.h | 3+++
Msrc/stardis-parsing.c | 255+++++++++++++++++++++++++++++--------------------------------------------------
Msrc/stardis-prog.h | 15+++++++++++++++
Msrc/stardis-sfconnect-prog.h | 3+++
Msrc/stardis-solid-prog.h | 3+++
Msrc/stardis-ssconnect-prog.h | 3+++
Msrc/stardis-tbound-prog.h | 3+++
9 files changed, 130 insertions(+), 161 deletions(-)

diff --git a/src/stardis-fbound-prog.h b/src/stardis-fbound-prog.h @@ -38,6 +38,9 @@ struct f_boundary_prog { void* lib; void* (*create)(char*); void (*release)(void*); + const char* (*get_copyright_notice)(void*); + const char* (*get_license_short)(void*); + const char* (*get_license_text)(void*); double (*flux)(const struct stardis_interface_fragment*, void*); unsigned mat_id; }; diff --git a/src/stardis-fluid-prog.h b/src/stardis-fluid-prog.h @@ -39,6 +39,9 @@ struct fluid_prog { void* lib; void* (*create)(char*); void (*release)(void*); + const char* (*get_copyright_notice)(void*); + const char* (*get_license_short)(void*); + const char* (*get_license_text)(void*); double (*rho)(const struct stardis_vertex*, void*); double (*cp)(const struct stardis_vertex*, void*); double (*temp)(const struct stardis_vertex*, void*); diff --git a/src/stardis-hbound-prog.h b/src/stardis-hbound-prog.h @@ -37,6 +37,9 @@ struct h_boundary_prog { void* lib; void* (*create)(char*); void (*release)(void*); + const char* (*get_copyright_notice)(void*); + const char* (*get_license_short)(void*); + const char* (*get_license_text)(void*); double (*ref_temp)(const struct stardis_interface_fragment*, void*); double (*emissivity)(const struct stardis_interface_fragment*, void*); double (*alpha)(const struct stardis_interface_fragment*, void*); diff --git a/src/stardis-parsing.c b/src/stardis-parsing.c @@ -441,6 +441,72 @@ error: goto end; } +static res_T +get_prog_common + (const char* lib_name, + struct logger* logger, + void** lib, + void* (**create)(char*), + void (**release)(void*), + const char* (**get_copyright_notice)(void*), + const char* (**get_license_short)(void*), + const char* (**get_license_text)(void*)) +{ + res_T res = RES_OK; + + ASSERT(lib_name && lib && create && release + && get_copyright_notice && get_license_short && get_license_text); + + /* get the user-defined functions from the library */ + *lib = library_open(lib_name); + if(!*lib) { + logger_print(logger, LOG_ERROR, + "Cannot open library: %s\n", lib_name); + res = RES_BAD_ARG; + goto error; + } + *(void**)create = library_get_symbol(*lib, "stardis_create_data"); + if(!*create) { + logger_print(logger, LOG_ERROR, + "Cannot find function 'stardis_create_data' in lib %s\n", lib_name); + res = RES_BAD_ARG; + goto error; + } + *(void**)release = library_get_symbol(*lib, "stardis_release_data"); + if(!*release) { + logger_print(logger, LOG_ERROR, + "Cannot find function 'stardis_release_data' in lib %s\n", lib_name); + res = RES_BAD_ARG; + goto error; + } + *(void**)get_copyright_notice = library_get_symbol(*lib, "get_copyright_notice"); + if(!*get_copyright_notice) { + logger_print(logger, LOG_ERROR, + "Cannot find function 'get_copyright_notice' in lib %s\n", lib_name); + res = RES_BAD_ARG; + goto error; + } + *(void**)get_license_short = library_get_symbol(*lib, "get_license_short"); + if(!*get_license_short) { + logger_print(logger, LOG_ERROR, + "Cannot find function 'get_license_short' in lib %s\n", lib_name); + res = RES_BAD_ARG; + goto error; + } + *(void**)get_license_text = library_get_symbol(*lib, "get_license_text"); + if(!*get_license_text) { + logger_print(logger, LOG_ERROR, + "Cannot find function 'get_license_text' in lib %s\n", lib_name); + res = RES_BAD_ARG; + goto error; + } + +end: + return res; +error: + goto end; +} + /* H_BOUNDARY_FOR_SOLID_PROG Name Prog_filename STL_filenames [PROG_PARAMS ...] * H_BOUNDARY_FOR_FLUID_PROG Name Prog_filename STL_filenames [PROG_PARAMS ...] */ static res_T @@ -490,29 +556,10 @@ process_h_prog ERR(str_set(&h_boundary_prog->args, *tok_ctx)); } /* get the user-defined functions from the library */ - h_boundary_prog->lib = library_open(lib_name); - if(!h_boundary_prog->lib) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot open library: %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&h_boundary_prog->create - = library_get_symbol(h_boundary_prog->lib, "stardis_create_data"); - if(!h_boundary_prog->create) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_create_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&h_boundary_prog->release - = library_get_symbol(h_boundary_prog->lib, "stardis_release_data"); - if(!h_boundary_prog->release) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_release_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } + ERR(get_prog_common(lib_name, stardis->logger, &h_boundary_prog->lib, + &h_boundary_prog->create, &h_boundary_prog->release, + &h_boundary_prog->get_copyright_notice, &h_boundary_prog->get_license_short, + &h_boundary_prog->get_license_text)); *(void**)&h_boundary_prog->ref_temp = library_get_symbol(h_boundary_prog->lib, "stardis_reference_temperature"); if(!h_boundary_prog->ref_temp) { @@ -725,29 +772,10 @@ process_t_prog ERR(str_set(&t_boundary_prog->args, *tok_ctx)); } /* get the user-defined functions from the library */ - t_boundary_prog->lib = library_open(lib_name); - if(!t_boundary_prog->lib) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot open library: %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&t_boundary_prog->create - = library_get_symbol(t_boundary_prog->lib, "stardis_create_data"); - if(!t_boundary_prog->create) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_create_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&t_boundary_prog->release - = library_get_symbol(t_boundary_prog->lib, "stardis_release_data"); - if(!t_boundary_prog->release) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_release_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } + ERR(get_prog_common(lib_name, stardis->logger, &t_boundary_prog->lib, + &t_boundary_prog->create, &t_boundary_prog->release, + &t_boundary_prog->get_copyright_notice, &t_boundary_prog->get_license_short, + &t_boundary_prog->get_license_text)); *(void**)&t_boundary_prog->temperature = library_get_symbol(t_boundary_prog->lib, "stardis_boundary_temperature"); if(!t_boundary_prog->temperature) { @@ -893,29 +921,10 @@ process_flx_prog ERR(str_set(&f_boundary_prog->args, *tok_ctx)); } /* get the user-defined functions from the library */ - f_boundary_prog->lib = library_open(lib_name); - if(!f_boundary_prog->lib) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot open library: %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&f_boundary_prog->create - = library_get_symbol(f_boundary_prog->lib, "stardis_create_data"); - if(!f_boundary_prog->create) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_create_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&f_boundary_prog->release - = library_get_symbol(f_boundary_prog->lib, "stardis_release_data"); - if(!f_boundary_prog->release) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_release_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } + ERR(get_prog_common(lib_name, stardis->logger, &f_boundary_prog->lib, + &f_boundary_prog->create, &f_boundary_prog->release, + &f_boundary_prog->get_copyright_notice, &f_boundary_prog->get_license_short, + &f_boundary_prog->get_license_text)); *(void**)&f_boundary_prog->flux = library_get_symbol(f_boundary_prog->lib, "stardis_boundary_flux"); if(!f_boundary_prog->flux) { @@ -1078,29 +1087,10 @@ process_sfc_prog ERR(str_set(&sf_connect_prog->args, *tok_ctx)); } /* get the user-defined functions from the library */ - sf_connect_prog->lib = library_open(lib_name); - if(!sf_connect_prog->lib) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot open library: %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&sf_connect_prog->create - = library_get_symbol(sf_connect_prog->lib, "stardis_create_data"); - if(!sf_connect_prog->create) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_create_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&sf_connect_prog->release - = library_get_symbol(sf_connect_prog->lib, "stardis_release_data"); - if(!sf_connect_prog->release) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_release_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } + ERR(get_prog_common(lib_name, stardis->logger, &sf_connect_prog->lib, + &sf_connect_prog->create, &sf_connect_prog->release, + &sf_connect_prog->get_copyright_notice, &sf_connect_prog->get_license_short, + &sf_connect_prog->get_license_text)); *(void**)&sf_connect_prog->ref_temp = library_get_symbol(sf_connect_prog->lib, "stardis_reference_temperature"); if(!sf_connect_prog->ref_temp) { @@ -1278,29 +1268,10 @@ process_ssc_prog ERR(str_set(&ss_connect_prog->args, *tok_ctx)); } /* get the user-defined functions from the library */ - ss_connect_prog->lib = library_open(lib_name); - if(!ss_connect_prog->lib) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot open library: %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&ss_connect_prog->create - = library_get_symbol(ss_connect_prog->lib, "stardis_create_data"); - if(!ss_connect_prog->create) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_create_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&ss_connect_prog->release - = library_get_symbol(ss_connect_prog->lib, "stardis_release_data"); - if(!ss_connect_prog->release) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_release_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } + ERR(get_prog_common(lib_name, stardis->logger, &ss_connect_prog->lib, + &ss_connect_prog->create, &ss_connect_prog->release, + &ss_connect_prog->get_copyright_notice, &ss_connect_prog->get_license_short, + &ss_connect_prog->get_license_text)); *(void**)&ss_connect_prog->tcr = library_get_symbol(ss_connect_prog->lib, "stardis_thermal_contact_resistance"); if(!ss_connect_prog->tcr) { @@ -1570,29 +1541,10 @@ process_solid_prog ERR(str_set(&solid_prog->args, *tok_ctx)); } /* get the user-defined functions from the library */ - solid_prog->lib = library_open(lib_name); - if(!solid_prog->lib) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot open library: %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&solid_prog->create - = library_get_symbol(solid_prog->lib, "stardis_create_data"); - if(!solid_prog->create) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_create_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&solid_prog->release - = library_get_symbol(solid_prog->lib, "stardis_release_data"); - if(!solid_prog->release) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_release_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } + ERR(get_prog_common(lib_name, stardis->logger, &solid_prog->lib, + &solid_prog->create, &solid_prog->release, + &solid_prog->get_copyright_notice, &solid_prog->get_license_short, + &solid_prog->get_license_text)); *(void**)&solid_prog->lambda = library_get_symbol(solid_prog->lib, "stardis_conductivity"); if(!solid_prog->lambda) { @@ -1810,29 +1762,10 @@ process_fluid_prog ERR(str_set(&fluid_prog->args, *tok_ctx)); } /* get the user-defined functions from the library */ - fluid_prog->lib = library_open(lib_name); - if(!fluid_prog->lib) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot open library: %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&fluid_prog->create - = library_get_symbol(fluid_prog->lib, "stardis_create_data"); - if(!fluid_prog->create) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_create_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } - *(void**)&fluid_prog->release - = library_get_symbol(fluid_prog->lib, "stardis_release_data"); - if(!fluid_prog->release) { - logger_print(stardis->logger, LOG_ERROR, - "Cannot find function 'stardis_release_data' in lib %s\n", lib_name); - res = RES_BAD_ARG; - goto error; - } + ERR(get_prog_common(lib_name, stardis->logger, &fluid_prog->lib, + &fluid_prog->create, &fluid_prog->release, + &fluid_prog->get_copyright_notice, &fluid_prog->get_license_short, + &fluid_prog->get_license_text)); *(void**)&fluid_prog->rho = library_get_symbol(fluid_prog->lib, "stardis_volumic_mass"); if(!fluid_prog->rho) { diff --git a/src/stardis-prog.h b/src/stardis-prog.h @@ -68,6 +68,21 @@ extern void stardis_release_data (void* data); +/* Get the copyright notice */ +const char* +get_copyright_notice + (void*); + +/* Get short (name and link to?) version of the license */ +const char* +get_license_short + (void*); + +/* Get full license text */ +const char* +get_license_text + (void*); + /**********************************************/ /* Mandatory functions for a programmed solid */ /**********************************************/ diff --git a/src/stardis-sfconnect-prog.h b/src/stardis-sfconnect-prog.h @@ -39,6 +39,9 @@ struct solid_fluid_connect_prog { void* lib; void* (*create)(char*); void (*release)(void*); + const char* (*get_copyright_notice)(void*); + const char* (*get_license_short)(void*); + const char* (*get_license_text)(void*); double (*ref_temp)(const struct stardis_interface_fragment*, void*); double (*emissivity)(const struct stardis_interface_fragment*, void*); double (*alpha)(const struct stardis_interface_fragment*, void*); diff --git a/src/stardis-solid-prog.h b/src/stardis-solid-prog.h @@ -39,6 +39,9 @@ struct solid_prog { void* lib; void* (*create)(char*); void (*release)(void*); + const char* (*get_copyright_notice)(void*); + const char* (*get_license_short)(void*); + const char* (*get_license_text)(void*); double (*lambda)(const struct stardis_vertex*, void*); double (*rho)(const struct stardis_vertex*, void*); double (*cp)(const struct stardis_vertex*, void*); diff --git a/src/stardis-ssconnect-prog.h b/src/stardis-ssconnect-prog.h @@ -36,6 +36,9 @@ struct solid_solid_connect_prog { void* lib; void* (*create)(char*); void (*release)(void*); + const char* (*get_copyright_notice)(void*); + const char* (*get_license_short)(void*); + const char* (*get_license_text)(void*); double (*tcr)(const struct stardis_interface_fragment*, void*); unsigned connection_id; }; diff --git a/src/stardis-tbound-prog.h b/src/stardis-tbound-prog.h @@ -35,6 +35,9 @@ struct t_boundary_prog { void* lib; void* (*create)(char*); void (*release)(void*); + const char* (*get_copyright_notice)(void*); + const char* (*get_license_short)(void*); + const char* (*get_license_text)(void*); double (*temperature)(const struct stardis_interface_fragment*, void*); double* (*t_range)(void*, double trange[2]); unsigned mat_id;