mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: fvSchemes,fvSolution : read file only once.
This commit is contained in:
@ -43,9 +43,40 @@ static const Foam::List<Foam::word> subDictNames
|
||||
);
|
||||
//! @endcond
|
||||
|
||||
|
||||
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
|
||||
|
||||
void Foam::solution::read(const dictionary& dict)
|
||||
{
|
||||
if (dict.found("cache"))
|
||||
{
|
||||
cache_ = dict.subDict("cache");
|
||||
caching_ = cache_.lookupOrDefault("active", true);
|
||||
}
|
||||
|
||||
if (dict.found("relaxationFactors"))
|
||||
{
|
||||
relaxationFactors_ = dict.subDict("relaxationFactors");
|
||||
}
|
||||
|
||||
relaxationFactors_.readIfPresent("default", defaultRelaxationFactor_);
|
||||
|
||||
if (dict.found("solvers"))
|
||||
{
|
||||
solvers_ = dict.subDict("solvers");
|
||||
upgradeSolverDict(solvers_);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::solution::solution(const objectRegistry& obr, const fileName& dictName)
|
||||
Foam::solution::solution
|
||||
(
|
||||
const objectRegistry& obr,
|
||||
const fileName& dictName,
|
||||
const bool syncPar
|
||||
)
|
||||
:
|
||||
IOdictionary
|
||||
(
|
||||
@ -56,7 +87,8 @@ Foam::solution::solution(const objectRegistry& obr, const fileName& dictName)
|
||||
obr,
|
||||
IOobject::MUST_READ_IF_MODIFIED,
|
||||
IOobject::NO_WRITE
|
||||
)
|
||||
),
|
||||
syncPar
|
||||
),
|
||||
cache_(ITstream("cache", tokenList())()),
|
||||
caching_(false),
|
||||
@ -64,7 +96,7 @@ Foam::solution::solution(const objectRegistry& obr, const fileName& dictName)
|
||||
defaultRelaxationFactor_(0),
|
||||
solvers_(ITstream("solvers", tokenList())())
|
||||
{
|
||||
read();
|
||||
read(solutionDict());
|
||||
}
|
||||
|
||||
|
||||
@ -250,26 +282,7 @@ bool Foam::solution::read()
|
||||
{
|
||||
if (regIOobject::read())
|
||||
{
|
||||
const dictionary& dict = solutionDict();
|
||||
|
||||
if (dict.found("cache"))
|
||||
{
|
||||
cache_ = dict.subDict("cache");
|
||||
caching_ = cache_.lookupOrDefault("active", true);
|
||||
}
|
||||
|
||||
if (dict.found("relaxationFactors"))
|
||||
{
|
||||
relaxationFactors_ = dict.subDict("relaxationFactors");
|
||||
}
|
||||
|
||||
relaxationFactors_.readIfPresent("default", defaultRelaxationFactor_);
|
||||
|
||||
if (dict.found("solvers"))
|
||||
{
|
||||
solvers_ = dict.subDict("solvers");
|
||||
upgradeSolverDict(solvers_);
|
||||
}
|
||||
read(solutionDict());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -70,6 +70,9 @@ class solution
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Read settings from the dictionary
|
||||
void read(const dictionary&);
|
||||
|
||||
//- Disallow default bitwise copy construct and assignment
|
||||
solution(const solution&);
|
||||
void operator=(const solution&);
|
||||
@ -89,7 +92,12 @@ public:
|
||||
// Constructors
|
||||
|
||||
//- Construct for given objectRegistry and dictionary
|
||||
solution(const objectRegistry& obr, const fileName& dictName);
|
||||
solution
|
||||
(
|
||||
const objectRegistry& obr,
|
||||
const fileName& dictName,
|
||||
const bool syncPar=true
|
||||
);
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
@ -28,9 +28,9 @@ License
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
int Foam::fvSchemes::debug(Foam::debug::debugSwitch("fvSchemes", false));
|
||||
|
||||
|
||||
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
|
||||
|
||||
void Foam::fvSchemes::clear()
|
||||
@ -53,9 +53,201 @@ void Foam::fvSchemes::clear()
|
||||
defaultFluxRequired_ = false;
|
||||
}
|
||||
|
||||
|
||||
void Foam::fvSchemes::read(const dictionary& dict)
|
||||
{
|
||||
if (dict.found("ddtSchemes"))
|
||||
{
|
||||
ddtSchemes_ = dict.subDict("ddtSchemes");
|
||||
}
|
||||
else if (dict.found("timeScheme"))
|
||||
{
|
||||
// For backward compatibility.
|
||||
// The timeScheme will be deprecated with warning or removed
|
||||
WarningIn("fvSchemes::read()")
|
||||
<< "Using deprecated 'timeScheme' instead of 'ddtSchemes'"
|
||||
<< nl << endl;
|
||||
|
||||
word schemeName(dict.lookup("timeScheme"));
|
||||
|
||||
if (schemeName == "EulerImplicit")
|
||||
{
|
||||
schemeName = "Euler";
|
||||
}
|
||||
else if (schemeName == "BackwardDifferencing")
|
||||
{
|
||||
schemeName = "backward";
|
||||
}
|
||||
else if (schemeName == "SteadyState")
|
||||
{
|
||||
schemeName = "steadyState";
|
||||
}
|
||||
else
|
||||
{
|
||||
FatalIOErrorIn("fvSchemes::read()", dict.lookup("timeScheme"))
|
||||
<< "\n Only EulerImplicit, BackwardDifferencing and "
|
||||
"SteadyState\n are supported by the old timeScheme "
|
||||
"specification.\n Please use ddtSchemes instead."
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
|
||||
ddtSchemes_.set("default", schemeName);
|
||||
|
||||
ddtSchemes_.lookup("default")[0].lineNumber() =
|
||||
dict.lookup("timeScheme").lineNumber();
|
||||
}
|
||||
else
|
||||
{
|
||||
ddtSchemes_.set("default", "none");
|
||||
}
|
||||
|
||||
if
|
||||
(
|
||||
ddtSchemes_.found("default")
|
||||
&& word(ddtSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultDdtScheme_ = ddtSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
if (dict.found("d2dt2Schemes"))
|
||||
{
|
||||
d2dt2Schemes_ = dict.subDict("d2dt2Schemes");
|
||||
}
|
||||
else if (dict.found("timeScheme"))
|
||||
{
|
||||
// For backward compatibility.
|
||||
// The timeScheme will be deprecated with warning or removed
|
||||
WarningIn("fvSchemes::read()")
|
||||
<< "Using deprecated 'timeScheme' instead of 'd2dt2Schemes'"
|
||||
<< nl << endl;
|
||||
|
||||
word schemeName(dict.lookup("timeScheme"));
|
||||
|
||||
if (schemeName == "EulerImplicit")
|
||||
{
|
||||
schemeName = "Euler";
|
||||
}
|
||||
else if (schemeName == "SteadyState")
|
||||
{
|
||||
schemeName = "steadyState";
|
||||
}
|
||||
|
||||
d2dt2Schemes_.set("default", schemeName);
|
||||
|
||||
d2dt2Schemes_.lookup("default")[0].lineNumber() =
|
||||
dict.lookup("timeScheme").lineNumber();
|
||||
}
|
||||
else
|
||||
{
|
||||
d2dt2Schemes_.set("default", "none");
|
||||
}
|
||||
|
||||
if
|
||||
(
|
||||
d2dt2Schemes_.found("default")
|
||||
&& word(d2dt2Schemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultD2dt2Scheme_ = d2dt2Schemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
if (dict.found("interpolationSchemes"))
|
||||
{
|
||||
interpolationSchemes_ = dict.subDict("interpolationSchemes");
|
||||
}
|
||||
else if (!interpolationSchemes_.found("default"))
|
||||
{
|
||||
interpolationSchemes_.add("default", "linear");
|
||||
}
|
||||
|
||||
if
|
||||
(
|
||||
interpolationSchemes_.found("default")
|
||||
&& word(interpolationSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultInterpolationScheme_ =
|
||||
interpolationSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
divSchemes_ = dict.subDict("divSchemes");
|
||||
|
||||
if
|
||||
(
|
||||
divSchemes_.found("default")
|
||||
&& word(divSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultDivScheme_ = divSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
gradSchemes_ = dict.subDict("gradSchemes");
|
||||
|
||||
if
|
||||
(
|
||||
gradSchemes_.found("default")
|
||||
&& word(gradSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultGradScheme_ = gradSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
if (dict.found("snGradSchemes"))
|
||||
{
|
||||
snGradSchemes_ = dict.subDict("snGradSchemes");
|
||||
}
|
||||
else if (!snGradSchemes_.found("default"))
|
||||
{
|
||||
snGradSchemes_.add("default", "corrected");
|
||||
}
|
||||
|
||||
if
|
||||
(
|
||||
snGradSchemes_.found("default")
|
||||
&& word(snGradSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultSnGradScheme_ = snGradSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
laplacianSchemes_ = dict.subDict("laplacianSchemes");
|
||||
|
||||
if
|
||||
(
|
||||
laplacianSchemes_.found("default")
|
||||
&& word(laplacianSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultLaplacianScheme_ = laplacianSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
if (dict.found("fluxRequired"))
|
||||
{
|
||||
fluxRequired_ = dict.subDict("fluxRequired");
|
||||
|
||||
if
|
||||
(
|
||||
fluxRequired_.found("default")
|
||||
&& word(fluxRequired_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultFluxRequired_ = Switch(fluxRequired_.lookup("default"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
|
||||
Foam::fvSchemes::fvSchemes(const objectRegistry& obr, const bool syncPar)
|
||||
:
|
||||
IOdictionary
|
||||
(
|
||||
@ -66,7 +258,8 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
|
||||
obr,
|
||||
IOobject::MUST_READ_IF_MODIFIED,
|
||||
IOobject::NO_WRITE
|
||||
)
|
||||
),
|
||||
syncPar
|
||||
),
|
||||
ddtSchemes_
|
||||
(
|
||||
@ -169,7 +362,10 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
|
||||
),
|
||||
defaultFluxRequired_(false)
|
||||
{
|
||||
read();
|
||||
// persistent settings across reads is incorrect
|
||||
clear();
|
||||
|
||||
read(schemesDict());
|
||||
}
|
||||
|
||||
|
||||
@ -179,197 +375,10 @@ bool Foam::fvSchemes::read()
|
||||
{
|
||||
if (regIOobject::read())
|
||||
{
|
||||
const dictionary& dict = schemesDict();
|
||||
|
||||
// persistent settings across reads is incorrect
|
||||
clear();
|
||||
|
||||
if (dict.found("ddtSchemes"))
|
||||
{
|
||||
ddtSchemes_ = dict.subDict("ddtSchemes");
|
||||
}
|
||||
else if (dict.found("timeScheme"))
|
||||
{
|
||||
// For backward compatibility.
|
||||
// The timeScheme will be deprecated with warning or removed
|
||||
WarningIn("fvSchemes::read()")
|
||||
<< "Using deprecated 'timeScheme' instead of 'ddtSchemes'"
|
||||
<< nl << endl;
|
||||
|
||||
word schemeName(dict.lookup("timeScheme"));
|
||||
|
||||
if (schemeName == "EulerImplicit")
|
||||
{
|
||||
schemeName = "Euler";
|
||||
}
|
||||
else if (schemeName == "BackwardDifferencing")
|
||||
{
|
||||
schemeName = "backward";
|
||||
}
|
||||
else if (schemeName == "SteadyState")
|
||||
{
|
||||
schemeName = "steadyState";
|
||||
}
|
||||
else
|
||||
{
|
||||
FatalIOErrorIn("fvSchemes::read()", dict.lookup("timeScheme"))
|
||||
<< "\n Only EulerImplicit, BackwardDifferencing and "
|
||||
"SteadyState\n are supported by the old timeScheme "
|
||||
"specification.\n Please use ddtSchemes instead."
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
|
||||
ddtSchemes_.set("default", schemeName);
|
||||
|
||||
ddtSchemes_.lookup("default")[0].lineNumber() =
|
||||
dict.lookup("timeScheme").lineNumber();
|
||||
}
|
||||
else
|
||||
{
|
||||
ddtSchemes_.set("default", "none");
|
||||
}
|
||||
|
||||
if
|
||||
(
|
||||
ddtSchemes_.found("default")
|
||||
&& word(ddtSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultDdtScheme_ = ddtSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
if (dict.found("d2dt2Schemes"))
|
||||
{
|
||||
d2dt2Schemes_ = dict.subDict("d2dt2Schemes");
|
||||
}
|
||||
else if (dict.found("timeScheme"))
|
||||
{
|
||||
// For backward compatibility.
|
||||
// The timeScheme will be deprecated with warning or removed
|
||||
WarningIn("fvSchemes::read()")
|
||||
<< "Using deprecated 'timeScheme' instead of 'd2dt2Schemes'"
|
||||
<< nl << endl;
|
||||
|
||||
word schemeName(dict.lookup("timeScheme"));
|
||||
|
||||
if (schemeName == "EulerImplicit")
|
||||
{
|
||||
schemeName = "Euler";
|
||||
}
|
||||
else if (schemeName == "SteadyState")
|
||||
{
|
||||
schemeName = "steadyState";
|
||||
}
|
||||
|
||||
d2dt2Schemes_.set("default", schemeName);
|
||||
|
||||
d2dt2Schemes_.lookup("default")[0].lineNumber() =
|
||||
dict.lookup("timeScheme").lineNumber();
|
||||
}
|
||||
else
|
||||
{
|
||||
d2dt2Schemes_.set("default", "none");
|
||||
}
|
||||
|
||||
if
|
||||
(
|
||||
d2dt2Schemes_.found("default")
|
||||
&& word(d2dt2Schemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultD2dt2Scheme_ = d2dt2Schemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
if (dict.found("interpolationSchemes"))
|
||||
{
|
||||
interpolationSchemes_ = dict.subDict("interpolationSchemes");
|
||||
}
|
||||
else if (!interpolationSchemes_.found("default"))
|
||||
{
|
||||
interpolationSchemes_.add("default", "linear");
|
||||
}
|
||||
|
||||
if
|
||||
(
|
||||
interpolationSchemes_.found("default")
|
||||
&& word(interpolationSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultInterpolationScheme_ =
|
||||
interpolationSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
divSchemes_ = dict.subDict("divSchemes");
|
||||
|
||||
if
|
||||
(
|
||||
divSchemes_.found("default")
|
||||
&& word(divSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultDivScheme_ = divSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
gradSchemes_ = dict.subDict("gradSchemes");
|
||||
|
||||
if
|
||||
(
|
||||
gradSchemes_.found("default")
|
||||
&& word(gradSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultGradScheme_ = gradSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
if (dict.found("snGradSchemes"))
|
||||
{
|
||||
snGradSchemes_ = dict.subDict("snGradSchemes");
|
||||
}
|
||||
else if (!snGradSchemes_.found("default"))
|
||||
{
|
||||
snGradSchemes_.add("default", "corrected");
|
||||
}
|
||||
|
||||
if
|
||||
(
|
||||
snGradSchemes_.found("default")
|
||||
&& word(snGradSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultSnGradScheme_ = snGradSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
laplacianSchemes_ = dict.subDict("laplacianSchemes");
|
||||
|
||||
if
|
||||
(
|
||||
laplacianSchemes_.found("default")
|
||||
&& word(laplacianSchemes_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultLaplacianScheme_ = laplacianSchemes_.lookup("default");
|
||||
}
|
||||
|
||||
|
||||
if (dict.found("fluxRequired"))
|
||||
{
|
||||
fluxRequired_ = dict.subDict("fluxRequired");
|
||||
|
||||
if
|
||||
(
|
||||
fluxRequired_.found("default")
|
||||
&& word(fluxRequired_.lookup("default")) != "none"
|
||||
)
|
||||
{
|
||||
defaultFluxRequired_ = Switch(fluxRequired_.lookup("default"));
|
||||
}
|
||||
}
|
||||
read(schemesDict());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -84,6 +84,9 @@ class fvSchemes
|
||||
//- Clear the dictionaries and streams before reading
|
||||
void clear();
|
||||
|
||||
//- Read settings from the dictionary
|
||||
void read(const dictionary&);
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
fvSchemes(const fvSchemes&);
|
||||
|
||||
@ -100,7 +103,7 @@ public:
|
||||
// Constructors
|
||||
|
||||
//- Construct for objectRegistry
|
||||
fvSchemes(const objectRegistry& obr);
|
||||
fvSchemes(const objectRegistry& obr, const bool syncPar = true);
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
Reference in New Issue
Block a user