Updates from Graham:
[OpenFOAM-1.5.x.git] / src / lagrangian / molecularDynamics / potential / tetherPotential / tetherPotentialList / tetherPotentialList.C
blobac7279198042c9ef62d6b3576c7296f4761b407f
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
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 "tetherPotentialList.H"
29 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
31 void Foam::tetherPotentialList::readTetherPotentialDict
33     const dictionary& tetherPotentialDict,
34     const List<word>& idList,
35     const List<label>& tetherIds
38     if (!tetherIds.size())
39     {
40         Info<< nl << "No tethered molecules found." << endl;
42         idMap_.setSize(0);
43     }
44     else
45     {
46         Info<< nl << "Building tether potentials." << endl;
48         idMap_ = List<label>(idList.size(), -1);
50         label tetherMapIndex = 0;
52         forAll(tetherIds, t)
53         {
54             const label tetherId = tetherIds[t];
56             word tetherPotentialName = idList[tetherId];
58             if (!tetherPotentialDict.found(tetherPotentialName))
59             {
60                 FatalErrorIn("tetherPotentialList::readTetherPotentialDict")
61                     << "tether potential specification subDict "
62                     << tetherPotentialName << " not found" << nl
63                     << abort(FatalError);
64             }
66             this->set
67             (
68                 tetherMapIndex,
69                 tetherPotential::New
70                 (
71                     tetherPotentialName,
72                     tetherPotentialDict.subDict(tetherPotentialName)
73                 )
74             );
76             idMap_[tetherId] = tetherMapIndex;
78             tetherMapIndex++;
79         }
80     }
84 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
86 Foam::tetherPotentialList::tetherPotentialList()
88     PtrList<tetherPotential>(),
89     idMap_()
93 Foam::tetherPotentialList::tetherPotentialList
95     const dictionary& idListDict,
96     const dictionary& tetherPotentialDict,
97     const List<label>& tetherIds
100     PtrList<tetherPotential>(),
101     idMap_()
103     buildPotentials(idListDict, tetherPotentialDict, tetherIds);
107 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
109 Foam::tetherPotentialList::~tetherPotentialList()
113 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
115 void Foam::tetherPotentialList::buildPotentials
117     const dictionary& idListDict,
118     const dictionary& tetherPotentialDict,
119     const List<label>& tetherIds
122     setSize(tetherIds.size());
124     List<word> idList(idListDict.lookup("idList"));
126     readTetherPotentialDict(tetherPotentialDict, idList, tetherIds);
130 const Foam::tetherPotential& Foam::tetherPotentialList::tetherPotentialFunction
132     const label a
133 ) const
135     return (*this)[tetherPotentialIndex(a)];
139 Foam::scalar Foam::tetherPotentialList::force
141     const label a,
142     const scalar rITMag
143 ) const
145     scalar f = (*this)[tetherPotentialIndex(a)].force(rITMag);
147     return f;
151 Foam::scalar Foam::tetherPotentialList::energy
153     const label a,
154     const scalar rITMag
155 ) const
157     scalar e = (*this)[tetherPotentialIndex(a)].energy(rITMag);
159     return e;
163 // ************************************************************************* //