25 std::ifstream ifs(filename, std::ifstream::in);
30 name =
"ssmi_mean_emis_climato";
50 Vector ssmi(2 *
nchan);
52 for (Index j = 0; j <
ndat; j++) {
55 for (Index nssmi = 0; nssmi < 2 *
nchan; nssmi++) {
60 is >> class1 >> class2;
62 if (class1 > 0 && class2 > 0 && ipos <
ndat) {
64 for (Index i = 0; i <
nchan; i++) {
65 emis(ipos, i) = ssmi[i];
77 Index maxlat =
static_cast<Index
>(180.0 /
dlat);
85 Numeric rcelat =
dlat *
PI / 180.0;
89 Numeric aecell = aezon *
dlat / 360.0;
91 for (Index i = 0; i < maxlat / 2; ++i) {
92 Numeric xlatb =
static_cast<Numeric
>(i) *
dlat;
93 Numeric xlate = xlatb +
dlat;
94 Numeric rlatb =
DEG2RAD * xlatb;
95 Numeric rlate =
DEG2RAD * xlate;
98 Numeric htzone = hte - htb;
100 Numeric rcells = azone / aecell;
101 Index icellr =
static_cast<Index
>(rcells + 0.5);
105 Index lat1 = i + maxlat / 2;
106 Index lat2 = maxlat / 2 - 1 - i;
112 for (Index i = 1; i < maxlat; ++i) {
120 for (Index j = 0; j <
ndat; j++) {
127 "Latitude input must be within the range [-90.0, 90.0].");
130 "Longitude input must be within the range [0.0, 360.0].");
142 Index ilat =
static_cast<Index
>((lat + 90.0) /
dlat);
144 static_cast<Index
>(lon / (360.0 /
static_cast<Numeric
>(
ncells[ilat]))) +
146 for (Index i = 0; i < ilat; ++i) {
163 Numeric lat_new, lon_new;
165 for (Numeric i = -di; i < di; i += 1.0) {
166 lat_new = lat + i *
dlat;
167 lon_new = lon - di *
dlat;
175 for (Numeric i = -di; i < di; i += 1.0) {
176 lat_new = lat + i *
dlat;
177 lon_new = lon + di *
dlat;
185 for (Numeric i = -di; i < di; i += 1.0) {
186 lat_new = lat - di *
dlat;
187 lon_new = lon + i *
dlat;
195 for (Numeric i = -di; i < di; i += 1.0) {
196 lat_new = lat + di *
dlat;
197 lon_new = lon + i *
dlat;
209 Index index_lat_max =
static_cast<Index
>(180.0 /
dlat);
210 Index index_lat = -1;
211 Index index_lon = -1;
212 if (cellnum >=
firstcells[index_lat_max - 1]) {
213 index_lat = index_lat_max;
214 index_lon = cellnum -
firstcells[index_lat_max];
216 for (Index i = 0; i < index_lat_max; ++i) {
223 Numeric lat = (
static_cast<Numeric
>(index_lat) - 0.5) *
dlat - 90.0;
224 Numeric lon = (
static_cast<Numeric
>(index_lon) - 0.5) *
225 (360.0 /
static_cast<Numeric
>(
ncells[index_lat]));
226 return std::make_pair(lat, lon);
233 Index class2)
const {
237 }
else if ((19.35 < f) && (f <= 37.0)) {
238 const Numeric
a = (37.0 - f) / (37.0 - 19.35);
239 const Numeric
b = (f - 19.35) / (37.0 - 19.35);
240 emiss =
a * emiss19 +
b * emiss37;
241 }
else if ((f > 37.0) && (f < 85.5)) {
242 const Numeric
b = (85.5 - f) / (85.5 - 37.0);
243 const Numeric
c = (f - 37.0) / (85.5 - 37.0);
244 emiss =
b * emiss37 +
c * emiss85;
245 }
else if (85.5 <= f) {
247 if ((class2 > 9) && (class2 < 14) && (emiss85 > emiss37)) {
249 emiss = emiss85 + (f - 85.5) * (emiss85 - emiss37) / (85.5 - 37.0) *
251 }
else if ((f > 150.0) && (f <= 190.0)) {
252 emiss = emiss85 + (150.0 - 85.5) * (emiss85 - emiss37) / (85.5 - 37.0) *
254 emiss += (f - 150.0) * (emiss - emiss85) / (150.0 - 85.5) *
256 }
else if (f > 190.0) {
257 emiss = emiss85 + (150.0 - 85.5) * (emiss85 - emiss37) / (85.5 - 37.0) *
259 emiss += (190.0 - 150.0) * (emiss - emiss85) / (150.0 - 85.5) *
275 const ConstVectorView& ev,
276 const ConstVectorView& eh)
const {
277 Vector emiss_scal_h(3);
278 Vector emiss_scal_v(3);
280 for (Index i = 0; i < 3; ++i) {
281 Numeric e0 =
a0_k0[i + (class1 - 1) * 3] +
282 a0_k1[i + (class1 - 1) * 3] * ev[i] +
283 a0_k2[i + (class1 - 1) * 3] * eh[i];
285 Numeric a0 =
a0_eveh[i + (class1 - 1) * 3];
286 Numeric a1 =
a1_eveh[i + (class1 - 1) * 3];
287 Numeric a2 =
a2_eveh[i + (class1 - 1) * 3];
288 Numeric a3 =
a3_eveh[i + (class1 - 1) * 3];
289 Numeric b0 =
b0_eveh[i + (class1 - 1) * 3];
290 Numeric b1 =
b1_eveh[i + (class1 - 1) * 3];
291 Numeric b2 =
b2_eveh[i + (class1 - 1) * 3];
292 Numeric b3 =
b3_eveh[i + (class1 - 1) * 3];
294 Numeric s1_v = (theta - 53.0) / -53.0 * (e0 - a0) / a0;
295 Numeric em53_v = a3 * pow(53.0, 3.0) + a2 * pow(53.0, 2.0) + a1 * 53.0 + a0;
296 Numeric s2_v = theta / 53.0 * (ev[i] - em53_v) / em53_v;
297 Numeric s_v = 1.0 + s1_v + s2_v;
300 a3 * pow(theta, 3) + a2 * pow(theta, 2) + a1 * theta + a0;
301 emiss_scal_v[i] = s_v * emtheta_v;
303 Numeric s1_h = (theta - 53.0) / -53.0 * (e0 - b0) / b0;
304 Numeric em53_h = b3 * pow(53.0, 3.0) + b2 * pow(53.0, 2.0) + b1 * 53.0 + b0;
305 Numeric s2_h = theta / 53.0 * (eh[i] - em53_h) / em53_h;
306 Numeric s_h = 1.0 + s1_h + s2_h;
309 b3 * pow(theta, 3) + b2 * pow(theta, 2) + b1 * theta + b0;
310 emiss_scal_h[i] = s_h * emtheta_h;
314 emiss_scal_h[0], emiss_scal_h[1], emiss_scal_h[2], freq, class2);
316 emiss_scal_v[0], emiss_scal_v[1], emiss_scal_v[2], freq, class2);
318 if (emiss_v < emiss_h) {
319 emiss_v = 0.5 * (emiss_v + emiss_h);
322 return std::make_pair(emiss_v, emiss_h);
326 os << ta.
name << std::endl;
335 0.11509, 0.091535, 0.34796, 0.10525, 0.16627, 0.24434,
336 0.29217, 0.23809, 0.28954, 0.17516, 0.19459, 0.28697,
337 0.10521, 0.12126, 0.30278, 0.18212, 0.19625, 0.14551,
338 -0.19202, 0.5411, 0.03739, 0.10292, 0.5486, -0.058937,
339 -0.022672, 0.44492, -0.058448, -0.33894, -0.17621, 0.14742};
342 0.61168, 0.59095, 0.7918, 0.60271, 0.69213, 0.62218, 0.32728, 0.34334,
343 0.37062, 0.51217, 0.4491, 0.50101, 0.48913, 0.41932, 0.29734, 0.64474,
344 0.30637, 0.031107, 1.0405, 0.17538, 1.3215, 0.61819, 0.31298, 1.7218,
345 0.87761, 0.47583, 1.2583, 1.0959, 0.92842, 0.51033};
348 0.26726, 0.32033, -0.14778, 0.28547, 0.13592, 0.13193, 0.37178, 0.41813,
349 0.33875, 0.30203, 0.35479, 0.20189, 0.40663, 0.47493, 0.40668, 0.14811,
350 0.52382, 0.86634, 0.14286, 0.27164, -0.37947, 0.2737, 0.12001, -0.67315,
351 0.13492, 0.065463, -0.19316, 0.24905, 0.25475, 0.34637};
354 0.9592599869E+00, 0.9565299749E+00, 0.9511899948E+00, 0.9560700059E+00,
355 0.9541199803E+00, 0.9483199716E+00, 0.9461100101E+00, 0.9439799786E+00,
356 0.9387800097E+00, 0.9317600131E+00, 0.9289000034E+00, 0.9236800075E+00,
357 0.9208700061E+00, 0.9190599918E+00, 0.9105200171E+00, 0.9162799716E+00,
358 0.8937299848E+00, 0.8014699817E+00, 0.9570500255E+00, 0.9213600159E+00,
359 0.7893999815E+00, 0.9639400244E+00, 0.9530599713E+00, 0.8850200176E+00,
360 0.9685299993E+00, 0.9622600079E+00, 0.9118800163E+00, 0.8997200131E+00,
361 0.9012699723E+00, 0.9107499719E+00};
364 0.3627802414E-07, -0.7778328204E-08, 0.4396108011E-07, 0.2503205394E-06,
365 0.1996262995E-06, 0.2929977541E-06, 0.4190530660E-06, 0.3655744649E-06,
366 0.3519195673E-06, 0.5574374313E-06, 0.5273076340E-06, 0.5376484182E-06,
367 0.1026844529E-05, 0.9679998811E-06, 0.8616486866E-06, 0.3180800832E-06,
368 0.2886778532E-06, 0.2310362675E-06, -0.1118036366E-06, -0.1502856577E-06,
369 0.4842232926E-07, -0.8410978580E-08, -0.3478669441E-07, 0.2209441590E-06,
370 0.2485776633E-06, 0.1800235907E-06, 0.2510202251E-06, 0.2687000915E-06,
371 0.1740325644E-06, 0.3562134339E-06};
374 0.3067140824E-05, 0.2520012231E-05, 0.4831396382E-05, 0.8213598448E-05,
375 0.7378375358E-05, 0.1022081960E-04, 0.1225889173E-04, 0.1165553113E-04,
376 0.1188659007E-04, 0.1693615741E-04, 0.1648317448E-04, 0.1715818144E-04,
377 0.2744720041E-04, 0.2642072104E-04, 0.2671847506E-04, 0.1349592094E-04,
378 0.1261523357E-04, 0.5447756394E-05, 0.2064244654E-05, 0.1919016057E-06,
379 0.5940860319E-06, 0.5334760772E-05, 0.4130339221E-05, 0.4104662821E-05,
380 0.6530796327E-05, 0.5727014013E-05, 0.7451782039E-05, 0.1071246970E-04,
381 0.9539280654E-05, 0.1034286015E-04};
384 -0.2004991551E-07, -0.6895366056E-07, -0.2047409282E-06, -0.7322448425E-07,
385 -0.1273002681E-06, -0.2729916844E-06, -0.9421125213E-07, -0.1683332300E-06,
386 -0.2726891637E-06, -0.1317753799E-06, -0.2107972250E-06, -0.3556060904E-06,
387 -0.1889465580E-06, -0.2757958271E-06, -0.4909850304E-06, 0.7339644004E-08,
388 -0.4058669560E-06, -0.4146343997E-06, 0.6170279931E-07, -0.1998567996E-06,
389 -0.4713119139E-07, -0.1361754887E-07, -0.1765622955E-06, -0.2348146637E-06,
390 -0.3901189061E-07, -0.1305666189E-06, -0.1533838798E-06, -.2679148992E-07,
391 -0.4441960044E-07, -0.1815613899E-06};
394 0.9592599869E+00, 0.9565299749E+00, 0.9511899948E+00, 0.9560700059E+00,
395 0.9541199803E+00, 0.9483199716E+00, 0.9461100101E+00, 0.9439799786E+00,
396 0.9387800097E+00, 0.9317600131E+00, 0.9289000034E+00, 0.9236800075E+00,
397 0.9208700061E+00, 0.9190599918E+00, 0.9105200171E+00, 0.9162799716E+00,
398 0.8937299848E+00, 0.8014699817E+00, 0.9570500255E+00, 0.9213600159E+00,
399 0.7893999815E+00, 0.9639400244E+00, 0.9530599713E+00, 0.8850200176E+00,
400 0.9685299993E+00, 0.9622600079E+00, 0.9118800163E+00, 0.8997200131E+00,
401 0.9012699723E+00, 0.9107499719E+00};
404 0.3626608347E-07, -0.7786279177E-08, 0.4393379172E-07, 0.2502746099E-06,
405 0.1995944388E-06, 0.2929554341E-06, 0.4189516289E-06, 0.3655020180E-06,
406 0.3518483140E-06, 0.5572838404E-06, 0.5271903092E-06, 0.5375342766E-06,
407 0.1026605219E-05, 0.9677979733E-06, 0.8614680951E-06, 0.3179358714E-06,
408 0.2884899004E-06, 0.2308632219E-06, -0.1118781370E-06, -0.1503948681E-06,
409 0.4834672396E-07, -0.8455684153E-08, -0.3485171618E-07, 0.2208606134E-06,
410 0.2485595019E-06, 0.1799959364E-06, 0.2509846695E-06, 0.2686167306E-06,
411 0.1739760478E-06, 0.3561317214E-06};
414 0.3065537157E-05, 0.2518960400E-05, 0.4829731552E-05, 0.8209894986E-05,
415 0.7375769655E-05, 0.1021809931E-04, 0.1225203869E-04, 0.1165053800E-04,
416 0.1188218721E-04, 0.1692612022E-04, 0.1647546378E-04, 0.1715117833E-04,
417 0.2743142431E-04, 0.2640772436E-04, 0.2670711910E-04, 0.1348545720E-04,
418 0.1260529825E-04, 0.5439695997E-05, 0.2058213340E-05, 0.1860650656E-06,
419 0.5898303925E-06, 0.5330772183E-05, 0.4126528893E-05, 0.4100859314E-05,
420 0.6528573977E-05, 0.5725009032E-05, 0.7449450095E-05, 0.1070590315E-04,
421 0.9534271157E-05, 0.1033751869E-04};
424 -0.1370247134E-06, -0.1436897747E-06, -0.2954870411E-06, -0.3118435643E-06,
425 -0.2916583242E-06, -0.4311032171E-06, -0.5048401022E-06, -0.4662823869E-06,
426 -0.5206445053E-06, -0.7210980471E-06, -0.6662896794E-06, -0.7548637200E-06,
427 -0.1110204039E-05, -0.1030801400E-05, -0.1140921199E-05, -0.6330818110E-06,
428 -0.9186441048E-06, -0.7947813856E-06, -0.3242539890E-06, -0.5027602583E-06,
429 -0.2777987334E-06, -0.2747250676E-06, -0.3811997260E-06, -0.4102405455E-06,
430 -0.1994112324E-06, -0.2555484855E-06, -0.2842682534E-06, -0.4413041665E-06,
431 -0.3717419474E-06, -0.4975536854E-06};
434 0.62, 0.37, 0.46, 0.63};
436 0.30, 0.60, 0.47, 0.35};
Constants of physical expressions as constexpr.
void read(std::istream &is)
static const std::array< Numeric, 30 > a0_eveh
static const std::array< Numeric, 30 > b1_eveh
static const std::array< Numeric, 30 > a1_eveh
Index calc_cellnum(Numeric lat, Numeric lon) const
bool contains(Index cellnumber) const
static const std::array< Numeric, 30 > b2_eveh
Index calc_cellnum_nearest_neighbor(Numeric lat, Numeric lon) const
static const std::array< Numeric, 30 > a0_k0
static const std::array< Numeric, 30 > b0_eveh
ArrayOfIndex correspondence
static const std::array< Numeric, 30 > b3_eveh
static const std::array< Numeric, 4 > rapport54_43
static const std::array< Numeric, 4 > rapport43_32
static const std::array< Numeric, 30 > a0_k2
static const std::array< Numeric, 30 > a3_eveh
static const std::array< Numeric, 30 > a0_k1
static const std::array< Numeric, 30 > a2_eveh
std::pair< Numeric, Numeric > get_coordinates(Index cellnum) const
void telsem_calc_correspondence()
Numeric interp_freq2(Numeric emiss19, Numeric emiss37, Numeric emiss85, Numeric f, Index class2) const
std::pair< Numeric, Numeric > emis_interp(Numeric theta, Numeric freq, Index class1, Index class2, const ConstVectorView &ev, const ConstVectorView &eh) const
Input manipulator class for doubles to enable nan and inf parsing.
#define ARTS_USER_ERROR_IF(condition,...)
constexpr Numeric DEG2RAD
Fast double input stream with support for parsing nan and inf.
void cycle_lat_lon(Numeric &lat, Numeric &lon)
Cyclic latitude longitude coordinates.
constexpr Numeric EARTH_RADIUS
constexpr Numeric pi
The following mathematical constants are generated in python Decimal package by the code:
constexpr Numeric earth_radius
Global constant, the radius of the Earth [m].
constexpr auto deg2rad(auto x) noexcept
Converts degrees to radians.
constexpr Numeric EARTH_RADIUS
constexpr Numeric DEG2RAD
std::ostream & operator<<(std::ostream &os, const TelsemAtlas &ta)
This file contains the definition of the TELSEM atlas format.