Variadic constructors have been added to dictionary to facilitate
convenient construction in code, including within a #codeStream entry.
The constructors take an even number of arguments, alternating between
the key and the corresponding value. The values may, themselves, be
dictionaries constructed in the same way. This means that the code
directly maps to the resulting nested dictionary structure.
For example, the following code stream entry:
#codeStream
{
code
#{
writeEntry
(
os,
"dict",
dictionary
(
"s", 1,
"wl", wordList({"apples", "oranges"}),
"subDict", dictionary
(
"v", vector(2, 3, 4),
"t", tensor(5, 6, 7, 8, 9, 10, 11, 12, 13),
"ll", labelList(10, -1)
)
)
);
#};
}
Expands to the following:
dict
{
s 1;
wl 2 ( apples oranges );
subDict
{
v ( 2 3 4 );
t ( 5 6 7 8 9 10 11 12 13 );
ll 10 { -1 };
}
}
setFormat no longer defaults to the value of graphFormat optionally set in
controlDict and must be set in the functionObject dictionary.
boundaryFoam, financialFoam and pdfPlot still require a graphFormat entry in
controlDict but this is now read directly rather than by Time.
the -solver option also disables the default loading of all libraries, instead
loading just the specified solver module library and dependencies.
It is generally more useful to load all the libraries when searching for model,
boundary condition etc. rather than having to list specific libraries to search
unless only the contents of the standard libraries loaded into a solver module
are to be searched, in which case the -solver option can be used.
With
executeControl runTimes;
executeTimes (0.1 0.2 0.3);
the functionObject will be executed at 0.1s, 0.2s and 0.3s only.
With
writeControl runTimes;
writeTimes (0.1 0.2 0.3);
the functionObject will write at 0.1s, 0.2s and 0.3s only.
The parcelsPerSecond control can now be specified as a time-varying
function. This provides additional control over the temporal
distribution of injected parcels, which may be advantageous if, for
example, the mass flow rate varies significantly. It also enables
variable flow rates of particulates in cases which have a fixed number
of particles per parcel.
for cases started or restarted from some arbitrary time without a corresponding
<time>/uniform/time dictionary to set the beginTime to the logical start of the
simulation. Setting beginTime to 0 for example ensures that write times,
functionObject evaluations and writes etc. occur at intervals starting from 0
rather than the arbitrary startTime.
Description
fvMeshTopoChanger which maps the fields to a new mesh or sequence of meshes
which can optionally be mapped to repeatedly for example in multi-cycle
engine cases or cycled through for symmetric forward and reverse motion.
Usage
\table
Property | Description | Required | Default value
libs | Libraries to load | no |
times | List of times for the meshes | yes |
repeat | Repetition period | no |
cycle | Cycle period | no |
begin | Begin time for the meshes | no | Time::beginTime()
timeDelta | Time tolerance used for time -> index | yes |
\endtable
Examples of the mesh-to-mesh mapping for the multi-cycle
tutorials/incompressibleFluid/movingCone case:
\verbatim
topoChanger
{
type meshToMesh;
libs ("libmeshToMeshTopoChanger.so");
times (0.0015 0.003);
cycle #calc "1.0/300.0";
begin 0;
timeDelta 1e-6;
}
\endverbatim
This can be useful when reusing thermo configurations across multiple
setups. In one simulation, the fluid might be entirely air, and in
another there might be additional pollutant or fuel species. This could
be defined without changing the species' thermo enties as follows:
"(mixture|air)"
{
specie
{
molWeight 28.9;
}
thermodynamics
{
Hf 0;
Cv 724.8;
}
transport
{
mu 1.84e-05;
Pr 0.7;
}
}
This was semi-supported before, but it lead to the wrong name (i.e., the
wildcard string) being stored in the base specie class. Now the name is
passed through the thermo constructors, so it is always correct.
Class
Foam::functionObjects::checkMesh
Description
Executes primitiveMesh::checkMesh(true) every execute time for which the
mesh changed, i.e. moved or changed topology.
Useful to check the correctness of changing and morphing meshes.
Example of checkMesh specification:
\verbatim
checkMesh
{
type checkMesh;
libs ("libutilityFunctionObjects.so");
executeControl timeStep;
executeInterval 10;
}
\endverbatim
or using the standard configuration file:
\verbatim
#includeFunc checkMesh(executeInterval=10)
\endverbatim
Can be used with any solver supporting mesh-motion, in particular the movingMesh
solver module, to check the mesh quality following morphing and/or topology
change.
to avoid the need to call predict() in the constructor and ensure they are
available when required between mesh change and predict().
Also instantiated Fickian and MaxwellStefan multicomponent diffusion models for
multiphaseEuler.
e.g. the simple exact match search
foamToC -allLibs -search VoFTurbulenceDamping
generates:
VoFTurbulenceDamping is in table
fvModel libVoFTurbulenceDamping.so
but the regular expression search
foamToC -allLibs -search "VoF.*"
generates the results for all names in all tables containing the sub-string "VoF":
VoFCavitation is in table
fvModel libVoFCavitation.so
VoFSolidificationMeltingSource is in table
fvModel libVoFSolidificationMeltingSource.so
VoFClouds is in table
fvModel libVoFClouds.so
VoFFilmTransfer is in table
fvModel libfilmVoFTransfer.so
VoFTurbulenceDamping is in table
fvModel libVoFTurbulenceDamping.so
If the libs entry is not provided and the name of the library containing the
functionObject, fvModel or fvConstraint corresponds to the type specified the
corresponding library is automatically loaded, e.g. to apply the
VoFTurbulenceDamping fvModel to an incompressibleVoF simulation the following
will load the libVoFTurbulenceDamping.so library automatically and instantiate
the fvModel:
turbulenceDamping
{
type VoFTurbulenceDamping;
delta 1e-4;
}