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:
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;
};