stardis

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

commit d2b920a1e8fa81d12c68d5bc9b209a513c8e869a
parent 8788023a8eab71940fef670a4998cc8b0692fa72
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Mon, 10 Jan 2022 15:33:59 +0100

Add user function's declarations in the public header file

Make use of this file in stardis code and fix calls to user functions to conform to their declarations

Diffstat:
Msrc/stardis-compute.c | 4++--
Msrc/stardis-fbound-prog.h | 9++-------
Msrc/stardis-fluid-prog.c | 15++++++++++++---
Msrc/stardis-fluid-prog.h | 10++++------
Msrc/stardis-hbound-prog.h | 19+++++++------------
Msrc/stardis-intface.c | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Msrc/stardis-intface.h | 16++++++++--------
Msrc/stardis-prog.h | 90++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
Msrc/stardis-sfconnect-prog.h | 12+++++-------
Msrc/stardis-solid-prog.c | 30++++++++++++++++++++++++------
Msrc/stardis-solid-prog.h | 16+++++++---------
Msrc/stardis-ssconnect-prog.h | 6++----
Msrc/stardis-tbound-prog.h | 12++----------
13 files changed, 216 insertions(+), 89 deletions(-)

diff --git a/src/stardis-compute.c b/src/stardis-compute.c @@ -262,7 +262,7 @@ check_probe_conform_to_type pppp = ""; } else { struct solid_prog* solid_prog = filter_ctx.desc->d.solid_prog; - struct sdis_rwalk_vertex vtx; + struct stardis_vertex vtx; ASSERT(filter_ctx.desc->type == DESC_MAT_SOLID_PROG); d3_set(vtx.P, pos); vtx.time = time; @@ -367,7 +367,7 @@ check_probe_conform_to_type delta = solid->delta; } else { struct solid_prog* solid_prog = filter_ctx.desc->d.solid_prog; - struct sdis_rwalk_vertex vtx; + struct stardis_vertex vtx; ASSERT(filter_ctx.desc->type == DESC_MAT_SOLID_PROG); d3_set(vtx.P, pos); vtx.time = time; diff --git a/src/stardis-fbound-prog.h b/src/stardis-fbound-prog.h @@ -26,10 +26,6 @@ struct mem_allocator; struct fluid_prog; struct description; -struct sdis_interface_fragment; -struct sdis_rwalk_vertex; -struct sdis_data; - /******************************************************************************* * F boundary prog data ******************************************************************************/ @@ -40,10 +36,9 @@ struct f_boundary_prog { struct str args; /* lib handle and function ptrs */ void* lib; - void* (*create)(); - enum stardis_return_code (*init)(void*, const char*); + void* (*create)(char*); void (*release)(void*); - double (*flux)(const struct sdis_interface_fragment*, void*); + double (*flux)(const struct stardis_interface_fragment*, void*); unsigned mat_id; }; diff --git a/src/stardis-fluid-prog.c b/src/stardis-fluid-prog.c @@ -35,7 +35,10 @@ fluid_prog_get_calorific_capacity struct sdis_data* data) { const struct fluid_prog* const* fluid_props = sdis_data_cget(data); - return (*fluid_props)->cp(vtx, (*fluid_props)->prog_data); + struct stardis_vertex v; + d3_set(v.P, vtx->P); + v.time = vtx->time; + return (*fluid_props)->cp(&v, (*fluid_props)->prog_data); } static double @@ -44,7 +47,10 @@ fluid_prog_get_volumic_mass struct sdis_data* data) { const struct fluid_prog* const* fluid_props = sdis_data_cget(data); - return (*fluid_props)->rho(vtx, (*fluid_props)->prog_data); + struct stardis_vertex v; + d3_set(v.P, vtx->P); + v.time = vtx->time; + return (*fluid_props)->rho(&v, (*fluid_props)->prog_data); } static double @@ -53,7 +59,10 @@ fluid_prog_get_temperature struct sdis_data* data) { const struct fluid_prog* const* fluid_props = sdis_data_cget(data); - return (*fluid_props)->temp(vtx, (*fluid_props)->prog_data); + struct stardis_vertex v; + d3_set(v.P, vtx->P); + v.time = vtx->time; + return (*fluid_props)->temp(&v, (*fluid_props)->prog_data); } /******************************************************************************* diff --git a/src/stardis-fluid-prog.h b/src/stardis-fluid-prog.h @@ -23,7 +23,6 @@ struct stardis; struct mem_allocator; -struct sdis_rwalk_vertex; /******************************************************************************* * Fluid prog data @@ -38,12 +37,11 @@ struct fluid_prog { unsigned fluid_id; /* lib handle and function ptrs */ void* lib; - void* (*create)(); - enum stardis_return_code (*init)(void*, const char*); + void* (*create)(char*); void (*release)(void*); - double (*rho)(const struct sdis_rwalk_vertex*, void*); - double (*cp)(const struct sdis_rwalk_vertex*, void*); - double (*temp)(const struct sdis_rwalk_vertex*, void*); + double (*rho)(const struct stardis_vertex*, void*); + double (*cp)(const struct stardis_vertex*, void*); + double (*temp)(const struct stardis_vertex*, void*); double* (*t_range)(void*, double trange[2]); }; diff --git a/src/stardis-hbound-prog.h b/src/stardis-hbound-prog.h @@ -26,10 +26,6 @@ struct mem_allocator; struct fluid_prog; struct description; -struct sdis_interface_fragment; -struct sdis_rwalk_vertex; -struct sdis_data; - /******************************************************************************* * H boundary prog data ******************************************************************************/ @@ -40,19 +36,18 @@ struct h_boundary_prog { struct str args; /* lib handle and function ptrs */ void* lib; - void* (*create)(); - enum stardis_return_code (*init)(void*, const char*); + void* (*create)(char*); void (*release)(void*); - double (*ref_temp)(const struct sdis_interface_fragment*, void*); - double (*emissivity)(const struct sdis_interface_fragment*, void*); - double (*alpha)(const struct sdis_interface_fragment*, void*); - double (*hc)(const struct sdis_interface_fragment*, 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*); + double (*hc)(const struct stardis_interface_fragment*, void*); double (*hmax)(void*); double* (*t_range)(void*, double trange[2]); /* for h for solid */ - double (*boundary_temp)(const struct sdis_interface_fragment*, void*); + double (*boundary_temp)(const struct stardis_interface_fragment*, void*); /* for h for fluid */ - double (*fluid_temp)(const struct sdis_rwalk_vertex*, void*); + double (*fluid_temp)(const struct stardis_vertex*, void*); unsigned mat_id; struct fluid_prog* possible_external_fluid; /* if H for solid */ }; diff --git a/src/stardis-intface.c b/src/stardis-intface.c @@ -23,6 +23,7 @@ #include "stardis-fbound-prog.h" #include "stardis-ssconnect-prog.h" #include "stardis-sfconnect-prog.h" +#include "stardis-prog.h" #include <sdis.h> @@ -102,7 +103,7 @@ interface_get_tcr static double emissivity_1 - (const struct sdis_interface_fragment* frag, + (const struct stardis_interface_fragment* frag, void* data) { (void)frag, (void)data; @@ -115,7 +116,14 @@ intface_prog_get_temp struct sdis_data* data) { const struct intface* interface_props = sdis_data_cget(data); - return interface_props->get_temp(frag, interface_props->prog_data); + struct stardis_interface_fragment f; + d3_set(f.P, frag->P); + d3_set(f.Ng, frag->Ng); + d3_set(f.uv, frag->uv); + f.time = frag->time; + ASSERT(frag->side == SDIS_FRONT || frag->side == SDIS_BACK); + f.side = (frag->side == SDIS_FRONT) ? FRONT : BACK; + return interface_props->get_temp(&f, interface_props->prog_data); } static double @@ -124,7 +132,14 @@ intface_prog_get_flux struct sdis_data* data) { const struct intface* interface_props = sdis_data_cget(data); - return interface_props->get_flux(frag, interface_props->prog_data); + struct stardis_interface_fragment f; + d3_set(f.P, frag->P); + d3_set(f.Ng, frag->Ng); + d3_set(f.uv, frag->uv); + f.time = frag->time; + ASSERT(frag->side == SDIS_FRONT || frag->side == SDIS_BACK); + f.side = (frag->side == SDIS_FRONT) ? FRONT : BACK; + return interface_props->get_flux(&f, interface_props->prog_data); } static double @@ -133,7 +148,14 @@ intface_prog_get_hc struct sdis_data* data) { const struct intface* interface_props = sdis_data_cget(data); - return interface_props->get_hc(frag, interface_props->prog_data); + struct stardis_interface_fragment f; + d3_set(f.P, frag->P); + d3_set(f.Ng, frag->Ng); + d3_set(f.uv, frag->uv); + f.time = frag->time; + ASSERT(frag->side == SDIS_FRONT || frag->side == SDIS_BACK); + f.side = (frag->side == SDIS_FRONT) ? FRONT : BACK; + return interface_props->get_hc(&f, interface_props->prog_data); } static double @@ -142,7 +164,14 @@ intface_prog_get_emissivity struct sdis_data* data) { const struct intface* interface_props = sdis_data_cget(data); - return interface_props->get_emissivity(frag, interface_props->prog_data); + struct stardis_interface_fragment f; + d3_set(f.P, frag->P); + d3_set(f.Ng, frag->Ng); + d3_set(f.uv, frag->uv); + f.time = frag->time; + ASSERT(frag->side == SDIS_FRONT || frag->side == SDIS_BACK); + f.side = (frag->side == SDIS_FRONT) ? FRONT : BACK; + return interface_props->get_emissivity(&f, interface_props->prog_data); } static double @@ -151,7 +180,14 @@ intface_prog_get_alpha struct sdis_data* data) { const struct intface* interface_props = sdis_data_cget(data); - return interface_props->get_alpha(frag, interface_props->prog_data); + struct stardis_interface_fragment f; + d3_set(f.P, frag->P); + d3_set(f.Ng, frag->Ng); + d3_set(f.uv, frag->uv); + f.time = frag->time; + ASSERT(frag->side == SDIS_FRONT || frag->side == SDIS_BACK); + f.side = (frag->side == SDIS_FRONT) ? FRONT : BACK; + return interface_props->get_alpha(&f, interface_props->prog_data); } static double @@ -160,7 +196,14 @@ intface_prog_get_ref_temp struct sdis_data* data) { const struct intface* interface_props = sdis_data_cget(data); - return interface_props->get_ref_temp(frag, interface_props->prog_data); + struct stardis_interface_fragment f; + d3_set(f.P, frag->P); + d3_set(f.Ng, frag->Ng); + d3_set(f.uv, frag->uv); + f.time = frag->time; + ASSERT(frag->side == SDIS_FRONT || frag->side == SDIS_BACK); + f.side = (frag->side == SDIS_FRONT) ? FRONT : BACK; + return interface_props->get_ref_temp(&f, interface_props->prog_data); } static double @@ -169,7 +212,14 @@ intface_prog_get_tcr struct sdis_data* data) { const struct intface* interface_props = sdis_data_cget(data); - return interface_props->get_tcr(frag, interface_props->prog_data); + struct stardis_interface_fragment f; + d3_set(f.P, frag->P); + d3_set(f.Ng, frag->Ng); + d3_set(f.uv, frag->uv); + f.time = frag->time; + ASSERT(frag->side == SDIS_FRONT || frag->side == SDIS_BACK); + f.side = (frag->side == SDIS_FRONT) ? FRONT : BACK; + return interface_props->get_tcr(&f, interface_props->prog_data); } /******************************************************************************* diff --git a/src/stardis-intface.h b/src/stardis-intface.h @@ -21,20 +21,20 @@ #include <limits.h> struct stardis; -struct sdis_interface_fragment; +struct stardis_interface_fragment; /******************************************************************************* * Interface data ******************************************************************************/ struct intface { /* programmed interfaces */ - double (*get_temp)(const struct sdis_interface_fragment*, void*); - double (*get_flux)(const struct sdis_interface_fragment*, void*); - double (*get_hc)(const struct sdis_interface_fragment*, void*); - double (*get_emissivity)(const struct sdis_interface_fragment*, void*); - double (*get_alpha)(const struct sdis_interface_fragment*, void*); - double (*get_ref_temp)(const struct sdis_interface_fragment*, void*); - double (*get_tcr)(const struct sdis_interface_fragment*, void*); + double (*get_temp)(const struct stardis_interface_fragment*, void*); + double (*get_flux)(const struct stardis_interface_fragment*, void*); + double (*get_hc)(const struct stardis_interface_fragment*, void*); + double (*get_emissivity)(const struct stardis_interface_fragment*, void*); + double (*get_alpha)(const struct stardis_interface_fragment*, void*); + double (*get_ref_temp)(const struct stardis_interface_fragment*, void*); + double (*get_tcr)(const struct stardis_interface_fragment*, void*); void* prog_data; /* fluid - solid */ double hc; diff --git a/src/stardis-prog.h b/src/stardis-prog.h @@ -1,4 +1,3 @@ - /* Copyright (C) 2018-2021 |Meso|Star> (contact@meso-star.com) * * This program is free software; you can redistribute it and/or @@ -17,12 +16,7 @@ #ifndef STARDIS_PROG_H__ #define STARDIS_PROG_H__ -enum stardis_return_code { - STARDIS_SUCCESS, - STARDIS_FAILURE -}; - -struct stardis_walk_vertex { +struct stardis_vertex { double P[3]; /* World space position */ double time; /* "Time" of the vertex */ }; @@ -40,5 +34,87 @@ struct stardis_interface_fragment { enum stardis_side side; }; +extern void* +stardis_create_data + (char* args); + +extern void +stardis_release_data + (void* data); + +extern double +stardis_calorific_capacity + (const struct stardis_vertex* vtx, + void* data); + +extern double +stardis_volumic_mass + (const struct stardis_vertex* vtx, + void* data); + +extern double +stardis_emissivity + (const struct stardis_interface_fragment* frag, + void* data); + +extern double +stardis_specular_fraction + (const struct stardis_interface_fragment* frag, + void* data); + +extern double +stardis_conductivity + (const struct stardis_vertex* vtx, + void* data); + +extern double +stardis_delta_solid + (const struct stardis_vertex* vtx, + void* data); + +extern double +stardis_volumic_power + (const struct stardis_vertex* vtx, + void* data); + +extern double +stardis_boundary_temperature + (const struct stardis_interface_fragment* frag, + void* data); + +extern double +stardis_boundary_flux + (const struct stardis_interface_fragment* frag, + void* data); + +extern double +stardis_medium_temperature + (const struct stardis_vertex* vtx, + void* data); + +extern double +stardis_convection_coefficient + (const struct stardis_interface_fragment* frag, + void* data); + +extern double +stardis_reference_temperature + (const struct stardis_interface_fragment* frag, + void* data); + +extern double +stardis_thermal_contact_resistance + (const struct stardis_interface_fragment* frag, + void* data); + +extern double +stardis_max_convection_coefficient + (void* data); + +extern double* +stardis_t_range + (void* data, + double range[2]); + #endif diff --git a/src/stardis-sfconnect-prog.h b/src/stardis-sfconnect-prog.h @@ -23,7 +23,6 @@ struct stardis; struct mem_allocator; -struct sdis_rwalk_vertex; /******************************************************************************* * Solid-Fluid prog data @@ -38,13 +37,12 @@ struct solid_fluid_connect_prog { unsigned connection_id; /* lib handle and function ptrs */ void* lib; - void* (*create)(); - enum stardis_return_code (*init)(void*, const char*); + void* (*create)(char*); void (*release)(void*); - double (*ref_temp)(const struct sdis_interface_fragment*, void*); - double (*emissivity)(const struct sdis_interface_fragment*, void*); - double (*alpha)(const struct sdis_interface_fragment*, void*); - double (*hc)(const struct sdis_interface_fragment*, 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*); + double (*hc)(const struct stardis_interface_fragment*, void*); double (*hmax)(void*); double* (*t_range)(void*, double trange[2]); }; diff --git a/src/stardis-solid-prog.c b/src/stardis-solid-prog.c @@ -34,7 +34,10 @@ solid_prog_get_thermal_conductivity struct sdis_data* data) { const struct solid_prog* const* solid_props = sdis_data_cget(data); - return (*solid_props)->lambda(vtx, (*solid_props)->prog_data); + struct stardis_vertex v; + d3_set(v.P, vtx->P); + v.time = vtx->time; + return (*solid_props)->lambda(&v, (*solid_props)->prog_data); } static double @@ -43,7 +46,10 @@ solid_prog_get_volumic_mass struct sdis_data* data) { const struct solid_prog* const* solid_props = sdis_data_cget(data); - return (*solid_props)->rho(vtx, (*solid_props)->prog_data); + struct stardis_vertex v; + d3_set(v.P, vtx->P); + v.time = vtx->time; + return (*solid_props)->rho(&v, (*solid_props)->prog_data); } static double @@ -52,7 +58,10 @@ solid_prog_get_calorific_capacity struct sdis_data* data) { const struct solid_prog* const* solid_props = sdis_data_cget(data); - return (*solid_props)->cp(vtx, (*solid_props)->prog_data); + struct stardis_vertex v; + d3_set(v.P, vtx->P); + v.time = vtx->time; + return (*solid_props)->cp(&v, (*solid_props)->prog_data); } static double @@ -61,7 +70,10 @@ solid_prog_get_delta_solid struct sdis_data* data) { const struct solid_prog* const* solid_props = sdis_data_cget(data); - return (*solid_props)->delta(vtx, (*solid_props)->prog_data); + struct stardis_vertex v; + d3_set(v.P, vtx->P); + v.time = vtx->time; + return (*solid_props)->delta(&v, (*solid_props)->prog_data); } static double @@ -70,7 +82,10 @@ solid_prog_get_volumic_power struct sdis_data* data) { const struct solid_prog* const* solid_props = sdis_data_cget(data); - return (*solid_props)->vpower(vtx, (*solid_props)->prog_data); + struct stardis_vertex v; + d3_set(v.P, vtx->P); + v.time = vtx->time; + return (*solid_props)->vpower(&v, (*solid_props)->prog_data); } static double @@ -79,7 +94,10 @@ solid_prog_get_temperature struct sdis_data* data) { const struct solid_prog* const* solid_props = sdis_data_cget(data); - return (*solid_props)->temp(vtx, (*solid_props)->prog_data); + struct stardis_vertex v; + d3_set(v.P, vtx->P); + v.time = vtx->time; + return (*solid_props)->temp(&v, (*solid_props)->prog_data); } /******************************************************************************* diff --git a/src/stardis-solid-prog.h b/src/stardis-solid-prog.h @@ -22,7 +22,6 @@ #include "stardis-prog.h" struct stardis; -struct sdis_rwalk_vertex; struct mem_allocator; /******************************************************************************* @@ -38,15 +37,14 @@ struct solid_prog { unsigned solid_id; /* lib handle and function ptrs */ void* lib; - void* (*create)(); - enum stardis_return_code (*init)(void*, const char*); + void* (*create)(char*); void (*release)(void*); - double (*lambda)(const struct sdis_rwalk_vertex*, void*); - double (*rho)(const struct sdis_rwalk_vertex*, void*); - double (*cp)(const struct sdis_rwalk_vertex*, void*); - double (*delta)(const struct sdis_rwalk_vertex*, void*); - double (*temp)(const struct sdis_rwalk_vertex*, void*); - double (*vpower)(const struct sdis_rwalk_vertex*, void*); + double (*lambda)(const struct stardis_vertex*, void*); + double (*rho)(const struct stardis_vertex*, void*); + double (*cp)(const struct stardis_vertex*, void*); + double (*delta)(const struct stardis_vertex*, void*); + double (*temp)(const struct stardis_vertex*, void*); + double (*vpower)(const struct stardis_vertex*, void*); double* (*t_range)(void*, double trange[2]); }; diff --git a/src/stardis-ssconnect-prog.h b/src/stardis-ssconnect-prog.h @@ -23,7 +23,6 @@ struct stardis; struct mem_allocator; -struct sdis_rwalk_vertex; /******************************************************************************* * Solid-Solid prog data @@ -35,10 +34,9 @@ struct solid_solid_connect_prog { struct str args; /* lib handle and function ptrs */ void* lib; - double (*tcr)(const struct sdis_interface_fragment*, void*); - void* (*create)(); - enum stardis_return_code (*init)(void*, const char*); + void* (*create)(char*); void (*release)(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 @@ -21,14 +21,7 @@ #include "stardis-prog.h" -struct stardis; struct mem_allocator; -struct fluid_prog; -struct description; - -struct sdis_interface_fragment; -struct sdis_rwalk_vertex; -struct sdis_data; /******************************************************************************* * T boundary prog data @@ -40,10 +33,9 @@ struct t_boundary_prog { struct str args; /* lib handle and function ptrs */ void* lib; - void* (*create)(); - enum stardis_return_code (*init)(void*, const char*); + void* (*create)(char*); void (*release)(void*); - double (*temperature)(const struct sdis_interface_fragment*, void*); + double (*temperature)(const struct stardis_interface_fragment*, void*); double* (*t_range)(void*, double trange[2]); unsigned mat_id; };