- Jun 15, 2022
-
-
Mark OLESEN authored
TUT: remove paraFoam hints from tutorials (mostly only need paraview now) STYLE: remove reference to paraview _SM plugins (OpenFOAM-v1912 and earlier)
-
-
Mark OLESEN authored
BUG: inconsistent "U" name on re-read (buoyancyEnergy) STYLE: fix spelling inconsistencies
-
- Jun 14, 2022
-
-
Mark OLESEN authored
-
Mark OLESEN authored
-
Mark OLESEN authored
- for tracing tutorials execution
-
Mark OLESEN authored
ENH: setTurbulenceFields: new automatic initialisation method for turbulence fields See merge request !545
-
TUT: cylinder: fix the order in Allclean
-
-
Andrew Heather authored
species and heat adsorption BC's and fvOption source See merge request !548
-
-
-
speciesSorption is a zeroGradient BC which absorbs mass given by a first order time derivative, absoprtion rate and an equilibrium value calculated based on internal species values next to the wall. patchCellsSource is a source fvOption which applies to the corresponding species and apply the source calculated on the speciesSorption BC. A new abstract virtual class was created to group BC's which don't introduce a source to the matrix (i.e zeroGradient) but calculate a mass sink/source which should be introduced into the matrix. This is done through the fvOption patchCellsSource.
-
- Jun 13, 2022
-
-
Mark OLESEN authored
-
Mark OLESEN authored
-
Andrew Heather authored
-
Andrew Heather authored
-
mattijs authored
-
Andrew Heather authored
support surface writer output transform (#2505) See merge request !549
-
- this allows the "relocation" of sampled surfaces. For example, to reposition into a different coordinate system for importing into CAD. - incorporate output scaling for all surface writer types. This was previously done on an adhoc basis for different writers, but with now included in the base-level so that all writers can automatically use scale + transform. Example: formatOptions { vtk { scale 1000; // m -> mm transform { origin (0.05 0 0); rotation axisAngle; axis (0 0 1); angle -45; } } }
-
- Jun 10, 2022
-
-
Mark OLESEN authored
-
Mark OLESEN authored
-
Mark OLESEN authored
-
Andrew Heather authored
ENH: adjoint code review See merge request !518
-
Necessary when grad(Ua) is cached
-
Partially fixes #2502 (see discussion there)
-
in RASModelVariables were doing this by checking whether the corresponding pointer was allocated. In some cases, however, even if the field does not exist, the pointer is not null, leading to the wrong output. Made the correspding functions virtual and overwritten their return values in the derived classes. Kept the initial implementation in base to facilitate the clone function.
-
in cases with more than one primal or adjoint solvers TUT: removed all occurances of useSolverNameForFields from the optimisation tutorials since it is now set automatically.
-
-
to be in line with the changes in 00f46a2c52 and added the same tutorial which performs the optimisation in one-go, for comparison.
-
volBSplinesBase const, since the no private/protected variable is changed there.
-
in the sensitivity patches, symmetry::evaluate() needs access to the internalField which does exist, leading to wrong memory access. Fixed by specifying a calculated type fvPatchField for all patches when creating a boundaryField<Type> Using a symmetry(Plane) as a sensitivity patch is quite rare and borderline wrong, but this provides a fix nonetheless.
-
The multiplier of grad(dxdb) is a volTensorField which, by itself, is memory consuming. The function computing it though was sloppy in terms of memory management, constituting the peak memory consumption during an adjoint optimisation. Initial changes to remedy the problem include the deallocation of some of the volTensorFields included in the computation of grad(dxdb) once unneeded, the utilisation of volSymmTensorFields instead of volTensorFields where possible and avoiding allocating some unnecessary intermediate fields. Actions to further reduce memory consumption: - For historical reasons, the code computes/stores the transpose of grad(dxdb), which is then transposed when used in the computation of the FI or the ESI sensitivity derivatives. This redundant transposition can be avoid, saving the allocation of an additional volTensorField, but the changes need to permeate a number of places in the code that contribute to grad(dxdb) (e.g. ATC, adjoint turbulence models, adjoint MRF, etc). - Allocation of unnecessary pointers in the objective class should be avoided.
-
- ATCstandard, ATCUaGradU: the ATC is now added as a dimensioned field and not as an fvMatrix to UaEqn. This get rid of many unnecessary allocations. - ATCstandard: gradU is cached within the class to avoid its re-computation in every adjoint iteration of the steady state solver. - Inlined a number of functions within the primal and adjoint solvers. This probably has a negligible effect since they likely were inlined by the compiler either way. - The momentum diffusivity at the boundary, used by the adjoint boundary conditions, was computed for the entire field and, then, only the boundary field of each adjoint boundary condition was used. If many outlet boundaries exist, the entire nuEff field would be computed as many times as the number of boundaries, leading to an unnecessary computational overhead. - Outlet boundary conditions (both pressure and velocity) use the local patch gradient to compute their fluxes. This patch gradient requires the computation of the adjacent cell gradient, which is done on the fly, on a per patch basis. To compute this patch adjacent gradient however, the field under the grad sign is interpolated on the entire mesh. If many outlets exist, this leads to a huge computational overhead. Solved by caching the interpolated field to the database and re-using it, in a way similar to the caching of gradient fields (see fvc::grad). WIP: functions returning references to primal and adjoint boundary fields within boundaryAdjointContributions seem to have a non-negligible overhead for cases with many patches. No easy work-around here since these are virtual and cannot be inlined. WIP: introduced the code structure for caching the contributions to the adjoint boundary conditions that depend only on the primal fields and reusing. The process needs to be completed and evaluated, to make sure that the extra code complexity is justified by gains in performance.
-
from the equivalent entry of the primal eikonal equation solver, unless specified in the corresponding adjoint dictionary.
-
is now appended by the name of the adjoint solver, if more than one exist. This was necessary for an accurate continuation since, before these changes, only the ma field of the last solver was written. As a result, when restarting the first adjoint solver was reading the ma field of the last one. No changes are needed in fvSolution and fvSchemes w.r.t. the previous code version.
-
as a step towards machine-accuracy continuation of the optimisation loop. Additionally, control points are now written under the time/uniform folder, to be in-line with rest of the code structure for continuation. As a side-effect, the controlPointsDefinition in constant/dynamicMeshDict does not need to be changed to 'fromFile' anymore in order to perform the continuation. The 'fromFile' option is still valid if the user wants to supply the control points manually but, as with all other controlPointsDefinitions, it will be disregarded if the proper file exists under the time/uniform/volumetricBSplines folder.
-
Before the commit, the sensitivity classes were receiving references of the (incompressible) primal and adjoint variables. However, if additional physics was added (energy equation, multiphase, etc), the infrastructure wasn't convenient for accommodating (new terms in the FI and E-SI formulations, new terms in the sensitivity map, etc). Now, the sensitivity classes receive a reference to an incompressibleAdjointSolver and receive the terms for the FI and sensitivity maps through there. The latter is still WIP. Modified adjointSimple to incorporate these changes as well.
-
Each solver now writes its sensitivity derivatives to its dictionary, enabling also a binary format. If present, the sensitivities are then re-read from the dictionary, avoiding thus possible loss of information due to re-computation. As a side-effect, sensitivities are computed after the completion of each adjoint solver, instead of being computed after all adjoint solvers have been completed.
-
- computation of lift sensitivity derivatives for the NACA0012 airfoil - optimisation of an s-bend duct for min. total pressure losses
-