12#ifndef LDNDC_SCIENTIFIC_METEO_H_
13#define LDNDC_SCIENTIFIC_METEO_H_
15#include "crabmeat-common.h"
17#include "math/cbm_math.h"
18#include "utils/cbm_utils.h"
20#include "constants/cbm_const.h"
22namespace ldndc {
namespace meteo
24 inline double CBM_API afgen(
30 return std::max( ABSMIN, 1.0 - ( 1.0 / ( MAX - MIN)) * std::max( 0.0, value - MIN));
40 inline double CBM_API svp(
43 return exp( 54.8781919 - ( 6790.4985 / t) - ( 5.02808 * log( t)));
48 inline double CBM_API LAMBDA(
52 return ( 3149000.0 - 2370.0 * tak) + (( tak < dtk) ? 334.0 : 0.0);
57 inline double CBM_API DESDT(
62 return ldndc::meteo::svp( t) * 100.0 * fl18 / ( rgc * t * t);
68 inline double CBM_API DES2DT(
75 return cbm::poly2( t - dtk, 2.0 * 1.675, 6.0 * 0.01408, 12.0 * 0.0005818);
79 inline double CBM_API Ft_pow(
84 return pow( _base, ( _temperature - _scale) / _scale);
88 inline double CBM_API Ft_oneill(
94 if ( cbm::flt_equal( _t_opt, _temperature ) || ( cbm::flt_equal_zero( _exp )))
98 if (( _t_max < _temperature) || cbm::flt_equal( _t_max, _temperature ))
102 if ( cbm::flt_equal( _t_max, _t_opt ))
104 return std::numeric_limits< double >::infinity();
107 double d0( _t_max - _temperature);
108 double d1( _t_max - _t_opt);
110 return pow( d0 / d1, _exp) * exp( _exp * ( d1 - d0) / d1);
114 inline double CBM_API F_weibull(
120 return ( 1.0 - ( P3 / ( 1.0 + exp((wfps - P1) * P2))));
124 inline double CBM_API F_surf(
129 return var / ( var + exp( a - b * var));
133 inline double CBM_API Ftemp(
140 return exp( CT - HA / ( cbm::RGAS * tempK)) / ( 1.0 + exp(( DS * tempK - HD) / ( cbm::RGAS * tempK)));
144 inline double CBM_API Three_Point_Effect(
150 if (( T > Tlow) && ( T < Thigh))
152 double l(Topt - Tlow);
153 double h(Thigh - Topt);
155 return ( (( T - Tlow) / l) * pow((( Thigh - T) / h), h / l));
164 inline double CBM_API Ft_q10(
170 if (( T < 0.0) || ( T > Tmax))
176 double wt( log( q10) * ( Tmax - Topt));
177 double f( 1.0 + pow(( 1.0 + 40.0 / wt), 0.5));
179 double xt( wt * wt * f * f / 400.0);
182 double vt(( Tmax - T) / ( Tmax - Topt));
183 return pow( vt, xt) * exp ( xt * ( 1.0 - vt));
188 inline double CBM_API relativeImpact(
194 return 1.0 - 2.0 * cbm::sqr((v - vSat) / vSat);
198 return 2.0 * cbm::sqr( v / vSat);
210 CBM_API stefan_boltzmann(
223 double CBM_API thornton97(
246 double CBM_API latitude_rad(
248 unsigned int * = NULL,
249 unsigned int * = NULL,
250 unsigned int * = NULL);
256 double CBM_API latitude_rad2(
268 double CBM_API sun_declination(
281 double CBM_API sun_declination2(
306 double CBM_API solar_elevation_sinus(
309 unsigned int = invalid_uint,
unsigned int = invalid_uint);
321 double CBM_API eccentricity(
322 unsigned int,
unsigned int);
336 double CBM_API daily_solar_radiation(
338 unsigned int,
unsigned int);
350 double CBM_API subdaily_solar_radiation_fraction(
365 double CBM_API daily_solar_radiation_fraction(
378 double CBM_API daylength(
392 double CBM_API daylength_period(
408 double,
double *,
double *_slope=NULL);
423 double CBM_API annual_average_temperature(
426 double CBM_API longwave_radiation(
431 double CBM_API radiation_emissivity_clear_sky(
434 double CBM_API cloud_fraction_angstrom(
438 double _rad_short_day);
Spatially explicit groundwater model.
Definition airchemistryput.h:15