Compare commits

...

30 Commits

Author SHA1 Message Date
d3a079b4da COMP: g++11: suppress optimisation. See #3024 2024-01-19 20:52:34 +01:00
177176c5ff BUG: particle: use correct celli. Fixes #1992
Was checking the old celli instead of the result of
re-finding the position. See also Foundation commit 50a965f8866683a81d79cbc7811af7333baf9d10.
2023-10-10 15:40:47 +01:00
53feaf2560 BUG: mapFields: incorrect patches. Fixes #2944. 2023-08-30 16:39:16 +02:00
d189f95c7d BUG: UPstream::shutdown misbehaves with external initialisation (fixes #2808)
- freeCommmunicatorComponents needs an additional bounds check.
  When MPI is initialized outside of OpenFOAM, there are no
  UPstream communicator equivalents
2023-06-20 09:33:13 +02:00
bc7053dbf9 Revert "BUG: Fixing ray dAve and omega for 1D and 2D cases"
This reverts commit 5848b0afd5.
2023-05-22 09:37:50 +01:00
b087bc52de BUG: VTK write pointSet fails in parallel (fixes #2773)
- de-referenced autoPtr with () instead of ref() will fail on
  non-master ranks.
2023-05-05 16:01:37 +02:00
69f2c34e5f COMP: code adjustments for gcc-13 (#2714) 2023-02-28 16:24:06 +01:00
4dda01f161 CONFIG: improve handling of empty/non-empty ThirdParty directory 2023-02-28 16:10:00 +01:00
a7e464a70a CONFIG: foamConfigurePaths support for sys-openmpi major version 2023-02-28 16:09:59 +01:00
f40d60aa78 CONFIG: accept module-prefix 'none' as equivalent to 'false' (ie, disabled) 2023-02-28 16:09:59 +01:00
12e7bba017 BUG: solidIsothermalReactionRate: redefine the latent energy (fixes #2646) 2022-11-30 10:17:12 +00:00
ee66a09a72 ENH: solidIsothermalReactionRate: new solid reaction rate model
STYLE: solidArrheniusReactionRate: modernise code
2022-11-29 14:39:26 +00:00
f1ac837448 ENH: makeSolidReaction: modify macros to allow new models 2022-11-28 11:43:12 +00:00
7dcab65ffd BUG: related to #1676 - avoid recalculating map multiple times on topo changes 2022-11-02 20:32:14 +00:00
ff8cdfa7de ENH: use local ref to map() to avoid excessive rebuilding during topo changes 2022-10-25 14:41:56 +01:00
da5048fd70 BUG: totalFlowRateAdvectiveDiffusive: missing autoMap. Fixes #2475 2022-09-28 16:41:32 +01:00
555d76bb7b BUG: Fixing pyrolysis region motion. 2022-09-10 10:01:33 +01:00
546e2c0243 BUG: incorrect order for output scaling (transformPoints, ...)
- the output write scaling should be applied *after* undoing the
  effects of the specified rotation centre. Fixes #2566

ENH: update option names for transformPoints and surfaceTransformPoints

- prefer  '-auto-centre' and '-centre', but also accept the previous
  options '-auto-origin' and '-origin' as aliases.

  Changing to '-centre' avoids possible confusion with
  coordinate system origin().
2022-08-18 13:35:09 +02:00
b4324b1297 COMP: missing std::array include (searchable sphere) 2022-06-27 10:05:31 +02:00
b12839ffc3 CONFIG: bump patch level 2022-06-23 09:51:24 +02:00
3f5c240cdb COMP: Gcc 11+ potential fix - see #2434 2022-06-23 09:51:24 +02:00
50420f755c COMP: references to temporaries
COMP: include <limits>
2022-06-23 09:51:24 +02:00
2d8870a878 COMP: gcc-12 buffer check bypasses xsputn (#2481, #2496)
- add overflow() method to the SHA1 streambuf. Previously could rely
  on xsputn for adding to sha1 content, but streams now check pptr()
  first to test for the buffering range and thus overflow() is needed.
2022-06-23 09:51:24 +02:00
8221721d44 BUG: sample/store surface field triggers dimension check (fixes #2361)
- when used for example with wallShearStress, the stress field is
  initially created as incompressible but later updated with the
  correct compressible/incompressible dimensions.

  If this field is sampled as a surface and stored on the registry
  the dimensions should be reset() and not '=' assigned, since that
  causes a dimension check which will obviously fail.
2022-02-11 14:35:06 +01:00
f4ccdec894 BUG: error with empty distributed roots specification (fixes #2196) 2021-09-08 10:21:02 +02:00
0f7277fd5e BUG: ParticleCollector - corrected and simplified parallel reductions. See #2184 2021-09-06 16:29:50 +02:00
2f5da5af4b BUG: Curle - added missing division by r. See #2169 2021-09-06 16:29:49 +02:00
e95f8b1a8d BUG: boundaryData output incorrect when no fields are sampled (fixes #2163)
- add "point data" or "face data" note to the boundaryData output
  for easier diagnositics in the future.
2021-07-20 17:04:02 +02:00
5d8e43e86e BUG: noise did not set num of output fields (VTK legacy) [fixes #2133] 2021-06-25 10:35:36 +02:00
f53c9dd6da BUG: liquidProperties - corrected read scalar (was label). See #2142 2021-06-25 10:33:37 +02:00
53 changed files with 1249 additions and 555 deletions

View File

@ -73,10 +73,10 @@ echo
applications/Allwmake $targetType $* applications/Allwmake $targetType $*
# Additional components/modules # Additional components/modules
if [ "$FOAM_MODULE_PREFIX" = false ] if [ "$FOAM_MODULE_PREFIX" = false ] || [ "$FOAM_MODULE_PREFIX" = none ]
then then
echo "========================================" echo "========================================"
echo "OpenFOAM modules disabled (prefix=false)" echo "OpenFOAM modules disabled (prefix=${FOAM_MODULE_PREFIX})"
echo echo
elif [ -d "$WM_PROJECT_DIR/modules" ] elif [ -d "$WM_PROJECT_DIR/modules" ]
then then

View File

@ -1,2 +1,2 @@
api=2012 api=2012
patch=210618 patch=220610

View File

@ -53,8 +53,8 @@ Usage
-rotate-angle (vector angle) -rotate-angle (vector angle)
Rotate angle degrees about vector axis. Rotate angle degrees about vector axis.
or -yawPitchRoll (yawdegrees pitchdegrees rolldegrees) or -yawPitchRoll : (yaw pitch roll) degrees
or -rollPitchYaw (rolldegrees pitchdegrees yawdegrees) or -rollPitchYaw : (roll pitch yaw) degrees
-scale scalar|vector -scale scalar|vector
Scale the points by the given scalar or vector on output. Scale the points by the given scalar or vector on output.
@ -251,15 +251,18 @@ int main(int argc, char *argv[])
); );
argList::addBoolOption argList::addBoolOption
( (
"auto-origin", "auto-centre",
"Use bounding box centre as origin for rotations" "Use bounding box centre as centre for rotations"
); );
argList::addOption argList::addOption
( (
"origin", "centre",
"point", "point",
"Use specified <point> as origin for rotations" "Use specified <point> as centre for rotations"
); );
argList::addOptionCompat("auto-centre", {"auto-origin", 2206});
argList::addOptionCompat("centre", {"origin", 2206});
argList::addOption argList::addOption
( (
"rotate", "rotate",
@ -390,18 +393,18 @@ int main(int argc, char *argv[])
points += v; points += v;
} }
vector origin; vector rotationCentre;
bool useOrigin = args.readIfPresent("origin", origin); bool useRotationCentre = args.readIfPresent("centre", rotationCentre);
if (args.found("auto-origin") && !useOrigin) if (args.found("auto-centre") && !useRotationCentre)
{ {
useOrigin = true; useRotationCentre = true;
origin = boundBox(points).centre(); rotationCentre = boundBox(points).centre();
} }
if (useOrigin) if (useRotationCentre)
{ {
Info<< "Set origin for rotations to " << origin << endl; Info<< "Set centre of rotation to " << rotationCentre << endl;
points -= origin; points -= rotationCentre;
} }
if (args.found("rotate")) if (args.found("rotate"))
@ -482,15 +485,15 @@ int main(int argc, char *argv[])
} }
} }
if (useRotationCentre)
{
Info<< "Unset centre of rotation from " << rotationCentre << endl;
points += rotationCentre;
}
// Output scaling // Output scaling
applyScaling(points, getScalingOpt("scale", args)); applyScaling(points, getScalingOpt("scale", args));
if (useOrigin)
{
Info<< "Unset origin for rotations from " << origin << endl;
points += origin;
}
// Set the precision of the points data to 10 // Set the precision of the points data to 10
IOstream::defaultPrecision(max(10u, IOstream::defaultPrecision())); IOstream::defaultPrecision(max(10u, IOstream::defaultPrecision()));

View File

@ -675,7 +675,7 @@ int main(int argc, char *argv[])
{ {
for for
( (
const word& opt const char * const opt
: { "cellSet", "cellZone", "faceSet", "pointSet" } : { "cellSet", "cellZone", "faceSet", "pointSet" }
) )
{ {

View File

@ -92,7 +92,7 @@ bool setCellFieldType
fieldType field(fieldHeader, mesh, false); fieldType field(fieldHeader, mesh, false);
const Type& value = pTraits<Type>(fieldValueStream); const Type value = pTraits<Type>(fieldValueStream);
if (selectedCells.size() == field.size()) if (selectedCells.size() == field.size())
{ {
@ -244,7 +244,7 @@ bool setFaceFieldType
fieldType field(fieldHeader, mesh); fieldType field(fieldHeader, mesh);
const Type& value = pTraits<Type>(fieldValueStream); const Type value = pTraits<Type>(fieldValueStream);
// Create flat list of selected faces and their value. // Create flat list of selected faces and their value.
Field<Type> allBoundaryValues(mesh.nBoundaryFaces()); Field<Type> allBoundaryValues(mesh.nBoundaryFaces());

View File

@ -188,15 +188,18 @@ int main(int argc, char *argv[])
); );
argList::addBoolOption argList::addBoolOption
( (
"auto-origin", "auto-centre",
"Use bounding box centre as origin for rotations" "Use bounding box centre as centre for rotations"
); );
argList::addOption argList::addOption
( (
"origin", "centre",
"point", "point",
"Use specified <point> as origin for rotations" "Use specified <point> as centre for rotations"
); );
argList::addOptionCompat("auto-centre", {"auto-origin", 2206});
argList::addOptionCompat("centre", {"origin", 2206});
argList::addOption argList::addOption
( (
"rotate", "rotate",
@ -334,18 +337,18 @@ int main(int argc, char *argv[])
points += v; points += v;
} }
vector origin; vector rotationCentre;
bool useOrigin = args.readIfPresent("origin", origin); bool useRotationCentre = args.readIfPresent("centre", rotationCentre);
if (args.found("auto-origin") && !useOrigin) if (args.found("auto-centre") && !useRotationCentre)
{ {
useOrigin = true; useRotationCentre = true;
origin = boundBox(points).centre(); rotationCentre = boundBox(points).centre();
} }
if (useOrigin) if (useRotationCentre)
{ {
Info<< "Set origin for rotations to " << origin << endl; Info<< "Set centre of rotation to " << rotationCentre << endl;
points -= origin; points -= rotationCentre;
} }
if (args.found("rotate")) if (args.found("rotate"))
@ -406,15 +409,15 @@ int main(int argc, char *argv[])
points = transform(rot, points); points = transform(rot, points);
} }
if (useRotationCentre)
{
Info<< "Unset centre of rotation from " << rotationCentre << endl;
points += rotationCentre;
}
// Output scaling // Output scaling
applyScaling(points, getScalingOpt("write-scale", args)); applyScaling(points, getScalingOpt("write-scale", args));
if (useOrigin)
{
Info<< "Unset origin for rotations from " << origin << endl;
points += origin;
}
surf1.movePoints(points); surf1.movePoints(points);
surf1.write(exportName, writeFileType); surf1.write(exportName, writeFileType);

View File

@ -7,7 +7,7 @@
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Copyright (C) 2011-2016 OpenFOAM Foundation # Copyright (C) 2011-2016 OpenFOAM Foundation
# Copyright (C) 2016-2020 OpenCFD Ltd. # Copyright (C) 2016-2021 OpenCFD Ltd.
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# License # License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later. # This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
@ -55,6 +55,8 @@ Equivalent options:
-scotch-path --scotchArchPath | -scotchArchPath -scotch-path --scotchArchPath | -scotchArchPath
-system-compiler -system -system-compiler -system
-third-compiler -third -third-compiler -third
-openmpi-system -sys-openmpi
-openmpi-third -openmpi
HELP_COMPAT HELP_COMPAT
exit 0 # A clean exit exit 0 # A clean exit
@ -89,10 +91,9 @@ Compiler
mpc-VERSION For ThirdParty gcc (mpc-system for system library) mpc-VERSION For ThirdParty gcc (mpc-system for system library)
MPI MPI
-mpi NAME specify 'WM_MPLIB' type (eg, INTELMPI, etc) -mpi=NAME Specify 'WM_MPLIB' type (eg, INTELMPI, etc)
-openmpi VER use ThirdParty openmpi, with version for 'FOAM_MPI' -openmpi[=VER] Use ThirdParty openmpi, with version for 'FOAM_MPI'
-openmpi-system use system openmpi -sys-openmpi[=MAJ] Use system openmpi, with specified major version
-openmpi-third use ThirdParty openmpi (using default version)
Components versions (ThirdParty) Components versions (ThirdParty)
-adios VER specify 'adios2_version' -adios VER specify 'adios2_version'
@ -212,12 +213,13 @@ _inlineSed()
# Local filename (for reporting) # Local filename (for reporting)
localFile="$(echo "$file" | sed -e "s#^$projectDir/##")" localFile="$(echo "$file" | sed -e "s#^$projectDir/##")"
grep -q "$regexp" "$file" && sed -i -e "$cmd" "$file" || { \ if grep -q "$regexp" "$file" && sed -i -e "$cmd" "$file"
then
[ -n "$msg" ] && echo " $msg ($localFile)"
else
echo "Failed: ${msg:-replacement} in $localFile" echo "Failed: ${msg:-replacement} in $localFile"
return 1 return 1
} fi
[ -n "$msg" ] && echo " $msg ($localFile)"
return 0 return 0
} }
@ -278,8 +280,8 @@ replaceEtc()
local file="$1" local file="$1"
shift shift
file=$(_foamEtc "$file") file="$(_foamEtc "$file")"
replace $file "$@" replace "$file" "$@"
} }
@ -289,24 +291,36 @@ replaceEtcCsh()
local file="$1" local file="$1"
shift shift
file=$(_foamEtc "$file") file="$(_foamEtc "$file")"
replaceCsh $file "$@" replaceCsh "$file" "$@"
} }
# Get the option's value (argument), or die on missing or empty argument # Get the option's value (argument), or die on missing or empty argument
# $1 option # $1 option
# $2 value # $2 value
# Returns values via optValue, nOptArgs variables!!
optValue=""
nOptArgs=0 # The number of args to shift
getOptionValue() getOptionValue()
{ {
local value="$2" optValue="${1#*=}"
[ -n "$value" ] || die "'$1' option requires an argument" if [ "$optValue" = "$1" ]
then
# Eg, -option value
optValue="$2"
[ -n "$optValue" ] || die "'$1' option requires an argument"
nOptArgs=1
else
# Eg, -option=value
nOptArgs=0
fi
# Remove any surrounding double quotes # Remove any surrounding double quotes
value="${value%\"}" optValue="${optValue%\"}"
value="${value#\"}" optValue="${optValue#\"}"
echo "$value"
} }
@ -366,7 +380,7 @@ removeCshMagic()
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
unset adjusted optMpi unset adjusted
# Parse options # Parse options
while [ "$#" -gt 0 ] while [ "$#" -gt 0 ]
do do
@ -421,26 +435,37 @@ CONFIG_CSH
[ -n "$FOAM_CONFIG_ETC" ] || unset FOAM_CONFIG_ETC [ -n "$FOAM_CONFIG_ETC" ] || unset FOAM_CONFIG_ETC
;; ;;
-project-path) -project-path=* | -project-path)
# Replace WM_PROJECT_DIR=... # Replace WM_PROJECT_DIR=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc bashrc WM_PROJECT_DIR "\"$optionValue\"" shift "${nOptArgs:-0}"
replaceEtcCsh cshrc WM_PROJECT_DIR "\"$optionValue\""
removeBashMagic $(_foamEtc bashrc) if [ -n "$optValue" ]
removeCshMagic $(_foamEtc cshrc) then
replaceEtc bashrc WM_PROJECT_DIR "\"$optValue\""
replaceEtcCsh cshrc WM_PROJECT_DIR "\"$optValue\""
adjusted=true removeBashMagic "$(_foamEtc bashrc)"
shift removeCshMagic "$(_foamEtc cshrc)"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-version | -foamVersion | --projectVersion) -version=* | -version | -foamVersion | --projectVersion)
# Replace WM_PROJECT_VERSION=... # Replace WM_PROJECT_VERSION=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc bashrc WM_PROJECT_VERSION "$optionValue" shift "${nOptArgs:-0}"
replaceEtcCsh cshrc WM_PROJECT_VERSION "$optionValue"
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc bashrc WM_PROJECT_VERSION "$optValue"
replaceEtcCsh cshrc WM_PROJECT_VERSION "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-sp | -SP | -float32) -sp | -SP | -float32)
@ -466,131 +491,168 @@ CONFIG_CSH
-int32 | -int64) -int32 | -int64)
# Replace WM_LABEL_SIZE=... # Replace WM_LABEL_SIZE=...
optionValue="${1#-int}" optValue="${1#-int}"
replaceEtc bashrc WM_LABEL_SIZE "$optionValue" replaceEtc bashrc WM_LABEL_SIZE "$optValue"
replaceEtcCsh cshrc WM_LABEL_SIZE "$optionValue" replaceEtcCsh cshrc WM_LABEL_SIZE "$optValue"
adjusted=true adjusted=true
;; ;;
## Compiler ## ## Compiler ##
-clang) -clang=* | -clang)
# Replace default_clang_version=... # Replace default_clang_version=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/compiler default_clang_version "$optionValue" shift "${nOptArgs:-0}"
replaceEtc config.csh/compiler default_clang_version "$optionValue"
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/compiler default_clang_version "$optValue"
replaceEtc config.csh/compiler default_clang_version "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-gcc) -gcc=* | -gcc)
# Replace default_gcc_version=... # Replace default_gcc_version=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/compiler default_gcc_version "$optionValue" shift "${nOptArgs:-0}"
replaceEtc config.csh/compiler default_gcc_version "$optionValue"
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/compiler default_gcc_version "$optValue"
replaceEtc config.csh/compiler default_gcc_version "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-system-compiler | -system) -system-compiler | -system)
# Replace WM_COMPILER_TYPE=... and WM_COMPILER=... # Replace WM_COMPILER_TYPE=... and WM_COMPILER=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc bashrc \ shift "${nOptArgs:-0}"
WM_COMPILER_TYPE system \
WM_COMPILER "$optionValue" if [ -n "$optValue" ]
replaceEtcCsh cshrc \ then
WM_COMPILER_TYPE system \ replaceEtc bashrc \
WM_COMPILER "$optionValue" WM_COMPILER_TYPE system \
adjusted=true WM_COMPILER "$optValue"
shift replaceEtcCsh cshrc \
WM_COMPILER_TYPE system \
WM_COMPILER "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-third-compiler | -third | -ThirdParty) -third-compiler | -third | -ThirdParty)
# Replace WM_COMPILER_TYPE=... and WM_COMPILER=... # Replace WM_COMPILER_TYPE=... and WM_COMPILER=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc bashrc \ shift "${nOptArgs:-0}"
WM_COMPILER_TYPE ThirdParty \
WM_COMPILER "$optionValue" if [ -n "$optValue" ]
replaceEtcCsh cshrc \ then
WM_COMPILER_TYPE ThirdParty \ replaceEtc bashrc \
WM_COMPILER "$optionValue" WM_COMPILER_TYPE ThirdParty \
adjusted=true WM_COMPILER "$optValue"
shift replaceEtcCsh cshrc \
WM_COMPILER_TYPE ThirdParty \
WM_COMPILER "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
gmp-[4-9]* | gmp-system) gmp-[4-9]* | gmp-system)
# gcc-related package # gcc-related package
replaceEtc config.sh/compiler default_gmp_version "$1" optValue="${1#-}"
replaceEtc config.csh/compiler default_gmp_version "$1" replaceEtc config.sh/compiler default_gmp_version "$optValue"
replaceEtc config.csh/compiler default_gmp_version "$optValue"
adjusted=true adjusted=true
;; ;;
mpfr-[2-9]* | mpfr-system) mpfr-[2-9]* | mpfr-system)
# gcc-related package # gcc-related package
replaceEtc config.sh/compiler default_mpfr_version "$1" optValue="${1#-}"
replaceEtc config.csh/compiler default_mpfr_version "$1" replaceEtc config.sh/compiler default_mpfr_version "$optValue"
replaceEtc config.csh/compiler default_mpfr_version "$optValue"
adjusted=true adjusted=true
;; ;;
mpc-[0-9]* | mpc-system) mpc-[0-9]* | mpc-system)
# gcc-related package # gcc-related package
replaceEtc config.sh/compiler default_mpc_version "$1" optValue="${1#-}"
replaceEtc config.csh/compiler default_mpc_version "$1" replaceEtc config.sh/compiler default_mpc_version "$optValue"
replaceEtc config.csh/compiler default_mpc_version "$optValue"
adjusted=true adjusted=true
;; ;;
## MPI ## ## MPI ##
-mpi) -mpi=* | -mpi)
# Explicitly set WM_MPLIB=... # Explicitly set WM_MPLIB=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc bashrc WM_MPLIB "$optionValue" shift "${nOptArgs:-0}"
replaceEtcCsh cshrc WM_MPLIB "$optionValue"
optMpi=system if [ -n "$optValue" ]
adjusted=true then
shift replaceEtc bashrc WM_MPLIB "$optValue"
replaceEtcCsh cshrc WM_MPLIB "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-openmpi) -sys-openmpi=* | -sys-openmpi | -openmpi-system)
# Replace FOAM_MPI=openmpi-<digits>.. and set to use third-party optValue="$(echo "$1" | sed -ne 's/^.*mpi=\([1-9][0-9]*\).*/\1/p')"
# The edit is slightly fragile, but works
expected="openmpi-[1-9][.0-9]*"
optMpi=$(getOptionValue "$@")
_matches "$optMpi" "$expected" || \
die "'$1' has bad value: '$optMpi'"
_inlineSed $(_foamEtc config.sh/mpi) \
"FOAM_MPI=$expected" \
"FOAM_MPI=$optMpi" \
"Replaced 'FOAM_MPI=$expected' by 'FOAM_MPI=$optMpi'"
_inlineSed $(_foamEtc config.csh/mpi) \
"FOAM_MPI $expected" \
"FOAM_MPI $optMpi" \
"Replaced 'FOAM_MPI $expected' by 'FOAM_MPI $optMpi'"
replaceEtc bashrc WM_MPLIB OPENMPI
replaceEtcCsh cshrc WM_MPLIB OPENMPI
adjusted=true
shift
;;
-openmpi-system)
# Explicitly set WM_MPLIB=SYSTEMOPENMPI # Explicitly set WM_MPLIB=SYSTEMOPENMPI
replaceEtc bashrc WM_MPLIB SYSTEMOPENMPI if [ -n "$optValue" ]
replaceEtcCsh cshrc WM_MPLIB SYSTEMOPENMPI then
optMpi=system replaceEtc bashrc WM_MPLIB SYSTEMOPENMPI"$optValue"
adjusted=true replaceEtcCsh cshrc WM_MPLIB SYSTEMOPENMPI"$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-openmpi-third) -openmpi=* | -openmpi | -openmpi-third)
# Explicitly set WM_MPLIB=OPENMPI, using default setting for openmpi # Explicitly set WM_MPLIB=OPENMPI
# - use default setting for openmpi, or
# replace FOAM_MPI=openmpi-<digits>..
# The edit is slightly fragile, but works
expected="openmpi-[1-9][.0-9]*"
optValue="$(echo "$1" | sed -ne 's/^.*mpi=//p')"
if [ -n "$optValue" ]
then
if [ "${optValue#openmpi-}" = "$optValue" ]
then
optValue="openmpi-$optValue"
fi
_matches "$optValue" "$expected" || \
die "'${1%=*}' has bad value: '$optValue'"
_inlineSed "$(_foamEtc config.sh/mpi)" \
"FOAM_MPI=$expected" \
"FOAM_MPI=$optValue" \
"Replaced 'FOAM_MPI=$expected' by 'FOAM_MPI=$optValue'"
_inlineSed "$(_foamEtc config.csh/mpi)" \
"FOAM_MPI=$expected" \
"FOAM_MPI=$optValue" \
"Replaced 'FOAM_MPI $expected' by 'FOAM_MPI $optValue'"
fi
replaceEtc bashrc WM_MPLIB OPENMPI replaceEtc bashrc WM_MPLIB OPENMPI
replaceEtcCsh cshrc WM_MPLIB OPENMPI replaceEtcCsh cshrc WM_MPLIB OPENMPI
optMpi=third
adjusted=true adjusted=true
;; ;;
@ -599,146 +661,242 @@ CONFIG_CSH
-adios | -adios2) -adios | -adios2)
# Replace adios2_version=... # Replace adios2_version=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/adios2 adios2_version "$optionValue" shift "${nOptArgs:-0}"
replaceEtc config.csh/adios2 adios2_version "$optionValue"
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/adios2 adios2_version "$optValue"
replaceEtc config.csh/adios2 adios2_version "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-adios-path | -adios2-path) -adios-path | -adios2-path)
# Replace ADIOS2_ARCH_PATH=... # Replace ADIOS2_ARCH_PATH=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/adios2 ADIOS2_ARCH_PATH "\"$optionValue\"" shift "${nOptArgs:-0}"
replaceEtcCsh config.csh/adios2 ADIOS2_ARCH_PATH "\"$optionValue\""
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/adios2 ADIOS2_ARCH_PATH "\"$optValue\""
replaceEtcCsh config.csh/adios2 ADIOS2_ARCH_PATH "\"$optValue\""
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-boost) -boost)
# Replace boost_version=... (config is cgal or CGAL) # Replace boost_version=... (config is cgal or CGAL)
optionValue=$(getOptionValue "$@") getOptionValue "$@"
shift "${nOptArgs:-0}"
cfgName=cgal; _foamEtc -q config.sh/"$cfgName" || cfgName=CGAL cfgName=cgal; _foamEtc -q config.sh/"$cfgName" || cfgName=CGAL
replaceEtc config.sh/"$cfgName" boost_version "$optionValue" if [ -n "$optValue" ]
replaceEtc config.csh/"$cfgName" boost_version "$optionValue" then
adjusted=true replaceEtc config.sh/"$cfgName" boost_version "$optValue"
shift replaceEtc config.csh/"$cfgName" boost_version "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-boost-path) -boost-path)
# Replace BOOST_ARCH_PATH=... (config is cgal or CGAL) # Replace BOOST_ARCH_PATH=... (config is cgal or CGAL)
optionValue=$(getOptionValue "$@") getOptionValue "$@"
shift "${nOptArgs:-0}"
cfgName=cgal; _foamEtc -q config.sh/"$cfgName" || cfgName=CGAL cfgName=cgal; _foamEtc -q config.sh/"$cfgName" || cfgName=CGAL
replaceEtc config.sh/"$cfgName" BOOST_ARCH_PATH "\"$optionValue\"" if [ -n "$optValue" ]
replaceEtc config.csh/"$cfgName" BOOST_ARCH_PATH "\"$optionValue\"" then
adjusted=true replaceEtc config.sh/"$cfgName" BOOST_ARCH_PATH "\"$optValue\""
shift replaceEtc config.csh/"$cfgName" BOOST_ARCH_PATH "\"$optValue\""
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-cgal) -cgal)
# Replace cgal_version=... (config is cgal or CGAL) # Replace cgal_version=... (config is cgal or CGAL)
optionValue=$(getOptionValue "$@") getOptionValue "$@"
shift "${nOptArgs:-0}"
cfgName=cgal; _foamEtc -q config.sh/"$cfgName" || cfgName=CGAL cfgName=cgal; _foamEtc -q config.sh/"$cfgName" || cfgName=CGAL
replaceEtc config.sh/"$cfgName" cgal_version "$optionValue" if [ -n "$optValue" ]
replaceEtc config.csh/"$cfgName" cgal_version "$optionValue" then
adjusted=true replaceEtc config.sh/"$cfgName" cgal_version "$optValue"
shift replaceEtc config.csh/"$cfgName" cgal_version "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-cgal-path) -cgal-path)
# Replace CGAL_ARCH_PATH=... (config is cgal or CGAL) # Replace CGAL_ARCH_PATH=... (config is cgal or CGAL)
optionValue=$(getOptionValue "$@") getOptionValue "$@"
shift "${nOptArgs:-0}"
cfgName=cgal; _foamEtc -q config.sh/"$cfgName" || cfgName=CGAL cfgName=cgal; _foamEtc -q config.sh/"$cfgName" || cfgName=CGAL
replaceEtc config.sh/"$cfgName" CGAL_ARCH_PATH "$optionValue" if [ -n "$optValue" ]
replaceEtcCsh config.csh/"$cfgName" CGAL_ARCH_PATH "$optionValue" then
adjusted=true replaceEtc config.sh/"$cfgName" CGAL_ARCH_PATH "$optValue"
shift replaceEtcCsh config.csh/"$cfgName" CGAL_ARCH_PATH "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-fftw) -fftw)
# Replace fftw_version=... # Replace fftw_version=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
shift "${nOptArgs:-0}"
# config.sh/fftw or config.sh/FFTW # config.sh/fftw or config.sh/FFTW
cfgName=fftw; _foamEtc -q config.sh/"$cfgName" || cfgName=FFTW cfgName=fftw; _foamEtc -q config.sh/"$cfgName" || cfgName=FFTW
replaceEtc config.sh/"$cfgName" fftw_version "$optionValue" if [ -n "$optValue" ]
replaceEtc config.csh/"$cfgName" fftw_version "$optionValue" then
adjusted=true replaceEtc config.sh/"$cfgName" fftw_version "$optValue"
shift replaceEtc config.csh/"$cfgName" fftw_version "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-fftw-path) -fftw-path)
# Replace FFTW_ARCH_PATH=... # Replace FFTW_ARCH_PATH=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
shift "${nOptArgs:-0}"
# config.sh/fftw or config.sh/FFTW # config.sh/fftw or config.sh/FFTW
cfgName=fftw; _foamEtc -q config.sh/"$cfgName" || cfgName=FFTW cfgName=fftw; _foamEtc -q config.sh/"$cfgName" || cfgName=FFTW
replaceEtc config.sh/"$cfgName" FFTW_ARCH_PATH "\"$optionValue\"" if [ -n "$optValue" ]
replaceEtcCsh config.csh/"$cfgName" FFTW_ARCH_PATH "\"$optionValue\"" then
adjusted=true replaceEtc config.sh/"$cfgName" FFTW_ARCH_PATH "\"$optValue\""
shift replaceEtcCsh config.csh/"$cfgName" FFTW_ARCH_PATH "\"$optValue\""
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-cmake) -cmake)
# Replace cmake_version=... # Replace cmake_version=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/cmake cmake_version "$optionValue" shift "${nOptArgs:-0}"
adjusted=true
shift if [ -n "$optValue" ]
then
replaceEtc config.sh/cmake cmake_version "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-cmake-path) -cmake-path)
# Replace CMAKE_ARCH_PATH=... # Replace CMAKE_ARCH_PATH=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/cmake CMAKE_ARCH_PATH "$optionValue" shift "${nOptArgs:-0}"
adjusted=true
shift if [ -n "$optValue" ]
then
replaceEtc config.sh/cmake CMAKE_ARCH_PATH "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-kahip) -kahip)
# Replace KAHIP_VERSION=... # Replace KAHIP_VERSION=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/kahip KAHIP_VERSION "$optionValue" shift "${nOptArgs:-0}"
adjusted=true
shift if [ -n "$optValue" ]
then
replaceEtc config.sh/kahip KAHIP_VERSION "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-kahip-path) -kahip-path)
# Replace KAHIP_ARCH_PATH=... # Replace KAHIP_ARCH_PATH=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/kahip KAHIP_ARCH_PATH "\"$optionValue\"" shift "${nOptArgs:-0}"
adjusted=true
shift if [ -n "$optValue" ]
then
replaceEtc config.sh/kahip KAHIP_ARCH_PATH "\"$optValue\""
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-metis) -metis)
# Replace METIS_VERSION=... # Replace METIS_VERSION=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/metis METIS_VERSION "$optionValue" shift "${nOptArgs:-0}"
adjusted=true
shift if [ -n "$optValue" ]
then
replaceEtc config.sh/metis METIS_VERSION "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-metis-path) -metis-path)
# Replace METIS_ARCH_PATH=... # Replace METIS_ARCH_PATH=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/metis METIS_ARCH_PATH "\"$optionValue\"" shift "${nOptArgs:-0}"
adjusted=true
shift if [ -n "$optValue" ]
then
replaceEtc config.sh/metis METIS_ARCH_PATH "\"$optValue\""
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-scotch | -scotchVersion | --scotchVersion) -scotch | -scotchVersion | --scotchVersion)
# Replace SCOTCH_VERSION=... # Replace SCOTCH_VERSION=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/scotch SCOTCH_VERSION "$optionValue" shift "${nOptArgs:-0}"
adjusted=true
shift if [ -n "$optValue" ]
then
replaceEtc config.sh/scotch SCOTCH_VERSION "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-scotch-path | -scotchArchPath | --scotchArchPath) -scotch-path | -scotchArchPath | --scotchArchPath)
# Replace SCOTCH_ARCH_PATH=... # Replace SCOTCH_ARCH_PATH=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/scotch SCOTCH_ARCH_PATH "\"$optionValue\"" shift "${nOptArgs:-0}"
adjusted=true
shift if [ -n "$optValue" ]
then
replaceEtc config.sh/scotch SCOTCH_ARCH_PATH "\"$optValue\""
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
@ -747,107 +905,156 @@ CONFIG_CSH
-paraview | -paraviewVersion | --paraviewVersion) -paraview | -paraviewVersion | --paraviewVersion)
# Replace ParaView_VERSION=... # Replace ParaView_VERSION=...
expected="[5-9][.0-9]*" # but also accept system expected="[5-9][.0-9]*" # but also accept system
optionValue=$(getOptionValue "$@") getOptionValue "$@"
_matches "$optionValue" "$expected" || \ _matches "$optValue" "$expected" || \
[ "$optionValue" != "${optionValue%system}" ] || \ [ "$optValue" != "${optValue%system}" ] || \
die "'$1' has bad value: '$optionValue'" die "'${1%=*}' has bad value: '$optValue'"
replaceEtc config.sh/paraview ParaView_VERSION "$optionValue"
replaceEtc config.csh/paraview ParaView_VERSION "$optionValue" shift "${nOptArgs:-0}"
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/paraview ParaView_VERSION "$optValue"
replaceEtc config.csh/paraview ParaView_VERSION "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-paraview-qt) -paraview-qt)
# Replace ParaView_QT=... # Replace ParaView_QT=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/paraview ParaView_QT "$optionValue" shift "${nOptArgs:-0}"
replaceEtc config.csh/paraview ParaView_QT "$optionValue"
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/paraview ParaView_QT "$optValue"
replaceEtc config.csh/paraview ParaView_QT "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-paraview-path | -paraviewInstall | --paraviewInstall) -paraview-path | -paraviewInstall | --paraviewInstall)
# Replace ParaView_DIR=... # Replace ParaView_DIR=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/paraview ParaView_DIR \""$optionValue\"" shift "${nOptArgs:-0}"
replaceEtcCsh config.csh/paraview ParaView_DIR \""$optionValue\""
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/paraview ParaView_DIR \""$optValue\""
replaceEtcCsh config.csh/paraview ParaView_DIR \""$optValue\""
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-llvm) -llvm)
# Replace mesa_llvm=... # Replace mesa_llvm=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/vtk mesa_llvm "$optionValue" shift "${nOptArgs:-0}"
replaceEtc config.csh/vtk mesa_llvm "$optionValue"
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/vtk mesa_llvm "$optValue"
replaceEtc config.csh/vtk mesa_llvm "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-mesa) -mesa)
# Replace mesa_version=... # Replace mesa_version=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/vtk mesa_version "$optionValue" shift "${nOptArgs:-0}"
replaceEtc config.csh/vtk mesa_version "$optionValue"
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/vtk mesa_version "$optValue"
replaceEtc config.csh/vtk mesa_version "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-vtk) -vtk)
# Replace vtk_version=... # Replace vtk_version=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/vtk vtk_version "$optionValue" shift "${nOptArgs:-0}"
replaceEtc config.csh/vtk vtk_version "$optionValue"
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/vtk vtk_version "$optValue"
replaceEtc config.csh/vtk vtk_version "$optValue"
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-llvm-path) -llvm-path)
# Replace LLVM_ARCH_PATH=... # Replace LLVM_ARCH_PATH=...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/vtk LLVM_ARCH_PATH \""$optionValue\"" shift "${nOptArgs:-0}"
replaceEtcCsh config.csh/vtk LLVM_ARCH_PATH \""$optionValue\""
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/vtk LLVM_ARCH_PATH \""$optValue\""
replaceEtcCsh config.csh/vtk LLVM_ARCH_PATH \""$optValue\""
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-mesa-path) -mesa-path)
# Replace MESA_ARCH_PATH... # Replace MESA_ARCH_PATH...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/vtk MESA_ARCH_PATH \""$optionValue\"" shift "${nOptArgs:-0}"
replaceEtcCsh config.csh/vtk MESA_ARCH_PATH \""$optionValue\""
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/vtk MESA_ARCH_PATH \""$optValue\""
replaceEtcCsh config.csh/vtk MESA_ARCH_PATH \""$optValue\""
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
-vtk-path) -vtk-path)
# Replace VTK_DIR... # Replace VTK_DIR...
optionValue=$(getOptionValue "$@") getOptionValue "$@"
replaceEtc config.sh/vtk VTK_DIR \""$optionValue\"" shift "${nOptArgs:-0}"
replaceEtcCsh config.csh/vtk VTK_DIR \""$optionValue\""
adjusted=true if [ -n "$optValue" ]
shift then
replaceEtc config.sh/vtk VTK_DIR \""$optValue\""
replaceEtcCsh config.csh/vtk VTK_DIR \""$optValue\""
adjusted=true
else
: "${adjusted:=empty}"
fi
;; ;;
## Misc ## ## Misc ##
# Obsolete flags
-sigfpe | -no-sigfpe) -sigfpe | -no-sigfpe)
echo "Enable/disable FOAM_SIGFPE now via controlDict" 1>&2 echo "Enable/disable FOAM_SIGFPE now via controlDict" 1>&2
;; ;;
-archOption | --archOption) # Obsolete options
# Replace WM_ARCH_OPTION=... -archOption | --archOption | \
optionValue=$(getOptionValue "$@")
echo "Ignoring $1 option: no longer supported" 1>&2
shift
;;
-foamInstall | --foamInstall | -projectName | --projectName) -foamInstall | --foamInstall | -projectName | --projectName)
# Removed for 1812 echo "Ignoring obsolete option: $1" 1>&2
optionValue=$(getOptionValue "$@") getOptionValue "$@"
echo "Ignoring $1 option: obsolete" 1>&2 shift "${nOptArgs:-0}"
shift
;; ;;
*) *)

