openfoam merge requestshttps://develop.openfoam.com/Development/openfoam/-/merge_requests2023-05-10T10:10:40Zhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/601Optimization to ldu Matrix2023-05-10T10:10:40ZAlon ZameretOptimization to ldu Matrix## 1 Goal
The goal of this change is to improve the sparse solver in OpenFOAM in terms of computational efficiency and communication reduction.
The related modifications come in three categories:
- remove the redundant codes in **symG...## 1 Goal
The goal of this change is to improve the sparse solver in OpenFOAM in terms of computational efficiency and communication reduction.
The related modifications come in three categories:
- remove the redundant codes in **symGaussSeidelSmoother.C**.
- fuse the “ACf = Ax” with “coarseSources -= ACF” to get “coarseSources -=Ax” codes in **GAMGSolverSolve.C**.
- reduce the number of “Allreduce” in **PCG.C**.
## 2 Proposed Change and Results
### 2.1 symGaussSeidelSmoother.C
The symGaussSeidel runs the following algorithm:
- Forward: $x_i^{k+1}=\frac{1}{a_{ii}} (b-∑_{j=1}^{i-1}a_{ij} x_j^{k+1} -∑_{j=i+1}^na_{ij} x_j^k)$
- Backward: $x_i^{k+2}=\frac{1}{a_{ii}} (b-∑_{j=1}^{i-1}a_{ij} x_j^{k+1} -∑_{j=i+1}^na_{ij} x_j^{k+2})$
The realization in OpenFOAM is as follows：
![symgs](/uploads/e45b8885d2b60ea47033e38cd918a749/symgs.png)
We can see that the last step, i.e. $bPrime=bPrime-∑_{j=i+1}^n a_{ij} x_i^{k+2} $, is redundant. Mapping to the code realization, we can get the “distribute neighbor side …” step is redundant as long as forall facei > ownStartPtr[celli], uPtr[facei] > celli.
We test the modification on cavity 256*512 case. The results show that symgs operation improves by 5%，and the results keeps the same.
- Orginal： Total 28.19s , symGS time = 28.19*62.32% =17.568s
![symgsResult1](/uploads/7b0490eff481b9cf945de2ec4824bef9/symgsResult1.png)
- Modified: Total 27.39s , symGS time = 27.39*61.16% =16.75s
![symgsResult2](/uploads/1cfa3235edb4fae17fbffe39e5a52bf6/symgsResult2.png)
### 2.2 GAMGSolverSolve.C
Original code writes “ACf = Ax” together with “coarseSources -= ACF”. We can combine them together to get “coarseSources -=Ax”.
Furthermore, “ACF” is not used here. We can move the declaration of “ACF” to where it is needed. I think the declaration of ACF can be further simplified, which is done here.
The fusion and the move of the declaration will improve the performance (not much, but better than none) and reduce the kernel used.
### 2.3 PCG.C
The original PCG have three “Allreduce” procedure, which is the most time-consuming part when running large scale system. Note that the last “Allreduce” procedure is used to calculate the residual for convergence. Then we can move the last “Allreduce” procedure to the next iteration, and combine it with the first “Allreduce” procedure. The figure illustrates the aforementioned change.
![PCG](/uploads/3f289551df29e8425fe39809c828948a/PCG.png)
The proposed change is able to reduce iterNo/3 number of “Allreduce” process and iterNo number of “r” variable load at the cost of one more precondition. （iterNo：the number of iterations）
The proposed change will improve performance if
- run PCG for solving coarsest mesh.
- run PCG with preconditioner DIC/diagonal/none. (test with cavity512*512, Kunpeng 920 128cores, DIC preconditioned PCG)
- Orginal： Total 2.46s , shared memory MPI = 2.46*33.92% =0.83s
![PCGResult1](/uploads/1b9246942756e2ae021394605516f8f0/PCGResult1.png)
- Modified： Total 2.11s , shared memory MPI = 2.11*28.38% =0.6s
![PCGResult2](/uploads/33c64e8bd7f398a6557b80d29b9482f4/PCGResult2.png)
- run PCG with preconditioner GAMG with many cores or many iterations.Mark OLESENMark OLESENhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/602ENH: Coulomb: new particle electric force model calculating Coulomb forces2023-05-15T15:35:14ZKutalmış BerçinENH: Coulomb: new particle electric force model calculating Coulomb forces#### Problem
OpenFOAM lacked a Lagrangian model for electrostatic forces acting on particles based on their diameters.
#### Solution
The present commits furnish a model of this kind, along with essential underlying changes in the 'ele...#### Problem
OpenFOAM lacked a Lagrangian model for electrostatic forces acting on particles based on their diameters.
#### Solution
The present commits furnish a model of this kind, along with essential underlying changes in the 'electricPotential' function object for evaluating the electric field. The coupling is one way (for now).
#### Meta-data
* EP1880
* [x] `linux64ClangDPInt32Opt` (clang13)
* [x] `linux64GccDPInt32Opt`
* [x] `linux64GccSPDPInt64Debug`
* [x] Alltest: No new error/No change in existing output
* [x] No output change in all operating conditions except the following:
- The electric field is computed according to the new Boolean input `electricField` instead of `writeDerivedFields` toogle.Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/590ENH: wallDistAddressing: wall distance which stores addressing.2023-05-30T17:10:58ZMattijs Janssens4-Mattijs@users.noreply.develop.openfoam.comENH: wallDistAddressing: wall distance which stores addressing.### Summary
In some physical models the distance-to-the-nearest-wall is used which involves calculating the nearest wall face. Some models additionally use the normal at that nearest wall face ('reflection vector') or even non-geometry ...### Summary
In some physical models the distance-to-the-nearest-wall is used which involves calculating the nearest wall face. Some models additionally use the normal at that nearest wall face ('reflection vector') or even non-geometry data (e.g. y+ in the `vanDriest` LES delta model).
The normal algorithm uses the same method (`meshWave`) to transport both the originating face centre (to decide on the nearest) and any additional properties (normal, y+). The problem with this method is that any field-dependent data (e.g. y+) needs to go through the whole algorithm even though the geometry stays constant.
In this merge request there is a new wall distance calculation method which transports the originating face centres and addressing. This addressing can then be stored and used to get any value onto the internal field.
As a test the `pipeCyclic` tutorial case was modified. In the figures below black is the original geometry with a rotational cyclic from left to right. Orange is the original geometry transformed by 90 degrees to show the effect of the rotation. Pink is a new set of wall baffles (these are the only wall faces). The green lines are from the cell centres to the nearest wall. As can be seen the cells close to the left of the original geometry find their nearest on the transformed geometry.
![nearest](/uploads/1aec1f3dde66f4d73afbd7f1569daf4c/nearest.png)
Similar, visualising the normals shows that it takes the corresponding normals of the rotated geometry
![normals](/uploads/412703afc080d28b1d8d524224d59a96/normals.png)
### Resolved bugs (If applicable)
https://develop.openfoam.com/Development/openfoam/-/issues/2648
### Details of new models (If applicable)
- `wallDistAddressing::New` instead of `wallDist::New`
- stores distance `y()` and addressing (including transformations)
- contains helper functions to map data on selected patches onto internal field
- requires https://develop.openfoam.com/Development/openfoam/-/merge_requests/589 to have named MeshObjects (if e.g. distance to non-wall patches is to be stored)
- used in `vanDriest` `LESdelta`
- used in `meshWaveAddressing` wall-distance calculation. In `system/fvSchemes`:
```
wallDist
{
method meshWaveAddressing;
nRequired true;
}
```
- debugging : set DebugSwitches for `wallDistAddressing`:
- 1 : report number of untransformed and transformed wall faces
- 2 : dump `nearest.obj` file with lines/normals to/from nearest wall face
### Risks
- slightly different behaviour at y+ 500. Before it would never visit cells surrounded by cells with y+ 500. In this version it calculates y+ everywhere and truncates afterwards. In tests we have not seen any difference.
- requires additional storage for transformations (sized with the number of wall faces and number of transformations)
- transformation support is only tested for a single transformationMattijs Janssens4-Mattijs@users.noreply.develop.openfoam.comMattijs Janssens4-Mattijs@users.noreply.develop.openfoam.comhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/568Add spatial filtering and ensight support to MappedFile and external file source (#2609)2023-05-30T18:58:14ZMark OLESENAdd spatial filtering and ensight support to MappedFile and external file source (#2609)- Sampling from high resolution onto lower resolution surfaces adds spatial frequency aliasing.
- Adding a multi-sweep median filter helps alleviate this problem.
- Added support for EnSight format is useful, since it allows visual post-...- Sampling from high resolution onto lower resolution surfaces adds spatial frequency aliasing.
- Adding a multi-sweep median filter helps alleviate this problem.
- Added support for EnSight format is useful, since it allows visual post-processing results to also be reused for input.
Depends on !573v2212Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/600Restarting local agglomeration inside masterCoarsets processor agglomeration2023-06-01T08:19:07ZMattijs Janssens4-Mattijs@users.noreply.develop.openfoam.comRestarting local agglomeration inside masterCoarsets processor agglomeration### Summary
Continue agglomeration after master-coarsest processor agglomeration
### Details of new models (If applicable)
```
p
{
solver GAMG;
..
smoother GaussSeidel;
//- Local agglomeration paramet...### Summary
Continue agglomeration after master-coarsest processor agglomeration
### Details of new models (If applicable)
```
p
{
solver GAMG;
..
smoother GaussSeidel;
//- Local agglomeration parameters
nCellsInCoarsestLevel 1;
//- Processor-agglomeration parameters
processorAgglomerator masterCoarsest;
//- Indicate that local agglomeration needs to be restarted
nCellsInMasterLevel 1;
}
```
### Risks
- backwards compatible
- not extensively testedAndrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/595ENH: ParticleHistogram: refactor PatchParticleHistogram function object2023-06-01T08:24:31ZKutalmış BerçinENH: ParticleHistogram: refactor PatchParticleHistogram function object#### Summary
- enable 'faceZone' support for the function objects below.
- introduce 'cloudFunctionObjectTools' to simplify collection of particle info
on patches or face zones.
- enable 'writeFile' support to better control file outp...#### Summary
- enable 'faceZone' support for the function objects below.
- introduce 'cloudFunctionObjectTools' to simplify collection of particle info
on patches or face zones.
- enable 'writeFile' support to better control file output.
- rename 'PatchParticleHistogram' as 'ParticleHistogram', and 'PatchPostProcessing' as 'ParticlePostProcessing' for better clarity.
#### Resolved bugs
#1808
#### Risks
- User input:
- Names of FOs have been changed
- No change in existing output.
#### Meta-data
* EP2071
* [x] `linux64ClangDPInt32Opt` (clang13)
* [x] `linux64GccDPInt32Opt`
* [x] `linux64GccSPDPInt64Debug`
* [x] Alltest: No new error/No change in existing outputAndrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/606ENH: coupled: enforce consistency. See #27832023-06-01T08:25:57ZMattijs Janssens4-Mattijs@users.noreply.develop.openfoam.comENH: coupled: enforce consistency. See #2783### Summary
Make sure that constraints (processor, cyclic etc) are performed at all steps.
### Resolved bugs (If applicable)
#2783
### Details of new models (If applicable)
### Risks
Differing behaviour on interpolating patch ty...### Summary
Make sure that constraints (processor, cyclic etc) are performed at all steps.
### Resolved bugs (If applicable)
#2783
### Details of new models (If applicable)
### Risks
Differing behaviour on interpolating patch types (cyclic, cyclicAMI)Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/608Feature distributed DIC/DILU preconditioners2023-06-01T16:21:01ZMattijs Janssens4-Mattijs@users.noreply.develop.openfoam.comFeature distributed DIC/DILU preconditioners### Summary
The current DIC/DILU preconditioners operate on the local data only. This merge implements parallel versions of these using a processor-colouring strategy where data from lower coloured processors is included in the forward ...### Summary
The current DIC/DILU preconditioners operate on the local data only. This merge implements parallel versions of these using a processor-colouring strategy where data from lower coloured processors is included in the forward sweep and (data from) higher coloured processors in the backwards sweep. This generally leads to lower number of PCG sweeps so less global reductions at the cost of more halo swaps.
### Details of new models (If applicable)
Implements two new preconditioners: `distributedDIC` and `distributedDILU`. Both can be used in a top-level `PCG` or `PBiCGStab` solver or for the coarsest-level in `GAMG`:
```
p
{
solver GAMG;
// Explicit specify solver for coarse-level correction to override
// preconditioner
coarsestLevelCorr
{
solver PCG;
preconditioner distributedDIC;
}
}
```
### Risks
- for extreme decompositions (e.g. using `random`) might increase simulation time
- increased memory usage - allocates buffers for all remote data
- construction of preconditioners requires halo-swaps (for inverse of diagonal) so might not be cost-effective for low numbers of PCG sweeps
- communication pattern now has cross-overs - order of receiving is not the same as order of sending. Solved by using different message tags.
- effectiveness depends on cost of reduction v.s. halo-swapsAndrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/598ENH: forces: avoid redundant volumetric operations2023-06-06T07:29:08ZKutalmış BerçinENH: forces: avoid redundant volumetric operations#### Problem
It has been observed that employing the `forces` and `forceCoeffs` function objects in several simulations causes a slowdown ranging from 2 to 10%.
The culprits found were:
- Calculation of velocity gradient
- Redundant c...#### Problem
It has been observed that employing the `forces` and `forceCoeffs` function objects in several simulations causes a slowdown ranging from 2 to 10%.
The culprits found were:
- Calculation of velocity gradient
- Redundant calculations performed for various internal fields
#### Solution
- It is recommended to cache 'grad(U)' whenever using `forces` and `forcesCoeffs` function objects.
- The recent commits have eliminated unnecessary computations for the internal field of `devRhoReff`.
- Tests using the `simpleCar` tutorial ('grad(U)' was cached) produced the following 'profiling' figures:
![image](/uploads/c4b1c39cde976ad13cec2ee835523bf1/image.png)
- Tests using an industrial case ('grad(U)' was cached) reduced the `functionObjects.execute()` from ~72[s] to ~23[s].
#### Meta-data
* EP2065
* [x] `linux64ClangDPInt32Opt` (clang13)
* [x] `linux64GccDPInt32Opt`
* [x] `linux64GccSPDPInt64Debug`
* [x] Alltest: No new error/No change in existing output
* [x] No output change in all operating conditions (e.g. direct force intensity, porosity, compressible flows etc.)Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/611ENH: finiteArea: enable gradient caches2023-06-14T14:22:10ZKutalmış BerçinENH: finiteArea: enable gradient caches#### Summary
The gradient chaching functionality is enabled for the finite-area framework.
Example usage in `system/faSolution`:
```
cache
{ ...#### Summary
The gradient chaching functionality is enabled for the finite-area framework.
Example usage in `system/faSolution`:
```
cache
{
grad(h);
grad(Us);
}
```
#### Risks
- No change in existing input/output.
#### Metadata
- [x] linux64ClangDPInt32Opt (clang13)
- [ ] linux64GccDPInt32Opt
- [ ] linux64GccSPDPInt64Debug
- [ ] Alltest: No new error/No change in existing output
- [x] Test case: `$FOAM_TUTORIALS/finiteArea/liquidFilmFoam/cylinder`v2306Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/613ENH: sixDoF: add max/min angle constraints to the axis constraint2023-06-14T14:30:57ZKutalmış BerçinENH: sixDoF: add max/min angle constraints to the axis constraint#### Summary
The `axis` constraint imposes an orientation limitation where bodies
are restricted to rotate only around a fixed axis.
The set of commits optionally introduces the inclusion of maximum and
minimum rotation angle constrain...#### Summary
The `axis` constraint imposes an orientation limitation where bodies
are restricted to rotate only around a fixed axis.
The set of commits optionally introduces the inclusion of maximum and
minimum rotation angle constraints to the `axis` constraint.
##### Details
The following plot shows the rotation angle of the body modelled in "test-case.zip" with respect to the reference orientation. The inflow changes at t=2[s] and =4.5[s] to move the body in the opposite directions:
- Between t=0-2[s], the flow rotates the body in the clockwise direction. However, the body is limited by 0.15[rad] clockwise rotation wrt the ref orientation.
- Note that the ref orientation is at +0.25[rad] at t=0[s].
- Between t=2-4.5[s], the flow rotates the body in the counterclockwise direction. The body is limited to 0.05[rad] counterclockwise rotation wrt the ref orientation.
- Note that the body wants to rotate in the clockwise direction for sometime due to (I assume) some wake physics (or I need to reping the body to another point) between 3.5-4.5[s].
- Between t=4.5-8.5[s], the flow rotates the body in the clockwise direction, but this time, the rotation is limited to -0.1[rad] clockwise rotation.
<img src="/uploads/5a350ae505a61a12432a2011a3df377a/plot_theta_0.png" width="40%" height="40%">
#### Risks
- No change in existing input/output.
#### Metadata
- [x] linux64ClangDPInt32Opt (clang13)
- [ ] linux64GccDPInt32Opt
- [ ] linux64GccSPDPInt64Debug
- [ ] Alltest: No new error/No change in existing output
- [x] Test case: [test-case.zip](/uploads/42697e3e56b4f2faa249f7e5ebd5c976/test-case.zip)v2306Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/612ENH: PCG: cache preconditioner2023-06-15T12:33:27ZMattijs Janssens4-Mattijs@users.noreply.develop.openfoam.comENH: PCG: cache preconditionerAndrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/610ENH: specularRadiation: add axisymmetric fvDOM boundary condition2023-06-15T12:34:19ZKutalmış BerçinENH: specularRadiation: add axisymmetric fvDOM boundary condition#### Problem
The `fvDOM` radiation model of OpenFOAM is not
applicable to axisymmetric geometries, resulting
in:
- Increased computational costs,
- Complicated mesh generation,
- Reduced numerical stability.
#### Solution
Implement an...#### Problem
The `fvDOM` radiation model of OpenFOAM is not
applicable to axisymmetric geometries, resulting
in:
- Increased computational costs,
- Complicated mesh generation,
- Reduced numerical stability.
#### Solution
Implement and verify the axisymmetric `fvDOM`
boundary condition elaborated in:
- Kumar, P., & Eswaran, V. (2013). A methodology to
solve 2D and axisymmetric radiative transfer
problems using a general 3D solver. Journal of
heat transfer, 135(12).
#### Verification
Based on:
- Cai, J., & Modest, M. F. (2016). Specular reflective boundary conditions for Discrete Ordinate
Methods in Periodic or Symmetric Geometries. In Journal of Physics: Conference Series (Vol. 676, No. 1, p. 012002). IOP Publishing.
<img src="/uploads/6a1efc2fadb73e5baa91128df402be99/Screenshot_from_2023-06-02_14-32-25.png" width="40%" height="40%">
#### Risks
- No change in existing input/output.
- The predictions of the condition for the radial heat flux distribution on walls need to be improved.
#### Metadata
- Related: #855
- [x] linux64ClangDPInt32Opt (clang13)
- [ ] linux64GccDPInt32Opt
- [ ] linux64GccSPDPInt64Debug
- [x] Alltest: No new error/No change in existing output
- [x] Test cases: [MR610-02Jun2023-test.zip](/uploads/8f026406462b83fecce9b6bca36c4535/MR610-02Jun2023-test.zip)v2306Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/604Feature: Fan momentum source fvOption based on fan curve2023-06-16T08:17:46ZVuko VukcevicFeature: Fan momentum source fvOption based on fan curveAn `fvOption` that models a fan curve based momentum source.
- Calculates the flow rate through (automatically calculated) upstream faces of the cell zone
- Based on the flow rate, calculates the pressure gradient from the provided fan p...An `fvOption` that models a fan curve based momentum source.
- Calculates the flow rate through (automatically calculated) upstream faces of the cell zone
- Based on the flow rate, calculates the pressure gradient from the provided fan pressure curve and the thickness of the fan
- Adds the calculated pressure gradient momentum source to the equation
Example dictionary input:
```
fanModel
{
type fanMomentumSource;
active on;
selectionMode cellZone;
cellZone fanCellZone;
faceZone fanSurroundingFaceZone;
fanCurve
{
type table;
file "constant/fanCurve";
}
fields (U);
flowDir (1.0 0.0 0.0);
thickness 0.2;
rho 1;
}
```
Question: We have a small validation case of a flow through a pipe with a fan, that takes roughly 1 minute to calculate locally (for me). Would it be appropriate to add it to `tutorials` so that it's covered by `Alltest` script? Also, we have a small python script for asserting the calculated pressure gradient after the simulation finishes. Would it be ok to add that as well and make this run in your pipeline?v2306Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/614ENH: improve send/recv robustness in the presence of processorCyclic (#2814)2023-06-22T12:19:16ZMark OLESENENH: improve send/recv robustness in the presence of processorCyclic (#2814)Retains suppression of empty data sends without the order/synchronization problems previously seen when processorCyclic patches exist.Retains suppression of empty data sends without the order/synchronization problems previously seen when processorCyclic patches exist.v2306Mattijs Janssens4-Mattijs@users.noreply.develop.openfoam.comMattijs Janssens4-Mattijs@users.noreply.develop.openfoam.comhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/594Draft: use sparse storage and data exchange for PstreamBuffers2023-06-22T12:22:33ZMark OLESENDraft: use sparse storage and data exchange for PstreamBuffersChanges the PstreamBuffers storage to a Map of buffers and use NBX for exchanging sizes.Changes the PstreamBuffers storage to a Map of buffers and use NBX for exchanging sizes.v2306Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/588Draft: New renumbering based on Hamiltonian path2023-06-23T07:39:56ZAlon ZameretDraft: New renumbering based on Hamiltonian path### Summary
Included a new renumbering method called 'hpathRenumber' which reorder the mesh cells using an Hamiltonian path approach.
### Details of new models
Hamiltonian path is a path that traverses through the mesh faces and visi...### Summary
Included a new renumbering method called 'hpathRenumber' which reorder the mesh cells using an Hamiltonian path approach.
### Details of new models
Hamiltonian path is a path that traverses through the mesh faces and visits each cell exactly once. The Hamiltonian path approach tries to find such a path and renumber the mesh accordingly. This method ensures that after the mesh renumbering, consecutive cells in memory will likely share a common geometrical face. This in turn may allow for more efficient memory access and better vectorization performances when traversing the mesh.
![2D_Cylinder_Hpath](/uploads/90b36b3ca4136da32aaa93090c9300c0/2D_Cylinder_Hpath.png)
### Usage
Described below is the renumberMethodDict example used to apply Hamiltonian path renumbering:
```
method hpath;
hpathCoeffs
{
layered true;
}
```
The 'layered' argument (default true) controls whether the algorithm will separate the mesh cells into different 'layers' (otherwise, all cells are considered to be within the same layer). The layer separation approach is known to obtain better results and improved run-time for 3D cases, while 2D cases where a simpler Hamiltonian path may exist will benefit from avoiding the layer separation.
The algorithm will than try to find an Hamiltonian path traversing through all the cells sharing the same layer, and report the Hamiltonian path accuracy obtained.
The path accuracy is defined as the percentage of consecutive cells in the renumbered order that share a common face.v2312Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/587Draft: New decomposition method (multiNodeDecomp)2023-06-23T07:40:04ZAlon ZameretDraft: New decomposition method (multiNodeDecomp)### Summary
A new decomposition method 'multiNodeDecomp' which extends the capabilities of the multi-level decomposition method found within OpenFOAM while maintaining full backwards compatibility.
The multiNodeDecomp allow users contro...### Summary
A new decomposition method 'multiNodeDecomp' which extends the capabilities of the multi-level decomposition method found within OpenFOAM while maintaining full backwards compatibility.
The multiNodeDecomp allow users control over the properties of each node within the decomposition tree, as opposed to multi-level decomposition which supports level-based modifications.
### Details of new decomposition method
The multiNodeDecomp method adds the following capabilities:
1. Support decomposition to un-even nodes by changing the number of children of each node. For example:
```
multiNodeCoeffs {
method metis;
domains (3 4);
domains[0] (8);
}
```
In the example above, the mesh will be decomposed into 3 domains, where the first domain (domain[0]) will be further decomposed into 8 subdomains, while the remaining 2 domains will be decomposed into 4 subdomains only.
This will result in a total of 20 subdomains.
Note that the user passes a list value, which allows to have a different number of levels under different branches of the decomposition tree.
2. Simplified interface for decomposition weights - uniform/relative weight distribution may be used to initialize the weight of each node. The user may later overwrite any of the nodes weight.
```
weightsInitialization relative;
weight[0][3] 2;
```
'Uniform' initialization will recursively set all of the nodes weights to 1, while the 'Relative' initialization sets each nodes weight to the number of leaves in its decomposition subtree.
The weight of a node is then used during its parent's decomposition to control the sub-mesh size it will receive.
3. Modify the nodes decomposition method:
```
method[2] {
method scotch;
coeffs {
...
}
}
```
This will overwrite the method of the third subdomain of the root to use scotch and the given coefficients.
### Syntax
multiNodeDecomp supports setting the decomposition properties above on a level scope (parameter[] value) or on a node scope (parameter[#nodeIndex] value).
The square brackets indicate indices of the children we want to modify (0 based indexing). The user may specify ranges by using a hyphen ([0-3]) or specifying all of the children by using empty brackets ([]).v2312Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/609ENH: turbulentTemperatureRadCoupledMixed: add postprocessing elements2023-06-28T15:35:56ZKutalmış BerçinENH: turbulentTemperatureRadCoupledMixed: add postprocessing elements#### Summary
Two postprocessing elements were added into the `turbulentTemperatureRadCoupledMixed` BC:
- Add the `writeFile` functionality.
- Enable the calculation of heat-transfer coefficient fields.
#### Risks
- No change in existi...#### Summary
Two postprocessing elements were added into the `turbulentTemperatureRadCoupledMixed` BC:
- Add the `writeFile` functionality.
- Enable the calculation of heat-transfer coefficient fields.
#### Risks
- No change in existing input.
- Two new optional keywords: `logInterval` and `verbose` (see the header file.)
- No change in existing output.
#### Metadata
- [x] linux64ClangDPInt32Opt (clang13)
- [ ] linux64GccDPInt32Opt
- [ ] linux64GccSPDPInt64Debug
- [x] Alltest: No new error/No change in existing output
- [x] Test case: [MR608-02Jun2023-test.zip](/uploads/4882c4cf357845300397bdc02efe54c5/MR608-02Jun2023-test.zip)v2306Andrew HeatherAndrew Heatherhttps://develop.openfoam.com/Development/openfoam/-/merge_requests/615ENH: snappyHexMesh: write leak-closure faces2023-07-19T11:58:11ZMattijs Janssens4-Mattijs@users.noreply.develop.openfoam.comENH: snappyHexMesh: write leak-closure faces### Summary
Dump leak closure faces (when using automatic leak closing) to postProcessing file
### Details of new models (If applicable)
Optional snappyHexMeshDict entry:
```
// Format to use for surfaces. E.g. leak-closure faces. Def...### Summary
Dump leak closure faces (when using automatic leak closing) to postProcessing file
### Details of new models (If applicable)
Optional snappyHexMeshDict entry:
```
// Format to use for surfaces. E.g. leak-closure faces. Default is vtk format.
surfaceFormat vtk;
```Mattijs Janssens4-Mattijs@users.noreply.develop.openfoam.comMattijs Janssens4-Mattijs@users.noreply.develop.openfoam.com