stardis-solver

Solve coupled heat transfers
git clone git://git.meso-star.fr/stardis-solver.git
Log | Files | Refs | README | LICENSE

commit 6f76e531cbc5113f3228755db81528096dfffbd0
parent c19eb02ef78e13b4b5290a2ce4dd48c50fb318d0
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Mon, 18 Dec 2017 10:47:33 +0100

Test the interface API

Diffstat:
Mcmake/CMakeLists.txt | 1+
Msrc/sdis.h | 2+-
Msrc/sdis_interface.c | 17+++++++++++++++--
Asrc/test_sdis_interface.c | 103+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/test_sdis_utils.h | 37+++++++++++++++++++++++++++----------
5 files changed, 147 insertions(+), 13 deletions(-)

diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt @@ -101,6 +101,7 @@ if(NOT NO_TEST) new_test(test_sdis_data) new_test(test_sdis_device) + new_test(test_sdis_interface) new_test(test_sdis_medium) endif() diff --git a/src/sdis.h b/src/sdis.h @@ -100,7 +100,7 @@ typedef void /* Functor type to retrieve the interface properties. */ typedef void (*sdis_interface_getter_T) - (struct sdis_device dev, + (struct sdis_device* dev, struct sdis_data* data, const struct sdis_interface_fragment* frag, double* val); diff --git a/src/sdis_interface.c b/src/sdis_interface.c @@ -37,12 +37,25 @@ check_interface_shader const struct sdis_medium* front, const struct sdis_medium* back) { + enum sdis_medium_type type0; + enum sdis_medium_type type1; ASSERT(shader && front && back); - if(sdis_medium_get_type(front) != sdis_medium_get_type(back) - && shader->convection_coef == NULL) { /* Fluid<->solid interface */ + type0 = sdis_medium_get_type(front); + type1 = sdis_medium_get_type(back); + + /* Fluid<->solid interface */ + if(type0 != type1 && shader->convection_coef == NULL) { return 0; } + + /* Solid<->solid interface */ + if(type0 == SDIS_MEDIUM_SOLID + && type1 == SDIS_MEDIUM_SOLID + && shader->convection_coef) { + return 0; + } + return 1; } diff --git a/src/test_sdis_interface.c b/src/test_sdis_interface.c @@ -0,0 +1,103 @@ +/* Copyright (C) |Meso|Star> 2016-2017 (contact@meso-star.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "sdis.h" +#include "test_sdis_utils.h" + +int +main(int argc, char** argv) +{ + struct mem_allocator allocator; + struct sdis_device* dev = NULL; + struct sdis_medium* fluid = NULL; + struct sdis_medium* solid = NULL; + struct sdis_interface* interface = NULL; + struct sdis_fluid_shader fluid_shader = DUMMY_FLUID_SHADER; + struct sdis_solid_shader solid_shader = DUMMY_SOLID_SHADER; + struct sdis_interface_shader shader = DUMMY_INTERFACE_SHADER; + (void)argc, (void)argv; + + CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK); + CHK(sdis_device_create + (NULL, &allocator, SDIS_NTHREADS_DEFAULT, 0, &dev) == RES_OK); + + CHK(sdis_fluid_create(dev, &fluid_shader, NULL, &fluid) == RES_OK); + CHK(sdis_solid_create(dev, &solid_shader, NULL, &solid) == RES_OK); + + #define CREATE sdis_interface_create + CHK(CREATE(NULL, NULL, NULL, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(dev, NULL, NULL, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(NULL, solid, NULL, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(dev, solid, NULL, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(NULL, NULL, fluid, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(dev, NULL, fluid, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(NULL, solid, fluid, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(dev, solid, fluid, NULL, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(NULL, NULL, NULL, &shader, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(dev, NULL, NULL, &shader, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(NULL, solid, NULL, &shader, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(dev, solid, NULL, &shader, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(NULL, NULL, fluid, &shader, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(dev, NULL, fluid, &shader, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(NULL, solid, fluid, &shader, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(dev, solid, fluid, &shader, NULL, NULL) == RES_BAD_ARG); + CHK(CREATE(NULL, NULL, NULL, NULL, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(dev, NULL, NULL, NULL, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(NULL, solid, NULL, NULL, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(dev, solid, NULL, NULL, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(NULL, NULL, fluid, NULL, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(dev, NULL, fluid, NULL, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(NULL, solid, fluid, NULL, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(dev, solid, fluid, NULL, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(NULL, NULL, NULL, &shader, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(dev, NULL, NULL, &shader, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(NULL, solid, NULL, &shader, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(dev, solid, NULL, &shader, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(NULL, NULL, fluid, &shader, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(dev, NULL, fluid, &shader, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(NULL, solid, fluid, &shader, NULL, &interface) == RES_BAD_ARG); + CHK(CREATE(dev, solid, fluid, &shader, NULL, &interface) == RES_OK); + + CHK(sdis_interface_ref_get(NULL) == RES_BAD_ARG); + CHK(sdis_interface_ref_get(interface) == RES_OK); + CHK(sdis_interface_ref_put(NULL) == RES_BAD_ARG); + CHK(sdis_interface_ref_put(interface) == RES_OK); + CHK(sdis_interface_ref_put(interface) == RES_OK); + + CHK(CREATE(dev, solid, solid, &shader, NULL, &interface) == RES_BAD_ARG); + shader.convection_coef = NULL; + CHK(CREATE(dev, solid, solid, &shader, NULL, &interface) == RES_OK); + CHK(sdis_interface_ref_put(interface) == RES_OK); + + shader.temperature = NULL; + CHK(CREATE(dev, solid, solid, &shader, NULL, &interface) == RES_OK); + CHK(sdis_interface_ref_put(interface) == RES_OK); + + CHK(CREATE(dev, solid, fluid, &shader, NULL, &interface) == RES_BAD_ARG); + shader.convection_coef = DUMMY_INTERFACE_SHADER.convection_coef; + CHK(CREATE(dev, solid, fluid, &shader, NULL, &interface) == RES_OK); + CHK(sdis_interface_ref_put(interface) == RES_OK); + #undef CREATE + + CHK(sdis_device_ref_put(dev) == RES_OK); + CHK(sdis_medium_ref_put(fluid) == RES_OK); + CHK(sdis_medium_ref_put(solid) == RES_OK); + + check_memory_allocator(&allocator); + mem_shutdown_proxy_allocator(&allocator); + CHK(mem_allocated_size() == 0); + return 0; +} + diff --git a/src/test_sdis_utils.h b/src/test_sdis_utils.h @@ -20,7 +20,7 @@ #include <stdio.h> static INLINE void -dummy_getter +dummy_medium_getter (struct sdis_device* dev, struct sdis_data* data, const struct sdis_rwalk_vertex* vert, @@ -31,19 +31,36 @@ dummy_getter *val = 1; } +static INLINE void +dummy_interface_getter + (struct sdis_device* dev, + struct sdis_data* data, + const struct sdis_interface_fragment* frag, + double* val) +{ + (void)dev, (void)data; + CHK(val != NULL && frag != NULL); + *val = 1; +} + static const struct sdis_solid_shader DUMMY_SOLID_SHADER = { - dummy_getter, - dummy_getter, - dummy_getter, - dummy_getter, - dummy_getter, - dummy_getter + dummy_medium_getter, + dummy_medium_getter, + dummy_medium_getter, + dummy_medium_getter, + dummy_medium_getter, + dummy_medium_getter }; static const struct sdis_fluid_shader DUMMY_FLUID_SHADER = { - dummy_getter, - dummy_getter, - dummy_getter + dummy_medium_getter, + dummy_medium_getter, + dummy_medium_getter +}; + +static const struct sdis_interface_shader DUMMY_INTERFACE_SHADER = { + dummy_interface_getter, + dummy_interface_getter }; static INLINE void