stardis-solver

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

commit c5e25939e42078beba832e26f6bb352f88c5992e
parent 532270e78b4abfb770d1c4ab6bd7eaf644af0534
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue,  5 Dec 2023 15:10:22 +0100

Wraps the README text in 72 columns

This matches the convention of plain text e-mails. It can therefore be
sent as a publication announcement e-mail without being reformatted.

Diffstat:
MREADME.md | 557++++++++++++++++++++++++++++++++++++++++++-------------------------------------
1 file changed, 295 insertions(+), 262 deletions(-)

diff --git a/README.md b/README.md @@ -1,92 +1,101 @@ # Stardis-Solver -Stardis-Solver is *free software* that solves *coupled* convecto - conducto - -radiative *thermal problems* in *complex* 2D and 3D *environments*. This C89 -library internally relies on *Monte-Carlo* algorithms based on reformulations -of the main heat transfer phenomena as cross-recursive "thermal paths" that -explore space and time until a boundary condition or an initial condition is -found. The key concept here is that heat transfer phenomena are not considered -separately but naturally coupled via cross-recursive [Monte-Carlo +Stardis-Solver is *free software* that solves *coupled* convecto - +conducto - radiative *thermal problems* in *complex* 2D and 3D +*environments*. This C89 library internally relies on *Monte-Carlo* +algorithms based on reformulations of the main heat transfer phenomena +as cross-recursive "thermal paths" that explore space and time until a +boundary condition or an initial condition is found. The key concept +here is that heat transfer phenomena are not considered separately but +naturally coupled via cross-recursive [Monte-Carlo algorithms](https://hal.archives-ouvertes.fr/hal-02419604/). The hypothesis these algorithms are based upon are the following: -- *conduction*: the discretization of thermal heat transfer in solids introduces - the notion of a conductive path length within the Monte-Carlo algorithm. - Solutions obtained using this algorithm are formally exact at the limit of a - null path length. In practice, this path length has to be adapted for a given - geometric configuration so that its value is small compared to the smallest - typical length of a solid. +- *conduction*: the discretization of thermal heat transfer in solids + introduces the notion of a conductive path length within the + Monte-Carlo algorithm. Solutions obtained using this algorithm are + formally exact at the limit of a null path length. In practice, this + path length has to be adapted for a given geometric configuration so + that its value is small compared to the smallest typical length of a + solid. - *convection*: fluid media are supposed to be isothermal, even if their - temperature may vary with time. This hypothesis relies on the assumption of - perfectly agitated fluids. -- *radiation*: local radiative transfer is solved by an [iterative numerical - method](https://hal.archives-ouvertes.fr/tel-03266863/) (Picard algorithm) - that requires the knowledge of a reference temperature field. At the basic - level (one level of recursion), and using a uniform reference temperature - field, this algorithm translates into the hypothesis of a linearized - radiative transfer. Using a higher order or recursion makes possible to - converge the result closer to the solution of a rigorous - spectrally-integrated radiative transfer (a difference of temperatures to the - power 4 when integrated over the whole spectrum). The higher the recursion - order, the better will be the convergence of the algorithm. - -In Stardis-Solver the system to simulate is represented by a *scene* whose -geometry defines the contour of the object only: in contrast to legacy thermal -solvers *no volumetric mesh* has to be provided. Each geometric primitive as an -associated *interface* that defines its physical properties (e.g. surface -emissivity) and reference the *media* defining the thermal properties on both -side of the primitive. The boundary and initial conditions are defined defined -on the interfaces (convection coefficient, fixed temperature/flux, etc.) and -the media (known temperature). Once fully and consistently described, -computations can be invoked on the resulting scene. + temperature may vary with time. This hypothesis relies on the + assumption of perfectly agitated fluids. +- *radiation*: local radiative transfer is solved by an [iterative + numerical method](https://hal.archives-ouvertes.fr/tel-03266863/) + (Picard algorithm) that requires the knowledge of a reference + temperature field. At the basic level (one level of recursion), and + using a uniform reference temperature field, this algorithm translates + into the hypothesis of a linearized radiative transfer. Using a higher + order or recursion makes possible to converge the result closer to the + solution of a rigorous spectrally-integrated radiative transfer (a + difference of temperatures to the power 4 when integrated over the + whole spectrum). The higher the recursion order, the better will be + the convergence of the algorithm. + +In Stardis-Solver the system to simulate is represented by a *scene* +whose geometry defines the contour of the object only: in contrast to +legacy thermal solvers *no volumetric mesh* has to be provided. Each +geometric primitive as an associated *interface* that defines its +physical properties (e.g. surface emissivity) and reference the *media* +defining the thermal properties on both side of the primitive. The +boundary and initial conditions are defined defined on the interfaces +(convection coefficient, fixed temperature/flux, etc.) and the media +(known temperature). Once fully and consistently described, computations +can be invoked on the resulting scene. The main features of the solver are currently: -- *probe computation*: Stardis-Solver will compute the temperature at any given - position (spatial and temporal). The main idea is that thermal paths start - from this probe position, and scatter in space while going back in time, - until a (spatial) boundary condition or a (temporal) initial condition is - met. In addition to the value of temperature, using a Monte-Carlo method - makes possible to compute a numerical uncertainty (standard deviation of the - weight distribution) over each result. -- *flux computation*: Stardis-Solver can compute the flux over any surface (or - group of surfaces) at any time. Alternatively, it can also compute the total - energy output from a solid element where a internal source of power must be - taken into account. -- *green function*: the value of temperature computed at a probe position is - the average of the Monte-Carlo weight for every thermal path. In practice: - when no internal power sources have to be considered, the weight of any given - thermal path is the temperature of the boundary or initial condition that has - been reached; when internal power sources or imposed fluxes are taken into - account, additional contributions to the weight must be continuously - evaluated by the thermal conduction algorithm, but these contributions are - proportional to the local dissipated power/imposed flux. In any case, the - position and date at the end of each thermal path (and also accumulation - coefficients) can be stored during a first complete Monte-Carlo simulation. - This information, known as the Green function, can then be used in (very - fast) post-processing to compute all required results for different boundary - and initial conditions (and also different internal power sources/imposed - flux). Note that when using the Green function, only boundary and initial - conditions (as well as internal power sources) can be modified: in - particular, the geometry, thermal properties and exchange coefficients have - to remain identical. Furthermore, the green function is only valid under the - assumption of linearized radiative transfer. -- *path visualization*: Stardis-Solver can store the complete spatial and - temporal position along a set of thermal paths, for latter visualization. In - addition of their position and, each thermal path vertex register additional - data as the type of thermal phenomena it simulates, the accumulated - power/flux along the path, etc. +- *probe computation*: Stardis-Solver will compute the temperature at + any given position (spatial and temporal). The main idea is that + thermal paths start from this probe position, and scatter in space + while going back in time, until a (spatial) boundary condition or a + (temporal) initial condition is met. In addition to the value of + temperature, using a Monte-Carlo method makes possible to compute a + numerical uncertainty (standard deviation of the weight distribution) + over each result. +- *flux computation*: Stardis-Solver can compute the flux over any + surface (or group of surfaces) at any time. Alternatively, it can also + compute the total energy output from a solid element where a internal + source of power must be taken into account. +- *green function*: the value of temperature computed at a probe + position is the average of the Monte-Carlo weight for every thermal + path. In practice: when no internal power sources have to be + considered, the weight of any given thermal path is the temperature of + the boundary or initial condition that has been reached; when internal + power sources or imposed fluxes are taken into account, additional + contributions to the weight must be continuously evaluated by the + thermal conduction algorithm, but these contributions are proportional + to the local dissipated power/imposed flux. In any case, the position + and date at the end of each thermal path (and also accumulation + coefficients) can be stored during a first complete Monte-Carlo + simulation. This information, known as the Green function, can then + be used in (very fast) post-processing to compute all required results + for different boundary and initial conditions (and also different + internal power sources/imposed flux). Note that when using the Green + function, only boundary and initial conditions (as well as internal + power sources) can be modified: in particular, the geometry, thermal + properties and exchange coefficients have to remain identical. + Furthermore, the green function is only valid under the assumption of + linearized radiative transfer. +- *path visualization*: Stardis-Solver can store the complete spatial + and temporal position along a set of thermal paths, for latter + visualization. In addition of their position and, each thermal path + vertex register additional data as the type of thermal phenomena it + simulates, the accumulated power/flux along the path, etc. Stardis-Solver is currently used in two frameworks. The -[Stardis](https://gitlab.com/meso-star/stardis.git) CLI and its associated -tools is the reference workflow of Stardis-Solver. It proposes a complete -toolchain from fileformats describing the scene (geometry, thermal properties, -limit and boundary conditions) to computations and post-treatments of the -results ([Stardis-Green](https://gitlab.com/meso-star/stardis-green.git)). +[Stardis](https://gitlab.com/meso-star/stardis.git) CLI and its +associated tools is the reference workflow of Stardis-Solver. It +proposes a complete toolchain from fileformats describing the scene +(geometry, thermal properties, limit and boundary conditions) to +computations and post-treatments of the results +([Stardis-Green](https://gitlab.com/meso-star/stardis-green.git)). Stardis-Solver is also integrated into [SYRTHES](https://www.edf.fr/en/the-edf-group/world-s-largest-power-company/activities/research-and-development/scientific-communities/simulation-softwares?logiciel=10818), -the general thermal free software developed by Electricité De France (EDF). +the general thermal free software developed by Electricité De France +(EDF). ## Requirements @@ -113,190 +122,205 @@ Edit config.mk as needed, then run: - The net flux imposed can be combined with other boundary/connection conditions, i.e. a net flux can be set in addition to convective exchange and radiative transfer. -- Added support for plain text log messages. Until now, log messages were - intended to be read by a VT100-like terminal and could therefore contain - escape sequences that required post-processing to store them in plain text - log files. -- Added support for user-defined signature on the green function. It allows to - check that, when reloaded, a green function is the one expected by the user - according to its own constraints that the green function cannot check itself - such as, for example, that the same deltas are used in conductive random - walks. -- Changes the value of the constant `SDIS_VOLUMIC_POWER_NONE`. Its previous - value of zero caused problems during the evaluation of the propagator: a - media with a power density of zero was not registered in the list of media - with a volumic power. A volumic power that was not zero was therefore not - taken into account during the re-evaluation of the propagator. The constant - is now set to `DBL_MAX`, which means that the medium has no power density, - while a value of 0 is now treated as any valid power density term. +- Added support for plain text log messages. Until now, log messages + were intended to be read by a VT100-like terminal and could therefore + contain escape sequences that required post-processing to store them + in plain text log files. +- Added support for user-defined signature on the green function. It + allows to check that, when reloaded, a green function is the one + expected by the user according to its own constraints that the green + function cannot check itself such as, for example, that the same + deltas are used in conductive random walks. +- Changes the value of the constant `SDIS_VOLUMIC_POWER_NONE`. Its + previous value of zero caused problems during the evaluation of the + propagator: a media with a power density of zero was not registered in + the list of media with a volumic power. A volumic power that was not + zero was therefore not taken into account during the re-evaluation of + the propagator. The constant is now set to `DBL_MAX`, which means that + the medium has no power density, while a value of 0 is now treated as + any valid power density term. ### Version 0.13.1 -Fixed compilation errors and compilation warnings displayed on some versions of -GCC. +Fixed compilation errors and compilation warnings displayed on some +versions of GCC. ### Version 0.13 #### Non linear radiative transfer Uses a new [iterative numerical -method](https://hal.archives-ouvertes.fr/tel-03266863/) to estimate radiative -transfer. With a recursion level of 1, this is equivalent to a linearization of -the radiative transfer but with a reference temperature that can vary in time -and space. By using a higher-order recursion, one can converge towards a -rigorous estimate that takes into account the non-linearity of the radiative -transfer; the higher the recursion order, the better the convergence, but with -the counterpart of an increase in calculation time. +method](https://hal.archives-ouvertes.fr/tel-03266863/) to estimate +radiative transfer. With a recursion level of 1, this is equivalent to a +linearization of the radiative transfer but with a reference temperature +that can vary in time and space. By using a higher-order recursion, one +can converge towards a rigorous estimate that takes into account the +non-linearity of the radiative transfer; the higher the recursion order, +the better the convergence, but with the counterpart of an increase in +calculation time. #### Distributed memory parallelism Uses message passing interface to distribute computation across multiple -computers. Stardis-Solver now, uses a mixed parallelism: on one computer (i.e. -a node), it uses a shared memory parallelism and relies on the message passing -interface to parallelize calculations between several nodes. +computers. Stardis-Solver now, uses a mixed parallelism: on one computer +(i.e. a node), it uses a shared memory parallelism and relies on the +message passing interface to parallelize calculations between several +nodes. #### Type and state of the random number generator -Adds the member input variable `rng_type` to the solve functions. It defines -the type of random number generator to use when no generator is defined. Note -that the `sdis_solve_camera` function does not have a random number generator -as an input variable and has therefore been updated to support it. +Adds the member input variable `rng_type` to the solve functions. It +defines the type of random number generator to use when no generator is +defined. Note that the `sdis_solve_camera` function does not have a +random number generator as an input variable and has therefore been +updated to support it. #### Reading the source code -Refactoring and deep rewriting of the source code to simplify its reading. +Refactoring and deep rewriting of the source code to simplify its +reading. ### Version 0.12.3 -Fix green paths ending in a fluid (transcient computation): The path's end was -not correctly registred and the path was later treated as failed. +Fix green paths ending in a fluid (transcient computation): The path's +end was not correctly registred and the path was later treated as +failed. ### Version 0.12.2 -- Sets the required version of Star-SampPling to 0.12. This version fixes - compilation errors with gcc 11 but introduces API breaks. +- Sets the required version of Star-SampPling to 0.12. This version + fixes compilation errors with gcc 11 but introduces API breaks. - Fix warnings detected by gcc 11. ### Version 0.12.1 -Updates the way numerical issues are handled during a conductive random walk. -Previously, a zealous test would report a numerical error and stop the -calculations when that error could be handled. +Updates the way numerical issues are handled during a conductive random +walk. Previously, a zealous test would report a numerical error and +stop the calculations when that error could be handled. ### Version 0.12 -Add the support of thermal contact resistance between two solids: the new -`thermal_contact_resistance` functor on the data structure `struct -sdis_interface_shader` defines the thermal resistance contact in K.m^2.W^-1 at -a given time and at a specific position onto the interface. +Add the support of thermal contact resistance between two solids: the +new `thermal_contact_resistance` functor on the data structure `struct +sdis_interface_shader` defines the thermal resistance contact in +K.m^2.W^-1 at a given time and at a specific position onto the +interface. ### Version 0.11 -- Add support of unsteady green evaluation. The resulting green function can - then be used to quickly evaluate the system at the same time but with - different limit and initial conditions, volumetric powers and imposed fluxes. -- Add checks on green re-evaluation to ensure that the system remains unchanged - regarding its scale factor and its reference temperature. -- Remove the ambient radiative temperature, the reference temperature and the - geometry scale factor from the list of arguments submitted to the solve - functions. They become scene arguments defined on scene creation. +- Add support of unsteady green evaluation. The resulting green function + can then be used to quickly evaluate the system at the same time but + with different limit and initial conditions, volumetric powers and + imposed fluxes. +- Add checks on green re-evaluation to ensure that the system remains + unchanged regarding its scale factor and its reference temperature. +- Remove the ambient radiative temperature, the reference temperature + and the geometry scale factor from the list of arguments submitted to + the solve functions. They become scene arguments defined on scene + creation. - Update the `sdis_scene_[2d_]create` function profile: its data are now grouped into a variable of type `struct sdis_scene_create_args`. ### Version 0.10.1 -- In green function estimation, the time sent to the user callbacks is no more - the elapsed time from the beginning of the realisation: as in a regular - computation, it is now the observation time. +- In green function estimation, the time sent to the user callbacks is + no more the elapsed time from the beginning of the realisation: as in + a regular computation, it is now the observation time. - Fix the flux computation for boundaries with an imposed flux: it was previously ignored. The new `sdis_estimator_get_imposed_flux` function returns this estimated flux component. -- Return an error if the flux is computed at a boundary whose temperature is - known: this configuration is not currently supported. +- Return an error if the flux is computed at a boundary whose + temperature is known: this configuration is not currently supported. - Fix build with the CL compiler. ### Version 0.10 - Add support of green function [de]serialization. The - `sdis_green_function_write` function serializes the green function into a - stream while the `sdis_green_function_create_from_stream` function - deserialize it. Note that the scene used to deserialize the green function - must be the same of the one used to estimate it: the media and the interfaces - have to be created in the same order, the scene geometry must be the same, - etc. -- Add the `sdis_scene_find_closest_point` function: search the point onto the - scene geometry that is the closest of the submitted position. -- Add the `sdis_compute_power` function that evaluates the power of a medium. + `sdis_green_function_write` function serializes the green function + into a stream while the `sdis_green_function_create_from_stream` + function deserialize it. Note that the scene used to deserialize the + green function must be the same of the one used to estimate it: the + media and the interfaces have to be created in the same order, the + scene geometry must be the same, etc. +- Add the `sdis_scene_find_closest_point` function: search the point + onto the scene geometry that is the closest of the submitted position. +- Add the `sdis_compute_power` function that evaluates the power of a + medium. - Update the solver: the time of the sampled path is now rewind on solid reinjection. ### Version 0.9 -- Update the API of the solve functions: the parameters of the simulation are - now grouped into a unique data structure rather than separately submitted as - function arguments. Thank to this structure and its default value, updating - input parameters should now affect marginally the calling code. -- Improve the logger. Add a prefix to the printed text to indicate the type of - the message (info, error or warning). Add a progress message during - simulation. +- Update the API of the solve functions: the parameters of the + simulation are now grouped into a unique data structure rather than + separately submitted as function arguments. Thank to this structure + and its default value, updating input parameters should now affect + marginally the calling code. +- Improve the logger. Add a prefix to the printed text to indicate the + type of the message (info, error or warning). Add a progress message + during simulation. - Bump the version of the Star-Enclosures <2D|3D> dependencies to 0.5 ### Version 0.8.2 -- Fix an issue when the `sdis_solve_boundary_flux` function was invoked on a - boundary with radiative transfer: several sampled paths were rejected due to - data inconsistencies. +- Fix an issue when the `sdis_solve_boundary_flux` function was invoked + on a boundary with radiative transfer: several sampled paths were + rejected due to data inconsistencies. - Fix a memory leak when the scene creation failed. -- Enable parallelism on Star-Enclosure[2D] to improve the performances of the - enclosure extraction on the setup of the Stardis-Solver scene. +- Enable parallelism on Star-Enclosure[2D] to improve the performances + of the enclosure extraction on the setup of the Stardis-Solver scene. ### Version 0.8.1 - Fix a solver issue that led to reject valid sampled paths. -- Bump the version of the Star-Enclosure[2D] libraries to 0.4.2. These versions - fix a numerical issue that might led to an infinite loop at the scene creation. +- Bump the version of the Star-Enclosure[2D] libraries to 0.4.2. These + versions fix a numerical issue that might led to an infinite loop at + the scene creation. ### Version 0.8 -- Drastically improve the robustness of the solver~: far less realisations are - now rejected. +- Drastically improve the robustness of the solver~: far less + realisations are now rejected. - Add the estimation of the time spent per realisation estimate. Add the - `sdis_estimator_get_realisation_time` function that returns this estimate. -- Add the `sdis_estimator_buffer` API~: it manages a two dimensional array of - regular estimators and provides global estimations over the whole estimators - saved into the buffer. -- Update the signature of the `sdis_solve_camera` function~: it now returns a - `sdis_estimator_buffer`. It now also supports time integration as well as - heat paths registration. + `sdis_estimator_get_realisation_time` function that returns this + estimate. +- Add the `sdis_estimator_buffer` API~: it manages a two dimensional + array of regular estimators and provides global estimations over the + whole estimators saved into the buffer. +- Update the signature of the `sdis_solve_camera` function~: it now + returns a `sdis_estimator_buffer`. It now also supports time + integration as well as heat paths registration. ### Version 0.7 #### Add Green function support -Provide new solve functions that compute and save the Green function, i.e. the -propagator used in regular solvers. The resulting Green function can be then -evaluated to obtain an estimate of the temperature. - -The time spent to compute the Green function is comparable to the computation -time of regular solvers; actually, they rely on the same code. However, its -evaluation is instantaneous while it still handles the limit conditions, the -boundary fluxes and the power term of the media *at the moment* of the -evaluation. This means that one can estimate the Green function of a system -only one time and then evaluate it with different limit conditions, boundary -fluxes or power terms with negligible computation costs. - -Currently, Stardis-Solver assumes that during the Green function estimation, -the properties of the system do not depend on time. In addition, it assumes -that the boundary fluxes and the volumetric powers are constants in time and -space. Anyway, on Green function evaluation, the limit conditions of the -system can still vary in time and space; systems in steady state can be -simulated with Green functions. +Provide new solve functions that compute and save the Green function, +i.e. the propagator used in regular solvers. The resulting Green +function can be then evaluated to obtain an estimate of the temperature. + +The time spent to compute the Green function is comparable to the +computation time of regular solvers; actually, they rely on the same +code. However, its evaluation is instantaneous while it still handles +the limit conditions, the boundary fluxes and the power term of the +media *at the moment* of the evaluation. This means that one can +estimate the Green function of a system only one time and then evaluate +it with different limit conditions, boundary fluxes or power terms with +negligible computation costs. + +Currently, Stardis-Solver assumes that during the Green function +estimation, the properties of the system do not depend on time. In +addition, it assumes that the boundary fluxes and the volumetric powers +are constants in time and space. Anyway, on Green function evaluation, +the limit conditions of the system can still vary in time and space; +systems in steady state can be simulated with Green functions. #### Add heat path registration -Add the `int register_paths` mask to almost all solve functions to enable the -registration against the returned estimator of the failure and/or successful -random paths used by the solvers. For each path, the registered data are: +Add the `int register_paths` mask to almost all solve functions to +enable the registration against the returned estimator of the failure +and/or successful random paths used by the solvers. For each path, the +registered data are: - the vertices of the path; - the type of the path (failed or succeed); @@ -304,119 +328,127 @@ random paths used by the solvers. For each path, the registered data are: - the Monte-Carlo weight of each path vertex; - the current time of each path vertex. -Note that the amount of registered data can be huge if too more paths are -registered. Consequently, this functionality should be used with few -realisations to obtain a subset of representative paths, or to only register -the few paths that failed in order to diagnose what went wrong. +Note that the amount of registered data can be huge if too more paths +are registered. Consequently, this functionality should be used with +few realisations to obtain a subset of representative paths, or to only +register the few paths that failed in order to diagnose what went wrong. #### Miscellaneous -- Add the `sdis_solve_medium` function: it estimates the average temperature - of a medium. -- Fix the setup of the interfaces: the interface associated to a geometric - primitive could not be the right one. +- Add the `sdis_solve_medium` function: it estimates the average + temperature of a medium. +- Fix the setup of the interfaces: the interface associated to a + geometric primitive could not be the right one. ### Version 0.6.1 -- Bump version of the Star-Enclosures[2D] dependencies: the new versions fix - issues in the construction of fluid enclosures. -- Bump version of the Star-<2D|3D> dependencies: the new versions rely on - Embree3 rather than on Embree2 for their ray-tracing back-end. +- Bump version of the Star-Enclosures[2D] dependencies: the new versions + fix issues in the construction of fluid enclosures. +- Bump version of the Star-<2D|3D> dependencies: the new versions rely + on Embree3 rather than on Embree2 for their ray-tracing back-end. ### Version 0.6 -- Add the `sdis_solve_boundary` function: it computes the average temperature - on a subset of geometric primitives. +- Add the `sdis_solve_boundary` function: it computes the average + temperature on a subset of geometric primitives. - Add flux solvers: the new `sdis_solve_probe_boundary_flux` and - `sdis_solve_boundary_flux` functions estimate the convective and radiative - fluxes at a given surface position or for a sub-set of geometric primitives, - respectively. -- Add support of time integration: almost all solvers can estimate the average - temperature on a given time range. Only the `sdis_solve_camera` function does - not support time integration, yet. + `sdis_solve_boundary_flux` functions estimate the convective and + radiative fluxes at a given surface position or for a sub-set of + geometric primitives, respectively. +- Add support of time integration: almost all solvers can estimate the + average temperature on a given time range. Only the + `sdis_solve_camera` function does not support time integration, yet. - Add support of an explicit initial time `t0` for the fluid. -- Fix a bug in the estimation of unknown fluid temperatures: the associativity - between the internal Stardis-Solver data and the user defined data was wrong. +- Fix a bug in the estimation of unknown fluid temperatures: the + associativity between the internal Stardis-Solver data and the user + defined data was wrong. ### Version 0.5 Add support of fluid enclosure with unknown uniform temperature. - The convection coefficient of the surfaces surrounding a fluid whose - temperature is unknown can vary in time and space. Anyway, the caller has to - ensure that for each triangle of the fluid enclosure, the convection - coefficient returned by its `struct sdis_interface_shader` - at a given - position and time - is less than or equal to the `convection_coef_upper_bound` - parameter of the shader. + temperature is unknown can vary in time and space. Anyway, the caller + has to ensure that for each triangle of the fluid enclosure, the + convection coefficient returned by its + `struct sdis_interface_shader` - at a given position and time - is + less than or equal to the `convection_coef_upper_bound` parameter of + the shader. ### Version 0.4 Full rewrite of how the volumetric power is taken into account. - Change the scheme of the random walk "solid re-injection": use a 2D - re-injection scheme in order to handle 2D effects. On one hand, this scheme - drastically improves the accuracy of the temperature estimation in solid with - a volumetric power term. On the other hand it is more sensible to numerical - imprecisions. The previous 1D scheme is thus used in situations where the 2D - scheme exhibits too numerical issues, i.e. on sharp angles. + re-injection scheme in order to handle 2D effects. On one hand, this + scheme drastically improves the accuracy of the temperature estimation + in solid with a volumetric power term. On the other hand it is more + sensible to numerical imprecisions. The previous 1D scheme is thus + used in situations where the 2D scheme exhibits too numerical issues, + i.e. on sharp angles. - Add the missing volumetric power term on solid re-injection. -- Add a corrective term to fix the bias on the volumetric power introduced when - the random walk progresses at a distance of `delta` of a boundary. +- Add a corrective term to fix the bias on the volumetric power + introduced when the random walk progresses at a distance of `delta` of + a boundary. - Add several volumetric power tests. -- Remove the `delta_boundary` parameter of the `struct sdis_solid_shader` data - structure. +- Remove the `delta_boundary` parameter of the `struct + sdis_solid_shader` data structure. ### Version 0.3 -- Some interface properties become double sided: the temperature, emissivity - and specular fraction is defined for each side of the interface. Actually, - only the convection coefficient is shared by the 2 sides of the interface. - The per side interface properties are grouped into the new `struct - sdis_interface_side_shader` data structure. -- Add the support of fixed fluxes: the flux is a per side interface property. - Currently, the flux is handled only for the interface sides facing a solid - medium. +- Some interface properties become double sided: the temperature, + emissivity and specular fraction is defined for each side of the + interface. Actually, only the convection coefficient is shared by the + 2 sides of the interface. The per side interface properties are + grouped into the new `struct sdis_interface_side_shader` data + structure. +- Add the support of fixed fluxes: the flux is a per side interface + property. Currently, the flux is handled only for the interface sides + facing a solid medium. - Add the `sdis_scene_boundary_project_pos` function that computes the - parametric coordinates of a world space position projected onto a given - primitive with respect to its normal. If the projection lies outside the - primitive, its parametric coordinates are wrapped against its boundaries in - order to ensure that they are valid coordinates into the primitive. Actually, - this function was mainly added to help in the definition of the probe - position onto a boundary as expected by the + parametric coordinates of a world space position projected onto a + given primitive with respect to its normal. If the projection lies + outside the primitive, its parametric coordinates are wrapped against + its boundaries in order to ensure that they are valid coordinates into + the primitive. Actually, this function was mainly added to help in the + definition of the probe position onto a boundary as expected by the `sdis_solve_probe_boundary` function. -- Update the default comportment of the interface shader when a function is not - set. -- Rename the `SDIS_MEDIUM_<FLUID|SOLID>` constants in `SDIS_<FLUID|SOLID>`. -- Rename the `enum sdis_side_flag` enumerate in `enum sdis_side` and update its - values. +- Update the default comportment of the interface shader when a function + is not set. +- Rename the `SDIS_MEDIUM_<FLUID|SOLID>` constants in + `SDIS_<FLUID|SOLID>`. +- Rename the `enum sdis_side_flag` enumerate in `enum sdis_side` and + update its values. ### Version 0.2 -- Add the support of volumic power to solid media: add the `volumic_power` - functor to the `sdis_solid_shader` data structure that, once defined, should - return the volumic power of the solid at a specific position and time. On - solve invocation, the conductive random walks take into account this - spatio-temporal volumic power in the computation of the solid temperature. -- Add the `sdis_solve_probe_boundary` function: it computes the temperature at - a given position and time onto a geometric primitive. The probe position is - defined by the index of the primitive and a parametric coordinates onto it. -- Add the `sdis_scene_get_boundary_position` function: it computes a world - space position from the index of a geometric primitive and a parametric - coordinate onto it. -- Fix how the `sdis_solve_probe` was parallelised. The submitted `threads_hint` - parameter was not correctly handled. +- Add the support of volumic power to solid media: add the + `volumic_power` functor to the `sdis_solid_shader` data structure + that, once defined, should return the volumic power of the solid at a + specific position and time. On solve invocation, the conductive random + walks take into account this spatio-temporal volumic power in the + computation of the solid temperature. +- Add the `sdis_solve_probe_boundary` function: it computes the + temperature at a given position and time onto a geometric primitive. + The probe position is defined by the index of the primitive and a + parametric coordinates onto it. +- Add the `sdis_scene_get_boundary_position` function: it computes a + world space position from the index of a geometric primitive and a + parametric coordinate onto it. +- Fix how the `sdis_solve_probe` was parallelised. The submitted + `threads_hint` parameter was not correctly handled. ### Version 0.1 - Add the support of radiative temperature. - Add the `sdis_camera` API: it defines a pinhole camera into the scene. -- Add the `sdis_accum_buffer` API: it is a pool of MC accumulators, i.e. a sum - of MC weights and square weights. -- Add the `sdis_solve_camera` function: it relies on a `sdis_camera` and a - `sdis_accum_buffer` to compute the radiative temperature that reaches each - pixel of an image whose definition is defined by the caller. Note that - actually this function uses the same underlying MC algorithm behind the - `sdis_solve_probe` function. +- Add the `sdis_accum_buffer` API: it is a pool of MC accumulators, i.e. + a sum of MC weights and square weights. +- Add the `sdis_solve_camera` function: it relies on a `sdis_camera` and + a `sdis_accum_buffer` to compute the radiative temperature that + reaches each pixel of an image whose definition is defined by the + caller. Note that actually this function uses the same underlying MC + algorithm behind the `sdis_solve_probe` function. ### Version 0.0 @@ -424,8 +456,9 @@ First version and implementation of the Stardis-Solver API. - Support fluid/solid and solid/solid interfaces. - Only conduction is currently fully supported: convection and radiative - temperature are not computed yet. Fluid media can be added to the system but - currently, Stardis-Solver assumes that their temperature are known. + temperature are not computed yet. Fluid media can be added to the + system but currently, Stardis-Solver assumes that their temperature + are known. ## License