Line data Source code
1 : /**
2 : \file taumodel.cpp
3 :
4 : Bojan Nikolic <b.nikolic@mrao.cam.ac.uk>, <bojan@bnikolic.co.uk>
5 :
6 : Renamed taumodel.cc 2023
7 :
8 : */
9 :
10 : #include <cmath>
11 : #include "taumodel.h"
12 : #include "tbutils.h"
13 :
14 : namespace LibAIR2 {
15 :
16 0 : TauModel::TauModel(void):
17 0 : n(0.1),
18 0 : TPhy(275),
19 0 : TBack(2.7),
20 0 : TBackRJ(PlanckToRJ(183.3, TBack))
21 : {
22 0 : }
23 :
24 0 : double TauModel::eval(size_t ch) const
25 : {
26 : (void) ch; // use not yet implemented
27 0 : return TBackRJ * exp(-n)+ TPhy*(1-exp(-n));
28 : }
29 :
30 0 : void TauModel::eval(std::vector<double> & res) const
31 : {
32 0 : res.resize(1);
33 0 : res[0]=eval(0);
34 0 : }
35 :
36 0 : double TauModel::dTdc (size_t ch) const
37 : {
38 : (void) ch; // use not yet implemented
39 0 : return -1;
40 : }
41 :
42 0 : double TauModel::dTdL_ND (size_t ch) const
43 : {
44 : (void) ch; // use not yet implemented
45 0 : return -1;
46 : }
47 :
48 0 : void TauModel::dTdL_ND(std::vector<double> &res) const
49 : {
50 0 : res.resize(1);
51 0 : res[0]=-1;
52 0 : }
53 :
54 0 : void TauModel::AddParams(std::vector<Minim::DParamCtr> &pars)
55 : {
56 0 : pars.push_back(Minim::DParamCtr (&n ,
57 : "n",
58 : true ,
59 : "Opacity per unit airmass"
60 : ));
61 :
62 0 : pars.push_back(Minim::DParamCtr (&TPhy ,
63 : "TPhy",
64 : true ,
65 : "Physical temperature"
66 : ));
67 0 : }
68 :
69 0 : LapseTauModel::LapseTauModel(double Gamma,
70 : double hS,
71 0 : double hT):
72 0 : Gamma(Gamma),
73 0 : nkappa(1.0/(hS*(1-exp(-hT/hS)))),
74 0 : hS(hS)
75 : {
76 0 : }
77 :
78 0 : double LapseTauModel::eval(size_t ch) const
79 : {
80 : (void) ch; // use not yet implemented
81 0 : return TBackRJ * exp(-n) +
82 0 : TPhy*(1-exp(-n)) +
83 0 : Gamma / ( nkappa * n) * ( 1 - (n+1)*exp(-n));
84 : }
85 :
86 0 : void LapseTauModel::AddParams(std::vector<Minim::DParamCtr> &pars)
87 : {
88 0 : TauModel::AddParams(pars);
89 :
90 0 : pars.push_back(Minim::DParamCtr (&Gamma ,
91 : "gamma",
92 : false,
93 : "Atmospheric lapse rate"
94 : ));
95 :
96 0 : }
97 :
98 :
99 0 : NumLapseTau::NumLapseTau(double Gamma,
100 : double hS,
101 : double hT,
102 0 : size_t nstep):
103 : LapseTauModel(Gamma, hS, hT),
104 0 : nstep(nstep)
105 : {
106 0 : }
107 :
108 0 : double NumLapseTau::htau(double ntau) const
109 : {
110 0 : return -hS * log( 1- ntau/nkappa/hS);
111 : }
112 :
113 0 : double NumLapseTau::eval(size_t ch) const
114 : {
115 : (void) ch; // use not yet implemented
116 0 : const double deltan = n/nstep;
117 :
118 0 : double Tt = TBackRJ;
119 0 : for (size_t i=0; i < nstep; ++i)
120 : {
121 0 : const double TLocal=TPhy + Gamma * htau(i*deltan/n);
122 0 : Tt= Tt*exp(-deltan) + TLocal*(1-exp(-deltan));
123 : }
124 :
125 0 : return Tt;
126 : }
127 :
128 0 : OffsetTauModel::OffsetTauModel(double nfix):
129 0 : nfix(nfix)
130 : {
131 0 : }
132 :
133 0 : double OffsetTauModel::eval(size_t ch) const
134 : {
135 : (void) ch; // use not yet implemented
136 0 : const double ntot=nfix+n;
137 0 : return TBackRJ * exp(-ntot)+ TPhy*(1-exp(-ntot));
138 : }
139 :
140 : }
141 :
142 :
|