44 std::ifstream ifs(filename, std::ifstream::in);
49 name =
"ssmi_mean_emis_climato";
74 for (
Index nssmi = 0; nssmi < 2 *
nchan; nssmi++) {
79 is >> class1 >> class2;
81 if (class1 > 0 && class2 > 0 && ipos <
ndat) {
84 emis(ipos, i) = ssmi[i];
110 for (
Index i = 0; i < maxlat / 2; ++i) {
119 Numeric rcells = azone / aecell;
120 Index icellr =
static_cast<Index>(rcells + 0.5);
124 Index lat1 = i + maxlat / 2;
125 Index lat2 = maxlat / 2 - 1 - i;
131 for (
Index i = 1; i < maxlat; ++i) {
146 "Latitude input must be within the range [-90.0, 90.0].");
149 "Longitude input must be within the range [0.0, 360.0].");
165 for (
Index i = 0; i < ilat; ++i) {
184 for (
Numeric i = -di; i < di; i += 1.0) {
185 lat_new = lat + i *
dlat;
186 lon_new = lon - di *
dlat;
194 for (
Numeric i = -di; i < di; i += 1.0) {
195 lat_new = lat + i *
dlat;
196 lon_new = lon + di *
dlat;
204 for (
Numeric i = -di; i < di; i += 1.0) {
205 lat_new = lat - di *
dlat;
206 lon_new = lon + i *
dlat;
214 for (
Numeric i = -di; i < di; i += 1.0) {
215 lat_new = lat + di *
dlat;
216 lon_new = lon + i *
dlat;
229 Index index_lat = -1;
230 Index index_lon = -1;
231 if (cellnum >=
firstcells[index_lat_max - 1]) {
232 index_lat = index_lat_max;
233 index_lon = cellnum -
firstcells[index_lat_max];
235 for (
Index i = 0; i < index_lat_max; ++i) {
245 return std::make_pair(lat, lon);
252 Index class2)
const {
256 }
else if ((19.35 < f) && (f <= 37.0)) {
257 const Numeric a = (37.0 - f) / (37.0 - 19.35);
258 const Numeric b = (f - 19.35) / (37.0 - 19.35);
259 emiss =
a * emiss19 +
b * emiss37;
260 }
else if ((f > 37.0) && (f < 85.5)) {
261 const Numeric b = (85.5 - f) / (85.5 - 37.0);
262 const Numeric c = (f - 37.0) / (85.5 - 37.0);
263 emiss =
b * emiss37 +
c * emiss85;
264 }
else if (85.5 <= f) {
266 if ((class2 > 9) && (class2 < 14) && (emiss85 > emiss37)) {
268 emiss = emiss85 + (f - 85.5) * (emiss85 - emiss37) / (85.5 - 37.0) *
270 }
else if ((f > 150.0) && (f <= 190.0)) {
271 emiss = emiss85 + (150.0 - 85.5) * (emiss85 - emiss37) / (85.5 - 37.0) *
273 emiss += (f - 150.0) * (emiss - emiss85) / (150.0 - 85.5) *
275 }
else if (f > 190.0) {
276 emiss = emiss85 + (150.0 - 85.5) * (emiss85 - emiss37) / (85.5 - 37.0) *
278 emiss += (190.0 - 150.0) * (emiss - emiss85) / (150.0 - 85.5) *
299 for (
Index i = 0; i < 3; ++i) {
301 a0_k1[i + (class1 - 1) * 3] * ev[i] +
302 a0_k2[i + (class1 - 1) * 3] * eh[i];
313 Numeric s1_v = (theta - 53.0) / -53.0 * (e0 - a0) / a0;
315 Numeric s2_v = theta / 53.0 * (ev[i] - em53_v) / em53_v;
316 Numeric s_v = 1.0 + s1_v + s2_v;
319 a3 *
pow(theta, 3) +
a2 *
pow(theta, 2) +
a1 * theta + a0;
320 emiss_scal_v[i] = s_v * emtheta_v;
322 Numeric s1_h = (theta - 53.0) / -53.0 * (e0 - b0) / b0;
324 Numeric s2_h = theta / 53.0 * (eh[i] - em53_h) / em53_h;
325 Numeric s_h = 1.0 + s1_h + s2_h;
328 b3 *
pow(theta, 3) +
b2 *
pow(theta, 2) +
b1 * theta + b0;
329 emiss_scal_h[i] = s_h * emtheta_h;
333 emiss_scal_h[0], emiss_scal_h[1], emiss_scal_h[2], freq, class2);
335 emiss_scal_v[0], emiss_scal_v[1], emiss_scal_v[2], freq, class2);
337 if (emiss_v < emiss_h) {
338 emiss_v = 0.5 * (emiss_v + emiss_h);
341 return std::make_pair(emiss_v, emiss_h);
345 os << ta.
name << std::endl;
354 0.11509, 0.091535, 0.34796, 0.10525, 0.16627, 0.24434,
355 0.29217, 0.23809, 0.28954, 0.17516, 0.19459, 0.28697,
356 0.10521, 0.12126, 0.30278, 0.18212, 0.19625, 0.14551,
357 -0.19202, 0.5411, 0.03739, 0.10292, 0.5486, -0.058937,
358 -0.022672, 0.44492, -0.058448, -0.33894, -0.17621, 0.14742};
361 0.61168, 0.59095, 0.7918, 0.60271, 0.69213, 0.62218, 0.32728, 0.34334,
362 0.37062, 0.51217, 0.4491, 0.50101, 0.48913, 0.41932, 0.29734, 0.64474,
363 0.30637, 0.031107, 1.0405, 0.17538, 1.3215, 0.61819, 0.31298, 1.7218,
364 0.87761, 0.47583, 1.2583, 1.0959, 0.92842, 0.51033};
367 0.26726, 0.32033, -0.14778, 0.28547, 0.13592, 0.13193, 0.37178, 0.41813,
368 0.33875, 0.30203, 0.35479, 0.20189, 0.40663, 0.47493, 0.40668, 0.14811,
369 0.52382, 0.86634, 0.14286, 0.27164, -0.37947, 0.2737, 0.12001, -0.67315,
370 0.13492, 0.065463, -0.19316, 0.24905, 0.25475, 0.34637};
373 0.9592599869E+00, 0.9565299749E+00, 0.9511899948E+00, 0.9560700059E+00,
374 0.9541199803E+00, 0.9483199716E+00, 0.9461100101E+00, 0.9439799786E+00,
375 0.9387800097E+00, 0.9317600131E+00, 0.9289000034E+00, 0.9236800075E+00,
376 0.9208700061E+00, 0.9190599918E+00, 0.9105200171E+00, 0.9162799716E+00,
377 0.8937299848E+00, 0.8014699817E+00, 0.9570500255E+00, 0.9213600159E+00,
378 0.7893999815E+00, 0.9639400244E+00, 0.9530599713E+00, 0.8850200176E+00,
379 0.9685299993E+00, 0.9622600079E+00, 0.9118800163E+00, 0.8997200131E+00,
380 0.9012699723E+00, 0.9107499719E+00};
383 0.3627802414E-07, -0.7778328204E-08, 0.4396108011E-07, 0.2503205394E-06,
384 0.1996262995E-06, 0.2929977541E-06, 0.4190530660E-06, 0.3655744649E-06,
385 0.3519195673E-06, 0.5574374313E-06, 0.5273076340E-06, 0.5376484182E-06,
386 0.1026844529E-05, 0.9679998811E-06, 0.8616486866E-06, 0.3180800832E-06,
387 0.2886778532E-06, 0.2310362675E-06, -0.1118036366E-06, -0.1502856577E-06,
388 0.4842232926E-07, -0.8410978580E-08, -0.3478669441E-07, 0.2209441590E-06,
389 0.2485776633E-06, 0.1800235907E-06, 0.2510202251E-06, 0.2687000915E-06,
390 0.1740325644E-06, 0.3562134339E-06};
393 0.3067140824E-05, 0.2520012231E-05, 0.4831396382E-05, 0.8213598448E-05,
394 0.7378375358E-05, 0.1022081960E-04, 0.1225889173E-04, 0.1165553113E-04,
395 0.1188659007E-04, 0.1693615741E-04, 0.1648317448E-04, 0.1715818144E-04,
396 0.2744720041E-04, 0.2642072104E-04, 0.2671847506E-04, 0.1349592094E-04,
397 0.1261523357E-04, 0.5447756394E-05, 0.2064244654E-05, 0.1919016057E-06,
398 0.5940860319E-06, 0.5334760772E-05, 0.4130339221E-05, 0.4104662821E-05,
399 0.6530796327E-05, 0.5727014013E-05, 0.7451782039E-05, 0.1071246970E-04,
400 0.9539280654E-05, 0.1034286015E-04};
403 -0.2004991551E-07, -0.6895366056E-07, -0.2047409282E-06, -0.7322448425E-07,
404 -0.1273002681E-06, -0.2729916844E-06, -0.9421125213E-07, -0.1683332300E-06,
405 -0.2726891637E-06, -0.1317753799E-06, -0.2107972250E-06, -0.3556060904E-06,
406 -0.1889465580E-06, -0.2757958271E-06, -0.4909850304E-06, 0.7339644004E-08,
407 -0.4058669560E-06, -0.4146343997E-06, 0.6170279931E-07, -0.1998567996E-06,
408 -0.4713119139E-07, -0.1361754887E-07, -0.1765622955E-06, -0.2348146637E-06,
409 -0.3901189061E-07, -0.1305666189E-06, -0.1533838798E-06, -.2679148992E-07,
410 -0.4441960044E-07, -0.1815613899E-06};
413 0.9592599869E+00, 0.9565299749E+00, 0.9511899948E+00, 0.9560700059E+00,
414 0.9541199803E+00, 0.9483199716E+00, 0.9461100101E+00, 0.9439799786E+00,
415 0.9387800097E+00, 0.9317600131E+00, 0.9289000034E+00, 0.9236800075E+00,
416 0.9208700061E+00, 0.9190599918E+00, 0.9105200171E+00, 0.9162799716E+00,
417 0.8937299848E+00, 0.8014699817E+00, 0.9570500255E+00, 0.9213600159E+00,
418 0.7893999815E+00, 0.9639400244E+00, 0.9530599713E+00, 0.8850200176E+00,
419 0.9685299993E+00, 0.9622600079E+00, 0.9118800163E+00, 0.8997200131E+00,
420 0.9012699723E+00, 0.9107499719E+00};
423 0.3626608347E-07, -0.7786279177E-08, 0.4393379172E-07, 0.2502746099E-06,
424 0.1995944388E-06, 0.2929554341E-06, 0.4189516289E-06, 0.3655020180E-06,
425 0.3518483140E-06, 0.5572838404E-06, 0.5271903092E-06, 0.5375342766E-06,
426 0.1026605219E-05, 0.9677979733E-06, 0.8614680951E-06, 0.3179358714E-06,
427 0.2884899004E-06, 0.2308632219E-06, -0.1118781370E-06, -0.1503948681E-06,
428 0.4834672396E-07, -0.8455684153E-08, -0.3485171618E-07, 0.2208606134E-06,
429 0.2485595019E-06, 0.1799959364E-06, 0.2509846695E-06, 0.2686167306E-06,
430 0.1739760478E-06, 0.3561317214E-06};
433 0.3065537157E-05, 0.2518960400E-05, 0.4829731552E-05, 0.8209894986E-05,
434 0.7375769655E-05, 0.1021809931E-04, 0.1225203869E-04, 0.1165053800E-04,
435 0.1188218721E-04, 0.1692612022E-04, 0.1647546378E-04, 0.1715117833E-04,
436 0.2743142431E-04, 0.2640772436E-04, 0.2670711910E-04, 0.1348545720E-04,
437 0.1260529825E-04, 0.5439695997E-05, 0.2058213340E-05, 0.1860650656E-06,
438 0.5898303925E-06, 0.5330772183E-05, 0.4126528893E-05, 0.4100859314E-05,
439 0.6528573977E-05, 0.5725009032E-05, 0.7449450095E-05, 0.1070590315E-04,
440 0.9534271157E-05, 0.1033751869E-04};
443 -0.1370247134E-06, -0.1436897747E-06, -0.2954870411E-06, -0.3118435643E-06,
444 -0.2916583242E-06, -0.4311032171E-06, -0.5048401022E-06, -0.4662823869E-06,
445 -0.5206445053E-06, -0.7210980471E-06, -0.6662896794E-06, -0.7548637200E-06,
446 -0.1110204039E-05, -0.1030801400E-05, -0.1140921199E-05, -0.6330818110E-06,
447 -0.9186441048E-06, -0.7947813856E-06, -0.3242539890E-06, -0.5027602583E-06,
448 -0.2777987334E-06, -0.2747250676E-06, -0.3811997260E-06, -0.4102405455E-06,
449 -0.1994112324E-06, -0.2555484855E-06, -0.2842682534E-06, -0.4413041665E-06,
450 -0.3717419474E-06, -0.4975536854E-06};
453 0.62, 0.37, 0.46, 0.63};
455 0.30, 0.60, 0.47, 0.35};
Constants of physical expressions as constexpr.
A constant view of a Vector.
void resize(Index r, Index c)
Resize function.
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
void cycle_lat_lon(Numeric &lat, Numeric &lon)
Cyclic latitude longitude coordinates.
constexpr Numeric EARTH_RADIUS
NUMERIC Numeric
The type to use for all floating point numbers.
INDEX Index
The type to use for all integer numbers and indices.
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.
Numeric pow(const Rational base, Numeric exp)
Power of.
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.