Commit Graph

6979 Commits

Author SHA1 Message Date
c2552978a3 snappyHexMeshConfig: utility to preconfigure input files for snappyHexMesh,
including blockMeshDict, surfaceFeaturesDict and snappyHexMeshDict, based on the
case surface geometry.

Description
    Preconfigures blockMeshDict, surfaceFeaturesDict and snappyHexMeshDict
    files based on the case surface geometry files.

    Starting from a standard OpenFOAM case, this utility locates surface
    geometry files, e.g. OBJ, STL format, in the constant/geometry directory.
    It writes out the configuration files for mesh generation with
    snappyHexMesh based on assumptions which can be overridden by options on
    the command line.

    The utility processes the surface geometry files, attempting to anticipate
    their intended purpose, trying in particular to recognise whether the
    domain represents an external or internal flow. If there is a surface
    which is closed, and is either single or surrounds all other surfaces,
    then it is assumed that it forms the external boundary of an internal
    flow. This assumption is overridden if the bounds of the background mesh
    are specified using the '-bounds' option and they are more than 50% larger
    than the surface bounds.

    Surfaces which form boundaries of the domain may contain named regions
    that are intended to become patches in the final mesh. Any surface region
    whose name begins with 'inlet' or 'outlet' will become a patch of the same
    name in the final mesh. On an external surface (for an internal flow),
    regions can be identified as inlets and outlets using the '-inletRegions'
    and '-outletRegions' options, respectively. When either option specifies a
    single region, the resulting patch name will be specifically 'inlet' or
    'outlet', respectively. Surfaces which are contained within the domain,
    which do not surround or intersect other surfaces, are assumed by default
    to be wall patches. Any closed surface which surrounds another (but not an
    external surface) is used to form a cellZone within the mesh. Any surface
    can be specifically identified as a cellZone with the '-cellZones' option,
    with the additional '-baffles' and '-rotatingZones' options available to
    assign a surface to a more specific use.

    The background mesh for snappyHexMesh is a single block generated by
    blockMesh, configured using a blockMeshDict file. The block bounds are
    automatically calculated, but can be overridden by the '-bounds'
    option. The number of cells is calculated to produce a fairly small
    prototype mesh. The cell density can be overridden by the '-nCells' option
    or can be scaled up by an integer factor using the '-refineBackground'
    option. When the background mesh is required to form patches in the final
    mesh, e.g. for an external flow, the user can specify the names and types
    of the patches corresponding to the six block faces using options such as
    '-xMinPatch', '-xMaxPatch', etc. The name and type of the default patch,
    formed from block faces which are not configured, can also be specified
    with the '-defaultPatch' option. The utility provides placeholder entries
    for all block faces unless the '-clearBoundary' option is used. A special
    '-cylindricalBackground' option generates a cylindrical background mesh,
    oriented along the z-axis along x = y = 0.

    The snappyHexMesh configuration is generated automatically, applying a set
    of defaults to the main configuration parameters. By default, explicit
    feature capturing is configured, for which a surfaceFeaturesDict file is
    written for the user to generate the features files with the
    surfaceFeatures utility. Implicit feature capturing can alternatively be
    selected with the '-implicitFeatures' option. Refinement levels can be
    controlled with a range of options including: '-refinementLevel' for the
    baseline refinement level; '-refinementSurfaces' for levels on specific
    surfaces; '-refinementRegions' for levels inside specific surfaces;
    '-refinementBoxes' for quick, box-shaped refinement regions specified by
    min and max bounds; '-refinementDists' for distance-based refinement; and
    '-nCellsBetweenLevels' to control the transition between refinement
    levels. A '-layers' option specifies additional layers of cells at wall
    boundaries. The insidePoint parameter is set to '(0 0 0)' by default but
    can be overridden using the '-insidePoint' option.
20230707
2023-07-07 12:32:14 +01:00
e7f75df23f coolingSphere tutorial: update for consistency with singleFluidCHT template case 2023-07-07 12:06:50 +01:00
d0183af829 templates/singleFluidCHT: updated for CHT with modular solvers 2023-07-07 12:05:54 +01:00
441b60c70d functionEntries::calcEntry: Extended the functionality of multi-statement/multi-line #calc
If the code string is delimited by '#{...#}' multiple lines and multiple code
statements can be used to generate the entry using 'os << ...;'.  This is
equivalent to #codeStream but with a more compact syntax, e.g.

