FreeFOAM The Cross-Platform CFD Toolkit
newPsiChemistryModel.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd.
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
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
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
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.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 \*---------------------------------------------------------------------------*/
25 
26 #include "psiChemistryModel.H"
27 
28 // * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
29 
31 (
32  const fvMesh& mesh
33 )
34 {
35  word psiChemistryModelType;
36  word thermoTypeName;
37  word userModel;
38 
39  // Enclose the creation of the chemistrtyProperties to ensure it is
40  // deleted before the chemistrtyProperties is created otherwise the
41  // dictionary is entered in the database twice
42  {
43  IOdictionary chemistryPropertiesDict
44  (
45  IOobject
46  (
47  "chemistryProperties",
48  mesh.time().constant(),
49  mesh,
50  IOobject::MUST_READ,
51  IOobject::NO_WRITE
52  )
53  );
54 
55  chemistryPropertiesDict.lookup("psiChemistryModel") >> userModel;
56 
57  // construct chemistry model type name by inserting first template
58  // argument
59  label tempOpen = userModel.find('<');
60  label tempClose = userModel.find('>');
61 
62  word className = userModel(0, tempOpen);
63  thermoTypeName = userModel(tempOpen + 1, tempClose - tempOpen - 1);
64 
65  psiChemistryModelType =
66  className + '<' + typeName + ',' + thermoTypeName + '>';
67  }
68 
69  if (debug)
70  {
71  Info<< "Selecting psiChemistryModel " << psiChemistryModelType << endl;
72  }
73  else
74  {
75  Info<< "Selecting psiChemistryModel " << userModel << endl;
76  }
77 
78  fvMeshConstructorTable::iterator cstrIter =
79  fvMeshConstructorTablePtr_->find(psiChemistryModelType);
80 
81  if (cstrIter == fvMeshConstructorTablePtr_->end())
82  {
83  if (debug)
84  {
85  FatalErrorIn("psiChemistryModelBase::New(const mesh&)")
86  << "Unknown psiChemistryModel type " << psiChemistryModelType
87  << nl << nl << "Valid psiChemistryModel types are:" << nl
88  << fvMeshConstructorTablePtr_->sortedToc() << nl << exit(FatalError);
89  }
90  else
91  {
92  wordList models = fvMeshConstructorTablePtr_->sortedToc();
93  forAll(models, i)
94  {
95  models[i] = models[i].replace(typeName + ',', "");
96  }
97 
98  FatalErrorIn("psiChemistryModelBase::New(const mesh&)")
99  << "Unknown psiChemistryModel type " << userModel
100  << nl << nl << "Valid psiChemistryModel types are:" << nl
101  << models << nl << exit(FatalError);
102  }
103  }
104 
106  (cstrIter()(mesh, typeName, thermoTypeName));
107 }
108 
109 
110 // ************************ vim: set sw=4 sts=4 et: ************************ //