Fresnel.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 | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2017 OpenCFD Ltd.
9 -------------------------------------------------------------------------------
10 License
11  This file is part of OpenFOAM.
12 
13  OpenFOAM is free software: you can redistribute it and/or modify it
14  under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21  for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25 
26 \*---------------------------------------------------------------------------*/
27 
28 #include "Fresnel.H"
30 
31 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
32 
33 namespace Foam
34 {
35  namespace radiation
36  {
37  defineTypeNameAndDebug(Fresnel, 0);
38 
40  (
41  reflectionModel,
42  Fresnel,
43  dictionary
44  );
45  }
46 }
47 
48 
49 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
50 
52 (
53  const dictionary& dict,
54  const fvMesh& mesh
55 )
56 :
57  reflectionModel(dict, mesh),
58  coeffsDict_(dict.subDict(typeName + "Coeffs")),
59  nk1_(coeffsDict_.lookup("nk1")),
60  nk2_(coeffsDict_.lookup("nk2"))
61 {}
62 
63 
64 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
65 
67 (
68  const scalar incidentAngle
69 ) const
70 {
71  // absorbing madium
72  scalar n1 = sqr(nk1_[0]);
73  //scalar k1 = sqr(nk1_[1]);
74 
75  // dialectric
76  scalar n2 = sqr(nk2_[0]);
77  scalar k2 = sqr(nk2_[1]);
78 
79  scalar sinTheta1 = sin(incidentAngle);
80 
81  scalar sqrP =
82  0.5*
83  (
84  sqrt
85  (
86  sqr(n2-k2-n1*sqr(sinTheta1)) + 4*n2*k2
87  )
88  + (n2-k2-n1*sqr(sinTheta1))
89  );
90 
91  scalar sqrQ =
92  0.5*
93  (
94  sqrt
95  (
96  sqr(n2-k2-n1*sqr(sinTheta1)) + 4*n2*k2
97  )
98  - (n2-k2-n1*sqr(sinTheta1))
99  );
100 
101  scalar cosTheta1 = cos(incidentAngle);
102  scalar tanTheta1 = tan(incidentAngle);
103 
104  scalar rhoP =
105  (
106  (sqr(sqrt(n1)*cosTheta1 - sqrt(sqrP)) + sqrQ)
107  /
108  (sqr(sqrt(n1)*cosTheta1 + sqrt(sqrP)) + sqrQ)
109  );
110 
111  scalar rhoN =
112  (
113  (sqr(sqrt(sqrP) - sqrt(n1)*sinTheta1*tanTheta1) + sqrQ)
114  /
115  (sqr(sqrt(sqrP) + sqrt(n1)*sinTheta1*tanTheta1) + sqrQ)
116  )*rhoP;
117 
118  return 0.5*(rhoP + rhoN);
119 }
120 
121 
123 (
124  const vector& i,
125  const vector& n
126 ) const
127 {
128  return i + 2.0*(-i & n) * n;
129 }
130 
131 
132 // ************************************************************************* //
dictionary dict
dimensionedSymmTensor sqr(const dimensionedVector &dv)
defineTypeNameAndDebug(cloudAbsorptionEmission, 0)
dimensionedScalar sqrt(const dimensionedScalar &ds)
virtual scalar rho(const scalar incidentAngle) const
Return reflectivity from medium1 to medium2 and a incident angle.
Macros for easy insertion into run-time selection tables.
dynamicFvMesh & mesh
dimensionedScalar cos(const dimensionedScalar &ds)
Fresnel(const dictionary &dict, const fvMesh &mesh)
Construct from components.
Vector< scalar > vector
Definition: vector.H:57
dimensionedScalar sin(const dimensionedScalar &ds)
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
addToRunTimeSelectionTable(absorptionEmissionModel, cloudAbsorptionEmission, dictionary)
label n
dimensionedScalar tan(const dimensionedScalar &ds)
virtual vector R(const vector &incident, const vector &n) const
Return reflected direction.
autoPtr< radiation::radiationModel > radiation(radiation::radiationModel::New(T))
Namespace for OpenFOAM.