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