maxAngle        30;
nAngles         7;
Us              #calc
    const vector U($<vector>testCalc2!U);
    const int nAngles = $nAngles;
    const scalar angleStep = ($<scalar>maxAngle)/(nAngles - 1);
    List<vector> Us(nAngles);
    for(int i=0; i<nAngles; i++)
    {
        const scalar angle = degToRad(i*angleStep);
        Us[i] = transform(Ry(angle), U);
    }
    os << Us;

Note the 'os << Us;' statement which writes the data to the dictionary entry in
the same manner as #codeStream, this provides flexibility on how the data is
created and written.
2023-07-06 23:11:36 +01:00
62998bb161 Merge branch 'master' of github.com-OpenFOAM:OpenFOAM/OpenFOAM-dev 2023-07-06 23:07:55 +01:00
e0fddef530 foamDictionary: Corrected documentation formatting for Doxygen 2023-07-06 23:07:31 +01:00
d4dbc177df etc/templates: correct rotating geometry templates,
including the rotating BC for velocity and deactivating dynamicMesh by default
2023-07-06 18:53:23 +01:00
431467d305 etc/templates: update to apply flowRateInletVelocity
with constant meanVelocity at the inlet patch
2023-07-06 18:34:57 +01:00
bd52f8c1a5 flowRateInletVelocityFvPatchVectorField: Avoid writing rho if not required 2023-07-06 18:21:32 +01:00
36f5a4daa4 stringOps::inplaceExpandCodeString: Now generates a detailed error message
if the variable type is not specified and cannot be deduced from the value.
2023-07-06 16:07:16 +01:00
8d1f918c31 stringOps::inplaceExpandCodeString: Added environment variable path expansion to #calc
This allows #FOAM_CASE for example to be used in #calc variable lookup, e.g. in
test/dictionary/testCalc:

// assuming the testCalc2 file is local
magU            #calc "mag($<vector>testCalc2!U)";

// finding the testCalc2 file using $FOAM_CASE
k               #calc "1.5*magSqr(0.05*$<vector>{${FOAM_CASE}/testCalc2!U})";
2023-07-04 21:51:22 +01:00
c8061c7928 filmContactAngleFvPatchScalarField: Minor documentation change 2023-07-04 21:48:03 +01:00
9fbb298204 test/dictionary: Added more dictionary tests and examples
All dictionaries are expanded using foamDictionary -expand
2023-07-04 13:44:37 +01:00
835ef31a1d foamDictionary: Moved the dictionary tests/examples to applications/test/dictionary 2023-07-03 13:38:37 +01:00
ae3bd90630 fvMeshTopoChangersMeshToMesh: Reinstated call to deltaCoeffs()
to ensure the deltaCoeffs are available for constraint BC evaluation.
2023-07-02 20:20:48 +01:00
d5f038493a Make disallowed constructors and assignment operators public 20230702 2023-06-30 22:16:37 +01:00
de7121fb7f icoFoam: Updated to use piso.dict() 2023-06-30 18:21:42 +01:00
ffcfa32fac tutorials/incompressibleFluid/movingCone: Stop the movement just before the final reversal 2023-06-30 18:20:49 +01:00
faf0dd2e35 Ensure delete modifier is applied to disallowed constructors and assignment operators 2023-06-30 17:25:07 +01:00
a37b646e3d tutorials: Fix cloneMesh paths and use foamRun instead of forwarding scripts 2023-06-29 20:36:26 +01:00
bbb4ee2248 tutorials/multiRegion/film/cylinderVoF: Adjusted film->VoF transfer parameters 2023-06-29 19:38:24 +01:00
568fb8e00e tutorials/multicomponentFluid/SandiaD_LTS: Updated to improve stability and convergence 2023-06-29 18:46:18 +01:00
d297b1c6d1 tutorials/multiphaseEuler/LBend: Changed to use the faceMomentum p-U algorithm
This provides a smooth solution but it is not clear if this is more accurate
than running the cellMomentum p-U algorithm which generates complex transients
in the solution.
2023-06-29 17:06:02 +01:00
6d548ad819 tutorials/multiRegion/film/cylinder: Corrected lagrangian flow rates 2023-06-29 16:34:04 +01:00
a8a1eeec0c tutorials/fluid/iglooWithFridges: Ensure the energy equation solves 2023-06-29 14:53:44 +01:00
9d66e38007 tutorials/fluid/hotRoomComfort: Ensure the energy equations solves 2023-06-29 13:55:23 +01:00
5f0a643e71 tutorials/multicomponentFluid/counterFlowFlame2D: Clean 0/Qdot field 2023-06-29 11:27:29 +01:00
a7c7f55274 tutorials/incompressibleMultiphaseVoF/damBreak4phase: Prevent unnecessary modification of 0/U 2023-06-29 11:21:54 +01:00
5f93b16a51 tutorials/shockFluid/biconic25-55Run35: Removed unused scripting 2023-06-29 10:41:51 +01:00
a329b887e5 tutorials/isothermalFilm/rivuletPanel: Fix delta BC for paraFoam 2023-06-29 10:17:18 +01:00
1ae1091f36 fvMesh: Check the topoChanger is allocated in the topoChanging() function 2023-06-29 09:35:04 +01:00
16012dccda fvMesh: Registered Vc0 and Vc00 and added to geometryFields set
for consistency with the handling of Vc and simplifies mesh redistribution.
2023-06-28 15:05:09 +01:00
a8de66f32b CrankNicolsonDdtScheme: Evaluate the ramped off-centering coefficient from user-time
Resolves bug-report https://bugs.openfoam.org/view.php?id=3992
2023-06-28 14:19:50 +01:00
9f4f89ba98 fvMesh: Don't store old-time mesh fluxes if the topology is changing
Currently 2nd-order time schemes are not supported with mesh topology change and
so there is no need to store the old-time mesh fluxes.
2023-06-28 14:08:09 +01:00
c2f6ae08a3 Merge branch 'master' of github.com-OpenFOAM:OpenFOAM/OpenFOAM-dev 2023-06-28 11:55:49 +01:00
bcc5169ddc fvMesh: Added meshPhi to the geometricFields set
Also provide fields and curFields functions which return the list of registered
fields not including the geometryFields and current registered fields not
including the geometryFields or old-time fields to simplify mapping code for
NCC, mesh-to-mesh mapping and load-balancing.
2023-06-28 11:53:14 +01:00
8611db460a functionEntries::calcEntry: Added support for #{...#} delimited verbatim string
Class
    Foam::functionEntries::calcEntry

