Merge commit 'd3b269b7c6ffa0cd68845adfecdfb849316dba71' into nextRelease
[foam-extend-3.2.git] / src / engine / ignition / ignitionSite.C
blobe8316e715eb912a63c9201f947ed21e4003c5b65
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     |
5     \\  /    A nd           | For copyright notice see file Copyright
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend 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 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 #include "ignitionSite.H"
27 #include "objectRegistry.H"
28 #include "Time.H"
29 #include "volFields.H"
31 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
33 namespace Foam
36 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
38 void ignitionSite::findIgnitionCells(const fvMesh& mesh)
40     // Bit tricky: generate C and V before shortcutting if cannot find
41     // cell locally. mesh.C generation uses parallel communication.
42     const volVectorField& centres = mesh.C();
43     const scalarField& vols = mesh.V();
45     label ignCell = mesh.findCell(location_);
46     if (ignCell == -1)
47     {
48         return;
49     }
51     scalar radius = diameter_/2.0;
53     cells_.setSize(1);
54     cellVolumes_.setSize(1);
56     cells_[0] = ignCell;
57     cellVolumes_[0] = vols[ignCell];
59     scalar minDist = GREAT;
60     label nIgnCells = 1;
62     forAll(centres, celli)
63     {
64         scalar dist = mag(centres[celli] - location_);
66         if (dist < minDist)
67         {
68             minDist = dist;
69         }
71         if (dist < radius && celli != ignCell)
72         {
73             cells_.setSize(nIgnCells+1);
74             cellVolumes_.setSize(nIgnCells+1);
76             cells_[nIgnCells] = celli;
77             cellVolumes_[nIgnCells] = vols[celli];
79             nIgnCells++;
80         }
81     }
83     if (cells_.size())
84     {
85         Pout<< "Found ignition cells:" << endl << cells_ << endl;
86     }
90 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
92 const labelList& ignitionSite::cells() const
94     if (mesh_.changing() && timeIndex_ != db_.timeIndex())
95     {
96         const_cast<ignitionSite&>(*this).findIgnitionCells(mesh_);
97     }
98     timeIndex_ = db_.timeIndex();
100     return cells_;
104 bool ignitionSite::igniting() const
106     scalar curTime = db_.value();
107     scalar deltaT = db_.deltaT().value();
109     return
110     (
111         (curTime - deltaT >= time_)
112         &&
113         (curTime - deltaT < time_ + max(duration_, deltaT) + SMALL)
114     );
118 bool ignitionSite::ignited() const
120     scalar curTime = db_.value();
121     scalar deltaT = db_.deltaT().value();
123     return(curTime - deltaT >= time_);
127 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
129 void ignitionSite::operator=(const ignitionSite& is)
131     location_ = is.location_;
132     diameter_ = is.diameter_;
133     time_ = is.time_;
134     duration_ = is.duration_;
135     strength_ = is.strength_;
136     cells_ = is.cells_;
137     cellVolumes_ = is.cellVolumes_;
141 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
143 } // End namespace Foam
145 // ************************************************************************* //