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.