Description
    Compiles and executes code string expressions,
    returning the result to the dictionary

Usage
    \verbatim
    a 1.1;
    b 3.2;
    c #calc "$a*$b";
    \endverbatim

    Special care is required for calc entries that include a division since
    "/" is also used as the scoping operator to identify keywords in
    sub-dictionaries. For example, "$a/b" expects a keyword "b" within a
    sub-dictionary named "a". A division can be correctly executed by using a
    space between a variables and "/", e.g.

    \verbatim
    c #calc "$a / $b";
    \endverbatim

    or bracketing the variable, e.g.

    \verbatim
    c #calc "($a)/$b";
    \endverbatim

    The code string can be delimited either by '"..."' in which newlines must be
    escaped or '#{...#}' which directly supports multi-line strings and is more
    convenient when evaluating string expressions by avoiding the need to
    escape the quotes, e.g.

    \verbatim
    c #calc #{ $a*sqrt($b) #};
    \endverbatim

    \verbatim
    s "field";
    fieldName #calc #{ $<string>s + "Name" #};
    \endverbatim

    Additional include files for the #calc code compilation can be specified
    using the #calcInclude entry, e.g. if functions from transform.H are used
    \verbatim
    angleOfAttack   5; // degs

    angle           #calc "-degToRad($angleOfAttack)";

    #calcInclude    "transform.H"
    liftDir         #calc "transform(Ry($angle), vector(0, 0, 1))";
    dragDir         #calc "transform(Ry($angle), vector(1, 0, 0))";
    \endverbatim

    Note:
        Internally this is just a wrapper around codeStream functionality - the
        #calc string is used to construct a dictionary for codeStream.

See also
    Foam::functionEntries::calcIncludeEntry
2023-06-28 10:58:57 +01:00
9fb9a8cc8c lagrangian: Merged parcel and parcelTurbulence libraries
Lagrangian's dependency set is simpler than it used to be. There is no
longer a need to maintain a separate library for models that depend on
the momentum transport modelling.
2023-06-27 15:44:54 +01:00
24085443bf BirdCarreau: added header example that uses the k coefficient 2023-06-27 10:53:43 +01:00
b51bb27fde tutorials/multicomponentFluid/lockExchange: Updated physicalProperties 2023-06-26 13:24:41 +01:00
0de23df8bb functionEntries::calcIncludeEntry: New dictionary function entry to provide additional include files for #calc
Description
    Specify an include file for #calc, expects a single string to follow.

    For example if functions from transform.H are used in the #calc expression
    \verbatim
    angleOfAttack   5; // degs

    angle           #calc "-degToRad($angleOfAttack)";

    #calcInclude    "transform.H"
    liftDir         #calc "transform(Ry($angle), vector(0, 0, 1))";
    dragDir         #calc "transform(Ry($angle), vector(1, 0, 0))";
    \endverbatim

    The usual expansion of environment variables and other constructs
    (eg, the \c ~OpenFOAM/ expansion) is retained.

