ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / thermophysicalModels / radiationModels / derivedFvPatchFields / MarshakRadiation / MarshakRadiationMixedFvPatchScalarField.C
blob9068904d50c7f8a75f7560e5670acdef30390ce7
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
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
13     the Free Software Foundation, either version 3 of the License, or
14     (at your 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, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 #include "MarshakRadiationMixedFvPatchScalarField.H"
27 #include "addToRunTimeSelectionTable.H"
28 #include "fvPatchFieldMapper.H"
29 #include "volFields.H"
31 #include "fvc.H"
32 #include "radiationModel.H"
33 #include "physicoChemicalConstants.H"
35 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
37 Foam::MarshakRadiationFvPatchScalarField::MarshakRadiationFvPatchScalarField
39     const fvPatch& p,
40     const DimensionedField<scalar, volMesh>& iF
43     mixedFvPatchScalarField(p, iF),
44     radiationCoupledBase(p, "undefined", scalarField::null()),
45     TName_("undefined")
47     refValue() = 0.0;
48     refGrad() = 0.0;
49     valueFraction() = 0.0;
53 Foam::MarshakRadiationFvPatchScalarField::MarshakRadiationFvPatchScalarField
55     const MarshakRadiationFvPatchScalarField& ptf,
56     const fvPatch& p,
57     const DimensionedField<scalar, volMesh>& iF,
58     const fvPatchFieldMapper& mapper
61     mixedFvPatchScalarField(ptf, p, iF, mapper),
62     radiationCoupledBase
63     (
64         p,
65         ptf.emissivityMethod(),
66         ptf.emissivity_
67     ),
68     TName_(ptf.TName_)
72 Foam::MarshakRadiationFvPatchScalarField::MarshakRadiationFvPatchScalarField
74     const fvPatch& p,
75     const DimensionedField<scalar, volMesh>& iF,
76     const dictionary& dict
79     mixedFvPatchScalarField(p, iF),
80     radiationCoupledBase(p, dict),
81     TName_(dict.lookup("T"))
83     if (dict.found("value"))
84     {
85         refValue() = scalarField("value", dict, p.size());
86     }
87     else
88     {
89         refValue() = 0.0;
90     }
92     // zero gradient
93     refGrad() = 0.0;
95     valueFraction() = 1.0;
97     fvPatchScalarField::operator=(refValue());
101 Foam::MarshakRadiationFvPatchScalarField::MarshakRadiationFvPatchScalarField
103     const MarshakRadiationFvPatchScalarField& ptf
106     mixedFvPatchScalarField(ptf),
107     radiationCoupledBase
108     (
109         ptf.patch(),
110         ptf.emissivityMethod(),
111         ptf.emissivity_
112     ),
113     TName_(ptf.TName_)
117 Foam::MarshakRadiationFvPatchScalarField::MarshakRadiationFvPatchScalarField
119     const MarshakRadiationFvPatchScalarField& ptf,
120     const DimensionedField<scalar, volMesh>& iF
123     mixedFvPatchScalarField(ptf, iF),
124     radiationCoupledBase
125     (
126         ptf.patch(),
127         ptf.emissivityMethod(),
128         ptf.emissivity_
129     ),
130     TName_(ptf.TName_)
134 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
136 void Foam::MarshakRadiationFvPatchScalarField::autoMap
138     const fvPatchFieldMapper& m
141     scalarField::autoMap(m);
145 void Foam::MarshakRadiationFvPatchScalarField::rmap
147     const fvPatchScalarField& ptf,
148     const labelList& addr
151     mixedFvPatchScalarField::rmap(ptf, addr);
155 void Foam::MarshakRadiationFvPatchScalarField::updateCoeffs()
157     if (this->updated())
158     {
159         return;
160     }
162     // Since we're inside initEvaluate/evaluate there might be processor
163     // comms underway. Change the tag we use.
164     int oldTag = UPstream::msgType();
165     UPstream::msgType() = oldTag+1;
167     // Temperature field
168     const scalarField& Tp =
169         patch().lookupPatchField<volScalarField, scalar>(TName_);
171     // Re-calc reference value
172     refValue() = 4.0*constant::physicoChemical::sigma.value()*pow4(Tp);
174     // Diffusion coefficient - created by radiation model's ::updateCoeffs()
175     const scalarField& gamma =
176         patch().lookupPatchField<volScalarField, scalar>("gammaRad");
178     const scalarField temissivity = emissivity();
180     const scalarField Ep(temissivity/(2.0*(2.0 - temissivity)));
182     // Set value fraction
183     valueFraction() = 1.0/(1.0 + gamma*patch().deltaCoeffs()/Ep);
185     // Restore tag
186     UPstream::msgType() = oldTag;
188     mixedFvPatchScalarField::updateCoeffs();
192 void Foam::MarshakRadiationFvPatchScalarField::write(Ostream& os) const
194     mixedFvPatchScalarField::write(os);
195     radiationCoupledBase::write(os);
196     os.writeKeyword("T") << TName_ << token::END_STATEMENT << nl;
200 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
202 namespace Foam
204     makePatchTypeField
205     (
206         fvPatchScalarField,
207         MarshakRadiationFvPatchScalarField
208     );
212 // ************************************************************************* //