mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
resolving merge conflict
This commit is contained in:
5
Allwmake
5
Allwmake
@ -1,10 +1,13 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
|
# run from this directory only
|
||||||
|
cd ${0%/*} || exit 1
|
||||||
|
|
||||||
# wmake is required for subsequent targets
|
# wmake is required for subsequent targets
|
||||||
(cd wmake/src && make)
|
(cd wmake/src && make)
|
||||||
|
|
||||||
(cd $WM_PROJECT_INST_DIR/ThirdParty && ./Allwmake)
|
(cd $WM_THIRD_PARTY_DIR && ./Allwmake)
|
||||||
|
|
||||||
(cd src && ./Allwmake)
|
(cd src && ./Allwmake)
|
||||||
|
|
||||||
|
|||||||
63
README
63
README
@ -29,8 +29,8 @@
|
|||||||
2. System requirements
|
2. System requirements
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
OpenFOAM is developed and tested on Linux, but should work with other
|
OpenFOAM is developed and tested on Linux, but should work with other
|
||||||
Unix style system. To check your system setup, execute the foamSystemCheck
|
Unix style systems. To check your system setup, execute the foamSystemCheck
|
||||||
script in the bin directory of the OpenFOAM installation. If no problems
|
script in the bin/ directory of the OpenFOAM installation. If no problems
|
||||||
are reported, proceed to "3. Installation"; otherwise contact your
|
are reported, proceed to "3. Installation"; otherwise contact your
|
||||||
system administrator.
|
system administrator.
|
||||||
|
|
||||||
@ -40,7 +40,6 @@
|
|||||||
|
|
||||||
3. Installation
|
3. Installation
|
||||||
~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Download and unpack the files in the $HOME/OpenFOAM directory as described
|
Download and unpack the files in the $HOME/OpenFOAM directory as described
|
||||||
in: http://www.OpenFOAM.org/download.html
|
in: http://www.OpenFOAM.org/download.html
|
||||||
|
|
||||||
@ -77,10 +76,9 @@
|
|||||||
|
|
||||||
3.1. Installation in alternative locations
|
3.1. Installation in alternative locations
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
OpenFOAM may also be installed in alternative locations. However, the
|
||||||
OpenFOAM may also be installed in an alternative location.
|
installation directory should be network available (e.g., NFS) if
|
||||||
However, the installation directory must be network available
|
parallel calculations are planned.
|
||||||
(eg, NFS) if parallel calculations are planned.
|
|
||||||
|
|
||||||
The environment variable 'FOAM_INST_DIR' can be used to find and source
|
The environment variable 'FOAM_INST_DIR' can be used to find and source
|
||||||
the appropriate resource file. Here is a bash/ksh/sh example:
|
the appropriate resource file. Here is a bash/ksh/sh example:
|
||||||
@ -89,7 +87,7 @@
|
|||||||
foamDotFile=$FOAM_INST_DIR/OpenFOAM-<VERSION>/etc/bashrc
|
foamDotFile=$FOAM_INST_DIR/OpenFOAM-<VERSION>/etc/bashrc
|
||||||
[ -f $foamDotFile ] && . $foamDotFile
|
[ -f $foamDotFile ] && . $foamDotFile
|
||||||
|
|
||||||
and a csh example:
|
and a csh/tcsh example:
|
||||||
|
|
||||||
setenv FOAM_INST_DIR /data/app/OpenFOAM
|
setenv FOAM_INST_DIR /data/app/OpenFOAM
|
||||||
foamDotFile=$FOAM_INST_DIR/OpenFOAM-<VERSION>/etc/bashrc
|
foamDotFile=$FOAM_INST_DIR/OpenFOAM-<VERSION>/etc/bashrc
|
||||||
@ -102,9 +100,8 @@
|
|||||||
|
|
||||||
4. Building from Sources (Optional)
|
4. Building from Sources (Optional)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
If you cannot find an appropriate binary pack for your platform, you can
|
If you cannot find an appropriate binary pack for your platform, you can
|
||||||
build the complete OpenFOAM from the source-pack. First you will need to
|
build the complete OpenFOAM from the source-pack. You will first need to
|
||||||
compile or obtain a recent version of gcc (we recomend gcc-4.2.?) for
|
compile or obtain a recent version of gcc (we recomend gcc-4.2.?) for
|
||||||
your platform, which may be obtained from http://gcc.gnu.org/.
|
your platform, which may be obtained from http://gcc.gnu.org/.
|
||||||
|
|
||||||
@ -114,29 +111,27 @@
|
|||||||
$WM_PROJECT_DIR/etc/settings.csh appropriately and finally update the
|
$WM_PROJECT_DIR/etc/settings.csh appropriately and finally update the
|
||||||
environment variables as in section 3.
|
environment variables as in section 3.
|
||||||
|
|
||||||
Now go to the top-level source directory $WM_PROJECT_DIR and type
|
Now go to the top-level source directory $WM_PROJECT_DIR and execute the
|
||||||
./Allwmake, which is the name of the top-level build script for building
|
top-level build script './Allwmake'. In principle this will build
|
||||||
the whole of OpenFOAM. In principle this will build everything, but
|
everything, but if problems occur with the build order it may be necessary
|
||||||
sometimes problems occur with the build order and it is necessary to
|
to update the environment variables and re-execute 'Allwmake'. If you
|
||||||
update the environment variables and re-execute Allwmake. If you
|
experience difficulties with building the source-pack, or your platform is
|
||||||
experience difficulties with building the source-pack or your platform is
|
not currently supported, please contact <enquiries@OpenCFD.co.uk> to
|
||||||
not currently supported please contact <enquiries@OpenCFD.co.uk> to
|
negotiate a support contract and we will do the port and maintain it for
|
||||||
negotiate a support contract and we will do the port and maintain it in
|
|
||||||
future releases.
|
future releases.
|
||||||
|
|
||||||
|
|
||||||
5. Testing the installation
|
5. Testing the installation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
To check your installation setup, execute the 'foamInstallationTest'
|
To check your installation setup, execute the 'foamInstallationTest'
|
||||||
script (in the bin directory of the OpenFOAM installation). If no problems
|
script (in the bin/ directory of the OpenFOAM installation). If no
|
||||||
are reported, proceed to getting started with OpenFOAM; otherwise, go back
|
problems are reported, proceed to getting started with OpenFOAM;
|
||||||
and check you have installed the software correctly and/or contact your
|
otherwise, go back and check you have installed the software correctly
|
||||||
system administrator.
|
and/or contact your system administrator.
|
||||||
|
|
||||||
|
|
||||||
6. Getting Started
|
6. Getting Started
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Create a project directory within the $HOME/OpenFOAM directory named
|
Create a project directory within the $HOME/OpenFOAM directory named
|
||||||
<USER>-<VERSION> (e.g. 'chris-1.5' for user chris and OpenFOAM version 1.5)
|
<USER>-<VERSION> (e.g. 'chris-1.5' for user chris and OpenFOAM version 1.5)
|
||||||
and create a directory named 'run' within it, e.g. by typing:
|
and create a directory named 'run' within it, e.g. by typing:
|
||||||
@ -144,7 +139,7 @@
|
|||||||
mkdir -p $HOME/OpenFOAM/${USER}-${WM_PROJECT_VERSION}/run
|
mkdir -p $HOME/OpenFOAM/${USER}-${WM_PROJECT_VERSION}/run
|
||||||
|
|
||||||
Copy the 'tutorial' examples directory in the OpenFOAM distribution to the
|
Copy the 'tutorial' examples directory in the OpenFOAM distribution to the
|
||||||
'run' directory. If OpenFOAM environment variables are set correctly,
|
'run' directory. If the OpenFOAM environment variables are set correctly,
|
||||||
then the following command will be correct:
|
then the following command will be correct:
|
||||||
|
|
||||||
cp -r $WM_PROJECT_DIR/tutorials $HOME/OpenFOAM/${USER}-${WM_PROJECT_VERSION}/run
|
cp -r $WM_PROJECT_DIR/tutorials $HOME/OpenFOAM/${USER}-${WM_PROJECT_VERSION}/run
|
||||||
@ -158,27 +153,27 @@
|
|||||||
|
|
||||||
7. Documentation
|
7. Documentation
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
http://www.OpenFOAM.org/doc
|
http://www.OpenFOAM.org/doc
|
||||||
|
|
||||||
|
|
||||||
8. Help
|
8. Help
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
http://www.OpenFOAM.org
|
http://www.OpenFOAM.org
|
||||||
http://www.OpenFOAM.org/discussion.html
|
http://www.OpenFOAM.org/discussion.html
|
||||||
|
|
||||||
|
|
||||||
9. Reporting Bugs in OpenFOAM
|
9. Reporting Bugs in OpenFOAM
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
http://www.OpenFOAM.org/bugs.html
|
http://www.OpenFOAM.org/bugs.html
|
||||||
|
|
||||||
|
|
||||||
A. Running OpenFOAM in 32-bit mode on 64-bit machines
|
A. Running OpenFOAM in 32-bit mode on 64-bit machines
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Those users with an installation of Linux on a 64-bit machine may install
|
Linux users with a 64-bit machine may install either the OpenFOAM 32-bit
|
||||||
either or both of the 32-bit version of OpenFOAM (linux) or the 64-bit
|
version (linux) or the OpenFOAM 64-bit version (linux64), or both.
|
||||||
version of FOAM (linux64) with 64-bit being the default mode. In order to
|
The 64-bit is the default mode on a 64-bit machine. To use an installed
|
||||||
set up the user to run in 32-bit mode, the user must set the environment
|
32-bit version, the user must set the environment variable $WM_32 (to
|
||||||
variable $WM_32 (to anything, e.g. "on") before sourcing the etc/bashrc
|
anything, e.g. "on") before sourcing the etc/bashrc (or etc/cshrc) file.
|
||||||
(or etc/cshrc) file. Unsetting $WM_32 and sourcing the bashrc file will
|
Unsetting WM_32 and re-sourcing the etc/bashrc (or etc/cshrc) file will
|
||||||
set up the user to run in 64-bit mode.
|
set up the user to run in 64-bit mode.
|
||||||
|
|
||||||
|
|||||||
@ -42,24 +42,17 @@ namespace functionEntries
|
|||||||
(
|
(
|
||||||
functionEntry,
|
functionEntry,
|
||||||
calcEntry,
|
calcEntry,
|
||||||
insert,
|
execute,
|
||||||
primitiveEntryIstream
|
primitiveEntryIstream
|
||||||
);
|
);
|
||||||
|
|
||||||
addToMemberFunctionSelectionTable
|
|
||||||
(
|
|
||||||
functionEntry,
|
|
||||||
calcEntry,
|
|
||||||
insert,
|
|
||||||
dictionaryIstream
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool Foam::functionEntries::calcEntry::insert
|
bool Foam::functionEntries::calcEntry::execute
|
||||||
(
|
(
|
||||||
const dictionary& parentDict,
|
const dictionary& parentDict,
|
||||||
primitiveEntry& entry,
|
primitiveEntry& entry,
|
||||||
@ -75,14 +68,4 @@ bool Foam::functionEntries::calcEntry::insert
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::functionEntries::calcEntry::insert
|
|
||||||
(
|
|
||||||
dictionary& parentDict,
|
|
||||||
Istream& is
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -69,18 +69,13 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
static bool insert
|
static bool execute
|
||||||
(
|
(
|
||||||
const dictionary& parentDict,
|
const dictionary& parentDict,
|
||||||
primitiveEntry& entry,
|
primitiveEntry& entry,
|
||||||
Istream& is
|
Istream& is
|
||||||
);
|
);
|
||||||
|
|
||||||
static bool insert
|
|
||||||
(
|
|
||||||
dictionary& parentDict,
|
|
||||||
Istream& is
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,17 +1,19 @@
|
|||||||
|
/*-------------------------------*- C++ -*---------------------------------*\
|
||||||
|
| ========= |
|
||||||
|
| \\ / OpenFOAM |
|
||||||
|
| \\ / |
|
||||||
|
| \\ / The Open Source CFD Toolbox |
|
||||||
|
| \\/ http://www.OpenFOAM.org |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
FoamFile
|
FoamFile
|
||||||
{
|
{
|
||||||
version 2.0;
|
version 2.0;
|
||||||
format ascii;
|
format ascii;
|
||||||
|
|
||||||
root "";
|
|
||||||
case "";
|
|
||||||
instance "";
|
|
||||||
local "";
|
|
||||||
|
|
||||||
class dictionary;
|
class dictionary;
|
||||||
object testDict;
|
object testDict;
|
||||||
}
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
#inputMode merge
|
||||||
|
|
||||||
dimensions [ 0 2 -2 0 0 0 0 ];
|
dimensions [ 0 2 -2 0 0 0 0 ];
|
||||||
internalField uniform 1;
|
internalField uniform 1;
|
||||||
@ -29,7 +31,6 @@ inactive
|
|||||||
type zeroGradient;
|
type zeroGradient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
boundaryField
|
boundaryField
|
||||||
{
|
{
|
||||||
Default_Boundary_Region
|
Default_Boundary_Region
|
||||||
@ -40,6 +41,12 @@ boundaryField
|
|||||||
inlet_1 { $active }
|
inlet_1 { $active }
|
||||||
inlet_2 { $inactive }
|
inlet_2 { $inactive }
|
||||||
inlet_3 { $inactive }
|
inlet_3 { $inactive }
|
||||||
|
inlet_4 { $inactive }
|
||||||
|
inlet_5 "a primitiveEntry is squashed by a directory entry";
|
||||||
|
inlet_5 { $inactive }
|
||||||
|
inlet_6 { $inactive }
|
||||||
|
inlet_7 { $inactive }
|
||||||
|
inlet_8 { $inactive }
|
||||||
|
|
||||||
#include "testDictInc"
|
#include "testDictInc"
|
||||||
|
|
||||||
@ -48,8 +55,44 @@ boundaryField
|
|||||||
type inletOutlet;
|
type inletOutlet;
|
||||||
inletValue $internalField;
|
inletValue $internalField;
|
||||||
value #include "value";
|
value #include "value";
|
||||||
|
// error #remove self;
|
||||||
x 5;
|
x 5;
|
||||||
y 6;
|
y 6;
|
||||||
another #calc{x $x; y $y;};
|
another #calc{x $x; y $y;};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this should have no effect
|
||||||
|
#remove inactive
|
||||||
|
|
||||||
|
inlet_7 { $active }
|
||||||
|
#inputMode overwrite
|
||||||
|
inlet_8 { $active }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NB: the inputMode has a global scope
|
||||||
|
#inputMode merge
|
||||||
|
#include "testDict2"
|
||||||
|
|
||||||
|
foo
|
||||||
|
{
|
||||||
|
$active
|
||||||
|
}
|
||||||
|
|
||||||
|
bar
|
||||||
|
{
|
||||||
|
$active
|
||||||
|
}
|
||||||
|
|
||||||
|
baz
|
||||||
|
{
|
||||||
|
$active
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// this should work
|
||||||
|
#remove active
|
||||||
|
|
||||||
|
// this should work too
|
||||||
|
#remove ( bar baz )
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
30
applications/test/dictionary/testDict2
Normal file
30
applications/test/dictionary/testDict2
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/*-------------------------------*- C++ -*---------------------------------*\
|
||||||
|
| ========= |
|
||||||
|
| \\ / OpenFOAM |
|
||||||
|
| \\ / |
|
||||||
|
| \\ / The Open Source CFD Toolbox |
|
||||||
|
| \\/ http://www.OpenFOAM.org |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object testDict;
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
Default_Boundary_Region
|
||||||
|
{
|
||||||
|
value $internalField;
|
||||||
|
note "actually a noslip wall";
|
||||||
|
}
|
||||||
|
|
||||||
|
inlet_3 "a primitiveEntry squashes directory entry";
|
||||||
|
}
|
||||||
|
|
||||||
|
#inputMode overwrite
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -1 +1,2 @@
|
|||||||
uniform 2
|
// the trailing ';' shouldn't actually be there, but shouldn't cause problems
|
||||||
|
uniform 2;
|
||||||
|
|||||||
@ -2,6 +2,9 @@
|
|||||||
# Build optional components (eg, may depend on third-party libraries)
|
# Build optional components (eg, may depend on third-party libraries)
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
|
# run from this directory only
|
||||||
|
cd ${0%/*} || exit 1
|
||||||
|
|
||||||
# build libccmio if required
|
# build libccmio if required
|
||||||
if [ ! -e $FOAM_LIBBIN/libccmio.so ]
|
if [ ! -e $FOAM_LIBBIN/libccmio.so ]
|
||||||
then
|
then
|
||||||
|
|||||||
@ -90,17 +90,15 @@ if [ "$spawn" -ne 1 -a "$spawn" -ne 2 ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check ~/.OpenFOAM-VERSION
|
# check ~/.$WM_PROJECT/$WM_PROJECT_VERSION/
|
||||||
# check <site>/etc
|
# check ~/.$WM_PROJECT/
|
||||||
# check <site>/.OpenFOAM-VERSION
|
# check <installedProject>/etc/
|
||||||
if [ "$WM_PROJECT" ]; then
|
if [ "$WM_PROJECT" ]; then
|
||||||
|
|
||||||
: ${FOAM_DOT_DIR:=.$WM_PROJECT-$WM_PROJECT_VERSION}
|
|
||||||
|
|
||||||
for i in \
|
for i in \
|
||||||
$HOME/$FOAM_DOT_DIR \
|
$HOME/.WM_PROJECT/$WM_PROJECT_VERSION \
|
||||||
|
$HOME/.WM_PROJECT \
|
||||||
$WM_PROJECT_DIR/etc \
|
$WM_PROJECT_DIR/etc \
|
||||||
$WM_PROJECT_DIR/$FOAM_DOT_DIR \
|
|
||||||
;
|
;
|
||||||
do
|
do
|
||||||
if [ -f "$i/bashrc" ]; then
|
if [ -f "$i/bashrc" ]; then
|
||||||
@ -112,7 +110,12 @@ fi
|
|||||||
|
|
||||||
# Construct test string for remote execution.
|
# Construct test string for remote execution.
|
||||||
# Source OpenFOAM settings if OpenFOAM environment not set.
|
# Source OpenFOAM settings if OpenFOAM environment not set.
|
||||||
sourceFoam='[ "$WM_PROJECT" ] || . '"$sourceFoam"
|
# attempt to preserve the installation directory 'FOAM_INST_DIR'
|
||||||
|
if [ "$FOAM_INST_DIR" ]; then
|
||||||
|
sourceFoam='[ "$WM_PROJECT" ] || '"FOAM_INST_DIR=$FOAM_INST_DIR . $sourceFoam"
|
||||||
|
else
|
||||||
|
sourceFoam='[ "$WM_PROJECT" ] || '". $sourceFoam"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "**sourceFoam:$sourceFoam"
|
echo "**sourceFoam:$sourceFoam"
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
#!/bin/sh
|
#---------------------------------*- sh -*-------------------------------------
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# ========= |
|
# ========= |
|
||||||
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
# \\ / O peration |
|
# \\ / O peration |
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
#!/bin/sh
|
#---------------------------------*- sh -*-------------------------------------
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# ========= |
|
# ========= |
|
||||||
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
# \\ / O peration |
|
# \\ / O peration |
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
#!/bin/sh
|
#---------------------------------*- sh -*-------------------------------------
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# ========= |
|
# ========= |
|
||||||
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
# \\ / O peration |
|
# \\ / O peration |
|
||||||
@ -48,6 +47,7 @@ initialiseVariables ()
|
|||||||
if [ "$VERBOSE" = ON ]; then
|
if [ "$VERBOSE" = ON ]; then
|
||||||
addCMakeVariable "CMAKE_VERBOSE_MAKEFILE=TRUE"
|
addCMakeVariable "CMAKE_VERBOSE_MAKEFILE=TRUE"
|
||||||
fi
|
fi
|
||||||
|
addCMakeVariable "VTK_USE_TK=FALSE"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
#!/bin/sh
|
#---------------------------------*- sh -*-------------------------------------
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# ========= |
|
# ========= |
|
||||||
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
# \\ / O peration |
|
# \\ / O peration |
|
||||||
|
|||||||
@ -38,6 +38,12 @@ alias wm32 'setenv WM_ARCH_OPTION 32; source $WM_PROJECT_DIR/etc/cshrc'
|
|||||||
alias wmSP 'setenv WM_PRECISION_OPTION SP; source $WM_PROJECT_DIR/etc/cshrc'
|
alias wmSP 'setenv WM_PRECISION_OPTION SP; source $WM_PROJECT_DIR/etc/cshrc'
|
||||||
alias wmDP 'setenv WM_PRECISION_OPTION DP; source $WM_PROJECT_DIR/etc/cshrc'
|
alias wmDP 'setenv WM_PRECISION_OPTION DP; source $WM_PROJECT_DIR/etc/cshrc'
|
||||||
|
|
||||||
|
# Toggle wmakeScheduler on/off
|
||||||
|
# - also need to set WM_HOSTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
alias wmSchedON 'setenv WM_SCHEDULER $WM_PROJECT_DIR/wmake/wmakeScheduler'
|
||||||
|
alias wmSchedOFF 'unsetenv WM_SCHEDULER'
|
||||||
|
|
||||||
# Change directory aliases
|
# Change directory aliases
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
alias src 'cd $FOAM_SRC'
|
alias src 'cd $FOAM_SRC'
|
||||||
|
|||||||
@ -38,6 +38,12 @@ alias wm32='export WM_ARCH_OPTION=32; . $WM_PROJECT_DIR/etc/bashrc'
|
|||||||
alias wmSP='export WM_PRECISION_OPTION=SP; . $WM_PROJECT_DIR/etc/bashrc'
|
alias wmSP='export WM_PRECISION_OPTION=SP; . $WM_PROJECT_DIR/etc/bashrc'
|
||||||
alias wmDP='export WM_PRECISION_OPTION=DP; . $WM_PROJECT_DIR/etc/bashrc'
|
alias wmDP='export WM_PRECISION_OPTION=DP; . $WM_PROJECT_DIR/etc/bashrc'
|
||||||
|
|
||||||
|
# Toggle wmakeScheduler on/off
|
||||||
|
# - also need to set WM_HOSTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
alias wmSchedON='export WM_SCHEDULER=$WM_PROJECT_DIR/wmake/wmakeScheduler'
|
||||||
|
alias wmSchedOFF='unset WM_SCHEDULER'
|
||||||
|
|
||||||
# Change directory aliases
|
# Change directory aliases
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
alias src='cd $FOAM_SRC'
|
alias src='cd $FOAM_SRC'
|
||||||
|
|||||||
@ -213,25 +213,13 @@ bool Foam::chDir(const fileName& dir)
|
|||||||
|
|
||||||
Foam::fileName Foam::dotFoam(const fileName& name)
|
Foam::fileName Foam::dotFoam(const fileName& name)
|
||||||
{
|
{
|
||||||
// Search for file 'name' in:
|
|
||||||
// 1) ~/.OpenFOAM-VERSION/, ~/.OpenFOAM/VERSION/ or ~/.OpenFOAM/
|
|
||||||
// 2) $WM_PROJECT_INST_DIR/site/VERSION or $WM_PROJECT_INST_DIR/site/
|
|
||||||
// 3) $WM_PROJECT_DIR/etc/
|
|
||||||
|
|
||||||
// Search user files:
|
// Search user files:
|
||||||
// ~~~~~~~~~~~~~~~~~~
|
// ~~~~~~~~~~~~~~~~~~
|
||||||
// Check for user file in ~/.OpenFOAM-VERSION/
|
|
||||||
fileName fullName = home()/(word(".OpenFOAM-") + FOAMversion)/name;
|
|
||||||
if (exists(fullName))
|
|
||||||
{
|
|
||||||
return fullName;
|
|
||||||
}
|
|
||||||
|
|
||||||
fileName searchDir = home()/".OpenFOAM";
|
fileName searchDir = home()/".OpenFOAM";
|
||||||
if (dir(searchDir))
|
if (dir(searchDir))
|
||||||
{
|
{
|
||||||
// Check for user file in ~/.OpenFOAM/VERSION
|
// Check for user file in ~/.OpenFOAM/VERSION
|
||||||
fullName = searchDir/FOAMversion/name;
|
fileName fullName = searchDir/FOAMversion/name;
|
||||||
if (exists(fullName))
|
if (exists(fullName))
|
||||||
{
|
{
|
||||||
return fullName;
|
return fullName;
|
||||||
@ -252,7 +240,7 @@ Foam::fileName Foam::dotFoam(const fileName& name)
|
|||||||
if (dir(searchDir))
|
if (dir(searchDir))
|
||||||
{
|
{
|
||||||
// Check for site file in $WM_PROJECT_INST_DIR/site/VERSION
|
// Check for site file in $WM_PROJECT_INST_DIR/site/VERSION
|
||||||
fullName = searchDir/"site"/FOAMversion/name;
|
fileName fullName = searchDir/"site"/FOAMversion/name;
|
||||||
if (exists(fullName))
|
if (exists(fullName))
|
||||||
{
|
{
|
||||||
return fullName;
|
return fullName;
|
||||||
@ -272,14 +260,14 @@ Foam::fileName Foam::dotFoam(const fileName& name)
|
|||||||
if (dir(searchDir))
|
if (dir(searchDir))
|
||||||
{
|
{
|
||||||
// Check for shipped OpenFOAM file in $WM_PROJECT_DIR/etc
|
// Check for shipped OpenFOAM file in $WM_PROJECT_DIR/etc
|
||||||
fullName = searchDir/"etc"/name;
|
fileName fullName = searchDir/"etc"/name;
|
||||||
if (exists(fullName))
|
if (exists(fullName))
|
||||||
{
|
{
|
||||||
return fullName;
|
return fullName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nothing found
|
// Not found
|
||||||
return fileName::null;
|
return fileName::null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -122,6 +122,7 @@ functionEntries = $(dictionary)/functionEntries
|
|||||||
$(functionEntries)/functionEntry/functionEntry.C
|
$(functionEntries)/functionEntry/functionEntry.C
|
||||||
$(functionEntries)/includeEntry/includeEntry.C
|
$(functionEntries)/includeEntry/includeEntry.C
|
||||||
$(functionEntries)/inputModeEntry/inputModeEntry.C
|
$(functionEntries)/inputModeEntry/inputModeEntry.C
|
||||||
|
$(functionEntries)/removeEntry/removeEntry.C
|
||||||
|
|
||||||
IOdictionary = db/IOobjects/IOdictionary
|
IOdictionary = db/IOobjects/IOdictionary
|
||||||
$(IOdictionary)/IOdictionary.C
|
$(IOdictionary)/IOdictionary.C
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
-I$(LIB_SRC)/zlib-1.2.3
|
-I$(WM_THIRD_PARTY_DIR)/zlib-1.2.3
|
||||||
|
|
||||||
LIB_LIBS = \
|
LIB_LIBS = \
|
||||||
$(FOAM_LIBBIN)/libOSspecific.o \
|
$(FOAM_LIBBIN)/libOSspecific.o \
|
||||||
|
|||||||
@ -329,12 +329,9 @@ public:
|
|||||||
// Writing
|
// Writing
|
||||||
|
|
||||||
//- Write the standard OpenFOAM file/dictionary banner
|
//- Write the standard OpenFOAM file/dictionary banner
|
||||||
|
// Optionally without -*- C++ -*- editor hint (eg, for logs)
|
||||||
template<class Stream>
|
template<class Stream>
|
||||||
static inline void writeBanner(Stream& os);
|
static inline void writeBanner(Stream& os, bool noHint=false);
|
||||||
|
|
||||||
//- Write the standard OpenFOAM log banner
|
|
||||||
template<class Stream>
|
|
||||||
static inline void writeLogBanner(Stream& os);
|
|
||||||
|
|
||||||
//- Write the standard file section divider
|
//- Write the standard file section divider
|
||||||
template<class Stream>
|
template<class Stream>
|
||||||
|
|||||||
@ -29,48 +29,34 @@ License
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Stream>
|
template<class Stream>
|
||||||
inline void Foam::IOobject::writeBanner(Stream& os)
|
inline void Foam::IOobject::writeBanner(Stream& os, bool noHint)
|
||||||
{
|
{
|
||||||
static bool spacesSet = false;
|
static bool spacesSet = false;
|
||||||
static char spaces[80];
|
static char spaces[40];
|
||||||
|
|
||||||
if (!spacesSet)
|
if (!spacesSet)
|
||||||
{
|
{
|
||||||
memset(spaces, ' ', 80);
|
memset(spaces, ' ', 40);
|
||||||
spaces[38 - strlen(Foam::FOAMversion)] = '\0';
|
spaces[38 - strlen(Foam::FOAMversion)] = '\0';
|
||||||
spacesSet = true;
|
spacesSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
os <<
|
if (noHint)
|
||||||
"/*--------------------------------*- C++ -*----------------------------------*\\\n"
|
|
||||||
"| ========= | |\n"
|
|
||||||
"| \\\\ / F ield | OpenFOAM: The Open Source CFD Toolbox |\n"
|
|
||||||
"| \\\\ / O peration | Version: " << FOAMversion << spaces << "|\n"
|
|
||||||
"| \\\\ / A nd | Web: http://www.openfoam.org |\n"
|
|
||||||
"| \\\\/ M anipulation | |\n"
|
|
||||||
"\\*---------------------------------------------------------------------------*/\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class Stream>
|
|
||||||
inline void Foam::IOobject::writeLogBanner(Stream& os)
|
|
||||||
{
|
|
||||||
static bool spacesSet = false;
|
|
||||||
static char spaces[80];
|
|
||||||
|
|
||||||
if (!spacesSet)
|
|
||||||
{
|
{
|
||||||
memset(spaces, ' ', 80);
|
os <<
|
||||||
spaces[38 - strlen(Foam::FOAMversion)] = '\0';
|
"/*---------------------------------------------------------------------------*\\\n";
|
||||||
spacesSet = true;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
os <<
|
||||||
|
"/*--------------------------------*- C++ -*----------------------------------*\\\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
os <<
|
os <<
|
||||||
"/*---------------------------------------------------------------------------*\\\n"
|
|
||||||
"| ========= | |\n"
|
"| ========= | |\n"
|
||||||
"| \\\\ / F ield | OpenFOAM: The Open Source CFD Toolbox |\n"
|
"| \\\\ / F ield | OpenFOAM: The Open Source CFD Toolbox |\n"
|
||||||
"| \\\\ / O peration | Version: " << FOAMversion << spaces << "|\n"
|
"| \\\\ / O peration | Version: " << FOAMversion << spaces << "|\n"
|
||||||
"| \\\\ / A nd | Web: http://www.openfoam.org |\n"
|
"| \\\\ / A nd | Web: http://www.OpenFOAM.org |\n"
|
||||||
"| \\\\/ M anipulation | |\n"
|
"| \\\\/ M anipulation | |\n"
|
||||||
"\\*---------------------------------------------------------------------------*/\n";
|
"\\*---------------------------------------------------------------------------*/\n";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,8 +37,8 @@ bool Foam::IOobject::writeHeader(Ostream& os) const
|
|||||||
if (!os.good())
|
if (!os.good())
|
||||||
{
|
{
|
||||||
Info<< "IOobject::writeHeader(Ostream&) : "
|
Info<< "IOobject::writeHeader(Ostream&) : "
|
||||||
<< "no stream open for write"
|
<< "no stream open for write" << nl
|
||||||
<< endl << os.info() << endl;
|
<< os.info() << endl;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -49,16 +49,14 @@ bool Foam::IOobject::writeHeader(Ostream& os) const
|
|||||||
<< " format " << os.format() << ";\n"
|
<< " format " << os.format() << ";\n"
|
||||||
<< " class " << type() << ";\n";
|
<< " class " << type() << ";\n";
|
||||||
|
|
||||||
|
// outdent for visibility and more space
|
||||||
if (note().size())
|
if (note().size())
|
||||||
{
|
{
|
||||||
os << " note " << note() << ";\n";
|
os << " note " << note() << ";\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
// writing without quotes would look nicer
|
os << " location " << instance()/local() << ";\n"
|
||||||
os << " object " << name() << ";\n"
|
<< " object " << name() << ";\n"
|
||||||
//<< " instance " << instance()/local() << ";\n"
|
|
||||||
//<< " local " << local() << ";\n"
|
|
||||||
<< " location " << instance()/local() << ";\n"
|
|
||||||
<< "}" << nl;
|
<< "}" << nl;
|
||||||
|
|
||||||
writeDivider(os);
|
writeDivider(os);
|
||||||
|
|||||||
@ -34,74 +34,6 @@ defineTypeNameAndDebug(Foam::dictionary, 0);
|
|||||||
|
|
||||||
const Foam::dictionary Foam::dictionary::null;
|
const Foam::dictionary Foam::dictionary::null;
|
||||||
|
|
||||||
#define DICTIONARY_INPLACE_MERGE
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private member functions * * * * * * * * * * * //
|
|
||||||
|
|
||||||
bool Foam::dictionary::add(entry* ePtr, bool mergeEntry)
|
|
||||||
{
|
|
||||||
HashTable<entry*>::iterator iter = hashedEntries_.find(ePtr->keyword());
|
|
||||||
|
|
||||||
if (mergeEntry && iter != hashedEntries_.end())
|
|
||||||
{
|
|
||||||
// merge dictionary with dictionary
|
|
||||||
if (iter()->isDict() && ePtr->isDict())
|
|
||||||
{
|
|
||||||
iter()->dict().merge(ePtr->dict());
|
|
||||||
delete ePtr;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// replace existing dictionary with entry or vice versa
|
|
||||||
#ifdef DICTIONARY_INPLACE_MERGE
|
|
||||||
IDLList<entry>::replace(iter(), ePtr);
|
|
||||||
delete iter();
|
|
||||||
hashedEntries_.erase(iter);
|
|
||||||
|
|
||||||
if (hashedEntries_.insert(ePtr->keyword(), ePtr))
|
|
||||||
{
|
|
||||||
ePtr->name() = name_ + "::" + ePtr->keyword();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
IOWarningIn("dictionary::add(entry* ePtr)", (*this))
|
|
||||||
<< "problem replacing entry "<< ePtr->keyword()
|
|
||||||
<< " in dictionary " << name()
|
|
||||||
<< endl;
|
|
||||||
|
|
||||||
IDLList<entry>::remove(ePtr);
|
|
||||||
delete ePtr;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
remove(ePtr->keyword());
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hashedEntries_.insert(ePtr->keyword(), ePtr))
|
|
||||||
{
|
|
||||||
ePtr->name() = name_ + "::" + ePtr->keyword();
|
|
||||||
IDLList<entry>::append(ePtr);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
IOWarningIn("dictionary::add(entry* ePtr)", (*this))
|
|
||||||
<< "attempt to add entry "<< ePtr->keyword()
|
|
||||||
<< " which already exists in dictionary " << name()
|
|
||||||
<< endl;
|
|
||||||
|
|
||||||
delete ePtr;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::dictionary::dictionary()
|
Foam::dictionary::dictionary()
|
||||||
@ -195,15 +127,15 @@ Foam::label Foam::dictionary::endLineNumber() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::dictionary::found(const word& keyword, bool recusive) const
|
bool Foam::dictionary::found(const word& keyword, bool recursive) const
|
||||||
{
|
{
|
||||||
if (hashedEntries_.found(keyword))
|
if (hashedEntries_.found(keyword))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (recusive && &parent_ != &dictionary::null)
|
else if (recursive && &parent_ != &dictionary::null)
|
||||||
{
|
{
|
||||||
return parent_.found(keyword, recusive);
|
return parent_.found(keyword, recursive);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -215,16 +147,16 @@ bool Foam::dictionary::found(const word& keyword, bool recusive) const
|
|||||||
const Foam::entry* Foam::dictionary::lookupEntryPtr
|
const Foam::entry* Foam::dictionary::lookupEntryPtr
|
||||||
(
|
(
|
||||||
const word& keyword,
|
const word& keyword,
|
||||||
bool recusive
|
bool recursive
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
HashTable<entry*>::const_iterator iter = hashedEntries_.find(keyword);
|
HashTable<entry*>::const_iterator iter = hashedEntries_.find(keyword);
|
||||||
|
|
||||||
if (iter == hashedEntries_.end())
|
if (iter == hashedEntries_.end())
|
||||||
{
|
{
|
||||||
if (recusive && &parent_ != &dictionary::null)
|
if (recursive && &parent_ != &dictionary::null)
|
||||||
{
|
{
|
||||||
return parent_.lookupEntryPtr(keyword, recusive);
|
return parent_.lookupEntryPtr(keyword, recursive);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -239,19 +171,19 @@ const Foam::entry* Foam::dictionary::lookupEntryPtr
|
|||||||
Foam::entry* Foam::dictionary::lookupEntryPtr
|
Foam::entry* Foam::dictionary::lookupEntryPtr
|
||||||
(
|
(
|
||||||
const word& keyword,
|
const word& keyword,
|
||||||
bool recusive
|
bool recursive
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
HashTable<entry*>::iterator iter = hashedEntries_.find(keyword);
|
HashTable<entry*>::iterator iter = hashedEntries_.find(keyword);
|
||||||
|
|
||||||
if (iter == hashedEntries_.end())
|
if (iter == hashedEntries_.end())
|
||||||
{
|
{
|
||||||
if (recusive && &parent_ != &dictionary::null)
|
if (recursive && &parent_ != &dictionary::null)
|
||||||
{
|
{
|
||||||
return const_cast<dictionary&>(parent_).lookupEntryPtr
|
return const_cast<dictionary&>(parent_).lookupEntryPtr
|
||||||
(
|
(
|
||||||
keyword,
|
keyword,
|
||||||
recusive
|
recursive
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -267,14 +199,13 @@ Foam::entry* Foam::dictionary::lookupEntryPtr
|
|||||||
const Foam::entry& Foam::dictionary::lookupEntry
|
const Foam::entry& Foam::dictionary::lookupEntry
|
||||||
(
|
(
|
||||||
const word& keyword,
|
const word& keyword,
|
||||||
bool recusive
|
bool recursive
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const entry* ePtr = lookupEntryPtr(keyword, recusive);
|
const entry* entryPtr = lookupEntryPtr(keyword, recursive);
|
||||||
|
|
||||||
if (ePtr == NULL)
|
if (entryPtr == NULL)
|
||||||
{
|
{
|
||||||
// If keyword not found print error message ...
|
|
||||||
FatalIOErrorIn
|
FatalIOErrorIn
|
||||||
(
|
(
|
||||||
"dictionary::lookupEntry(const word& keyword) const",
|
"dictionary::lookupEntry(const word& keyword) const",
|
||||||
@ -284,23 +215,25 @@ const Foam::entry& Foam::dictionary::lookupEntry
|
|||||||
<< exit(FatalIOError);
|
<< exit(FatalIOError);
|
||||||
}
|
}
|
||||||
|
|
||||||
return *ePtr;
|
return *entryPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::ITstream& Foam::dictionary::lookup
|
Foam::ITstream& Foam::dictionary::lookup
|
||||||
(
|
(
|
||||||
const word& keyword,
|
const word& keyword,
|
||||||
bool recusive
|
bool recursive
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return lookupEntry(keyword, recusive).stream();
|
return lookupEntry(keyword, recursive).stream();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::dictionary::isDict(const word& keyword) const
|
bool Foam::dictionary::isDict(const word& keyword) const
|
||||||
{
|
{
|
||||||
if (const entry* entryPtr = lookupEntryPtr(keyword))
|
const entry* entryPtr = lookupEntryPtr(keyword);
|
||||||
|
|
||||||
|
if (entryPtr)
|
||||||
{
|
{
|
||||||
return entryPtr->isDict();
|
return entryPtr->isDict();
|
||||||
}
|
}
|
||||||
@ -313,7 +246,9 @@ bool Foam::dictionary::isDict(const word& keyword) const
|
|||||||
|
|
||||||
const Foam::dictionary* Foam::dictionary::subDictPtr(const word& keyword) const
|
const Foam::dictionary* Foam::dictionary::subDictPtr(const word& keyword) const
|
||||||
{
|
{
|
||||||
if (const entry* entryPtr = lookupEntryPtr(keyword))
|
const entry* entryPtr = lookupEntryPtr(keyword);
|
||||||
|
|
||||||
|
if (entryPtr)
|
||||||
{
|
{
|
||||||
return &entryPtr->dict();
|
return &entryPtr->dict();
|
||||||
}
|
}
|
||||||
@ -326,13 +261,9 @@ const Foam::dictionary* Foam::dictionary::subDictPtr(const word& keyword) const
|
|||||||
|
|
||||||
const Foam::dictionary& Foam::dictionary::subDict(const word& keyword) const
|
const Foam::dictionary& Foam::dictionary::subDict(const word& keyword) const
|
||||||
{
|
{
|
||||||
if (const entry* entryPtr = lookupEntryPtr(keyword))
|
const entry* entryPtr = lookupEntryPtr(keyword);
|
||||||
|
if (entryPtr == NULL)
|
||||||
{
|
{
|
||||||
return entryPtr->dict();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// If keyword not found print error message ...
|
|
||||||
FatalIOErrorIn
|
FatalIOErrorIn
|
||||||
(
|
(
|
||||||
"dictionary::subDict(const word& keyword) const",
|
"dictionary::subDict(const word& keyword) const",
|
||||||
@ -340,37 +271,31 @@ const Foam::dictionary& Foam::dictionary::subDict(const word& keyword) const
|
|||||||
) << " keyword " << keyword << " is undefined in dictionary "
|
) << " keyword " << keyword << " is undefined in dictionary "
|
||||||
<< name()
|
<< name()
|
||||||
<< exit(FatalIOError);
|
<< exit(FatalIOError);
|
||||||
|
|
||||||
return entryPtr->dict();
|
|
||||||
}
|
}
|
||||||
|
return entryPtr->dict();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::dictionary& Foam::dictionary::subDict(const word& keyword)
|
Foam::dictionary& Foam::dictionary::subDict(const word& keyword)
|
||||||
{
|
{
|
||||||
if (entry* entryPtr = lookupEntryPtr(keyword))
|
entry* entryPtr = lookupEntryPtr(keyword);
|
||||||
|
if (entryPtr == NULL)
|
||||||
{
|
{
|
||||||
return entryPtr->dict();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// If keyword not found print error message ...
|
|
||||||
FatalIOErrorIn
|
FatalIOErrorIn
|
||||||
(
|
(
|
||||||
"dictionary::subDict(const word& keyword) const",
|
"dictionary::subDict(const word& keyword)",
|
||||||
*this
|
*this
|
||||||
) << " keyword " << keyword << " is undefined in dictionary "
|
) << " keyword " << keyword << " is undefined in dictionary "
|
||||||
<< name()
|
<< name()
|
||||||
<< exit(FatalIOError);
|
<< exit(FatalIOError);
|
||||||
|
|
||||||
return entryPtr->dict();
|
|
||||||
}
|
}
|
||||||
|
return entryPtr->dict();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::wordList Foam::dictionary::toc() const
|
Foam::wordList Foam::dictionary::toc() const
|
||||||
{
|
{
|
||||||
wordList keywords(size());
|
wordList keys(size());
|
||||||
|
|
||||||
label i = 0;
|
label i = 0;
|
||||||
for
|
for
|
||||||
@ -380,56 +305,124 @@ Foam::wordList Foam::dictionary::toc() const
|
|||||||
++iter
|
++iter
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
keywords[i++] = iter().keyword();
|
keys[i++] = iter().keyword();
|
||||||
}
|
}
|
||||||
|
|
||||||
return keywords;
|
return keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::dictionary::add(const entry& e)
|
bool Foam::dictionary::add(entry* entryPtr, bool mergeEntry)
|
||||||
{
|
{
|
||||||
add(e.clone(*this).ptr());
|
HashTable<entry*>::iterator iter = hashedEntries_.find(entryPtr->keyword());
|
||||||
|
|
||||||
|
if (mergeEntry && iter != hashedEntries_.end())
|
||||||
|
{
|
||||||
|
// merge dictionary with dictionary
|
||||||
|
if (iter()->isDict() && entryPtr->isDict())
|
||||||
|
{
|
||||||
|
iter()->dict().merge(entryPtr->dict());
|
||||||
|
delete entryPtr;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// replace existing dictionary with entry or vice versa
|
||||||
|
IDLList<entry>::replace(iter(), entryPtr);
|
||||||
|
delete iter();
|
||||||
|
hashedEntries_.erase(iter);
|
||||||
|
|
||||||
|
if (hashedEntries_.insert(entryPtr->keyword(), entryPtr))
|
||||||
|
{
|
||||||
|
entryPtr->name() = name_ + "::" + entryPtr->keyword();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IOWarningIn("dictionary::add(entry*)", (*this))
|
||||||
|
<< "problem replacing entry "<< entryPtr->keyword()
|
||||||
|
<< " in dictionary " << name() << endl;
|
||||||
|
|
||||||
|
IDLList<entry>::remove(entryPtr);
|
||||||
|
delete entryPtr;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hashedEntries_.insert(entryPtr->keyword(), entryPtr))
|
||||||
|
{
|
||||||
|
entryPtr->name() = name_ + "::" + entryPtr->keyword();
|
||||||
|
IDLList<entry>::append(entryPtr);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IOWarningIn("dictionary::add(entry* entryPtr)", (*this))
|
||||||
|
<< "attempt to add entry "<< entryPtr->keyword()
|
||||||
|
<< " which already exists in dictionary " << name()
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
delete entryPtr;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Foam::dictionary::add(const word& keyword, const token& t)
|
|
||||||
|
void Foam::dictionary::add(const entry& e, bool mergeEntry)
|
||||||
{
|
{
|
||||||
add(new primitiveEntry(keyword, t));
|
add(e.clone(*this).ptr(), mergeEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Foam::dictionary::add(const word& keyword, const word& w)
|
void Foam::dictionary::add(const word& k, const word& w, bool overwrite)
|
||||||
{
|
{
|
||||||
add(new primitiveEntry(keyword, token(w)));
|
add(new primitiveEntry(k, token(w)), overwrite);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Foam::dictionary::add(const word& keyword, const Foam::string& s)
|
void Foam::dictionary::add(const word& k, const Foam::string& s, bool overwrite)
|
||||||
{
|
{
|
||||||
add(new primitiveEntry(keyword, token(s)));
|
add(new primitiveEntry(k, token(s)), overwrite);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Foam::dictionary::add(const word& keyword, const label l)
|
void Foam::dictionary::add(const word& k, const label l, bool overwrite)
|
||||||
{
|
{
|
||||||
add(new primitiveEntry(keyword, token(l)));
|
add(new primitiveEntry(k, token(l)), overwrite);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Foam::dictionary::add(const word& keyword, const scalar s)
|
void Foam::dictionary::add(const word& k, const scalar s, bool overwrite)
|
||||||
{
|
{
|
||||||
add(new primitiveEntry(keyword, token(s)));
|
add(new primitiveEntry(k, token(s)), overwrite);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Foam::dictionary::add(const word& keyword, const ITstream& tokens)
|
void Foam::dictionary::add(const word& k, const dictionary& d, bool mergeEntry)
|
||||||
{
|
{
|
||||||
add(new primitiveEntry(keyword, tokens));
|
add(new dictionaryEntry(k, *this, d), mergeEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Foam::dictionary::add(const word& keyword, const tokenList& tokens)
|
|
||||||
|
void Foam::dictionary::set(entry* entryPtr)
|
||||||
{
|
{
|
||||||
add(new primitiveEntry(keyword, tokens));
|
entry* existingPtr = lookupEntryPtr(entryPtr->keyword());
|
||||||
|
|
||||||
|
// clear dictionary so merge acts like overwrite
|
||||||
|
if (existingPtr && existingPtr->isDict())
|
||||||
|
{
|
||||||
|
existingPtr->dict().clear();
|
||||||
|
}
|
||||||
|
add(entryPtr, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Foam::dictionary::add(const word& keyword, const dictionary& dict)
|
|
||||||
|
void Foam::dictionary::set(const entry& e)
|
||||||
{
|
{
|
||||||
add(new dictionaryEntry(keyword, *this, dict));
|
set(e.clone(*this).ptr());
|
||||||
|
}
|
||||||
|
|
||||||
|
void Foam::dictionary::set(const word& k, const dictionary& d)
|
||||||
|
{
|
||||||
|
set(new dictionaryEntry(k, *this, d));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -486,7 +479,10 @@ bool Foam::dictionary::changeKeyword
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// could issue warning if desired
|
WarningIn("dictionary::changeKeyword(const word& old, const word& new)")
|
||||||
|
<< "cannot rename keyword "<< oldKeyword
|
||||||
|
<< " to existing keyword " << newKeyword
|
||||||
|
<< " in dictionary " << name() << endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -527,34 +523,24 @@ bool Foam::dictionary::merge(const dictionary& dict)
|
|||||||
if (iter2 != hashedEntries_.end())
|
if (iter2 != hashedEntries_.end())
|
||||||
{
|
{
|
||||||
// Recursively merge sub-dictionaries
|
// Recursively merge sub-dictionaries
|
||||||
|
// TODO: merge without copying
|
||||||
if (iter2()->isDict() && iter().isDict())
|
if (iter2()->isDict() && iter().isDict())
|
||||||
{
|
{
|
||||||
// without copying and without remove/add?
|
if (iter2()->dict().merge(iter().dict()))
|
||||||
// this certainly looks ugly and doesn't necessarily
|
|
||||||
// retain the original sort order (perhaps nice to have)
|
|
||||||
if
|
|
||||||
(
|
|
||||||
iter2()->dict().merge(iter().dict())
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef DICTIONARY_INPLACE_MERGE
|
|
||||||
add(iter().clone(*this).ptr(), true);
|
add(iter().clone(*this).ptr(), true);
|
||||||
#else
|
|
||||||
remove(keyword);
|
|
||||||
add(iter().clone(*this)());
|
|
||||||
#endif
|
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// not found - just add
|
// not found - just add
|
||||||
add(iter().clone(*this)());
|
add(iter().clone(*this).ptr());
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -588,8 +574,8 @@ void Foam::dictionary::operator=(const dictionary& dict)
|
|||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear the current entries
|
name_ = dict.name();
|
||||||
IDLList<entry>::clear();
|
clear();
|
||||||
|
|
||||||
// Create clones of the entries in the given dictionary
|
// Create clones of the entries in the given dictionary
|
||||||
// resetting the parentDict to this dictionary
|
// resetting the parentDict to this dictionary
|
||||||
@ -603,10 +589,6 @@ void Foam::dictionary::operator=(const dictionary& dict)
|
|||||||
IDLList<entry>::append(iter().clone(*this).ptr());
|
IDLList<entry>::append(iter().clone(*this).ptr());
|
||||||
}
|
}
|
||||||
|
|
||||||
name_ = dict.name();
|
|
||||||
|
|
||||||
hashedEntries_.clear();
|
|
||||||
|
|
||||||
for
|
for
|
||||||
(
|
(
|
||||||
IDLList<entry>::iterator iter = begin();
|
IDLList<entry>::iterator iter = begin();
|
||||||
@ -636,7 +618,7 @@ void Foam::dictionary::operator+=(const dictionary& dict)
|
|||||||
++iter
|
++iter
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
add(iter().clone(*this)());
|
add(iter().clone(*this).ptr());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -660,7 +642,7 @@ void Foam::dictionary::operator|=(const dictionary& dict)
|
|||||||
{
|
{
|
||||||
if (!found(iter().keyword()))
|
if (!found(iter().keyword()))
|
||||||
{
|
{
|
||||||
add(iter().clone(*this)());
|
add(iter().clone(*this).ptr());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -683,8 +665,7 @@ void Foam::dictionary::operator<<=(const dictionary& dict)
|
|||||||
++iter
|
++iter
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
remove(iter().keyword());
|
set(iter().clone(*this).ptr());
|
||||||
add(iter().clone(*this)());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -31,8 +31,12 @@ Description
|
|||||||
|
|
||||||
The dictionary class is the base class for IOdictionary.
|
The dictionary class is the base class for IOdictionary.
|
||||||
It serves the purpose of a bootstrap dictionary for the objectRegistry
|
It serves the purpose of a bootstrap dictionary for the objectRegistry
|
||||||
data dictionaries, since unlike the IOdictionary class, it does not use a
|
data dictionaries, since unlike the IOdictionary class, it does not use
|
||||||
objectRegistry itself to work.
|
a objectRegistry itself to work.
|
||||||
|
|
||||||
|
ToDo
|
||||||
|
A merge() member function with a non-const dictionary parameter.
|
||||||
|
This would avoid unnecessary cloning in the add(entry*,bool) method
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
dictionary.C
|
dictionary.C
|
||||||
@ -171,31 +175,31 @@ public:
|
|||||||
// Search and lookup
|
// Search and lookup
|
||||||
|
|
||||||
//- Search dictionary for given keyword
|
//- Search dictionary for given keyword
|
||||||
// If recusive search parent dictionaries
|
// If recursive search parent dictionaries
|
||||||
bool found(const word& keyword, bool recusive=false) const;
|
bool found(const word& keyword, bool recursive=false) const;
|
||||||
|
|
||||||
//- Find and return an entry data stream pointer if present
|
//- Find and return an entry data stream pointer if present
|
||||||
// otherwise return NULL.
|
// otherwise return NULL.
|
||||||
// If recusive search parent dictionaries
|
// If recursive search parent dictionaries
|
||||||
const entry* lookupEntryPtr(const word&, bool recusive=false) const;
|
const entry* lookupEntryPtr(const word&, bool recursive=false) const;
|
||||||
|
|
||||||
//- Find and return an entry data stream pointer for manipulation
|
//- Find and return an entry data stream pointer for manipulation
|
||||||
// if present otherwise return NULL.
|
// if present otherwise return NULL.
|
||||||
// If recusive search parent dictionaries
|
// If recursive search parent dictionaries
|
||||||
entry* lookupEntryPtr(const word&, bool recusive=false);
|
entry* lookupEntryPtr(const word&, bool recursive=false);
|
||||||
|
|
||||||
//- Find and return an entry data stream if present otherwise error.
|
//- Find and return an entry data stream if present otherwise error.
|
||||||
// If recusive search parent dictionaries
|
// If recursive search parent dictionaries
|
||||||
const entry& lookupEntry(const word&, bool recusive=false) const;
|
const entry& lookupEntry(const word&, bool recursive=false) const;
|
||||||
|
|
||||||
//- Find and return an entry data stream
|
//- Find and return an entry data stream
|
||||||
// If recusive search parent dictionaries
|
// If recursive search parent dictionaries
|
||||||
ITstream& lookup(const word&, bool recusive=false) const;
|
ITstream& lookup(const word&, bool recursive=false) const;
|
||||||
|
|
||||||
//- Find and return a T, if not found return the given default value
|
//- Find and return a T, if not found return the given default value
|
||||||
// If recusive search parent dictionaries
|
// If recursive search parent dictionaries
|
||||||
template<class T>
|
template<class T>
|
||||||
T lookupOrDefault(const word&, const T&, bool recusive=false) const;
|
T lookupOrDefault(const word&, const T&, bool recursive=false) const;
|
||||||
|
|
||||||
//- Find and return a T, if not found return the given default value,
|
//- Find and return a T, if not found return the given default value,
|
||||||
// and add to dictionary. If recusive search parent dictionaries
|
// and add to dictionary. If recusive search parent dictionaries
|
||||||
@ -236,38 +240,57 @@ public:
|
|||||||
// Editing
|
// Editing
|
||||||
|
|
||||||
//- Add a new entry
|
//- Add a new entry
|
||||||
bool add(entry*, bool mergeEntry = false);
|
// With the merge option, dictionaries are interwoven and
|
||||||
|
// primitive entries are overwritten
|
||||||
|
bool add(entry*, bool mergeEntry=false);
|
||||||
|
|
||||||
//- Add an entry
|
//- Add an entry
|
||||||
void add(const entry&);
|
// With the merge option, dictionaries are interwoven and
|
||||||
|
// primitive entries are overwritten
|
||||||
//- Add a token entry
|
void add(const entry&, bool mergeEntry=false);
|
||||||
void add(const word& keyword, const token&);
|
|
||||||
|
|
||||||
//- Add a word entry
|
//- Add a word entry
|
||||||
void add(const word& keyword, const word&);
|
// optionally overwrite an existing entry
|
||||||
|
void add(const word& keyword, const word&, bool overwrite=false);
|
||||||
|
|
||||||
//- Add a string entry
|
//- Add a string entry
|
||||||
void add(const word& keyword, const string&);
|
// optionally overwrite an existing entry
|
||||||
|
void add(const word& keyword, const string&, bool overwrite=false);
|
||||||
|
|
||||||
//- Add a label entry
|
//- Add a label entry
|
||||||
void add(const word& keyword, const label);
|
// optionally overwrite an existing entry
|
||||||
|
void add(const word& keyword, const label, bool overwrite=false);
|
||||||
|
|
||||||
//- Add a scalar entry
|
//- Add a scalar entry
|
||||||
void add(const word& keyword, const scalar);
|
// optionally overwrite an existing entry
|
||||||
|
void add (const word& keyword, const scalar, bool overwrite=false);
|
||||||
//- Add an entry constructed from a ITstream
|
|
||||||
void add(const word& keyword, const ITstream&);
|
|
||||||
|
|
||||||
//- Add an entry constructed from a tokenList
|
|
||||||
void add(const word& keyword, const tokenList& tokens);
|
|
||||||
|
|
||||||
//- Add a T entry
|
|
||||||
template<class T>
|
|
||||||
void add(const word& keyword, const T&);
|
|
||||||
|
|
||||||
//- Add a dictionary entry
|
//- Add a dictionary entry
|
||||||
void add(const word& keyword, const dictionary&);
|
// optionally merge with an existing sub-dictionary
|
||||||
|
void add
|
||||||
|
(
|
||||||
|
const word& keyword,
|
||||||
|
const dictionary&,
|
||||||
|
bool mergeEntry=false
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Add a T entry
|
||||||
|
// optionally overwrite an existing entry
|
||||||
|
template<class T>
|
||||||
|
void add(const word& keyword, const T&, bool overwrite=false);
|
||||||
|
|
||||||
|
//- Assign a new entry, overwrite any existing entry
|
||||||
|
void set(entry*);
|
||||||
|
|
||||||
|
//- Assign a new entry, overwrite any existing entry
|
||||||
|
void set(const entry&);
|
||||||
|
|
||||||
|
//- Assign a dictionary entry, overwrite any existing entry
|
||||||
|
void set(const word& keyword, const dictionary&);
|
||||||
|
|
||||||
|
//- Assign a T entry, overwrite any existing entry
|
||||||
|
template<class T>
|
||||||
|
void set(const word& keyword, const T&);
|
||||||
|
|
||||||
//- Remove an entry specified by keyword
|
//- Remove an entry specified by keyword
|
||||||
bool remove(const word& keyword);
|
bool remove(const word& keyword);
|
||||||
@ -326,14 +349,12 @@ public:
|
|||||||
|
|
||||||
// Global Operators
|
// Global Operators
|
||||||
|
|
||||||
// Combine dictionaries starting from the entries in dict one and then including
|
//- Combine dictionaries starting from the entries in dict1 and then including those from dict2.
|
||||||
// those from dict2.
|
// Warn, but do not overwrite the entries from dict1.
|
||||||
// Warn, but do not overwrite the entries from dict1.
|
|
||||||
dictionary operator+(const dictionary& dict1, const dictionary& dict2);
|
dictionary operator+(const dictionary& dict1, const dictionary& dict2);
|
||||||
|
|
||||||
// Combine dictionaries starting from the entries in dict one and then including
|
//- Combine dictionaries starting from the entries in dict1 and then including those from dict2.
|
||||||
// those from dict2.
|
// Do not overwrite the entries from dict1.
|
||||||
// Do not overwrite the entries from dict1.
|
|
||||||
dictionary operator|(const dictionary& dict1, const dictionary& dict2);
|
dictionary operator|(const dictionary& dict1, const dictionary& dict2);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -33,19 +33,19 @@ template<class T>
|
|||||||
T Foam::dictionary::lookupOrDefault
|
T Foam::dictionary::lookupOrDefault
|
||||||
(
|
(
|
||||||
const word& keyword,
|
const word& keyword,
|
||||||
const T& deft,
|
const T& deflt,
|
||||||
bool recusive
|
bool recursive
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const entry* ePtr = lookupEntryPtr(keyword, recusive);
|
const entry* entryPtr = lookupEntryPtr(keyword, recursive);
|
||||||
|
|
||||||
if (ePtr == NULL)
|
if (entryPtr == NULL)
|
||||||
{
|
{
|
||||||
return deft;
|
return deflt;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return pTraits<T>(ePtr->stream());
|
return pTraits<T>(entryPtr->stream());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,12 +93,16 @@ void Foam::dictionary::readIfPresent
|
|||||||
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void Foam::dictionary::add(const word& keyword, const T& t)
|
void Foam::dictionary::add(const word& k, const T& t, bool overwrite)
|
||||||
{
|
{
|
||||||
entry* ePtr = new primitiveEntry(keyword, t);
|
add(new primitiveEntry(k, t), overwrite);
|
||||||
append(ePtr);
|
|
||||||
hashedEntries_.insert(ePtr->keyword(), ePtr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void Foam::dictionary::set(const word& k, const T& t)
|
||||||
|
{
|
||||||
|
set(new primitiveEntry(k, t));
|
||||||
|
}
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -96,7 +96,7 @@ bool Foam::entry::New(dictionary& parentDict, Istream& is)
|
|||||||
if (keyword[0] == '#') // ... Function entry
|
if (keyword[0] == '#') // ... Function entry
|
||||||
{
|
{
|
||||||
word functionName = keyword(1, keyword.size()-1);
|
word functionName = keyword(1, keyword.size()-1);
|
||||||
return functionEntry::insert(functionName, parentDict, is);
|
return functionEntry::execute(functionName, parentDict, is);
|
||||||
}
|
}
|
||||||
else if (keyword[0] == '$') // ... Substitution entry
|
else if (keyword[0] == '$') // ... Substitution entry
|
||||||
{
|
{
|
||||||
@ -105,7 +105,7 @@ bool Foam::entry::New(dictionary& parentDict, Istream& is)
|
|||||||
}
|
}
|
||||||
else if (keyword == "include") // ... For backward compatibility
|
else if (keyword == "include") // ... For backward compatibility
|
||||||
{
|
{
|
||||||
return functionEntries::includeEntry::insert(parentDict, is);
|
return functionEntries::includeEntry::execute(parentDict, is);
|
||||||
}
|
}
|
||||||
else // ... Data entries
|
else // ... Data entries
|
||||||
{
|
{
|
||||||
@ -114,12 +114,18 @@ bool Foam::entry::New(dictionary& parentDict, Istream& is)
|
|||||||
|
|
||||||
// Deal with duplicate entries
|
// Deal with duplicate entries
|
||||||
bool mergeEntry = false;
|
bool mergeEntry = false;
|
||||||
if (parentDict.found(keyword))
|
|
||||||
|
entry* existingPtr = parentDict.lookupEntryPtr(keyword);
|
||||||
|
if (existingPtr)
|
||||||
{
|
{
|
||||||
if (functionEntries::inputModeEntry::overwrite())
|
if (functionEntries::inputModeEntry::overwrite())
|
||||||
{
|
{
|
||||||
// silently drop previous entries
|
// clear dictionary so merge acts like overwrite
|
||||||
parentDict.remove(keyword);
|
if (existingPtr->isDict())
|
||||||
|
{
|
||||||
|
existingPtr->dict().clear();
|
||||||
|
}
|
||||||
|
mergeEntry = true;
|
||||||
}
|
}
|
||||||
else if (functionEntries::inputModeEntry::merge())
|
else if (functionEntries::inputModeEntry::merge())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -33,22 +33,66 @@ namespace Foam
|
|||||||
defineMemberFunctionSelectionTable
|
defineMemberFunctionSelectionTable
|
||||||
(
|
(
|
||||||
functionEntry,
|
functionEntry,
|
||||||
insert,
|
execute,
|
||||||
primitiveEntryIstream
|
dictionaryIstream
|
||||||
);
|
);
|
||||||
|
|
||||||
defineMemberFunctionSelectionTable
|
defineMemberFunctionSelectionTable
|
||||||
(
|
(
|
||||||
functionEntry,
|
functionEntry,
|
||||||
insert,
|
execute,
|
||||||
dictionaryIstream
|
primitiveEntryIstream
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * Member Function Selectors * * * * * * * * * * * * //
|
// * * * * * * * * * * * * Member Function Selectors * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool Foam::functionEntry::insert
|
bool Foam::functionEntry::execute
|
||||||
|
(
|
||||||
|
const word& functionName,
|
||||||
|
dictionary& parentDict,
|
||||||
|
Istream& is
|
||||||
|
)
|
||||||
|
{
|
||||||
|
is.fatalCheck
|
||||||
|
(
|
||||||
|
"functionEntry::execute"
|
||||||
|
"(const word& functionName, dictionary& parentDict, Istream& is)"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!executedictionaryIstreamMemberFunctionTablePtr_)
|
||||||
|
{
|
||||||
|
cerr<<"functionEntry::execute"
|
||||||
|
<< "(const word&, dictionary&, Istream&)"
|
||||||
|
<< " not yet initialized, function = "
|
||||||
|
<< functionName.c_str() << std::endl;
|
||||||
|
|
||||||
|
// Return true to keep reading
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
executedictionaryIstreamMemberFunctionTable::iterator mfIter =
|
||||||
|
executedictionaryIstreamMemberFunctionTablePtr_->find(functionName);
|
||||||
|
|
||||||
|
if (mfIter == executedictionaryIstreamMemberFunctionTablePtr_->end())
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"functionEntry::execute"
|
||||||
|
"(const word& functionName, dictionary& parentDict, Istream&)"
|
||||||
|
) << "Unknown functionEntry " << functionName
|
||||||
|
<< endl << endl
|
||||||
|
<< "Valid functionEntries are :" << endl
|
||||||
|
<< executedictionaryIstreamMemberFunctionTablePtr_->toc()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mfIter()(parentDict, is);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionEntry::execute
|
||||||
(
|
(
|
||||||
const word& functionName,
|
const word& functionName,
|
||||||
const dictionary& parentDict,
|
const dictionary& parentDict,
|
||||||
@ -58,14 +102,14 @@ bool Foam::functionEntry::insert
|
|||||||
{
|
{
|
||||||
is.fatalCheck
|
is.fatalCheck
|
||||||
(
|
(
|
||||||
"functionEntry::insert"
|
"functionEntry::execute"
|
||||||
"(const word& functionName, const dictionary& parentDict, "
|
"(const word& functionName, const dictionary& parentDict, "
|
||||||
"primitiveEntry& entry, Istream& is)"
|
"primitiveEntry&, Istream&)"
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!insertprimitiveEntryIstreamMemberFunctionTablePtr_)
|
if (!executeprimitiveEntryIstreamMemberFunctionTablePtr_)
|
||||||
{
|
{
|
||||||
cerr<<"functionEntry::insert"
|
cerr<<"functionEntry::execute"
|
||||||
<< "(const word&, dictionary&, primitiveEntry&, Istream&)"
|
<< "(const word&, dictionary&, primitiveEntry&, Istream&)"
|
||||||
<< " not yet initialized, function = "
|
<< " not yet initialized, function = "
|
||||||
<< functionName.c_str() << std::endl;
|
<< functionName.c_str() << std::endl;
|
||||||
@ -74,69 +118,24 @@ bool Foam::functionEntry::insert
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
insertprimitiveEntryIstreamMemberFunctionTable::iterator mfIter =
|
executeprimitiveEntryIstreamMemberFunctionTable::iterator mfIter =
|
||||||
insertprimitiveEntryIstreamMemberFunctionTablePtr_->find(functionName);
|
executeprimitiveEntryIstreamMemberFunctionTablePtr_->find(functionName);
|
||||||
|
|
||||||
if (mfIter == insertprimitiveEntryIstreamMemberFunctionTablePtr_->end())
|
if (mfIter == executeprimitiveEntryIstreamMemberFunctionTablePtr_->end())
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"functionEntry::insert"
|
"functionEntry::execute"
|
||||||
"(const word& functionName, const dictionary& parentDict, "
|
"(const word& functionName, const dictionary& parentDict, "
|
||||||
"primitiveEntry& entry, Istream& is)"
|
"primitiveEntry&, Istream&)"
|
||||||
) << "Unknown functionEntry " << functionName
|
) << "Unknown functionEntry " << functionName
|
||||||
<< endl << endl
|
<< endl << endl
|
||||||
<< "Valid functionEntries are :" << endl
|
<< "Valid functionEntries are :" << endl
|
||||||
<< insertprimitiveEntryIstreamMemberFunctionTablePtr_->toc()
|
<< executeprimitiveEntryIstreamMemberFunctionTablePtr_->toc()
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
return mfIter()(parentDict, entry, is);
|
return mfIter()(parentDict, entry, is);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::functionEntry::insert
|
|
||||||
(
|
|
||||||
const word& functionName,
|
|
||||||
dictionary& parentDict,
|
|
||||||
Istream& is
|
|
||||||
)
|
|
||||||
{
|
|
||||||
is.fatalCheck
|
|
||||||
(
|
|
||||||
"functionEntry::insert"
|
|
||||||
"(const word& functionName, dictionary& parentDict, Istream& is)"
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!insertdictionaryIstreamMemberFunctionTablePtr_)
|
|
||||||
{
|
|
||||||
cerr<<"functionEntry::insert"
|
|
||||||
<< "(const word&, dictionary&, Istream&)"
|
|
||||||
<< " not yet initialized, function = "
|
|
||||||
<< functionName.c_str() << std::endl;
|
|
||||||
|
|
||||||
// Return true to keep reading
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
insertdictionaryIstreamMemberFunctionTable::iterator mfIter =
|
|
||||||
insertdictionaryIstreamMemberFunctionTablePtr_->find(functionName);
|
|
||||||
|
|
||||||
if (mfIter == insertdictionaryIstreamMemberFunctionTablePtr_->end())
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"functionEntry::insert"
|
|
||||||
"(const word& functionName, dictionary& parentDict, Istream& is)"
|
|
||||||
) << "Unknown functionEntry " << functionName
|
|
||||||
<< endl << endl
|
|
||||||
<< "Valid functionEntries are :" << endl
|
|
||||||
<< insertdictionaryIstreamMemberFunctionTablePtr_->toc()
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
return mfIter()(parentDict, is);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -33,13 +33,10 @@ Class
|
|||||||
Foam::functionEntry
|
Foam::functionEntry
|
||||||
|
|
||||||
Description
|
Description
|
||||||
A function entry causes entries to be added/manipulated on the specified
|
A functionEntry causes entries to be added/manipulated on the specified
|
||||||
dictionary given an input stream.
|
dictionary given an input stream.
|
||||||
|
|
||||||
In dictionaries, a @c \# sigil is typically used for a functionEntry.
|
In dictionaries, a @c '\#' sigil is typically used for a functionEntry.
|
||||||
|
|
||||||
See Also
|
|
||||||
functionEntries::includeEntry and functionEntries::inputModeEntry
|
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
functionEntry.C
|
functionEntry.C
|
||||||
@ -84,7 +81,28 @@ public:
|
|||||||
(
|
(
|
||||||
bool,
|
bool,
|
||||||
functionEntry,
|
functionEntry,
|
||||||
insert,
|
execute,
|
||||||
|
dictionaryIstream,
|
||||||
|
(
|
||||||
|
dictionary& parentDict,
|
||||||
|
Istream& is
|
||||||
|
),
|
||||||
|
(parentDict, is)
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Execute the functionEntry in a sub-dict context
|
||||||
|
static bool execute
|
||||||
|
(
|
||||||
|
const word& functionName,
|
||||||
|
dictionary& parentDict,
|
||||||
|
Istream& is
|
||||||
|
);
|
||||||
|
|
||||||
|
declareMemberFunctionSelectionTable
|
||||||
|
(
|
||||||
|
bool,
|
||||||
|
functionEntry,
|
||||||
|
execute,
|
||||||
primitiveEntryIstream,
|
primitiveEntryIstream,
|
||||||
(
|
(
|
||||||
const dictionary& parentDict,
|
const dictionary& parentDict,
|
||||||
@ -94,7 +112,8 @@ public:
|
|||||||
(parentDict, entry, is)
|
(parentDict, entry, is)
|
||||||
);
|
);
|
||||||
|
|
||||||
static bool insert
|
//- Execute the functionEntry in a primitiveEntry context
|
||||||
|
static bool execute
|
||||||
(
|
(
|
||||||
const word& functionName,
|
const word& functionName,
|
||||||
const dictionary& parentDict,
|
const dictionary& parentDict,
|
||||||
@ -103,25 +122,6 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
declareMemberFunctionSelectionTable
|
|
||||||
(
|
|
||||||
bool,
|
|
||||||
functionEntry,
|
|
||||||
insert,
|
|
||||||
dictionaryIstream,
|
|
||||||
(
|
|
||||||
dictionary& parentDict,
|
|
||||||
Istream& is
|
|
||||||
),
|
|
||||||
(parentDict, is)
|
|
||||||
);
|
|
||||||
|
|
||||||
static bool insert
|
|
||||||
(
|
|
||||||
const word& functionName,
|
|
||||||
dictionary& parentDict,
|
|
||||||
Istream& is
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -48,16 +48,16 @@ namespace functionEntries
|
|||||||
(
|
(
|
||||||
functionEntry,
|
functionEntry,
|
||||||
includeEntry,
|
includeEntry,
|
||||||
insert,
|
execute,
|
||||||
primitiveEntryIstream
|
dictionaryIstream
|
||||||
);
|
);
|
||||||
|
|
||||||
addToMemberFunctionSelectionTable
|
addToMemberFunctionSelectionTable
|
||||||
(
|
(
|
||||||
functionEntry,
|
functionEntry,
|
||||||
includeEntry,
|
includeEntry,
|
||||||
insert,
|
execute,
|
||||||
dictionaryIstream
|
primitiveEntryIstream
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -82,7 +82,35 @@ Foam::fileName Foam::functionEntries::includeEntry::includeFileName
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::functionEntries::includeEntry::insert
|
bool Foam::functionEntries::includeEntry::execute
|
||||||
|
(
|
||||||
|
dictionary& parentDict,
|
||||||
|
Istream& is
|
||||||
|
)
|
||||||
|
{
|
||||||
|
IFstream fileStream(includeFileName(is));
|
||||||
|
|
||||||
|
if (fileStream)
|
||||||
|
{
|
||||||
|
parentDict.read(fileStream);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FatalIOErrorIn
|
||||||
|
(
|
||||||
|
"functionEntries::includeEntry::includeEntry"
|
||||||
|
"(dictionary& parentDict,Istream& is)",
|
||||||
|
is
|
||||||
|
) << "Cannot open include file " << fileStream.name()
|
||||||
|
<< " while reading dictionary " << parentDict.name()
|
||||||
|
<< exit(FatalIOError);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Foam::functionEntries::includeEntry::execute
|
||||||
(
|
(
|
||||||
const dictionary& parentDict,
|
const dictionary& parentDict,
|
||||||
primitiveEntry& entry,
|
primitiveEntry& entry,
|
||||||
@ -111,34 +139,4 @@ bool Foam::functionEntries::includeEntry::insert
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::functionEntries::includeEntry::insert
|
|
||||||
(
|
|
||||||
dictionary& parentDict,
|
|
||||||
Istream& is
|
|
||||||
)
|
|
||||||
{
|
|
||||||
IFstream fileStream(includeFileName(is));
|
|
||||||
|
|
||||||
if (fileStream)
|
|
||||||
{
|
|
||||||
parentDict.read(fileStream);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FatalIOErrorIn
|
|
||||||
(
|
|
||||||
"functionEntries::includeEntry::includeEntry"
|
|
||||||
"(dictionary& parentDict,Istream& is)",
|
|
||||||
is
|
|
||||||
) << "Cannot open include file " << fileStream.name()
|
|
||||||
<< " while reading dictionary " << parentDict.name()
|
|
||||||
<< exit(FatalIOError);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -29,9 +29,9 @@ Description
|
|||||||
Specify an include file when reading dictionaries, expects a
|
Specify an include file when reading dictionaries, expects a
|
||||||
single string to follow.
|
single string to follow.
|
||||||
|
|
||||||
An example of @c \#include directive:
|
An example of the @c \#include directive:
|
||||||
@verbatim
|
@verbatim
|
||||||
\#include "includefile"
|
#include "includeFile"
|
||||||
@endverbatim
|
@endverbatim
|
||||||
|
|
||||||
The usual expansion of environment variables and other constructs (eg,
|
The usual expansion of environment variables and other constructs (eg,
|
||||||
@ -85,18 +85,21 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
static bool insert
|
//- Execute the functionEntry in a sub-dict context
|
||||||
|
static bool execute
|
||||||
|
(
|
||||||
|
dictionary& parentDict,
|
||||||
|
Istream& is
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Execute the functionEntry in a primitiveEntry context
|
||||||
|
static bool execute
|
||||||
(
|
(
|
||||||
const dictionary& parentDict,
|
const dictionary& parentDict,
|
||||||
primitiveEntry& entry,
|
primitiveEntry& entry,
|
||||||
Istream& is
|
Istream& is
|
||||||
);
|
);
|
||||||
|
|
||||||
static bool insert
|
|
||||||
(
|
|
||||||
dictionary& parentDict,
|
|
||||||
Istream& is
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -47,15 +47,7 @@ namespace functionEntries
|
|||||||
(
|
(
|
||||||
functionEntry,
|
functionEntry,
|
||||||
inputModeEntry,
|
inputModeEntry,
|
||||||
insert,
|
execute,
|
||||||
primitiveEntryIstream
|
|
||||||
);
|
|
||||||
|
|
||||||
addToMemberFunctionSelectionTable
|
|
||||||
(
|
|
||||||
functionEntry,
|
|
||||||
inputModeEntry,
|
|
||||||
insert,
|
|
||||||
dictionaryIstream
|
dictionaryIstream
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -63,10 +55,11 @@ namespace functionEntries
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Private Data * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Private Data * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::label Foam::functionEntries::inputModeEntry::inputMode_ = imError;
|
Foam::label Foam::functionEntries::inputModeEntry::mode_ = imError;
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// we could combine this into execute() directly, but leave it here for now
|
||||||
void Foam::functionEntries::inputModeEntry::setMode(Istream& is)
|
void Foam::functionEntries::inputModeEntry::setMode(Istream& is)
|
||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
@ -74,15 +67,15 @@ void Foam::functionEntries::inputModeEntry::setMode(Istream& is)
|
|||||||
word mode(is);
|
word mode(is);
|
||||||
if (mode == "merge")
|
if (mode == "merge")
|
||||||
{
|
{
|
||||||
inputMode_ = imMerge;
|
mode_ = imMerge;
|
||||||
}
|
}
|
||||||
else if (mode == "overwrite")
|
else if (mode == "overwrite")
|
||||||
{
|
{
|
||||||
inputMode_ = imOverwrite;
|
mode_ = imOverwrite;
|
||||||
}
|
}
|
||||||
else if (mode == "error" || mode == "default")
|
else if (mode == "error" || mode == "default")
|
||||||
{
|
{
|
||||||
inputMode_ = imError;
|
mode_ = imError;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -95,19 +88,7 @@ void Foam::functionEntries::inputModeEntry::setMode(Istream& is)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool Foam::functionEntries::inputModeEntry::insert
|
bool Foam::functionEntries::inputModeEntry::execute
|
||||||
(
|
|
||||||
const dictionary& parentDict,
|
|
||||||
primitiveEntry& entry,
|
|
||||||
Istream& is
|
|
||||||
)
|
|
||||||
{
|
|
||||||
setMode(is);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool Foam::functionEntries::inputModeEntry::insert
|
|
||||||
(
|
(
|
||||||
dictionary& parentDict,
|
dictionary& parentDict,
|
||||||
Istream& is
|
Istream& is
|
||||||
@ -120,13 +101,13 @@ bool Foam::functionEntries::inputModeEntry::insert
|
|||||||
|
|
||||||
void Foam::functionEntries::inputModeEntry::clear()
|
void Foam::functionEntries::inputModeEntry::clear()
|
||||||
{
|
{
|
||||||
inputMode_ = imError;
|
mode_ = imError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::functionEntries::inputModeEntry::merge()
|
bool Foam::functionEntries::inputModeEntry::merge()
|
||||||
{
|
{
|
||||||
if (inputMode_ & imMerge)
|
if (mode_ & imMerge)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -139,7 +120,7 @@ bool Foam::functionEntries::inputModeEntry::merge()
|
|||||||
|
|
||||||
bool Foam::functionEntries::inputModeEntry::overwrite()
|
bool Foam::functionEntries::inputModeEntry::overwrite()
|
||||||
{
|
{
|
||||||
if (inputMode_ & imOverwrite)
|
if (mode_ & imOverwrite)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -74,11 +74,12 @@ class inputModeEntry
|
|||||||
};
|
};
|
||||||
|
|
||||||
//- current input mode
|
//- current input mode
|
||||||
static label inputMode_;
|
static label mode_;
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
|
//- Read the mode as a word and set enum appropriately
|
||||||
static void setMode(Istream&);
|
static void setMode(Istream&);
|
||||||
|
|
||||||
//- Disallow default bitwise copy construct
|
//- Disallow default bitwise copy construct
|
||||||
@ -96,23 +97,20 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
static bool insert
|
//- Execute the functionEntry in a sub-dict context
|
||||||
(
|
static bool execute
|
||||||
const dictionary& parentDict,
|
|
||||||
primitiveEntry&,
|
|
||||||
Istream&
|
|
||||||
);
|
|
||||||
|
|
||||||
static bool insert
|
|
||||||
(
|
(
|
||||||
dictionary& parentDict,
|
dictionary& parentDict,
|
||||||
Istream&
|
Istream&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Reset the inputMode to 'default'
|
||||||
static void clear();
|
static void clear();
|
||||||
|
|
||||||
|
//- Return true if the inputMode is 'merge'
|
||||||
static bool merge();
|
static bool merge();
|
||||||
|
|
||||||
|
//- Return true if the inputMode is 'overwrite'
|
||||||
static bool overwrite();
|
static bool overwrite();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -0,0 +1,88 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd.
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "removeEntry.H"
|
||||||
|
#include "dictionary.H"
|
||||||
|
#include "IStringStream.H"
|
||||||
|
#include "OStringStream.H"
|
||||||
|
#include "addToMemberFunctionSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
const Foam::word Foam::functionEntries::removeEntry::typeName
|
||||||
|
(
|
||||||
|
Foam::functionEntries::removeEntry::typeName_()
|
||||||
|
);
|
||||||
|
|
||||||
|
// Don't lookup the debug switch here as the debug switch dictionary
|
||||||
|
// might include removeEntry
|
||||||
|
int Foam::functionEntries::removeEntry::debug(0);
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace functionEntries
|
||||||
|
{
|
||||||
|
addToMemberFunctionSelectionTable
|
||||||
|
(
|
||||||
|
functionEntry,
|
||||||
|
removeEntry,
|
||||||
|
execute,
|
||||||
|
dictionaryIstream
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
bool Foam::functionEntries::removeEntry::execute
|
||||||
|
(
|
||||||
|
dictionary& parentDict,
|
||||||
|
Istream& is
|
||||||
|
)
|
||||||
|
{
|
||||||
|
token currToken(is);
|
||||||
|
is.putBack(currToken);
|
||||||
|
|
||||||
|
if (currToken == token::BEGIN_LIST)
|
||||||
|
{
|
||||||
|
wordList keys(is);
|
||||||
|
|
||||||
|
forAll(keys, keyI)
|
||||||
|
{
|
||||||
|
parentDict.remove(keys[keyI]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
word key(is);
|
||||||
|
parentDict.remove(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd.
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::functionEntries::removeEntry
|
||||||
|
|
||||||
|
Description
|
||||||
|
Remove a dictionary entry.
|
||||||
|
|
||||||
|
The @c \#remove directive takes a word or a list of words. For example,
|
||||||
|
@verbatim
|
||||||
|
#remove entry0
|
||||||
|
#remove ( entry1 entry2 entry3 )
|
||||||
|
@endverbatim
|
||||||
|
|
||||||
|
The removable only occurs in the current context.
|
||||||
|
Removing sub-entries or parent entries is not supported.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
removeEntry.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef removeEntry_H
|
||||||
|
#define removeEntry_H
|
||||||
|
|
||||||
|
#include "functionEntry.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace functionEntries
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class removeEntry Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class removeEntry
|
||||||
|
:
|
||||||
|
public functionEntry
|
||||||
|
{
|
||||||
|
// Private Member Functions
|
||||||
|
|
||||||
|
//- Disallow default bitwise copy construct
|
||||||
|
removeEntry(const removeEntry&);
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const removeEntry&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("remove");
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Execute the functionEntry in a sub-dict context
|
||||||
|
static bool execute
|
||||||
|
(
|
||||||
|
dictionary& parentDict,
|
||||||
|
Istream& is
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionEntries
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -115,7 +115,7 @@ bool Foam::primitiveEntry::expandFunction
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
word functionName = keyword(1, keyword.size()-1);
|
word functionName = keyword(1, keyword.size()-1);
|
||||||
return functionEntry::insert(functionName, parentDict, *this, is);
|
return functionEntry::execute(functionName, parentDict, *this, is);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -186,7 +186,7 @@ Foam::argList::argList
|
|||||||
// Print the banner once only for parallel runs
|
// Print the banner once only for parallel runs
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
IOobject::writeLogBanner(Info);
|
IOobject::writeBanner(Info, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert argv -> args_ and capture ( ... ) lists
|
// convert argv -> args_ and capture ( ... ) lists
|
||||||
@ -252,19 +252,30 @@ Foam::argList::argList
|
|||||||
|
|
||||||
args_.setSize(nArgs);
|
args_.setSize(nArgs);
|
||||||
|
|
||||||
// Help options:
|
// Help/documentation options:
|
||||||
// -doc display the documentation in browser
|
// -help print the usage
|
||||||
// -help print the usage
|
// -doc display application documentation in browser
|
||||||
if (options_.found("doc") || options_.found("help"))
|
// -srcDoc display source code in browser
|
||||||
|
if
|
||||||
|
(
|
||||||
|
options_.found("help")
|
||||||
|
|| options_.found("doc")
|
||||||
|
|| options_.found("srcDoc")
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (options_.found("help"))
|
if (options_.found("help"))
|
||||||
{
|
{
|
||||||
printUsage();
|
printUsage();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options_.found("doc"))
|
// only display one or the other
|
||||||
|
if (options_.found("srcDoc"))
|
||||||
{
|
{
|
||||||
displayDoc();
|
displayDoc(true);
|
||||||
|
}
|
||||||
|
else if (options_.found("doc"))
|
||||||
|
{
|
||||||
|
displayDoc(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
::exit(0);
|
::exit(0);
|
||||||
@ -578,12 +589,9 @@ void Foam::argList::printUsage() const
|
|||||||
++iter
|
++iter
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Info<< ' ' << '<' << iter().c_str() << '>';
|
Info<< " <" << iter().c_str() << '>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// place -doc and -help up front
|
|
||||||
Info<< " [-doc] [-help]";
|
|
||||||
|
|
||||||
for
|
for
|
||||||
(
|
(
|
||||||
HashTable<string>::iterator iter = validOptions.begin();
|
HashTable<string>::iterator iter = validOptions.begin();
|
||||||
@ -601,16 +609,27 @@ void Foam::argList::printUsage() const
|
|||||||
Info<< ']';
|
Info<< ']';
|
||||||
}
|
}
|
||||||
|
|
||||||
Info<< endl;
|
// place help/doc options of the way at the end,
|
||||||
|
// but with an extra space to separate it a little
|
||||||
|
Info<< " [-help] [-doc] [-srcDoc]" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::argList::displayDoc() const
|
void Foam::argList::displayDoc(bool source) const
|
||||||
{
|
{
|
||||||
const dictionary& docDict = debug::controlDict().subDict("Documentation");
|
const dictionary& docDict = debug::controlDict().subDict("Documentation");
|
||||||
List<fileName> docDirs(docDict.lookup("doxyDocDirs"));
|
List<fileName> docDirs(docDict.lookup("doxyDocDirs"));
|
||||||
List<fileName> docExts(docDict.lookup("doxySourceFileExts"));
|
List<fileName> docExts(docDict.lookup("doxySourceFileExts"));
|
||||||
|
|
||||||
|
// for source code: change foo_8C.html to foo_8C-source.html
|
||||||
|
if (source)
|
||||||
|
{
|
||||||
|
forAll(docExts, extI)
|
||||||
|
{
|
||||||
|
docExts[extI].replace(".", "-source.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fileName docFile;
|
fileName docFile;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
@ -618,7 +637,7 @@ void Foam::argList::displayDoc() const
|
|||||||
{
|
{
|
||||||
forAll(docExts, extI)
|
forAll(docExts, extI)
|
||||||
{
|
{
|
||||||
docFile = docDirs[dirI]/executable() + docExts[extI];
|
docFile = docDirs[dirI]/executable_ + docExts[extI];
|
||||||
docFile.expand();
|
docFile.expand();
|
||||||
|
|
||||||
if (exists(docFile))
|
if (exists(docFile))
|
||||||
|
|||||||
@ -27,18 +27,18 @@ Class
|
|||||||
|
|
||||||
Description
|
Description
|
||||||
Extract command arguments and options from the supplied
|
Extract command arguments and options from the supplied
|
||||||
@a argc and @a argv.
|
@a argc and @a argv parameters.
|
||||||
|
|
||||||
Sequences with "(" ... ")" are transformed into a stringList.
|
Sequences with "(" ... ")" are transformed into a stringList.
|
||||||
For example,
|
For example,
|
||||||
@verbatim
|
@verbatim
|
||||||
program -listFiles \( *.txt \)
|
program -listFiles \( *.txt \)
|
||||||
@endverbatim
|
@endverbatim
|
||||||
in which the backslash-escaping has been used to avoid shell expansions,
|
|
||||||
would create a stringList:
|
would create a stringList:
|
||||||
@verbatim
|
@verbatim
|
||||||
( "file1.txt" "file2.txt" ... "fileN.txt" )
|
( "file1.txt" "file2.txt" ... "fileN.txt" )
|
||||||
@endverbatim
|
@endverbatim
|
||||||
|
The backslash-escaping has been used to avoid shell expansions.
|
||||||
|
|
||||||
@par Default command-line options
|
@par Default command-line options
|
||||||
@param -case \<dir\> \n
|
@param -case \<dir\> \n
|
||||||
@ -47,6 +47,8 @@ Description
|
|||||||
specify case as a parallel job
|
specify case as a parallel job
|
||||||
@param -doc \n
|
@param -doc \n
|
||||||
display the documentation in browser
|
display the documentation in browser
|
||||||
|
@param -srcDoc \n
|
||||||
|
display the source documentation in browser
|
||||||
@param -help \n
|
@param -help \n
|
||||||
print the usage
|
print the usage
|
||||||
|
|
||||||
@ -130,14 +132,14 @@ public:
|
|||||||
//- A list of valid parallel options
|
//- A list of valid parallel options
|
||||||
static HashTable<string> validParOptions;
|
static HashTable<string> validParOptions;
|
||||||
|
|
||||||
//! @cond ignore documentation for this class
|
//! @cond ignoreDocumentation
|
||||||
class initValidTables
|
class initValidTables
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
initValidTables();
|
initValidTables();
|
||||||
};
|
};
|
||||||
//! @endcond
|
//! @endcond ignoreDocumentation
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
@ -148,8 +150,8 @@ public:
|
|||||||
(
|
(
|
||||||
int& argc,
|
int& argc,
|
||||||
char**& argv,
|
char**& argv,
|
||||||
bool checkArgs = true,
|
bool checkArgs=true,
|
||||||
bool checkOpts = true
|
bool checkOpts=true
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -196,8 +198,7 @@ public:
|
|||||||
return globalCase_;
|
return globalCase_;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return case name for parallel run
|
//- Return case name for parallel run or the global case for a serial run
|
||||||
// or the global case for a serial run
|
|
||||||
const fileName& caseName() const
|
const fileName& caseName() const
|
||||||
{
|
{
|
||||||
return case_;
|
return case_;
|
||||||
@ -222,13 +223,14 @@ public:
|
|||||||
void printUsage() const;
|
void printUsage() const;
|
||||||
|
|
||||||
//- Display documentation in browser
|
//- Display documentation in browser
|
||||||
void displayDoc() const;
|
// Optionally display the application source code
|
||||||
|
void displayDoc(bool source=false) const;
|
||||||
|
|
||||||
|
|
||||||
// Check
|
// Check
|
||||||
|
|
||||||
//- Check argument list
|
//- Check argument list
|
||||||
bool check(bool checkArgs = true, bool checkOpts = true) const;
|
bool check(bool checkArgs=true, bool checkOpts=true) const;
|
||||||
|
|
||||||
//- Check root path and case path
|
//- Check root path and case path
|
||||||
bool checkRootCase() const;
|
bool checkRootCase() const;
|
||||||
|
|||||||
@ -89,8 +89,6 @@ bool chDir(const fileName& dir);
|
|||||||
|
|
||||||
//- Search for @em name in the following hierarchy:
|
//- Search for @em name in the following hierarchy:
|
||||||
// -# personal settings:
|
// -# personal settings:
|
||||||
// - ~/.OpenFOAM-\<VERSION\>
|
|
||||||
// <em>(old style)</em>
|
|
||||||
// - ~/.OpenFOAM/\<VERSION\>/
|
// - ~/.OpenFOAM/\<VERSION\>/
|
||||||
// <em>for version-specific files</em>
|
// <em>for version-specific files</em>
|
||||||
// - ~/.OpenFOAM/
|
// - ~/.OpenFOAM/
|
||||||
|
|||||||
@ -73,8 +73,7 @@ void Foam::processorLduInterface::send
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
FatalErrorIn("processorLduInterface::send")
|
FatalErrorIn("processorLduInterface::send")
|
||||||
<< "Unsuported communications type "
|
<< "Unsupported communications type " << commsType
|
||||||
<< Pstream::commsTypeNames[commsType]
|
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -104,8 +103,7 @@ void Foam::processorLduInterface::receive
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
FatalErrorIn("processorLduInterface::receive")
|
FatalErrorIn("processorLduInterface::receive")
|
||||||
<< "Unsuported communications type "
|
<< "Unsupported communications type " << commsType
|
||||||
<< Pstream::commsTypeNames[commsType]
|
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -184,8 +182,7 @@ void Foam::processorLduInterface::compressedSend
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
FatalErrorIn("processorLduInterface::compressedSend")
|
FatalErrorIn("processorLduInterface::compressedSend")
|
||||||
<< "Unsuported communications type "
|
<< "Unsupported communications type " << commsType
|
||||||
<< Pstream::commsTypeNames[commsType]
|
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -225,8 +222,7 @@ void Foam::processorLduInterface::compressedReceive
|
|||||||
else if (commsType != Pstream::nonBlocking)
|
else if (commsType != Pstream::nonBlocking)
|
||||||
{
|
{
|
||||||
FatalErrorIn("processorLduInterface::compressedReceive")
|
FatalErrorIn("processorLduInterface::compressedReceive")
|
||||||
<< "Unsuported communications type "
|
<< "Unsupported communications type " << commsType
|
||||||
<< Pstream::commsTypeNames[commsType]
|
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,10 @@ wmake libso dummy
|
|||||||
case "$WM_MPLIB" in
|
case "$WM_MPLIB" in
|
||||||
LAM | OPENMPI | MPI | MPICH | MPICH-GM | MPIGAMMA )
|
LAM | OPENMPI | MPI | MPICH | MPICH-GM | MPIGAMMA )
|
||||||
export WM_OPTIONS=${WM_OPTIONS}$WM_MPLIB
|
export WM_OPTIONS=${WM_OPTIONS}$WM_MPLIB
|
||||||
|
set +x
|
||||||
|
echo
|
||||||
|
echo "Note: ignore spurious warnings about missing mpicxx.h headers"
|
||||||
|
set -x
|
||||||
wmake libso mpi
|
wmake libso mpi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|||||||
@ -32,12 +32,9 @@ Description
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
IPstream::IPstream
|
Foam::IPstream::IPstream
|
||||||
(
|
(
|
||||||
const commsTypes commsType,
|
const commsTypes commsType,
|
||||||
const int fromProcNo,
|
const int fromProcNo,
|
||||||
@ -53,13 +50,12 @@ IPstream::IPstream
|
|||||||
{
|
{
|
||||||
notImplemented
|
notImplemented
|
||||||
(
|
(
|
||||||
"IPstream::IPstream"
|
"IPsream::IPstream"
|
||||||
"("
|
"("
|
||||||
"const commsTypes commsType,"
|
"const commsTypes,"
|
||||||
"const int fromProcNo,"
|
"const int fromProcNo,"
|
||||||
"const label bufSize,"
|
"const label bufSize,"
|
||||||
"streamFormat format,"
|
"streamFormat, versionNumber"
|
||||||
"versionNumber version"
|
|
||||||
")"
|
")"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -67,7 +63,7 @@ IPstream::IPstream
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
int IPstream::read
|
int Foam::IPstream::read
|
||||||
(
|
(
|
||||||
const commsTypes commsType,
|
const commsTypes commsType,
|
||||||
const int fromProcNo,
|
const int fromProcNo,
|
||||||
@ -75,33 +71,32 @@ int IPstream::read
|
|||||||
const std::streamsize bufSize
|
const std::streamsize bufSize
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
notImplemented
|
notImplemented
|
||||||
(
|
(
|
||||||
"IPstream::read"
|
"IPstream::read"
|
||||||
"("
|
"("
|
||||||
"const commsTypes commsType,"
|
"const commsTypes,"
|
||||||
"const int fromProcNo,"
|
"const int fromProcNo,"
|
||||||
"char* buf,"
|
"char* buf,"
|
||||||
"const label bufSize"
|
"const label bufSize"
|
||||||
")"
|
")"
|
||||||
);
|
);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void IPstream::waitRequests()
|
void Foam::IPstream::waitRequests()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
bool IPstream::finishedRequest(const label)
|
bool Foam::IPstream::finishedRequest(const label)
|
||||||
{
|
{
|
||||||
notImplemented("IPstream::finishedRequest()");
|
notImplemented("IPstream::finishedRequest()");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -32,12 +32,9 @@ Description
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
OPstream::~OPstream()
|
Foam::OPstream::~OPstream()
|
||||||
{
|
{
|
||||||
notImplemented("OPstream::~OPstream()");
|
notImplemented("OPstream::~OPstream()");
|
||||||
}
|
}
|
||||||
@ -45,7 +42,7 @@ OPstream::~OPstream()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool OPstream::write
|
bool Foam::OPstream::write
|
||||||
(
|
(
|
||||||
const commsTypes commsType,
|
const commsTypes commsType,
|
||||||
const int toProcNo,
|
const int toProcNo,
|
||||||
@ -68,11 +65,11 @@ bool OPstream::write
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void OPstream::waitRequests()
|
void Foam::OPstream::waitRequests()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
bool OPstream::finishedRequest(const label)
|
bool Foam::OPstream::finishedRequest(const label)
|
||||||
{
|
{
|
||||||
notImplemented("OPstream::finishedRequest()");
|
notImplemented("OPstream::finishedRequest()");
|
||||||
return false;
|
return false;
|
||||||
@ -81,6 +78,4 @@ bool OPstream::finishedRequest(const label)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -29,16 +29,13 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Pstream::addValidParOptions(HashTable<string>& validParOptions)
|
void Foam::Pstream::addValidParOptions(HashTable<string>& validParOptions)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
bool Pstream::init(int& argc, char**& argv)
|
bool Foam::Pstream::init(int& argc, char**& argv)
|
||||||
{
|
{
|
||||||
FatalErrorIn("Pstream::init(int& argc, char**& argv)")
|
FatalErrorIn("Pstream::init(int& argc, char**& argv)")
|
||||||
<< "Trying to use the dummy Pstream library." << nl
|
<< "Trying to use the dummy Pstream library." << nl
|
||||||
@ -49,24 +46,21 @@ bool Pstream::init(int& argc, char**& argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Pstream::exit(int errnum)
|
void Foam::Pstream::exit(int errnum)
|
||||||
{
|
{
|
||||||
notImplemented("Pstream::exit(int errnum)");
|
notImplemented("Pstream::exit(int errnum)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Pstream::abort()
|
void Foam::Pstream::abort()
|
||||||
{
|
{
|
||||||
notImplemented("Pstream::abort()");
|
notImplemented("Pstream::abort()");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void reduce(scalar&, const sumOp<scalar>&)
|
void Foam::reduce(scalar&, const sumOp<scalar>&)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -23,7 +23,7 @@ License
|
|||||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Write primitive and binary block from OPstream
|
Write primitive and binary block from OPstream gamma-mpi
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -46,8 +46,10 @@ namespace Foam
|
|||||||
|
|
||||||
// Largest message sent so far. This tracks the size of the receive
|
// Largest message sent so far. This tracks the size of the receive
|
||||||
// buffer on the receiving end. Done so we only send out resize messages
|
// buffer on the receiving end. Done so we only send out resize messages
|
||||||
// if nessecary
|
// if necessary
|
||||||
|
//! @cond fileScope
|
||||||
labelList maxSendSize;
|
labelList maxSendSize;
|
||||||
|
//! @endcond fileScope
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -26,7 +26,8 @@ Namespace
|
|||||||
Foam::PstreamGlobals
|
Foam::PstreamGlobals
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Global functions and variables for working with parallel streams.
|
Global functions and variables for working with parallel streams,
|
||||||
|
but principally for gamma/mpi
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
PstreamGlobals.C
|
PstreamGlobals.C
|
||||||
|
|||||||
@ -33,18 +33,16 @@ Description
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
// Outstanding non-blocking operations.
|
// Outstanding non-blocking operations.
|
||||||
DynamicList<MPI_Request> IPstream_outstandingRequests_;
|
//! @cond fileScope
|
||||||
|
Foam::DynamicList<MPI_Request> IPstream_outstandingRequests_;
|
||||||
|
//! @endcond fileScope
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
IPstream::IPstream
|
Foam::IPstream::IPstream
|
||||||
(
|
(
|
||||||
const commsTypes commsType,
|
const commsTypes commsType,
|
||||||
const int fromProcNo,
|
const int fromProcNo,
|
||||||
@ -89,7 +87,7 @@ IPstream::IPstream
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
label IPstream::read
|
Foam::label Foam::IPstream::read
|
||||||
(
|
(
|
||||||
const commsTypes commsType,
|
const commsTypes commsType,
|
||||||
const int fromProcNo,
|
const int fromProcNo,
|
||||||
@ -192,7 +190,7 @@ label IPstream::read
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void IPstream::waitRequests()
|
void Foam::IPstream::waitRequests()
|
||||||
{
|
{
|
||||||
if (IPstream_outstandingRequests_.size() > 0)
|
if (IPstream_outstandingRequests_.size() > 0)
|
||||||
{
|
{
|
||||||
@ -219,7 +217,7 @@ void IPstream::waitRequests()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool IPstream::finishedRequest(const label i)
|
bool Foam::IPstream::finishedRequest(const label i)
|
||||||
{
|
{
|
||||||
if (i >= IPstream_outstandingRequests_.size())
|
if (i >= IPstream_outstandingRequests_.size())
|
||||||
{
|
{
|
||||||
@ -244,6 +242,4 @@ bool IPstream::finishedRequest(const label i)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -31,20 +31,16 @@ Description
|
|||||||
|
|
||||||
#include "OPstream.H"
|
#include "OPstream.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
// Outstanding non-blocking operations.
|
// Outstanding non-blocking operations.
|
||||||
DynamicList<MPI_Request> OPstream_outstandingRequests_;
|
//! @cond fileScope
|
||||||
|
Foam::DynamicList<MPI_Request> OPstream_outstandingRequests_;
|
||||||
|
//! @endcond fileScope
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
OPstream::~OPstream()
|
Foam::OPstream::~OPstream()
|
||||||
{
|
{
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
@ -66,7 +62,7 @@ OPstream::~OPstream()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool OPstream::write
|
bool Foam::OPstream::write
|
||||||
(
|
(
|
||||||
const commsTypes commsType,
|
const commsTypes commsType,
|
||||||
const int toProcNo,
|
const int toProcNo,
|
||||||
@ -80,7 +76,7 @@ bool OPstream::write
|
|||||||
{
|
{
|
||||||
transferFailed = MPI_Bsend
|
transferFailed = MPI_Bsend
|
||||||
(
|
(
|
||||||
(char*)buf,
|
const_cast<char*>(buf),
|
||||||
bufSize,
|
bufSize,
|
||||||
MPI_PACKED,
|
MPI_PACKED,
|
||||||
procID(toProcNo),
|
procID(toProcNo),
|
||||||
@ -92,7 +88,7 @@ bool OPstream::write
|
|||||||
{
|
{
|
||||||
transferFailed = MPI_Send
|
transferFailed = MPI_Send
|
||||||
(
|
(
|
||||||
(char*)buf,
|
const_cast<char*>(buf),
|
||||||
bufSize,
|
bufSize,
|
||||||
MPI_PACKED,
|
MPI_PACKED,
|
||||||
procID(toProcNo),
|
procID(toProcNo),
|
||||||
@ -106,7 +102,7 @@ bool OPstream::write
|
|||||||
|
|
||||||
transferFailed = MPI_Isend
|
transferFailed = MPI_Isend
|
||||||
(
|
(
|
||||||
(char*)buf,
|
const_cast<char*>(buf),
|
||||||
bufSize,
|
bufSize,
|
||||||
MPI_PACKED,
|
MPI_PACKED,
|
||||||
procID(toProcNo),
|
procID(toProcNo),
|
||||||
@ -132,7 +128,7 @@ bool OPstream::write
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void OPstream::waitRequests()
|
void Foam::OPstream::waitRequests()
|
||||||
{
|
{
|
||||||
if (OPstream_outstandingRequests_.size() > 0)
|
if (OPstream_outstandingRequests_.size() > 0)
|
||||||
{
|
{
|
||||||
@ -159,7 +155,7 @@ void OPstream::waitRequests()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool OPstream::finishedRequest(const label i)
|
bool Foam::OPstream::finishedRequest(const label i)
|
||||||
{
|
{
|
||||||
if (i >= OPstream_outstandingRequests_.size())
|
if (i >= OPstream_outstandingRequests_.size())
|
||||||
{
|
{
|
||||||
@ -184,6 +180,4 @@ bool OPstream::finishedRequest(const label i)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -42,12 +42,14 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Pstream::addValidParOptions(HashTable<string>& validParOptions)
|
// NOTE:
|
||||||
|
// valid parallel options vary between implementations, but flag common ones.
|
||||||
|
// if they are not removed by MPI_Init(), the subsequent argument processing
|
||||||
|
// will notice that they are wrong
|
||||||
|
void Foam::Pstream::addValidParOptions(HashTable<string>& validParOptions)
|
||||||
{
|
{
|
||||||
validParOptions.insert("np", "");
|
validParOptions.insert("np", "");
|
||||||
validParOptions.insert("p4pg", "PI file");
|
validParOptions.insert("p4pg", "PI file");
|
||||||
@ -59,7 +61,7 @@ void Pstream::addValidParOptions(HashTable<string>& validParOptions)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Pstream::init(int& argc, char**& argv)
|
bool Foam::Pstream::init(int& argc, char**& argv)
|
||||||
{
|
{
|
||||||
MPI_Init(&argc, &argv);
|
MPI_Init(&argc, &argv);
|
||||||
|
|
||||||
@ -119,7 +121,7 @@ bool Pstream::init(int& argc, char**& argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Pstream::exit(int errnum)
|
void Foam::Pstream::exit(int errnum)
|
||||||
{
|
{
|
||||||
# ifndef SGIMPI
|
# ifndef SGIMPI
|
||||||
int size;
|
int size;
|
||||||
@ -140,13 +142,13 @@ void Pstream::exit(int errnum)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Pstream::abort()
|
void Foam::Pstream::abort()
|
||||||
{
|
{
|
||||||
MPI_Abort(MPI_COMM_WORLD, 1);
|
MPI_Abort(MPI_COMM_WORLD, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void reduce(scalar& Value, const sumOp<scalar>& bop)
|
void Foam::reduce(scalar& Value, const sumOp<scalar>& bop)
|
||||||
{
|
{
|
||||||
if (!Pstream::parRun())
|
if (!Pstream::parRun())
|
||||||
{
|
{
|
||||||
@ -426,6 +428,4 @@ void reduce(scalar& Value, const sumOp<scalar>& bop)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -653,7 +653,7 @@ void Foam::meshCutAndRemove::setRefinement
|
|||||||
const edge& e = mesh().edges()[edgeI];
|
const edge& e = mesh().edges()[edgeI];
|
||||||
|
|
||||||
// Check if there is any cell using this edge.
|
// Check if there is any cell using this edge.
|
||||||
if (debug & findCutCell(cuts, mesh().edgeCells()[edgeI]) == -1)
|
if (debug && findCutCell(cuts, mesh().edgeCells()[edgeI]) == -1)
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
|
|||||||
@ -601,7 +601,7 @@ void Foam::meshCutter::setRefinement
|
|||||||
const edge& e = mesh().edges()[edgeI];
|
const edge& e = mesh().edges()[edgeI];
|
||||||
|
|
||||||
// Check if there is any cell using this edge.
|
// Check if there is any cell using this edge.
|
||||||
if (debug & findCutCell(cuts, mesh().edgeCells()[edgeI]) == -1)
|
if (debug && findCutCell(cuts, mesh().edgeCells()[edgeI]) == -1)
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
|
|||||||
@ -140,7 +140,7 @@ Foam::sampledPatch::sampledPatch
|
|||||||
patchFaceLabels_(0)
|
patchFaceLabels_(0)
|
||||||
{
|
{
|
||||||
// default: non-triangulated
|
// default: non-triangulated
|
||||||
triangulate() = getBool(dict, "triangulate", false);
|
triangulate() = dict.lookupOrDefault("triangulate", false);
|
||||||
createGeometry();
|
createGeometry();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -151,25 +151,6 @@ Foam::sampledSurface::New
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::sampledSurface::getBool
|
|
||||||
(
|
|
||||||
const dictionary& dict,
|
|
||||||
const word& key,
|
|
||||||
const bool defaultVal
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (dict.found(key))
|
|
||||||
{
|
|
||||||
return readBool(dict.lookup(key));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return defaultVal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::sampledSurface::sampledSurface
|
Foam::sampledSurface::sampledSurface
|
||||||
@ -200,8 +181,8 @@ Foam::sampledSurface::sampledSurface
|
|||||||
:
|
:
|
||||||
name_(name),
|
name_(name),
|
||||||
mesh_(mesh),
|
mesh_(mesh),
|
||||||
triangulate_(getBool(dict, "triangulate", true)),
|
triangulate_(dict.lookupOrDefault("triangulate", true)),
|
||||||
interpolate_(getBool(dict, "interpolate", false)),
|
interpolate_(dict.lookupOrDefault("interpolate", false)),
|
||||||
SfPtr_(NULL),
|
SfPtr_(NULL),
|
||||||
magSfPtr_(NULL),
|
magSfPtr_(NULL),
|
||||||
CfPtr_(NULL),
|
CfPtr_(NULL),
|
||||||
|
|||||||
@ -128,11 +128,6 @@ class sampledSurface
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// Protected static functions
|
|
||||||
|
|
||||||
//- Read bool from dictionary. Return provided value if not found
|
|
||||||
static bool getBool(const dictionary&, const word&, const bool);
|
|
||||||
|
|
||||||
// Protected Member functions
|
// Protected Member functions
|
||||||
|
|
||||||
virtual void clearGeom() const;
|
virtual void clearGeom() const;
|
||||||
|
|||||||
@ -89,9 +89,16 @@ done
|
|||||||
|
|
||||||
make="make"
|
make="make"
|
||||||
|
|
||||||
|
# set WM_NCOMPPROCS automatically when both WM_HOSTS and WM_SCHEDULER are set
|
||||||
|
if [ -z "$WM_NCOMPPROCS" -a -n "$WM_HOSTS" -a -n "$WM_SCHEDULER" ]
|
||||||
|
then
|
||||||
|
WM_NCOMPPROCS=$(wmakeScheduler -count)
|
||||||
|
[ $? -eq 0 ] || unset WM_NCOMPPROCS
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$WM_NCOMPPROCS" ]
|
if [ "$WM_NCOMPPROCS" ]
|
||||||
then
|
then
|
||||||
if [ "$WM_NCOMPPROCS" -ne 1 -a ! "$MAKEFLAGS" ]
|
if [ "$WM_NCOMPPROCS" -gt 1 -a ! "$MAKEFLAGS" ]
|
||||||
then
|
then
|
||||||
lockDir=$HOME/.wmakeScheduler
|
lockDir=$HOME/.wmakeScheduler
|
||||||
|
|
||||||
|
|||||||
@ -1,201 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# ========= |
|
|
||||||
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
# \\ / O peration |
|
|
||||||
# \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd.
|
|
||||||
# \\/ M anipulation |
|
|
||||||
#-------------------------------------------------------------------------------
|
|
||||||
# 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 2 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, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
#
|
|
||||||
# Script
|
|
||||||
# wmakeScheduler
|
|
||||||
#
|
|
||||||
# Description
|
|
||||||
# Scheduler for network distributed compilations using wmake.
|
|
||||||
# - WM_HOSTS contains a list of hosts and number of concurrent processes
|
|
||||||
# eg,
|
|
||||||
# export WM_HOSTS="hostA:1 hostB:2 hostC:1"
|
|
||||||
# - WM_COLOURS contains a list of colours to cycle through
|
|
||||||
# export WM_COLOURS="black blue green cyan red magenta yellow"
|
|
||||||
#
|
|
||||||
# Sources the relevant cshrc/bashrc if not set.
|
|
||||||
#
|
|
||||||
# WM_PROJECT_DIR, WM_PROJECT and WM_PROJECT_VERSION will have been set
|
|
||||||
# before calling this routine
|
|
||||||
#
|
|
||||||
# Usage
|
|
||||||
# wmakeScheduler COMMAND
|
|
||||||
# run 'COMMAND' on one of the slots listed in WM_HOSTS
|
|
||||||
#
|
|
||||||
# wmakeScheduler -count
|
|
||||||
# count the total number of slots available in WM_HOSTS
|
|
||||||
# eg, WM_NCOMPPROCS=$(wmakeScheduler -count)
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------------
|
|
||||||
lockDir=$HOME/.wmakeScheduler
|
|
||||||
|
|
||||||
# fallback - 1 core on current host
|
|
||||||
: ${WM_HOSTS:=$HOST:1}
|
|
||||||
|
|
||||||
# count the total number of slots available and exit
|
|
||||||
if [ "$1" = "-count" ]
|
|
||||||
then
|
|
||||||
expr $(
|
|
||||||
for slotGroup in $WM_HOSTS
|
|
||||||
do
|
|
||||||
n=${slotGroup##*:}
|
|
||||||
if [ "$n" = "${slotGroup%%:*}" ]; then n=1; fi # missing ':'
|
|
||||||
echo "+ ${n:-1}"
|
|
||||||
done)
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# where to source WM_PROJECT settings in a remote shell
|
|
||||||
# This code tries to figure out which cshrc or bashrc to execute.
|
|
||||||
# !! Assumes remote computer running same shell and startup files
|
|
||||||
# in same location
|
|
||||||
|
|
||||||
sourceFoam=false # fallback command
|
|
||||||
case $SHELL in
|
|
||||||
*/csh | */tcsh ) # [t]csh vs bash|ksh|sh
|
|
||||||
shellRc=cshrc
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
shellRc=bashrc
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# check ~/.$WM_PROJECT-$WM_PROJECT_VERSION/
|
|
||||||
# check ~/.$WM_PROJECT/$WM_PROJECT_VERSION/
|
|
||||||
# check ~/.$WM_PROJECT/
|
|
||||||
# check <installedProject>/etc/
|
|
||||||
# check <installedProject/.$WM_PROJECT-$WM_PROJECT_VERSION/
|
|
||||||
if [ "$WM_PROJECT" ]; then
|
|
||||||
|
|
||||||
: ${FOAM_DOT_DIR:=.$WM_PROJECT-$WM_PROJECT_VERSION}
|
|
||||||
|
|
||||||
for i in \
|
|
||||||
$HOME/$FOAM_DOT_DIR \
|
|
||||||
$HOME/.$WM_PROJECT/$WM_PROJECT_VERSION \
|
|
||||||
$HOME/.$WM_PROJECT \
|
|
||||||
$WM_PROJECT_DIR/etc \
|
|
||||||
$WM_PROJECT_DIR/$FOAM_DOT_DIR \
|
|
||||||
;
|
|
||||||
do
|
|
||||||
if [ -f "$i/$shellRc" ]; then
|
|
||||||
sourceFoam="$i/$shellRc"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Construct test string for remote execution.
|
|
||||||
# Source WM_PROJECT settings if WM_PROJECT environment not set.
|
|
||||||
case $sourceFoam in
|
|
||||||
*/cshrc) sourceFoam='if ( ! $?WM_PROJECT ) source '"$sourceFoam";;
|
|
||||||
*/bashrc) sourceFoam='[ "$WM_PROJECT" ] || . '"$sourceFoam";;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# quote double-quotes for remote command line
|
|
||||||
rcmd=$(echo $* | sed -e s/\"/\'\"\'/g)
|
|
||||||
## the same, without forking (not ksh, maybe not /bin/sh either)
|
|
||||||
# rcmd=$(while [ "$#" -gt 0 ]; do echo "${1//\"/'\"'}"; shift; done)
|
|
||||||
|
|
||||||
|
|
||||||
# Convert WM_COLOURS into an array
|
|
||||||
declare colours
|
|
||||||
nColours=0
|
|
||||||
for col in $WM_COLOURS
|
|
||||||
do
|
|
||||||
colours[$nColours]=$col
|
|
||||||
((nColours = $nColours + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
# Bashism: make pipe fail early. This make sure return value of compilation
|
|
||||||
# is returned and not of colouring pipe.
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
# Define function to colour output by argument 1
|
|
||||||
colourPipe(){
|
|
||||||
if [ "$1" ]; then
|
|
||||||
(while read line; do setterm -foreground $1; echo "$line" ; done; setterm -foreground default)
|
|
||||||
else
|
|
||||||
cat
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
colourIndex=0
|
|
||||||
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
for slotGroup in $WM_HOSTS
|
|
||||||
do
|
|
||||||
# split 'host:N', but catch 'host:' and 'host' too
|
|
||||||
host=${slotGroup%%:*}
|
|
||||||
n=${slotGroup##*:}
|
|
||||||
if [ "$n" = "$host" ]; then n=1; fi # missing ':'
|
|
||||||
: ${n:=1}
|
|
||||||
|
|
||||||
i=0
|
|
||||||
while [ "$i" -lt "$n" ]
|
|
||||||
do
|
|
||||||
lockFile="$lockDir/$host:$i"
|
|
||||||
if lockfile -r0 "$lockFile" 2>/dev/null; then
|
|
||||||
# Set colour
|
|
||||||
colour=${colours[$colourIndex]}
|
|
||||||
#echo "** host=$host colourIndex=$colourIndex colour=$colour"
|
|
||||||
|
|
||||||
if [ "$host" = "$HOST" ]; then
|
|
||||||
if [ "$colour" ]; then
|
|
||||||
eval $* 2>&1 | colourPipe $colour
|
|
||||||
else
|
|
||||||
eval $*
|
|
||||||
fi
|
|
||||||
elif [ -n "$JOB_ID" ]; then
|
|
||||||
qrsh -inherit -v PWD $host "$rcmd"
|
|
||||||
else
|
|
||||||
if [ "$colour" ]; then
|
|
||||||
ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1 | colourPipe $colour
|
|
||||||
else
|
|
||||||
ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
retval=$?
|
|
||||||
|
|
||||||
# Release lock
|
|
||||||
rm -f "$lockFile" 2>/dev/null
|
|
||||||
exit $retval
|
|
||||||
fi
|
|
||||||
i=$(expr $i + 1)
|
|
||||||
|
|
||||||
# Cycle through colours
|
|
||||||
colourIndex=$(expr $colourIndex + 1)
|
|
||||||
if (( $colourIndex >= $nColours )); then
|
|
||||||
colourIndex=0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$WM_COLOURS" ]; then
|
|
||||||
setterm -foreground default
|
|
||||||
fi
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
@ -37,7 +37,8 @@
|
|||||||
# Sources the relevant cshrc/bashrc if not set.
|
# Sources the relevant cshrc/bashrc if not set.
|
||||||
#
|
#
|
||||||
# WM_PROJECT_DIR, WM_PROJECT and WM_PROJECT_VERSION will have been set
|
# WM_PROJECT_DIR, WM_PROJECT and WM_PROJECT_VERSION will have been set
|
||||||
# before calling this routine
|
# before calling this routine.
|
||||||
|
# FOAM_INST_DIR may possibly have been set (to find installation)
|
||||||
#
|
#
|
||||||
# Usage
|
# Usage
|
||||||
# wmakeScheduler COMMAND
|
# wmakeScheduler COMMAND
|
||||||
@ -45,7 +46,7 @@
|
|||||||
#
|
#
|
||||||
# wmakeScheduler -count
|
# wmakeScheduler -count
|
||||||
# count the total number of slots available in WM_HOSTS
|
# count the total number of slots available in WM_HOSTS
|
||||||
# eg, WM_NCOMPPROCS=$(wmakeScheduler -count)
|
# eg, export WM_NCOMPPROCS=$(wmakeScheduler -count)
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
lockDir=$HOME/.wmakeScheduler
|
lockDir=$HOME/.wmakeScheduler
|
||||||
@ -81,21 +82,15 @@ case $SHELL in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# check ~/.$WM_PROJECT-$WM_PROJECT_VERSION/
|
|
||||||
# check ~/.$WM_PROJECT/$WM_PROJECT_VERSION/
|
# check ~/.$WM_PROJECT/$WM_PROJECT_VERSION/
|
||||||
# check ~/.$WM_PROJECT/
|
# check ~/.$WM_PROJECT/
|
||||||
# check <installedProject>/etc/
|
# check <installedProject>/etc/
|
||||||
# check <installedProject/.$WM_PROJECT-$WM_PROJECT_VERSION/
|
|
||||||
if [ "$WM_PROJECT" ]; then
|
if [ "$WM_PROJECT" ]; then
|
||||||
|
|
||||||
: ${FOAM_DOT_DIR:=.$WM_PROJECT-$WM_PROJECT_VERSION}
|
|
||||||
|
|
||||||
for i in \
|
for i in \
|
||||||
$HOME/$FOAM_DOT_DIR \
|
|
||||||
$HOME/.$WM_PROJECT/$WM_PROJECT_VERSION \
|
$HOME/.$WM_PROJECT/$WM_PROJECT_VERSION \
|
||||||
$HOME/.$WM_PROJECT \
|
$HOME/.$WM_PROJECT \
|
||||||
$WM_PROJECT_DIR/etc \
|
$WM_PROJECT_DIR/etc \
|
||||||
$WM_PROJECT_DIR/$FOAM_DOT_DIR \
|
|
||||||
;
|
;
|
||||||
do
|
do
|
||||||
if [ -f "$i/$shellRc" ]; then
|
if [ -f "$i/$shellRc" ]; then
|
||||||
@ -203,7 +198,7 @@ do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
# Not found any free slots. Rest a bit.
|
# Did not find any free slots. Rest a bit.
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user