See also:

Class
    Foam::functionEntries::calcEntry

Description
    Uses dynamic compilation to provide calculating functionality
    for entering dictionary entries.

    E.g.

    \verbatim
    a 1.0;
    b 3;
    c #calc "$a*$b";
    \endverbatim

    Note the explicit trailing 0 ('1.0') to force a to be read (and written)
    as a floating point number.

    Special care is required for calc entries that include a division since
    "/" is also used as the scoping operator to identify keywords in
    sub-dictionaries. For example, "$a/b" expects a keyword "b" within a
    sub-dictionary named "a". A division can be correctly executed by using a
    space between a variables and "/", e.g.

    \verbatim
    c #calc "$a / $b";
    \endverbatim

    or "()" scoping around the variable, e.g.

    \verbatim
    c #calc "($a)/$b";
    \endverbatim

    Additional include files for the #calc code compilation can be specified
    using the #calcInclude entry, e.g. if functions from transform.H are used
    \verbatim
    angleOfAttack   5; // degs

    angle           #calc "-degToRad($angleOfAttack)";

    #calcInclude    "transform.H"
    liftDir         #calc "transform(Ry($angle), vector(0, 0, 1))";
    dragDir         #calc "transform(Ry($angle), vector(1, 0, 0))";
    \endverbatim

    Note:
        Internally this is just a wrapper around codeStream functionality - the
        #calc string is used to construct a dictionary for codeStream.
20230626
2023-06-24 16:56:59 +01:00
755eae4aa9 tutorials/fluid/aerofoilNACA0012Steady/0/U: Use $<scalar>angle instead of scoping cos and sin
to improve the handling of 0 angle of attack.
2023-06-23 17:12:05 +01:00
0657826ab9 Replaced all remaining addTimeOptions.H includes with the more flexible timeSelector 2023-06-23 15:24:06 +01:00
f3df607dde Test-string: Remove dictionary substitution test
The dictionary/table-based expansions provided by stringOps::expand are
now too situation specific for this utility to concisely test with a
single complex string. These expansions are fundamental to the operation
of dictionary and dynamic code and receive good testing coverage in the
tutorial test loop anyway.
2023-06-23 15:15:51 +01:00
e019049bef primitiveMesh,polyMesh: Further refactoring of mesh checking 2023-06-23 13:44:35 +01:00
d6c6e99201 bash_completion: improved handling of '-solver', '-table' and '-func' options 2023-06-23 13:09:03 +01:00
33eb61406b tutorials: Updates to #codeStream and #calc examples
Simplifications have been made where possible, as permitted by the new
$<type>var syntax. Duplication has been reduced in similar blockMesh
files (e.g., sloshingTank cases). Settings that cannot practically be
changed have been hard-coded (e.g., angle in the mixerVessel2D
blockMeshDict). The rotor2D blockMeshDict has been centralised and
extended to work with an arbitrary number of rotor blades.
2023-06-23 10:51:11 +01:00
24995dcbd4 tutorials: ballValve: Named vertices in blockMeshDict
This makes the block/edge/face configuration much more similar between
the four different sections of this mesh. It is also useful as it
permits sections to be decativated by commenting them out without
this affecting all the subsequent numbering.
2023-06-23 10:51:11 +01:00
afbe519f5c etc/caseDicts/postProcessing/mesh/checkMesh: Corrected description 2023-06-22 20:36:18 +01:00
4c62933e7f surfaceFieldValue: Removed sumDirection and sumDirectionBalance operations
The purpose of these operations was unclear, and there was no
documentation or examples of their usage. The differences between these
operations behaviours for scalar and vector input seemed arbitrary.
These operations have in some cases become the subject of confusion.
They have therefore been removed.

Equivalent functionality could be easily reinstated as and when a clear
need and application becomes apparent.
2023-06-22 15:42:18 +01:00