mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge commit 'bundle/home' into olesenm
This commit is contained in:
@ -30,6 +30,7 @@ Description
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "IOstreams.H"
|
||||
#include "IOobject.H"
|
||||
#include "IFstream.H"
|
||||
#include "dictionary.H"
|
||||
|
||||
@ -40,18 +41,12 @@ using namespace Foam;
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
IFstream dictStream("testDict");
|
||||
dictionary testDict(dictStream);
|
||||
Info<< dictionary(IFstream("testDict")()) << endl;
|
||||
|
||||
Info<< testDict << endl;
|
||||
IOobject::writeDivider(Info);
|
||||
|
||||
{
|
||||
dictionary someDict;
|
||||
someDict.add(keyType("a.*", true), "subdictValue");
|
||||
|
||||
dictionary dict;
|
||||
dict.add("someDict", someDict);
|
||||
dict.add(keyType(".*", true), "parentValue");
|
||||
dictionary dict(IFstream("testDictRegex")());
|
||||
|
||||
Info<< "dict:" << dict << endl;
|
||||
|
||||
@ -64,6 +59,18 @@ int main(int argc, char *argv[])
|
||||
Info<< "Recursive wildcard find \"def\" in sub directory : "
|
||||
<< dict.subDict("someDict").lookup("def", true)
|
||||
<< endl;
|
||||
Info<< "Recursive wildcard find \"foo\" in sub directory : "
|
||||
<< dict.subDict("someDict").lookup("foo", true)
|
||||
<< endl;
|
||||
Info<< "Recursive wildcard find \"fooz\" in sub directory : "
|
||||
<< dict.subDict("someDict").lookup("fooz", true)
|
||||
<< endl;
|
||||
Info<< "Recursive wildcard find \"bar\" in sub directory : "
|
||||
<< dict.subDict("someDict").lookup("bar", true)
|
||||
<< endl;
|
||||
Info<< "Recursive wildcard find \"xxx\" in sub directory : "
|
||||
<< dict.subDict("someDict").lookup("xxx", true)
|
||||
<< endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
34
applications/test/dictionary/testDictRegex
Normal file
34
applications/test/dictionary/testDictRegex
Normal file
@ -0,0 +1,34 @@
|
||||
/*-------------------------------*- C++ -*---------------------------------*\
|
||||
| ========= |
|
||||
| \\ / OpenFOAM |
|
||||
| \\ / |
|
||||
| \\ / The Open Source CFD Toolbox |
|
||||
| \\/ http://www.OpenFOAM.org |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object testDictRegex;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
#inputMode merge
|
||||
|
||||
".*" parentValue1;
|
||||
"[n-z].*" parentValue2;
|
||||
"f.*" parentValue3;
|
||||
|
||||
someDict
|
||||
{
|
||||
foo subdictValue0;
|
||||
bar $f.*; // should this really match 'foo'?
|
||||
|
||||
// result is dependent on insert order!
|
||||
"a.*c" subdictValue3;
|
||||
"ab.*" subdictValue2;
|
||||
"a.*" subdictValue1;
|
||||
abcd subdictValue4;
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -0,0 +1,3 @@
|
||||
foamUpgradeFvSolution.C
|
||||
|
||||
EXE = $(FOAM_APPBIN)/foamUpgradeFvSolution
|
||||
@ -0,0 +1,104 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Application
|
||||
foamUpgradeFvSolution
|
||||
|
||||
Description
|
||||
Simple tool to upgrade the syntax of system/fvSolution::solvers
|
||||
|
||||
Usage
|
||||
|
||||
- foamUpgradeFvSolution [OPTION]
|
||||
|
||||
@param -test \n
|
||||
Suppress writing the updated fvSolution file
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "argList.H"
|
||||
#include "Time.H"
|
||||
#include "IOdictionary.H"
|
||||
#include "solution.H"
|
||||
|
||||
using namespace Foam;
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
// Main program:
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
argList::noParallel();
|
||||
argList::validOptions.insert("test", "");
|
||||
|
||||
# include "setRootCase.H"
|
||||
# include "createTime.H"
|
||||
|
||||
IOdictionary solutionDict
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"fvSolution",
|
||||
runTime.system(),
|
||||
runTime,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
)
|
||||
);
|
||||
|
||||
label nChanged = 0;
|
||||
entry* e = solutionDict.lookupEntryPtr("solvers", false, false);
|
||||
if (e && e->isDict())
|
||||
{
|
||||
nChanged = solution::upgradeSolverDict(e->dict(), true);
|
||||
}
|
||||
|
||||
Info<< nChanged << " solver settings changed" << nl << endl;
|
||||
if (nChanged)
|
||||
{
|
||||
if (args.options().found("test"))
|
||||
{
|
||||
Info<< "-test option: no changes made" << nl << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
mv
|
||||
(
|
||||
solutionDict.objectPath(),
|
||||
solutionDict.objectPath() + ".old"
|
||||
);
|
||||
|
||||
solutionDict.regIOobject::write();
|
||||
|
||||
Info<< "Backup to " << (solutionDict.objectPath() + ".old") << nl
|
||||
<< "Write to " << solutionDict.objectPath() << nl << endl;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -697,7 +697,7 @@ bool Foam::dictionary::changeKeyword
|
||||
IDLList<entry>::replace(iter2(), iter());
|
||||
delete iter2();
|
||||
hashedEntries_.erase(iter2);
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -163,16 +163,16 @@ public:
|
||||
dictionary(Istream&);
|
||||
|
||||
//- Construct as copy given the parent dictionary
|
||||
dictionary(const dictionary& parentDict, const dictionary& dict);
|
||||
dictionary(const dictionary& parentDict, const dictionary&);
|
||||
|
||||
//- Construct top-level dictionary as copy
|
||||
dictionary(const dictionary& dict);
|
||||
dictionary(const dictionary&);
|
||||
|
||||
//- Construct and return clone
|
||||
Foam::autoPtr<dictionary> clone() const;
|
||||
|
||||
//- Construct top-level dictionary on freestore from Istream
|
||||
static Foam::autoPtr<dictionary> New(Istream& is);
|
||||
static Foam::autoPtr<dictionary> New(Istream&);
|
||||
|
||||
|
||||
// Destructor
|
||||
@ -211,12 +211,12 @@ public:
|
||||
|
||||
//- Search dictionary for given keyword
|
||||
// If recursive search parent dictionaries
|
||||
bool found(const word& keyword, bool recursive=false) const;
|
||||
bool found(const word&, bool recursive=false) const;
|
||||
|
||||
//- Find and return an entry data stream pointer if present
|
||||
// otherwise return NULL.
|
||||
// If recursive search parent dictionaries. If wildCardMatch
|
||||
// use wildcards.
|
||||
// If recursive search parent dictionaries.
|
||||
// If wildCardMatch use wildcards.
|
||||
const entry* lookupEntryPtr
|
||||
(
|
||||
const word&,
|
||||
@ -226,8 +226,8 @@ public:
|
||||
|
||||
//- Find and return an entry data stream pointer for manipulation
|
||||
// if present otherwise return NULL.
|
||||
// If recursive search parent dictionaries. If wildCardMatch
|
||||
// use wildcards.
|
||||
// If recursive search parent dictionaries.
|
||||
// If wildCardMatch use wildcards.
|
||||
entry* lookupEntryPtr
|
||||
(
|
||||
const word&,
|
||||
@ -236,8 +236,8 @@ public:
|
||||
);
|
||||
|
||||
//- Find and return an entry data stream if present otherwise error.
|
||||
// If recursive search parent dictionaries. If wildCardMatch
|
||||
// use wildcards.
|
||||
// If recursive search parent dictionaries.
|
||||
// If wildCardMatch use wildcards.
|
||||
const entry& lookupEntry
|
||||
(
|
||||
const word&,
|
||||
@ -331,13 +331,13 @@ public:
|
||||
|
||||
//- Add a scalar entry
|
||||
// optionally overwrite an existing entry
|
||||
void add (const keyType&, const scalar, bool overwrite=false);
|
||||
void add(const keyType&, const scalar, bool overwrite=false);
|
||||
|
||||
//- Add a dictionary entry
|
||||
// optionally merge with an existing sub-dictionary
|
||||
void add
|
||||
(
|
||||
const keyType& keyword,
|
||||
const keyType&,
|
||||
const dictionary&,
|
||||
bool mergeEntry=false
|
||||
);
|
||||
@ -345,7 +345,7 @@ public:
|
||||
//- Add a T entry
|
||||
// optionally overwrite an existing entry
|
||||
template<class T>
|
||||
void add(const keyType& keyword, const T&, bool overwrite=false);
|
||||
void add(const keyType&, const T&, bool overwrite=false);
|
||||
|
||||
//- Assign a new entry, overwrite any existing entry
|
||||
void set(entry*);
|
||||
@ -354,14 +354,14 @@ public:
|
||||
void set(const entry&);
|
||||
|
||||
//- Assign a dictionary entry, overwrite any existing entry
|
||||
void set(const keyType& keyword, const dictionary&);
|
||||
void set(const keyType&, const dictionary&);
|
||||
|
||||
//- Assign a T entry, overwrite any existing entry
|
||||
template<class T>
|
||||
void set(const keyType& keyword, const T&);
|
||||
void set(const keyType&, const T&);
|
||||
|
||||
//- Remove an entry specified by keyword
|
||||
bool remove(const word& keyword);
|
||||
bool remove(const word&);
|
||||
|
||||
//- Change the keyword for an entry,
|
||||
// optionally forcing overwrite of an existing entry
|
||||
@ -369,7 +369,7 @@ public:
|
||||
(
|
||||
const keyType& oldKeyword,
|
||||
const keyType& newKeyword,
|
||||
bool forceOverwrite = false
|
||||
bool forceOverwrite=false
|
||||
);
|
||||
|
||||
//- Merge entries from the given dictionary.
|
||||
@ -382,7 +382,7 @@ public:
|
||||
|
||||
// Write
|
||||
|
||||
void write(Ostream& os, bool subDict = true) const;
|
||||
void write(Ostream&, bool subDict=true) const;
|
||||
|
||||
|
||||
// Member Operators
|
||||
|
||||
@ -37,19 +37,17 @@ License
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
SLList<string> argList::validArgs;
|
||||
HashTable<string> argList::validOptions;
|
||||
HashTable<string> argList::validParOptions;
|
||||
}
|
||||
Foam::SLList<Foam::string> Foam::argList::validArgs;
|
||||
Foam::HashTable<Foam::string> Foam::argList::validOptions;
|
||||
Foam::HashTable<Foam::string> Foam::argList::validParOptions;
|
||||
bool Foam::argList::bannerEnabled(true);
|
||||
|
||||
|
||||
Foam::argList::initValidTables::initValidTables()
|
||||
{
|
||||
validOptions.insert("case", "dir");
|
||||
validOptions.insert("parallel", "");
|
||||
validParOptions.insert("parallel", "");
|
||||
validOptions.set("case", "dir");
|
||||
validOptions.set("parallel", "");
|
||||
validParOptions.set("parallel", "");
|
||||
|
||||
Pstream::addValidParOptions(validParOptions);
|
||||
}
|
||||
@ -138,7 +136,7 @@ void Foam::argList::getRootCase()
|
||||
casePath = cwd();
|
||||
|
||||
// we could add this back in as '-case'?
|
||||
// options_.insert("case", casePath);
|
||||
// options_.set("case", casePath);
|
||||
}
|
||||
|
||||
rootPath_ = casePath.path();
|
||||
@ -285,7 +283,7 @@ Foam::argList::argList
|
||||
string timeString = clock::clockTime();
|
||||
|
||||
// Print the banner once only for parallel runs
|
||||
if (Pstream::master())
|
||||
if (Pstream::master() && bannerEnabled)
|
||||
{
|
||||
IOobject::writeBanner(Info, true);
|
||||
Info<< "Exec : " << argListString.c_str() << nl
|
||||
@ -315,8 +313,6 @@ Foam::argList::argList
|
||||
// For the master
|
||||
if (Pstream::master())
|
||||
{
|
||||
fileNameList roots;
|
||||
|
||||
// establish rootPath_/globalCase_/case_ for master
|
||||
getRootCase();
|
||||
|
||||
@ -333,45 +329,25 @@ Foam::argList::argList
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
dictionary decompositionDict(decompDictStream);
|
||||
|
||||
Switch distributed(false);
|
||||
|
||||
if
|
||||
(
|
||||
decompositionDict.readIfPresent("distributed", distributed)
|
||||
&& distributed
|
||||
)
|
||||
{
|
||||
decompositionDict.lookup("roots") >> roots;
|
||||
|
||||
if (roots.size() != Pstream::nProcs()-1)
|
||||
{
|
||||
FatalError
|
||||
<< "number of entries in decompositionDict::roots"
|
||||
<< " is not equal to the number of slaves "
|
||||
<< Pstream::nProcs()-1
|
||||
<< exit(FatalError);
|
||||
}
|
||||
}
|
||||
|
||||
dictionary decompDict(decompDictStream);
|
||||
|
||||
label dictNProcs
|
||||
(
|
||||
readLabel
|
||||
(
|
||||
decompositionDict.lookup("numberOfSubdomains")
|
||||
decompDict.lookup("numberOfSubdomains")
|
||||
)
|
||||
);
|
||||
|
||||
// Check number of processors. We have nProcs(number of
|
||||
// actual processes), dictNProcs(wanted number of processes read
|
||||
// from decompositionDict) and nProcDirs(number of processor
|
||||
// directories - n/a when running distributed)
|
||||
// Check number of processors.
|
||||
// nProcs => number of actual procs
|
||||
// dictNProcs => number of procs specified in decompositionDict
|
||||
// nProcDirs => number of processor directories
|
||||
// (n/a when running distributed)
|
||||
//
|
||||
// - normal running : nProcs = dictNProcs = nProcDirs
|
||||
// - decomposition to more processors : nProcs = dictNProcs
|
||||
// - decomposition to less processors : nProcs = nProcDirs
|
||||
// - decomposition to more processors : nProcs = dictNProcs
|
||||
// - decomposition to fewer processors : nProcs = nProcDirs
|
||||
if (dictNProcs > Pstream::nProcs())
|
||||
{
|
||||
FatalError
|
||||
@ -382,38 +358,23 @@ Foam::argList::argList
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
if (!distributed && dictNProcs < Pstream::nProcs())
|
||||
// distributed data
|
||||
if (decompDict.lookupOrDefault<Switch>("distributed", false))
|
||||
{
|
||||
// Possibly going to fewer processors.
|
||||
// Check if all procDirs are there.
|
||||
label nProcDirs = 0;
|
||||
while
|
||||
(
|
||||
dir
|
||||
(
|
||||
rootPath_/globalCase_/"processor"
|
||||
+ name(++nProcDirs)
|
||||
)
|
||||
)
|
||||
{}
|
||||
fileNameList roots;
|
||||
decompDict.lookup("roots") >> roots;
|
||||
|
||||
if (nProcDirs != Pstream::nProcs())
|
||||
if (roots.size() != Pstream::nProcs()-1)
|
||||
{
|
||||
FatalError
|
||||
<< "number of processor directories = "
|
||||
<< nProcDirs
|
||||
<< " is not equal to the number of processors = "
|
||||
<< Pstream::nProcs()
|
||||
<< "number of entries in decompositionDict::roots"
|
||||
<< " is not equal to the number of slaves "
|
||||
<< Pstream::nProcs()-1
|
||||
<< exit(FatalError);
|
||||
}
|
||||
}
|
||||
|
||||
// distributed data
|
||||
if (roots.size())
|
||||
{
|
||||
bool hadOptCase = options_.found("case");
|
||||
|
||||
// Distribute the master's argument list (with new root)
|
||||
bool hadCaseOpt = options_.found("case");
|
||||
for
|
||||
(
|
||||
int slave=Pstream::firstSlave();
|
||||
@ -421,8 +382,7 @@ Foam::argList::argList
|
||||
slave++
|
||||
)
|
||||
{
|
||||
options_.erase("case");
|
||||
options_.insert
|
||||
options_.set
|
||||
(
|
||||
"case",
|
||||
fileName(roots[slave-1])/globalCase_
|
||||
@ -431,17 +391,42 @@ Foam::argList::argList
|
||||
OPstream toSlave(Pstream::scheduled, slave);
|
||||
toSlave << args_ << options_;
|
||||
}
|
||||
|
||||
options_.erase("case");
|
||||
|
||||
// restore [-case dir]
|
||||
if (hadOptCase)
|
||||
if (hadCaseOpt)
|
||||
{
|
||||
options_.insert("case", rootPath_/globalCase_);
|
||||
options_.set("case", rootPath_/globalCase_);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Possibly going to fewer processors.
|
||||
// Check if all procDirs are there.
|
||||
if (dictNProcs < Pstream::nProcs())
|
||||
{
|
||||
label nProcDirs = 0;
|
||||
while
|
||||
(
|
||||
dir
|
||||
(
|
||||
rootPath_/globalCase_/"processor"
|
||||
+ name(++nProcDirs)
|
||||
)
|
||||
)
|
||||
{}
|
||||
|
||||
if (nProcDirs != Pstream::nProcs())
|
||||
{
|
||||
FatalError
|
||||
<< "number of processor directories = "
|
||||
<< nProcDirs
|
||||
<< " is not equal to the number of processors = "
|
||||
<< Pstream::nProcs()
|
||||
<< exit(FatalError);
|
||||
}
|
||||
}
|
||||
|
||||
// Distribute the master's argument list (unaltered)
|
||||
for
|
||||
(
|
||||
@ -472,7 +457,6 @@ Foam::argList::argList
|
||||
{
|
||||
// establish rootPath_/globalCase_/case_
|
||||
getRootCase();
|
||||
|
||||
case_ = globalCase_;
|
||||
}
|
||||
|
||||
@ -510,21 +494,21 @@ Foam::argList::argList
|
||||
}
|
||||
|
||||
|
||||
if (Pstream::master())
|
||||
if (Pstream::master() && bannerEnabled)
|
||||
{
|
||||
Info<< "Case : " << (rootPath_/globalCase_).c_str() << nl
|
||||
<< "nProcs : " << nProcs << endl;
|
||||
}
|
||||
|
||||
if (parRunControl_.parRun() && Pstream::master())
|
||||
{
|
||||
Info<< "Slaves : " << slaveProcs << nl
|
||||
<< "Pstream initialized with:" << nl
|
||||
<< " floatTransfer : " << Pstream::floatTransfer << nl
|
||||
<< " nProcsSimpleSum : " << Pstream::nProcsSimpleSum << nl
|
||||
<< " commsType : "
|
||||
<< Pstream::commsTypeNames[Pstream::defaultCommsType]
|
||||
<< endl;
|
||||
if (parRunControl_.parRun())
|
||||
{
|
||||
Info<< "Slaves : " << slaveProcs << nl
|
||||
<< "Pstream initialized with:" << nl
|
||||
<< " floatTransfer : " << Pstream::floatTransfer << nl
|
||||
<< " nProcsSimpleSum : " << Pstream::nProcsSimpleSum << nl
|
||||
<< " commsType : "
|
||||
<< Pstream::commsTypeNames[Pstream::defaultCommsType]
|
||||
<< endl;
|
||||
}
|
||||
}
|
||||
|
||||
jobInfo.add("root", rootPath_);
|
||||
@ -546,7 +530,7 @@ Foam::argList::argList
|
||||
sigQuit_.set();
|
||||
sigSegv_.set();
|
||||
|
||||
if (Pstream::master())
|
||||
if (Pstream::master() && bannerEnabled)
|
||||
{
|
||||
Info<< endl;
|
||||
IOobject::writeDivider(Info);
|
||||
@ -564,6 +548,12 @@ Foam::argList::~argList()
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::argList::noBanner()
|
||||
{
|
||||
bannerEnabled = false;
|
||||
}
|
||||
|
||||
|
||||
void Foam::argList::noParallel()
|
||||
{
|
||||
validOptions.erase("parallel");
|
||||
|
||||
@ -92,6 +92,7 @@ namespace Foam
|
||||
class argList
|
||||
{
|
||||
// Private data
|
||||
static bool bannerEnabled;
|
||||
|
||||
stringList args_;
|
||||
HashTable<string> options_;
|
||||
@ -213,6 +214,9 @@ public:
|
||||
|
||||
// Edit
|
||||
|
||||
//- Disable emitting the banner information
|
||||
static void noBanner();
|
||||
|
||||
//- Remove the parallel options
|
||||
static void noParallel();
|
||||
|
||||
|
||||
@ -259,7 +259,7 @@ public:
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
),
|
||||
(
|
||||
fieldName,
|
||||
@ -267,7 +267,7 @@ public:
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverData
|
||||
solverControls
|
||||
)
|
||||
);
|
||||
|
||||
@ -282,7 +282,7 @@ public:
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
),
|
||||
(
|
||||
fieldName,
|
||||
@ -290,7 +290,7 @@ public:
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverData
|
||||
solverControls
|
||||
)
|
||||
);
|
||||
|
||||
@ -304,7 +304,7 @@ public:
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
// Selectors
|
||||
@ -317,7 +317,7 @@ public:
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
|
||||
@ -359,7 +359,7 @@ public:
|
||||
|
||||
|
||||
//- Read and reset the solver parameters from the given stream
|
||||
virtual void read(Istream& solverData);
|
||||
virtual void read(const dictionary&);
|
||||
|
||||
virtual solverPerformance solve
|
||||
(
|
||||
@ -467,7 +467,7 @@ public:
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& smootherData
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
|
||||
@ -531,6 +531,9 @@ public:
|
||||
|
||||
public:
|
||||
|
||||
//- Find the preconditioner name (directly or from a sub-dictionary)
|
||||
static word getName(const dictionary&);
|
||||
|
||||
//- Runtime type information
|
||||
virtual const word& type() const = 0;
|
||||
|
||||
@ -544,9 +547,9 @@ public:
|
||||
symMatrix,
|
||||
(
|
||||
const solver& sol,
|
||||
Istream& preconditionerData
|
||||
const dictionary& solverControls
|
||||
),
|
||||
(sol, preconditionerData)
|
||||
(sol, solverControls)
|
||||
);
|
||||
|
||||
declareRunTimeSelectionTable
|
||||
@ -556,9 +559,9 @@ public:
|
||||
asymMatrix,
|
||||
(
|
||||
const solver& sol,
|
||||
Istream& preconditionerData
|
||||
const dictionary& solverControls
|
||||
),
|
||||
(sol, preconditionerData)
|
||||
(sol, solverControls)
|
||||
);
|
||||
|
||||
|
||||
@ -579,7 +582,7 @@ public:
|
||||
static autoPtr<preconditioner> New
|
||||
(
|
||||
const solver& sol,
|
||||
Istream& preconditionerData
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
|
||||
@ -593,7 +596,7 @@ public:
|
||||
|
||||
//- Read and reset the preconditioner parameters
|
||||
// from the given stream
|
||||
virtual void read(Istream& preconditionerData)
|
||||
virtual void read(const dictionary&)
|
||||
{}
|
||||
|
||||
//- Return wA the preconditioned form of residual rA
|
||||
|
||||
@ -37,29 +37,66 @@ namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::word
|
||||
Foam::lduMatrix::preconditioner::getName
|
||||
(
|
||||
const dictionary& solverControls
|
||||
)
|
||||
{
|
||||
word name;
|
||||
|
||||
// handle primitive or dictionary entry
|
||||
const entry& e = solverControls.lookupEntry("preconditioner", false, false);
|
||||
if (e.isDict())
|
||||
{
|
||||
e.dict().lookup("preconditioner") >> name;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.stream() >> name;
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
Foam::autoPtr<Foam::lduMatrix::preconditioner>
|
||||
Foam::lduMatrix::preconditioner::New
|
||||
(
|
||||
const solver& sol,
|
||||
Istream& preconditionerData
|
||||
const dictionary& solverControls
|
||||
)
|
||||
{
|
||||
word preconditionerName(preconditionerData);
|
||||
word name;
|
||||
|
||||
// handle primitive or dictionary entry
|
||||
const entry& e = solverControls.lookupEntry("preconditioner", false, false);
|
||||
if (e.isDict())
|
||||
{
|
||||
e.dict().lookup("preconditioner") >> name;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.stream() >> name;
|
||||
}
|
||||
|
||||
const dictionary& controls = e.isDict() ? e.dict() : dictionary::null;
|
||||
|
||||
if (sol.matrix().symmetric())
|
||||
{
|
||||
symMatrixConstructorTable::iterator constructorIter =
|
||||
symMatrixConstructorTablePtr_->find(preconditionerName);
|
||||
symMatrixConstructorTablePtr_->find(name);
|
||||
|
||||
if (constructorIter == symMatrixConstructorTablePtr_->end())
|
||||
{
|
||||
FatalIOErrorIn
|
||||
(
|
||||
"lduMatrix::preconditioner::New(const solver&, Istream&)",
|
||||
preconditionerData
|
||||
"lduMatrix::preconditioner::New"
|
||||
"(const solver&, const dictionary&)",
|
||||
controls
|
||||
) << "Unknown symmetric matrix preconditioner "
|
||||
<< preconditionerName << endl << endl
|
||||
<< "Valid symmetric matrix preconditioners are :" << endl
|
||||
<< name << nl << nl
|
||||
<< "Valid symmetric matrix preconditioners :" << endl
|
||||
<< symMatrixConstructorTablePtr_->toc()
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
@ -69,24 +106,25 @@ Foam::lduMatrix::preconditioner::New
|
||||
constructorIter()
|
||||
(
|
||||
sol,
|
||||
preconditionerData
|
||||
controls
|
||||
)
|
||||
);
|
||||
}
|
||||
else if (sol.matrix().asymmetric())
|
||||
{
|
||||
asymMatrixConstructorTable::iterator constructorIter =
|
||||
asymMatrixConstructorTablePtr_->find(preconditionerName);
|
||||
asymMatrixConstructorTablePtr_->find(name);
|
||||
|
||||
if (constructorIter == asymMatrixConstructorTablePtr_->end())
|
||||
{
|
||||
FatalIOErrorIn
|
||||
(
|
||||
"lduMatrix::preconditioner::New(const solver&, Istream&)",
|
||||
preconditionerData
|
||||
"lduMatrix::preconditioner::New"
|
||||
"(const solver&, const dictionary&)",
|
||||
controls
|
||||
) << "Unknown asymmetric matrix preconditioner "
|
||||
<< preconditionerName << endl << endl
|
||||
<< "Valid asymmetric matrix preconditioners are :" << endl
|
||||
<< name << nl << nl
|
||||
<< "Valid asymmetric matrix preconditioners :" << endl
|
||||
<< asymMatrixConstructorTablePtr_->toc()
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
@ -96,7 +134,7 @@ Foam::lduMatrix::preconditioner::New
|
||||
constructorIter()
|
||||
(
|
||||
sol,
|
||||
preconditionerData
|
||||
controls
|
||||
)
|
||||
);
|
||||
}
|
||||
@ -104,9 +142,10 @@ Foam::lduMatrix::preconditioner::New
|
||||
{
|
||||
FatalIOErrorIn
|
||||
(
|
||||
"lduMatrix::preconditioner::New(const solver&, Istream&)",
|
||||
preconditionerData
|
||||
) << "cannot preconditione incomplete matrix, "
|
||||
"lduMatrix::preconditioner::New"
|
||||
"(const solver&, const dictionary&)",
|
||||
controls
|
||||
) << "cannot solve incomplete matrix, "
|
||||
"no diagonal or off-diagonal coefficient"
|
||||
<< exit(FatalIOError);
|
||||
|
||||
|
||||
@ -34,7 +34,6 @@ namespace Foam
|
||||
defineRunTimeSelectionTable(lduMatrix::smoother, asymMatrix);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::autoPtr<Foam::lduMatrix::smoother> Foam::lduMatrix::smoother::New
|
||||
@ -44,23 +43,37 @@ Foam::autoPtr<Foam::lduMatrix::smoother> Foam::lduMatrix::smoother::New
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& smootherData
|
||||
const dictionary& solverControls
|
||||
)
|
||||
{
|
||||
word smootherName(smootherData);
|
||||
word name;
|
||||
|
||||
// handle primitive or dictionary entry
|
||||
const entry& e = solverControls.lookupEntry("smoother", false, false);
|
||||
if (e.isDict())
|
||||
{
|
||||
e.dict().lookup("smoother") >> name;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.stream() >> name;
|
||||
}
|
||||
|
||||
// not (yet?) needed:
|
||||
// const dictionary& controls = e.isDict() ? e.dict() : dictionary::null;
|
||||
|
||||
if (matrix.symmetric())
|
||||
{
|
||||
symMatrixConstructorTable::iterator constructorIter =
|
||||
symMatrixConstructorTablePtr_->find(smootherName);
|
||||
symMatrixConstructorTablePtr_->find(name);
|
||||
|
||||
if (constructorIter == symMatrixConstructorTablePtr_->end())
|
||||
{
|
||||
FatalIOErrorIn
|
||||
(
|
||||
"lduMatrix::smoother::New", smootherData
|
||||
) << "Unknown symmetric matrix smoother " << smootherName
|
||||
<< endl << endl
|
||||
"lduMatrix::smoother::New", solverControls
|
||||
) << "Unknown symmetric matrix smoother "
|
||||
<< name << nl << nl
|
||||
<< "Valid symmetric matrix smoothers are :" << endl
|
||||
<< symMatrixConstructorTablePtr_->toc()
|
||||
<< exit(FatalIOError);
|
||||
@ -81,15 +94,15 @@ Foam::autoPtr<Foam::lduMatrix::smoother> Foam::lduMatrix::smoother::New
|
||||
else if (matrix.asymmetric())
|
||||
{
|
||||
asymMatrixConstructorTable::iterator constructorIter =
|
||||
asymMatrixConstructorTablePtr_->find(smootherName);
|
||||
asymMatrixConstructorTablePtr_->find(name);
|
||||
|
||||
if (constructorIter == asymMatrixConstructorTablePtr_->end())
|
||||
{
|
||||
FatalIOErrorIn
|
||||
(
|
||||
"lduMatrix::smoother::New", smootherData
|
||||
) << "Unknown asymmetric matrix smoother " << smootherName
|
||||
<< endl << endl
|
||||
"lduMatrix::smoother::New", solverControls
|
||||
) << "Unknown asymmetric matrix smoother "
|
||||
<< name << nl << nl
|
||||
<< "Valid asymmetric matrix smoothers are :" << endl
|
||||
<< asymMatrixConstructorTablePtr_->toc()
|
||||
<< exit(FatalIOError);
|
||||
@ -111,8 +124,9 @@ Foam::autoPtr<Foam::lduMatrix::smoother> Foam::lduMatrix::smoother::New
|
||||
{
|
||||
FatalIOErrorIn
|
||||
(
|
||||
"lduMatrix::smoother::New", smootherData
|
||||
) << "cannot solve incomplete matrix, no off-diagonal coefficients"
|
||||
"lduMatrix::smoother::New", solverControls
|
||||
) << "cannot solve incomplete matrix, "
|
||||
"no diagonal or off-diagonal coefficient"
|
||||
<< exit(FatalIOError);
|
||||
|
||||
return autoPtr<lduMatrix::smoother>(NULL);
|
||||
|
||||
@ -45,10 +45,10 @@ Foam::autoPtr<Foam::lduMatrix::solver> Foam::lduMatrix::solver::New
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
)
|
||||
{
|
||||
word solverName(solverData);
|
||||
word name(solverControls.lookup("solver"));
|
||||
|
||||
if (matrix.diagonal())
|
||||
{
|
||||
@ -61,22 +61,21 @@ Foam::autoPtr<Foam::lduMatrix::solver> Foam::lduMatrix::solver::New
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverData
|
||||
solverControls
|
||||
)
|
||||
);
|
||||
}
|
||||
else if (matrix.symmetric())
|
||||
{
|
||||
symMatrixConstructorTable::iterator constructorIter =
|
||||
symMatrixConstructorTablePtr_->find(solverName);
|
||||
symMatrixConstructorTablePtr_->find(name);
|
||||
|
||||
if (constructorIter == symMatrixConstructorTablePtr_->end())
|
||||
{
|
||||
FatalIOErrorIn
|
||||
(
|
||||
"lduMatrix::solver::New", solverData
|
||||
) << "Unknown symmetric matrix solver " << solverName
|
||||
<< endl << endl
|
||||
"lduMatrix::solver::New", solverControls
|
||||
) << "Unknown symmetric matrix solver " << name << nl << nl
|
||||
<< "Valid symmetric matrix solvers are :" << endl
|
||||
<< symMatrixConstructorTablePtr_->toc()
|
||||
<< exit(FatalIOError);
|
||||
@ -91,22 +90,21 @@ Foam::autoPtr<Foam::lduMatrix::solver> Foam::lduMatrix::solver::New
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverData
|
||||
solverControls
|
||||
)
|
||||
);
|
||||
}
|
||||
else if (matrix.asymmetric())
|
||||
{
|
||||
asymMatrixConstructorTable::iterator constructorIter =
|
||||
asymMatrixConstructorTablePtr_->find(solverName);
|
||||
asymMatrixConstructorTablePtr_->find(name);
|
||||
|
||||
if (constructorIter == asymMatrixConstructorTablePtr_->end())
|
||||
{
|
||||
FatalIOErrorIn
|
||||
(
|
||||
"lduMatrix::solver::New", solverData
|
||||
) << "Unknown asymmetric matrix solver " << solverName
|
||||
<< endl << endl
|
||||
"lduMatrix::solver::New", solverControls
|
||||
) << "Unknown asymmetric matrix solver " << name << nl << nl
|
||||
<< "Valid asymmetric matrix solvers are :" << endl
|
||||
<< asymMatrixConstructorTablePtr_->toc()
|
||||
<< exit(FatalIOError);
|
||||
@ -121,7 +119,7 @@ Foam::autoPtr<Foam::lduMatrix::solver> Foam::lduMatrix::solver::New
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverData
|
||||
solverControls
|
||||
)
|
||||
);
|
||||
}
|
||||
@ -129,7 +127,7 @@ Foam::autoPtr<Foam::lduMatrix::solver> Foam::lduMatrix::solver::New
|
||||
{
|
||||
FatalIOErrorIn
|
||||
(
|
||||
"lduMatrix::solver::New", solverData
|
||||
"lduMatrix::solver::New", solverControls
|
||||
) << "cannot solve incomplete matrix, "
|
||||
"no diagonal or off-diagonal coefficient"
|
||||
<< exit(FatalIOError);
|
||||
@ -148,7 +146,7 @@ Foam::lduMatrix::solver::solver
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
)
|
||||
:
|
||||
fieldName_(fieldName),
|
||||
@ -156,12 +154,7 @@ Foam::lduMatrix::solver::solver
|
||||
interfaceBouCoeffs_(interfaceBouCoeffs),
|
||||
interfaceIntCoeffs_(interfaceIntCoeffs),
|
||||
interfaces_(interfaces),
|
||||
|
||||
controlDict_(solverData),
|
||||
|
||||
maxIter_(1000),
|
||||
tolerance_(1e-6),
|
||||
relTol_(0)
|
||||
controlDict_(solverControls)
|
||||
{
|
||||
readControls();
|
||||
}
|
||||
@ -171,16 +164,15 @@ Foam::lduMatrix::solver::solver
|
||||
|
||||
void Foam::lduMatrix::solver::readControls()
|
||||
{
|
||||
controlDict_.readIfPresent("maxIter", maxIter_);
|
||||
controlDict_.readIfPresent("tolerance", tolerance_);
|
||||
controlDict_.readIfPresent("relTol", relTol_);
|
||||
maxIter_ = controlDict_.lookupOrDefault<label>("maxIter", 1000);
|
||||
tolerance_ = controlDict_.lookupOrDefault<scalar>("tolerance", 1e-6);
|
||||
relTol_ = controlDict_.lookupOrDefault<scalar>("relTol", 0);
|
||||
}
|
||||
|
||||
|
||||
void Foam::lduMatrix::solver::read(Istream& solverData)
|
||||
void Foam::lduMatrix::solver::read(const dictionary& solverControls)
|
||||
{
|
||||
word solverName(solverData);
|
||||
solverData >> controlDict_;
|
||||
controlDict_ = solverControls;
|
||||
readControls();
|
||||
}
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ namespace Foam
|
||||
Foam::DICPreconditioner::DICPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream&
|
||||
const dictionary&
|
||||
)
|
||||
:
|
||||
lduMatrix::preconditioner(sol),
|
||||
|
||||
@ -67,11 +67,11 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from matrix components and preconditioner data stream
|
||||
//- Construct from matrix components and preconditioner solver controls
|
||||
DICPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream& preconditionerData
|
||||
const lduMatrix::solver&,
|
||||
const dictionary& solverControlsUnused
|
||||
);
|
||||
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ namespace Foam
|
||||
Foam::DILUPreconditioner::DILUPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream&
|
||||
const dictionary&
|
||||
)
|
||||
:
|
||||
lduMatrix::preconditioner(sol),
|
||||
|
||||
@ -67,11 +67,11 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from matrix components and preconditioner data stream
|
||||
//- Construct from matrix components and preconditioner solver controls
|
||||
DILUPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream& preconditionerData
|
||||
const lduMatrix::solver&,
|
||||
const dictionary& solverControlsUnused
|
||||
);
|
||||
|
||||
|
||||
@ -94,8 +94,7 @@ public:
|
||||
const direction cmpt=0
|
||||
) const;
|
||||
|
||||
//- Return wT the transpose-matrix preconditioned form of
|
||||
// residual rT.
|
||||
//- Return wT the transpose-matrix preconditioned form of residual rT.
|
||||
virtual void preconditionT
|
||||
(
|
||||
scalarField& wT,
|
||||
|
||||
@ -43,7 +43,7 @@ namespace Foam
|
||||
Foam::FDICPreconditioner::FDICPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream&
|
||||
const dictionary&
|
||||
)
|
||||
:
|
||||
lduMatrix::preconditioner(sol),
|
||||
@ -164,7 +164,7 @@ void Foam::FDICPreconditioner::precondition
|
||||
__builtin_prefetch (&uPtr[face+96],0,0);
|
||||
__builtin_prefetch (&lPtr[face+96],0,0);
|
||||
__builtin_prefetch (&rDuUpperPtr[face+96],0,0);
|
||||
__builtin_prefetch (&wAPtr[uPtr[face+32]],0,1);
|
||||
__builtin_prefetch (&wAPtr[uPtr[face+32]],0,1);
|
||||
__builtin_prefetch (&wAPtr[lPtr[face+32]],0,1);
|
||||
#endif
|
||||
|
||||
|
||||
@ -80,11 +80,11 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from matrix components and preconditioner data stream
|
||||
//- Construct from matrix components and preconditioner solver controls
|
||||
FDICPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream& preconditionerData
|
||||
const lduMatrix::solver&,
|
||||
const dictionary& solverControlsUnused
|
||||
);
|
||||
|
||||
|
||||
|
||||
@ -45,7 +45,7 @@ namespace Foam
|
||||
Foam::GAMGPreconditioner::GAMGPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream& preconditionerData
|
||||
const dictionary& solverControls
|
||||
)
|
||||
:
|
||||
GAMGSolver
|
||||
@ -55,7 +55,7 @@ Foam::GAMGPreconditioner::GAMGPreconditioner
|
||||
sol.interfaceBouCoeffs(),
|
||||
sol.interfaceIntCoeffs(),
|
||||
sol.interfaces(),
|
||||
preconditionerData
|
||||
solverControls
|
||||
),
|
||||
lduMatrix::preconditioner(sol),
|
||||
nVcycles_(2)
|
||||
@ -75,13 +75,7 @@ Foam::GAMGPreconditioner::~GAMGPreconditioner()
|
||||
void Foam::GAMGPreconditioner::readControls()
|
||||
{
|
||||
GAMGSolver::readControls();
|
||||
controlDict_.readIfPresent("nVcycles", nVcycles_);
|
||||
}
|
||||
|
||||
|
||||
void Foam::GAMGPreconditioner::read(Istream& solverData)
|
||||
{
|
||||
GAMGSolver::read(solverData);
|
||||
nVcycles_ = controlDict_.lookupOrDefault<label>("nVcycles", 2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -55,17 +55,14 @@ class GAMGPreconditioner
|
||||
public GAMGSolver,
|
||||
public lduMatrix::preconditioner
|
||||
{
|
||||
// Private data
|
||||
protected:
|
||||
// Protected data
|
||||
|
||||
//- Number of V-cycles to perform
|
||||
label nVcycles_;
|
||||
|
||||
|
||||
// Private member functions
|
||||
|
||||
//- Read control parameters from the control dictionary
|
||||
void readControls();
|
||||
|
||||
//- Read the control parameters from the controlDict_
|
||||
virtual void readControls();
|
||||
|
||||
public:
|
||||
|
||||
@ -75,11 +72,11 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct for given solver and preconditioner data stream
|
||||
//- Construct from matrix components and preconditioner solver controls
|
||||
GAMGPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream& preconditionerData
|
||||
const lduMatrix::solver&,
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
|
||||
@ -90,9 +87,6 @@ public:
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Read and reset the preconditioner parameters from the given stream
|
||||
virtual void read(Istream& preconditionerData);
|
||||
|
||||
//- Return wA the preconditioned form of residual rA
|
||||
virtual void precondition
|
||||
(
|
||||
|
||||
@ -47,7 +47,7 @@ namespace Foam
|
||||
Foam::diagonalPreconditioner::diagonalPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream&
|
||||
const dictionary&
|
||||
)
|
||||
:
|
||||
lduMatrix::preconditioner(sol),
|
||||
@ -77,10 +77,6 @@ Foam::diagonalPreconditioner::diagonalPreconditioner
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::diagonalPreconditioner::read(Istream&)
|
||||
{}
|
||||
|
||||
|
||||
void Foam::diagonalPreconditioner::precondition
|
||||
(
|
||||
scalarField& wA,
|
||||
|
||||
@ -56,7 +56,7 @@ class diagonalPreconditioner
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- The reciprocal diagonal
|
||||
//- The reciprocal diagonal
|
||||
scalarField rD;
|
||||
|
||||
|
||||
@ -77,11 +77,11 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from matrix components and preconditioner data stream
|
||||
//- Construct from matrix components and preconditioner solver controls
|
||||
diagonalPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream& preconditionerData
|
||||
const lduMatrix::solver&,
|
||||
const dictionary& solverControlsUnused
|
||||
);
|
||||
|
||||
|
||||
@ -93,9 +93,6 @@ public:
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Read and reset the preconditioner parameters from the given stream
|
||||
virtual void read(Istream& preconditionerData);
|
||||
|
||||
//- Return wA the preconditioned form of residual rA
|
||||
virtual void precondition
|
||||
(
|
||||
@ -104,8 +101,7 @@ public:
|
||||
const direction cmpt=0
|
||||
) const;
|
||||
|
||||
//- Return wT the transpose-matrix preconditioned form of
|
||||
// residual rT.
|
||||
//- Return wT the transpose-matrix preconditioned form of residual rT.
|
||||
virtual void preconditionT
|
||||
(
|
||||
scalarField& wT,
|
||||
@ -113,7 +109,7 @@ public:
|
||||
const direction cmpt=0
|
||||
) const
|
||||
{
|
||||
return(precondition(wT, rT, cmpt));
|
||||
return precondition(wT, rT, cmpt);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -47,7 +47,7 @@ namespace Foam
|
||||
Foam::noPreconditioner::noPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream&
|
||||
const dictionary&
|
||||
)
|
||||
:
|
||||
lduMatrix::preconditioner(sol)
|
||||
@ -56,10 +56,6 @@ Foam::noPreconditioner::noPreconditioner
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::noPreconditioner::read(Istream&)
|
||||
{}
|
||||
|
||||
|
||||
void Foam::noPreconditioner::precondition
|
||||
(
|
||||
scalarField& wA,
|
||||
|
||||
@ -68,11 +68,11 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from matrix components and preconditioner data stream
|
||||
//- Construct from matrix components and preconditioner solver controls
|
||||
noPreconditioner
|
||||
(
|
||||
const lduMatrix::solver& sol,
|
||||
Istream& preconditionerData
|
||||
const lduMatrix::solver&,
|
||||
const dictionary& solverControlsUnused
|
||||
);
|
||||
|
||||
|
||||
@ -84,9 +84,6 @@ public:
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Read and reset the preconditioner parameters from the given stream
|
||||
virtual void read(Istream& preconditionerData);
|
||||
|
||||
//- Return wA the preconditioned form of residual rA
|
||||
virtual void precondition
|
||||
(
|
||||
@ -95,8 +92,7 @@ public:
|
||||
const direction cmpt=0
|
||||
) const;
|
||||
|
||||
//- Return wT the transpose-matrix preconditioned form of
|
||||
// residual rT.
|
||||
//- Return wT the transpose-matrix preconditioned form of residual rT.
|
||||
virtual void preconditionT
|
||||
(
|
||||
scalarField& wT,
|
||||
@ -104,7 +100,7 @@ public:
|
||||
const direction cmpt=0
|
||||
) const
|
||||
{
|
||||
return(precondition(wT, rT, cmpt));
|
||||
return precondition(wT, rT, cmpt);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -27,8 +27,10 @@ Class
|
||||
|
||||
Description
|
||||
Simplified diagonal-based incomplete Cholesky smoother for symmetric
|
||||
matrices. In order to improve efficiency the residual is evaluated after
|
||||
every nSweeps sweeps.
|
||||
matrices.
|
||||
|
||||
To improve efficiency, the residual is evaluated after every nSweeps
|
||||
sweeps.
|
||||
|
||||
SourceFiles
|
||||
DICSmoother.C
|
||||
|
||||
@ -26,9 +26,9 @@ Class
|
||||
Foam::DICGaussSeidelSmoother
|
||||
|
||||
Description
|
||||
Combined DIC/GaussSeidel smoother for symmetric
|
||||
matrices in which DIC smoothing is followed by GaussSeidel to ensure that
|
||||
any "spikes" created by the DIC sweeps are smoothed-out.
|
||||
Combined DIC/GaussSeidel smoother for symmetric matrices in which DIC
|
||||
smoothing is followed by GaussSeidel to ensure that any "spikes" created
|
||||
by the DIC sweeps are smoothed-out.
|
||||
|
||||
SourceFiles
|
||||
DICGaussSeidelSmoother.C
|
||||
@ -47,7 +47,7 @@ namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class DICGaussSeidelSmoother Declaration
|
||||
Class DICGaussSeidelSmoother Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class DICGaussSeidelSmoother
|
||||
@ -57,6 +57,7 @@ class DICGaussSeidelSmoother
|
||||
// Private data
|
||||
|
||||
DICSmoother dicSmoother_;
|
||||
|
||||
GaussSeidelSmoother gsSmoother_;
|
||||
|
||||
|
||||
|
||||
@ -27,8 +27,9 @@ Class
|
||||
|
||||
Description
|
||||
Simplified diagonal-based incomplete LU smoother for asymmetric matrices.
|
||||
In order to improve efficiency the residual is evaluated after every
|
||||
nSweeps sweeps.
|
||||
|
||||
To improve efficiency, the residual is evaluated after every nSweeps
|
||||
sweeps.
|
||||
|
||||
SourceFiles
|
||||
DILUSmoother.C
|
||||
@ -46,7 +47,7 @@ namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class DILUSmoother Declaration
|
||||
Class DILUSmoother Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class DILUSmoother
|
||||
|
||||
@ -26,9 +26,9 @@ Class
|
||||
Foam::DILUGaussSeidelSmoother
|
||||
|
||||
Description
|
||||
Combined DILU/GaussSeidel smoother for asymmetric
|
||||
matrices in which DILU smoothing is followed by GaussSeidel to ensure that
|
||||
any "spikes" created by the DILU sweeps are smoothed-out.
|
||||
Combined DILU/GaussSeidel smoother for asymmetric matrices in which
|
||||
DILU smoothing is followed by GaussSeidel to ensure that any "spikes"
|
||||
created by the DILU sweeps are smoothed-out.
|
||||
|
||||
SourceFiles
|
||||
DILUGaussSeidelSmoother.C
|
||||
@ -47,7 +47,7 @@ namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class DILUGaussSeidelSmoother Declaration
|
||||
Class DILUGaussSeidelSmoother Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class DILUGaussSeidelSmoother
|
||||
@ -57,6 +57,7 @@ class DILUGaussSeidelSmoother
|
||||
// Private data
|
||||
|
||||
DILUSmoother diluSmoother_;
|
||||
|
||||
GaussSeidelSmoother gsSmoother_;
|
||||
|
||||
|
||||
|
||||
@ -37,36 +37,31 @@ namespace Foam
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
||||
|
||||
Foam::IStringStream Foam::BICCG::solverDataStream
|
||||
Foam::dictionary Foam::BICCG::solverDict
|
||||
(
|
||||
const scalar tolerance,
|
||||
const scalar tol,
|
||||
const scalar relTol
|
||||
) const
|
||||
)
|
||||
{
|
||||
return IStringStream
|
||||
(
|
||||
"{ preconditioner DILU;"
|
||||
" tolerance " + name(tolerance) + "; relTol " + name(relTol) + "; }"
|
||||
);
|
||||
dictionary dict(IStringStream("solver PBiCG; preconditioner DILU;")());
|
||||
dict.add("tolerance", tol);
|
||||
dict.add("relTol", relTol);
|
||||
|
||||
return dict;
|
||||
}
|
||||
|
||||
|
||||
Foam::IStringStream Foam::BICCG::solverDataStream
|
||||
Foam::dictionary Foam::BICCG::solverDict
|
||||
(
|
||||
const word& solverName,
|
||||
Istream& solverData
|
||||
) const
|
||||
Istream& is
|
||||
)
|
||||
{
|
||||
scalar tolerance(readScalar(solverData));
|
||||
scalar relTol(readScalar(solverData));
|
||||
scalar tol(readScalar(is));
|
||||
scalar relTol(readScalar(is));
|
||||
|
||||
return IStringStream
|
||||
(
|
||||
solverName + "{ preconditioner DILU;"
|
||||
" tolerance " + name(tolerance) + "; relTol " + name(relTol) + "; }"
|
||||
);
|
||||
return solverDict(tol, relTol);
|
||||
}
|
||||
|
||||
|
||||
@ -79,8 +74,7 @@ Foam::BICCG::BICCG
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
const scalar tolerance,
|
||||
const scalar relTol
|
||||
const dictionary& solverControls
|
||||
)
|
||||
:
|
||||
PBiCG
|
||||
@ -90,7 +84,7 @@ Foam::BICCG::BICCG
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverDataStream(tolerance, relTol)()
|
||||
solverControls
|
||||
)
|
||||
{}
|
||||
|
||||
@ -102,7 +96,8 @@ Foam::BICCG::BICCG
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const scalar tolerance,
|
||||
const scalar relTol
|
||||
)
|
||||
:
|
||||
PBiCG
|
||||
@ -112,18 +107,8 @@ Foam::BICCG::BICCG
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverDataStream(word::null, solverData)()
|
||||
solverDict(tolerance, relTol)
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::BICCG::read(Istream& solverData)
|
||||
{
|
||||
word solverName(solverData);
|
||||
PBiCG::read(solverDataStream(solverName, solverData)());
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -32,7 +32,7 @@ Description
|
||||
|
||||
Deprecated
|
||||
This solver is present for backward-compatibility and the PBiCG solver
|
||||
should be used for preference.
|
||||
should be used instead.
|
||||
|
||||
SourceFiles
|
||||
BICCG.C
|
||||
@ -65,31 +65,39 @@ class BICCG
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const BICCG&);
|
||||
|
||||
//- Return the dictionary data-stream constructed from the components.
|
||||
// Needed for backward compatibility
|
||||
IStringStream solverDataStream
|
||||
(
|
||||
const scalar tolerance,
|
||||
const scalar relTol
|
||||
) const;
|
||||
|
||||
//- Return the dictionary data-stream constructed from the old-style
|
||||
// data-stream. Needed for backward compatibility
|
||||
IStringStream solverDataStream
|
||||
(
|
||||
const word& solverName,
|
||||
Istream& solverData
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Return the dictionary constructed from the components.
|
||||
// Needed for backward compatibility
|
||||
static dictionary solverDict
|
||||
(
|
||||
const scalar tol,
|
||||
const scalar relTol
|
||||
);
|
||||
|
||||
//- Return the dictionary constructed from the old-style data-stream.
|
||||
// Needed for backward compatibility
|
||||
static dictionary solverDict(Istream&);
|
||||
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("BICCG");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from matrix components and solver data stream
|
||||
BICCG
|
||||
(
|
||||
const word& fieldName,
|
||||
const lduMatrix& matrix,
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
|
||||
//- Construct from matrix components and tolerances
|
||||
BICCG
|
||||
(
|
||||
@ -102,28 +110,11 @@ public:
|
||||
const scalar relTol = 0.0
|
||||
);
|
||||
|
||||
//- Construct from matrix components and solver data stream
|
||||
BICCG
|
||||
(
|
||||
const word& fieldName,
|
||||
const lduMatrix& matrix,
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
);
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
virtual ~BICCG()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Read and reset the solver parameters from the given stream
|
||||
void read(Istream& solverData);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -49,7 +49,7 @@ Foam::GAMGSolver::GAMGSolver
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
)
|
||||
:
|
||||
lduMatrix::solver
|
||||
@ -59,7 +59,7 @@ Foam::GAMGSolver::GAMGSolver
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverData
|
||||
solverControls
|
||||
),
|
||||
|
||||
// Default values for all controls
|
||||
@ -112,7 +112,7 @@ Foam::GAMGSolver::GAMGSolver
|
||||
"const FieldField<Field, scalar>& interfaceBouCoeffs,"
|
||||
"const FieldField<Field, scalar>& interfaceIntCoeffs,"
|
||||
"const lduInterfaceFieldPtrsList& interfaces,"
|
||||
"Istream& solverData"
|
||||
"const dictionary& solverControls"
|
||||
")"
|
||||
) << "No coarse levels created, either matrix too small for GAMG"
|
||||
" or nCellsInCoarsestLevel too large.\n"
|
||||
@ -154,6 +154,7 @@ void Foam::GAMGSolver::readControls()
|
||||
{
|
||||
lduMatrix::solver::readControls();
|
||||
|
||||
// we could also consider supplying defaults here too
|
||||
controlDict_.readIfPresent("cacheAgglomeration", cacheAgglomeration_);
|
||||
controlDict_.readIfPresent("nPreSweeps", nPreSweeps_);
|
||||
controlDict_.readIfPresent("nPostSweeps", nPostSweeps_);
|
||||
|
||||
@ -212,7 +212,7 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from lduMatrix
|
||||
//- Construct from lduMatrix and solver controls
|
||||
GAMGSolver
|
||||
(
|
||||
const word& fieldName,
|
||||
@ -220,7 +220,7 @@ public:
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
|
||||
|
||||
@ -374,7 +374,7 @@ void Foam::GAMGSolver::initVcycle
|
||||
interfaceBouCoeffs_,
|
||||
interfaceIntCoeffs_,
|
||||
interfaces_,
|
||||
controlDict_.lookup("smoother")
|
||||
controlDict_
|
||||
)
|
||||
);
|
||||
|
||||
@ -408,7 +408,7 @@ void Foam::GAMGSolver::initVcycle
|
||||
interfaceLevelsBouCoeffs_[leveli],
|
||||
interfaceLevelsIntCoeffs_[leveli],
|
||||
interfaceLevels_[leveli],
|
||||
controlDict_.lookup("smoother")
|
||||
controlDict_
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@ -36,40 +36,33 @@ namespace Foam
|
||||
addICCGSymMatrixConstructorToTable_;
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
Foam::IStringStream Foam::ICCG::solverDataStream
|
||||
Foam::dictionary Foam::ICCG::solverDict
|
||||
(
|
||||
const scalar tolerance,
|
||||
const scalar tol,
|
||||
const scalar relTol
|
||||
) const
|
||||
)
|
||||
{
|
||||
return IStringStream
|
||||
(
|
||||
"{ preconditioner DIC;"
|
||||
" tolerance " + name(tolerance) + "; relTol " + name(relTol) + "; }"
|
||||
);
|
||||
dictionary dict(IStringStream("solver PCG; preconditioner DIC;")());
|
||||
dict.add("tolerance", tol);
|
||||
dict.add("relTol", relTol);
|
||||
|
||||
return dict;
|
||||
}
|
||||
|
||||
|
||||
Foam::IStringStream Foam::ICCG::solverDataStream
|
||||
Foam::dictionary Foam::ICCG::solverDict
|
||||
(
|
||||
const word& solverName,
|
||||
Istream& solverData
|
||||
) const
|
||||
Istream& is
|
||||
)
|
||||
{
|
||||
scalar tolerance(readScalar(solverData));
|
||||
scalar relTol(readScalar(solverData));
|
||||
scalar tol(readScalar(is));
|
||||
scalar relTol(readScalar(is));
|
||||
|
||||
return IStringStream
|
||||
(
|
||||
solverName + "{ preconditioner DIC;"
|
||||
" tolerance " + name(tolerance) + "; relTol " + name(relTol) + "; }"
|
||||
);
|
||||
return solverDict(tol, relTol);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::ICCG::ICCG
|
||||
@ -79,8 +72,7 @@ Foam::ICCG::ICCG
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
const scalar tolerance,
|
||||
const scalar relTol
|
||||
const dictionary& solverControls
|
||||
)
|
||||
:
|
||||
PCG
|
||||
@ -90,7 +82,7 @@ Foam::ICCG::ICCG
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverDataStream(tolerance, relTol)()
|
||||
solverControls
|
||||
)
|
||||
{}
|
||||
|
||||
@ -102,7 +94,8 @@ Foam::ICCG::ICCG
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const scalar tolerance,
|
||||
const scalar relTol
|
||||
)
|
||||
:
|
||||
PCG
|
||||
@ -112,18 +105,8 @@ Foam::ICCG::ICCG
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverDataStream(word::null, solverData)()
|
||||
solverDict(tolerance, relTol)
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::ICCG::read(Istream& solverData)
|
||||
{
|
||||
word solverName(solverData);
|
||||
PCG::read(solverDataStream(solverName, solverData)());
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -65,31 +65,38 @@ class ICCG
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const ICCG&);
|
||||
|
||||
//- Return the dictionary data-stream constructed from the components.
|
||||
// Needed for backward compatibility
|
||||
IStringStream solverDataStream
|
||||
(
|
||||
const scalar tolerance,
|
||||
const scalar relTol
|
||||
) const;
|
||||
|
||||
//- Return the dictionary data-stream constructed from the old-style
|
||||
// data-stream. Needed for backward compatibility
|
||||
IStringStream solverDataStream
|
||||
(
|
||||
const word& solverName,
|
||||
Istream& solverData
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Return the dictionary constructed from the components.
|
||||
// Needed for backward compatibility
|
||||
static dictionary solverDict
|
||||
(
|
||||
const scalar tol,
|
||||
const scalar relTol
|
||||
);
|
||||
|
||||
//- Return the dictionary constructed from the old-style data-stream.
|
||||
// Needed for backward compatibility
|
||||
static dictionary solverDict(Istream&);
|
||||
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("ICCG");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from matrix components and solver data stream
|
||||
ICCG
|
||||
(
|
||||
const word& fieldName,
|
||||
const lduMatrix& matrix,
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
//- Construct from matrix components and tolerances
|
||||
ICCG
|
||||
(
|
||||
@ -102,28 +109,11 @@ public:
|
||||
const scalar relTol = 0.0
|
||||
);
|
||||
|
||||
//- Construct from matrix components and solver data stream
|
||||
ICCG
|
||||
(
|
||||
const word& fieldName,
|
||||
const lduMatrix& matrix,
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
);
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
virtual ~ICCG()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Read and reset the solver parameters from the given stream
|
||||
void read(Istream& solverData);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -46,7 +46,7 @@ Foam::PBiCG::PBiCG
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
)
|
||||
:
|
||||
lduMatrix::solver
|
||||
@ -56,7 +56,7 @@ Foam::PBiCG::PBiCG
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverData
|
||||
solverControls
|
||||
)
|
||||
{}
|
||||
|
||||
@ -70,12 +70,10 @@ Foam::lduMatrix::solverPerformance Foam::PBiCG::solve
|
||||
const direction cmpt
|
||||
) const
|
||||
{
|
||||
word preconditionerName(controlDict_.lookup("preconditioner"));
|
||||
|
||||
// --- Setup class containing solver performance data
|
||||
lduMatrix::solverPerformance solverPerf
|
||||
(
|
||||
preconditionerName + typeName,
|
||||
lduMatrix::preconditioner::getName(controlDict_) + typeName,
|
||||
fieldName_
|
||||
);
|
||||
|
||||
@ -128,7 +126,7 @@ Foam::lduMatrix::solverPerformance Foam::PBiCG::solve
|
||||
lduMatrix::preconditioner::New
|
||||
(
|
||||
*this,
|
||||
controlDict_.lookup("preconditioner")
|
||||
controlDict_
|
||||
);
|
||||
|
||||
// --- Solver iteration
|
||||
|
||||
@ -77,7 +77,7 @@ public:
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
|
||||
|
||||
@ -46,7 +46,7 @@ Foam::PCG::PCG
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
)
|
||||
:
|
||||
lduMatrix::solver
|
||||
@ -56,7 +56,7 @@ Foam::PCG::PCG
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverData
|
||||
solverControls
|
||||
)
|
||||
{}
|
||||
|
||||
@ -70,12 +70,10 @@ Foam::lduMatrix::solverPerformance Foam::PCG::solve
|
||||
const direction cmpt
|
||||
) const
|
||||
{
|
||||
word preconditionerName(controlDict_.lookup("preconditioner"));
|
||||
|
||||
// --- Setup class containing solver performance data
|
||||
lduMatrix::solverPerformance solverPerf
|
||||
(
|
||||
preconditionerName + typeName,
|
||||
lduMatrix::preconditioner::getName(controlDict_) + typeName,
|
||||
fieldName_
|
||||
);
|
||||
|
||||
@ -119,7 +117,7 @@ Foam::lduMatrix::solverPerformance Foam::PCG::solve
|
||||
lduMatrix::preconditioner::New
|
||||
(
|
||||
*this,
|
||||
controlDict_.lookup("preconditioner")
|
||||
controlDict_
|
||||
);
|
||||
|
||||
// --- Solver iteration
|
||||
|
||||
@ -27,7 +27,7 @@ Class
|
||||
|
||||
Description
|
||||
Preconditioned conjugate gradient solver for symmetric lduMatrices
|
||||
using a run-time selectable preconditiioner.
|
||||
using a run-time selectable preconditioner.
|
||||
|
||||
SourceFiles
|
||||
PCG.C
|
||||
@ -69,7 +69,7 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from matrix components and solver data stream
|
||||
//- Construct from matrix components and solver controls
|
||||
PCG
|
||||
(
|
||||
const word& fieldName,
|
||||
@ -77,7 +77,7 @@ public:
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ Foam::diagonalSolver::diagonalSolver
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
)
|
||||
:
|
||||
lduMatrix::solver
|
||||
@ -53,19 +53,13 @@ Foam::diagonalSolver::diagonalSolver
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverData
|
||||
solverControls
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::diagonalSolver::read(Istream& solverData)
|
||||
{
|
||||
word solverName(solverData);
|
||||
}
|
||||
|
||||
|
||||
Foam::lduMatrix::solverPerformance Foam::diagonalSolver::solve
|
||||
(
|
||||
scalarField& psi,
|
||||
|
||||
@ -68,7 +68,7 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from matrix
|
||||
//- Construct from matrix and solver controls
|
||||
diagonalSolver
|
||||
(
|
||||
const word& fieldName,
|
||||
@ -76,14 +76,15 @@ public:
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Read and reset the solver parameters from the given stream
|
||||
void read(Istream& solverData);
|
||||
void read(const dictionary&)
|
||||
{}
|
||||
|
||||
//- Solve the matrix with this solver
|
||||
lduMatrix::solverPerformance solve
|
||||
|
||||
@ -49,7 +49,7 @@ Foam::smoothSolver::smoothSolver
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
)
|
||||
:
|
||||
lduMatrix::solver
|
||||
@ -59,9 +59,8 @@ Foam::smoothSolver::smoothSolver
|
||||
interfaceBouCoeffs,
|
||||
interfaceIntCoeffs,
|
||||
interfaces,
|
||||
solverData
|
||||
),
|
||||
nSweeps_(1)
|
||||
solverControls
|
||||
)
|
||||
{
|
||||
readControls();
|
||||
}
|
||||
@ -72,7 +71,7 @@ Foam::smoothSolver::smoothSolver
|
||||
void Foam::smoothSolver::readControls()
|
||||
{
|
||||
lduMatrix::solver::readControls();
|
||||
controlDict_.readIfPresent("nSweeps", nSweeps_);
|
||||
nSweeps_ = controlDict_.lookupOrDefault<label>("nSweeps", 1);
|
||||
}
|
||||
|
||||
|
||||
@ -96,7 +95,7 @@ Foam::lduMatrix::solverPerformance Foam::smoothSolver::solve
|
||||
interfaceBouCoeffs_,
|
||||
interfaceIntCoeffs_,
|
||||
interfaces_,
|
||||
controlDict_.lookup("smoother")
|
||||
controlDict_
|
||||
);
|
||||
|
||||
smootherPtr->smooth
|
||||
@ -144,7 +143,7 @@ Foam::lduMatrix::solverPerformance Foam::smoothSolver::solve
|
||||
interfaceBouCoeffs_,
|
||||
interfaceIntCoeffs_,
|
||||
interfaces_,
|
||||
controlDict_.lookup("smoother")
|
||||
controlDict_
|
||||
);
|
||||
|
||||
// Smoothing loop
|
||||
|
||||
@ -66,7 +66,6 @@ protected:
|
||||
//- Read the control parameters from the controlDict_
|
||||
virtual void readControls();
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
@ -75,7 +74,7 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from matrix components and solver data stream
|
||||
//- Construct from matrix components and solver controls
|
||||
smoothSolver
|
||||
(
|
||||
const word& fieldName,
|
||||
@ -83,10 +82,15 @@ public:
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const FieldField<Field, scalar>& interfaceIntCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
Istream& solverData
|
||||
const dictionary& solverControls
|
||||
);
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
virtual ~smoothSolver()
|
||||
{}
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Solve the matrix with this solver
|
||||
|
||||
@ -27,9 +27,12 @@ License
|
||||
#include "solution.H"
|
||||
#include "Time.H"
|
||||
|
||||
// these two are for old syntax compatibility:
|
||||
#include "BICCG.H"
|
||||
#include "ICCG.H"
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
int Foam::solution::debug(Foam::debug::debugSwitch("solution", false));
|
||||
int Foam::solution::debug(::Foam::debug::debugSwitch("solution", 0));
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
@ -55,6 +58,83 @@ Foam::solution::solution(const objectRegistry& obr, const fileName& dictName)
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
Foam::label Foam::solution::upgradeSolverDict
|
||||
(
|
||||
dictionary& dict,
|
||||
const bool verbose
|
||||
)
|
||||
{
|
||||
label nChanged = 0;
|
||||
|
||||
// backward compatibility:
|
||||
// recast primitive entries into dictionary entries
|
||||
forAllIter(dictionary, dict, iter)
|
||||
{
|
||||
if (!iter().isDict())
|
||||
{
|
||||
Istream& is = iter().stream();
|
||||
word name(is);
|
||||
dictionary subdict;
|
||||
|
||||
if (name == "BICCG")
|
||||
{
|
||||
// special treatment for very old syntax
|
||||
subdict = BICCG::solverDict(is);
|
||||
}
|
||||
else if (name == "ICCG")
|
||||
{
|
||||
// special treatment for very old syntax
|
||||
subdict = ICCG::solverDict(is);
|
||||
}
|
||||
else
|
||||
{
|
||||
subdict.add("solver", name);
|
||||
subdict <<= dictionary(is);
|
||||
|
||||
// preconditioner can be a primitiveEntry w/o settings,
|
||||
// or a dictionaryEntry.
|
||||
// transform primitiveEntry with settings -> dictionaryEntry
|
||||
entry* precond = subdict.lookupEntryPtr
|
||||
(
|
||||
"preconditioner",
|
||||
false,
|
||||
false
|
||||
);
|
||||
|
||||
if (precond && !precond->isDict())
|
||||
{
|
||||
Istream& is = precond->stream();
|
||||
is >> name;
|
||||
|
||||
if (!is.eof())
|
||||
{
|
||||
dictionary precondDict;
|
||||
precondDict.add("preconditioner", name);
|
||||
precondDict <<= dictionary(is);
|
||||
|
||||
subdict.set("preconditioner", precondDict);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// write out information to help people adjust to the new syntax
|
||||
if (verbose)
|
||||
{
|
||||
Info<< "// using new solver syntax:\n"
|
||||
<< iter().keyword() << subdict << endl;
|
||||
}
|
||||
|
||||
// overwrite with dictionary entry
|
||||
dict.set(iter().keyword(), subdict);
|
||||
|
||||
nChanged++;
|
||||
}
|
||||
}
|
||||
|
||||
return nChanged;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::solution::read()
|
||||
{
|
||||
if (regIOobject::read())
|
||||
@ -69,6 +149,7 @@ bool Foam::solution::read()
|
||||
if (dict.found("solvers"))
|
||||
{
|
||||
solvers_ = dict.subDict("solvers");
|
||||
upgradeSolverDict(solvers_);
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -97,7 +178,7 @@ bool Foam::solution::relax(const word& name) const
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Lookup relax for " << name << endl;
|
||||
Info<< "Find relax for " << name << endl;
|
||||
}
|
||||
|
||||
return relaxationFactors_.found(name);
|
||||
@ -127,7 +208,7 @@ const Foam::dictionary& Foam::solution::solverDict(const word& name) const
|
||||
}
|
||||
|
||||
|
||||
Foam::ITstream& Foam::solution::solver(const word& name) const
|
||||
const Foam::dictionary& Foam::solution::solver(const word& name) const
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
@ -135,7 +216,7 @@ Foam::ITstream& Foam::solution::solver(const word& name) const
|
||||
<< "Lookup solver for " << name << endl;
|
||||
}
|
||||
|
||||
return solvers_.lookup(name);
|
||||
return solvers_.subDict(name);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -44,7 +44,7 @@ namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class solution Declaration
|
||||
Class solution Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class solution
|
||||
@ -59,7 +59,6 @@ class solution
|
||||
//- Dictionary of solver parameters for all the fields
|
||||
dictionary solvers_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow default bitwise copy construct and assignment
|
||||
@ -69,6 +68,11 @@ class solution
|
||||
|
||||
public:
|
||||
|
||||
//- Update from older solver controls syntax
|
||||
// Usually verbose, since we want to know about the changes
|
||||
// Returns the number of settings changed
|
||||
static label upgradeSolverDict(dictionary& dict, const bool verbose=true);
|
||||
|
||||
//- Debug switch
|
||||
static int debug;
|
||||
|
||||
@ -84,7 +88,7 @@ public:
|
||||
// Access
|
||||
|
||||
//- Return the selected sub-dictionary of solvers if the "select"
|
||||
// keyword is given othewise return the complete dictionary
|
||||
// keyword is given, otherwise return the complete dictionary
|
||||
const dictionary& solutionDict() const;
|
||||
|
||||
//- Return true if the relaxation factor is given for the field
|
||||
@ -93,13 +97,11 @@ public:
|
||||
//- Return the relaxation factor for the given field
|
||||
scalar relaxationFactor(const word& name) const;
|
||||
|
||||
//- Return the dictionary of solver parameters for the given field
|
||||
//- Return the solver controls dictionary for the given field
|
||||
const dictionary& solverDict(const word& name) const;
|
||||
|
||||
//- Return the stream of solver parameters for the given field
|
||||
// @deprecated Backward compatibility only - should use solverDict
|
||||
ITstream& solver(const word& name) const;
|
||||
|
||||
//- Return the solver controls dictionary for the given field
|
||||
const dictionary& solver(const word& name) const;
|
||||
|
||||
// Read
|
||||
|
||||
|
||||
@ -336,8 +336,8 @@ Foam::fvMatrix<Type>::fvMatrix
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "fvMatrix<Type>(GeometricField<Type, fvPatchField, volMesh>&,"
|
||||
" Istream&) : "
|
||||
Info<< "fvMatrix<Type>"
|
||||
"(GeometricField<Type, fvPatchField, volMesh>&, Istream&) : "
|
||||
"constructing fvMatrix<Type> for field " << psi_.name()
|
||||
<< endl;
|
||||
}
|
||||
@ -1257,7 +1257,7 @@ template<class Type>
|
||||
Foam::lduMatrix::solverPerformance Foam::solve
|
||||
(
|
||||
fvMatrix<Type>& fvm,
|
||||
Istream& solverControls
|
||||
const dictionary& solverControls
|
||||
)
|
||||
{
|
||||
return fvm.solve(solverControls);
|
||||
@ -1267,7 +1267,7 @@ template<class Type>
|
||||
Foam::lduMatrix::solverPerformance Foam::solve
|
||||
(
|
||||
const tmp<fvMatrix<Type> >& tfvm,
|
||||
Istream& solverControls
|
||||
const dictionary& solverControls
|
||||
)
|
||||
{
|
||||
lduMatrix::solverPerformance solverPerf =
|
||||
|
||||
@ -220,8 +220,8 @@ public:
|
||||
// Member functions
|
||||
|
||||
//- Solve returning the solution statistics.
|
||||
// Solver controls read from Istream
|
||||
lduMatrix::solverPerformance solve(Istream&);
|
||||
// Use the given solver controls
|
||||
lduMatrix::solverPerformance solve(const dictionary&);
|
||||
|
||||
//- Solve returning the solution statistics.
|
||||
// Solver controls read from fvSolution
|
||||
@ -359,16 +359,16 @@ public:
|
||||
);
|
||||
|
||||
//- Construct and return the solver
|
||||
// Solver controls read from Istream
|
||||
autoPtr<fvSolver> solver(Istream&);
|
||||
// Use the given solver controls
|
||||
autoPtr<fvSolver> solver(const dictionary&);
|
||||
|
||||
//- Construct and return the solver
|
||||
// Solver controls read from fvSolution
|
||||
autoPtr<fvSolver> solver();
|
||||
|
||||
//- Solve returning the solution statistics.
|
||||
// Solver controls read from Istream
|
||||
lduMatrix::solverPerformance solve(Istream&);
|
||||
// Use the given solver controls
|
||||
lduMatrix::solverPerformance solve(const dictionary&);
|
||||
|
||||
//- Solve returning the solution statistics.
|
||||
// Solver controls read from fvSolution
|
||||
@ -518,16 +518,20 @@ void checkMethod
|
||||
|
||||
|
||||
//- Solve returning the solution statistics given convergence tolerance
|
||||
// Solver controls read Istream
|
||||
// Use the given solver controls
|
||||
template<class Type>
|
||||
lduMatrix::solverPerformance solve(fvMatrix<Type>&, Istream&);
|
||||
lduMatrix::solverPerformance solve(fvMatrix<Type>&, const dictionary&);
|
||||
|
||||
|
||||
//- Solve returning the solution statistics given convergence tolerance,
|
||||
// deleting temporary matrix after solution.
|
||||
// Solver controls read Istream
|
||||
// Use the given solver controls
|
||||
template<class Type>
|
||||
lduMatrix::solverPerformance solve(const tmp<fvMatrix<Type> >&, Istream&);
|
||||
lduMatrix::solverPerformance solve
|
||||
(
|
||||
const tmp<fvMatrix<Type> >&,
|
||||
const dictionary&
|
||||
);
|
||||
|
||||
|
||||
//- Solve returning the solution statistics given convergence tolerance
|
||||
|
||||
@ -53,12 +53,12 @@ void Foam::fvMatrix<Type>::setComponentReference
|
||||
template<class Type>
|
||||
Foam::lduMatrix::solverPerformance Foam::fvMatrix<Type>::solve
|
||||
(
|
||||
Istream& solverControls
|
||||
const dictionary& solverControls
|
||||
)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "fvMatrix<Type>::solve(Istream& solverControls) : "
|
||||
Info<< "fvMatrix<Type>::solve(const dictionary& solverControls) : "
|
||||
"solving fvMatrix<Type>"
|
||||
<< endl;
|
||||
}
|
||||
@ -108,7 +108,7 @@ Foam::lduMatrix::solverPerformance Foam::fvMatrix<Type>::solve
|
||||
internalCoeffs_.component(cmpt)
|
||||
);
|
||||
|
||||
lduInterfaceFieldPtrsList interfaces =
|
||||
lduInterfaceFieldPtrsList interfaces =
|
||||
psi_.boundaryField().interfaces();
|
||||
|
||||
// Use the initMatrixInterfaces and updateMatrixInterfaces to correct
|
||||
@ -142,7 +142,7 @@ Foam::lduMatrix::solverPerformance Foam::fvMatrix<Type>::solve
|
||||
bouCoeffsCmpt,
|
||||
intCoeffsCmpt,
|
||||
interfaces,
|
||||
solverControls.rewind()
|
||||
solverControls
|
||||
)->solve(psiCmpt, sourceCmpt, cmpt);
|
||||
|
||||
solverPerf.print();
|
||||
@ -170,20 +170,20 @@ template<class Type>
|
||||
Foam::autoPtr<typename Foam::fvMatrix<Type>::fvSolver>
|
||||
Foam::fvMatrix<Type>::solver()
|
||||
{
|
||||
return solver(psi_.mesh().solver(psi_.name()));
|
||||
return solver(psi_.mesh().solverDict(psi_.name()));
|
||||
}
|
||||
|
||||
template<class Type>
|
||||
Foam::lduMatrix::solverPerformance Foam::fvMatrix<Type>::fvSolver::solve()
|
||||
{
|
||||
return solve(psi_.mesh().solver(psi_.name()));
|
||||
return solve(psi_.mesh().solverDict(psi_.name()));
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
Foam::lduMatrix::solverPerformance Foam::fvMatrix<Type>::solve()
|
||||
{
|
||||
return solve(psi_.mesh().solver(psi_.name()));
|
||||
return solve(psi_.mesh().solverDict(psi_.name()));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -45,7 +45,7 @@ void Foam::fvMatrix<Foam::scalar>::setComponentReference
|
||||
internalCoeffs_[patchi][facei] +=
|
||||
diag()[psi_.mesh().boundary()[patchi].faceCells()[facei]];
|
||||
|
||||
boundaryCoeffs_[patchi][facei] +=
|
||||
boundaryCoeffs_[patchi][facei] +=
|
||||
diag()[psi_.mesh().boundary()[patchi].faceCells()[facei]]
|
||||
*value;
|
||||
}
|
||||
@ -57,12 +57,12 @@ template<>
|
||||
Foam::autoPtr<Foam::fvMatrix<Foam::scalar>::fvSolver>
|
||||
Foam::fvMatrix<Foam::scalar>::solver
|
||||
(
|
||||
Istream& solverControls
|
||||
const dictionary& solverControls
|
||||
)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "fvMatrix<scalar>::solver(Istream& solverControls) : "
|
||||
Info<< "fvMatrix<scalar>::solver(const dictionary& solverControls) : "
|
||||
"solver for fvMatrix<scalar>"
|
||||
<< endl;
|
||||
}
|
||||
@ -96,7 +96,7 @@ Foam::fvMatrix<Foam::scalar>::solver
|
||||
template<>
|
||||
Foam::lduMatrix::solverPerformance Foam::fvMatrix<Foam::scalar>::fvSolver::solve
|
||||
(
|
||||
Istream& solverControls
|
||||
const dictionary& solverControls
|
||||
)
|
||||
{
|
||||
scalarField saveDiag = fvMat_.diag();
|
||||
@ -105,8 +105,10 @@ Foam::lduMatrix::solverPerformance Foam::fvMatrix<Foam::scalar>::fvSolver::solve
|
||||
scalarField totalSource = fvMat_.source();
|
||||
fvMat_.addBoundarySource(totalSource, false);
|
||||
|
||||
// assign new solver controls
|
||||
solver_->read(solverControls);
|
||||
lduMatrix::solverPerformance solverPerf =
|
||||
|
||||
lduMatrix::solverPerformance solverPerf =
|
||||
solver_->solve(fvMat_.psi().internalField(), totalSource);
|
||||
|
||||
solverPerf.print();
|
||||
@ -122,12 +124,12 @@ Foam::lduMatrix::solverPerformance Foam::fvMatrix<Foam::scalar>::fvSolver::solve
|
||||
template<>
|
||||
Foam::lduMatrix::solverPerformance Foam::fvMatrix<Foam::scalar>::solve
|
||||
(
|
||||
Istream& solverControls
|
||||
const dictionary& solverControls
|
||||
)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "fvMatrix<scalar>::solve(Istream& solverControls) : "
|
||||
Info<< "fvMatrix<scalar>::solve(const dictionary& solverControls) : "
|
||||
"solving fvMatrix<scalar>"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
@ -23,9 +23,10 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
InClass
|
||||
Foam::fvScalarMatrix
|
||||
Foam::fvMatrix
|
||||
|
||||
Description
|
||||
A scalar instance of fvMatrix
|
||||
|
||||
SourceFiles
|
||||
fvScalarMatrix.C
|
||||
@ -56,13 +57,22 @@ void fvMatrix<scalar>::setComponentReference
|
||||
);
|
||||
|
||||
template<>
|
||||
autoPtr<fvMatrix<scalar>::fvSolver> fvMatrix<scalar>::solver(Istream&);
|
||||
autoPtr<fvMatrix<scalar>::fvSolver> fvMatrix<scalar>::solver
|
||||
(
|
||||
const dictionary&
|
||||
);
|
||||
|
||||
template<>
|
||||
lduMatrix::solverPerformance fvMatrix<scalar>::fvSolver::solve(Istream&);
|
||||
lduMatrix::solverPerformance fvMatrix<scalar>::fvSolver::solve
|
||||
(
|
||||
const dictionary&
|
||||
);
|
||||
|
||||
template<>
|
||||
lduMatrix::solverPerformance fvMatrix<scalar>::solve(Istream&);
|
||||
lduMatrix::solverPerformance fvMatrix<scalar>::solve
|
||||
(
|
||||
const dictionary&
|
||||
);
|
||||
|
||||
template<>
|
||||
tmp<scalarField> fvMatrix<scalar>::residual() const;
|
||||
|
||||
@ -142,8 +142,8 @@ void Foam::MULES::implicitSolve
|
||||
{
|
||||
const fvMesh& mesh = psi.mesh();
|
||||
|
||||
dictionary MULESSolver(mesh.solver(psi.name()));
|
||||
const dictionary& MULEScontrols = MULESSolver.subDict("MULESImplicit");
|
||||
const dictionary& MULEScontrols =
|
||||
mesh.solverDict(psi.name()).subDict("MULESImplicit");
|
||||
|
||||
label maxIter
|
||||
(
|
||||
|
||||
@ -55,7 +55,7 @@ namespace Foam
|
||||
Foam::displacementSBRStressFvMotionSolver::displacementSBRStressFvMotionSolver
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
Istream& msData
|
||||
Istream&
|
||||
)
|
||||
:
|
||||
fvMotionSolver(mesh),
|
||||
|
||||
@ -93,8 +93,8 @@ public:
|
||||
//- Construct from polyMesh and data stream
|
||||
displacementSBRStressFvMotionSolver
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
Istream& msData
|
||||
const polyMesh&,
|
||||
Istream& msDataUnused
|
||||
);
|
||||
|
||||
|
||||
|
||||
@ -107,9 +107,10 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from polyMesh and data stream
|
||||
displacementComponentLaplacianFvMotionSolver
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
const polyMesh&,
|
||||
Istream& msData
|
||||
);
|
||||
|
||||
|
||||
@ -58,7 +58,7 @@ Foam::displacementInterpolationFvMotionSolver::
|
||||
displacementInterpolationFvMotionSolver
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
Istream& msData
|
||||
Istream&
|
||||
)
|
||||
:
|
||||
fvMotionSolver(mesh),
|
||||
|
||||
@ -115,10 +115,11 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from polyMesh and data stream
|
||||
displacementInterpolationFvMotionSolver
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
Istream& msData
|
||||
const polyMesh&,
|
||||
Istream& msDataUnused
|
||||
);
|
||||
|
||||
|
||||
|
||||
@ -53,7 +53,7 @@ namespace Foam
|
||||
Foam::displacementLaplacianFvMotionSolver::displacementLaplacianFvMotionSolver
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
Istream& msData
|
||||
Istream&
|
||||
)
|
||||
:
|
||||
fvMotionSolver(mesh),
|
||||
|
||||
@ -101,8 +101,8 @@ public:
|
||||
//- Construct from polyMesh and data stream
|
||||
displacementLaplacianFvMotionSolver
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
Istream& msData
|
||||
const polyMesh&,
|
||||
Istream& msDataUnused
|
||||
);
|
||||
|
||||
|
||||
|
||||
@ -93,9 +93,10 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from polyMesh and data stream (provides component)
|
||||
velocityComponentLaplacianFvMotionSolver
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
const polyMesh&,
|
||||
Istream& msData
|
||||
);
|
||||
|
||||
|
||||
@ -50,7 +50,7 @@ namespace Foam
|
||||
Foam::velocityLaplacianFvMotionSolver::velocityLaplacianFvMotionSolver
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
Istream& msData
|
||||
Istream&
|
||||
)
|
||||
:
|
||||
fvMotionSolver(mesh),
|
||||
|
||||
@ -88,7 +88,11 @@ public:
|
||||
// Constructors
|
||||
|
||||
//- Construct from polyMesh and data stream
|
||||
velocityLaplacianFvMotionSolver(const polyMesh& mesh, Istream& msData);
|
||||
velocityLaplacianFvMotionSolver
|
||||
(
|
||||
const polyMesh&,
|
||||
Istream& msDataUnused
|
||||
);
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
Reference in New Issue
Block a user