solstice

Compute collected power and efficiencies of a solar plant
git clone git://git.meso-star.com/solstice.git
Log | Files | Refs | README | LICENSE

test_solparser8.c (6161B)


      1 /* Copyright (C) 2018-2026 |Meso|Star> (contact@meso-star.com)
      2  * Copyright (C) 2016-2018 CNRS
      3  *
      4  * This program is free software: you can redistribute it and/or modify
      5  * it under the terms of the GNU General Public License as published by
      6  * the Free Software Foundation, either version 3 of the License, or
      7  * (at your option) any later version.
      8  *
      9  * This program is distributed in the hope that it will be useful,
     10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     12  * GNU General Public License for more details.
     13  *
     14  * You should have received a copy of the GNU General Public License
     15  * along with this program. If not, see <http://www.gnu.org/licenses/>. */
     16 
     17 #include "solparser.h"
     18 #include "solparser_sun.h"
     19 #include "test_solstice_utils.h"
     20 
     21 int
     22 main(int argc, char** argv)
     23 {
     24   struct mem_allocator allocator;
     25   struct solparser* parser;
     26   struct solparser_entity_iterator it, end;
     27   struct solparser_entity_id entity_id;
     28   struct solparser_object_id obj_id;
     29   const struct solparser_entity* entity;
     30   const struct solparser_geometry* geom;
     31   const struct solparser_medium* vacuum;
     32   const struct solparser_medium* glass;
     33   const struct solparser_material_double_sided* mtl2;
     34   const struct solparser_material* mtl;
     35   const struct solparser_material_dielectric* dielec;
     36   const struct solparser_object* obj;
     37   const struct solparser_shape* shape;
     38   const struct solparser_spectrum* spectrum;
     39   FILE* stream;
     40   (void)argc, (void)argv;
     41 
     42   CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK);
     43   CHK(solparser_create(&allocator, &parser) == RES_OK);
     44 
     45   stream = tmpfile();
     46   CHK(stream != NULL);
     47 
     48   fprintf(stream, "- sun: { dni: 1, spectrum: [{wavelength: 1, data: 1 }] }\n");
     49   fprintf(stream, "- medium: &vacuum {refractive_index: 1, extinction: 0}\n");
     50   fprintf(stream, "- medium: &glass \n");
     51   fprintf(stream, "    refractive_index: 1.5\n");
     52   fprintf(stream, "    extinction: \n");
     53   fprintf(stream, "    - {wavelength: 1, data: 21}\n");
     54   fprintf(stream, "    - {wavelength: 2, data: 22}\n");
     55   fprintf(stream, "    - {wavelength: 3, data: 23}\n");
     56   fprintf(stream, "    - {wavelength: 4, data: 24}\n");
     57   fprintf(stream, "    - {wavelength: 5, data: 25}\n");
     58   fprintf(stream, "    - {wavelength: 6, data: 26}\n");
     59   fprintf(stream, "- entity:\n");
     60   fprintf(stream, "    name: test\n");
     61   fprintf(stream, "    primary: 0\n");
     62   fprintf(stream, "    geometry:\n");
     63   fprintf(stream, "      - sphere: { radius: 1 }\n");
     64   fprintf(stream, "        material:\n");
     65   fprintf(stream, "          front:\n");
     66   fprintf(stream, "            dielectric:\n");
     67   fprintf(stream, "              medium_i: *vacuum\n");
     68   fprintf(stream, "              medium_t: *glass\n");
     69   fprintf(stream, "          back:\n");
     70   fprintf(stream, "            dielectric:\n");
     71   fprintf(stream, "              medium_i: *glass\n");
     72   fprintf(stream, "              medium_t: *vacuum\n");
     73   rewind(stream);
     74 
     75   CHK(solparser_setup(parser, NULL, stream) == RES_OK);
     76   CHK(solparser_load(parser) == RES_OK);
     77 
     78   solparser_entity_iterator_begin(parser, &it);
     79   solparser_entity_iterator_end(parser, &end);
     80   CHK(solparser_entity_iterator_eq(&it, &end) == 0);
     81 
     82   entity_id = solparser_entity_iterator_get(&it);
     83   entity = solparser_get_entity(parser, entity_id);
     84 
     85   CHK(strcmp("test",  str_cget(&entity->name)) == 0);
     86   CHK(solparser_entity_get_children_count(entity) == 0);
     87   CHK(entity->type == SOLPARSER_ENTITY_GEOMETRY);
     88   geom = solparser_get_geometry(parser, entity->data.geometry);
     89   CHK(solparser_geometry_get_objects_count(geom) == 1);
     90   obj_id = solparser_geometry_get_object(geom, 0);
     91   obj = solparser_get_object(parser, obj_id);
     92   shape = solparser_get_shape(parser, obj->shape);
     93   CHK(shape->type == SOLPARSER_SHAPE_SPHERE);
     94   mtl2 = solparser_get_material_double_sided(parser, obj->mtl2);
     95   CHK(mtl2->front.i != mtl2->back.i);
     96 
     97   mtl = solparser_get_material(parser, mtl2->front);
     98   CHK(mtl->type == SOLPARSER_MATERIAL_DIELECTRIC);
     99   dielec = solparser_get_material_dielectric(parser, mtl->data.dielectric);
    100   vacuum = solparser_get_medium(parser, dielec->medium_i);
    101   CHK(vacuum->refractive_index.type == SOLPARSER_MTL_DATA_REAL);
    102   CHK(vacuum->refractive_index.value.real == 1);
    103   CHK(vacuum->extinction.type == SOLPARSER_MTL_DATA_REAL);
    104   CHK(vacuum->extinction.value.real == 0);
    105 
    106   glass = solparser_get_medium(parser, dielec->medium_t);
    107   CHK(glass->refractive_index.type == SOLPARSER_MTL_DATA_REAL);
    108   CHK(glass->refractive_index.value.real == 1.5);
    109   CHK(glass->extinction.type == SOLPARSER_MTL_DATA_SPECTRUM);
    110   spectrum = solparser_get_spectrum(parser, glass->extinction.value.spectrum);
    111   CHK(darray_spectrum_data_size_get(&spectrum->data) == 6);
    112   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[0].wavelength == 1);
    113   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[1].wavelength == 2);
    114   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[2].wavelength == 3);
    115   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[3].wavelength == 4);
    116   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[4].wavelength == 5);
    117   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[5].wavelength == 6);
    118   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[0].data == 21);
    119   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[1].data == 22);
    120   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[2].data == 23);
    121   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[3].data == 24);
    122   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[4].data == 25);
    123   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[5].data == 26);
    124 
    125   mtl = solparser_get_material(parser, mtl2->back);
    126   CHK(mtl->type == SOLPARSER_MATERIAL_DIELECTRIC);
    127   dielec = solparser_get_material_dielectric(parser, mtl->data.dielectric);
    128   CHK(solparser_get_medium(parser, dielec->medium_i) == glass);
    129   CHK(solparser_get_medium(parser, dielec->medium_t) == vacuum);
    130 
    131   CHK(solparser_load(parser) == RES_BAD_OP);
    132   solparser_ref_put(parser);
    133 
    134   fclose(stream);
    135 
    136   check_memory_allocator(&allocator);
    137   mem_shutdown_proxy_allocator(&allocator);
    138   CHK(mem_allocated_size() == 0);
    139   return 0;
    140 }
    141