View File

@ -6,7 +6,7 @@
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Copyright (C) 2011-2016 OpenFOAM Foundation # Copyright (C) 2011-2016 OpenFOAM Foundation
# Copyright (C) 2016-2020 OpenCFD Ltd. # Copyright (C) 2016-2021 OpenCFD Ltd.
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# License # License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later. # This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
@ -174,12 +174,13 @@ _foamAddPath "${FOAM_USER_APPBIN}:${FOAM_SITE_APPBIN}:${FOAM_APPBIN}"
# Dummy versions of external libraries. To be found last in library path # Dummy versions of external libraries. To be found last in library path
_foamAddLib "$FOAM_LIBBIN/dummy" _foamAddLib "$FOAM_LIBBIN/dummy"
# External (ThirdParty) libraries. Also allowed to be unset # External (ThirdParty) libraries:
if ( -d "$WM_THIRD_PARTY_DIR" ) then # - check if already compiled, or will be compiled.
# can also be unset
unsetenv FOAM_EXT_LIBBIN
if ( -d "$WM_THIRD_PARTY_DIR/platforms" || -f "$WM_THIRD_PARTY_DIR/Allwmake" ) then
setenv FOAM_EXT_LIBBIN "$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib" setenv FOAM_EXT_LIBBIN "$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib"
_foamAddLib "$FOAM_EXT_LIBBIN" _foamAddLib "$FOAM_EXT_LIBBIN"
else
unsetenv FOAM_EXT_LIBBIN
endif endif
# OpenFOAM libraries (user, group, standard) # OpenFOAM libraries (user, group, standard)

