stardis-solver

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

README.md (33928B)


      1 # Stardis-Solver
      2 
      3 Stardis-Solver is *free software* that solves *coupled* convecto -
      4 conducto - radiative *thermal problems* in *complex* 2D and 3D
      5 *environments*. This C89 library internally relies on *Monte-Carlo*
      6 algorithms based on reformulations of the main heat transfer phenomena
      7 as cross-recursive "thermal paths" that explore space and time until a
      8 boundary condition or an initial condition is found. The key concept
      9 here is that heat transfer phenomena are not considered separately but
     10 naturally coupled via cross-recursive [Monte-Carlo
     11 algorithms](https://doi.org/10.1371/journal.pone.0283681)
     12 
     13 In Stardis-Solver the system to simulate is represented by a *scene*
     14 whose geometry defines the contour of the object only: in contrast to
     15 legacy thermal solvers *no volumetric mesh* has to be provided. Each
     16 geometric primitive as an associated *interface* that defines its
     17 physical properties (e.g. surface emissivity) and reference the *media*
     18 defining the thermal properties on both side of the primitive.  The
     19 boundary conditions are defined on the interfaces (convection
     20 coefficient, fixed temperature/flux, etc.), the media (known
     21 temperature), the *radiative environment* (ambient radiative
     22 temperature) or an *external source* (incident flux).  Once fully and
     23 consistently described, computations can be invoked on the resulting
     24 scene.
     25 
     26 Stardis-Solver is currently used in two frameworks. The
     27 [Stardis](https://gitlab.com/meso-star/stardis.git) CLI and its
     28 associated tools is the reference workflow of Stardis-Solver. It
     29 proposes a complete toolchain from fileformats describing the scene
     30 (geometry, thermal properties, limit and boundary conditions) to
     31 computations and post-treatments of the results
     32 ([Stardis-Green](https://gitlab.com/meso-star/stardis-green.git)).
     33 Stardis-Solver is also integrated into
     34 [SYRTHES](https://www.edf.fr/en/the-edf-group/world-s-largest-power-company/activities/research-and-development/scientific-communities/simulation-softwares?logiciel=10818),
     35 the general thermal free software developed by Electricité De France
     36 (EDF).
     37 
     38 The hypothesis these algorithms are based upon are the following:
     39 
     40 - *Conduction*: Stardis-Solver offers two ways of sampling unsteady
     41   Brownian motion to solve for conductivity in a solid.  The delta
     42   sphere algorithm is based on the discrimination of thermal heat
     43   transfer in solids, which introduces the notion of conductive path
     44   length. Solutions obtained using this algorithm are formally exact
     45   to the limit of zero path length. In practice, this path length
     46   must be adapted to a given geometrical configuration so that its
     47   value is small compared to the smallest typical space-time length
     48   of a solid.
     49 
     50   As an alternative, the
     51   [Walk on Sphere](https://www.jstor.org/stable/2237369)
     52   algorithm samples an unbiased diffuse trajectory in a solid with
     53   Dirichlet boundary conditions, unbiased with respect to what numerical
     54   accuracy can account for. Its coupling with other boundary or
     55   connection conditions behaves as with the delta sphere algorithm, i.e.
     56   the solution is exact when the length of the trajectory used as a
     57   first-order approximation tends towards 0.
     58 
     59 - *Convection*: fluid media are supposed to be isothermal, even if
     60   their temperature may vary with time. This hypothesis relies on
     61   the assumption of perfectly agitated fluids.
     62 
     63 - *Radiation*: local radiative transfer is solved by an [iterative
     64   numerical method](https://hal.archives-ouvertes.fr/tel-03266863/)
     65   (Picard algorithm) that requires the knowledge of a reference
     66   temperature field.  At the basic level (one level of recursion), and
     67   using a uniform reference temperature field, this algorithm translates
     68   into the hypothesis of a linearised radiative transfer. Using a higher
     69   order or recursion makes possible to converge the result closer to the
     70   solution of a rigorous spectrally-integrated radiative transfer (a
     71   difference of temperatures to the power 4 when integrated over the
     72   whole spectrum).  The higher the recursion order, the better will be
     73   the convergence of the algorithm.
     74 
     75 Despite its specific advantages, Stardis-Solver is not meant to fully
     76 replace already well established and highly validated thermal simulation
     77 tools.  Instead, it can be seen as an additional tool that can be useful
     78 for various purposes:
     79 
     80 - *Probe computation*: Stardis-Solver will *not* compute the full
     81   temperature field of a system; instead, it can be used to focus on a
     82   specific spatial/temporal zone of the system.  The main idea is that
     83   thermal paths start from this probe position, and scatter in space
     84   while going back in time, until a (spatial) boundary condition or a
     85   (temporal) initial condition is met. In addition to the value of
     86   temperature, using a Monte-Carlo method makes possible to compute a
     87   numerical uncertainty (standard deviation of the weight distribution)
     88   over each result.
     89 
     90 - *Integrated calculation*: thanks to Monte-Carlo, Stardis-Solver can
     91   calculate the temperature of an entire volume or surface, over a given
     92   time range, without increasing calculation time or uncertainty
     93   compared with a probe-based calculation at a specific point in time.
     94 
     95 - *Flux computation*: Stardis-Solver can compute the flux over any
     96   surface (or group of surfaces) at any time or time range.
     97   Alternatively, it can also compute the total energy output from a
     98   solid element where a internal source of power must be taken into
     99   account.
    100 
    101 - *Infrared rendering*: Stardis-Solver can be used to simulate the
    102   radiative temperature reaching the sensor of a camera.
    103   The [image rendering](https://dx.doi.org/10.1145/3592121)
    104   will take into account coupled (unsteady) phenomena and the entire
    105   geometry *without* ever having to calculate the temperature field.
    106 
    107 - *Green function*: the value of temperature computed at a probe
    108   position is the average of the Monte-Carlo weight for every thermal
    109   path. In practice: when no internal power sources have to be
    110   considered, the weight of any given thermal path is the temperature of
    111   the boundary or initial condition that has been reached; when internal
    112   power sources, imposed fluxes or an external source are taken into
    113   account, additional contributions to the weight must be continuously
    114   evaluated by the thermal conduction algorithm, but, under linear
    115   assumption, these contributions are proportional to the local
    116   dissipated power, imposed flux or external source radiance.
    117 
    118   So the position and date at the end of each thermal path (and also
    119   accumulation coefficients) can be stored during a first complete
    120   Monte-Carlo simulation. This is actually an estimates of the Green
    121   function, can then be used in (very fast)
    122   [post-processing](https://doi.org/10.1016/j.cpc.2023.108911) to
    123   compute all required results for different boundary and initial
    124   conditions (and also different internal power density, imposed or
    125   incident flux). Note that when using the Green function, only boundary
    126   and initial conditions (as well as internal power sources) can be
    127   modified: in particular, the geometry, thermal properties and exchange
    128   coefficients have to remain identical. Furthermore, the green function
    129   is only valid under the assumption of linearised radiative transfer.
    130 
    131 - *Path visualization*: Stardis-Solver can store the complete spatial
    132   and temporal position along a set of thermal paths, for latter
    133   visualization. In addition of their position and, each thermal path
    134   vertex register additional data as the type of thermal phenomena it
    135   simulates, the accumulated power/flux along the path, etc.
    136 
    137 ## Requirements
    138 
    139 - C compiler with OpenMP support
    140 - POSIX make
    141 - pkg-config
    142 - Message Passing Interface (optional)
    143 - [RSys](https://gitlab.com/vaplv/rsys)
    144 - [Star 2D](https://gitlab.com/meso-star/star-2d)
    145 - [Star 3D](https://gitlab.com/meso-star/star-3d)
    146 - [Star 3DUT](https://gitlab.com/meso-star/star-3dut)
    147   (optional for tests)
    148 - [Star Enclosures 2D](https://gitlab.com/meso-star/star-enclosures-2D)
    149 - [Star Enclosures 3D](https://gitlab.com/meso-star/star-enclosures-3D)
    150 - [Star SamPling](https://gitlab.com/meso-star/star-sp)
    151 - [Star WoS Functions](https://gitlab.com/meso-star/star-wf)
    152 
    153 ## Installation
    154 
    155 Edit config.mk as needed, then run:
    156 
    157     make clean install
    158 
    159 ## Release notes
    160 
    161 ### Version 0.16.2
    162 
    163 - Continue to improve numerical robustness when sampling the radiative
    164   path, both in long waves and when processing an external source.
    165 - Update the attenuation of numerical inaccuracies when the candidate
    166   path for reinjection is located approximately on one of the vertices
    167   of a triangle.
    168 
    169 ### Version 0.16.1
    170 
    171 - Corrected net flux calculation on surfaces with several Robin boundary
    172   conditions. Depending on the configuration, such a calculation could
    173   be impossible and return an error.
    174 - Improve the performance of external flux calculations by avoiding the
    175   need to calculate the contribution of external flux for surfaces with
    176   zero emissivity.
    177 - Mitigate numerical errors when sampling radiative paths.
    178 
    179 ### Version 0.16
    180 
    181 #### Add support for custom sampling of solid paths
    182 
    183 Add the `sample_path` functor as a member variable of the
    184 `sdis_solid_shader` data structure which, once defined, is called to
    185 sample a trajectory in this solid, instead of relying on the internal
    186 sampling procedures for unsteady conductive paths (i.e. walk on
    187 delta sphere or walk on sphere).
    188 
    189 Coupling takes place as usual, i.e. at the boundary. Only path sampling
    190 is delegated to the caller. In other words, the connection physics
    191 remain the same, and the user only has control over the physical model
    192 of the custom solid.
    193 
    194 Note that to help the user map the sampled path to the solver limits
    195 (i.e. the geometry reached by the path), we added the `sdis_primkey` API
    196 which constructs a unique key from the vertices of a segment/triangle.
    197 We can then use this key as input to the new functions
    198 `sdis_scene_get_s<2|3>d_primitive` to find the solver primitive which
    199 corresponds to this segment/triangle. It is therefore sufficient to know
    200 the *exact* coordinates of the boundary mesh to geometrically couple the
    201 paths sampled by the user with the boundaries of the geometries managed
    202 by the solver.
    203 
    204 #### Correcting the sampling of radiative paths
    205 
    206 Allows sampling of radiative paths in enclosures with multiple media.
    207 Multiple media are often used to define a set of Robin boundary
    208 conditions. And although sampling a convective path in such an enclosure
    209 is an error (since it is outside the space of convective paths), it is
    210 still possible to sample radiative paths in this enclosure (it is
    211 perfectly defined in the space of radiative paths).
    212 
    213 For example, it is now possible to render an infrared image of a system
    214 with a set of Robin boundary conditions defined from a set of fluids
    215 with fixed temperatures.
    216 
    217 #### Bug fixes
    218 
    219 - Fixes the `sdis_solve_probe_boundary_list` function. The calculation
    220   did not use the expected number of threads, which could lead to an
    221   invalid memory access.
    222 - Updated error handling when resolving temperatures for several probes.
    223   The calculation of a probe no longer stops as soon as a realisation is
    224   rejected. As with the calculation of a single probe, if a result is
    225   rejected, it is simply not taken into account in the estimate.
    226 - Corrects numerical problems when sampling a conductive path with WoS.
    227   The thresholds used to detect/manage numerical problems were
    228   calculated from absolute distances in metres. This method was not
    229   numerically robust when these distances were very small. They
    230   are now calculated in relation to the delta of the solid, which must
    231   be able to take account of spatio-temporal temperature gradients while
    232   being large enough to allow numerical estimation.
    233 - Corrects the position of the path when the initial condition is
    234   reached during the sampling of a conductive path with WoS. The unit
    235   used to update the position was wrong when the `fp_to_meter`
    236   variable was not set to 1. In addition, the position at which the
    237   initial condition was reached could be outside the solid.
    238 
    239 ### Version 0.15.2
    240 
    241 Correction of pkg-config file. A missing private dependency could lead
    242 to link editing errors when the user statically links to the library.
    243 
    244 ### Version 0.15.1
    245 
    246 Make the radiative environment time-dependent, so that it can vary not
    247 only with respect to the direction along path that reaches it, but also
    248 as a function of time at which it is reached.
    249 
    250 ### Version 0.15
    251 
    252 #### New conduction algorithm
    253 
    254 Addition of a new algorithm for sampling a potentially unsteady
    255 conductive path based on the Walk on Sphere (WoS) algorithm. Currently,
    256 unlike the previous delta sphere algorithm, the initial condition must
    257 be constant for the solid. Power density is also supported, but unlike
    258 the delta sphere algorithm, it too cannot vary in time and space. In all
    259 cases, the two algorithms coexist and can be selected via a new input
    260 parameter to the resolution functions. By default, the delta sphere
    261 algorithm is used.
    262 
    263 Note that the WoS algorithm is considered unbiased when sampling a
    264 diffuse trajectory in a solid with Dirichlet boundary conditions. Even
    265 if a numerical parameter is used to stop the algorithm when the
    266 trajectory is close to the boundary, this distance can be set to the
    267 machine's accuracy without significant impact on performance. Hence its
    268 unbiased nature in relation to numerical precision. Its coupling with
    269 other boundary or connection conditions behaves as with the delta sphere
    270 algorithm, i.e. the solution tends towards the exact solution when the
    271 delta tends towards 0.
    272 
    273 #### External spherical source
    274 
    275 An external spherical source can be added to the scene. Once defined, it
    276 is considered as a new boundary condition whose contribution is
    277 calculated at the solid/fluid interfaces in the form of an external net
    278 flux. A new interface parameter controls on which solid/fluid interfaces
    279 this external net flux is imposed. By default, when an external source
    280 is defined, its contribution is calculated on all solid/fluid
    281 interfaces. We point out that the radiative properties of the surface
    282 can now vary according to the radiative source, which can now be
    283 internal or external.
    284 
    285 The net external flux is calculated by sampling the radiative paths to
    286 evaluate the direct and diffuse part of the incident flux due to the
    287 external source. We emphasize that Stardis-Solver does not manage
    288 semi-traparent media, but that the external source provides the optional
    289 `diffuse_radiance` parameter which, once defined, corresponds to the
    290 radiance emitted by the external source and diffused at least once into
    291 the environment. In this way, the diffuse part of the flux manages not
    292 only the radiation from the external source that reaches the interface
    293 after one or more reflections, but also the external radiation scattered
    294 in the environment, here simply represented by the `diffuse_radiance`
    295 parameter.
    296 
    297 The external spherical source is defined by its position, radius, power
    298 and diffuse radiance (see above). While the radius is constant, the
    299 position and power are time-dependent, and the diffuse radiance also
    300 depends on the direction along which the sampled trajectory reaches the
    301 environment.
    302 
    303 The external spherical source is fully supported when estimating the
    304 green function. Only the positions of the spherical source must remain
    305 the same between green function estimation and use.
    306 
    307 Finally, as with net imposed fluxes and power densities, this external
    308 source term cannot be used when solving non-linear radiative exchanges
    309 using Picard iterations.
    310 
    311 #### Allow relative temperatures
    312 
    313 Allow to perform calculations relative to a given temperature T. In this
    314 case, the temperatures managed by Stardis would be relative to T and
    315 could therefore be negative, since they would express a deviation from
    316 T. It should be noted that reference temperatures must always be
    317 positive, i.e. expressed in the absolute domain. Finally, we emphasize
    318 that relative calculations only make sense in linear situations, i.e.
    319 negative temperatures are not valid for systems with non-linear
    320 radiative exchanges.
    321 
    322 This is a major break in the API that callers *must* take into account.
    323 Until now, negative temperatures were considered as unknown
    324 temperatures, whereas they are now valid. For example, an interface with
    325 a negative temperature could be considered adiabatic, whereas it is now
    326 a Dirichlet boundary condition. In other words, the same data could
    327 define totally different systems before or after this version.
    328 
    329 The macro `SDIS_TEMPERATURE_NONE` is added to define the unknown
    330 temperature value. The two helper macros `SDIS_TEMPERATURE_IS_KNOWN` and
    331 `SDIS_TEMPERATURE_IS_UNKNOWN`  are also provided to test whether the
    332 temperature is known or not.
    333 
    334 #### Parallelize multiple probe resolutions
    335 
    336 Add `sdis_solve_probe_list` and `sdis_solve_probe_boundary_list`
    337 functions. Unlike their single-probe counterpart, these functions
    338 parallelize the list of probes, rather than parallelizing Monte Carlo
    339 realizations. Calling these functions is therefore more advantageous in
    340 terms of load distribution when the number of probes to be evaluated is
    341 large compared to the cost of calculating a single probe.
    342 
    343 #### Miscellaneous
    344 
    345 - Updated the function profile used to define surface radiative
    346   properties, i.e. surface emissivity and specular fraction. These can
    347   now vary according to the source identifier (internal or external).
    348 - Make the radiative environment programmable. From now on, its API is
    349   the same as that of other resources such as interfaces or media. Its
    350   temperature and reference temperature are retrieved by functions whose
    351   input argument is the direction of the radiative path.
    352 - Add an optional user filter function as input argument to
    353   `sdis_scene_find_closest_point` function. The user can set their own
    354   filter function to manage the candidate points to be closest. This
    355   gives the caller a fine control during the inquiry to access the
    356   geometry and traversal of the accelerating structure.
    357 - CMake has been replaced by Makefile as the build system, and a
    358   pkg-config file is provided to link the library as an external
    359   dependency. Compiler and linker flags have also been updated to
    360   increase the security and robustness of generated binaries.
    361 
    362 ### Version 0.14
    363 
    364 - The net flux imposed can be combined with other boundary/connection
    365   conditions, i.e. a net flux can be set in addition to convective
    366   exchange and radiative transfer.
    367 - Added support for plain text log messages. Until now, log messages
    368   were intended to be read by a VT100-like terminal and could therefore
    369   contain escape sequences that required post-processing to store them
    370   in plain text log files.
    371 - Added support for user-defined signature on the green function. It
    372   allows to check that, when reloaded, a green function is the one
    373   expected by the user according to its own constraints that the green
    374   function cannot check itself such as, for example, that the same
    375   deltas are used in conductive random walks.
    376 - Changes the value of the constant `SDIS_VOLUMIC_POWER_NONE`. Its
    377   previous value of zero caused problems during the evaluation of the
    378   propagator: a media with a power density of zero was not registered in
    379   the list of media with a volumic power. A volumic power that was not
    380   zero was therefore not taken into account during the re-evaluation of
    381   the propagator. The constant is now set to `DBL_MAX`, which means that
    382   the medium has no power density, while a value of 0 is now treated as
    383   any valid power density term.
    384 
    385 ### Version 0.13.1
    386 
    387 Fixed compilation errors and compilation warnings displayed on some
    388 versions of GCC.
    389 
    390 ### Version 0.13
    391 
    392 #### Non linear radiative transfer
    393 
    394 Uses a new [iterative numerical
    395 method](https://hal.archives-ouvertes.fr/tel-03266863/) to estimate
    396 radiative transfer. With a recursion level of 1, this is equivalent to a
    397 linearization of the radiative transfer but with a reference temperature
    398 that can vary in time and space. By using a higher-order recursion, one
    399 can converge towards a rigorous estimate that takes into account the
    400 non-linearity of the radiative transfer; the higher the recursion order,
    401 the better the convergence, but with the counterpart of an increase in
    402 calculation time.
    403 
    404 #### Distributed memory parallelism
    405 
    406 Uses message passing interface to distribute computation across multiple
    407 computers. Stardis-Solver now, uses a mixed parallelism: on one computer
    408 (i.e.  a node), it uses a shared memory parallelism and relies on the
    409 message passing interface to parallelize calculations between several
    410 nodes.
    411 
    412 #### Type and state of the random number generator
    413 
    414 Adds the member input variable `rng_type` to the solve functions. It
    415 defines the type of random number generator to use when no generator is
    416 defined. Note that the `sdis_solve_camera` function does not have a
    417 random number generator as an input variable and has therefore been
    418 updated to support it.
    419 
    420 #### Reading the source code
    421 
    422 Refactoring and deep rewriting of the source code to simplify its
    423 reading.
    424 
    425 ### Version 0.12.3
    426 
    427 Fix green paths ending in a fluid (transcient computation): The path's
    428 end was not correctly registred and the path was later treated as
    429 failed.
    430 
    431 ### Version 0.12.2
    432 
    433 - Sets the required version of Star-SampPling to 0.12. This version
    434   fixes compilation errors with gcc 11 but introduces API breaks.
    435 - Fix warnings detected by gcc 11.
    436 
    437 ### Version 0.12.1
    438 
    439 Updates the way numerical issues are handled during a conductive random
    440 walk.  Previously, a zealous test would report a numerical error and
    441 stop the calculations when that error could be handled.
    442 
    443 ### Version 0.12
    444 
    445 Add the support of thermal contact resistance between two solids: the
    446 new `thermal_contact_resistance` functor on the data structure `struct
    447 sdis_interface_shader` defines the thermal resistance contact in
    448 K.m^2.W^-1 at a given time and at a specific position onto the
    449 interface.
    450 
    451 ### Version 0.11
    452 
    453 - Add support of unsteady green evaluation. The resulting green function
    454   can then be used to quickly evaluate the system at the same time but
    455   with different limit and initial conditions, volumetric powers and
    456   imposed fluxes.
    457 - Add checks on green re-evaluation to ensure that the system remains
    458   unchanged regarding its scale factor and its reference temperature.
    459 - Remove the ambient radiative temperature, the reference temperature
    460   and the geometry scale factor from the list of arguments submitted to
    461   the solve functions. They become scene arguments defined on scene
    462   creation.
    463 - Update the `sdis_scene_[2d_]create` function profile: its data are now
    464   grouped into a variable of type `struct sdis_scene_create_args`.
    465 
    466 ### Version 0.10.1
    467 
    468 - In green function estimation, the time sent to the user callbacks is
    469   no more the elapsed time from the beginning of the realisation: as in
    470   a regular computation, it is now the observation time.
    471 - Fix the flux computation for boundaries with an imposed flux: it was
    472   previously ignored. The new `sdis_estimator_get_imposed_flux` function
    473   returns this estimated flux component.
    474 - Return an error if the flux is computed at a boundary whose
    475   temperature is known: this configuration is not currently supported.
    476 - Fix build with the CL compiler.
    477 
    478 ### Version 0.10
    479 
    480 - Add support of green function [de]serialization. The
    481   `sdis_green_function_write` function serializes the green function
    482   into a stream while the `sdis_green_function_create_from_stream`
    483   function deserialize it. Note that the scene used to deserialize the
    484   green function must be the same of the one used to estimate it: the
    485   media and the interfaces have to be created in the same order, the
    486   scene geometry must be the same, etc.
    487 - Add the `sdis_scene_find_closest_point` function: search the point
    488   onto the scene geometry that is the closest of the submitted position.
    489 - Add the `sdis_compute_power` function that evaluates the power of a
    490   medium.
    491 - Update the solver: the time of the sampled path is now rewind on solid
    492   reinjection.
    493 
    494 ### Version 0.9
    495 
    496 - Update the API of the solve functions: the parameters of the
    497   simulation are now grouped into a unique data structure rather than
    498   separately submitted as function arguments. Thank to this structure
    499   and its default value, updating input parameters should now affect
    500   marginally the calling code.
    501 - Improve the logger. Add a prefix to the printed text to indicate the
    502   type of the message (info, error or warning). Add a progress message
    503   during simulation.
    504 - Bump the version of the Star-Enclosures <2D|3D> dependencies to 0.5
    505 
    506 ### Version 0.8.2
    507 
    508 - Fix an issue when the `sdis_solve_boundary_flux` function was invoked
    509   on a boundary with radiative transfer: several sampled paths were
    510   rejected due to data inconsistencies.
    511 - Fix a memory leak when the scene creation failed.
    512 - Enable parallelism on Star-Enclosure[2D] to improve the performances
    513   of the enclosure extraction on the setup of the Stardis-Solver scene.
    514 
    515 ### Version 0.8.1
    516 
    517 - Fix a solver issue that led to reject valid sampled paths.
    518 - Bump the version of the Star-Enclosure[2D] libraries to 0.4.2. These
    519   versions fix a numerical issue that might led to an infinite loop at
    520   the scene creation.
    521 
    522 ### Version 0.8
    523 
    524 - Drastically improve the robustness of the solver~: far less
    525   realisations are now rejected.
    526 - Add the estimation of the time spent per realisation estimate. Add the
    527   `sdis_estimator_get_realisation_time` function that returns this
    528   estimate.
    529 - Add the `sdis_estimator_buffer` API~: it manages a two dimensional
    530   array of regular estimators and provides global estimations over the
    531   whole estimators saved into the buffer.
    532 - Update the signature of the `sdis_solve_camera` function~: it now
    533   returns a `sdis_estimator_buffer`. It now also supports time
    534   integration as well as heat paths registration.
    535 
    536 ### Version 0.7
    537 
    538 #### Add Green function support
    539 
    540 Provide new solve functions that compute and save the Green function,
    541 i.e. the propagator used in regular solvers. The resulting Green
    542 function can be then evaluated to obtain an estimate of the temperature.
    543 
    544 The time spent to compute the Green function is comparable to the
    545 computation time of regular solvers; actually, they rely on the same
    546 code. However, its evaluation is instantaneous while it still handles
    547 the limit conditions, the boundary fluxes and the power term of the
    548 media *at the moment* of the evaluation. This means that one can
    549 estimate the Green function of a system only one time and then evaluate
    550 it with different limit conditions, boundary fluxes or power terms with
    551 negligible computation costs.
    552 
    553 Currently, Stardis-Solver assumes that during the Green function
    554 estimation, the properties of the system do not depend on time. In
    555 addition, it assumes that the boundary fluxes and the volumetric powers
    556 are constants in time and space.  Anyway, on Green function evaluation,
    557 the limit conditions of the system can still vary in time and space;
    558 systems in steady state can be simulated with Green functions.
    559 
    560 #### Add heat path registration
    561 
    562 Add the `int register_paths` mask to almost all solve functions to
    563 enable the registration against the returned estimator of the failure
    564 and/or successful random paths used by the solvers. For each path, the
    565 registered data are:
    566 
    567 - the vertices of the path;
    568 - the type of the path (failed or succeed);
    569 - the type of the path vertices (conductive, convective or radiative);
    570 - the Monte-Carlo weight of each path vertex;
    571 - the current time of each path vertex.
    572 
    573 Note that the amount of registered data can be huge if too more paths
    574 are registered.  Consequently, this functionality should be used with
    575 few realisations to obtain a subset of representative paths, or to only
    576 register the few paths that failed in order to diagnose what went wrong.
    577 
    578 #### Miscellaneous
    579 
    580 - Add the `sdis_solve_medium` function: it  estimates the average
    581   temperature of a medium.
    582 - Fix the setup of the interfaces: the interface associated to a
    583   geometric primitive could not be the right one.
    584 
    585 ### Version 0.6.1
    586 
    587 - Bump version of the Star-Enclosures[2D] dependencies: the new versions
    588   fix issues in the construction of fluid enclosures.
    589 - Bump version of the Star-<2D|3D> dependencies: the new versions rely
    590   on Embree3 rather than on Embree2 for their ray-tracing back-end.
    591 
    592 ### Version 0.6
    593 
    594 - Add the `sdis_solve_boundary` function: it computes the average
    595   temperature on a subset of geometric primitives.
    596 - Add flux solvers: the new `sdis_solve_probe_boundary_flux` and
    597   `sdis_solve_boundary_flux` functions estimate the convective and
    598   radiative fluxes at a given surface position or for a sub-set of
    599   geometric primitives, respectively.
    600 - Add support of time integration: almost all solvers can estimate the
    601   average temperature on a given time range. Only the
    602   `sdis_solve_camera` function does not support time integration, yet.
    603 - Add support of an explicit initial time `t0` for the fluid.
    604 - Fix a bug in the estimation of unknown fluid temperatures: the
    605   associativity between the internal Stardis-Solver data and the user
    606   defined data was wrong.
    607 
    608 ### Version 0.5
    609 
    610 Add support of fluid enclosure with unknown uniform temperature.
    611 
    612 - The convection coefficient of the surfaces surrounding a fluid whose
    613   temperature is unknown can vary in time and space. Anyway, the caller
    614   has to ensure that for each triangle of the fluid enclosure, the
    615   convection coefficient returned by its
    616   `struct sdis_interface_shader` - at a given position and time - is
    617   less than or equal to the `convection_coef_upper_bound` parameter of
    618   the shader.
    619 
    620 ### Version 0.4
    621 
    622 Full rewrite of how the volumetric power is taken into account.
    623 
    624 - Change the scheme of the random walk "solid re-injection": use a 2D
    625   re-injection scheme in order to handle 2D effects. On one hand, this
    626   scheme drastically improves the accuracy of the temperature estimation
    627   in solid with a volumetric power term. On the other hand it is more
    628   sensible to numerical imprecisions. The previous 1D scheme is thus
    629   used in situations where the 2D scheme exhibits too numerical issues,
    630   i.e. on sharp angles.
    631 - Add the missing volumetric power term on solid re-injection.
    632 - Add a corrective term to fix the bias on the volumetric power
    633   introduced when the random walk progresses at a distance of `delta` of
    634   a boundary.
    635 - Add several volumetric power tests.
    636 - Remove the `delta_boundary` parameter of the `struct
    637   sdis_solid_shader` data structure.
    638 
    639 ### Version 0.3
    640 
    641 - Some interface properties become double sided: the temperature,
    642   emissivity and specular fraction is defined for each side of the
    643   interface. Actually, only the convection coefficient is shared by the
    644   2 sides of the interface.  The per side interface properties are
    645   grouped into the new `struct sdis_interface_side_shader` data
    646   structure.
    647 - Add the support of fixed fluxes: the flux is a per side interface
    648   property.  Currently, the flux is handled only for the interface sides
    649   facing a solid medium.
    650 - Add the `sdis_scene_boundary_project_pos` function that computes the
    651   parametric coordinates of a world space position projected onto a
    652   given primitive with respect to its normal. If the projection lies
    653   outside the primitive, its parametric coordinates are wrapped against
    654   its boundaries in order to ensure that they are valid coordinates into
    655   the primitive. Actually, this function was mainly added to help in the
    656   definition of the probe position onto a boundary as expected by the
    657   `sdis_solve_probe_boundary` function.
    658 - Update the default comportment of the interface shader when a function
    659   is not set.
    660 - Rename the `SDIS_MEDIUM_<FLUID|SOLID>` constants in
    661   `SDIS_<FLUID|SOLID>`.
    662 - Rename the `enum sdis_side_flag` enumerate in `enum sdis_side` and
    663   update its values.
    664 
    665 ### Version 0.2
    666 
    667 - Add the support of volumic power to solid media: add the
    668   `volumic_power` functor to the `sdis_solid_shader` data structure
    669   that, once defined, should return the volumic power of the solid at a
    670   specific position and time. On solve invocation, the conductive random
    671   walks take into account this spatio-temporal volumic power in the
    672   computation of the solid temperature.
    673 - Add the `sdis_solve_probe_boundary` function: it computes the
    674   temperature at a given position and time onto a geometric primitive.
    675   The probe position is defined by the index of the primitive and a
    676   parametric coordinates onto it.
    677 - Add  the `sdis_scene_get_boundary_position` function: it computes a
    678   world space position from the index of a geometric primitive and a
    679   parametric coordinate onto it.
    680 - Fix how the `sdis_solve_probe` was parallelised. The submitted
    681   `threads_hint` parameter was not correctly handled.
    682 
    683 ### Version 0.1
    684 
    685 - Add the support of radiative temperature.
    686 - Add the `sdis_camera` API: it defines a pinhole camera into the scene.
    687 - Add the `sdis_accum_buffer` API: it is a pool of MC accumulators, i.e.
    688   a sum of MC weights and square weights.
    689 - Add the `sdis_solve_camera` function: it relies on a `sdis_camera` and
    690   a `sdis_accum_buffer` to compute the radiative temperature that
    691   reaches each pixel of an image whose definition is defined by the
    692   caller. Note that actually this function uses the same underlying MC
    693   algorithm behind the `sdis_solve_probe` function.
    694 
    695 ### Version 0.0
    696 
    697 First version and implementation of the Stardis-Solver API.
    698 
    699 - Support fluid/solid and solid/solid interfaces.
    700 - Only conduction is currently fully supported: convection and radiative
    701   temperature are not computed yet. Fluid media can be added to the
    702   system but currently, Stardis-Solver assumes that their temperature
    703   are known.
    704 
    705 ## License
    706 
    707 Copyright (C) 2016-2025 |Méso|Star> (contact@meso-star.com)
    708 
    709 Stardis-Solver is free software released under the GPLv3+ license: GNU
    710 GPL version 3 or later.  You are welcome to redistribute it under
    711 certain conditions; refer to the COPYING files for details.