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_solparser7.c (6262B)


      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_material_double_sided* mtl2;
     32   const struct solparser_material* mtl;
     33   const struct solparser_material_thin_dielectric* thin;
     34   const struct solparser_medium* medium;
     35   const struct solparser_object* obj;
     36   const struct solparser_shape* shape;
     37   const struct solparser_spectrum* spectrum;
     38   FILE* stream;
     39   (void)argc, (void)argv;
     40 
     41   CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK);
     42   solparser_create(&allocator, &parser);
     43 
     44   stream = tmpfile();
     45   CHK(stream != NULL);
     46 
     47   fprintf(stream, "- sun: { dni: 1, spectrum: [{wavelength: 1, data: 1 }] }\n");
     48   fprintf(stream, "- entity:\n");
     49   fprintf(stream, "    name: test\n");
     50   fprintf(stream, "    primary: 0\n");
     51   fprintf(stream, "    geometry:\n");
     52   fprintf(stream, "      - sphere: { radius: 1 }\n");
     53   fprintf(stream, "        material:\n");
     54   fprintf(stream, "          thin_dielectric:\n");
     55   fprintf(stream, "            thickness: 0.123\n");
     56   fprintf(stream, "            medium_i: &outside\n");
     57   fprintf(stream, "              refractive_index: 1\n");
     58   fprintf(stream, "              extinction: 0\n");
     59   fprintf(stream, "            medium_t: &inside\n");
     60   fprintf(stream, "              refractive_index: \n");
     61   fprintf(stream, "              - {wavelength: 1.2, data: 2.3}\n");
     62   fprintf(stream, "              - {wavelength: 4.5, data: 6.7}\n");
     63   fprintf(stream, "              - {wavelength: 0.5, data: 0.25}\n");
     64   fprintf(stream, "              extinction:\n");
     65   fprintf(stream, "              - {wavelength: 3, data: 3}\n");
     66   fprintf(stream, "              - {wavelength: 1, data: 1}\n");
     67   fprintf(stream, "              - {wavelength: 5, data: 5}\n");
     68   fprintf(stream, "              - {wavelength: 4, data: 4}\n");
     69   fprintf(stream, "              - {wavelength: 2, data: 2}\n");
     70   rewind(stream);
     71 
     72   CHK(solparser_setup(parser, NULL, stream) == RES_OK);
     73   CHK(solparser_load(parser) == RES_OK);
     74 
     75   solparser_entity_iterator_begin(parser, &it);
     76   solparser_entity_iterator_end(parser, &end);
     77   CHK(solparser_entity_iterator_eq(&it, &end) == 0);
     78 
     79   entity_id = solparser_entity_iterator_get(&it);
     80   entity = solparser_get_entity(parser, entity_id);
     81 
     82   CHK(strcmp("test",  str_cget(&entity->name)) == 0);
     83   CHK(solparser_entity_get_children_count(entity) == 0);
     84   CHK(entity->type == SOLPARSER_ENTITY_GEOMETRY);
     85   geom = solparser_get_geometry(parser, entity->data.geometry);
     86   CHK(solparser_geometry_get_objects_count(geom) == 1);
     87   obj_id = solparser_geometry_get_object(geom, 0);
     88   obj = solparser_get_object(parser, obj_id);
     89   shape = solparser_get_shape(parser, obj->shape);
     90   CHK(shape->type == SOLPARSER_SHAPE_SPHERE);
     91   mtl2 = solparser_get_material_double_sided(parser, obj->mtl2);
     92   CHK(mtl2->front.i == mtl2->back.i);
     93   mtl = solparser_get_material(parser, mtl2->front);
     94   CHK(mtl->type == SOLPARSER_MATERIAL_THIN_DIELECTRIC);
     95   thin = solparser_get_material_thin_dielectric
     96     (parser, mtl->data.thin_dielectric);
     97   CHK(thin->thickness == 0.123);
     98 
     99   medium = solparser_get_medium(parser, thin->medium_i);
    100   CHK(medium->refractive_index.type == SOLPARSER_MTL_DATA_REAL);
    101   CHK(medium->refractive_index.value.real == 1);
    102   CHK(medium->extinction.type == SOLPARSER_MTL_DATA_REAL);
    103   CHK(medium->extinction.value.real == 0);
    104   medium = solparser_get_medium(parser, thin->medium_t);
    105 
    106   CHK(medium->refractive_index.type == SOLPARSER_MTL_DATA_SPECTRUM);
    107   spectrum = solparser_get_spectrum(parser, medium->refractive_index.value.spectrum);
    108   CHK(darray_spectrum_data_size_get(&spectrum->data) == 3);
    109   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[0].wavelength == 0.5);
    110   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[1].wavelength == 1.2);
    111   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[2].wavelength == 4.5);
    112   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[0].data == 0.25);
    113   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[1].data == 2.3);
    114   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[2].data == 6.7);
    115 
    116   CHK(medium->extinction.type == SOLPARSER_MTL_DATA_SPECTRUM);
    117   spectrum = solparser_get_spectrum(parser, medium->extinction.value.spectrum);
    118   CHK(darray_spectrum_data_size_get(&spectrum->data) == 5);
    119   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[0].wavelength == 1);
    120   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[1].wavelength == 2);
    121   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[2].wavelength == 3);
    122   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[3].wavelength == 4);
    123   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[4].wavelength == 5);
    124   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[0].data == 1);
    125   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[1].data == 2);
    126   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[2].data == 3);
    127   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[3].data == 4);
    128   CHK(darray_spectrum_data_cdata_get(&spectrum->data)[4].data == 5);
    129 
    130   CHK(solparser_load(parser) == RES_BAD_OP);
    131   solparser_ref_put(parser);
    132 
    133   fclose(stream);
    134 
    135   check_memory_allocator(&allocator);
    136   mem_shutdown_proxy_allocator(&allocator);
    137   CHK(mem_allocated_size() == 0);
    138   return 0;
    139 }