View File

@ -6,7 +6,7 @@
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Copyright (C) 2011-2016 OpenFOAM Foundation # Copyright (C) 2011-2016 OpenFOAM Foundation
# Copyright (C) 2016-2020 OpenCFD Ltd. # Copyright (C) 2016-2021 OpenCFD Ltd.
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# License # License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later. # This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
@ -174,13 +174,14 @@ _foamAddPath "$FOAM_USER_APPBIN:$FOAM_SITE_APPBIN:$FOAM_APPBIN"
# Dummy versions of external libraries. To be found last in library path # Dummy versions of external libraries. To be found last in library path
_foamAddLib "$FOAM_LIBBIN/dummy" _foamAddLib "$FOAM_LIBBIN/dummy"
# External (ThirdParty) libraries. Also allowed to be unset # External (ThirdParty) libraries:
if [ -d "$WM_THIRD_PARTY_DIR" ] # - check if already compiled, or will be compiled.
# can also be unset
unset FOAM_EXT_LIBBIN
if [ -d "$WM_THIRD_PARTY_DIR/platforms" ] || [ -f "$WM_THIRD_PARTY_DIR/Allwmake" ]
then then
export FOAM_EXT_LIBBIN="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib" export FOAM_EXT_LIBBIN="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib"
_foamAddLib "$FOAM_EXT_LIBBIN" _foamAddLib "$FOAM_EXT_LIBBIN"
else
unset FOAM_EXT_LIBBIN
fi fi
# OpenFOAM libraries (user, group, standard) # OpenFOAM libraries (user, group, standard)

