Specifying a plane with which to subset feature edges is now done using
the same dictionary syntax used elsewhere in OpenFOAM. For example, in
system/surfaceFeaturesDict:
subsetFeatures
{
// Include only edges that intersect the plane
plane
{
planeType pointAndNormal;
point (0 0 0);
normal (1 0 0);
}
...
}
The "full" filtering option in isoSurface now no longer attempts to
remove non-manifold faces. As a result, this filtering level is now
robust, but it may leave small imperfections in the surface. This has
been reinstated as the default filtering level as it has advantageous
properties over "partial" filtering in both smoothness of visualisation
and in the size of the files it generates.
A new "clean" level has been added, which does try and remove
imperfections. This is equivalent to the previous operation of the
"full" option. This is not guaranteed to be robust. In certain
configurations the removal process can propagate and delete an entire
section of the surface.
Usage
\table
Property | Description | Required | Default value
type | Type name: forces | yes |
log | Write force data to standard output | no | no
patches | Patches included in the forces calculation | yes |
p | Pressure field name | no | p
U | Velocity field name | no | U
rho | Density field name (see below) | no | rho
phase | Phase name for phase-fraction | no |
CofR | Centre of rotation (see below) | no |
directForceDensity | Force density supplied directly (see below)|no|no
fD | Name of force density field (see below) | no | fD
\endtable
with the optional 'phase' entry the corresponding phase-fraction is used to
filter the surfaces forces for that phase.
The "full" filtering option has been found not to be sufficiently
robust. It erroneously removes entire contiguous sections of the
iso-surface in a number of situations. Full filtering can still be
enabled by specifying "filtering full;" in the relevant dictionary.
This source choses cells below a certain distance to a patch or a set of
multiple patches:
Example Usage in system/topoSetDict:
actions
(
{
name c0;
type cellSet;
action new;
source patchDistanceToCell;
sourceInfo
{
patch ".*Wall";
distance 0.1;
}
}
);
Example usage in system/setFieldsDict:
defaultFieldValues
(
volScalarFieldValue alpha.water 0
);
regions
(
patchDistanceToCell
{
patches (".*Wall" atmosphere);
distance 0.1;
fieldValues
(
volScalarFieldValue alpha.water 1
);
}
);
The paper of Prince and Blanch (1996) contains an error in equation (2),
which computes the collision cross-sectional area and should be using
the bubble diameter rather than the radius. This error also extends to
equation (8) where the coefficient is wrong by a factor of 4. The
current code is correct, but the documentation was still referring to
the wrong coefficient.
Patch contributed by Institute of Fluid Dynamics,
Helmholtz-Zentrum Dresden - Rossendorf (HZDR)
interRegionExplicitPorositySource: Removed the unnecessary and inappropriate
bidirectional mapping of data between the regions sharing the porous media. Now
the drag is calculated on the same mesh as the flow and filtered according to
the fraction of the cells containing porosity.
To complete this work a small change will be made to the mesh-mapping functions.
reactingFoam and multiphaseEulerFoam can now both be run with the
frozenFlow switch and multiple outer correctors. This makes their
behaviour consistent with the frozenFlow implementation in
chtMultiRegionFoam.
The previous changes to reactions mean that caching the surface area
density field is no longer necessary. The diameter models have had their
caching functionality removed, which has simplified both the
implementation and the user interface.
A modified Arrhenius reaction rate given by:
k = (A * T^beta * exp(-Ta/T))*a
Where a is the phase surface area per unit volume. The name of the phase is
specified by the user.
Example usage:
oxidationAtSurface
{
type irreversiblePhaseSurfaceArrhenius;
reaction "O2^0 + TiCl4 = TiO2_s + 2Cl2";
A 4.9e1; // The pre-exponential factor is in units
// equal to that in the usual volumetric
// reaction rate **divided by length**, as
// the Arrhenius expression is taken to give
// rate per unit area, not per unit volume
beta 0.0;
Ta 8993;
phase particles;
}
This reaction has been applied to the titaniaSynthesisSurface tutorial,
which avoids the need for explicit caching of the surface area density
field.
This provides the same behaviour as the assign operator, but with
certain checks removed as they do not apply when the source tmp is an
rvalue and will therefore not be retained after the assignment
operation. It is also consistent with and complimentary to the behaviour
of the move constructor.
This function gives a value of one during a user-specified duration, and
zero at all other times. It is useful for defining the time range in
which an injection or ignition heat source or similar operates.
Example usage, scaling a value:
<name>
{
type scale;
scale squarePulse;
start 0;
duration 1;
value 100;
}
This function has been utilised in a number of tutorial fvOption
configurations to provide a specific window in which the fvOption is
applied. This was previously achieved by "timeStart" and "duration"
controls hard coded into the fvOptions themselves.
This fvOption applies a mass source to the continuity equation and to
all field equations.
Example usage:
massSource
{
type massSource;
selectionMode cellSet;
cellSet massSource;
massFlowRate 1e-4;
fieldValues
{
U (10 0 0);
T 350;
k 0.375;
epsilon 14.855;
}
}
Values should be provided for all solved for fields. Warnings will be
issued if values are not provided for fields for which transport equations
are solved. Warnings will also be issued if values are provided for fields
which are not solved for.
A number of fvOptions that apply to a user-derined field can now
automatically work what primitive type they apply to. These options can
apply to any field type, and in some cases even multiple fields of
differing type. Example usage of the options to which this change
applies are shown below:
codedSource1
{
type codedSource;
name codedSource1;
field h;
...
}
fixedValueConstraint1
{
type fixedValueConstraint;
fieldValues
{
R (1 0 0 1 0 1);
epsilon 150;
}
...
}
phaseLimitStabilization11
{
type phaseLimitStabilization;
field sigma.liquid;
...
}
Previously to apply to a given type, these options had to be selected
with the name of the type prepended to the option name (e.g., "type
symmTensorPhaseLimitStabilization;") and those that operated on multiple
fields were restricted to those fields being of the same type.
A number of other options have had improvements made to their handling
of user specification of fields. Where possible, the option will now
attempt to work out what field the option applies to automatically. The
following options, therefore, no longer require "field" or "fields"
entries:
actuationDiskSource
buoyancyEnergy
buoyancyForce
meanVelocityForce
rotorDiskSource
volumeFractionSource
constantHeatTransfer
function2HeatTransfer
variableHeatTransfer
Non-standard field names can be overridden in the same way as in
boundary conditions; e.g., the velocity name can be overridden with a "U
<UName>;" entry if it does not have the default name, "U". The name of
the energy field is now always determined from the thermodynamics
model and should always be correct. Some options that can be applied to
an individual phase also support a "phase <phaseName>;" entry;
fvOptions field-name handling has been rewritten to increase its
flexibility and to improve warning messages. The flexibility now allows
for options that apply to all fields, or all fields of a given phase,
rather than being limited to a specific list of field names. Messages
warning about options that have not been applied now always print just
once per time-step.
The injection models do not inject parcels into the film they specifically eject
parcels from the film and the name "injection" is very confusing and misleading
hence the logical rename injection -> ejection.
Vertices are generated using run time compilation functionality.
File duplication avoided by placement in:
tutorials/resources/blockMesh/sloshingTank2D
tutorials/resources/blockMesh/sloshingTank3D