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-------------------------------------------------------------------------------
10License
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
33namespace 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// ************************************************************************* //
#define R(A, B, C, D, E, F, K, M)
label n
Macros for easy insertion into run-time selection tables.
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
General Fresnel reflection model bewtween a dialectric and an absorbing medium.
Definition: Fresnel.H:58
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
Definition: className.H:121
dynamicFvMesh & mesh
autoPtr< radiation::radiationModel > radiation(radiation::radiationModel::New(T))
Namespace for OpenFOAM.
dimensionedScalar tan(const dimensionedScalar &ds)
dimensionedSymmTensor sqr(const dimensionedVector &dv)
dimensionedScalar sin(const dimensionedScalar &ds)
dimensionedScalar sqrt(const dimensionedScalar &ds)
dimensionedScalar cos(const dimensionedScalar &ds)
dictionary dict