View File

@ -12,7 +12,13 @@ targetType=libso
export FOAM_MODULE_PREFIX export FOAM_MODULE_PREFIX
echo "========================================" echo "========================================"
echo "Compile OpenFOAM modules" if [ "$FOAM_MODULE_PREFIX" = false ] || [ "$FOAM_MODULE_PREFIX" = none ]
then
echo "OpenFOAM modules disabled (prefix=${FOAM_MODULE_PREFIX})"
echo
exit 0
fi
echo "prefix = $FOAM_MODULE_PREFIX" echo "prefix = $FOAM_MODULE_PREFIX"
echo echo
echo " ignoring possible compilation errors" echo " ignoring possible compilation errors"

View File

@ -32,8 +32,8 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef OSHA1stream_H #ifndef Foam_OSHA1stream_H
#define OSHA1stream_H #define Foam_OSHA1stream_H
#include "OSstream.H" #include "OSstream.H"
#include "SHA1.H" #include "SHA1.H"
@ -63,10 +63,17 @@ class osha1stream
protected: protected:
//- Handle overflow
virtual int overflow(int c = EOF)
{
if (c != EOF) sha1_.append(c);
return c;
}
//- Put sequence of characters //- Put sequence of characters
virtual std::streamsize xsputn(const char* s, std::streamsize n) virtual std::streamsize xsputn(const char* s, std::streamsize n)
{ {
sha1_.append(s, n); if (n) sha1_.append(s, n);
return n; return n;
} }

View File

