mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'master' of ssh://noisy/home/noisy3/OpenFOAM/OpenFOAM-dev
This commit is contained in:
@ -278,3 +278,7 @@
|
|||||||
+ multipleBoxes, hotBoxes, panel, evaporationTest
|
+ multipleBoxes, hotBoxes, panel, evaporationTest
|
||||||
+ =interDyMFoam= tutorials:
|
+ =interDyMFoam= tutorials:
|
||||||
+ testTubeMixer: showcases =solidBodyMotionFunction=
|
+ testTubeMixer: showcases =solidBodyMotionFunction=
|
||||||
|
|
||||||
|
* Other
|
||||||
|
+ compilable with =clang=
|
||||||
|
In your prefs.sh set the WM_COMPILER to Clang
|
||||||
|
|||||||
@ -44,7 +44,7 @@ Description
|
|||||||
|
|
||||||
Note:
|
Note:
|
||||||
Only the pair h, Ta or q can be specified in the dictionary.
|
Only the pair h, Ta or q can be specified in the dictionary.
|
||||||
|
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
externalWallHeatFluxTemperatureFvPatchScalarField.C
|
externalWallHeatFluxTemperatureFvPatchScalarField.C
|
||||||
|
|||||||
@ -172,7 +172,7 @@
|
|||||||
i,
|
i,
|
||||||
radiation::radiationModel::New(thermoFluid[i].T())
|
radiation::radiationModel::New(thermoFluid[i].T())
|
||||||
);
|
);
|
||||||
|
|
||||||
initialMassFluid[i] = fvc::domainIntegrate(rhoFluid[i]).value();
|
initialMassFluid[i] = fvc::domainIntegrate(rhoFluid[i]).value();
|
||||||
|
|
||||||
Info<< " Adding to DpDtFluid\n" << endl;
|
Info<< " Adding to DpDtFluid\n" << endl;
|
||||||
|
|||||||
@ -13,9 +13,9 @@
|
|||||||
hEqn.solve(mesh.solver(h.select(finalIter)));
|
hEqn.solve(mesh.solver(h.select(finalIter)));
|
||||||
|
|
||||||
thermo.correct();
|
thermo.correct();
|
||||||
|
|
||||||
rad.correct();
|
rad.correct();
|
||||||
|
|
||||||
Info<< "Min/max T:" << min(thermo.T()).value() << ' '
|
Info<< "Min/max T:" << min(thermo.T()).value() << ' '
|
||||||
<< max(thermo.T()).value() << endl;
|
<< max(thermo.T()).value() << endl;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
const surfaceScalarField& ghf = ghfFluid[i];
|
const surfaceScalarField& ghf = ghfFluid[i];
|
||||||
|
|
||||||
radiation::radiationModel& rad = radiation[i];
|
radiation::radiationModel& rad = radiation[i];
|
||||||
|
|
||||||
const dimensionedScalar initialMass
|
const dimensionedScalar initialMass
|
||||||
(
|
(
|
||||||
"initialMass",
|
"initialMass",
|
||||||
|
|||||||
3
applications/test/codeStream/Make/files
Normal file
3
applications/test/codeStream/Make/files
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Test-codeStream.C
|
||||||
|
|
||||||
|
EXE = $(FOAM_USER_APPBIN)/Test-codeStream
|
||||||
1
applications/test/codeStream/Make/options
Normal file
1
applications/test/codeStream/Make/options
Normal file
@ -0,0 +1 @@
|
|||||||
|
EXE_INC =
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -21,60 +21,55 @@ License
|
|||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Namespace
|
Application
|
||||||
Foam::functionEntries::calcEntryInternal
|
Test-codeStream
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Contains global functions and classes for the calcEntry.
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
calcEntryInternal.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef calcEntryInternal_H
|
#include "argList.H"
|
||||||
#define calcEntryInternal_H
|
#include "IOstreams.H"
|
||||||
|
#include "IOobject.H"
|
||||||
|
#include "IFstream.H"
|
||||||
|
#include "dictionary.H"
|
||||||
|
|
||||||
#include "error.H"
|
using namespace Foam;
|
||||||
#include "scalar.H"
|
|
||||||
#include "DynamicList.H"
|
|
||||||
#include "globalFunctionSelectionTables.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
// Main program:
|
||||||
|
|
||||||
namespace Foam
|
int main(int argc, char *argv[])
|
||||||
{
|
|
||||||
namespace functionEntries
|
|
||||||
{
|
|
||||||
namespace calcEntryInternal
|
|
||||||
{
|
{
|
||||||
|
argList::noParallel();
|
||||||
|
argList::validArgs.insert("dict .. dictN");
|
||||||
|
argList args(argc, argv, false, true);
|
||||||
|
|
||||||
// Global Function Selectors
|
Info<< nl
|
||||||
|
<< "FOAM_CASE=" << getEnv("FOAM_CASE") << nl
|
||||||
|
<< "FOAM_CASENAME=" << getEnv("FOAM_CASENAME") << nl
|
||||||
|
<< endl;
|
||||||
|
|
||||||
declareGlobalFunctionSelectionTable
|
if (args.size() <= 1)
|
||||||
(
|
{
|
||||||
scalar,
|
Info<<"specify dictionaries to test\n";
|
||||||
dispatch,
|
}
|
||||||
ParamList,
|
else
|
||||||
(
|
{
|
||||||
const UList<scalar>& param
|
IOobject::writeDivider(Info);
|
||||||
),
|
for (label argI=1; argI < args.size(); ++argI)
|
||||||
(param)
|
{
|
||||||
);
|
const string& dictFile = args[argI];
|
||||||
|
IFstream is(dictFile);
|
||||||
|
|
||||||
|
dictionary dict(is);
|
||||||
|
|
||||||
//- Dispatch calculation to the named function
|
Info<< dict << endl;
|
||||||
scalar dispatch(const word&, const UList<scalar>&);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace calcEntryInternal
|
|
||||||
} // End namespace functionEntries
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
43
applications/test/codeStream/codeStreamDict1
Normal file
43
applications/test/codeStream/codeStreamDict1
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: Any |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object testDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// #include "codeStreamDefaults"
|
||||||
|
|
||||||
|
writeInterval #codeStream
|
||||||
|
{
|
||||||
|
codeInclude
|
||||||
|
#{
|
||||||
|
#include "fvCFD.H"
|
||||||
|
#};
|
||||||
|
|
||||||
|
codeOptions
|
||||||
|
#{
|
||||||
|
-I$(LIB_SRC)/finiteVolume/lnInclude
|
||||||
|
#};
|
||||||
|
|
||||||
|
code
|
||||||
|
#{
|
||||||
|
scalar start = 0;
|
||||||
|
scalar end = 100;
|
||||||
|
label nDumps = 5;
|
||||||
|
label interval = end - start;
|
||||||
|
Info<<"on-the-fly: " << ((interval)/nDumps) << endl;
|
||||||
|
os << ((interval)/nDumps);
|
||||||
|
#};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -26,6 +26,7 @@ Description
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "string.H"
|
#include "string.H"
|
||||||
|
#include "stringOps.H"
|
||||||
#include "IOstreams.H"
|
#include "IOstreams.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
@ -35,11 +36,19 @@ using namespace Foam;
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
string test("$HOME kjhkjhkjh \" \\$HOME/tyetyery ${FOAM_RUN} \n ; hkjh ;$");
|
string test
|
||||||
|
(
|
||||||
|
" $HOME kjhkjhkjh \" \\$HOME/tyetyery ${FOAM_RUN} \n ; hkjh ;$ "
|
||||||
|
);
|
||||||
|
|
||||||
Info<< "string:" << test << nl << "hash:"
|
Info<< "string:" << test << nl << "hash:"
|
||||||
<< unsigned(string::hash()(test)) << endl;
|
<< unsigned(string::hash()(test)) << endl;
|
||||||
|
|
||||||
|
Info<<"trimLeft: " << stringOps::trimLeft(test) << endl;
|
||||||
|
Info<<"trimRight: " << stringOps::trimRight(test) << endl;
|
||||||
|
Info<<"trim: " << stringOps::trim(test) << endl;
|
||||||
|
|
||||||
|
|
||||||
// test sub-strings via iterators
|
// test sub-strings via iterators
|
||||||
string::const_iterator iter = test.end();
|
string::const_iterator iter = test.end();
|
||||||
string::const_iterator iter2 = test.end();
|
string::const_iterator iter2 = test.end();
|
||||||
|
|||||||
@ -499,7 +499,7 @@ int main(int argc, char *argv[])
|
|||||||
// Layers per point
|
// Layers per point
|
||||||
labelList nPointLayers(extrudePatch.nPoints(), model().nLayers());
|
labelList nPointLayers(extrudePatch.nPoints(), model().nLayers());
|
||||||
// Displacement for first layer
|
// Displacement for first layer
|
||||||
vectorField firstLayerDisp = displacement*model().sumThickness(1);
|
vectorField firstLayerDisp(displacement*model().sumThickness(1));
|
||||||
|
|
||||||
// Expansion ratio not used.
|
// Expansion ratio not used.
|
||||||
scalarField ratio(extrudePatch.nPoints(), 1.0);
|
scalarField ratio(extrudePatch.nPoints(), 1.0);
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -45,6 +45,7 @@ Description
|
|||||||
#include "IOPtrList.H"
|
#include "IOPtrList.H"
|
||||||
#include "polyTopoChange.H"
|
#include "polyTopoChange.H"
|
||||||
#include "polyModifyFace.H"
|
#include "polyModifyFace.H"
|
||||||
|
#include "wordReList.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
|
|
||||||
@ -669,7 +670,13 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (sourceType == "patches")
|
if (sourceType == "patches")
|
||||||
{
|
{
|
||||||
labelHashSet patchSources(patches.patchSet(dict.lookup("patches")));
|
labelHashSet patchSources
|
||||||
|
(
|
||||||
|
patches.patchSet
|
||||||
|
(
|
||||||
|
wordReList(dict.lookup("patches"))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
// Repatch faces of the patches.
|
// Repatch faces of the patches.
|
||||||
forAllConstIter(labelHashSet, patchSources, iter)
|
forAllConstIter(labelHashSet, patchSources, iter)
|
||||||
|
|||||||
@ -18,7 +18,6 @@ LINK_DIRECTORIES(
|
|||||||
)
|
)
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(
|
INCLUDE_DIRECTORIES(
|
||||||
$ENV{WM_PROJECT_DIR}/src/OSspecific/$ENV{WM_OSTYPE}
|
|
||||||
$ENV{WM_PROJECT_DIR}/src/OpenFOAM/lnInclude
|
$ENV{WM_PROJECT_DIR}/src/OpenFOAM/lnInclude
|
||||||
$ENV{WM_PROJECT_DIR}/src/finiteVolume/lnInclude
|
$ENV{WM_PROJECT_DIR}/src/finiteVolume/lnInclude
|
||||||
${PROJECT_SOURCE_DIR}/../vtkPV3Foam
|
${PROJECT_SOURCE_DIR}/../vtkPV3Foam
|
||||||
|
|||||||
@ -60,6 +60,8 @@ Usage
|
|||||||
\param -literalRE \n
|
\param -literalRE \n
|
||||||
Do not interpret regular expressions; treat them as any other keyword.
|
Do not interpret regular expressions; treat them as any other keyword.
|
||||||
|
|
||||||
|
\param -enableFunctionEntries \n
|
||||||
|
By default all dictionary preprocessing of fields is disabled
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -255,6 +257,11 @@ int main(int argc, char *argv[])
|
|||||||
"literalRE",
|
"literalRE",
|
||||||
"treat regular expressions literally (ie, as a keyword)"
|
"treat regular expressions literally (ie, as a keyword)"
|
||||||
);
|
);
|
||||||
|
argList::addBoolOption
|
||||||
|
(
|
||||||
|
"enableFunctionEntries",
|
||||||
|
"enable expansion of dictionary directives - #include, #codeStream etc"
|
||||||
|
);
|
||||||
#include "addRegionOption.H"
|
#include "addRegionOption.H"
|
||||||
|
|
||||||
#include "setRootCase.H"
|
#include "setRootCase.H"
|
||||||
@ -271,6 +278,20 @@ int main(int argc, char *argv[])
|
|||||||
<< " not present." << endl;
|
<< " not present." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool enableEntries = args.optionFound("enableFunctionEntries");
|
||||||
|
if (enableEntries)
|
||||||
|
{
|
||||||
|
Info<< "Allowing dictionary preprocessing ('#include', '#codeStream')."
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
int oldFlag = entry::disableFunctionEntries;
|
||||||
|
if (!enableEntries)
|
||||||
|
{
|
||||||
|
// By default disable dictionary expansion for fields
|
||||||
|
entry::disableFunctionEntries = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fileName regionPrefix = "";
|
fileName regionPrefix = "";
|
||||||
if (regionName != fvMesh::defaultRegion)
|
if (regionName != fvMesh::defaultRegion)
|
||||||
@ -410,6 +431,7 @@ int main(int argc, char *argv[])
|
|||||||
false
|
false
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
const_cast<word&>(IOdictionary::typeName) = oldTypeName;
|
const_cast<word&>(IOdictionary::typeName) = oldTypeName;
|
||||||
// Fake type back to what was in field
|
// Fake type back to what was in field
|
||||||
const_cast<word&>(fieldDict.type()) = fieldDict.headerClassName();
|
const_cast<word&>(fieldDict.type()) = fieldDict.headerClassName();
|
||||||
@ -429,6 +451,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
entry::disableFunctionEntries = oldFlag;
|
||||||
|
|
||||||
Info<< endl;
|
Info<< endl;
|
||||||
|
|
||||||
Info<< "End\n" << endl;
|
Info<< "End\n" << endl;
|
||||||
|
|||||||
@ -34,6 +34,9 @@ Usage
|
|||||||
\param -test \n
|
\param -test \n
|
||||||
Suppress writing the updated files with split cyclics
|
Suppress writing the updated files with split cyclics
|
||||||
|
|
||||||
|
\param -enableFunctionEntries \n
|
||||||
|
By default all dictionary preprocessing of fields is disabled
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "argList.H"
|
#include "argList.H"
|
||||||
@ -391,7 +394,12 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
timeSelector::addOptions();
|
timeSelector::addOptions();
|
||||||
|
|
||||||
argList::addBoolOption("test");
|
argList::addBoolOption("test", "test only; do not change any files");
|
||||||
|
argList::addBoolOption
|
||||||
|
(
|
||||||
|
"enableFunctionEntries",
|
||||||
|
"enable expansion of dictionary directives - #include, #codeStream etc"
|
||||||
|
);
|
||||||
# include "addRegionOption.H"
|
# include "addRegionOption.H"
|
||||||
|
|
||||||
# include "setRootCase.H"
|
# include "setRootCase.H"
|
||||||
@ -404,6 +412,7 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
Info<< "-test option: no changes made" << nl << endl;
|
Info<< "-test option: no changes made" << nl << endl;
|
||||||
}
|
}
|
||||||
|
const bool enableEntries = args.optionFound("enableFunctionEntries");
|
||||||
|
|
||||||
|
|
||||||
Foam::word regionName = polyMesh::defaultRegion;
|
Foam::word regionName = polyMesh::defaultRegion;
|
||||||
@ -482,6 +491,13 @@ int main(int argc, char *argv[])
|
|||||||
IOobjectList objects(runTime, runTime.timeName());
|
IOobjectList objects(runTime, runTime.timeName());
|
||||||
|
|
||||||
|
|
||||||
|
int oldFlag = entry::disableFunctionEntries;
|
||||||
|
if (!enableEntries)
|
||||||
|
{
|
||||||
|
// By default disable dictionary expansion for fields
|
||||||
|
entry::disableFunctionEntries = 1;
|
||||||
|
}
|
||||||
|
|
||||||
// volFields
|
// volFields
|
||||||
// ~~~~~~~~~
|
// ~~~~~~~~~
|
||||||
|
|
||||||
@ -615,6 +631,8 @@ int main(int argc, char *argv[])
|
|||||||
thisNames,
|
thisNames,
|
||||||
nbrNames
|
nbrNames
|
||||||
);
|
);
|
||||||
|
|
||||||
|
entry::disableFunctionEntries = oldFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -13,4 +13,3 @@ EXE_LIBS = \
|
|||||||
-ltriSurface \
|
-ltriSurface \
|
||||||
-ldistributed \
|
-ldistributed \
|
||||||
-lradiationModels
|
-lradiationModels
|
||||||
|
|
||||||
|
|||||||
@ -34,9 +34,11 @@
|
|||||||
# - elements whose start matches a wildcard
|
# - elements whose start matches a wildcard
|
||||||
# - inaccessible directories (with the -strip (at your option)
|
# - inaccessible directories (with the -strip (at your option)
|
||||||
#
|
#
|
||||||
# Note:
|
# Note
|
||||||
# - this routine will fail when directories have embedded spaces
|
# - this routine will fail when directories have embedded spaces
|
||||||
# - false matches possible if a wildcard contains '.' (sed regex)
|
# - false matches possible if a wildcard contains '.' (sed regex)
|
||||||
|
# - the wildcards can themselves can be written together and separated
|
||||||
|
# by colons or whitespace
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
usage() {
|
usage() {
|
||||||
cat <<USAGE 1>&2
|
cat <<USAGE 1>&2
|
||||||
@ -81,11 +83,12 @@ shift
|
|||||||
|
|
||||||
##DEBUG echo "input>$dirList<" 1>&2
|
##DEBUG echo "input>$dirList<" 1>&2
|
||||||
|
|
||||||
# preserve current IFS and split on whitespace
|
# preserve current IFS and split on colon or whitespace
|
||||||
oldIFS="$IFS"
|
oldIFS="$IFS"
|
||||||
IFS=' '
|
IFS=': '
|
||||||
|
|
||||||
# "wildcard1 ... wildcardN" may have been passed as a single parameter
|
# "wildcard1 ... wildcardN" may have been passed as a single parameter
|
||||||
|
# or may contain ':' separators
|
||||||
set -- $*
|
set -- $*
|
||||||
|
|
||||||
# strip out wildcards via sed
|
# strip out wildcards via sed
|
||||||
@ -94,7 +97,10 @@ do
|
|||||||
wildcard=$1
|
wildcard=$1
|
||||||
shift
|
shift
|
||||||
##DEBUG echo "remove>$wildcard<" 1>&2
|
##DEBUG echo "remove>$wildcard<" 1>&2
|
||||||
dirList=$(echo "$dirList:" | sed -e "s@${wildcard}[^:]*:@@g")
|
if [ -n "$wildcard" ]
|
||||||
|
then
|
||||||
|
dirList=$(echo "$dirList:" | sed -e "s@${wildcard}[^:]*:@@g")
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# split on ':' (and on space as well to avoid any surprises)
|
# split on ':' (and on space as well to avoid any surprises)
|
||||||
|
|||||||
@ -32,7 +32,7 @@
|
|||||||
# Not normally called directly by the user
|
# Not normally called directly by the user
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
tmpFile=${TMPDIR:-/tmp}/foamPackFiles.$$
|
tmpFile=${TMPDIR:-/tmp}/foamPackFiles.$$
|
||||||
toolsDir="${0%/*}" # this script is already located in the tools/ directory
|
toolsDir="${0%/*}/tools" # this script is located in the tools/ parent dir
|
||||||
|
|
||||||
[ $# -eq 2 ] || {
|
[ $# -eq 2 ] || {
|
||||||
cat <<USAGE 1>&2
|
cat <<USAGE 1>&2
|
||||||
|
|||||||
@ -30,15 +30,14 @@
|
|||||||
|
|
||||||
#cleanTimeDirectories()
|
#cleanTimeDirectories()
|
||||||
#{
|
#{
|
||||||
# echo "Cleaning $case case of $application application"
|
# echo "Cleaning $PWD case"
|
||||||
# TIME_DIRS=`foamInfoExec . $1 -times | sed '1,/constant/d'`
|
# for time in $(foamInfoExec -times)
|
||||||
# for T in $TIME_DIRS
|
|
||||||
# do
|
# do
|
||||||
# if [ $T != "0" ]
|
# # keep 0 and constant directories
|
||||||
# then
|
# [ "$time" = "0" -o "$time" = constant ] || {
|
||||||
# echo "Deleting directory $T"
|
# echo "Deleting directory $time"
|
||||||
# rm -rf ${T} > /dev/null 2>&1
|
# rm -rf $time > /dev/null 2>&1
|
||||||
# fi
|
# }
|
||||||
# done
|
# done
|
||||||
# rm -rf {log,log.*,log-*,logSummary.*,.fxLock,*.xml,ParaView*,paraFoam*,*.OpenFOAM} > /dev/null 2>&1
|
# rm -rf {log,log.*,log-*,logSummary.*,.fxLock,*.xml,ParaView*,paraFoam*,*.OpenFOAM} > /dev/null 2>&1
|
||||||
#}
|
#}
|
||||||
@ -56,15 +55,32 @@ cleanTimeDirectories()
|
|||||||
rm -rf ./[1-9]* ./-[1-9]* ./log ./log.* ./log-* ./logSummary.* ./.fxLock ./*.xml ./ParaView* ./paraFoam* ./*.OpenFOAM > /dev/null 2>&1
|
rm -rf ./[1-9]* ./-[1-9]* ./log ./log.* ./log-* ./logSummary.* ./.fxLock ./*.xml ./ParaView* ./paraFoam* ./*.OpenFOAM > /dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Remove codeStream subdirectory if it looks appropriate
|
||||||
|
#
|
||||||
|
cleanCodeStream()
|
||||||
|
{
|
||||||
|
if [ -d system -a -d codeStream ]
|
||||||
|
then
|
||||||
|
rm -rf codeStream > /dev/null 2>&1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
cleanCase()
|
cleanCase()
|
||||||
{
|
{
|
||||||
cleanTimeDirectories
|
cleanTimeDirectories
|
||||||
|
cleanCodeStream
|
||||||
|
|
||||||
rm -rf processor* > /dev/null 2>&1
|
rm -rf processor* > /dev/null 2>&1
|
||||||
rm -rf probes* > /dev/null 2>&1
|
rm -rf probes* > /dev/null 2>&1
|
||||||
rm -rf forces* > /dev/null 2>&1
|
rm -rf forces* > /dev/null 2>&1
|
||||||
rm -rf sets > /dev/null 2>&1
|
rm -rf sets > /dev/null 2>&1
|
||||||
rm -rf system/machines > /dev/null 2>&1
|
rm -rf system/machines > /dev/null 2>&1
|
||||||
if [ -d "constant/polyMesh" ]; then
|
|
||||||
|
if [ -d constant/polyMesh ]
|
||||||
|
then
|
||||||
(cd constant/polyMesh && \
|
(cd constant/polyMesh && \
|
||||||
rm -rf \
|
rm -rf \
|
||||||
allOwner* cell* face* meshModifiers* \
|
allOwner* cell* face* meshModifiers* \
|
||||||
@ -94,7 +110,7 @@ cleanCase()
|
|||||||
|
|
||||||
removeCase()
|
removeCase()
|
||||||
{
|
{
|
||||||
echo "Removing $case case"
|
echo "Removing ${1:-unknown} case"
|
||||||
rm -rf $1
|
rm -rf $1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -47,7 +47,7 @@
|
|||||||
=code=, =codeInclude=, =codeOptions= sections (these are just strings) and
|
=code=, =codeInclude=, =codeOptions= sections (these are just strings) and
|
||||||
calculates the SHA1 checksum of the contents.
|
calculates the SHA1 checksum of the contents.
|
||||||
- it copies a template file
|
- it copies a template file
|
||||||
=($FOAM_CODESTREAM_TEMPLATE_DIR/codeStreamTemplate.C)=, substituting all
|
=($FOAM_CODESTREAM_TEMPLATES/codeStreamTemplate.C)=, substituting all
|
||||||
occurences of =code=, =codeInclude=, =codeOptions=.
|
occurences of =code=, =codeInclude=, =codeOptions=.
|
||||||
- it writes library source files to =constant/codeStream/<sha1>= and compiles
|
- it writes library source files to =constant/codeStream/<sha1>= and compiles
|
||||||
it using =wmake libso=.
|
it using =wmake libso=.
|
||||||
@ -76,6 +76,21 @@
|
|||||||
It by default always includes =fvCFD.H= and adds the =finiteVolume= library to
|
It by default always includes =fvCFD.H= and adds the =finiteVolume= library to
|
||||||
the include search path.
|
the include search path.
|
||||||
|
|
||||||
|
A special form is where the code is not supplied in-line but instead comes
|
||||||
|
from the =codeDict= dictionary in the =system= directory. It should contain
|
||||||
|
a =fixedValue10= entry:
|
||||||
|
#+BEGIN_SRC c++
|
||||||
|
fixedValue10
|
||||||
|
{
|
||||||
|
code
|
||||||
|
#{
|
||||||
|
operator==(min(10, 0.1*this->db().time().value()));
|
||||||
|
#};
|
||||||
|
}
|
||||||
|
#+END_SRC
|
||||||
|
The advantage of using this indirect way is that it supports
|
||||||
|
runTimeModifiable so any change of the code will be picked up next iteration.
|
||||||
|
|
||||||
* Security
|
* Security
|
||||||
Allowing the case to execute C++ code does introduce security risks. A
|
Allowing the case to execute C++ code does introduce security risks. A
|
||||||
third-party case might have a =#codeStream{#code system("rm -rf .");};= hidden
|
third-party case might have a =#codeStream{#code system("rm -rf .");};= hidden
|
||||||
@ -121,7 +136,8 @@
|
|||||||
- =foamFormatConvert=
|
- =foamFormatConvert=
|
||||||
- =changeDictionaryDict=
|
- =changeDictionaryDict=
|
||||||
- =foamUpgradeCyclics=
|
- =foamUpgradeCyclics=
|
||||||
- =fieldToCell=
|
These applications will usually switch off all '#' processing.
|
||||||
|
|
||||||
|
|
||||||
Note: above field initialisation has the problem that the boundary conditions
|
Note: above field initialisation has the problem that the boundary conditions
|
||||||
are not evaluated so e.g. processor boundaries will not hold the opposite cell
|
are not evaluated so e.g. processor boundaries will not hold the opposite cell
|
||||||
|
|||||||
@ -21,9 +21,18 @@ License
|
|||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Description
|
||||||
|
Template for use with codeStream.
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "dictionary.H"
|
||||||
|
#include "Ostream.H"
|
||||||
|
#include "Pstream.H"
|
||||||
|
|
||||||
|
//{{{ begin codeInclude
|
||||||
${codeInclude}
|
${codeInclude}
|
||||||
|
//}}} end codeInclude
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
|
|
||||||
@ -39,7 +48,9 @@ void ${typeName}
|
|||||||
Ostream& os
|
Ostream& os
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
//{{{ begin code
|
||||||
${code};
|
${code};
|
||||||
|
//}}} end code
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 20101-2011 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
## Specify system compiler
|
## Specify system compiler
|
||||||
## ~~~~~~~~~~~~~~~~~~~~~~~
|
## ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
#set foamCompiler=system
|
#set foamCompiler=OpenFOAM
|
||||||
|
|
||||||
## Specify system openmpi
|
## Specify system openmpi
|
||||||
## ~~~~~~~~~~~~~~~~~~~~~~
|
## ~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
# Specify system compiler
|
# Specify system compiler
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
foamCompiler=system
|
foamCompiler=OpenFOAM
|
||||||
|
|
||||||
# Specify system openmpi
|
# Specify system openmpi
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|||||||
@ -102,7 +102,7 @@ Foam::string Foam::getEnv(const word& envName)
|
|||||||
bool Foam::setEnv
|
bool Foam::setEnv
|
||||||
(
|
(
|
||||||
const word& envName,
|
const word& envName,
|
||||||
const string& value,
|
const std::string& value,
|
||||||
const bool overwrite
|
const bool overwrite
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -1066,7 +1066,7 @@ bool Foam::ping(const word& hostname, const label timeOut)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int Foam::system(const string& command)
|
int Foam::system(const std::string& command)
|
||||||
{
|
{
|
||||||
return ::system(command.c_str());
|
return ::system(command.c_str());
|
||||||
}
|
}
|
||||||
@ -1084,14 +1084,14 @@ bool Foam::dlClose(void* handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void* Foam::dlSym(void* handle, const string& symbol)
|
void* Foam::dlSym(void* handle, const std::string& symbol)
|
||||||
{
|
{
|
||||||
void* fun = dlsym(handle, symbol.c_str());
|
void* fun = dlsym(handle, symbol.c_str());
|
||||||
|
|
||||||
char *error;
|
char *error;
|
||||||
if ((error = dlerror()) != NULL)
|
if ((error = dlerror()) != NULL)
|
||||||
{
|
{
|
||||||
WarningIn("dlSym(void*, const string&)")
|
WarningIn("dlSym(void*, const std::string&)")
|
||||||
<< "Cannot lookup symbol " << symbol << " : " << error
|
<< "Cannot lookup symbol " << symbol << " : " << error
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -78,6 +78,7 @@ $(strings)/fileName/fileNameIO.C
|
|||||||
$(strings)/keyType/keyType.C
|
$(strings)/keyType/keyType.C
|
||||||
$(strings)/wordRe/wordRe.C
|
$(strings)/wordRe/wordRe.C
|
||||||
$(strings)/lists/hashedWordList.C
|
$(strings)/lists/hashedWordList.C
|
||||||
|
$(strings)/stringOps/stringOps.C
|
||||||
|
|
||||||
primitives/hashes/Hasher/Hasher.C
|
primitives/hashes/Hasher/Hasher.C
|
||||||
|
|
||||||
@ -160,24 +161,12 @@ $(dictionaryEntry)/dictionaryEntryIO.C
|
|||||||
|
|
||||||
functionEntries = $(dictionary)/functionEntries
|
functionEntries = $(dictionary)/functionEntries
|
||||||
$(functionEntries)/codeStream/codeStream.C
|
$(functionEntries)/codeStream/codeStream.C
|
||||||
$(functionEntries)/codeStream/codeStreamTools.C
|
|
||||||
$(functionEntries)/functionEntry/functionEntry.C
|
$(functionEntries)/functionEntry/functionEntry.C
|
||||||
$(functionEntries)/includeEntry/includeEntry.C
|
$(functionEntries)/includeEntry/includeEntry.C
|
||||||
$(functionEntries)/includeIfPresentEntry/includeIfPresentEntry.C
|
$(functionEntries)/includeIfPresentEntry/includeIfPresentEntry.C
|
||||||
$(functionEntries)/inputModeEntry/inputModeEntry.C
|
$(functionEntries)/inputModeEntry/inputModeEntry.C
|
||||||
$(functionEntries)/removeEntry/removeEntry.C
|
$(functionEntries)/removeEntry/removeEntry.C
|
||||||
|
|
||||||
/*
|
|
||||||
* Requires customized coco-cpp
|
|
||||||
* could be dropped or activated in the future
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
calcEntry = $(functionEntries)/calcEntry
|
|
||||||
$(calcEntry)/calcEntryParser.atg
|
|
||||||
$(calcEntry)/calcEntryInternal.C
|
|
||||||
$(calcEntry)/calcEntry.C
|
|
||||||
*/
|
|
||||||
|
|
||||||
IOdictionary = db/IOobjects/IOdictionary
|
IOdictionary = db/IOobjects/IOdictionary
|
||||||
$(IOdictionary)/IOdictionary.C
|
$(IOdictionary)/IOdictionary.C
|
||||||
$(IOdictionary)/IOdictionaryIO.C
|
$(IOdictionary)/IOdictionaryIO.C
|
||||||
@ -198,7 +187,10 @@ $(regIOobject)/regIOobjectWrite.C
|
|||||||
db/IOobjectList/IOobjectList.C
|
db/IOobjectList/IOobjectList.C
|
||||||
db/objectRegistry/objectRegistry.C
|
db/objectRegistry/objectRegistry.C
|
||||||
db/CallbackRegistry/CallbackRegistryName.C
|
db/CallbackRegistry/CallbackRegistryName.C
|
||||||
db/dlLibraryTable/dlLibraryTable.C
|
|
||||||
|
dll = db/dynamicLibrary
|
||||||
|
$(dll)/codeStream/codeStreamTools.C
|
||||||
|
$(dll)/dlLibraryTable/dlLibraryTable.C
|
||||||
|
|
||||||
db/functionObjects/functionObject/functionObject.C
|
db/functionObjects/functionObject/functionObject.C
|
||||||
db/functionObjects/functionObjectList/functionObjectList.C
|
db/functionObjects/functionObjectList/functionObjectList.C
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -162,11 +162,16 @@ Foam::Istream& Foam::UIPstream::read(token& t)
|
|||||||
|
|
||||||
// String
|
// String
|
||||||
case token::STRING :
|
case token::STRING :
|
||||||
|
case token::VERBATIMSTRING :
|
||||||
{
|
{
|
||||||
string* pval = new string;
|
string* pval = new string;
|
||||||
if (read(*pval))
|
if (read(*pval))
|
||||||
{
|
{
|
||||||
t = pval;
|
t = pval;
|
||||||
|
if (c == token::VERBATIMSTRING)
|
||||||
|
{
|
||||||
|
t.type() = token::VERBATIMSTRING;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -203,7 +203,7 @@ Foam::Istream& Foam::ISstream::read(token& t)
|
|||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
// Verbatim string
|
// Possible verbatim string or dictionary functionEntry
|
||||||
case token::HASH :
|
case token::HASH :
|
||||||
{
|
{
|
||||||
char nextC;
|
char nextC;
|
||||||
@ -226,6 +226,7 @@ Foam::Istream& Foam::ISstream::read(token& t)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
t = sPtr;
|
t = sPtr;
|
||||||
|
t.type() = token::VERBATIMSTRING;
|
||||||
}
|
}
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
|
|||||||
@ -78,6 +78,7 @@ public:
|
|||||||
PUNCTUATION,
|
PUNCTUATION,
|
||||||
WORD,
|
WORD,
|
||||||
STRING,
|
STRING,
|
||||||
|
VERBATIMSTRING,
|
||||||
LABEL,
|
LABEL,
|
||||||
FLOAT_SCALAR,
|
FLOAT_SCALAR,
|
||||||
DOUBLE_SCALAR,
|
DOUBLE_SCALAR,
|
||||||
@ -318,6 +319,7 @@ public:
|
|||||||
// Access
|
// Access
|
||||||
|
|
||||||
inline tokenType type() const;
|
inline tokenType type() const;
|
||||||
|
inline tokenType& type();
|
||||||
|
|
||||||
inline bool good() const;
|
inline bool good() const;
|
||||||
inline bool undefined() const;
|
inline bool undefined() const;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -39,7 +39,7 @@ inline void token::clear()
|
|||||||
{
|
{
|
||||||
delete wordTokenPtr_;
|
delete wordTokenPtr_;
|
||||||
}
|
}
|
||||||
else if (type_ == STRING)
|
else if (type_ == STRING || type_ == VERBATIMSTRING)
|
||||||
{
|
{
|
||||||
delete stringTokenPtr_;
|
delete stringTokenPtr_;
|
||||||
}
|
}
|
||||||
@ -88,6 +88,7 @@ inline token::token(const token& t)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case STRING:
|
case STRING:
|
||||||
|
case VERBATIMSTRING:
|
||||||
stringTokenPtr_ = new string(*t.stringTokenPtr_);
|
stringTokenPtr_ = new string(*t.stringTokenPtr_);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -178,6 +179,11 @@ inline token::tokenType token::type() const
|
|||||||
return type_;
|
return type_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline token::tokenType& token::type()
|
||||||
|
{
|
||||||
|
return type_;
|
||||||
|
}
|
||||||
|
|
||||||
inline bool token::good() const
|
inline bool token::good() const
|
||||||
{
|
{
|
||||||
return (type_ != ERROR && type_ != UNDEFINED);
|
return (type_ != ERROR && type_ != UNDEFINED);
|
||||||
@ -231,12 +237,12 @@ inline const word& token::wordToken() const
|
|||||||
|
|
||||||
inline bool token::isString() const
|
inline bool token::isString() const
|
||||||
{
|
{
|
||||||
return (type_ == STRING);
|
return (type_ == STRING || type_ == VERBATIMSTRING);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const string& token::stringToken() const
|
inline const string& token::stringToken() const
|
||||||
{
|
{
|
||||||
if (type_ == STRING)
|
if (type_ == STRING || type_ == VERBATIMSTRING)
|
||||||
{
|
{
|
||||||
return *stringTokenPtr_;
|
return *stringTokenPtr_;
|
||||||
}
|
}
|
||||||
@ -405,6 +411,7 @@ inline void token::operator=(const token& t)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case STRING:
|
case STRING:
|
||||||
|
case VERBATIMSTRING:
|
||||||
stringTokenPtr_ = new string(*t.stringTokenPtr_);
|
stringTokenPtr_ = new string(*t.stringTokenPtr_);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -511,6 +518,7 @@ inline bool token::operator==(const token& t) const
|
|||||||
return *wordTokenPtr_ == *t.wordTokenPtr_;
|
return *wordTokenPtr_ == *t.wordTokenPtr_;
|
||||||
|
|
||||||
case STRING:
|
case STRING:
|
||||||
|
case VERBATIMSTRING:
|
||||||
return *stringTokenPtr_ == *t.stringTokenPtr_;
|
return *stringTokenPtr_ == *t.stringTokenPtr_;
|
||||||
|
|
||||||
case LABEL:
|
case LABEL:
|
||||||
@ -544,7 +552,7 @@ inline bool token::operator==(const word& w) const
|
|||||||
|
|
||||||
inline bool token::operator==(const string& s) const
|
inline bool token::operator==(const string& s) const
|
||||||
{
|
{
|
||||||
return (type_ == STRING && stringToken() == s);
|
return ((type_ == STRING || type_ == VERBATIMSTRING) && stringToken() == s);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool token::operator==(const label l) const
|
inline bool token::operator==(const label l) const
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -70,6 +70,7 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const token& t)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case token::STRING:
|
case token::STRING:
|
||||||
|
case token::VERBATIMSTRING:
|
||||||
os << *t.stringTokenPtr_;
|
os << *t.stringTokenPtr_;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -156,6 +157,10 @@ ostream& Foam::operator<<(ostream& os, const InfoProxy<token>& ip)
|
|||||||
os << " the string " << t.stringToken();
|
os << " the string " << t.stringToken();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case token::VERBATIMSTRING:
|
||||||
|
os << " the verbatim string " << t.stringToken();
|
||||||
|
break;
|
||||||
|
|
||||||
case token::LABEL:
|
case token::LABEL:
|
||||||
os << " the label " << t.labelToken();
|
os << " the label " << t.labelToken();
|
||||||
break;
|
break;
|
||||||
@ -226,6 +231,10 @@ Ostream& operator<<(Ostream& os, const InfoProxy<token>& ip)
|
|||||||
os << " the string " << t.stringToken();
|
os << " the string " << t.stringToken();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case token::VERBATIMSTRING:
|
||||||
|
os << " the verbatim string " << t.stringToken();
|
||||||
|
break;
|
||||||
|
|
||||||
case token::LABEL:
|
case token::LABEL:
|
||||||
os << " the label " << t.labelToken();
|
os << " the label " << t.labelToken();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -27,6 +27,14 @@ License
|
|||||||
#include "dictionary.H"
|
#include "dictionary.H"
|
||||||
#include "OStringStream.H"
|
#include "OStringStream.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
int Foam::entry::disableFunctionEntries
|
||||||
|
(
|
||||||
|
Foam::debug::infoSwitch("disableFunctionEntries", 0)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::entry::entry(const keyType& keyword)
|
Foam::entry::entry(const keyType& keyword)
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -81,6 +81,9 @@ class entry
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
static int disableFunctionEntries;
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from keyword
|
//- Construct from keyword
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -98,21 +98,32 @@ bool Foam::entry::New(dictionary& parentDict, Istream& is)
|
|||||||
}
|
}
|
||||||
else // Keyword starts entry ...
|
else // Keyword starts entry ...
|
||||||
{
|
{
|
||||||
if (keyword[0] == '#') // ... Function entry
|
if
|
||||||
|
(
|
||||||
|
!disableFunctionEntries
|
||||||
|
&& keyword[0] == '#'
|
||||||
|
) // ... Function entry
|
||||||
{
|
{
|
||||||
word functionName = keyword(1, keyword.size()-1);
|
word functionName = keyword(1, keyword.size()-1);
|
||||||
return functionEntry::execute(functionName, parentDict, is);
|
return functionEntry::execute(functionName, parentDict, is);
|
||||||
}
|
}
|
||||||
else if (keyword[0] == '$') // ... Substitution entry
|
else if
|
||||||
|
(
|
||||||
|
!disableFunctionEntries
|
||||||
|
&& keyword[0] == '$') // ... Substitution entry
|
||||||
{
|
{
|
||||||
parentDict.substituteKeyword(keyword);
|
parentDict.substituteKeyword(keyword);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (keyword == "include") // ... For backward compatibility
|
else if
|
||||||
|
(
|
||||||
|
!disableFunctionEntries
|
||||||
|
&& keyword == "include"
|
||||||
|
) // ... For backward compatibility
|
||||||
{
|
{
|
||||||
return functionEntries::includeEntry::execute(parentDict, is);
|
return functionEntries::includeEntry::execute(parentDict, is);
|
||||||
}
|
}
|
||||||
else // ... Data entries
|
else // ... Data entries
|
||||||
{
|
{
|
||||||
token nextToken(is);
|
token nextToken(is);
|
||||||
is.putBack(nextToken);
|
is.putBack(nextToken);
|
||||||
|
|||||||
@ -1,97 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 2009-2010 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 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "calcEntry.H"
|
|
||||||
#include "dictionary.H"
|
|
||||||
#include "addToMemberFunctionSelectionTable.H"
|
|
||||||
|
|
||||||
#include "ISstream.H"
|
|
||||||
#include "CocoParserErrors.H"
|
|
||||||
#include "calcEntryParser.h"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
namespace functionEntries
|
|
||||||
{
|
|
||||||
defineTypeNameAndDebug(calcEntry, 0);
|
|
||||||
|
|
||||||
addToMemberFunctionSelectionTable
|
|
||||||
(
|
|
||||||
functionEntry,
|
|
||||||
calcEntry,
|
|
||||||
execute,
|
|
||||||
primitiveEntryIstream
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
bool Foam::functionEntries::calcEntry::execute
|
|
||||||
(
|
|
||||||
const dictionary& parentDict,
|
|
||||||
primitiveEntry& entry,
|
|
||||||
Istream& is
|
|
||||||
)
|
|
||||||
{
|
|
||||||
std::istream& iss = dynamicCast<ISstream>(is).stdStream();
|
|
||||||
|
|
||||||
// define parser error handler
|
|
||||||
CocoParserErrors<calcEntryInternal::Errors>
|
|
||||||
myErrorHandler("calcEntryInternal::Parser");
|
|
||||||
|
|
||||||
calcEntryInternal::Scanner scanner(iss);
|
|
||||||
|
|
||||||
// set the starting line
|
|
||||||
scanner.Line(is.lineNumber());
|
|
||||||
|
|
||||||
calcEntryInternal::Parser parser(&scanner, &myErrorHandler);
|
|
||||||
|
|
||||||
// Attach dictionary context
|
|
||||||
parser.dict(parentDict);
|
|
||||||
|
|
||||||
parser.Parse();
|
|
||||||
|
|
||||||
// mostly have an extra newline in the lookahead token
|
|
||||||
// so subtract 1 to keep things vaguely in sync
|
|
||||||
// (this is still far from perfect)
|
|
||||||
is.lineNumber() = scanner.Line() - 1;
|
|
||||||
|
|
||||||
// a small input list to contain the answer
|
|
||||||
tokenList tokens(2);
|
|
||||||
tokens[0] = parser.Result();
|
|
||||||
tokens[1] = token::END_STATEMENT;
|
|
||||||
|
|
||||||
entry.read(parentDict, ITstream("ParserResult", tokens)());
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,91 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 2009-2010 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 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Class
|
|
||||||
Foam::functionEntries::calcEntry
|
|
||||||
|
|
||||||
Description
|
|
||||||
This dictionary function entry may or may not do anything particularly
|
|
||||||
useful - depending upon what is currently being used to test.
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
calcEntry.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef calcEntry_H
|
|
||||||
#define calcEntry_H
|
|
||||||
|
|
||||||
#include "functionEntry.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
namespace functionEntries
|
|
||||||
{
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Class calcEntry Declaration
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
class calcEntry
|
|
||||||
:
|
|
||||||
public functionEntry
|
|
||||||
{
|
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
//- Disallow default bitwise copy construct
|
|
||||||
calcEntry(const calcEntry&);
|
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
|
||||||
void operator=(const calcEntry&);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
//- Runtime type information
|
|
||||||
ClassName("calc");
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
|
||||||
|
|
||||||
static bool execute
|
|
||||||
(
|
|
||||||
const dictionary& parentDict,
|
|
||||||
primitiveEntry& entry,
|
|
||||||
Istream& is
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace functionEntries
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,128 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 2010-2010 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 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "calcEntryInternal.H"
|
|
||||||
#include "addToGlobalFunctionSelectionTable.H"
|
|
||||||
#include "unitConversion.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
namespace functionEntries
|
|
||||||
{
|
|
||||||
namespace calcEntryInternal
|
|
||||||
{
|
|
||||||
|
|
||||||
defineGlobalFunctionSelectionTable(dispatch,ParamList);
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#define globalConstant0(Name, Constant)\
|
|
||||||
scalar Name##_0(const UList<scalar>& param) \
|
|
||||||
{ \
|
|
||||||
return Constant; \
|
|
||||||
} \
|
|
||||||
addNamedToGlobalFunctionSelectionTable(dispatch,ParamList,Name##_0,&Name##_0)
|
|
||||||
|
|
||||||
|
|
||||||
#define globalFunction0(Name, Function)\
|
|
||||||
scalar Name##_0(const UList<scalar>& param) \
|
|
||||||
{ \
|
|
||||||
return Function(); \
|
|
||||||
} \
|
|
||||||
addNamedToGlobalFunctionSelectionTable(dispatch,ParamList,Name##_0,&Name##_0)
|
|
||||||
|
|
||||||
|
|
||||||
#define globalFunction1(Name, Function)\
|
|
||||||
scalar Name##_1(const UList<scalar>& param) \
|
|
||||||
{ \
|
|
||||||
return Function(param[0]); \
|
|
||||||
} \
|
|
||||||
addNamedToGlobalFunctionSelectionTable(dispatch,ParamList,Name##_1,&Name##_1)
|
|
||||||
|
|
||||||
|
|
||||||
#define globalFunction2(Name, Function)\
|
|
||||||
scalar Name##_2(const UList<scalar>& param) \
|
|
||||||
{ \
|
|
||||||
return Function(param[0], param[1]); \
|
|
||||||
} \
|
|
||||||
addNamedToGlobalFunctionSelectionTable(dispatch,ParamList,Name##_2,&Name##_2)
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
globalConstant0(pi, constant::mathematical::pi);
|
|
||||||
|
|
||||||
globalFunction1(degToRad, degToRad);
|
|
||||||
globalFunction1(radToDeg, radToDeg);
|
|
||||||
globalFunction1(asin, Foam::asin);
|
|
||||||
globalFunction1(acos, Foam::acos);
|
|
||||||
globalFunction1(atan, Foam::atan);
|
|
||||||
globalFunction1(sin, Foam::sin);
|
|
||||||
globalFunction1(cos, Foam::cos);
|
|
||||||
globalFunction1(tan, Foam::tan);
|
|
||||||
globalFunction1(log, Foam::log);
|
|
||||||
globalFunction1(log10, Foam::log10);
|
|
||||||
globalFunction1(mag, Foam::mag);
|
|
||||||
|
|
||||||
globalFunction2(atan2, Foam::atan2);
|
|
||||||
globalFunction2(pow, Foam::pow);
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
scalar dispatch(const word& name, const UList<scalar>& param)
|
|
||||||
{
|
|
||||||
// create lookup name with parameter count
|
|
||||||
const word lookupName = name + '_' + Foam::name(param.size());
|
|
||||||
|
|
||||||
dispatchParamListMemberFunctionTable::iterator mfIter =
|
|
||||||
dispatchParamListMemberFunctionTablePtr_->find(lookupName);
|
|
||||||
|
|
||||||
if (mfIter == dispatchParamListMemberFunctionTablePtr_->end())
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"calcEntryInternal::scalarFunctions::dispatch"
|
|
||||||
"(const word&, const UList<scalar>&) : "
|
|
||||||
) << "Unknown function " << name << nl << nl
|
|
||||||
<< "Valid types are :" << endl
|
|
||||||
<< dispatchParamListMemberFunctionTablePtr_->sortedToc()
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
return mfIter()(param);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace calcEntryInternal
|
|
||||||
} // End namespace functionEntries
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,257 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Attributed Grammar for Coco/R (-*- C++ -*- version)
|
|
||||||
compile with:
|
|
||||||
coco-cpp calcEntryParser.atg
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
[copy]
|
|
||||||
/*---------------------------------*- C++ -*---------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 2010-2010 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 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
@file calcEntryParser.atg
|
|
||||||
|
|
||||||
Description
|
|
||||||
An attributed Coco/R grammar to parse simple arithmetic expressions
|
|
||||||
|
|
||||||
Includes support for dictionary $variables and some scalar functions
|
|
||||||
(eg, sin, pow, ...)
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
generated
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
[/copy]
|
|
||||||
#include "dictionary.H"
|
|
||||||
#include "wchar.H"
|
|
||||||
#include "calcEntryInternal.H"
|
|
||||||
|
|
||||||
|
|
||||||
COMPILER calcEntry
|
|
||||||
// grammar pragmas:
|
|
||||||
$prefix=calcEntry
|
|
||||||
$namespace=Foam::functionEntries::calcEntryInternal
|
|
||||||
$define=EXPLICIT_EOF // grammar handles eof itself
|
|
||||||
$define=STREAMS_ONLY // only use STL streams
|
|
||||||
$define=NO_UTF8 // disable UTF8 on input
|
|
||||||
|
|
||||||
private:
|
|
||||||
//- The parent dictionary
|
|
||||||
dictionary* dict_;
|
|
||||||
|
|
||||||
//- The calculation result
|
|
||||||
scalar val;
|
|
||||||
|
|
||||||
//- lookup dictionary entry
|
|
||||||
scalar getDictLookup(const word&) const;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
//- attach a dictionary
|
|
||||||
void dict(const dictionary& dict)
|
|
||||||
{
|
|
||||||
dict_ = const_cast<dictionary*>(&dict);
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Return the calculated result
|
|
||||||
scalar Result() const
|
|
||||||
{
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
[initialize] // add to Parser constructor
|
|
||||||
dict_ = 0;
|
|
||||||
val = 0;
|
|
||||||
[/initialize]
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
[code]
|
|
||||||
Foam::scalar Parser::getDictLookup(const word& keyword) const
|
|
||||||
{
|
|
||||||
if (!dict_)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"calcEntry::getDictEntry(const word&) const"
|
|
||||||
) << "No dictionary attached!"
|
|
||||||
<< exit(FatalError);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
scalar dictValue = 0;
|
|
||||||
|
|
||||||
entry* entryPtr = dict_->lookupEntryPtr(keyword, true, false);
|
|
||||||
if (entryPtr && !entryPtr->isDict())
|
|
||||||
{
|
|
||||||
if (entryPtr->stream().size() != 1)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"calcEntry::getDictEntry(const word&) const"
|
|
||||||
) << "keyword " << keyword << " has "
|
|
||||||
<< entryPtr->stream().size() << " values in dictionary "
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
entryPtr->stream() >> dictValue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"calcEntry::getDictEntry(const word&) const"
|
|
||||||
) << "keyword " << keyword << " is undefined in dictionary "
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
return dictValue;
|
|
||||||
}
|
|
||||||
[/code]
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
CHARACTERS
|
|
||||||
letter = 'A'..'Z' + 'a'..'z' + '_'.
|
|
||||||
digit = "0123456789".
|
|
||||||
alphanum = letter + digit.
|
|
||||||
sign = '+' + '-'.
|
|
||||||
cr = '\r'.
|
|
||||||
lf = '\n'.
|
|
||||||
tab = '\t'.
|
|
||||||
stringCh = ANY - '"' - '\\' - cr - lf.
|
|
||||||
printable = '\u0020' .. '\u007e'.
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * TOKENS * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
TOKENS
|
|
||||||
|
|
||||||
// identifier
|
|
||||||
ident =
|
|
||||||
letter { alphanum }.
|
|
||||||
|
|
||||||
// string
|
|
||||||
string =
|
|
||||||
'"' { stringCh | '\\' printable } '"'.
|
|
||||||
|
|
||||||
// dictionary lookup identifier
|
|
||||||
// starts with '$' and otherwise limited to a normal identifier
|
|
||||||
variable =
|
|
||||||
'$' letter { alphanum }.
|
|
||||||
|
|
||||||
// floating point and integer numbers
|
|
||||||
number =
|
|
||||||
[sign] ('.' digit { digit } ) | ( digit { digit } [ '.' { digit } ])
|
|
||||||
[ ('E' | 'e') [sign] digit { digit } ].
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * PRAGMAS / COMMENTS / IGNORE * * * * * * * * * * * //
|
|
||||||
|
|
||||||
COMMENTS FROM "/*" TO "*/" NESTED
|
|
||||||
COMMENTS FROM "//" TO lf
|
|
||||||
|
|
||||||
IGNORE cr + lf + tab
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * PRODUCTIONS * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
PRODUCTIONS
|
|
||||||
|
|
||||||
calcEntry (. val = 0; .)
|
|
||||||
=
|
|
||||||
'{' Expr<val> '}' (. // reposition to immediately after the closing '}'
|
|
||||||
scanner->buffer->SetPos(t->pos + 1);
|
|
||||||
.)
|
|
||||||
| ( Expr<val> EOF )
|
|
||||||
.
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
Expr<scalar& val> (. scalar val2 = 0; .)
|
|
||||||
=
|
|
||||||
Term<val>
|
|
||||||
{
|
|
||||||
'+' Term<val2> (. val += val2; .)
|
|
||||||
| '-' Term<val2> (. val -= val2; .)
|
|
||||||
}
|
|
||||||
.
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
Term<scalar& val> (. scalar val2 = 0; .)
|
|
||||||
=
|
|
||||||
Factor<val>
|
|
||||||
{
|
|
||||||
'*' Factor<val2> (. val *= val2; .)
|
|
||||||
| '/' Factor<val2> (. val /= val2; .)
|
|
||||||
}
|
|
||||||
.
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// Note the treatment of the leading signs is fairly generous
|
|
||||||
// eg, "10 + - 10" is treated like "10 + -10"
|
|
||||||
//
|
|
||||||
Factor<scalar& val> (. bool negative = false; .)
|
|
||||||
=
|
|
||||||
['+' | '-' (. negative = true; .)
|
|
||||||
]
|
|
||||||
(
|
|
||||||
Func<val> | '(' Expr<val> ')'
|
|
||||||
| variable (.
|
|
||||||
// skip leading '$' for the keyword
|
|
||||||
val = getDictLookup(t->toString(1, t->length()-1));
|
|
||||||
.)
|
|
||||||
| number (. val = coco_string_toDouble(t->val); .)
|
|
||||||
) (. if (negative) { val = -val; } .)
|
|
||||||
.
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// functions like sin(x) or pow(x, y) etc.
|
|
||||||
Func<scalar& val>
|
|
||||||
=
|
|
||||||
ident (.
|
|
||||||
word funcName(t->toString());
|
|
||||||
DynamicList<scalar> stack(4);
|
|
||||||
.)
|
|
||||||
'('
|
|
||||||
[ (. scalar x; .)
|
|
||||||
Expr<x> (. stack.append(x); .)
|
|
||||||
{ ',' Expr<x> (. stack.append(x); .)
|
|
||||||
}
|
|
||||||
]
|
|
||||||
')' (. val = dispatch(funcName, stack); .)
|
|
||||||
.
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
END calcEntry.
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -31,10 +31,12 @@ License
|
|||||||
#include "SHA1Digest.H"
|
#include "SHA1Digest.H"
|
||||||
#include "OSHA1stream.H"
|
#include "OSHA1stream.H"
|
||||||
#include "codeStreamTools.H"
|
#include "codeStreamTools.H"
|
||||||
|
#include "stringOps.H"
|
||||||
#include "dlLibraryTable.H"
|
#include "dlLibraryTable.H"
|
||||||
#include "OSspecific.H"
|
#include "OSspecific.H"
|
||||||
#include "Time.H"
|
#include "Time.H"
|
||||||
#include "Pstream.H"
|
#include "Pstream.H"
|
||||||
|
#include "PstreamReduceOps.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -56,6 +58,10 @@ namespace functionEntries
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const Foam::word Foam::functionEntries::codeStream::codeTemplateC
|
||||||
|
= "codeStreamTemplate.C";
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool Foam::functionEntries::codeStream::execute
|
bool Foam::functionEntries::codeStream::execute
|
||||||
@ -79,119 +85,121 @@ bool Foam::functionEntries::codeStream::execute
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Read three sections of code. Remove any leading empty lines
|
// Read three sections of code.
|
||||||
// (necessary for compilation options, just visually pleasing for includes
|
// Remove any leading whitespace - necessary for compilation options,
|
||||||
// and body).
|
// convenience for includes and body.
|
||||||
dictionary codeDict(is);
|
dictionary codeDict(is);
|
||||||
|
|
||||||
string codeInclude = "";
|
// "codeInclude" is optional
|
||||||
|
string codeInclude;
|
||||||
if (codeDict.found("codeInclude"))
|
if (codeDict.found("codeInclude"))
|
||||||
{
|
{
|
||||||
codeInclude = codeStreamTools::stripLeading(codeDict["codeInclude"]);
|
codeInclude = stringOps::trim(codeDict["codeInclude"]);
|
||||||
}
|
}
|
||||||
string code = codeStreamTools::stripLeading(codeDict["code"]);
|
|
||||||
|
|
||||||
string codeOptions = "";
|
// "codeOptions" is optional
|
||||||
|
string codeOptions;
|
||||||
if (codeDict.found("codeOptions"))
|
if (codeDict.found("codeOptions"))
|
||||||
{
|
{
|
||||||
codeOptions = codeStreamTools::stripLeading(codeDict["codeOptions"]);
|
codeOptions = stringOps::trim(codeDict["codeOptions"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// "code" is mandatory
|
||||||
|
string code = stringOps::trim(codeDict["code"]);
|
||||||
|
|
||||||
// Create name out of contents
|
// Create SHA1 digest from the contents
|
||||||
|
|
||||||
SHA1Digest sha;
|
SHA1Digest sha;
|
||||||
{
|
{
|
||||||
OSHA1stream os;
|
OSHA1stream os;
|
||||||
os << codeInclude << code << codeOptions;
|
os << codeInclude << codeOptions << code;
|
||||||
sha = os.digest();
|
sha = os.digest();
|
||||||
}
|
}
|
||||||
fileName name;
|
|
||||||
{
|
|
||||||
OStringStream str;
|
|
||||||
str << sha;
|
|
||||||
name = "codeStream" + str.str();
|
|
||||||
}
|
|
||||||
|
|
||||||
fileName dir;
|
|
||||||
if (isA<IOdictionary>(parentDict))
|
|
||||||
{
|
|
||||||
const IOdictionary& d = static_cast<const IOdictionary&>(parentDict);
|
|
||||||
dir = d.db().time().constantPath()/"codeStream"/name;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dir = "codeStream"/name;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fileName libPath
|
// codeName = prefix + sha1
|
||||||
(
|
const fileName codeName = "codeStream_" + sha.str();
|
||||||
Foam::getEnv("FOAM_USER_LIBBIN")
|
|
||||||
/ "lib"
|
// write code into _SHA1 subdir
|
||||||
+ name
|
const fileName codePath = codeStreamTools::codePath("_" + sha.str());
|
||||||
+ ".so"
|
|
||||||
);
|
// write library into platforms/$WM_OPTIONS/lib subdir
|
||||||
|
const fileName libPath = codeStreamTools::libPath(codeName);
|
||||||
|
|
||||||
|
|
||||||
void* lib = dlLibraryTable::findLibrary(libPath);
|
void* lib = dlLibraryTable::findLibrary(libPath);
|
||||||
|
|
||||||
|
// try to load if not already loaded
|
||||||
|
if (!lib && dlLibraryTable::open(libPath, false))
|
||||||
|
{
|
||||||
|
lib = dlLibraryTable::findLibrary(libPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
// did not load - need to compile it
|
||||||
if (!lib)
|
if (!lib)
|
||||||
{
|
{
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
if (!codeStreamTools::upToDate(dir, sha))
|
if (!codeStreamTools::upToDate(codePath, sha))
|
||||||
{
|
{
|
||||||
Info<< "Creating new library in " << libPath << endl;
|
Info<< "Creating new library in " << libPath << endl;
|
||||||
|
|
||||||
fileName templates
|
const fileName fileCsrc
|
||||||
(
|
(
|
||||||
Foam::getEnv("FOAM_CODESTREAM_TEMPLATE_DIR")
|
codeStreamTools::findTemplate
|
||||||
|
(
|
||||||
|
codeTemplateC
|
||||||
|
)
|
||||||
);
|
);
|
||||||
if (!templates.size())
|
|
||||||
|
// not found!
|
||||||
|
if (fileCsrc.empty())
|
||||||
{
|
{
|
||||||
FatalIOErrorIn
|
FatalIOErrorIn
|
||||||
(
|
(
|
||||||
"functionEntries::codeStream::execute(..)",
|
"functionEntries::codeStream::execute(..)",
|
||||||
parentDict
|
parentDict
|
||||||
) << "Please set environment variable"
|
) << "Could not find the code template: "
|
||||||
" FOAM_CODESTREAM_TEMPLATE_DIR"
|
<< codeTemplateC << nl
|
||||||
<< " to point to the location of codeStreamTemplate.C"
|
<< codeStreamTools::searchedLocations()
|
||||||
<< exit(FatalIOError);
|
<< exit(FatalIOError);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<fileAndVars> copyFiles(1);
|
|
||||||
copyFiles[0].first() = templates/"codeStreamTemplate.C";
|
|
||||||
stringPairList bodyVars(2);
|
|
||||||
bodyVars[0] = Pair<string>("codeInclude", codeInclude);
|
|
||||||
bodyVars[1] = Pair<string>("code", code);
|
|
||||||
copyFiles[0].second() = bodyVars;
|
|
||||||
|
|
||||||
List<fileAndContent> filesContents(2);
|
List<codeStreamTools::fileAndVars> copyFiles(1);
|
||||||
|
copyFiles[0].file() = fileCsrc;
|
||||||
|
copyFiles[0].set("codeInclude", codeInclude);
|
||||||
|
copyFiles[0].set("code", code);
|
||||||
|
|
||||||
|
List<codeStreamTools::fileAndContent> filesContents(2);
|
||||||
|
|
||||||
// Write Make/files
|
// Write Make/files
|
||||||
filesContents[0].first() = "Make/files";
|
filesContents[0].first() = "Make/files";
|
||||||
filesContents[0].second() =
|
filesContents[0].second() =
|
||||||
"codeStreamTemplate.C \n\
|
codeTemplateC + "\n\n"
|
||||||
LIB = $(FOAM_USER_LIBBIN)/lib" + name;
|
+ codeStreamTools::libTarget(codeName);
|
||||||
|
|
||||||
// Write Make/options
|
// Write Make/options
|
||||||
filesContents[1].first() = "Make/options";
|
filesContents[1].first() = "Make/options";
|
||||||
filesContents[1].second() =
|
filesContents[1].second() =
|
||||||
"EXE_INC = -g\\\n" + codeOptions + "\n\nLIB_LIBS = ";
|
"EXE_INC = -g \\\n"
|
||||||
|
+ codeOptions
|
||||||
|
+ "\n\nLIB_LIBS =";
|
||||||
|
|
||||||
codeStreamTools writer(name, copyFiles, filesContents);
|
codeStreamTools writer(codeName, copyFiles, filesContents);
|
||||||
if (!writer.copyFilesContents(dir))
|
if (!writer.copyFilesContents(codePath))
|
||||||
{
|
{
|
||||||
FatalIOErrorIn
|
FatalIOErrorIn
|
||||||
(
|
(
|
||||||
"functionEntries::codeStream::execute(..)",
|
"functionEntries::codeStream::execute(..)",
|
||||||
parentDict
|
parentDict
|
||||||
) << "Failed writing " << endl
|
) << "Failed writing " <<nl
|
||||||
<< copyFiles << endl
|
<< copyFiles << endl
|
||||||
<< filesContents
|
<< filesContents
|
||||||
<< exit(FatalIOError);
|
<< exit(FatalIOError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Foam::string wmakeCmd("wmake libso " + dir);
|
const Foam::string wmakeCmd("wmake libso " + codePath);
|
||||||
Info<< "Invoking " << wmakeCmd << endl;
|
Info<< "Invoking " << wmakeCmd << endl;
|
||||||
if (Foam::system(wmakeCmd))
|
if (Foam::system(wmakeCmd))
|
||||||
{
|
{
|
||||||
@ -199,17 +207,22 @@ bool Foam::functionEntries::codeStream::execute
|
|||||||
(
|
(
|
||||||
"functionEntries::codeStream::execute(..)",
|
"functionEntries::codeStream::execute(..)",
|
||||||
parentDict
|
parentDict
|
||||||
) << "Failed " << wmakeCmd << exit(FatalIOError);
|
) << "Failed " << wmakeCmd
|
||||||
|
<< exit(FatalIOError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dlLibraryTable::open(libPath))
|
bool dummy = true;
|
||||||
|
reduce(dummy, orOp<bool>());
|
||||||
|
|
||||||
|
if (!dlLibraryTable::open(libPath, false))
|
||||||
{
|
{
|
||||||
FatalIOErrorIn
|
FatalIOErrorIn
|
||||||
(
|
(
|
||||||
"functionEntries::codeStream::execute(..)",
|
"functionEntries::codeStream::execute(..)",
|
||||||
parentDict
|
parentDict
|
||||||
) << "Failed loading library " << libPath << exit(FatalIOError);
|
) << "Failed loading library " << libPath
|
||||||
|
<< exit(FatalIOError);
|
||||||
}
|
}
|
||||||
|
|
||||||
lib = dlLibraryTable::findLibrary(libPath);
|
lib = dlLibraryTable::findLibrary(libPath);
|
||||||
@ -224,7 +237,7 @@ bool Foam::functionEntries::codeStream::execute
|
|||||||
void (*function)(const dictionary&, Ostream&);
|
void (*function)(const dictionary&, Ostream&);
|
||||||
function = reinterpret_cast<void(*)(const dictionary&, Ostream&)>
|
function = reinterpret_cast<void(*)(const dictionary&, Ostream&)>
|
||||||
(
|
(
|
||||||
dlSym(lib, name)
|
dlSym(lib, codeName)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!function)
|
if (!function)
|
||||||
@ -233,11 +246,11 @@ bool Foam::functionEntries::codeStream::execute
|
|||||||
(
|
(
|
||||||
"functionEntries::codeStream::execute(..)",
|
"functionEntries::codeStream::execute(..)",
|
||||||
parentDict
|
parentDict
|
||||||
) << "Failed looking up symbol " << name
|
) << "Failed looking up symbol " << codeName
|
||||||
<< " in library " << lib << exit(FatalIOError);
|
<< " in library " << lib << exit(FatalIOError);
|
||||||
}
|
}
|
||||||
|
|
||||||
OStringStream os;
|
OStringStream os(is.format());
|
||||||
(*function)(parentDict, os);
|
(*function)(parentDict, os);
|
||||||
IStringStream resultStream(os.str());
|
IStringStream resultStream(os.str());
|
||||||
entry.read(parentDict, resultStream);
|
entry.read(parentDict, resultStream);
|
||||||
|
|||||||
@ -29,11 +29,12 @@ Description
|
|||||||
generate the entry itself. So
|
generate the entry itself. So
|
||||||
- codeStream reads three entries: 'code', 'codeInclude' (optional),
|
- codeStream reads three entries: 'code', 'codeInclude' (optional),
|
||||||
'codeOptions' (optional)
|
'codeOptions' (optional)
|
||||||
and uses those to generate library sources inside constant/codeStream/
|
and uses those to generate library sources inside \f codeStream/
|
||||||
- these get compiled using 'wmake libso'
|
- these get compiled using 'wmake libso'
|
||||||
- the resulting library is loaded in executed with as arguments
|
- the resulting library is loaded in executed with as arguments
|
||||||
const dictionary& dict,
|
\code
|
||||||
Ostream& os
|
(const dictionary& dict, Ostream& os)
|
||||||
|
\endcode
|
||||||
where the dictionary is the current dictionary.
|
where the dictionary is the current dictionary.
|
||||||
- the code has to write into Ostream which is then used to construct
|
- the code has to write into Ostream which is then used to construct
|
||||||
the actual dictionary entry.
|
the actual dictionary entry.
|
||||||
@ -41,6 +42,7 @@ Description
|
|||||||
|
|
||||||
E.g. to set the internal field of a field:
|
E.g. to set the internal field of a field:
|
||||||
|
|
||||||
|
\verbatim
|
||||||
internalField #codeStream
|
internalField #codeStream
|
||||||
{
|
{
|
||||||
code
|
code
|
||||||
@ -56,19 +58,31 @@ Description
|
|||||||
#{
|
#{
|
||||||
#include "fvCFD.H"
|
#include "fvCFD.H"
|
||||||
#};
|
#};
|
||||||
|
|
||||||
|
//- Optional:
|
||||||
codeOptions
|
codeOptions
|
||||||
#{
|
#{
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude
|
-I$(LIB_SRC)/finiteVolume/lnInclude
|
||||||
#};
|
#};
|
||||||
};
|
};
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
|
||||||
Note the #{ #} syntax which is just a way of inputting strings with embedded
|
Note the \c \#{ ... \c \#} syntax is a 'verbatim' input mode that allows
|
||||||
newlines.
|
inputting strings with embedded newlines.
|
||||||
|
|
||||||
Limitations:
|
Limitations:
|
||||||
- '~' symbol not allowed inside the code sections.
|
- '~' symbol not allowed inside the code sections.
|
||||||
- probably some other limitations (uses string::expand which expands $, ~)
|
- probably some other limitations (uses string::expand which expands
|
||||||
|
\c \$ and \c ~ sequences)
|
||||||
|
|
||||||
|
Note
|
||||||
|
The code to be compiled is stored under the local \f codeStream directory
|
||||||
|
with a subdirectory name corresponding to the SHA1 of the contents.
|
||||||
|
|
||||||
|
The corresponding library code is located under the local
|
||||||
|
\f codeStream/platforms/$WM_OPTIONS/lib directory in a library
|
||||||
|
\f libcodeStream_SHA1.so
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
codeStream.C
|
codeStream.C
|
||||||
@ -84,13 +98,11 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
class ISstream;
|
|
||||||
|
|
||||||
namespace functionEntries
|
namespace functionEntries
|
||||||
{
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class codeStream Declaration
|
Class codeStream Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class codeStream
|
class codeStream
|
||||||
@ -108,6 +120,12 @@ class codeStream
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
// Static data members
|
||||||
|
|
||||||
|
//- Name of the C code template to be used
|
||||||
|
static const word codeTemplateC;
|
||||||
|
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
ClassName("codeStream");
|
ClassName("codeStream");
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -44,7 +44,8 @@ void Foam::primitiveEntry::append
|
|||||||
|
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
w.size() == 1
|
disableFunctionEntries
|
||||||
|
|| w.size() == 1
|
||||||
|| (
|
|| (
|
||||||
!(w[0] == '$' && expandVariable(w, dict))
|
!(w[0] == '$' && expandVariable(w, dict))
|
||||||
&& !(w[0] == '#' && expandFunction(w, dict, is))
|
&& !(w[0] == '#' && expandFunction(w, dict, is))
|
||||||
@ -215,7 +216,17 @@ void Foam::primitiveEntry::write(Ostream& os) const
|
|||||||
|
|
||||||
for (label i=0; i<size(); ++i)
|
for (label i=0; i<size(); ++i)
|
||||||
{
|
{
|
||||||
os << operator[](i);
|
const token& t = operator[](i);
|
||||||
|
if (t.type() == token::VERBATIMSTRING)
|
||||||
|
{
|
||||||
|
os << token::HASH << token::BEGIN_BLOCK;
|
||||||
|
os.writeQuoted(t.stringToken(), false);
|
||||||
|
os << token::HASH << token::END_BLOCK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
os << t;
|
||||||
|
}
|
||||||
|
|
||||||
if (i < size()-1)
|
if (i < size()-1)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -25,6 +25,7 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "codeStreamTools.H"
|
#include "codeStreamTools.H"
|
||||||
|
#include "stringOps.H"
|
||||||
#include "IFstream.H"
|
#include "IFstream.H"
|
||||||
#include "OFstream.H"
|
#include "OFstream.H"
|
||||||
#include "OSspecific.H"
|
#include "OSspecific.H"
|
||||||
@ -39,42 +40,134 @@ int Foam::codeStreamTools::allowSystemOperations
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
const Foam::word Foam::codeStreamTools::codeTemplateEnvName
|
||||||
|
= "FOAM_CODESTREAM_TEMPLATES";
|
||||||
|
|
||||||
|
const Foam::fileName Foam::codeStreamTools::codeTemplateDirName
|
||||||
|
= "codeTemplates/codeStream";
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::fileName Foam::codeStreamTools::baseDir()
|
||||||
|
{
|
||||||
|
return stringOps::expandEnv("$FOAM_CASE/codeStream");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::fileName Foam::codeStreamTools::libSubDir()
|
||||||
|
{
|
||||||
|
return stringOps::expandEnv("platforms/$WM_OPTIONS/lib");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::fileName Foam::codeStreamTools::codePath(const word& subDirName)
|
||||||
|
{
|
||||||
|
return stringOps::expandEnv
|
||||||
|
(
|
||||||
|
"$FOAM_CASE/codeStream/" + subDirName
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::fileName Foam::codeStreamTools::libPath(const word& codeName)
|
||||||
|
{
|
||||||
|
return stringOps::expandEnv
|
||||||
|
(
|
||||||
|
"$FOAM_CASE/codeStream/platforms/$WM_OPTIONS/lib/lib"
|
||||||
|
+ codeName + ".so"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::string Foam::codeStreamTools::libTarget(const word& codeName)
|
||||||
|
{
|
||||||
|
return "LIB = $(PWD)/../platforms/$(WM_OPTIONS)/lib/lib" + codeName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::fileName Foam::codeStreamTools::findTemplate(const word& templateFile)
|
||||||
|
{
|
||||||
|
// try to get template from FOAM_CODESTREAM_TEMPLATES
|
||||||
|
fileName templateDir(Foam::getEnv(codeTemplateEnvName));
|
||||||
|
|
||||||
|
fileName file;
|
||||||
|
if (!templateDir.empty() && isDir(templateDir))
|
||||||
|
{
|
||||||
|
file = templateDir/templateFile;
|
||||||
|
if (!isFile(file, false))
|
||||||
|
{
|
||||||
|
file.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// not found - fallback to ~OpenFOAM expansion
|
||||||
|
if (file.empty())
|
||||||
|
{
|
||||||
|
file = findEtcFile(codeTemplateDirName/templateFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::string Foam::codeStreamTools::searchedLocations()
|
||||||
|
{
|
||||||
|
return
|
||||||
|
(
|
||||||
|
"Under the $"
|
||||||
|
+ codeTemplateDirName
|
||||||
|
+ " directory or via via the ~OpenFOAM/"
|
||||||
|
+ codeTemplateDirName
|
||||||
|
+ " expansion"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::codeStreamTools::copyAndExpand
|
void Foam::codeStreamTools::copyAndExpand
|
||||||
(
|
(
|
||||||
ISstream& sourceStr,
|
ISstream& is,
|
||||||
OSstream& destStr
|
OSstream& os,
|
||||||
|
const HashTable<string>& mapping
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
if (!sourceStr.good())
|
if (!is.good())
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"codeStreamTools::copyAndExpand()"
|
"codeStreamTools::copyAndExpand()"
|
||||||
" const"
|
" const"
|
||||||
) << "Failed opening for reading " << sourceStr.name()
|
) << "Failed opening for reading " << is.name()
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!destStr.good())
|
if (!os.good())
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"codeStreamTools::copyAndExpand()"
|
"codeStreamTools::copyAndExpand()"
|
||||||
" const"
|
" const"
|
||||||
) << "Failed writing " << destStr.name() << exit(FatalError);
|
) << "Failed writing " << os.name()
|
||||||
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy file whilst rewriting environment vars
|
// Copy file while rewriting $VARS and ${VARS}
|
||||||
string line;
|
string line;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
sourceStr.getLine(line);
|
is.getLine(line);
|
||||||
line.expand(true, true); // replace any envvars inside substitutions
|
|
||||||
destStr<< line.c_str() << nl;
|
// normal expansion according to mapping
|
||||||
|
stringOps::inplaceExpand(line, mapping);
|
||||||
|
|
||||||
|
// expand according to env variables
|
||||||
|
stringOps::inplaceExpandEnv(line, true, true);
|
||||||
|
|
||||||
|
os << line.c_str() << nl;
|
||||||
}
|
}
|
||||||
while (sourceStr.good());
|
while (is.good());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -109,11 +202,11 @@ Foam::codeStreamTools::codeStreamTools
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
Foam::codeStreamTools::codeStreamTools(const codeStreamTools& otf)
|
Foam::codeStreamTools::codeStreamTools(const codeStreamTools& tools)
|
||||||
:
|
:
|
||||||
name_(otf.name_),
|
name_(tools.name_),
|
||||||
copyFiles_(otf.copyFiles_),
|
copyFiles_(tools.copyFiles_),
|
||||||
filesContents_(otf.filesContents_)
|
filesContents_(tools.filesContents_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -127,21 +220,16 @@ bool Foam::codeStreamTools::copyFilesContents(const fileName& dir) const
|
|||||||
(
|
(
|
||||||
"codeStreamTools::copyFilesContents(const fileName&) const"
|
"codeStreamTools::copyFilesContents(const fileName&) const"
|
||||||
) << "Loading a shared library using case-supplied code is not"
|
) << "Loading a shared library using case-supplied code is not"
|
||||||
<< " enabled by default" << endl
|
<< " enabled by default" << nl
|
||||||
<< "because of security issues. If you trust the code you can"
|
<< "because of security issues. If you trust the code you can"
|
||||||
<< " enable this" << endl
|
<< " enable this" << nl
|
||||||
<< "facility be adding to the InfoSwitches setting in the system"
|
<< "facility be adding to the InfoSwitches setting in the system"
|
||||||
<< " controlDict:" << endl
|
<< " controlDict:" << nl << nl
|
||||||
<< endl
|
<< " allowSystemOperations 1" << nl << nl
|
||||||
<< " allowSystemOperations 1" << endl
|
<< "The system controlDict is either" << nl << nl
|
||||||
<< endl
|
<< " ~/.OpenFOAM/$WM_PROJECT_VERSION/controlDict" << nl << nl
|
||||||
<< "The system controlDict is either" << endl
|
<< "or" << nl << nl
|
||||||
<< endl
|
<< " $WM_PROJECT_DIR/etc/controlDict" << nl
|
||||||
<< " ~/.OpenFOAM/$WM_PROJECT_VERSION/controlDict" << endl
|
|
||||||
<< endl
|
|
||||||
<< "or" << endl
|
|
||||||
<< endl
|
|
||||||
<< " $WM_PROJECT_DIR/etc/controlDict" << endl
|
|
||||||
<< endl
|
<< endl
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
@ -149,98 +237,84 @@ bool Foam::codeStreamTools::copyFilesContents(const fileName& dir) const
|
|||||||
// Create dir
|
// Create dir
|
||||||
mkDir(dir);
|
mkDir(dir);
|
||||||
|
|
||||||
//Info<< "Setting envvar typeName=" << name_ << endl;
|
// Info<< "set mapping typeName=" << name_ << endl;
|
||||||
setEnv("typeName", name_, true);
|
|
||||||
// Copy any template files
|
// Copy any template files
|
||||||
forAll(copyFiles_, i)
|
forAll(copyFiles_, i)
|
||||||
{
|
{
|
||||||
const List<Pair<string> >& rules = copyFiles_[i].second();
|
const fileName sourceFile(fileName(copyFiles_[i].file()).expand());
|
||||||
forAll(rules, j)
|
const fileName destFile(dir/sourceFile.name());
|
||||||
{
|
|
||||||
//Info<< "Setting envvar " << rules[j].first() << endl;
|
|
||||||
setEnv(rules[j].first(), rules[j].second(), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
const fileName sourceFile = fileName(copyFiles_[i].first()).expand();
|
IFstream is(sourceFile);
|
||||||
const fileName destFile = dir/sourceFile.name();
|
//Info<< "Reading from " << is.name() << endl;
|
||||||
|
if (!is.good())
|
||||||
IFstream sourceStr(sourceFile);
|
|
||||||
//Info<< "Reading from " << sourceStr.name() << endl;
|
|
||||||
if (!sourceStr.good())
|
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"codeStreamTools::copyFilesContents()"
|
"codeStreamTools::copyFilesContents(const fileName&)"
|
||||||
" const"
|
" const"
|
||||||
) << "Failed opening " << sourceFile << exit(FatalError);
|
) << "Failed opening " << sourceFile << exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
OFstream destStr(destFile);
|
OFstream os(destFile);
|
||||||
//Info<< "Writing to " << destFile.name() << endl;
|
//Info<< "Writing to " << destFile.name() << endl;
|
||||||
if (!destStr.good())
|
if (!os.good())
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"codeStreamTools::copyFilesContents()"
|
"codeStreamTools::copyFilesContents(const fileName&)"
|
||||||
" const"
|
" const"
|
||||||
) << "Failed writing " << destFile << exit(FatalError);
|
) << "Failed writing " << destFile << exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
copyAndExpand(sourceStr, destStr);
|
// variables mapping
|
||||||
|
HashTable<string> mapping(copyFiles_[i]);
|
||||||
|
mapping.set("typeName", name_);
|
||||||
|
copyAndExpand(is, os, mapping);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Files that are always written:
|
// Files that are always written:
|
||||||
forAll(filesContents_, i)
|
forAll(filesContents_, i)
|
||||||
{
|
{
|
||||||
fileName f = fileName(dir/filesContents_[i].first()).expand();
|
const fileName dstFile
|
||||||
|
(
|
||||||
|
fileName(dir/filesContents_[i].first()).expand()
|
||||||
|
);
|
||||||
|
|
||||||
mkDir(f.path());
|
mkDir(dstFile.path());
|
||||||
OFstream str(f);
|
OFstream os(dstFile);
|
||||||
//Info<< "Writing to " << filesContents_[i].first() << endl;
|
//Info<< "Writing to " << filesContents_[i].first() << endl;
|
||||||
if (!str.good())
|
if (!os.good())
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"codeStreamTools::copyFilesContents()"
|
"codeStreamTools::copyFilesContents()"
|
||||||
" const"
|
" const"
|
||||||
) << "Failed writing " << f << exit(FatalError);
|
) << "Failed writing " << dstFile << exit(FatalError);
|
||||||
}
|
}
|
||||||
str << filesContents_[i].second().c_str() << endl;
|
os << filesContents_[i].second().c_str() << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::string Foam::codeStreamTools::stripLeading(const string& s)
|
|
||||||
{
|
|
||||||
label sz = s.size();
|
|
||||||
if (sz > 0 && s[0] == '\n')
|
|
||||||
{
|
|
||||||
return s(1, sz-1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool Foam::codeStreamTools::writeDigest
|
bool Foam::codeStreamTools::writeDigest
|
||||||
(
|
(
|
||||||
const fileName& dir,
|
const fileName& dir,
|
||||||
const SHA1Digest& sha1
|
const SHA1Digest& sha1
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
OFstream str(dir/"SHA1Digest");
|
OFstream os(dir/"SHA1Digest");
|
||||||
str << sha1;
|
os << sha1;
|
||||||
return str.good();
|
return os.good();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::SHA1Digest Foam::codeStreamTools::readDigest(const fileName& dir)
|
Foam::SHA1Digest Foam::codeStreamTools::readDigest(const fileName& dir)
|
||||||
{
|
{
|
||||||
IFstream str(dir/"SHA1Digest");
|
IFstream is(dir/"SHA1Digest");
|
||||||
return SHA1Digest(str);
|
return SHA1Digest(is);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -39,20 +39,16 @@ SourceFiles
|
|||||||
#include "Tuple2.H"
|
#include "Tuple2.H"
|
||||||
#include "Pair.H"
|
#include "Pair.H"
|
||||||
#include "SHA1Digest.H"
|
#include "SHA1Digest.H"
|
||||||
|
#include "HashTable.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Forward declaration of classes
|
||||||
typedef List<Pair<string> > stringPairList;
|
|
||||||
typedef Tuple2<fileName, List<Pair<string> > > fileAndVars;
|
|
||||||
typedef Tuple2<fileName, string> fileAndContent;
|
|
||||||
|
|
||||||
|
|
||||||
class OSstream;
|
|
||||||
class ISstream;
|
class ISstream;
|
||||||
|
class OSstream;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class codeStreamTools Declaration
|
Class codeStreamTools Declaration
|
||||||
@ -60,24 +56,72 @@ class ISstream;
|
|||||||
|
|
||||||
class codeStreamTools
|
class codeStreamTools
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
typedef Tuple2<fileName, string> fileAndContent;
|
||||||
|
|
||||||
|
//- Helper class for managing file and variables
|
||||||
|
class fileAndVars
|
||||||
|
:
|
||||||
|
public HashTable<string>
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
fileName file_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
//- Construct null
|
||||||
|
fileAndVars()
|
||||||
|
{}
|
||||||
|
|
||||||
|
//- Return the file name
|
||||||
|
const fileName& file() const
|
||||||
|
{
|
||||||
|
return file_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return the file name
|
||||||
|
fileName& file()
|
||||||
|
{
|
||||||
|
return file_;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
//- Name for underlying set
|
//- Name for underlying set
|
||||||
word name_;
|
word name_;
|
||||||
|
|
||||||
//- Files to copy
|
//- Files to copy
|
||||||
List<fileAndVars> copyFiles_;
|
List<codeStreamTools::fileAndVars> copyFiles_;
|
||||||
|
|
||||||
//- Direct contents for files
|
//- Direct contents for files
|
||||||
List<fileAndContent> filesContents_;
|
List<fileAndContent> filesContents_;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void copyAndExpand(ISstream&, OSstream&) const;
|
void copyAndExpand
|
||||||
|
(
|
||||||
|
ISstream&,
|
||||||
|
OSstream&,
|
||||||
|
const HashTable<string>& mapping
|
||||||
|
) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static int allowSystemOperations;
|
// Static data members
|
||||||
|
|
||||||
|
//- Name of the code template environment variable
|
||||||
|
// Used to located the codeTemplateName
|
||||||
|
static const word codeTemplateEnvName;
|
||||||
|
|
||||||
|
//- Name of the code template sub-directory
|
||||||
|
// Used when locating the codeTemplateName via Foam::findEtcFile
|
||||||
|
static const fileName codeTemplateDirName;
|
||||||
|
|
||||||
|
|
||||||
|
static int allowSystemOperations;
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
@ -96,12 +140,46 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
//- Construct copy
|
//- Construct copy
|
||||||
codeStreamTools(const codeStreamTools& otf);
|
codeStreamTools(const codeStreamTools&);
|
||||||
|
|
||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
const List<Tuple2<fileName, List<Pair<string> > > >& copyFiles() const
|
//- Directory for compile/link (case-specific)
|
||||||
|
// Expanded from \$FOAM_CASE/codeStream
|
||||||
|
static fileName baseDir();
|
||||||
|
|
||||||
|
//- Subdirectory name for library
|
||||||
|
// Expanded from platforms/\$WM_OPTIONS/lib
|
||||||
|
static fileName libSubDir();
|
||||||
|
|
||||||
|
//- Local path for specified code name
|
||||||
|
// Expanded from \$FOAM_CASE/codeStream
|
||||||
|
static fileName codePath(const word& subDirName);
|
||||||
|
|
||||||
|
//- Local library path for specified code name
|
||||||
|
// Expanded from \$FOAM_CASE/platforms/\$WM_OPTIONS/lib
|
||||||
|
static fileName libPath(const word& codeName);
|
||||||
|
|
||||||
|
//- The library target path for Make/files
|
||||||
|
static string libTarget(const word& codeName);
|
||||||
|
|
||||||
|
|
||||||
|
//- Find a code-template via the codeTemplateEnvName
|
||||||
|
// alternatively in the codeTemplateDirName via Foam::findEtcFile
|
||||||
|
static fileName findTemplate(const word& templateName);
|
||||||
|
|
||||||
|
//- List searched locations in a format suitable for display an error
|
||||||
|
static string searchedLocations();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const word& name() const
|
||||||
|
{
|
||||||
|
return name_;
|
||||||
|
}
|
||||||
|
|
||||||
|
const List<fileAndVars>& copyFiles() const
|
||||||
{
|
{
|
||||||
return copyFiles_;
|
return copyFiles_;
|
||||||
}
|
}
|
||||||
@ -111,16 +189,10 @@ public:
|
|||||||
return filesContents_;
|
return filesContents_;
|
||||||
}
|
}
|
||||||
|
|
||||||
const word& name() const
|
|
||||||
{
|
|
||||||
return name_;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool copyFilesContents(const fileName& dir) const;
|
bool copyFilesContents(const fileName& dir) const;
|
||||||
|
|
||||||
static void* findLibrary(const fileName& libPath);
|
|
||||||
|
|
||||||
static string stripLeading(const string&);
|
static void* findLibrary(const fileName& libPath);
|
||||||
|
|
||||||
static bool writeDigest(const fileName& dir, const SHA1Digest& sha1);
|
static bool writeDigest(const fileName& dir, const SHA1Digest& sha1);
|
||||||
static SHA1Digest readDigest(const fileName& dir);
|
static SHA1Digest readDigest(const fileName& dir);
|
||||||
@ -62,7 +62,11 @@ Foam::dlLibraryTable::~dlLibraryTable()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool Foam::dlLibraryTable::open(const fileName& functionLibName)
|
bool Foam::dlLibraryTable::open
|
||||||
|
(
|
||||||
|
const fileName& functionLibName,
|
||||||
|
const bool verbose
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (functionLibName.size())
|
if (functionLibName.size())
|
||||||
{
|
{
|
||||||
@ -70,11 +74,14 @@ bool Foam::dlLibraryTable::open(const fileName& functionLibName)
|
|||||||
|
|
||||||
if (!functionLibPtr)
|
if (!functionLibPtr)
|
||||||
{
|
{
|
||||||
WarningIn
|
if (verbose)
|
||||||
(
|
{
|
||||||
"dlLibraryTable::open(const fileName& functionLibName)"
|
WarningIn
|
||||||
) << "could not load " << functionLibName
|
(
|
||||||
<< endl;
|
"dlLibraryTable::open(const fileName&)"
|
||||||
|
) << "could not load " << functionLibName
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -97,7 +104,11 @@ bool Foam::dlLibraryTable::open(const fileName& functionLibName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::dlLibraryTable::close(const fileName& functionLibName)
|
bool Foam::dlLibraryTable::close
|
||||||
|
(
|
||||||
|
const fileName& functionLibName,
|
||||||
|
const bool verbose
|
||||||
|
)
|
||||||
{
|
{
|
||||||
void* libPtr = findLibrary(functionLibName);
|
void* libPtr = findLibrary(functionLibName);
|
||||||
if (libPtr)
|
if (libPtr)
|
||||||
@ -106,11 +117,14 @@ bool Foam::dlLibraryTable::close(const fileName& functionLibName)
|
|||||||
|
|
||||||
if (!dlClose(libPtr))
|
if (!dlClose(libPtr))
|
||||||
{
|
{
|
||||||
WarningIn
|
if (verbose)
|
||||||
(
|
{
|
||||||
"dlLibraryTable::close(const fileName& functionLibName)"
|
WarningIn
|
||||||
) << "could not close " << functionLibName
|
(
|
||||||
<< endl;
|
"dlLibraryTable::close(const fileName&)"
|
||||||
|
) << "could not close " << functionLibName
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -144,7 +158,7 @@ bool Foam::dlLibraryTable::open
|
|||||||
{
|
{
|
||||||
fileNameList libNames(dict.lookup(libsEntry));
|
fileNameList libNames(dict.lookup(libsEntry));
|
||||||
|
|
||||||
bool allOpened = (libNames.size() > 0);
|
bool allOpened = !libNames.empty();
|
||||||
|
|
||||||
forAll(libNames, i)
|
forAll(libNames, i)
|
||||||
{
|
{
|
||||||
@ -94,11 +94,11 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Open the named library
|
//- Open the named library, optionally with warnings if problems occur
|
||||||
static bool open(const fileName& name);
|
static bool open(const fileName& name, const bool verbose = true);
|
||||||
|
|
||||||
//- Close the named library
|
//- Close the named library, optionally with warnings if problems occur
|
||||||
static bool close(const fileName& name);
|
static bool close(const fileName& name, const bool verbose = true);
|
||||||
|
|
||||||
//- Find the handle of the named library
|
//- Find the handle of the named library
|
||||||
static void* findLibrary(const fileName& name);
|
static void* findLibrary(const fileName& name);
|
||||||
@ -109,7 +109,7 @@ public:
|
|||||||
|
|
||||||
//- Open all the libraries listed in the 'libsEntry' entry in the
|
//- Open all the libraries listed in the 'libsEntry' entry in the
|
||||||
// given dictionary if present and check the additions
|
// given dictionary if present and check the additions
|
||||||
// to the give constructor table
|
// to the given constructor table
|
||||||
template<class TablePtr>
|
template<class TablePtr>
|
||||||
static bool open
|
static bool open
|
||||||
(
|
(
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -47,11 +47,11 @@ UNARY_FUNCTION(tensor, tensor, dev2, transform)
|
|||||||
UNARY_FUNCTION(scalar, tensor, det, transform)
|
UNARY_FUNCTION(scalar, tensor, det, transform)
|
||||||
UNARY_FUNCTION(tensor, tensor, cof, cof)
|
UNARY_FUNCTION(tensor, tensor, cof, cof)
|
||||||
UNARY_FUNCTION(tensor, tensor, inv, inv)
|
UNARY_FUNCTION(tensor, tensor, inv, inv)
|
||||||
UNARY_FUNCTION(vector, tensor, eigenValues, sign)
|
UNARY_FUNCTION(vector, tensor, eigenValues, transform)
|
||||||
UNARY_FUNCTION(tensor, tensor, eigenVectors, transform)
|
UNARY_FUNCTION(tensor, tensor, eigenVectors, sign)
|
||||||
|
|
||||||
UNARY_FUNCTION(vector, symmTensor, eigenValues, sign)
|
UNARY_FUNCTION(vector, symmTensor, eigenValues, transform)
|
||||||
UNARY_FUNCTION(symmTensor, symmTensor, eigenVectors, transform)
|
UNARY_FUNCTION(symmTensor, symmTensor, eigenVectors, sign)
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * global operators * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * global operators * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -60,11 +60,11 @@ UNARY_FUNCTION(tensor, tensor, dev2, transform)
|
|||||||
UNARY_FUNCTION(scalar, tensor, det, transform)
|
UNARY_FUNCTION(scalar, tensor, det, transform)
|
||||||
UNARY_FUNCTION(tensor, tensor, cof, cof)
|
UNARY_FUNCTION(tensor, tensor, cof, cof)
|
||||||
UNARY_FUNCTION(tensor, tensor, inv, inv)
|
UNARY_FUNCTION(tensor, tensor, inv, inv)
|
||||||
UNARY_FUNCTION(vector, tensor, eigenValues, sign)
|
UNARY_FUNCTION(vector, tensor, eigenValues, transform)
|
||||||
UNARY_FUNCTION(tensor, tensor, eigenVectors, transform)
|
UNARY_FUNCTION(tensor, tensor, eigenVectors, sign)
|
||||||
|
|
||||||
UNARY_FUNCTION(vector, symmTensor, eigenValues, sign)
|
UNARY_FUNCTION(vector, symmTensor, eigenValues, transform)
|
||||||
UNARY_FUNCTION(symmTensor, symmTensor, eigenVectors, transform)
|
UNARY_FUNCTION(symmTensor, symmTensor, eigenVectors, sign)
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * global operators * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * global operators * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -65,7 +65,7 @@ bool env(const word&);
|
|||||||
string getEnv(const word&);
|
string getEnv(const word&);
|
||||||
|
|
||||||
//- Set an environment variable
|
//- Set an environment variable
|
||||||
bool setEnv(const word& name, const string& value, const bool overwrite);
|
bool setEnv(const word& name, const std::string& value, const bool overwrite);
|
||||||
|
|
||||||
//- Return the system's host name, as per hostname(1)
|
//- Return the system's host name, as per hostname(1)
|
||||||
// Optionally with the full name (as per the '-f' option)
|
// Optionally with the full name (as per the '-f' option)
|
||||||
@ -182,7 +182,7 @@ bool ping(const word&, const label port, const label timeOut);
|
|||||||
bool ping(const word&, const label timeOut=10);
|
bool ping(const word&, const label timeOut=10);
|
||||||
|
|
||||||
//- Execute the specified command
|
//- Execute the specified command
|
||||||
int system(const string& command);
|
int system(const std::string& command);
|
||||||
|
|
||||||
//- open a shared library. Return handle to library
|
//- open a shared library. Return handle to library
|
||||||
void* dlOpen(const fileName& lib);
|
void* dlOpen(const fileName& lib);
|
||||||
@ -191,7 +191,7 @@ void* dlOpen(const fileName& lib);
|
|||||||
bool dlClose(void*);
|
bool dlClose(void*);
|
||||||
|
|
||||||
//- Lookup a symbol in a dlopened library using handle
|
//- Lookup a symbol in a dlopened library using handle
|
||||||
void* dlSym(void* handle, const string& symbol);
|
void* dlSym(void* handle, const std::string& symbol);
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -25,7 +25,7 @@ Class
|
|||||||
Foam::lduPrimitiveMesh
|
Foam::lduPrimitiveMesh
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Simplest contrete lduMesh which stores the addressing needed bu lduMatrix.
|
Simplest contrete lduMesh which stores the addressing needed by lduMatrix.
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -26,11 +26,6 @@ License
|
|||||||
#include "processorCyclicPointPatch.H"
|
#include "processorCyclicPointPatch.H"
|
||||||
#include "pointBoundaryMesh.H"
|
#include "pointBoundaryMesh.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
//#include "pointMesh.H"
|
|
||||||
//#include "globalPointPatch.H"
|
|
||||||
//#include "faceList.H"
|
|
||||||
//#include "primitiveFacePatch.H"
|
|
||||||
//#include "emptyPolyPatch.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -49,344 +44,6 @@ addToRunTimeSelectionTable
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * //
|
|
||||||
|
|
||||||
//void Foam::processorCyclicPointPatch::initGeometry(PstreamBuffers& pBufs)
|
|
||||||
//{
|
|
||||||
// // Algorithm:
|
|
||||||
// // Depending on whether the patch is a master or a slave, get the
|
|
||||||
// // primitive patch points and filter away the points from the
|
|
||||||
// // global patch.
|
|
||||||
//
|
|
||||||
// if (isMaster())
|
|
||||||
// {
|
|
||||||
// meshPoints_ = procPolyPatch_.meshPoints();
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// // Slave side. Create the reversed patch and pick up its points
|
|
||||||
// // so that the order is correct
|
|
||||||
// const polyPatch& pp = patch();
|
|
||||||
//
|
|
||||||
// faceList masterFaces(pp.size());
|
|
||||||
//
|
|
||||||
// forAll(pp, faceI)
|
|
||||||
// {
|
|
||||||
// masterFaces[faceI] = pp[faceI].reverseFace();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// meshPoints_ = primitiveFacePatch
|
|
||||||
// (
|
|
||||||
// masterFaces,
|
|
||||||
// pp.points()
|
|
||||||
// ).meshPoints();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (Pstream::parRun())
|
|
||||||
// {
|
|
||||||
// initPatchPatchPoints(pBufs);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//void Foam::processorCyclicPointPatch::calcGeometry(PstreamBuffers& pBufs)
|
|
||||||
//{
|
|
||||||
// if (Pstream::parRun())
|
|
||||||
// {
|
|
||||||
// calcPatchPatchPoints(pBufs);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // If it is not runing parallel or there are no global points
|
|
||||||
// // create a 1->1 map
|
|
||||||
// if
|
|
||||||
// (
|
|
||||||
// !Pstream::parRun()
|
|
||||||
// || !boundaryMesh().mesh().globalData().nGlobalPoints()
|
|
||||||
// )
|
|
||||||
// {
|
|
||||||
// nonGlobalPatchPoints_.setSize(meshPoints_.size());
|
|
||||||
// forAll(nonGlobalPatchPoints_, i)
|
|
||||||
// {
|
|
||||||
// nonGlobalPatchPoints_[i] = i;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// // Get reference to shared points
|
|
||||||
// const labelList& sharedPoints =
|
|
||||||
// boundaryMesh().globalPatch().meshPoints();
|
|
||||||
//
|
|
||||||
// nonGlobalPatchPoints_.setSize(meshPoints_.size());
|
|
||||||
//
|
|
||||||
// label noFiltPoints = 0;
|
|
||||||
//
|
|
||||||
// forAll(meshPoints_, pointI)
|
|
||||||
// {
|
|
||||||
// label curP = meshPoints_[pointI];
|
|
||||||
//
|
|
||||||
// bool found = false;
|
|
||||||
//
|
|
||||||
// forAll(sharedPoints, sharedI)
|
|
||||||
// {
|
|
||||||
// if (sharedPoints[sharedI] == curP)
|
|
||||||
// {
|
|
||||||
// found = true;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (!found)
|
|
||||||
// {
|
|
||||||
// nonGlobalPatchPoints_[noFiltPoints] = pointI;
|
|
||||||
// meshPoints_[noFiltPoints] = curP;
|
|
||||||
// noFiltPoints++;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// nonGlobalPatchPoints_.setSize(noFiltPoints);
|
|
||||||
// meshPoints_.setSize(noFiltPoints);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//void processorCyclicPointPatch::initPatchPatchPoints(PstreamBuffers& pBufs)
|
|
||||||
//{
|
|
||||||
// if (debug)
|
|
||||||
// {
|
|
||||||
// Info<< "processorCyclicPointPatch::"
|
|
||||||
// << "initPatchPatchPoints(PstreamBuffers&) : "
|
|
||||||
// << "constructing patch-patch points"
|
|
||||||
// << endl;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// const polyBoundaryMesh& bm = boundaryMesh().mesh()().boundaryMesh();
|
|
||||||
//
|
|
||||||
// // Get the mesh points for this patch corresponding to the faces
|
|
||||||
// const labelList& ppmp = meshPoints();
|
|
||||||
//
|
|
||||||
// // Create a HashSet of the point labels for this patch
|
|
||||||
// Map<label> patchPointSet(2*ppmp.size());
|
|
||||||
//
|
|
||||||
// forAll(ppmp, ppi)
|
|
||||||
// {
|
|
||||||
// patchPointSet.insert(ppmp[ppi], ppi);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// // Create the lists of patch-patch points
|
|
||||||
// labelListList patchPatchPoints(bm.size());
|
|
||||||
//
|
|
||||||
// // Create the lists of patch-patch point normals
|
|
||||||
// List<List<vector> > patchPatchPointNormals(bm.size());
|
|
||||||
//
|
|
||||||
// // Loop over all patches looking for other patches that share points
|
|
||||||
// forAll(bm, patchi)
|
|
||||||
// {
|
|
||||||
// if
|
|
||||||
// (
|
|
||||||
// patchi != index() // Ignore self-self
|
|
||||||
// && !isA<emptyPolyPatch>(bm[patchi]) // Ignore empty
|
|
||||||
// && !bm[patchi].coupled() // Ignore other couples
|
|
||||||
// )
|
|
||||||
// {
|
|
||||||
// // Get the meshPoints for the other patch
|
|
||||||
// const labelList& meshPoints = bm[patchi].meshPoints();
|
|
||||||
//
|
|
||||||
// // Get the normals for the other patch
|
|
||||||
// const vectorField& normals = bm[patchi].pointNormals();
|
|
||||||
//
|
|
||||||
// label pppi = 0;
|
|
||||||
// forAll(meshPoints, pointi)
|
|
||||||
// {
|
|
||||||
// label ppp = meshPoints[pointi];
|
|
||||||
//
|
|
||||||
// // Check to see if the point of the other patch is shared with
|
|
||||||
// // this patch
|
|
||||||
// Map<label>::iterator iter = patchPointSet.find(ppp);
|
|
||||||
//
|
|
||||||
// if (iter != patchPointSet.end())
|
|
||||||
// {
|
|
||||||
// // If it is shared initialise the patchPatchPoints for
|
|
||||||
// // this patch
|
|
||||||
// if (!patchPatchPoints[patchi].size())
|
|
||||||
// {
|
|
||||||
// patchPatchPoints[patchi].setSize(ppmp.size());
|
|
||||||
// patchPatchPointNormals[patchi].setSize(ppmp.size());
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // and add the entry
|
|
||||||
// patchPatchPoints[patchi][pppi] = iter();
|
|
||||||
// patchPatchPointNormals[patchi][pppi] = normals[pointi];
|
|
||||||
// pppi++;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // Resise the list of shared points and normals for the patch
|
|
||||||
// // being considerd
|
|
||||||
// patchPatchPoints[patchi].setSize(pppi);
|
|
||||||
// patchPatchPointNormals[patchi].setSize(pppi);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // Send the patchPatchPoints to the neighbouring processor
|
|
||||||
//
|
|
||||||
// UOPstream toNeighbProc(neighbProcNo(), pBufs);
|
|
||||||
//
|
|
||||||
// toNeighbProc
|
|
||||||
// << ppmp.size() // number of points for checking
|
|
||||||
// << patchPatchPoints
|
|
||||||
// << patchPatchPointNormals;
|
|
||||||
//
|
|
||||||
// if (debug)
|
|
||||||
// {
|
|
||||||
// Info<< "processorCyclicPointPatch::initPatchPatchPoints() : "
|
|
||||||
// << "constructed patch-patch points"
|
|
||||||
// << endl;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//void Foam::processorCyclicPointPatch::calcPatchPatchPoints
|
|
||||||
//(
|
|
||||||
// PstreamBuffers& pBufs
|
|
||||||
//)
|
|
||||||
//{
|
|
||||||
// // Get the patchPatchPoints from the neighbouring processor
|
|
||||||
// UIPstream fromNeighbProc(neighbProcNo(), pBufs);
|
|
||||||
//
|
|
||||||
// label nbrNPoints(readLabel(fromNeighbProc));
|
|
||||||
// labelListList patchPatchPoints(fromNeighbProc);
|
|
||||||
// List<List<vector> > patchPatchPointNormals(fromNeighbProc);
|
|
||||||
//
|
|
||||||
// pointBoundaryMesh& pbm = const_cast<pointBoundaryMesh&>(boundaryMesh());
|
|
||||||
// const labelList& ppmp = meshPoints();
|
|
||||||
//
|
|
||||||
// // Simple check for the very rare situation when not the same number
|
|
||||||
// // of points on both sides. This can happen with decomposed cyclics.
|
|
||||||
// // If on one side the cyclic shares a point with proc faces coming from
|
|
||||||
// // internal faces it will have a different number of points from
|
|
||||||
// // the situation where the cyclic and the 'normal' proc faces are fully
|
|
||||||
// // separate.
|
|
||||||
// if (nbrNPoints != ppmp.size())
|
|
||||||
// {
|
|
||||||
// WarningIn
|
|
||||||
// (
|
|
||||||
// "processorCyclicPointPatch::calcPatchPatchPoints(PstreamBuffers&)"
|
|
||||||
// )
|
|
||||||
// << "Processor patch " << name()
|
|
||||||
// << " has " << ppmp.size() << " points; coupled patch has "
|
|
||||||
// << nbrNPoints << " points." << endl
|
|
||||||
// << " (usually due to decomposed cyclics)."
|
|
||||||
// << " This might give problems" << endl
|
|
||||||
// << " when using point fields (interpolation, mesh motion)."
|
|
||||||
// << endl;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// // Loop over the patches looking for other patches that share points
|
|
||||||
// forAll(patchPatchPoints, patchi)
|
|
||||||
// {
|
|
||||||
// const labelList& patchPoints = patchPatchPoints[patchi];
|
|
||||||
// const List<vector>& patchPointNormals =
|
|
||||||
// patchPatchPointNormals[patchi];
|
|
||||||
//
|
|
||||||
// // If there are potentially shared points for the patch being
|
|
||||||
// // considered
|
|
||||||
// if (patchPoints.size())
|
|
||||||
// {
|
|
||||||
// // Get the current meshPoints list for the patch
|
|
||||||
// facePointPatch& fpp = refCast<facePointPatch>(pbm[patchi]);
|
|
||||||
// const labelList& fmp = fpp.meshPoints();
|
|
||||||
// labelList& mp = fpp.meshPoints_;
|
|
||||||
//
|
|
||||||
// const vectorField& fnormals = fpp.pointNormals();
|
|
||||||
// vectorField& normals = fpp.pointNormals_;
|
|
||||||
//
|
|
||||||
// // Create a HashSet of the point labels for the patch
|
|
||||||
// Map<label> patchPointSet(2*fmp.size());
|
|
||||||
//
|
|
||||||
// forAll(fmp, ppi)
|
|
||||||
// {
|
|
||||||
// patchPointSet.insert(fmp[ppi], ppi);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// label nPoints = mp.size();
|
|
||||||
// label lpi = 0;
|
|
||||||
// bool resized = false;
|
|
||||||
//
|
|
||||||
// // For each potentially shared point...
|
|
||||||
// forAll(patchPoints, ppi)
|
|
||||||
// {
|
|
||||||
// // Check if it is not already in the patch,
|
|
||||||
// // i.e. not part of a face of the patch
|
|
||||||
// if (!patchPointSet.found(ppmp[patchPoints[ppi]]))
|
|
||||||
// {
|
|
||||||
// // If it isn't already in the patch check if the local
|
|
||||||
// // meshPoints is already set and if not initialise the
|
|
||||||
// // meshPoints_ and pointNormals_
|
|
||||||
// if (!resized)
|
|
||||||
// {
|
|
||||||
// if (!mp.size() && fmp.size())
|
|
||||||
// {
|
|
||||||
// mp = fmp;
|
|
||||||
// normals = fnormals;
|
|
||||||
//
|
|
||||||
// nPoints = mp.size();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// mp.setSize(nPoints + patchPoints.size());
|
|
||||||
// loneMeshPoints_.setSize(patchPoints.size());
|
|
||||||
// normals.setSize(nPoints + patchPoints.size());
|
|
||||||
// resized = true;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // Add the new point to the patch
|
|
||||||
// mp[nPoints] = ppmp[patchPoints[ppi]];
|
|
||||||
// loneMeshPoints_[lpi++] = ppmp[patchPoints[ppi]];
|
|
||||||
// normals[nPoints++] = patchPointNormals[ppi];
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // If the lists have been resized points have been added.
|
|
||||||
// // Shrink the lists to the current size.
|
|
||||||
// if (resized)
|
|
||||||
// {
|
|
||||||
// mp.setSize(nPoints);
|
|
||||||
// loneMeshPoints_.setSize(lpi);
|
|
||||||
// normals.setSize(nPoints);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
//void processorCyclicPointPatch::initMovePoints
|
|
||||||
//(
|
|
||||||
// PstreamBuffers&,
|
|
||||||
// const pointField&
|
|
||||||
//)
|
|
||||||
//{}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//void processorCyclicPointPatch::movePoints(PstreamBuffers&, const pointField&)
|
|
||||||
//{}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//void processorCyclicPointPatch::initUpdateMesh(PstreamBuffers& pBufs)
|
|
||||||
//{
|
|
||||||
// facePointPatch::initUpdateMesh(pBufs);
|
|
||||||
// processorCyclicPointPatch::initGeometry(pBufs);
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//void processorCyclicPointPatch::updateMesh(PstreamBuffers& pBufs)
|
|
||||||
//{
|
|
||||||
// facePointPatch::updateMesh(pBufs);
|
|
||||||
// processorCyclicPointPatch::calcGeometry(pBufs);
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
processorCyclicPointPatch::processorCyclicPointPatch
|
processorCyclicPointPatch::processorCyclicPointPatch
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -99,43 +99,6 @@ public:
|
|||||||
return procCycPolyPatch_.tag();
|
return procCycPolyPatch_.tag();
|
||||||
}
|
}
|
||||||
|
|
||||||
// //- Return true if running parallel
|
|
||||||
// virtual bool coupled() const
|
|
||||||
// {
|
|
||||||
// if (Pstream::parRun())
|
|
||||||
// {
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //- Return processor number
|
|
||||||
// int myProcNo() const
|
|
||||||
// {
|
|
||||||
// return procPolyPatch_.myProcNo();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //- Return neigbour processor number
|
|
||||||
// int neighbProcNo() const
|
|
||||||
// {
|
|
||||||
// return procPolyPatch_.neighbProcNo();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //- Is this a master patch
|
|
||||||
// bool isMaster() const
|
|
||||||
// {
|
|
||||||
// return myProcNo() < neighbProcNo();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //- Is this a slave patch
|
|
||||||
// bool isSlave() const
|
|
||||||
// {
|
|
||||||
// return !isMaster();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//- Return the underlying processorCyclicPolyPatch
|
//- Return the underlying processorCyclicPolyPatch
|
||||||
const processorCyclicPolyPatch& procCyclicPolyPatch() const
|
const processorCyclicPolyPatch& procCyclicPolyPatch() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -550,7 +550,7 @@ Foam::label Foam::polyBoundaryMesh::whichPatch(const label faceIndex) const
|
|||||||
|
|
||||||
Foam::labelHashSet Foam::polyBoundaryMesh::patchSet
|
Foam::labelHashSet Foam::polyBoundaryMesh::patchSet
|
||||||
(
|
(
|
||||||
const wordReList& patchNames,
|
const UList<wordRe>& patchNames,
|
||||||
const bool warnNotFound
|
const bool warnNotFound
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -38,7 +38,6 @@ SourceFiles
|
|||||||
#include "polyPatchList.H"
|
#include "polyPatchList.H"
|
||||||
#include "regIOobject.H"
|
#include "regIOobject.H"
|
||||||
#include "labelPair.H"
|
#include "labelPair.H"
|
||||||
#include "wordReList.H"
|
|
||||||
#include "HashSet.H"
|
#include "HashSet.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -46,7 +45,9 @@ SourceFiles
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Forward declaration of classes
|
||||||
class polyMesh;
|
class polyMesh;
|
||||||
|
class wordRe;
|
||||||
|
|
||||||
// Forward declaration of friend functions and operators
|
// Forward declaration of friend functions and operators
|
||||||
|
|
||||||
@ -171,7 +172,7 @@ public:
|
|||||||
// By default warns if given names are not found.
|
// By default warns if given names are not found.
|
||||||
labelHashSet patchSet
|
labelHashSet patchSet
|
||||||
(
|
(
|
||||||
const wordReList& patchNames,
|
const UList<wordRe>& patchNames,
|
||||||
const bool warnNotFound = true
|
const bool warnNotFound = true
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -73,19 +73,6 @@ protected:
|
|||||||
//- Initialise the calculation of the patch geometry
|
//- Initialise the calculation of the patch geometry
|
||||||
void initGeometry(PstreamBuffers&);
|
void initGeometry(PstreamBuffers&);
|
||||||
|
|
||||||
// //- Initialise the calculation of the patch geometry with externally
|
|
||||||
// // provided geometry
|
|
||||||
// virtual void initGeometry
|
|
||||||
// (
|
|
||||||
// const primitivePatch& referPatch,
|
|
||||||
// UList<point>&,
|
|
||||||
// UList<point>&,
|
|
||||||
// UList<point>&
|
|
||||||
// )
|
|
||||||
// {
|
|
||||||
// notImplemented("processorCyclicPolyPatch::initGeometry(..)");
|
|
||||||
// }
|
|
||||||
|
|
||||||
//- Calculate the patch geometry
|
//- Calculate the patch geometry
|
||||||
void calcGeometry(PstreamBuffers&);
|
void calcGeometry(PstreamBuffers&);
|
||||||
|
|
||||||
@ -286,36 +273,6 @@ public:
|
|||||||
return referPatch().owner();
|
return referPatch().owner();
|
||||||
}
|
}
|
||||||
|
|
||||||
// //- Transform a patch-based field from other side to this side.
|
|
||||||
// virtual bool doTransform() const
|
|
||||||
// {
|
|
||||||
// return referPatch().doTransform();
|
|
||||||
// }
|
|
||||||
// virtual void transform(scalarField& l) const
|
|
||||||
// {
|
|
||||||
// referPatch().transform(l);
|
|
||||||
// }
|
|
||||||
// virtual void transform(vectorField& l) const
|
|
||||||
// {
|
|
||||||
// referPatch().transform(l);
|
|
||||||
// }
|
|
||||||
// virtual void transform(sphericalTensorField& l) const
|
|
||||||
// {
|
|
||||||
// referPatch().transform(l);
|
|
||||||
// }
|
|
||||||
// virtual void transform(diagTensorField& l) const
|
|
||||||
// {
|
|
||||||
// referPatch().transform(l);
|
|
||||||
// }
|
|
||||||
// virtual void transform(symmTensorField& l) const
|
|
||||||
// {
|
|
||||||
// referPatch().transform(l);
|
|
||||||
// }
|
|
||||||
// virtual void transform(tensorField& l) const
|
|
||||||
// {
|
|
||||||
// referPatch().transform(l);
|
|
||||||
// }
|
|
||||||
|
|
||||||
//- Transform a patch-based position from other side to this side
|
//- Transform a patch-based position from other side to this side
|
||||||
virtual void transformPosition(pointField& l) const
|
virtual void transformPosition(pointField& l) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -101,6 +101,22 @@ bool Foam::SHA1Digest::empty() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string Foam::SHA1Digest::str() const
|
||||||
|
{
|
||||||
|
std::string buf;
|
||||||
|
buf.resize(length*2);
|
||||||
|
|
||||||
|
unsigned nChar = 0;
|
||||||
|
for (unsigned i = 0; i < length; ++i)
|
||||||
|
{
|
||||||
|
buf[nChar++] = hexChars[((v_[i] >> 4) & 0xF)];
|
||||||
|
buf[nChar++] = hexChars[(v_[i] & 0xF)];
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool Foam::SHA1Digest::operator==(const SHA1Digest& rhs) const
|
bool Foam::SHA1Digest::operator==(const SHA1Digest& rhs) const
|
||||||
|
|||||||
@ -80,6 +80,9 @@ public:
|
|||||||
//- Return true if the digest is empty (ie, all zero).
|
//- Return true if the digest is empty (ie, all zero).
|
||||||
bool empty() const;
|
bool empty() const;
|
||||||
|
|
||||||
|
//- Return string representation
|
||||||
|
std::string str() const;
|
||||||
|
|
||||||
//- Equality operator
|
//- Equality operator
|
||||||
bool operator==(const SHA1Digest&) const;
|
bool operator==(const SHA1Digest&) const;
|
||||||
|
|
||||||
|
|||||||
@ -96,75 +96,79 @@ Foam::string& Foam::string::replaceAll
|
|||||||
// Expand all occurences of environment variables and initial tilde sequences
|
// Expand all occurences of environment variables and initial tilde sequences
|
||||||
Foam::string& Foam::string::expand(const bool recurse, const bool allowEmptyVar)
|
Foam::string& Foam::string::expand(const bool recurse, const bool allowEmptyVar)
|
||||||
{
|
{
|
||||||
size_type startEnvar = 0;
|
size_type begVar = 0;
|
||||||
|
|
||||||
// Expand $VARS
|
// Expand $VARS
|
||||||
// Repeat until nothing more is found
|
// Repeat until nothing more is found
|
||||||
while
|
while
|
||||||
(
|
(
|
||||||
(startEnvar = find('$', startEnvar)) != npos
|
(begVar = find('$', begVar)) != npos
|
||||||
&& startEnvar < size()-1
|
&& begVar < size()-1
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (startEnvar == 0 || operator[](startEnvar-1) != '\\')
|
if (begVar == 0 || operator[](begVar-1) != '\\')
|
||||||
{
|
{
|
||||||
// Find end of first occurrence
|
// Find end of first occurrence
|
||||||
size_type endEnvar = startEnvar;
|
size_type endVar = begVar;
|
||||||
size_type nd = 0;
|
size_type delim = 0;
|
||||||
|
|
||||||
if (operator[](startEnvar+1) == '{')
|
if (operator[](begVar+1) == '{')
|
||||||
{
|
{
|
||||||
endEnvar = find('}', startEnvar);
|
endVar = find('}', begVar);
|
||||||
nd = 1;
|
delim = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
iterator iter = begin() + startEnvar + 1;
|
iterator iter = begin() + begVar + 1;
|
||||||
|
|
||||||
while (iter != end() && (isalnum(*iter) || *iter == '_'))
|
while
|
||||||
|
(
|
||||||
|
iter != end()
|
||||||
|
&& (isalnum(*iter) || *iter == '_')
|
||||||
|
)
|
||||||
{
|
{
|
||||||
++iter;
|
++iter;
|
||||||
++endEnvar;
|
++endVar;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (endEnvar != npos && endEnvar != startEnvar)
|
if (endVar != npos && endVar != begVar)
|
||||||
{
|
{
|
||||||
string enVar = substr
|
string varName = substr
|
||||||
(
|
(
|
||||||
startEnvar + 1 + nd,
|
begVar + 1 + delim,
|
||||||
endEnvar - startEnvar - 2*nd
|
endVar - begVar - 2*delim
|
||||||
);
|
);
|
||||||
|
|
||||||
string enVarString = getEnv(enVar);
|
string varValue = getEnv(varName);
|
||||||
|
|
||||||
if (enVarString.size())
|
if (varValue.size())
|
||||||
{
|
{
|
||||||
if (recurse)
|
if (recurse)
|
||||||
{
|
{
|
||||||
enVarString.expand(recurse, allowEmptyVar);
|
varValue.expand(recurse, allowEmptyVar);
|
||||||
}
|
}
|
||||||
std::string::replace
|
std::string::replace
|
||||||
(
|
(
|
||||||
startEnvar,
|
begVar,
|
||||||
endEnvar - startEnvar + 1,
|
endVar - begVar + 1,
|
||||||
enVarString
|
varValue
|
||||||
);
|
);
|
||||||
startEnvar += enVarString.size();
|
begVar += varValue.size();
|
||||||
}
|
}
|
||||||
else if (allowEmptyVar)
|
else if (allowEmptyVar)
|
||||||
{
|
{
|
||||||
std::string::replace
|
std::string::replace
|
||||||
(
|
(
|
||||||
startEnvar,
|
begVar,
|
||||||
endEnvar - startEnvar + 1,
|
endVar - begVar + 1,
|
||||||
""
|
""
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FatalErrorIn("string::expand(const bool, const bool)")
|
FatalErrorIn("string::expand(const bool, const bool)")
|
||||||
<< "Unknown variable name " << enVar << '.'
|
<< "Unknown variable name " << varName << '.'
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -175,7 +179,7 @@ Foam::string& Foam::string::expand(const bool recurse, const bool allowEmptyVar)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
startEnvar++;
|
++begVar;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,10 +195,10 @@ Foam::string& Foam::string::expand(const bool recurse, const bool allowEmptyVar)
|
|||||||
word user;
|
word user;
|
||||||
fileName file;
|
fileName file;
|
||||||
|
|
||||||
if ((startEnvar = find('/')) != npos)
|
if ((begVar = find('/')) != npos)
|
||||||
{
|
{
|
||||||
user = substr(1, startEnvar - 1);
|
user = substr(1, begVar - 1);
|
||||||
file = substr(startEnvar + 1);
|
file = substr(begVar + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -215,7 +219,7 @@ Foam::string& Foam::string::expand(const bool recurse, const bool allowEmptyVar)
|
|||||||
}
|
}
|
||||||
else if (operator[](0) == '.')
|
else if (operator[](0) == '.')
|
||||||
{
|
{
|
||||||
// Expand initial '.' and './' into cwd
|
// Expand a lone '.' and an initial './' into cwd
|
||||||
if (size() == 1)
|
if (size() == 1)
|
||||||
{
|
{
|
||||||
*this = cwd();
|
*this = cwd();
|
||||||
|
|||||||
383
src/OpenFOAM/primitives/strings/stringOps/stringOps.C
Normal file
383
src/OpenFOAM/primitives/strings/stringOps/stringOps.C
Normal file
@ -0,0 +1,383 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2011-2011 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 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "stringOps.H"
|
||||||
|
#include "OSspecific.H"
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::string Foam::stringOps::expand
|
||||||
|
(
|
||||||
|
const string& original,
|
||||||
|
const HashTable<string, word, string::hash>& mapping,
|
||||||
|
const char sigil
|
||||||
|
)
|
||||||
|
{
|
||||||
|
string s(original);
|
||||||
|
return inplaceExpand(s, mapping);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::string& Foam::stringOps::inplaceExpand
|
||||||
|
(
|
||||||
|
string& s,
|
||||||
|
const HashTable<string, word, string::hash>& mapping,
|
||||||
|
const char sigil
|
||||||
|
)
|
||||||
|
{
|
||||||
|
string::size_type begVar = 0;
|
||||||
|
|
||||||
|
// Expand $VAR or ${VAR}
|
||||||
|
// Repeat until nothing more is found
|
||||||
|
while
|
||||||
|
(
|
||||||
|
(begVar = s.find(sigil, begVar)) != string::npos
|
||||||
|
&& begVar < s.size()-1
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (begVar == 0 || s[begVar-1] != '\\')
|
||||||
|
{
|
||||||
|
// Find end of first occurrence
|
||||||
|
string::size_type endVar = begVar;
|
||||||
|
string::size_type delim = 0;
|
||||||
|
|
||||||
|
if (s[begVar+1] == '{')
|
||||||
|
{
|
||||||
|
endVar = s.find('}', begVar);
|
||||||
|
delim = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string::iterator iter = s.begin() + begVar + 1;
|
||||||
|
|
||||||
|
while
|
||||||
|
(
|
||||||
|
iter != s.end()
|
||||||
|
&& (isalnum(*iter) || *iter == '_')
|
||||||
|
)
|
||||||
|
{
|
||||||
|
++iter;
|
||||||
|
++endVar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (endVar != string::npos && endVar != begVar)
|
||||||
|
{
|
||||||
|
string varName = s.substr
|
||||||
|
(
|
||||||
|
begVar + 1 + delim,
|
||||||
|
endVar - begVar - 2*delim
|
||||||
|
);
|
||||||
|
|
||||||
|
HashTable<string, word, string::hash>::const_iterator fnd =
|
||||||
|
mapping.find(varName);
|
||||||
|
|
||||||
|
if (fnd != HashTable<string, word, string::hash>::end())
|
||||||
|
{
|
||||||
|
s.std::string::replace
|
||||||
|
(
|
||||||
|
begVar,
|
||||||
|
endVar - begVar + 1,
|
||||||
|
*fnd
|
||||||
|
);
|
||||||
|
begVar += (*fnd).size();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s.std::string::replace
|
||||||
|
(
|
||||||
|
begVar,
|
||||||
|
endVar - begVar + 1,
|
||||||
|
""
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++begVar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::string Foam::stringOps::expandEnv
|
||||||
|
(
|
||||||
|
const string& original,
|
||||||
|
const bool recurse,
|
||||||
|
const bool allowEmptyVar
|
||||||
|
)
|
||||||
|
{
|
||||||
|
string s(original);
|
||||||
|
return inplaceExpandEnv(s, recurse, allowEmptyVar);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Expand all occurences of environment variables and initial tilde sequences
|
||||||
|
Foam::string& Foam::stringOps::inplaceExpandEnv
|
||||||
|
(
|
||||||
|
string& s,
|
||||||
|
const bool recurse,
|
||||||
|
const bool allowEmptyVar
|
||||||
|
)
|
||||||
|
{
|
||||||
|
string::size_type begVar = 0;
|
||||||
|
|
||||||
|
// Expand $VARS
|
||||||
|
// Repeat until nothing more is found
|
||||||
|
while
|
||||||
|
(
|
||||||
|
(begVar = s.find('$', begVar)) != string::npos
|
||||||
|
&& begVar < s.size()-1
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (begVar == 0 || s[begVar-1] != '\\')
|
||||||
|
{
|
||||||
|
// Find end of first occurrence
|
||||||
|
string::size_type endVar = begVar;
|
||||||
|
string::size_type delim = 0;
|
||||||
|
|
||||||
|
if (s[begVar+1] == '{')
|
||||||
|
{
|
||||||
|
endVar = s.find('}', begVar);
|
||||||
|
delim = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string::iterator iter = s.begin() + begVar + 1;
|
||||||
|
|
||||||
|
while
|
||||||
|
(
|
||||||
|
iter != s.end()
|
||||||
|
&& (isalnum(*iter) || *iter == '_')
|
||||||
|
)
|
||||||
|
{
|
||||||
|
++iter;
|
||||||
|
++endVar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (endVar != string::npos && endVar != begVar)
|
||||||
|
{
|
||||||
|
string varName = s.substr
|
||||||
|
(
|
||||||
|
begVar + 1 + delim,
|
||||||
|
endVar - begVar - 2*delim
|
||||||
|
);
|
||||||
|
|
||||||
|
string varValue = getEnv(varName);
|
||||||
|
|
||||||
|
if (varValue.size())
|
||||||
|
{
|
||||||
|
if (recurse)
|
||||||
|
{
|
||||||
|
varValue.expand(recurse, allowEmptyVar);
|
||||||
|
}
|
||||||
|
s.std::string::replace
|
||||||
|
(
|
||||||
|
begVar,
|
||||||
|
endVar - begVar + 1,
|
||||||
|
varValue
|
||||||
|
);
|
||||||
|
begVar += varValue.size();
|
||||||
|
}
|
||||||
|
else if (allowEmptyVar)
|
||||||
|
{
|
||||||
|
s.std::string::replace
|
||||||
|
(
|
||||||
|
begVar,
|
||||||
|
endVar - begVar + 1,
|
||||||
|
""
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FatalErrorIn("string::expand(const bool, const bool)")
|
||||||
|
<< "Unknown variable name " << varName << '.'
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++begVar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!s.empty())
|
||||||
|
{
|
||||||
|
if (s[0] == '~')
|
||||||
|
{
|
||||||
|
// Expand initial ~
|
||||||
|
// ~/ => home directory
|
||||||
|
// ~OpenFOAM => site/user OpenFOAM configuration directory
|
||||||
|
// ~user => home directory for specified user
|
||||||
|
|
||||||
|
word user;
|
||||||
|
fileName file;
|
||||||
|
|
||||||
|
if ((begVar = s.find('/')) != string::npos)
|
||||||
|
{
|
||||||
|
user = s.substr(1, begVar - 1);
|
||||||
|
file = s.substr(begVar + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
user = s.substr(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// NB: be a bit lazy and expand ~unknownUser as an
|
||||||
|
// empty string rather than leaving it untouched.
|
||||||
|
// otherwise add extra test
|
||||||
|
if (user == "OpenFOAM")
|
||||||
|
{
|
||||||
|
s = findEtcFile(file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s = home(user)/file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (s[0] == '.')
|
||||||
|
{
|
||||||
|
// Expand a lone '.' and an initial './' into cwd
|
||||||
|
if (s.size() == 1)
|
||||||
|
{
|
||||||
|
s = cwd();
|
||||||
|
}
|
||||||
|
else if (s[1] == '/')
|
||||||
|
{
|
||||||
|
s.std::string::replace(0, 1, cwd());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::string Foam::stringOps::trimLeft(const string& s)
|
||||||
|
{
|
||||||
|
if (!s.empty())
|
||||||
|
{
|
||||||
|
string::size_type beg = 0;
|
||||||
|
while (isspace(s[beg]))
|
||||||
|
{
|
||||||
|
++beg;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (beg)
|
||||||
|
{
|
||||||
|
return s.substr(beg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::string& Foam::stringOps::inplaceTrimLeft(string& s)
|
||||||
|
{
|
||||||
|
if (!s.empty())
|
||||||
|
{
|
||||||
|
string::size_type beg = 0;
|
||||||
|
while (isspace(s[beg]))
|
||||||
|
{
|
||||||
|
++beg;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (beg)
|
||||||
|
{
|
||||||
|
s.erase(0, beg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::string Foam::stringOps::trimRight(const string& s)
|
||||||
|
{
|
||||||
|
if (!s.empty())
|
||||||
|
{
|
||||||
|
string::size_type sz = s.size();
|
||||||
|
while (sz && isspace(s[sz-1]))
|
||||||
|
{
|
||||||
|
--sz;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sz < s.size())
|
||||||
|
{
|
||||||
|
return s.substr(0, sz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::string& Foam::stringOps::inplaceTrimRight(string& s)
|
||||||
|
{
|
||||||
|
if (!s.empty())
|
||||||
|
{
|
||||||
|
string::size_type sz = s.size();
|
||||||
|
while (sz && isspace(s[sz-1]))
|
||||||
|
{
|
||||||
|
--sz;
|
||||||
|
}
|
||||||
|
|
||||||
|
s.resize(sz);
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::string Foam::stringOps::trim(const string& original)
|
||||||
|
{
|
||||||
|
return trimLeft(trimRight(original));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::string& Foam::stringOps::inplaceTrim(string& s)
|
||||||
|
{
|
||||||
|
inplaceTrimRight(s);
|
||||||
|
inplaceTrimLeft(s);
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
159
src/OpenFOAM/primitives/strings/stringOps/stringOps.H
Normal file
159
src/OpenFOAM/primitives/strings/stringOps/stringOps.H
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2011-2011 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 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Namespace
|
||||||
|
Foam::stringOps
|
||||||
|
|
||||||
|
Description
|
||||||
|
Collection of static functions to do various simple string-related
|
||||||
|
operations
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
stringOps.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
#ifndef stringOps_H
|
||||||
|
#define stringOps_H
|
||||||
|
|
||||||
|
#include "string.H"
|
||||||
|
#include "HashTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Namespace stringOps Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
namespace stringOps
|
||||||
|
{
|
||||||
|
//- Expand occurences of variables according to the mapping
|
||||||
|
// Expansion includes:
|
||||||
|
// -# variables
|
||||||
|
// - "$VAR", "${VAR}"
|
||||||
|
//
|
||||||
|
// \note the leading sigil can be changed to avoid conflicts with other
|
||||||
|
// string expansions
|
||||||
|
string expand
|
||||||
|
(
|
||||||
|
const string&,
|
||||||
|
const HashTable<string, word, string::hash>& mapping,
|
||||||
|
const char sigil = '$'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Inplace expand occurences of variables according to the mapping
|
||||||
|
// Expansion includes:
|
||||||
|
// -# variables
|
||||||
|
// - "$VAR", "${VAR}"
|
||||||
|
//
|
||||||
|
// \note the leading sigil can be changed to avoid conflicts with other
|
||||||
|
// string expansions
|
||||||
|
string& inplaceExpand
|
||||||
|
(
|
||||||
|
string&,
|
||||||
|
const HashTable<string, word, string::hash>& mapping,
|
||||||
|
const char sigil = '$'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Expand initial tildes and all occurences of environment variables
|
||||||
|
// Expansion includes:
|
||||||
|
// -# environment variables
|
||||||
|
// - "$VAR", "${VAR}"
|
||||||
|
// -# current directory
|
||||||
|
// - leading "./" : the current directory
|
||||||
|
// -# tilde expansion
|
||||||
|
// - leading "~/" : home directory
|
||||||
|
// - leading "~user" : home directory for specified user
|
||||||
|
// - leading "~OpenFOAM" : site/user OpenFOAM configuration directory
|
||||||
|
//
|
||||||
|
// \sa
|
||||||
|
// Foam::findEtcFile
|
||||||
|
string expandEnv
|
||||||
|
(
|
||||||
|
const string&,
|
||||||
|
const bool recurse=false,
|
||||||
|
const bool allowEmptyVar = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Expand initial tildes and all occurences of environment variables
|
||||||
|
// Expansion includes:
|
||||||
|
// -# environment variables
|
||||||
|
// - "$VAR", "${VAR}"
|
||||||
|
// -# current directory
|
||||||
|
// - leading "./" : the current directory
|
||||||
|
// -# tilde expansion
|
||||||
|
// - leading "~/" : home directory
|
||||||
|
// - leading "~user" : home directory for specified user
|
||||||
|
// - leading "~OpenFOAM" : site/user OpenFOAM configuration directory
|
||||||
|
//
|
||||||
|
// \sa
|
||||||
|
// Foam::findEtcFile
|
||||||
|
string& inplaceExpandEnv
|
||||||
|
(
|
||||||
|
string&,
|
||||||
|
const bool recurse=false,
|
||||||
|
const bool allowEmptyVar = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Return string trimmed of leading whitespace
|
||||||
|
string trimLeft(const string&);
|
||||||
|
|
||||||
|
//- Trim leading whitespace inplace
|
||||||
|
string& inplaceTrimLeft(string&);
|
||||||
|
|
||||||
|
//- Return string trimmed of trailing whitespace
|
||||||
|
// NOT IMPLEMENTED
|
||||||
|
string trimRight(const string&);
|
||||||
|
|
||||||
|
//- Trim trailing whitespace inplace
|
||||||
|
// NOT IMPLEMENTED
|
||||||
|
string& inplaceTrimRight(string&);
|
||||||
|
|
||||||
|
//- Return string trimmed of leading and trailing whitespace
|
||||||
|
// NOT IMPLEMENTED
|
||||||
|
string trim(const string&);
|
||||||
|
|
||||||
|
//- Trim leading and trailing whitespace inplace
|
||||||
|
// NOT IMPLEMENTED
|
||||||
|
string& inplaceTrim(string&);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} // End namespace stringOps
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -35,8 +35,6 @@ SourceFiles
|
|||||||
#ifndef processorCyclicFvPatchField_H
|
#ifndef processorCyclicFvPatchField_H
|
||||||
#define processorCyclicFvPatchField_H
|
#define processorCyclicFvPatchField_H
|
||||||
|
|
||||||
//#include "coupledFvPatchField.H"
|
|
||||||
//#include "processorLduInterfaceField.H"
|
|
||||||
#include "processorCyclicFvPatch.H"
|
#include "processorCyclicFvPatch.H"
|
||||||
#include "processorFvPatchField.H"
|
#include "processorFvPatchField.H"
|
||||||
|
|
||||||
@ -52,8 +50,6 @@ namespace Foam
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class processorCyclicFvPatchField
|
class processorCyclicFvPatchField
|
||||||
:
|
:
|
||||||
// public processorLduInterfaceField,
|
|
||||||
// public coupledFvPatchField<Type>
|
|
||||||
public processorFvPatchField<Type>
|
public processorFvPatchField<Type>
|
||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
@ -61,14 +57,6 @@ class processorCyclicFvPatchField
|
|||||||
//- Local reference cast into the processor patch
|
//- Local reference cast into the processor patch
|
||||||
const processorCyclicFvPatch& procPatch_;
|
const processorCyclicFvPatch& procPatch_;
|
||||||
|
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
// //- Get other patchfield
|
|
||||||
// const coupledFvPatchField<Type>& patchField
|
|
||||||
// (
|
|
||||||
// const label patchID
|
|
||||||
// ) const;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
@ -151,70 +139,6 @@ public:
|
|||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
// //- Return true if running parallel
|
|
||||||
// virtual bool coupled() const
|
|
||||||
// {
|
|
||||||
// if (Pstream::parRun())
|
|
||||||
// {
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //- Return neighbour field given internal field
|
|
||||||
// tmp<Field<Type> > patchNeighbourField() const;
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// // Evaluation functions
|
|
||||||
//
|
|
||||||
// //- Initialise the evaluation of the patch field
|
|
||||||
// virtual void initEvaluate(const Pstream::commsTypes commsType);
|
|
||||||
//
|
|
||||||
// //- Evaluate the patch field
|
|
||||||
// virtual void evaluate(const Pstream::commsTypes commsType);
|
|
||||||
//
|
|
||||||
// //- Return patch-normal gradient
|
|
||||||
// virtual tmp<Field<Type> > snGrad() const;
|
|
||||||
//
|
|
||||||
// //- Initialise neighbour matrix update
|
|
||||||
// virtual void initInterfaceMatrixUpdate
|
|
||||||
// (
|
|
||||||
// const scalarField& psiInternal,
|
|
||||||
// scalarField& result,
|
|
||||||
// const lduMatrix& m,
|
|
||||||
// const scalarField& coeffs,
|
|
||||||
// const direction cmpt,
|
|
||||||
// const Pstream::commsTypes commsType
|
|
||||||
// ) const;
|
|
||||||
//
|
|
||||||
// //- Update result field based on interface functionality
|
|
||||||
// virtual void updateInterfaceMatrix
|
|
||||||
// (
|
|
||||||
// const scalarField& psiInternal,
|
|
||||||
// scalarField& result,
|
|
||||||
// const lduMatrix& m,
|
|
||||||
// const scalarField& coeffs,
|
|
||||||
// const direction cmpt,
|
|
||||||
// const Pstream::commsTypes commsType
|
|
||||||
// ) const;
|
|
||||||
//
|
|
||||||
// //- Processor coupled interface functions
|
|
||||||
//
|
|
||||||
// //- Return processor number
|
|
||||||
// virtual int myProcNo() const
|
|
||||||
// {
|
|
||||||
// return procPatch_.myProcNo();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //- Return neigbour processor number
|
|
||||||
// virtual int neighbProcNo() const
|
|
||||||
// {
|
|
||||||
// return procPatch_.neighbProcNo();
|
|
||||||
// }
|
|
||||||
|
|
||||||
//- Does the patch field perform the transfromation
|
//- Does the patch field perform the transfromation
|
||||||
virtual bool doTransform() const
|
virtual bool doTransform() const
|
||||||
{
|
{
|
||||||
@ -227,103 +151,6 @@ public:
|
|||||||
return procPatch_.forwardT();
|
return procPatch_.forwardT();
|
||||||
}
|
}
|
||||||
|
|
||||||
// //- Return rank of component for transform
|
|
||||||
// virtual int rank() const
|
|
||||||
// {
|
|
||||||
// return pTraits<Type>::rank;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //- Transform given patch component field
|
|
||||||
// void transformCoupleField
|
|
||||||
// (
|
|
||||||
// scalarField& f,
|
|
||||||
// const direction cmpt
|
|
||||||
// ) const;
|
|
||||||
|
|
||||||
// // Referred-patch functionality. Get called with a slice (size, start)
|
|
||||||
// // of a patch that supplies fields and geometry/topology.
|
|
||||||
//
|
|
||||||
// //- Get patch-normal gradient
|
|
||||||
// virtual void snGrad
|
|
||||||
// (
|
|
||||||
// Field<Type>& exchangeBuf,
|
|
||||||
// const Field<Type>& subFld,
|
|
||||||
// const coupledFvPatch& referringPatch,
|
|
||||||
// const label size,
|
|
||||||
// const label start
|
|
||||||
// ) const
|
|
||||||
// {
|
|
||||||
// notImplemented("processorCyclicFvPatchField::snGrad(..)");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //- Initialise the evaluation of the patch field.
|
|
||||||
// virtual void initEvaluate
|
|
||||||
// (
|
|
||||||
// Field<Type>& exchangeBuf,
|
|
||||||
// const coupledFvPatch& referringPatch,
|
|
||||||
// const label size,
|
|
||||||
// const label start
|
|
||||||
// ) const
|
|
||||||
// {
|
|
||||||
// notImplemented
|
|
||||||
// (
|
|
||||||
// "processorCyclicFvPatchField::initEvaluate(..)"
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //- Evaluate the patch field.
|
|
||||||
// virtual void evaluate
|
|
||||||
// (
|
|
||||||
// Field<Type>& exchangeBuf,
|
|
||||||
// const coupledFvPatch& referringPatch,
|
|
||||||
// const label size,
|
|
||||||
// const label start
|
|
||||||
// ) const
|
|
||||||
// {
|
|
||||||
// notImplemented("processorCyclicFvPatchField::evaluate(..)");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //- Initialise neighbour matrix update
|
|
||||||
// virtual void initInterfaceMatrixUpdate
|
|
||||||
// (
|
|
||||||
// const scalarField& psiInternal,
|
|
||||||
// scalarField& result,
|
|
||||||
// const lduMatrix& m,
|
|
||||||
// const scalarField& coeffs,
|
|
||||||
// const direction cmpt,
|
|
||||||
// const coupledFvPatch& referringPatch,
|
|
||||||
// const label size,
|
|
||||||
// const label start,
|
|
||||||
// scalarField& exchangeBuf
|
|
||||||
// ) const
|
|
||||||
// {
|
|
||||||
// notImplemented
|
|
||||||
// (
|
|
||||||
// "processorCyclicFvPatchField::"
|
|
||||||
// "initInterfaceMatrixUpdate(..)"
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //- Update result field based on interface functionality
|
|
||||||
// virtual void updateInterfaceMatrix
|
|
||||||
// (
|
|
||||||
// const scalarField& psiInternal,
|
|
||||||
// scalarField& result,
|
|
||||||
// const lduMatrix&,
|
|
||||||
// const scalarField& coeffs,
|
|
||||||
// const direction,
|
|
||||||
// const coupledFvPatch& referringPatch,
|
|
||||||
// const label size,
|
|
||||||
// const label start,
|
|
||||||
// scalarField& exchangeBuf
|
|
||||||
// ) const
|
|
||||||
// {
|
|
||||||
// notImplemented
|
|
||||||
// (
|
|
||||||
// "processorCyclicFvPatchField::updateInterfaceMatrix(..)"
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -44,7 +44,7 @@ namespace Foam
|
|||||||
{
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class codeProperties Declaration
|
Class codeProperties Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class codeProperties
|
class codeProperties
|
||||||
@ -79,7 +79,7 @@ public:
|
|||||||
modified_ = false;
|
modified_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Read the solution dictionary
|
//- Read the dictionary
|
||||||
virtual bool read();
|
virtual bool read();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -32,8 +32,20 @@ License
|
|||||||
#include "dlLibraryTable.H"
|
#include "dlLibraryTable.H"
|
||||||
#include "IFstream.H"
|
#include "IFstream.H"
|
||||||
#include "OFstream.H"
|
#include "OFstream.H"
|
||||||
|
#include "SHA1Digest.H"
|
||||||
|
#include "OSHA1stream.H"
|
||||||
#include "codeStreamTools.H"
|
#include "codeStreamTools.H"
|
||||||
#include "codeProperties.H"
|
#include "codeProperties.H"
|
||||||
|
#include "stringOps.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
const Foam::word Foam::codedFixedValueFvPatchScalarField::codeTemplateC
|
||||||
|
= "fixedValueFvPatchScalarFieldTemplate.C";
|
||||||
|
|
||||||
|
const Foam::word Foam::codedFixedValueFvPatchScalarField::codeTemplateH
|
||||||
|
= "fixedValueFvPatchScalarFieldTemplate.H";
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -68,81 +80,103 @@ Foam::codedFixedValueFvPatchScalarField::dict() const
|
|||||||
|
|
||||||
void Foam::codedFixedValueFvPatchScalarField::writeLibrary
|
void Foam::codedFixedValueFvPatchScalarField::writeLibrary
|
||||||
(
|
(
|
||||||
const fileName dir,
|
const fileName& codePath,
|
||||||
const fileName libPath,
|
const fileName& libPath,
|
||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Info<< "Creating new library in " << libPath << endl;
|
|
||||||
|
|
||||||
// Write files for new library
|
// Write files for new library
|
||||||
if (Pstream::master())
|
if (!Pstream::master())
|
||||||
{
|
{
|
||||||
fileName templates(Foam::getEnv("FOAM_CODESTREAM_TEMPLATE_DIR"));
|
return;
|
||||||
if (!templates.size())
|
}
|
||||||
|
|
||||||
|
// "codeInclude" is optional
|
||||||
|
string codeInclude;
|
||||||
|
if (dict.found("codeInclude"))
|
||||||
|
{
|
||||||
|
codeInclude = stringOps::trim(dict["codeInclude"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// "codeOptions" is optional
|
||||||
|
string codeOptions;
|
||||||
|
if (dict.found("codeOptions"))
|
||||||
|
{
|
||||||
|
codeOptions = stringOps::trim(dict["codeOptions"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// "code" is mandatory
|
||||||
|
string code = stringOps::trim(dict["code"]);
|
||||||
|
|
||||||
|
// Create SHA1 digest from the contents
|
||||||
|
SHA1Digest sha;
|
||||||
|
{
|
||||||
|
OSHA1stream os;
|
||||||
|
os << codeInclude << codeOptions << code;
|
||||||
|
sha = os.digest();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Info<<"old SHA1: " << sha1_ << nl
|
||||||
|
// <<"new SHA1: " << sha << endl;
|
||||||
|
|
||||||
|
|
||||||
|
// (void) codeStreamTools::upToDate(codePath, sha)
|
||||||
|
// TODO: compile on-demand
|
||||||
|
if (true)
|
||||||
|
{
|
||||||
|
Info<< "Creating new library in " << libPath << endl;
|
||||||
|
|
||||||
|
const fileName fileCsrc(codeStreamTools::findTemplate(codeTemplateC));
|
||||||
|
const fileName fileHsrc(codeStreamTools::findTemplate(codeTemplateH));
|
||||||
|
|
||||||
|
// not found!
|
||||||
|
if (fileCsrc.empty() || fileHsrc.empty())
|
||||||
{
|
{
|
||||||
FatalIOErrorIn
|
FatalIOErrorIn
|
||||||
(
|
(
|
||||||
"codedFixedValueFvPatchScalarField::writeLibrary(..)",
|
"codedFixedValueFvPatchScalarField::writeLibrary(..)",
|
||||||
dict
|
dict
|
||||||
) << "Please set environment variable"
|
) << "Could not find one or both code templates: "
|
||||||
<< " FOAM_CODESTREAM_TEMPLATE_DIR"
|
<< codeTemplateC << ", " << codeTemplateH << nl
|
||||||
<< " to point to the location of "
|
<< codeStreamTools::searchedLocations()
|
||||||
<< "fixedValueFvPatchScalarFieldTemplate.C"
|
|
||||||
<< exit(FatalIOError);
|
<< exit(FatalIOError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Extract sections of code
|
|
||||||
string codeInclude = "";
|
|
||||||
if (dict.found("codeInclude"))
|
|
||||||
{
|
|
||||||
codeInclude = codeStreamTools::stripLeading(dict["codeInclude"]);
|
|
||||||
}
|
|
||||||
string code = codeStreamTools::stripLeading(dict["code"]);
|
|
||||||
|
|
||||||
string codeOptions = "";
|
List<codeStreamTools::fileAndVars> copyFiles(2);
|
||||||
if (dict.found("codeOptions"))
|
copyFiles[0].file() = fileCsrc;
|
||||||
{
|
copyFiles[0].set("codeInclude", codeInclude);
|
||||||
codeOptions = codeStreamTools::stripLeading(dict["codeOptions"]);
|
copyFiles[0].set("code", code);
|
||||||
}
|
|
||||||
|
copyFiles[1].file() = fileHsrc;
|
||||||
|
|
||||||
|
|
||||||
List<fileAndVars> copyFiles(2);
|
List<codeStreamTools::fileAndContent> filesContents(2);
|
||||||
copyFiles[0].first() =
|
|
||||||
templates/"fixedValueFvPatchScalarFieldTemplate.C";
|
|
||||||
|
|
||||||
copyFiles[0].second().setSize(2);
|
|
||||||
copyFiles[0].second()[0] = Pair<string>("codeInclude", codeInclude);
|
|
||||||
copyFiles[0].second()[1] = Pair<string>("code", code);
|
|
||||||
|
|
||||||
copyFiles[1].first() =
|
|
||||||
templates/"fixedValueFvPatchScalarFieldTemplate.H";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
List<fileAndContent> filesContents(2);
|
|
||||||
// Write Make/files
|
// Write Make/files
|
||||||
filesContents[0].first() = "Make/files";
|
filesContents[0].first() = "Make/files";
|
||||||
filesContents[0].second() =
|
filesContents[0].second() =
|
||||||
"fixedValueFvPatchScalarFieldTemplate.C \n\n"
|
codeTemplateC + "\n\n"
|
||||||
"LIB = $(FOAM_USER_LIBBIN)/lib" + redirectType_;
|
+ codeStreamTools::libTarget(redirectType_);
|
||||||
|
|
||||||
// Write Make/options
|
// Write Make/options
|
||||||
filesContents[1].first() = "Make/options";
|
filesContents[1].first() = "Make/options";
|
||||||
filesContents[1].second() =
|
filesContents[1].second() =
|
||||||
"EXE_INC = -g\\\n -I$(LIB_SRC)/finiteVolume/lnInclude\\\n"
|
"EXE_INC = -g \\\n"
|
||||||
|
"-I$(LIB_SRC)/finiteVolume/lnInclude\\\n"
|
||||||
+ codeOptions
|
+ codeOptions
|
||||||
+ "\n\nLIB_LIBS = ";
|
+ "\n\nLIB_LIBS = ";
|
||||||
|
|
||||||
codeStreamTools writer(redirectType_, copyFiles, filesContents);
|
codeStreamTools writer(redirectType_, copyFiles, filesContents);
|
||||||
if (!writer.copyFilesContents(dir))
|
if (!writer.copyFilesContents(codePath))
|
||||||
{
|
{
|
||||||
FatalIOErrorIn
|
FatalIOErrorIn
|
||||||
(
|
(
|
||||||
"codedFixedValueFvPatchScalarField::writeLibrary(..)",
|
"codedFixedValueFvPatchScalarField::writeLibrary(..)",
|
||||||
dict
|
dict
|
||||||
) << "Failed writing " << endl
|
) << "Failed writing " << nl
|
||||||
<< copyFiles << endl
|
<< copyFiles << nl
|
||||||
<< filesContents
|
<< filesContents
|
||||||
<< exit(FatalIOError);
|
<< exit(FatalIOError);
|
||||||
}
|
}
|
||||||
@ -165,18 +199,20 @@ void Foam::codedFixedValueFvPatchScalarField::updateLibrary()
|
|||||||
<< exit(FatalIOError);
|
<< exit(FatalIOError);
|
||||||
}
|
}
|
||||||
|
|
||||||
const fileName dir =
|
// write code into redirectType_ subdir
|
||||||
db().time().constantPath()/"codeStream"/redirectType_;
|
const fileName codePath = codeStreamTools::codePath(redirectType_);
|
||||||
//Info<< "dir:" << dir << endl;
|
|
||||||
|
|
||||||
const fileName libPath
|
// const fileName oldLibPath = codeStreamTools::libPath
|
||||||
(
|
// (
|
||||||
Foam::getEnv("FOAM_USER_LIBBIN")
|
// redirectType_ + "_" + sha1_
|
||||||
/ "lib"
|
// );
|
||||||
+ redirectType_
|
|
||||||
+ ".so"
|
// write library into platforms/$WM_OPTIONS/lib subdir
|
||||||
);
|
const fileName libPath = codeStreamTools::libPath(redirectType_);
|
||||||
//Info<< "libPath:" << libPath << endl;
|
|
||||||
|
|
||||||
|
//Info<< "codePath:" << codePath << nl
|
||||||
|
// << "libPath:" << libPath << endl;
|
||||||
|
|
||||||
void* lib = dlLibraryTable::findLibrary(libPath);
|
void* lib = dlLibraryTable::findLibrary(libPath);
|
||||||
|
|
||||||
@ -184,7 +220,7 @@ void Foam::codedFixedValueFvPatchScalarField::updateLibrary()
|
|||||||
{
|
{
|
||||||
if (!lib)
|
if (!lib)
|
||||||
{
|
{
|
||||||
writeLibrary(dir, libPath, dict_);
|
writeLibrary(codePath, libPath, dict_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -213,7 +249,7 @@ void Foam::codedFixedValueFvPatchScalarField::updateLibrary()
|
|||||||
}
|
}
|
||||||
|
|
||||||
const dictionary& codeDict = onTheFlyDict.subDict(redirectType_);
|
const dictionary& codeDict = onTheFlyDict.subDict(redirectType_);
|
||||||
writeLibrary(dir, libPath, codeDict);
|
writeLibrary(codePath, libPath, codeDict);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -221,7 +257,7 @@ void Foam::codedFixedValueFvPatchScalarField::updateLibrary()
|
|||||||
{
|
{
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
Foam::string wmakeCmd("wmake libso " + dir);
|
const Foam::string wmakeCmd("wmake libso " + codePath);
|
||||||
Info<< "Invoking " << wmakeCmd << endl;
|
Info<< "Invoking " << wmakeCmd << endl;
|
||||||
if (Foam::system(wmakeCmd))
|
if (Foam::system(wmakeCmd))
|
||||||
{
|
{
|
||||||
@ -229,7 +265,8 @@ void Foam::codedFixedValueFvPatchScalarField::updateLibrary()
|
|||||||
(
|
(
|
||||||
"codedFixedValueFvPatchScalarField::updateLibrary()",
|
"codedFixedValueFvPatchScalarField::updateLibrary()",
|
||||||
dict_
|
dict_
|
||||||
) << "Failed " << wmakeCmd << exit(FatalIOError);
|
) << "Failed " << wmakeCmd
|
||||||
|
<< exit(FatalIOError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,7 +279,8 @@ void Foam::codedFixedValueFvPatchScalarField::updateLibrary()
|
|||||||
(
|
(
|
||||||
"codedFixedValueFvPatchScalarField::updateLibrary()",
|
"codedFixedValueFvPatchScalarField::updateLibrary()",
|
||||||
dict_
|
dict_
|
||||||
) << "Failed loading library " << libPath << exit(FatalIOError);
|
) << "Failed loading library " << libPath
|
||||||
|
<< exit(FatalIOError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,7 +32,7 @@ Description
|
|||||||
See also codeStream.
|
See also codeStream.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
\verbatim
|
||||||
movingWall
|
movingWall
|
||||||
{
|
{
|
||||||
type codedFixedValue<scalar>;
|
type codedFixedValue<scalar>;
|
||||||
@ -53,13 +53,14 @@ Description
|
|||||||
//#{
|
//#{
|
||||||
// -I$(LIB_SRC)/finiteVolume/lnInclude
|
// -I$(LIB_SRC)/finiteVolume/lnInclude
|
||||||
//#};
|
//#};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
A special form is if the 'code' section is not supplied. In this case
|
A special form is if the 'code' section is not supplied. In this case
|
||||||
the code gets read from a (runTimeModifiable!) dictionary system/codeDict
|
the code gets read from a (runTimeModifiable!) dictionary system/codeDict
|
||||||
which would have an entry
|
which would have a corresponding entry
|
||||||
|
|
||||||
|
\verbatim
|
||||||
rampedFixedValue
|
rampedFixedValue
|
||||||
{
|
{
|
||||||
code
|
code
|
||||||
@ -67,6 +68,10 @@ Description
|
|||||||
operator==(min(10, 0.1*this->db().time().value()));
|
operator==(min(10, 0.1*this->db().time().value()));
|
||||||
#};
|
#};
|
||||||
}
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
SeeAlso
|
||||||
|
Foam::codeStreamTools for constant paths used
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
codedFixedValueFvPatchScalarField.C
|
codedFixedValueFvPatchScalarField.C
|
||||||
@ -77,6 +82,7 @@ SourceFiles
|
|||||||
#define codedFixedValueFvPatchScalarField_H
|
#define codedFixedValueFvPatchScalarField_H
|
||||||
|
|
||||||
#include "fixedValueFvPatchFields.H"
|
#include "fixedValueFvPatchFields.H"
|
||||||
|
#include "SHA1Digest.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -86,7 +92,7 @@ namespace Foam
|
|||||||
class codeProperties;
|
class codeProperties;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class codedFixedValueFvPatchScalarField Declaration
|
Class codedFixedValueFvPatchScalarField Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class codedFixedValueFvPatchScalarField
|
class codedFixedValueFvPatchScalarField
|
||||||
@ -95,8 +101,13 @@ class codedFixedValueFvPatchScalarField
|
|||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
|
//- Dictionary contents for the boundary condition
|
||||||
mutable dictionary dict_;
|
mutable dictionary dict_;
|
||||||
|
|
||||||
|
//- SHA1Digest of the Dictionary contents
|
||||||
|
// Currently unused, but useful for reloading?
|
||||||
|
mutable SHA1Digest sha1_;
|
||||||
|
|
||||||
const word redirectType_;
|
const word redirectType_;
|
||||||
|
|
||||||
mutable autoPtr<fvPatchScalarField> redirectPatchFieldPtr_;
|
mutable autoPtr<fvPatchScalarField> redirectPatchFieldPtr_;
|
||||||
@ -108,8 +119,8 @@ class codedFixedValueFvPatchScalarField
|
|||||||
|
|
||||||
void writeLibrary
|
void writeLibrary
|
||||||
(
|
(
|
||||||
const fileName dir,
|
const fileName& dir,
|
||||||
const fileName libPath,
|
const fileName& libPath,
|
||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -117,6 +128,15 @@ class codedFixedValueFvPatchScalarField
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
// Static data members
|
||||||
|
|
||||||
|
//- Name of the C code template to be used
|
||||||
|
const static word codeTemplateC;
|
||||||
|
|
||||||
|
//- Name of the H code template to be used
|
||||||
|
const static word codeTemplateH;
|
||||||
|
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
TypeName("codedFixedValue<scalar>");
|
TypeName("codedFixedValue<scalar>");
|
||||||
|
|
||||||
|
|||||||
@ -7,4 +7,3 @@ LIB_LIBS = \
|
|||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-lOpenFOAM \
|
-lOpenFOAM \
|
||||||
-lmeshTools
|
-lmeshTools
|
||||||
|
|
||||||
|
|||||||
@ -71,7 +71,11 @@ Foam::ParticleForceList<CloudType>::ParticleForceList
|
|||||||
forAllConstIter(wordHashSet, models, iter)
|
forAllConstIter(wordHashSet, models, iter)
|
||||||
{
|
{
|
||||||
const word& model = iter.key();
|
const word& model = iter.key();
|
||||||
set(i, ParticleForce<CloudType>::New(owner, mesh, dict, model));
|
this->set
|
||||||
|
(
|
||||||
|
i,
|
||||||
|
ParticleForce<CloudType>::New(owner, mesh, dict, model)
|
||||||
|
);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,7 +41,7 @@ const
|
|||||||
"const"
|
"const"
|
||||||
) << "gradU field not allocated" << abort(FatalError);
|
) << "gradU field not allocated" << abort(FatalError);
|
||||||
|
|
||||||
return reinterpret_cast<const volTensorField>(0);
|
return *reinterpret_cast<const volTensorField*>(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -72,7 +72,7 @@ Foam::BrownianMotionForce<CloudType>::BrownianMotionForce
|
|||||||
if (turbulence_)
|
if (turbulence_)
|
||||||
{
|
{
|
||||||
HashTable<const compressible::turbulenceModel*> models =
|
HashTable<const compressible::turbulenceModel*> models =
|
||||||
this->mesh().objectRegistry::lookupClass
|
this->mesh().objectRegistry::template lookupClass
|
||||||
<
|
<
|
||||||
compressible::turbulenceModel
|
compressible::turbulenceModel
|
||||||
>();
|
>();
|
||||||
|
|||||||
@ -24,16 +24,14 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "nearWallFields.H"
|
#include "nearWallFields.H"
|
||||||
|
#include "wordReList.H"
|
||||||
//#include "volFields.H"
|
//#include "volFields.H"
|
||||||
//#include "selfContainedDirectMappedFixedValueFvPatchFields.H"
|
//#include "selfContainedDirectMappedFixedValueFvPatchFields.H"
|
||||||
//#include "interpolationCellPoint.H"
|
//#include "interpolationCellPoint.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
defineTypeNameAndDebug(Foam::nearWallFields, 0);
|
||||||
{
|
|
||||||
defineTypeNameAndDebug(nearWallFields, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
@ -87,7 +85,10 @@ void Foam::nearWallFields::read(const dictionary& dict)
|
|||||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||||
|
|
||||||
dict.lookup("fields") >> fieldSet_;
|
dict.lookup("fields") >> fieldSet_;
|
||||||
patchSet_ = mesh.boundaryMesh().patchSet(dict.lookup("patches"));
|
patchSet_ = mesh.boundaryMesh().patchSet
|
||||||
|
(
|
||||||
|
wordReList(dict.lookup("patches"))
|
||||||
|
);
|
||||||
distance_ = readScalar(dict.lookup("distance"));
|
distance_ = readScalar(dict.lookup("distance"));
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -27,6 +27,7 @@ License
|
|||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "dictionary.H"
|
#include "dictionary.H"
|
||||||
#include "Time.H"
|
#include "Time.H"
|
||||||
|
#include "wordReList.H"
|
||||||
|
|
||||||
#include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H"
|
#include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H"
|
||||||
#include "incompressible/RAS/RASModel/RASModel.H"
|
#include "incompressible/RAS/RASModel/RASModel.H"
|
||||||
@ -229,7 +230,10 @@ void Foam::forces::read(const dictionary& dict)
|
|||||||
|
|
||||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||||
|
|
||||||
patchSet_ = mesh.boundaryMesh().patchSet(dict.lookup("patches"));
|
patchSet_ = mesh.boundaryMesh().patchSet
|
||||||
|
(
|
||||||
|
wordReList(dict.lookup("patches"))
|
||||||
|
);
|
||||||
|
|
||||||
if (directForceDensity_)
|
if (directForceDensity_)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -34,4 +34,3 @@ derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.C
|
|||||||
derivedFvPatchFields/greyDiffusiveViewFactor/greyDiffusiveViewFactorFixedValueFvPatchScalarField.C
|
derivedFvPatchFields/greyDiffusiveViewFactor/greyDiffusiveViewFactorFixedValueFvPatchScalarField.C
|
||||||
|
|
||||||
LIB = $(FOAM_LIBBIN)/libradiationModels
|
LIB = $(FOAM_LIBBIN)/libradiationModels
|
||||||
|
|
||||||
|
|||||||
@ -23,5 +23,3 @@ LIB_LIBS = \
|
|||||||
-lliquidMixtureProperties \
|
-lliquidMixtureProperties \
|
||||||
-lsolidProperties \
|
-lsolidProperties \
|
||||||
-lliquidProperties
|
-lliquidProperties
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -139,17 +139,17 @@ greyMeanAbsorptionEmissionCoeffs
|
|||||||
{
|
{
|
||||||
Tcommon 300;
|
Tcommon 300;
|
||||||
invTemp false;
|
invTemp false;
|
||||||
Tlow 200;
|
Tlow 200;
|
||||||
Thigh 2500;
|
Thigh 2500;
|
||||||
|
|
||||||
loTcoeffs
|
loTcoeffs
|
||||||
(
|
(
|
||||||
0.01
|
0.01
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
hiTcoeffs
|
hiTcoeffs
|
||||||
(
|
(
|
||||||
@ -172,14 +172,14 @@ greyMeanAbsorptionEmissionCoeffs
|
|||||||
|
|
||||||
loTcoeffs
|
loTcoeffs
|
||||||
(
|
(
|
||||||
0.01
|
0.01
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
hiTcoeffs
|
hiTcoeffs
|
||||||
(
|
(
|
||||||
0.01
|
0.01
|
||||||
0
|
0
|
||||||
|
|||||||
@ -135,22 +135,22 @@ greyMeanAbsorptionEmissionCoeffs
|
|||||||
0
|
0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
N2
|
N2
|
||||||
{
|
{
|
||||||
Tcommon 300;
|
Tcommon 300;
|
||||||
invTemp false;
|
invTemp false;
|
||||||
Tlow 200;
|
Tlow 200;
|
||||||
Thigh 2500;
|
Thigh 2500;
|
||||||
|
|
||||||
loTcoeffs
|
loTcoeffs
|
||||||
(
|
(
|
||||||
0.01
|
0.01
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
hiTcoeffs
|
hiTcoeffs
|
||||||
(
|
(
|
||||||
@ -173,14 +173,14 @@ greyMeanAbsorptionEmissionCoeffs
|
|||||||
|
|
||||||
loTcoeffs
|
loTcoeffs
|
||||||
(
|
(
|
||||||
0.01
|
0.01
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
hiTcoeffs
|
hiTcoeffs
|
||||||
(
|
(
|
||||||
0.01
|
0.01
|
||||||
0
|
0
|
||||||
|
|||||||
@ -18,23 +18,23 @@ done
|
|||||||
## remove solid fields from fluid regions (important for post-processing)
|
## remove solid fields from fluid regions (important for post-processing)
|
||||||
for i in bottomAir topAir
|
for i in bottomAir topAir
|
||||||
do
|
do
|
||||||
rm -f 0*/$i/{Ypmma,Ychar}
|
rm -f 0*/$i/{Ypmma,Ychar}
|
||||||
done
|
done
|
||||||
|
|
||||||
for i in bottomAir topAir heater leftSolid rightSolid
|
for i in bottomAir topAir heater leftSolid rightSolid
|
||||||
do
|
do
|
||||||
changeDictionary -region $i > log.changeDictionary.$i 2>&1
|
changeDictionary -region $i > log.changeDictionary.$i 2>&1
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
for i in bottomAir topAir
|
for i in bottomAir topAir
|
||||||
do
|
do
|
||||||
faceAgglomerate -region $i > log.faceAgglomerate.$i 2>&1
|
faceAgglomerate -region $i > log.faceAgglomerate.$i 2>&1
|
||||||
done
|
done
|
||||||
|
|
||||||
for i in bottomAir topAir
|
for i in bottomAir topAir
|
||||||
do
|
do
|
||||||
viewFactorsGen -region $i > log.viewFactorsGen.$i 2>&1
|
viewFactorsGen -region $i > log.viewFactorsGen.$i 2>&1
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ echo "creating files for paraview post-processing"
|
|||||||
echo
|
echo
|
||||||
for i in bottomAir topAir heater leftSolid rightSolid
|
for i in bottomAir topAir heater leftSolid rightSolid
|
||||||
do
|
do
|
||||||
paraFoam -touch -region $i
|
paraFoam -touch -region $i
|
||||||
done
|
done
|
||||||
|
|
||||||
# ----------------------------------------------------------------- end-of-file
|
# ----------------------------------------------------------------- end-of-file
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -65,3 +65,5 @@ maxZ
|
|||||||
featureAngle 10;
|
featureAngle 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -67,3 +67,5 @@ maxZ
|
|||||||
featureAngle 10;
|
featureAngle 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -1,3 +1,2 @@
|
|||||||
fvSolution is used for outer correctors specification.
|
fvSolution is used for outer correctors specification.
|
||||||
fvSchemes is only so that pre-processing activities can proceed
|
fvSchemes is only so that pre-processing activities can proceed
|
||||||
|
|
||||||
|
|||||||
@ -163,7 +163,7 @@ dictionaryReplacement
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IDefault
|
IDefault
|
||||||
{
|
{
|
||||||
internalField uniform 0;
|
internalField uniform 0;
|
||||||
|
|||||||
@ -45,7 +45,7 @@ solvers
|
|||||||
tolerance 1e-7;
|
tolerance 1e-7;
|
||||||
relTol 0.1;
|
relTol 0.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
G
|
G
|
||||||
{
|
{
|
||||||
$p_rgh;
|
$p_rgh;
|
||||||
|
|||||||
@ -43,7 +43,7 @@ dictionaryReplacement
|
|||||||
type zeroGradient;
|
type zeroGradient;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
heater_to_topAir
|
heater_to_topAir
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureRadCoupledMixed;
|
type compressible::turbulentTemperatureRadCoupledMixed;
|
||||||
@ -51,10 +51,10 @@ dictionaryReplacement
|
|||||||
K solidThermo;
|
K solidThermo;
|
||||||
QrNbr Qr;
|
QrNbr Qr;
|
||||||
Qr none;
|
Qr none;
|
||||||
KName none;
|
KName none;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
heater_to_bottomAir
|
heater_to_bottomAir
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureRadCoupledMixed;
|
type compressible::turbulentTemperatureRadCoupledMixed;
|
||||||
@ -62,10 +62,10 @@ dictionaryReplacement
|
|||||||
K solidThermo;
|
K solidThermo;
|
||||||
QrNbr Qr;
|
QrNbr Qr;
|
||||||
Qr none;
|
Qr none;
|
||||||
KName none;
|
KName none;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
"heater_to_.*"
|
"heater_to_.*"
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
||||||
|
|||||||
@ -39,7 +39,7 @@ dictionaryReplacement
|
|||||||
type zeroGradient;
|
type zeroGradient;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
leftSolid_to_topAir
|
leftSolid_to_topAir
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureRadCoupledMixed;
|
type compressible::turbulentTemperatureRadCoupledMixed;
|
||||||
@ -47,10 +47,10 @@ dictionaryReplacement
|
|||||||
K solidThermo;
|
K solidThermo;
|
||||||
QrNbr Qr;
|
QrNbr Qr;
|
||||||
Qr none;
|
Qr none;
|
||||||
KName none;
|
KName none;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
leftSolid_to_bottomAir
|
leftSolid_to_bottomAir
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureRadCoupledMixed;
|
type compressible::turbulentTemperatureRadCoupledMixed;
|
||||||
@ -58,10 +58,10 @@ dictionaryReplacement
|
|||||||
K solidThermo;
|
K solidThermo;
|
||||||
QrNbr Qr;
|
QrNbr Qr;
|
||||||
Qr none;
|
Qr none;
|
||||||
KName none;
|
KName none;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
"leftSolid_to_.*"
|
"leftSolid_to_.*"
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
||||||
|
|||||||
@ -39,7 +39,7 @@ dictionaryReplacement
|
|||||||
type zeroGradient;
|
type zeroGradient;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
rightSolid_to_topAir
|
rightSolid_to_topAir
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureRadCoupledMixed;
|
type compressible::turbulentTemperatureRadCoupledMixed;
|
||||||
@ -47,10 +47,10 @@ dictionaryReplacement
|
|||||||
K solidThermo;
|
K solidThermo;
|
||||||
QrNbr Qr;
|
QrNbr Qr;
|
||||||
Qr none;
|
Qr none;
|
||||||
KName none;
|
KName none;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
rightSolid_to_bottomAir
|
rightSolid_to_bottomAir
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureRadCoupledMixed;
|
type compressible::turbulentTemperatureRadCoupledMixed;
|
||||||
@ -58,10 +58,10 @@ dictionaryReplacement
|
|||||||
K solidThermo;
|
K solidThermo;
|
||||||
QrNbr Qr;
|
QrNbr Qr;
|
||||||
Qr none;
|
Qr none;
|
||||||
KName none;
|
KName none;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
"rightSolid_to_.*"
|
"rightSolid_to_.*"
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
||||||
|
|||||||
@ -69,7 +69,7 @@ dictionaryReplacement
|
|||||||
K basicThermo;
|
K basicThermo;
|
||||||
QrNbr none;
|
QrNbr none;
|
||||||
Qr Qr;
|
Qr Qr;
|
||||||
KName none;
|
KName none;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -162,7 +162,7 @@ dictionaryReplacement
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Qr
|
Qr
|
||||||
{
|
{
|
||||||
internalField uniform 0;
|
internalField uniform 0;
|
||||||
@ -176,7 +176,7 @@ dictionaryReplacement
|
|||||||
emissivity uniform 1.0;
|
emissivity uniform 1.0;
|
||||||
value uniform 0;
|
value uniform 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
"topAir_to_.*"
|
"topAir_to_.*"
|
||||||
{
|
{
|
||||||
type greyDiffusiveRadiationViewFactor;
|
type greyDiffusiveRadiationViewFactor;
|
||||||
@ -186,7 +186,7 @@ dictionaryReplacement
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
G
|
G
|
||||||
{
|
{
|
||||||
internalField uniform 0;
|
internalField uniform 0;
|
||||||
@ -200,7 +200,7 @@ dictionaryReplacement
|
|||||||
emissivity uniform 1.0;
|
emissivity uniform 1.0;
|
||||||
value uniform 0;
|
value uniform 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
"topAir_to_.*"
|
"topAir_to_.*"
|
||||||
{
|
{
|
||||||
type MarshakRadiation;
|
type MarshakRadiation;
|
||||||
@ -210,7 +210,7 @@ dictionaryReplacement
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IDefault
|
IDefault
|
||||||
{
|
{
|
||||||
internalField uniform 0;
|
internalField uniform 0;
|
||||||
|
|||||||
@ -47,7 +47,7 @@ solvers
|
|||||||
tolerance 1e-7;
|
tolerance 1e-7;
|
||||||
relTol 0.1;
|
relTol 0.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
G
|
G
|
||||||
{
|
{
|
||||||
$p_rgh;
|
$p_rgh;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
| ========= | |
|
| ========= | |
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
| \\ / O peration | Version: dev |
|
| \\ / O peration | Version: dev.olesenm |
|
||||||
| \\ / A nd | Web: www.OpenFOAM.com |
|
| \\ / A nd | Web: www.OpenFOAM.com |
|
||||||
| \\/ M anipulation | |
|
| \\/ M anipulation | |
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -45,5 +45,36 @@ timePrecision 6;
|
|||||||
|
|
||||||
runTimeModifiable true;
|
runTimeModifiable true;
|
||||||
|
|
||||||
|
functions
|
||||||
|
{
|
||||||
|
systemCall1
|
||||||
|
{
|
||||||
|
type systemCall;
|
||||||
|
functionObjectLibs ("libsystemCall.so");
|
||||||
|
enabled true;
|
||||||
|
outputControl outputTime;
|
||||||
|
|
||||||
|
// called every time step
|
||||||
|
executeCalls
|
||||||
|
(
|
||||||
|
"echo execute"
|
||||||
|
);
|
||||||
|
|
||||||
|
// called at the end of the run
|
||||||
|
endCalls
|
||||||
|
(
|
||||||
|
"echo \*\*\* writing .bashrc \*\*\*"
|
||||||
|
"cat ~/.bashrc"
|
||||||
|
"echo \*\*\* done \*\*\*"
|
||||||
|
);
|
||||||
|
|
||||||
|
// called every ouput time
|
||||||
|
writeCalls
|
||||||
|
(
|
||||||
|
"echo \*\*\* writing data \*\*\*"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -25,8 +25,7 @@ boundaryField
|
|||||||
{
|
{
|
||||||
type MarshakRadiation;
|
type MarshakRadiation;
|
||||||
T T;
|
T T;
|
||||||
emissivityMode lookup;
|
emissivity 1;
|
||||||
emissivity uniform 1.0;
|
|
||||||
value uniform 0;
|
value uniform 0;
|
||||||
refValue uniform 0;
|
refValue uniform 0;
|
||||||
refGradient uniform 0;
|
refGradient uniform 0;
|
||||||
@ -36,8 +35,7 @@ boundaryField
|
|||||||
{
|
{
|
||||||
type MarshakRadiation;
|
type MarshakRadiation;
|
||||||
T T;
|
T T;
|
||||||
emissivityMode lookup;
|
emissivity 1;
|
||||||
emissivity uniform 1.0;
|
|
||||||
value uniform 0;
|
value uniform 0;
|
||||||
refValue uniform 0;
|
refValue uniform 0;
|
||||||
refGradient uniform 0;
|
refGradient uniform 0;
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
.SUFFIXES: .C .cxx .cc .cpp
|
.SUFFIXES: .C .cxx .cc .cpp
|
||||||
|
|
||||||
c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor
|
# -Woverloaded-virtual may produce spurious warnings, disable for now
|
||||||
|
c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -Wno-overloaded-virtual
|
||||||
|
|
||||||
CC = clang++ -m64
|
CC = clang++ -m64
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
.SUFFIXES: .C .cxx .cc .cpp
|
.SUFFIXES: .C .cxx .cc .cpp
|
||||||
|
|
||||||
c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast
|
# -Woverloaded-virtual may produce spurious warnings, disable for now
|
||||||
|
c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -Wno-overloaded-virtual
|
||||||
|
|
||||||
CC = clang++ -m32
|
CC = clang++ -m32
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user