solstice

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

README.md (11254B)


      1 # Solstice
      2 
      3 The purpose of this program is to compute the total power collected by a
      4 concentrated solar plant, and to evaluate various efficiencies for each primary
      5 reflector: it computes losses due to cosine effect, to shadowing and
      6 masking, to orientation and surface irregularities, to reflectivity, and to
      7 atmospheric transmission. The efficiency for each one of these effects is
      8 subsequently computed for each reflector, which provides insightful information
      9 when looking for the optimal design of a concentrated solar plant. Note that
     10 Solstice relies on Monte Carlo method, which means that every result is
     11 provided with its numerical accuracy.
     12 
     13 In addition to the computations listed above, Solstice can render an image of
     14 the solar plant, either with a simple ray-caster or with a path-tracing
     15 algorithm that correctly handles the materials of the scene.
     16 
     17 Solstice is designed to handle complex solar plants: any number of reflectors
     18 can be specified (planes, conics, cylindro-parabolic, etc.) and positioned in
     19 3D space, with a possibility for 1-axis and 2-axis auto-orientation with
     20 respect to the sun direction. CAD geometries can be added to the solar plant
     21 thanks to the support of the STereo Lithography file format. Multiple materials
     22 can be used, as long as the relevant physical properties are provided (matte,
     23 mirror, dielectric, etc.). Spectral effects are also taken into account: it is
     24 possible to define the spectral distribution of any physical property,
     25 including the input solar spectrum and the absorption of the atmosphere, at any
     26 spectral resolution.
     27 
     28 Solstice was developed as part of the Solstice project, in collaboration with
     29 the [Laboratory of Excellence Solstice](http://www.labex-solstice.fr) and the
     30 [PROMES](http://www.promes.cnrs.fr/) laboratory of the National Center for
     31 Scientific Research ([CNRS](http://www.cnrs.fr)). Starting in 2026, a new
     32 development effort funded by [Ademe](https://www.ademe.fr/) is ongoing.
     33 
     34 Refer to the solstice(1) man pages for more information on the available
     35 features.
     36 
     37 ## How to build
     38 
     39 This program, as part of the Solstice app, can be built on any POSIX system.
     40 
     41 Note that you will most likely want to build the entire Solstice app rather than
     42 this program alone. If so, a good starting point is the
     43 [start-build](https://gitlab.com/meso-star/star-build) build system.
     44 
     45 This program depends on the
     46 [LibYAML](http://pyyaml.org/wiki/LibYAML),
     47 [RSys](https://gitlab.com/vaplv/rsys/),
     48 [Solstice-Anim](https://gitlab.com/meso-star/solstice-anim/),
     49 [Solstice-Solver](https://gitlab.com/meso-star/solstice-solver/),
     50 [Star-3DUT](https://gitlab.com/meso-star/star-3dut/),
     51 [Star-SP](https://gitlab.com/meso-star/star-sp/) and
     52 [Star-STL](https://gitlab.com/meso-star/star-stm/) libraries.
     53 
     54 First ensure that the make utility and a compiler that implements the OpenMP 1.2
     55 specification are installed on your system. Then install the above
     56 prerequisites. Finally, edit the config.mk file to meet your needs and build
     57 the project by running:
     58 
     59     make clean install
     60 
     61 ## Release notes
     62 
     63 ### Version 0.10
     64 
     65 #### Raise the minimum required versions of companion libs
     66 
     67 solstice-anim minimum version is now 0.3, while solstice-solver minimum version
     68 is now 0.10.
     69 
     70 #### Replace CMake with a POSIX Makefile
     71 
     72 The build procedure is now written in POSIX make and can be configured via
     73 the config.mk file. A pkg-config file is also provided to link the
     74 library as an external dependency.
     75 
     76 Compared to the CMake alternative, this Makefile adds support for static
     77 libraries and an uninstall target. It also enables compiler and linker
     78 flags for various hardening features, improving the security and
     79 robustness of generated binaries. More broadly, the motivation for this
     80 rewrite is to rely on a well-established standard with a simple feature
     81 set, available on all UNIX systems - reducing portability concerns and
     82 maintenance burden while remaining significantly lighter.
     83 
     84 #### Proof-reading and editing manual pages
     85 
     86 Write the man pages directly in mdoc's roff macros, instead of using the
     87 asciidoc markup language as a source for man pages.
     88 Unlike writing manuals with man's roff macros, and even more so with
     89 asciidoc, mdoc macros take care of layout, font handling and all the other
     90 typesetting details which, by construction, guarantee the consistency of
     91 all manuals without leaving the responsibility to the individual author.
     92 This also facilitates translation into other formats and documentation
     93 tools. These are the main reasons for writing manual pages with mdoc
     94 macros.
     95 A complete re-reading of the manual pages was carried out during the
     96 translation into mdoc, with several corrections and rewrites to make the
     97 manual clearer.
     98 
     99 #### Raise the minimum required version of dependencies
    100 
    101 Minimum required versions:
    102 - Rsys = 0.15
    103 - Star-3DUT = 0.4
    104 - Star-SP = 0.15
    105 - Star-STL = 0.7
    106 - libYAML = 0.2
    107 
    108 ### Version 0.9.1
    109 
    110 - Raise the minimum required CMake version to 3.1, as version 2.8 has been
    111   deprecated since CMake 3.20.
    112 - Raise the minimum required Star-SampPling to 0.12. This version fixes
    113   compilation errors with gcc 11 but introduces API breaks.
    114 
    115 ### Version 0.9
    116 
    117 Add the `-G` option that saves and restores the state of the random number
    118 generator. This option can be used to ensure the statistical independence
    119 between successive runs.
    120 
    121 ### Version 0.8.2
    122 
    123 - Fix man pages: the -D option of the solstice CLI was wrongly documented. The
    124   zenith and elevation angles were sometimes inverted.
    125 - Bump version of the StarSP dependency to 0.8.
    126 
    127 ### Version 0.8.1
    128 
    129 Fix the VTK of the receiver map: the receiver map was written as `double` while
    130 the type notified in the VTK file was `float`. This might produce errors on
    131 loading of the resulting VTK file. The VTK data type is now set to `double` to
    132 make it consistent with the type of the written values.
    133 
    134 ### Version 0.8
    135 
    136 Add the support of per-triangle absorbed flux density. The `per_primitive`
    137 attribute of the receiver file format controls which flux densities to output
    138 for each triangle of a receiver. Its value can be:
    139 
    140 - `NONE`: no per-triangle flux density is computed, i.e. no receiver map is
    141   output for the receiver. It was the behaviour of the previous version of
    142   Solstice when the `per_primitive` flag was undefined or was set to 0.
    143 - `INCOMING`: output the estimate of the per-triangle incoming flux density.
    144   It was the behaviour of the previous version of Solstice when the
    145   `per_primitive` flag was set to 1.
    146 - `ABSORBED`: output the estimate of the per-triangle absorbed flux density.
    147 - `INCOMING_AND_ABSORBED`: output both the estimates of incoming and absorbed
    148   flux density for each triangle of the receiver.
    149 
    150 ### Version 0.7.1
    151 
    152 - Replace the `roughness` parameter of the mirror material by the
    153   `slope_error` parameter.
    154 - Improve the documentation of the sun direction.
    155 - Ensure that the per-receiver results are sorted according to the order of the
    156   receivers as listed in the submitted receiver file.
    157 
    158 ### Version 0.7
    159 
    160 - Add the `gaussian` sun shape.
    161 - Add the `microfacet` attribute to the mirror material. It controls the normal
    162   distribution of the microfacets when the mirror roughness is not null. The
    163   supported distributions are `BECKMANN` and `PILLBOX`.
    164 
    165 ### Version 0.6.1
    166 
    167 - Fix the solstice-input man page. The `extinction` parameter of the medium and
    168   the atmosphere was named `absorption`.
    169 - Rename the pillbox `theta_max` parameter in `half_angle`.
    170 
    171 ### Version 0.6
    172 
    173 - Rename the `absorption` parameter of the medium and the atmosphere in
    174   `extinction`.
    175 - Add several global and per-receiver estimations. The outputs now fully
    176   describe the incoming and absorbed fluxes: overall flux, flux without
    177   material loss, flux without atmospheric loss, material losses and atmospheric
    178   losses.
    179 - Rename the pillbox `aperture` parameter in `theta_max`.
    180 - Fix the distribution of the pillbox sun: the pdf was wrong and its angular
    181   parameter was internally used as an angular diameter while it is an angular
    182   radius.
    183 - Fix the solver for non parallel sun: the angle between the principal sun
    184   direction and the sampled direction was not correctly taken into account
    185   leading to a wrong initial weight for the optical paths.
    186 - Fix the solver with shapes having perturbed normals: perturbed normals
    187   must be taken into account in the bounces of the optical paths only, not in
    188   the energy computations.
    189 
    190 ### Version 0.5
    191 
    192 Improve the performances of the solver up to 50% in situations where the
    193 radiative random walks bounce on many surfaces.
    194 
    195 ### Version 0.4.1
    196 
    197 - Update the name of the output data in the solstice-output man page.
    198 - Fix an issue in "dump geometry" mode, i.e. option `-g`. Solstice might fail
    199   to export the solar plant geometry due to a wrong constraint on the pivots.
    200 
    201 ### Version 0.4
    202 
    203 - Update the color of the paths output with the `-p` option. A path is blue,
    204   turquoise or yellow if it reaches a receiver, misses the receivers or is
    205   occluded before it reaches a primary reflector, respectively.
    206 - Add a new type of paths tracked with the `-p` option: a path is red if it
    207   travels unforeseen mediums.
    208 - Correctly handle the `stacks` parameter of the cylinder.
    209 
    210 ### Version 0.3
    211 
    212 - Fix several issues in the output results. Refer to the Solstice-Solver 0.3
    213   release notes for more informations.
    214 - Add the `--version` option.
    215 - Update the man pages to fix some issues and improve the output documentation.
    216 
    217 ### Version 0.2.3
    218 
    219 - Update the solstice-input file format. The anchor and entity name cannot
    220   contain spaces or tabulations anymore.
    221 - Fix the reported sun directions in the solstice-output. For each submitted
    222   sun direction, solstice correctly outputs its Cartesian coordinates but always
    223   wrote the azimuthal and elevation angles of the first direction.
    224 - Update the solstice-output map page: add the missing `<efficiency>` grammar
    225   rule and fix the definition of the `<map-side-data>` grammar rule.
    226 
    227 ### Version 0.2.2
    228 
    229 - Fix how the AsciiDoc tool suite is searched for on Windows; it was never found
    230   and consequently the documentation was not generated.
    231 
    232 ### Version 0.2.1
    233 
    234 - Fix the install target on Windows: copy the solstice runtime libraries in the
    235   solstice installation path.
    236 
    237 ### Version 0.2
    238 
    239 - Add the support of an optional normal map to the materials. It defines
    240   spatially varying normals in the tangent space of the surface. Currently,
    241   only the quadric surfaces are parameterizable: using a normal mapped material
    242   on the other shapes will produce unforeseen behaviors.
    243 - Add the support of spectral data to the materials: a material attribute can be
    244   either a scalar or follow a spectral distribution.
    245 - Add an optional atmospheric absorption after the first reflection of the light
    246   path; the sun description includes the atmospheric effect before the first
    247   reflector.
    248 - Write the man pages of the Solstice command line and its associated file
    249   formats.
    250 - Add the verbose option `-v`.
    251 - Update the output format of the simulation.
    252 
    253 ## License
    254 
    255 Copyright (C) 2018-2026 |Meso|Star> (<contact@meso-star.com>).
    256 Copyright (C) 2016-2018 CNRS.
    257 
    258 Solstice is free software released under the GPL v3+ license: GNU GPL version 3
    259 or later. You are welcome to redistribute it under certain conditions; refer to
    260 the COPYING file for details.
    261