@ -158,7 +158,7 @@ Foam::tokenList Foam::functionEntries::evalEntry::evaluate
OTstream toks; OTstream toks;
result.writeValue(toks); result.writeValue(toks);
return std::move(toks); return tokenList(std::move(toks.tokens()));
} }

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2015-2020 OpenCFD Ltd. Copyright (C) 2015-2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -1205,7 +1205,7 @@ void Foam::argList::parse
{ {
parRunControl_.distributed(true); parRunControl_.distributed(true);
source = "-roots"; source = "-roots";
if (roots.size() != 1) if (roots.size() > 1)
{ {
dictNProcs = roots.size()+1; dictNProcs = roots.size()+1;
} }
@ -1214,6 +1214,7 @@ void Foam::argList::parse
{ {
roots.resize(Pstream::nProcs()-1, fileName::null); roots.resize(Pstream::nProcs()-1, fileName::null);
parRunControl_.distributed(true);
source = "-hostRoots"; source = "-hostRoots";
ITstream is(source, options_["hostRoots"]); ITstream is(source, options_["hostRoots"]);
@ -1252,7 +1253,7 @@ void Foam::argList::parse
} }
} }
if (roots.size() != 1) if (roots.size() > 1)
{ {
dictNProcs = roots.size()+1; dictNProcs = roots.size()+1;
} }
@ -1296,6 +1297,12 @@ void Foam::argList::parse
{ {
parRunControl_.distributed(true); parRunControl_.distributed(true);
decompDict.readEntry("roots", roots); decompDict.readEntry("roots", roots);
if (roots.empty())
{
DetailInfo
<< "WARNING: running distributed"
<< " but did not specify roots!" << nl;
}
} }
} }
@ -1363,8 +1370,8 @@ void Foam::argList::parse
{ {
options_.set("case", roots[slave-1]/globalCase_); options_.set("case", roots[slave-1]/globalCase_);
OPstream toSlave(Pstream::commsTypes::scheduled, slave); OPstream toProc(Pstream::commsTypes::scheduled, slave);
toSlave << args_ << options_ << roots.size(); toProc << args_ << options_ << parRunControl_.distributed();
} }
options_.erase("case"); options_.erase("case");
@ -1410,24 +1417,24 @@ void Foam::argList::parse
// Distribute the master's argument list (unaltered) // Distribute the master's argument list (unaltered)
for (const int slave : Pstream::subProcs()) for (const int slave : Pstream::subProcs())
{ {
OPstream toSlave(Pstream::commsTypes::scheduled, slave); OPstream toProc(Pstream::commsTypes::scheduled, slave);
toSlave << args_ << options_ << roots.size(); toProc << args_ << options_ << parRunControl_.distributed();
} }
} }
} }
else else
{ {
// Collect the master's argument list // Collect the master's argument list
label nroots; bool isDistributed;
IPstream fromMaster IPstream fromMaster
( (
Pstream::commsTypes::scheduled, Pstream::commsTypes::scheduled,
Pstream::masterNo() Pstream::masterNo()
); );
fromMaster >> args_ >> options_ >> nroots; fromMaster >> args_ >> options_ >> isDistributed;
parRunControl_.distributed(nroots); parRunControl_.distributed(isDistributed);
// Establish rootPath_/globalCase_/case_ for slave // Establish rootPath_/globalCase_/case_ for slave
setCasePaths(); setCasePaths();

View File

@ -202,7 +202,8 @@ inline Foam::Matrix<Form, Type>::Matrix
) )
: :
mRows_(Mb.m()), mRows_(Mb.m()),
nCols_(Mb.n()) nCols_(Mb.n()),
v_(nullptr)
{ {
doAlloc(); doAlloc();
@ -224,7 +225,8 @@ inline Foam::Matrix<Form, Type>::Matrix
) )
: :
mRows_(Mb.m()), mRows_(Mb.m()),
nCols_(Mb.n()) nCols_(Mb.n()),
v_(nullptr)
{ {
doAlloc(); doAlloc();

View File

@ -45,6 +45,9 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "mathematicalConstants.H" #include "mathematicalConstants.H"
#include "error.H"
#include <cmath>
#include <limits>
using namespace Foam::constant::mathematical; using namespace Foam::constant::mathematical;

View File

@ -43,6 +43,10 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "mathematicalConstants.H" #include "mathematicalConstants.H"
#include "error.H"
#include <cmath>
#include <limits>
using namespace Foam::constant::mathematical; using namespace Foam::constant::mathematical;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -513,6 +513,10 @@ inline Foam::Tensor<Cmpt> Foam::Tensor<Cmpt>::T() const
template<class Cmpt> template<class Cmpt>
#if defined(__GNUC__) && !defined(__clang__)
// Workaround for gcc (11+) that fails to handle tensor dot vector
__attribute__((optimize("no-tree-vectorize")))
#endif
inline Foam::Tensor<Cmpt> inline Foam::Tensor<Cmpt>
Foam::Tensor<Cmpt>::inner(const Tensor<Cmpt>& t2) const Foam::Tensor<Cmpt>::inner(const Tensor<Cmpt>& t2) const
{ {
@ -536,6 +540,10 @@ Foam::Tensor<Cmpt>::inner(const Tensor<Cmpt>& t2) const
template<class Cmpt> template<class Cmpt>
#if defined(__GNUC__) && !defined(__clang__)
// Workaround for gcc (11+) that fails to handle tensor dot vector
__attribute__((optimize("no-tree-vectorize")))
#endif
inline Foam::Tensor<Cmpt> inline Foam::Tensor<Cmpt>
Foam::Tensor<Cmpt>::schur(const Tensor<Cmpt>& t2) const Foam::Tensor<Cmpt>::schur(const Tensor<Cmpt>& t2) const
{ {
@ -970,6 +978,10 @@ operator&(const Tensor<Cmpt>& t1, const Tensor<Cmpt>& t2)
//- Inner-product of a SphericalTensor and a Tensor //- Inner-product of a SphericalTensor and a Tensor
template<class Cmpt> template<class Cmpt>
#if defined(__GNUC__) && !defined(__clang__)
// Workaround for gcc (11+) that fails to handle tensor dot vector
__attribute__((optimize("no-tree-vectorize")))
#endif
inline Tensor<Cmpt> inline Tensor<Cmpt>
operator&(const SphericalTensor<Cmpt>& st1, const Tensor<Cmpt>& t2) operator&(const SphericalTensor<Cmpt>& st1, const Tensor<Cmpt>& t2)
{ {
@ -984,6 +996,10 @@ operator&(const SphericalTensor<Cmpt>& st1, const Tensor<Cmpt>& t2)
//- Inner-product of a Tensor and a SphericalTensor //- Inner-product of a Tensor and a SphericalTensor
template<class Cmpt> template<class Cmpt>
#if defined(__GNUC__) && !defined(__clang__)
// Workaround for gcc (11+) that fails to handle tensor dot vector
__attribute__((optimize("no-tree-vectorize")))
#endif
inline Tensor<Cmpt> inline Tensor<Cmpt>
operator&(const Tensor<Cmpt>& t1, const SphericalTensor<Cmpt>& st2) operator&(const Tensor<Cmpt>& t1, const SphericalTensor<Cmpt>& st2)
{ {
@ -998,6 +1014,10 @@ operator&(const Tensor<Cmpt>& t1, const SphericalTensor<Cmpt>& st2)
//- Inner-product of a SymmTensor and a Tensor //- Inner-product of a SymmTensor and a Tensor
template<class Cmpt> template<class Cmpt>
#if defined(__GNUC__) && !defined(__clang__)
// Workaround for gcc (11+) that fails to handle tensor dot vector
__attribute__((optimize("no-tree-vectorize")))
#endif
inline Tensor<Cmpt> inline Tensor<Cmpt>
operator&(const SymmTensor<Cmpt>& st1, const Tensor<Cmpt>& t2) operator&(const SymmTensor<Cmpt>& st1, const Tensor<Cmpt>& t2)
{ {
@ -1020,6 +1040,10 @@ operator&(const SymmTensor<Cmpt>& st1, const Tensor<Cmpt>& t2)
//- Inner-product of a Tensor and a SymmTensor //- Inner-product of a Tensor and a SymmTensor
template<class Cmpt> template<class Cmpt>
#if defined(__GNUC__) && !defined(__clang__)
// Workaround for gcc (11+) that fails to handle tensor dot vector
__attribute__((optimize("no-tree-vectorize")))
#endif
inline Tensor<Cmpt> inline Tensor<Cmpt>
operator&(const Tensor<Cmpt>& t1, const SymmTensor<Cmpt>& st2) operator&(const Tensor<Cmpt>& t1, const SymmTensor<Cmpt>& st2)
{ {
@ -1042,7 +1066,11 @@ operator&(const Tensor<Cmpt>& t1, const SymmTensor<Cmpt>& st2)
//- Inner-product of a Tensor and a Vector //- Inner-product of a Tensor and a Vector
template<class Cmpt> template<class Cmpt>
inline typename innerProduct<Tensor<Cmpt>, Vector<Cmpt>>::type #if defined(__GNUC__) && !defined(__clang__)
// Workaround for gcc (11+) that fails to handle tensor dot vector
__attribute__((optimize("no-tree-vectorize")))
#endif
inline Vector<Cmpt>
operator&(const Tensor<Cmpt>& t, const Vector<Cmpt>& v) operator&(const Tensor<Cmpt>& t, const Vector<Cmpt>& v)
{ {
return Vector<Cmpt> return Vector<Cmpt>
@ -1056,7 +1084,11 @@ operator&(const Tensor<Cmpt>& t, const Vector<Cmpt>& v)
//- Inner-product of a Vector and a Tensor //- Inner-product of a Vector and a Tensor
template<class Cmpt> template<class Cmpt>
inline typename innerProduct<Vector<Cmpt>, Tensor<Cmpt>>::type #if defined(__GNUC__) && !defined(__clang__)
// Workaround for gcc (11+) that fails to handle tensor dot vector
__attribute__((optimize("no-tree-vectorize")))
#endif
inline Vector<Cmpt>
operator&(const Vector<Cmpt>& v, const Tensor<Cmpt>& t) operator&(const Vector<Cmpt>& v, const Tensor<Cmpt>& t)
{ {
return Vector<Cmpt> return Vector<Cmpt>

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2019 OpenCFD Ltd. Copyright (C) 2019-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -42,8 +42,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef SHA1_H #ifndef Foam_SHA1_H
#define SHA1_H #define Foam_SHA1_H
#include <string> #include <string>
#include <cstdint> #include <cstdint>
@ -113,6 +113,9 @@ public:
//- Reset the hashed data before appending more //- Reset the hashed data before appending more
void clear(); void clear();
//- Append single character
inline void append(char c);
//- Append data for processing //- Append data for processing
inline SHA1& append(const char* str); inline SHA1& append(const char* str);

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation Copyright (C) 2011 OpenFOAM Foundation
Copyright (C) 2019 OpenCFD Ltd. Copyright (C) 2019-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -53,6 +53,12 @@ inline Foam::SHA1::SHA1(const std::string& str)
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
inline void Foam::SHA1::append(char c)
{
processBytes(&c, 1);
}
inline Foam::SHA1& Foam::SHA1::append(const char* data, size_t len) inline Foam::SHA1& Foam::SHA1::append(const char* data, size_t len)
{ {
processBytes(data, len); processBytes(data, len);

View File

@ -29,6 +29,7 @@ License
#include "word.H" #include "word.H"
#include "debug.H" #include "debug.H"
#include <cctype> #include <cctype>
#include <cstdint>
#include <sstream> #include <sstream>
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //

View File

@ -1132,7 +1132,17 @@ void Foam::UPstream::allocatePstreamCommunicator
void Foam::UPstream::freePstreamCommunicator(const label communicator) void Foam::UPstream::freePstreamCommunicator(const label communicator)
{ {
if (communicator != 0) // Not touching the first communicator (WORLD)
// or anything out-of bounds.
//
// No UPstream communicator indices when MPI is initialized outside
// of OpenFOAM - thus needs a bounds check too!
if
(
communicator > 0
&& (communicator < PstreamGlobals::MPICommunicators_.size())
)
{ {
if (PstreamGlobals::MPICommunicators_[communicator] != MPI_COMM_NULL) if (PstreamGlobals::MPICommunicators_[communicator] != MPI_COMM_NULL)
{ {

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2018-2020 OpenCFD Ltd. Copyright (C) 2018-2020,2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -135,7 +135,7 @@ void Foam::totalFlowRateAdvectiveDiffusiveFvPatchScalarField::autoMap
const fvPatchFieldMapper& m const fvPatchFieldMapper& m
) )
{ {
scalarField::autoMap(m); mixedFvPatchField<scalar>::autoMap(m);
} }

View File

@ -161,38 +161,38 @@ Foam::turbulentDigitalFilterInletFvPatchVectorField::indexPairs()
void Foam::turbulentDigitalFilterInletFvPatchVectorField::checkR() const void Foam::turbulentDigitalFilterInletFvPatchVectorField::checkR() const
{ {
const vectorField& faceCentres = this->patch().patch().faceCentres(); label badFacei = -1;
forAll(R_, facei) forAll(R_, facei)
{ {
if (R_[facei].xx() <= 0) if (R_[facei].xx() <= 0)
{ {
badFacei = facei;
FatalErrorInFunction FatalErrorInFunction
<< "Reynolds stress tensor component Rxx cannot be negative" << "Reynolds stress tensor component Rxx cannot be negative"
<< " or zero, where Rxx = " << R_[facei].xx() << " or zero, where Rxx = " << R_[facei].xx();
<< " at the face centre = " << faceCentres[facei] break;
<< exit(FatalError);
} }
if (R_[facei].yy() < 0 || R_[facei].zz() < 0) if (R_[facei].yy() < 0 || R_[facei].zz() < 0)
{ {
badFacei = facei;
FatalErrorInFunction FatalErrorInFunction
<< "Reynolds stress tensor components Ryy or Rzz cannot be" << "Reynolds stress tensor components Ryy or Rzz cannot be"
<< " negative where Ryy = " << R_[facei].yy() << " negative where Ryy = " << R_[facei].yy()
<< ", and Rzz = " << R_[facei].zz() << ", and Rzz = " << R_[facei].zz();
<< " at the face centre = " << faceCentres[facei] break;
<< exit(FatalError);
} }
const scalar x0 = R_[facei].xx()*R_[facei].yy() - sqr(R_[facei].xy()); const scalar x0 = R_[facei].xx()*R_[facei].yy() - sqr(R_[facei].xy());
if (x0 <= 0) if (x0 <= 0)
{ {
badFacei = facei;
FatalErrorInFunction FatalErrorInFunction
<< "Reynolds stress tensor component group, Rxx*Ryy - Rxy^2" << "Reynolds stress tensor component group, Rxx*Ryy - Rxy^2"
<< " cannot be negative or zero" << " cannot be negative or zero";
<< " at the face centre = " << faceCentres[facei] break;
<< exit(FatalError);
} }
const scalar x1 = R_[facei].zz() - sqr(R_[facei].xz())/R_[facei].xx(); const scalar x1 = R_[facei].zz() - sqr(R_[facei].xz())/R_[facei].xx();
@ -202,15 +202,23 @@ void Foam::turbulentDigitalFilterInletFvPatchVectorField::checkR() const
if (x3 < 0) if (x3 < 0)
{ {
badFacei = facei;
FatalErrorInFunction FatalErrorInFunction
<< "Reynolds stress tensor component group, " << "Reynolds stress tensor component group, "
<< "Rzz - Rxz^2/Rxx - (Ryz - Rxy*Rxz/(Rxx*(Rxx*Ryy - Rxy^2)))^2" << "Rzz - Rxz^2/Rxx - (Ryz - Rxy*Rxz/(Rxx*(Rxx*Ryy - Rxy^2)))^2"
<< " cannot be negative at the face centre = " << " cannot be negative";
<< faceCentres[facei] break;
<< exit(FatalError);
} }
} }
if (badFacei >= 0)
{
FatalError
<< " at the face centre = "
<< this->patch().patch().faceCentres()[badFacei]
<< exit(FatalError);
}
Info<< " # Reynolds stress tensor on patch is consistent #" << endl; Info<< " # Reynolds stress tensor on patch is consistent #" << endl;
} }

View File

@ -213,11 +213,11 @@ bool Foam::functionObjects::Curle::execute()
forAll(observerPositions_, pointi) forAll(observerPositions_, pointi)
{ {
const vectorField r(Cfp - observerPositions_[pointi]); const vectorField r(observerPositions_[pointi] - Cfp);
const scalarField invMagR(1/(mag(r) + ROOTVSMALL)); const scalarField invMagR(1/(mag(r) + ROOTVSMALL));
pDash[pointi] += pDash[pointi] +=
sum((pp*sqr(invMagR) + invMagR/c0_*dpdtp)*(Sfp & r)); sum((pp*sqr(invMagR) + invMagR/c0_*dpdtp)*(Sfp & (r*invMagR)));
} }
} }

View File

@ -79,7 +79,7 @@ void Foam::functionObjects::nearWallFields::calcAddressing()
const vectorField nf(patch.nf()); const vectorField nf(patch.nf());
const vectorField faceCellCentres(patch.patch().faceCellCentres()); const vectorField faceCellCentres(patch.patch().faceCellCentres());
const labelUList& faceCells = patch.patch().faceCells(); const labelUList& faceCells = patch.patch().faceCells();
const vectorField::subField& faceCentres = patch.patch().faceCentres(); const vectorField::subField faceCentres = patch.patch().faceCentres();
forAll(patch, patchFacei) forAll(patch, patchFacei)
{ {

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2017, 2020 OpenFOAM Foundation Copyright (C) 2011-2017, 2020 OpenFOAM Foundation
Copyright (C) 2018-2020 OpenCFD Ltd. Copyright (C) 2018-2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -415,21 +415,21 @@ void Foam::particle::locate
{ {
if (debug) if (debug)
{ {
Info << "Particle " << origId() << nl << FUNCTION_NAME << nl << endl; Pout<< "Particle " << origId() << nl << FUNCTION_NAME << nl << endl;
} }
celli_ = celli; celli_ = celli;
// Find the cell, if it has not been given // Find the cell, if it has not been given
if (celli < 0) if (celli_ < 0)
{ {
celli_ = mesh_.cellTree().findInside(position); celli_ = mesh_.cellTree().findInside(position);
} if (celli_ < 0)
if (celli < 0) {
{ FatalErrorInFunction
FatalErrorInFunction << "Cell not found for particle position " << position << "."
<< "Cell not found for particle position " << position << "." << exit(FatalError);
<< exit(FatalError); }
} }
const vector displacement = position - mesh_.cellCentres()[celli_]; const vector displacement = position - mesh_.cellCentres()[celli_];
@ -811,10 +811,10 @@ Foam::scalar Foam::particle::trackToStationaryTri
if (debug) if (debug)
{ {
Info << "Step Fraction : " << stepFraction_ << endl; Pout << "Step Fraction : " << stepFraction_ << endl;
Info << "fraction*muH*detA : " << fraction*muH*detA << endl; Pout << "fraction*muH*detA : " << fraction*muH*detA << endl;
Info << "static muH : " << muH << endl; Pout << "static muH : " << muH << endl;
Info << "origId() : " << origId() << endl; Pout << "origId() : " << origId() << endl;
} }
// Accumulate displacement behind // Accumulate displacement behind
@ -864,7 +864,7 @@ Foam::scalar Foam::particle::trackToMovingTri
{ {
Pair<vector> o, b, v1, v2; Pair<vector> o, b, v1, v2;
movingTetGeometry(fraction, o, b, v1, v2); movingTetGeometry(fraction, o, b, v1, v2);
Info<< "Tet points o=" << o[0] << ", b=" << b[0] Pout<< "Tet points o=" << o[0] << ", b=" << b[0]
<< ", v1=" << v1[0] << ", v2=" << v2[0] << endl << ", v1=" << v1[0] << ", v2=" << v2[0] << endl
<< "Tet determinant = " << detA[0] << endl << "Tet determinant = " << detA[0] << endl
<< "Start local coordinates = " << y0[0] << endl; << "Start local coordinates = " << y0[0] << endl;
@ -895,10 +895,10 @@ Foam::scalar Foam::particle::trackToMovingTri
{ {
for (label i = 0; i < 4; ++ i) for (label i = 0; i < 4; ++ i)
{ {
Info<< (i ? " " : "Hit equation ") << i << " = " Pout<< (i ? " " : "Hit equation ") << i << " = "
<< hitEqn[i] << endl; << hitEqn[i] << endl;
} }
Info<< " DetA equation = " << detA << endl; Pout<< " DetA equation = " << detA << endl;
} }
// Calculate the hit fraction // Calculate the hit fraction
@ -927,12 +927,12 @@ Foam::scalar Foam::particle::trackToMovingTri
); );
const scalar detAH = detAEqn.value(mu[j]); const scalar detAH = detAEqn.value(mu[j]);
Info<< "Hit on tet face " << i << " at local coordinate " Pout<< "Hit on tet face " << i << " at local coordinate "
<< (std::isnormal(detAH) ? name(yH/detAH) : "???") << (std::isnormal(detAH) ? name(yH/detAH) : "???")
<< ", " << mu[j]*detA[0]*100 << "% of the " << ", " << mu[j]*detA[0]*100 << "% of the "
<< "way along the track" << endl; << "way along the track" << endl;
Info<< "derivative : " << hitEqn[i].derivative(mu[j]) << nl Pout<< "derivative : " << hitEqn[i].derivative(mu[j]) << nl
<< " coord " << j << " mu[j]: " << mu[j] << nl << " coord " << j << " mu[j]: " << mu[j] << nl
<< " hitEq " << i << endl; << " hitEq " << i << endl;
} }

View File

@ -419,8 +419,6 @@ void Foam::ParticleCollector<CloudType>::write()
massTotal_[facei] += mass_[facei]; massTotal_[facei] += mass_[facei];
} }
const label proci = Pstream::myProcNo();
Info<< type() << " output:" << nl; Info<< type() << " output:" << nl;
Field<scalar> faceMassTotal(mass_.size(), Zero); Field<scalar> faceMassTotal(mass_.size(), Zero);
@ -434,15 +432,11 @@ void Foam::ParticleCollector<CloudType>::write()
scalar sumAverageMFR = 0.0; scalar sumAverageMFR = 0.0;
forAll(faces_, facei) forAll(faces_, facei)
{ {
scalarList allProcMass(Pstream::nProcs()); faceMassTotal[facei] +=
allProcMass[proci] = massTotal_[facei]; returnReduce(massTotal_[facei], sumOp<scalar>());
Pstream::gatherList(allProcMass);
faceMassTotal[facei] += sum(allProcMass);
scalarList allProcMassFlowRate(Pstream::nProcs()); faceMassFlowRate[facei] +=
allProcMassFlowRate[proci] = massFlowRate_[facei]; returnReduce(massFlowRate_[facei], sumOp<scalar>());
Pstream::gatherList(allProcMassFlowRate);
faceMassFlowRate[facei] += sum(allProcMassFlowRate);
sumTotalMass += faceMassTotal[facei]; sumTotalMass += faceMassTotal[facei];
sumAverageMFR += faceMassFlowRate[facei]; sumAverageMFR += faceMassFlowRate[facei];

View File

@ -37,7 +37,7 @@ Description
Typical use might be to e.g. average face centres to points on a patch Typical use might be to e.g. average face centres to points on a patch
const labelListList& pointFaces = pp.pointFaces(); const labelListList& pointFaces = pp.pointFaces();
const pointField& faceCentres = pp.faceCentres(); const vectorField::subField faceCentres = pp.faceCentres();
Field<weightedPosition> avgBoundary(pointFaces.size()); Field<weightedPosition> avgBoundary(pointFaces.size());

View File

@ -1058,6 +1058,8 @@ void Foam::mappedPatchBase::calcMapping() const
} }
} }
} }
updateTime_.setUpToDate();
} }
@ -1223,7 +1225,20 @@ Foam::mappedPatchBase::mappedPatchBase(const polyPatch& pp)
AMIReverse_(false), AMIReverse_(false),
AMIPtr_(new faceAreaWeightAMI(true, AMIReverse_)), AMIPtr_(new faceAreaWeightAMI(true, AMIReverse_)),
surfPtr_(nullptr), surfPtr_(nullptr),
surfDict_(fileName("surface")) surfDict_(fileName("surface")),
updateTime_
(
IOobject
(
"updateTime",
patch_.boundaryMesh().mesh().pointsInstance(),
patch_.boundaryMesh().mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
dimensionedScalar("time", dimTime, -GREAT)
)
{} {}
@ -1257,7 +1272,20 @@ Foam::mappedPatchBase::mappedPatchBase
AMIReverse_(false), AMIReverse_(false),
AMIPtr_(new faceAreaWeightAMI(true, AMIReverse_)), AMIPtr_(new faceAreaWeightAMI(true, AMIReverse_)),
surfPtr_(nullptr), surfPtr_(nullptr),
surfDict_(fileName("surface")) surfDict_(fileName("surface")),
updateTime_
(
IOobject
(
"updateTime",
patch_.boundaryMesh().mesh().pointsInstance(),
patch_.boundaryMesh().mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
dimensionedScalar("time", dimTime, -GREAT)
)
{} {}
@ -1291,7 +1319,20 @@ Foam::mappedPatchBase::mappedPatchBase
AMIReverse_(false), AMIReverse_(false),
AMIPtr_(new faceAreaWeightAMI(true, AMIReverse_)), AMIPtr_(new faceAreaWeightAMI(true, AMIReverse_)),
surfPtr_(nullptr), surfPtr_(nullptr),
surfDict_(fileName("surface")) surfDict_(fileName("surface")),
updateTime_
(
IOobject
(
"updateTime",
patch_.boundaryMesh().mesh().pointsInstance(),
patch_.boundaryMesh().mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
dimensionedScalar("time", dimTime, -GREAT)
)
{} {}
@ -1325,7 +1366,20 @@ Foam::mappedPatchBase::mappedPatchBase
AMIReverse_(false), AMIReverse_(false),
AMIPtr_(new faceAreaWeightAMI(true, AMIReverse_)), AMIPtr_(new faceAreaWeightAMI(true, AMIReverse_)),
surfPtr_(nullptr), surfPtr_(nullptr),
surfDict_(fileName("surface")) surfDict_(fileName("surface")),
updateTime_
(
IOobject
(
"updateTime",
patch_.boundaryMesh().mesh().pointsInstance(),
patch_.boundaryMesh().mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
dimensionedScalar("time", dimTime, -GREAT)
)
{} {}
@ -1364,7 +1418,20 @@ Foam::mappedPatchBase::mappedPatchBase
) )
), ),
surfPtr_(nullptr), surfPtr_(nullptr),
surfDict_(dict.subOrEmptyDict("surface")) surfDict_(dict.subOrEmptyDict("surface")),
updateTime_
(
IOobject
(
"updateTime",
patch_.boundaryMesh().mesh().pointsInstance(),
patch_.boundaryMesh().mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
dimensionedScalar("time", dimTime, -GREAT)
)
{ {
if (!coupleGroup_.valid()) if (!coupleGroup_.valid())
{ {
@ -1454,7 +1521,20 @@ Foam::mappedPatchBase::mappedPatchBase
) )
), ),
surfPtr_(nullptr), surfPtr_(nullptr),
surfDict_(dict.subOrEmptyDict("surface")) surfDict_(dict.subOrEmptyDict("surface")),
updateTime_
(
IOobject
(
"updateTime",
patch_.boundaryMesh().mesh().pointsInstance(),
patch_.boundaryMesh().mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
dimensionedScalar("time", dimTime, -GREAT)
)
{ {
if (mode != NEARESTPATCHFACE && mode != NEARESTPATCHFACEAMI) if (mode != NEARESTPATCHFACE && mode != NEARESTPATCHFACEAMI)
{ {
@ -1507,7 +1587,20 @@ Foam::mappedPatchBase::mappedPatchBase
AMIReverse_(mpb.AMIReverse_), AMIReverse_(mpb.AMIReverse_),
AMIPtr_(mpb.AMIPtr_->clone()), AMIPtr_(mpb.AMIPtr_->clone()),
surfPtr_(nullptr), surfPtr_(nullptr),
surfDict_(mpb.surfDict_) surfDict_(mpb.surfDict_),
updateTime_
(
IOobject
(
"updateTime",
patch_.boundaryMesh().mesh().pointsInstance(),
patch_.boundaryMesh().mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
dimensionedScalar("time", dimTime, -GREAT)
)
{} {}
@ -1545,7 +1638,20 @@ Foam::mappedPatchBase::mappedPatchBase
AMIReverse_(mpb.AMIReverse_), AMIReverse_(mpb.AMIReverse_),
AMIPtr_(mpb.AMIPtr_->clone()), AMIPtr_(mpb.AMIPtr_->clone()),
surfPtr_(nullptr), surfPtr_(nullptr),
surfDict_(mpb.surfDict_) surfDict_(mpb.surfDict_),
updateTime_
(
IOobject
(
"updateTime",
patch_.boundaryMesh().mesh().pointsInstance(),
patch_.boundaryMesh().mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
dimensionedScalar("time", dimTime, -GREAT)
)
{} {}

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2020 OpenCFD Ltd. Copyright (C) 2020, 2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -96,6 +96,7 @@ SourceFiles
#include "pointIndexHit.H" #include "pointIndexHit.H"
#include "AMIPatchToPatchInterpolation.H" #include "AMIPatchToPatchInterpolation.H"
#include "coupleGroupIdentifier.H" #include "coupleGroupIdentifier.H"
#include "uniformDimensionedFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -291,6 +292,9 @@ protected:
//- Dictionary storing projection surface description //- Dictionary storing projection surface description
dictionary surfDict_; dictionary surfDict_;
//- Update time, e.g. for topo-changes
mutable uniformDimensionedScalarField updateTime_;
// Protected Member Functions // Protected Member Functions

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation Copyright (C) 2011-2015 OpenFOAM Foundation
Copyright (C) 2020 OpenCFD Ltd. Copyright (C) 2020, 2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -167,13 +167,15 @@ inline bool Foam::mappedPatchBase::sameRegion() const
inline const Foam::mapDistribute& Foam::mappedPatchBase::map() const inline const Foam::mapDistribute& Foam::mappedPatchBase::map() const
{ {
const polyMesh& thisMesh = patch_.boundaryMesh().mesh(); const polyMesh& thisMesh = patch_.boundaryMesh().mesh();
bool topoChange =
(sameWorld() && sampleMesh().topoChanging())
|| thisMesh.topoChanging();
if (topoChange) if (!thisMesh.upToDatePoints(updateTime_))
{ {
mapPtr_.reset(nullptr); mapPtr_.reset(nullptr);
if (AMIPtr_)
{
AMIPtr_->upToDate() = false;
}
} }
if (!mapPtr_) if (!mapPtr_)
@ -191,15 +193,19 @@ inline const Foam::AMIPatchToPatchInterpolation& Foam::mappedPatchBase::AMI
) const ) const
{ {
const polyMesh& thisMesh = patch_.boundaryMesh().mesh(); const polyMesh& thisMesh = patch_.boundaryMesh().mesh();
bool topoChange =
(sameWorld() && sampleMesh().topoChanging())
|| thisMesh.topoChanging();
if (topoChange || forceUpdate) if (forceUpdate)
{ {
AMIPtr_->upToDate() = false; AMIPtr_->upToDate() = false;
} }
if (!thisMesh.upToDatePoints(updateTime_))
{
mapPtr_.reset(nullptr);
AMIPtr_->upToDate() = false;
}
calcAMI(); calcAMI();
return *AMIPtr_; return *AMIPtr_;

View File

@ -70,14 +70,15 @@ void Foam::mappedPatchBase::distribute
} }
default: default:
{ {
const auto& map = this->map();
mapDistributeBase::distribute mapDistributeBase::distribute
( (
Pstream::defaultCommsType, Pstream::defaultCommsType,
map().schedule(), map.schedule(),
map().constructSize(), map.constructSize(),
map().subMap(), map.subMap(),
false, false,
map().constructMap(), map.constructMap(),
false, false,
lst, lst,
Type(Zero), Type(Zero),
@ -139,14 +140,15 @@ void Foam::mappedPatchBase::reverseDistribute
default: default:
{ {
label cSize = sampleSize(); label cSize = sampleSize();
const auto& map = this->map();
mapDistributeBase::distribute mapDistributeBase::distribute
( (
Pstream::defaultCommsType, Pstream::defaultCommsType,
map().schedule(), map.schedule(),
cSize, cSize,
map().constructMap(), map.constructMap(),
false, false,
map().subMap(), map.subMap(),
false, false,
lst, lst,
Type(Zero), Type(Zero),

View File

@ -155,7 +155,7 @@ bool Foam::vtk::writePointSet
if (parallel) if (parallel)
{ {
vtk::writeListParallel(format(), mesh.points(), pointLabels); vtk::writeListParallel(format.ref(), mesh.points(), pointLabels);
} }
else else
{ {

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2018-2020 OpenCFD Ltd. Copyright (C) 2018-2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -39,6 +39,7 @@ https://www.geometrictools.com/Documentation/DistancePointEllipseEllipsoid.pdf
#include "searchableSphere.H" #include "searchableSphere.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
#include <array>
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //

View File

@ -304,6 +304,7 @@ scalar surfaceNoise::writeSurfaceData
false // serial - already merged false // serial - already merged
); );
writerPtr_->nFields() = 1; // Legacy VTK
writerPtr_->write(title, allData); writerPtr_->write(title, allData);
writerPtr_->endTime(); writerPtr_->endTime();
@ -336,6 +337,7 @@ scalar surfaceNoise::writeSurfaceData
false // serial - already merged false // serial - already merged
); );
writerPtr_->nFields() = 1; // Legacy VTK
writerPtr_->write(title, data); writerPtr_->write(title, data);
writerPtr_->endTime(); writerPtr_->endTime();

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2016-2019 OpenCFD Ltd. Copyright (C) 2016-2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -249,27 +249,41 @@ Foam::tmp<Foam::labelField> Foam::regionModels::regionModel1D::moveMesh
vectorField newDelta(cells.size() + 1, Zero); vectorField newDelta(cells.size() + 1, Zero);
label j = 0; label j = 0;
forAllReverse(cells, i) forAll(cells, i)
{ {
const label celli = cells[i]; const label celli = cells[i];
newDelta[j+1] = (deltaV[celli]/mag(sf))*n + newDelta[j]; newDelta[j+1] = (deltaV[celli]/mag(sf))*n + newDelta[j];
j++; j++;
} }
forAll(faces, i) // Move the back face first
const face of = regionMesh().faces()[oFace];
{
scalar omagV = mag(newDelta[newDelta.size()-1]);
if (!frozen[cells.size()-1] && (omagV > ROOTVSMALL))
{
forAll(of, pti)
{
const label pointi = of[pti];
newPoints[pointi] =
oldPoints[pointi] - newDelta[newDelta.size()-1];
}
}
}
// Do internal faces
for (label i=0; i < faces.size(); i++)
{ {
const label facei = faces[i]; const label facei = faces[i];
const face f = regionMesh().faces()[facei]; const face f = regionMesh().faces()[facei];
if (!frozen[i]) scalar magV = mag(newDelta[i]);
if (!frozen[i] && magV > 0)
{ {
forAll(f, pti) forAll(f, pti)
{ {
const label pointi = f[pti]; const label pointi = f[pti];
newPoints[pointi] = oldPoints[pointi] - newDelta[i];
newPoints[pointi] =
oldPoints[pointi]
+ newDelta[newDelta.size() - 1 - i];
} }
} }
} }

View File

@ -843,15 +843,15 @@ Foam::meshToMesh::mapTgtToSrc
label srcPatchi = srcPatchID_[i]; label srcPatchi = srcPatchID_[i];
label tgtPatchi = tgtPatchID_[i]; label tgtPatchi = tgtPatchID_[i];
if (!srcPatchFields.set(tgtPatchi)) if (!srcPatchFields.set(srcPatchi))
{ {
srcPatchFields.set srcPatchFields.set
( (
srcPatchi, srcPatchi,
fvPatchField<Type>::New fvPatchField<Type>::New
( (
tgtBfld[srcPatchi], tgtBfld[tgtPatchi],
srcMesh.boundary()[tgtPatchi], srcMesh.boundary()[srcPatchi],
DimensionedField<Type, volMesh>::null(), DimensionedField<Type, volMesh>::null(),
directFvPatchFieldMapper directFvPatchFieldMapper
( (

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2019 OpenCFD Ltd. Copyright (C) 2019-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -107,7 +107,7 @@ void Foam::polySurface::storeField
if (dimfield) if (dimfield)
{ {
dimfield->dimensions() = dims; dimfield->dimensions().reset(dims); // Dimensions may have changed
dimfield->field() = values; dimfield->field() = values;
} }
else else
@ -148,7 +148,7 @@ void Foam::polySurface::storeField
if (dimfield) if (dimfield)
{ {
dimfield->dimensions() = dims; dimfield->dimensions().reset(dims); // Dimensions may have changed
dimfield->field() = std::move(values); dimfield->field() = std::move(values);
} }
else else

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2019 OpenCFD Ltd. Copyright (C) 2019-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -45,7 +45,7 @@ void Foam::surfMesh::storeField
if (dimfield) if (dimfield)
{ {
dimfield->dimensions() = dims; dimfield->dimensions().reset(dims); // Dimensions may have changed
dimfield->field() = values; dimfield->field() = values;
} }
else else
@ -85,7 +85,7 @@ void Foam::surfMesh::storeField
if (dimfield) if (dimfield)
{ {
dimfield->dimensions() = dims; dimfield->dimensions().reset(dims); // Dimensions may have changed
dimfield->field() = std::move(values); dimfield->field() = std::move(values);
} }
else else

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2015 OpenFOAM Foundation Copyright (C) 2015 OpenFOAM Foundation
Copyright (C) 2015-2020 OpenCFD Ltd. Copyright (C) 2015-2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -108,6 +108,57 @@ Foam::surfaceWriters::boundaryDataWriter::boundaryDataWriter
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::surfaceWriters::boundaryDataWriter::serialWriteGeometry
(
const regIOobject& iopts,
const meshedSurf& surf
)
{
const pointField& points = surf.points();
const faceList& faces = surf.faces();
if (verbose_)
{
if (this->isPointData())
{
Info<< "Writing points: " << iopts.objectPath() << endl;
}
else
{
Info<< "Writing face centres: " << iopts.objectPath() << endl;
}
}
// Like regIOobject::writeObject without instance() adaptation
// since this would write to e.g. 0/ instead of postProcessing/
OFstream osGeom(iopts.objectPath(), streamOpt_);
if (header_)
{
iopts.writeHeader(osGeom);
}
if (this->isPointData())
{
// Just like writeData, but without copying beforehand
osGeom << points;
}
else
{
primitivePatch pp(SubList<face>(faces), points);
// Just like writeData, but without copying beforehand
osGeom << pp.faceCentres();
}
if (header_)
{
iopts.writeEndDivider(osGeom);
}
}
Foam::fileName Foam::surfaceWriters::boundaryDataWriter::write() Foam::fileName Foam::surfaceWriters::boundaryDataWriter::write()
{ {
checkOpen(); checkOpen();
@ -129,6 +180,7 @@ Foam::fileName Foam::surfaceWriters::boundaryDataWriter::write()
mkDir(surfaceDir); mkDir(surfaceDir);
} }
// Write sample locations
pointIOField iopts pointIOField iopts
( (
IOobject IOobject
@ -140,30 +192,9 @@ Foam::fileName Foam::surfaceWriters::boundaryDataWriter::write()
false false
) )
); );
iopts.note() = (this->isPointData() ? "point data" : "face data");
if (verbose_) serialWriteGeometry(iopts, surf);
{
Info<< "Writing points: " << iopts.objectPath() << endl;
}
// Like regIOobject::writeObject without instance() adaptation
// since this would write to e.g. 0/ instead of postProcessing/
OFstream osGeom(iopts.objectPath(), streamOpt_);
if (header_)
{
iopts.writeHeader(osGeom);
}
// Just like writeData, but without copying beforehand
osGeom << surf.points();
if (header_)
{
iopts.writeEndDivider(osGeom);
}
} }
wroteGeom_ = true; wroteGeom_ = true;
@ -212,67 +243,29 @@ Foam::fileName Foam::surfaceWriters::boundaryDataWriter::writeTemplate
if (Pstream::master() || !parallel_) if (Pstream::master() || !parallel_)
{ {
const pointField& points = surf.points();
const faceList& faces = surf.faces();
if (!isDir(outputFile.path())) if (!isDir(outputFile.path()))
{ {
mkDir(outputFile.path()); mkDir(outputFile.path());
} }
pointIOField iopts // Write sample locations
( {
IOobject pointIOField iopts
( (
surfaceDir/"points", IOobject
*dummyTimePtr, (
IOobject::NO_READ, surfaceDir/"points",
IOobject::NO_WRITE, *dummyTimePtr,
false IOobject::NO_READ,
) IOobject::NO_WRITE,
); false
)
);
iopts.note() = (this->isPointData() ? "point data" : "face data");
if (verbose_) serialWriteGeometry(iopts, surf);
{
if (this->isPointData())
{
Info<< "Writing points: " << iopts.objectPath() << endl;
}
else
{
Info<< "Writing face centres: " << iopts.objectPath() << endl;
}
} }
// Like regIOobject::writeObject without instance() adaptation
// since this would write to e.g. 0/ instead of postProcessing/
OFstream osGeom(iopts.objectPath(), streamOpt_);
if (header_)
{
iopts.writeHeader(osGeom);
}
if (this->isPointData())
{
// Just like writeData, but without copying beforehand
osGeom << points;
}
else
{
primitivePatch pp(SubList<face>(faces), points);
// Just like writeData, but without copying beforehand
osGeom << pp.faceCentres();
}
if (header_)
{
iopts.writeEndDivider(osGeom);
}
// Write field // Write field
{ {
IOField<Type> iofld IOField<Type> iofld
@ -286,6 +279,7 @@ Foam::fileName Foam::surfaceWriters::boundaryDataWriter::writeTemplate
false false
) )
); );
iofld.note() = (this->isPointData() ? "point data" : "face data");
OFstream osField(iofld.objectPath(), streamOpt_); OFstream osField(iofld.objectPath(), streamOpt_);

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2015-2020 OpenCFD Ltd. Copyright (C) 2015-2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -134,6 +134,10 @@ SourceFiles
namespace Foam namespace Foam
{ {
// Forward Declarations
class regIOobject;
namespace surfaceWriters namespace surfaceWriters
{ {
@ -159,6 +163,9 @@ class boundaryDataWriter
// Private Member Functions // Private Member Functions
//- Write serial surface geometry to "points" file.
void serialWriteGeometry(const regIOobject&, const meshedSurf& surf);
//- Templated write field operation //- Templated write field operation
template<class Type> template<class Type>
fileName writeTemplate fileName writeTemplate

View File

@ -140,17 +140,6 @@ Foam::radiation::radiativeIntensityRay::radiativeIntensityRay
if (mesh_.nSolutionD() == 2) if (mesh_.nSolutionD() == 2)
{ {
// Omega for 2D
omega_ = deltaPhi;
// dAve for 2D
dAve_ = vector
(
2*sinPhi*Foam::sin(0.5*deltaPhi),
2*cosPhi*Foam::sin(0.5*deltaPhi),
0
);
vector meshDir(Zero); vector meshDir(Zero);
if (dom_.meshOrientation() != vector::zero) if (dom_.meshOrientation() != vector::zero)
{ {
@ -172,7 +161,6 @@ Foam::radiation::radiativeIntensityRay::radiativeIntensityRay
dAve_ = coordRot & dAve_; dAve_ = coordRot & dAve_;
d_ = coordRot & d_; d_ = coordRot & d_;
} }
else if (mesh_.nSolutionD() == 1) else if (mesh_.nSolutionD() == 1)
{ {
@ -195,9 +183,6 @@ Foam::radiation::radiativeIntensityRay::radiativeIntensityRay
dAve_ = (dAve_ & normal)*meshDir; dAve_ = (dAve_ & normal)*meshDir;
d_ = (d_ & normal)*meshDir; d_ = (d_ & normal)*meshDir;
// Omega normalization for 1D
omega_ /= 2;
} }
autoPtr<volScalarField> IDefaultPtr; autoPtr<volScalarField> IDefaultPtr;

View File

@ -136,7 +136,7 @@ void Foam::faceReflecting::initialise(const dictionary& coeffs)
forAll(patches, patchI) forAll(patches, patchI)
{ {
const polyPatch& pp = patches[patchI]; const polyPatch& pp = patches[patchI];
const pointField& cf = pp.faceCentres(); const vectorField::subField cf = pp.faceCentres();
if (!pp.coupled() && !isA<cyclicAMIPolyPatch>(pp)) if (!pp.coupled() && !isA<cyclicAMIPolyPatch>(pp))
{ {

View File

@ -155,7 +155,7 @@ void Foam::faceShading::calculate()
forAll(patches, patchI) forAll(patches, patchI)
{ {
const polyPatch& pp = patches[patchI]; const polyPatch& pp = patches[patchI];
const pointField& cf = pp.faceCentres(); const vectorField::subField cf = pp.faceCentres();
if (!pp.coupled() && !isA<cyclicAMIPolyPatch>(pp)) if (!pp.coupled() && !isA<cyclicAMIPolyPatch>(pp))
{ {

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2019 OpenCFD Ltd. Copyright (C) 2019-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -35,8 +35,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef solidArrheniusReactionRate_H #ifndef Foam_solidArrheniusReactionRate_H
#define solidArrheniusReactionRate_H #define Foam_solidArrheniusReactionRate_H
#include "scalarField.H" #include "scalarField.H"
#include "typeInfo.H" #include "typeInfo.H"
@ -46,23 +46,27 @@ SourceFiles
namespace Foam namespace Foam
{ {
// Forward declaration of friend functions and operators // Forward Declarations
class solidArrheniusReactionRate; class solidArrheniusReactionRate;
Ostream& operator<<(Ostream&, const solidArrheniusReactionRate&); Ostream& operator<<(Ostream&, const solidArrheniusReactionRate&);
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class solidArrheniusReactionRate Declaration Class solidArrheniusReactionRate Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class solidArrheniusReactionRate class solidArrheniusReactionRate
{ {
// Private data // Private Data
//- Pre-exponential factor
scalar A_; scalar A_;
//- Activation temperature
scalar Ta_; scalar Ta_;
//- Critical temperature
scalar Tcrit_; scalar Tcrit_;
@ -99,6 +103,8 @@ public:
return "Arrhenius"; return "Arrhenius";
} }
//- Return reaction rate constant
// frequency of collisions resulting in a reaction
inline scalar operator() inline scalar operator()
( (
const scalar p, const scalar p,
@ -107,7 +113,7 @@ public:
) const; ) const;
//- Write to stream //- Write to stream
inline void write(Ostream& os) const; inline void write(Ostream& os) const;

View File

@ -6,6 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -32,7 +33,6 @@ inline Foam::solidArrheniusReactionRate::solidArrheniusReactionRate
const scalar A, const scalar A,
const scalar Ta, const scalar Ta,
const scalar Tcrit const scalar Tcrit
//const scalar nReact
) )
: :
A_(A), A_(A),
@ -62,18 +62,12 @@ inline Foam::scalar Foam::solidArrheniusReactionRate::operator()
const scalarField& const scalarField&
) const ) const
{ {
scalar ak = A_;
if (T < Tcrit_) if (T < Tcrit_)
{ {
ak *= 0.0; return 0;
}
else
{
ak *= exp(-Ta_/T);
} }
return ak; return A_*exp(-Ta_/T);
} }

View File

@ -0,0 +1,170 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::solidIsothermalReactionRate
Description
Isothermal reaction rate for solids
Usage
Minimal example:
\verbatim
{
// Mandatory entries
C <scalar>;
Cp <scalar>;
Tpc <scalar>;
Elat <scalar>;
}
\endverbatim
where the entries mean:
\table
Property | Description | Type | Reqd | Deflt
C | Model constant | scalar | yes | -
Cp | Specific heat of solid material (assumed constant) | scalar | yes | -
Tpc | Phase change temperature | scalar | yes | -
Elat | Latent heat of phase change | scalar | yes | -
\endtable
Note
- \c Elat, the latent energy is defined in the present
implementation as a negative value (using the convention
endothermic process has negative enthalpy.)
SourceFiles
solidIsothermalReactionRateI.H
\*---------------------------------------------------------------------------*/
#ifndef Foam_solidIsothermalReactionRate_H
#define Foam_solidIsothermalReactionRate_H
#include "scalarField.H"
#include "typeInfo.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward Declarations
class solidIsothermalReactionRate;
Ostream& operator<<(Ostream&, const solidIsothermalReactionRate&);
/*---------------------------------------------------------------------------*\
Class solidIsothermalReactionRate Declaration
\*---------------------------------------------------------------------------*/
class solidIsothermalReactionRate
{
// Private Data
//- Model constant
scalar C_;
//- Specific heat of solid material (assumed constant)
scalar Cp_;
//- Phase change temperature
scalar Tpc_;
//- Latent heat of phase change
scalar Elat_;
public:
// Constructors
//- Construct from components
inline solidIsothermalReactionRate
(
const scalar C,
const scalar Cp,
const scalar Tpc,
const scalar Elat
);
//- Construct from dictionary
inline solidIsothermalReactionRate
(
const speciesTable& species,
const dictionary& dict
);
//- Destructor
virtual ~solidIsothermalReactionRate() = default;
// Member Functions
//- Return the type name
static word type()
{
return "Isothermal";
}
//- Return reaction rate constant
// frequency of collisions resulting in a reaction
inline scalar operator()
(
const scalar p,
const scalar T,
const scalarField& c
) const;
//- Write to stream
inline void write(Ostream& os) const;
// Ostream Operator
inline friend Ostream& operator<<
(
Ostream&,
const solidIsothermalReactionRate&
);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "solidIsothermalReactionRateI.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,96 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
inline Foam::solidIsothermalReactionRate::solidIsothermalReactionRate
(
const scalar C,
const scalar Cp,
const scalar Tpc,
const scalar Elat
)
:
C_(C),
Cp_(Cp),
Tpc_(Tpc),
Elat_(Elat)
{}
inline Foam::solidIsothermalReactionRate::solidIsothermalReactionRate
(
const speciesTable&,
const dictionary& dict
)
:
C_(dict.get<scalar>("C")),
Cp_(dict.get<scalar>("Cp")),
Tpc_(dict.get<scalar>("Tpc")),
Elat_(dict.get<scalar>("Elat"))
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
inline Foam::scalar Foam::solidIsothermalReactionRate::operator()
(
const scalar,
const scalar T,
const scalarField&
) const
{
if (T < Tpc_)
{
return 0;
}
return -C_*Cp_*(T - Tpc_)/Elat_;
}
inline void Foam::solidIsothermalReactionRate::write(Ostream& os) const
{
os.writeEntry("C", C_);
os.writeEntry("Cp", Cp_);
os.writeEntry("Tpc", Tpc_);
os.writeEntry("Elat", Elat_);
}
inline Foam::Ostream& Foam::operator<<
(
Ostream& os,
const solidIsothermalReactionRate& iso
)
{
iso.write(os);
return os;
}
// ************************************************************************* //

View File

@ -6,6 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -56,11 +57,6 @@ namespace Foam
typedef ReactionType<solidReaction, Thermo, ReactionRate> \ typedef ReactionType<solidReaction, Thermo, ReactionRate> \
ReactionType##Thermo##ReactionRate; \ ReactionType##Thermo##ReactionRate; \
\ \
defineTemplateRunTimeSelectionTable(Reaction##Thermo, dictionary); \
\
defineTemplateTypeNameAndDebug(solidReaction##Thermo, 0); \
defineTemplateTypeNameAndDebug(Reaction##Thermo, 0); \
\
template<> \ template<> \
const word ReactionType##Thermo##ReactionRate::typeName \ const word ReactionType##Thermo##ReactionRate::typeName \
( \ ( \

View File

@ -6,6 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation Copyright (C) 2011-2015 OpenFOAM Foundation
Copyright (C) 2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -26,9 +27,29 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "makeSolidReaction.H" #include "makeSolidReaction.H"
#include "solidArrheniusReactionRate.H" #include "solidArrheniusReactionRate.H"
#include "solidIsothermalReactionRate.H"
#include "solidThermoPhysicsTypes.H" #include "solidThermoPhysicsTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#define makeSolidReactions(Thermo) \
\
typedef solidReaction<Thermo> solidReaction##Thermo; \
\
typedef Reaction<Thermo> Reaction##Thermo; \
\
defineTemplateRunTimeSelectionTable(Reaction##Thermo, dictionary); \
\
defineTemplateTypeNameAndDebug(solidReaction##Thermo, 0); \
defineTemplateTypeNameAndDebug(Reaction##Thermo, 0); \
\
makeSolidIRReactions(Thermo, solidArrheniusReactionRate) \
makeSolidIRReactions(Thermo, solidIsothermalReactionRate)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
@ -36,19 +57,11 @@ namespace Foam
// * * * * * * * * * * * * * Make Solid reactions * * * * * * * * * * * * // // * * * * * * * * * * * * * Make Solid reactions * * * * * * * * * * * * //
makeSolidIRReactions(hConstSolidThermoPhysics, solidArrheniusReactionRate) makeSolidReactions(hConstSolidThermoPhysics)
makeSolidIRReactions makeSolidReactions(hPowerSolidThermoPhysics)
(
hPowerSolidThermoPhysics,
solidArrheniusReactionRate
)
makeSolidIRReactions makeSolidReactions(hExpKappaConstSolidThermoPhysics)
(
hExpKappaConstSolidThermoPhysics,
solidArrheniusReactionRate
)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -72,16 +72,16 @@ Foam::liquidProperties::liquidProperties
Foam::liquidProperties::liquidProperties(const dictionary& dict) Foam::liquidProperties::liquidProperties(const dictionary& dict)
: :
thermophysicalProperties(dict), thermophysicalProperties(dict),
Tc_(dict.get<label>("Tc")), Tc_(dict.get<scalar>("Tc")),
Pc_(dict.get<label>("Pc")), Pc_(dict.get<scalar>("Pc")),
Vc_(dict.get<label>("Vc")), Vc_(dict.get<scalar>("Vc")),
Zc_(dict.get<label>("Zc")), Zc_(dict.get<scalar>("Zc")),
Tt_(dict.get<label>("Tt")), Tt_(dict.get<scalar>("Tt")),
Pt_(dict.get<label>("Pt")), Pt_(dict.get<scalar>("Pt")),
Tb_(dict.get<label>("Tb")), Tb_(dict.get<scalar>("Tb")),
dipm_(dict.get<label>("dipm")), dipm_(dict.get<scalar>("dipm")),
omega_(dict.get<label>("omega")), omega_(dict.get<scalar>("omega")),
delta_(dict.get<label>("delta")) delta_(dict.get<scalar>("delta"))
{} {}

View File

@ -120,8 +120,8 @@ do
# Prefix: openfoam (other) # Prefix: openfoam (other)
(o | openfoam) FOAM_MODULE_PREFIX="${FOAM_LIBBIN%/*}" ;; (o | openfoam) FOAM_MODULE_PREFIX="${FOAM_LIBBIN%/*}" ;;
# Prefix: false (ie, 'disabled') # Prefix: false | none (ie, 'disabled')
(false) FOAM_MODULE_PREFIX=false ;; (false | none) FOAM_MODULE_PREFIX=false ;;
# Prefix: directory (absolute or relative) # Prefix: directory (absolute or relative)
(*) (*)

View File

@ -6,7 +6,7 @@
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Copyright (C) 2015-2016 OpenFOAM Foundation # Copyright (C) 2015-2016 OpenFOAM Foundation
# Copyright (C) 2018-2020 OpenCFD Ltd. # Copyright (C) 2018-2021 OpenCFD Ltd.
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# License # License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later. # This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
@ -71,8 +71,8 @@ setModulePrefix()
# Prefix: openfoam (other) # Prefix: openfoam (other)
(o | openfoam) FOAM_MODULE_PREFIX="${FOAM_LIBBIN%/*}" ;; (o | openfoam) FOAM_MODULE_PREFIX="${FOAM_LIBBIN%/*}" ;;
# Prefix: false (ie, 'disabled') # Prefix: false | none (ie, 'disabled')
(false) FOAM_MODULE_PREFIX=false ;; (false | none) FOAM_MODULE_PREFIX=false ;;
# Prefix: directory (absolute or relative) # Prefix: directory (absolute or relative)
(*) (*)