fixed writing out entries in advective bc
[OpenFOAM-1.6-ext.git] / src / OpenFOAM / matrices / blockLduMatrix / BlockLduPrecons / BlockLduPrecon / BlockLduPrecon.C
blob4feaf52d59e9c83ac0ac3bb6234e6ae7545bdff0
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-6 H. Jasak All rights reserved
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software; you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation; either version 2 of the License, or (at your
14     option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM; if not, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 \*---------------------------------------------------------------------------*/
27 #include "BlockLduPrecon.H"
28 #include "blockNoPrecons.H"
30 template<class Type>
31 class BlockNoPrecon;
33 // * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
35 template<class Type>
36 Foam::autoPtr<Foam::BlockLduPrecon<Type> > Foam::BlockLduPrecon<Type>::New
38     const BlockLduMatrix<Type>& matrix,
39     const dictionary& dict
42     word preconName;
44     // handle primitive or dictionary entry
45     const entry& e = dict.lookupEntry("preconditioner", false, false);
46     if (e.isDict())
47     {
48         e.dict().lookup("preconditioner") >> preconName;
49     }
50     else
51     {
52         e.stream() >> preconName;
53     }
55     const dictionary& controls = e.isDict() ? e.dict() : dictionary::null;
57     if (matrix.diagonal())
58     {
59         // No preconditioning for the diagonal matrix
60         return autoPtr<BlockLduPrecon<Type> >
61         (
62             new BlockNoPrecon<Type>
63             (
64                 matrix,
65                 controls
66             )
67         );
68     }
69     else
70     {
71         typename dictionaryConstructorTable::iterator constructorIter =
72             dictionaryConstructorTablePtr_->find(preconName);
74         if (constructorIter == dictionaryConstructorTablePtr_->end())
75         {
76             FatalIOErrorIn
77             (
78                 "autoPtr<BlockLduPrecon> BlockLduPrecon::New\n"
79                 "(\n"
80                 "    const BlockLduMatrix<Type>& matrix,\n"
81                 "    const dictionary& dict\n"
82                 ")",
83                 dict
84             )   << "Unknown matrix preconditioner " << preconName
85                 << endl << endl
86                 << "Valid matrix preconditioners are :" << endl
87                 << dictionaryConstructorTablePtr_->toc()
88                 << exit(FatalIOError);
89         }
91         return autoPtr<BlockLduPrecon<Type> >
92         (
93             constructorIter()
94             (
95                 matrix,
96                 controls
97             )
98         );
99     }
103 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
105 template<class Type>
106 Foam::word Foam::BlockLduPrecon<Type>::getName(const dictionary& dict)
108     word name;
110     // handle primitive or dictionary entry
111     const entry& e = dict.lookupEntry("preconditioner", false, false);
112     if (e.isDict())
113     {
114         e.dict().lookup("preconditioner") >> name;
115     }
116     else
117     {
118         e.stream() >> name;
119     }
121     return name;
125 // ************************************************************************* //