It is better to not select and instantiate a model, fvOption etc. than to create
it and set it inactive as the creation process requires reading of settings,
parameters, fields etc. with all the associated specification and storage
without being used. Also the incomplete implementation added a lot of
complexity in the low-level operation of models introducing a significant
maintenance overhead and development overhead for new models.
The convoluted separate ".*Coeffs" dictionary form of model coefficient
specification is now deprecated and replaced with the simpler sub-dictionary
form but support is provided for the deprecated form for backward comparability.
e.g.
thermophysicalProperties
{
type liquid;
useReferenceValues no;
liquid H2O;
}
rather than
filmThermoModel liquid;
liquidCoeffs
{
useReferenceValues no;
liquid H2O;
}
and
forces
{
thermocapillary;
distributionContactAngle
{
Ccf 0.085;
distribution
{
type normal;
normalDistribution
{
minValue 50;
maxValue 100;
expectation 75;
variance 100;
}
}
zeroForcePatches ();
}
}
rather than
forces
(
thermocapillary
distributionContactAngle
);
distributionContactAngleCoeffs
{
Ccf 0.085;
distribution
{
type normal;
normalDistribution
{
minValue 50;
maxValue 100;
expectation 75;
variance 100;
}
}
zeroForcePatches ();
}
All the tutorial cases containing a surface film have been updated for guidance,
e.g. tutorials/lagrangian/buoyantReactingParticleFoam/hotBoxes/constant/surfaceFilmProperties
surfaceFilmModel thermoSingleLayer;
regionName wallFilmRegion;
active true;
thermophysicalProperties
{
type liquid;
useReferenceValues no;
liquid H2O;
}
viscosity
{
model liquid;
}
deltaWet 1e-4;
hydrophilic no;
momentumTransport
{
model laminar;
Cf 0.005;
}
forces
{
thermocapillary;
distributionContactAngle
{
Ccf 0.085;
distribution
{
type normal;
normalDistribution
{
minValue 50;
maxValue 100;
expectation 75;
variance 100;
}
}
zeroForcePatches ();
}
}
injection
{
curvatureSeparation
{
definedPatchRadii
(
("(cube[0-9][0-9]_side[0-9]_to_cube[0-9][0-9]_side[0-9])" 0)
);
}
drippingInjection
{
cloudName reactingCloud1;
deltaStable 0;
particlesPerParcel 100.0;
parcelDistribution
{
type RosinRammler;
RosinRammlerDistribution
{
minValue 5e-04;
maxValue 0.0012;
d 7.5e-05;
n 0.5;
}
}
}
}
phaseChange
{
model standardPhaseChange;
Tb 373;
deltaMin 1e-8;
L 1.0;
}
upperSurfaceModels
{
heatTransfer
{
model mappedConvectiveHeatTransfer;
}
}
lowerSurfaceModels
{
heatTransfer
{
model constant;
c0 50;
}
}
It is more logical to use wordRe rather than keyType for name-based selection
including regular expression support as keyType now support other forms of
dictionary keyword including function and variable names which are not
relevant for selecting zones by name.
TableBase, TableFile and Table now combined into a single simpler Table class
which handle both the reading of embedded and file data using the generalised
TableReader. The new EmbeddedTableReader handles the embedded data reading
providing the functionality of the original Table class within the same
structure that can read the data from separate files.
The input format defaults to 'embedded' unless the 'file' entry is present and
the Table class is added to the run-time selection table under the name 'table'
and 'tableFile' which provides complete backward comparability. However it is
advisable to migrate cases to use the new 'table' entry and all tutorial cases
have been updated.
using Function1 and supporting all the standard Function1s including tabulated
and coded.
tutorials/multiphase/interFoam/laminar/sloshingTank3D6DoF updated to use
sixDoFMotion.
The interpolationLookUpTable is highly specialised for absorptionEmissionModels
which did not need to be templated and is now located in the appropriate
directory and namespace.
The current rough wall functions cover most requirements and there is no clear
need to maintain nutUTabulatedWallFunctionFvPatchScalarField and associated
clutter.
to improve robustness and maintainability. Now all switches and constants are
set correctly on constructions without the need for dynamic update after the
system/controlDict is read. This significantly simplifies the code and make it
much easier to add new switches, constants and settings without the need to
ensure they are registered to a database for update.
Moved the switch and constant reading functionality from TimeIO to more rational
locations.
Added registration of InfoSwitches which are not run-time controlled by other
means.
This avoids attempting to write temporary fields before they have been created.
The executeAtStart can be set to 'yes' in the writeObjects dictionary or the
functions
{
#includeFunc writeObjects(executeAtStart = yes, <field1>, <field2>...)
}
Temporary fields returned from functions which are then reused by the calling
function can now be cached by declaring them as non-reusable to guarantee their
integrity. *Field::New functions have been updated to use this new
functionality and it is recommended to use these functions to create temporary
fields rather than "new *Field".
It is now possible to define coordinate systems in a central location and
selected them by name for any model requiring one, e.g. the
explicitPorositySource.
Description
Provides a centralized coordinateSystem collection.
For example with the porous region specified in \c constant/fvOptions as
\verbatim
porosity
{
type explicitPorositySource;
explicitPorositySourceCoeffs
{
selectionMode cellZone;
cellZone porousBlockage;
type DarcyForchheimer;
// D 100; // Very little blockage
// D 200; // Some blockage but steady flow
// D 500; // Slight waviness in the far wake
D 1000; // Fully shedding behavior
d ($D $D $D);
f (0 0 0);
coordinateSystem porousBlockage;
}
}
\endverbatim
the corresponding coordinate system \c porousBlockage is looked-up
automatically from the \c constant/coordinateSystems dictionary:
\verbatim
porousBlockage
{
type cartesian;
origin (0 0 0);
coordinateRotation
{
type axesRotation;
e1 (1 0 0);
e2 (0 1 0);
}
}
\endverbatim
See \c tutorials/incompressible/pisoFoam/laminar/porousBlockage