00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef ATMODATA_FILE_METEOROLOGY_HXX
00026
00027 namespace AtmoData
00028 {
00029
00030 template<class TU, class TV, class TTp, class T, class TG>
00031 void ComputeRichardson(Data<TU, 4, TG>& ZonalWind,
00032 Data<TV, 4, TG>& MeridionalWind,
00033 Data<TTp, 4, TG>& PotentialTemperature,
00034 Data<T, 4, TG>& Richardson,
00035 T wind_threshold = 0.001);
00036
00037 template<class TU, class TV, class TTp, class T, class TG>
00038 void ComputeRichardson(Data<TU, 4, TG>& ZonalWind,
00039 Data<TV, 4, TG>& MeridionalWind,
00040 Data<TTp, 4, TG>& PotentialTemperature,
00041 Data<T, 3, TG>& Richardson,
00042 T wind_threshold = 0.001);
00043
00044 template<class TU, class TTp, class T, class TG>
00045 void ComputeRichardson(Data<TU, 3, TG>& WindModule,
00046 Data<TTp, 3, TG>& SurfacePotentialTemperature,
00047 Data<TTp, 4, TG>& PotentialTemperature,
00048 Data<T, 3, TG>& SurfaceRichardson,
00049 T wind_threshold = 0.001);
00050
00051 template<class TR, class TU, class TTp, class T, class TG>
00052 void ComputeRichardson(Data<TR, 2, TG>& Roughness,
00053 Data<TU, 3, TG>& WindModule,
00054 Data<TTp, 3, TG>& SurfacePotentialTemperature,
00055 Data<TTp, 4, TG>& PotentialTemperature,
00056 Data<T, 3, TG>& SurfaceRichardson,
00057 T wind_threshold = 0.001);
00058
00059 template<class TT, class TP, class T, class TG>
00060 void ComputePotentialTemperature(Data<TT, 4, TG>& Temperature,
00061 Data<TP, 4, TG>& Pressure,
00062 Data<T, 4, TG>& PotentialTemperature,
00063 T P0 = 101325., T cp = 1005.,T r = 287.0);
00064
00065 template<class TT, class TP, class T, class TG>
00066 void ComputePotentialTemperature(Data<TT, 3, TG>& Temperature,
00067 Data<TP, 3, TG>& Pressure,
00068 Data<T, 3, TG>& PotentialTemperature,
00069 T P0 = 101325., T cp = 1005.,T r = 287.0);
00070
00071 template<class TT, class TP, class T, class TG>
00072 void ComputeSaturationHumidity(Data<TT, 3, TG>& Temperature,
00073 Data<TP, 3, TG>& Pressure,
00074 Data<T, 3, TG>& SaturationHumidity);
00075
00076 template<class TT, class TP, class T, class TG>
00077 void ComputeSaturationHumidity(Data<TT, 4, TG>& Temperature,
00078 Data<TP, 4, TG>& Pressure,
00079 Data<T, 4, TG>& SaturationHumidity);
00080
00081 template<class TS, class TT, class TP, class T, class TG>
00082 void ComputeRelativeHumidity(Data<TS, 4, TG>& SpecificHumidity,
00083 Data<TT, 4, TG>& Temperature,
00084 Data<TP, 4, TG>& Pressure,
00085 Data<T, 4, TG>& RelativeHumidity);
00086
00087 template<class TS, class TT, class TP, class T, class TG>
00088 void ComputeRelativeHumidity(Data<TS, 3, TG>& SpecificHumidity,
00089 Data<TT, 3, TG>& Temperature,
00090 Data<TP, 3, TG>& Pressure,
00091 Data<T, 3, TG>& RelativeHumidity);
00092
00093 template<class TH, class TS, class TW, class TL, class T, class TG>
00094 void ComputeSurfaceHumidity_diag(Data<TH, 4, TG>& SpecificHumidity,
00095 Data<TS, 3, TG>& SaturationHumidity,
00096 Data<TW, 3, TG>& SoilWater,
00097 Data<TL, 3, TG>& LUC, int sea_index,
00098 Data<T, 3, TG>& SurfaceHumidity,
00099 T veg = 1.0, T theta_cap = 0.323);
00100
00101 template<class TS, class TP, class T, class TG>
00102 void ComputeCriticalRelativeHumidity(Data<TS, 3, TG>& SurfacePressure,
00103 Data<TP, 4, TG>& Pressure,
00104 Data<T, 4, TG>& CriticalRelativeHumidity,
00105 T coeff0 = 2., T coeff1 = sqrt(3.));
00106
00107 template<class TS, class TP, class T, class TG>
00108 void ComputeCriticalRelativeHumidity_extended(Data<TS, 3, TG>& SurfacePressure,
00109 Data<TP, 4, TG>& Pressure,
00110 Data<T, 4, TG>& CriticalRelativeHumidity,
00111 T coeff0 = 1.1,
00112 T coeff1 = sqrt(1.3),
00113 T a0 = 0., T a1 = 1.1);
00114
00115 template<class TB, class TS, class TP, class T, class TG>
00116 void ComputeCriticalRelativeHumidity(Data<TB, 3, TG>& BoundaryLayerHeight,
00117 Data<TS, 3, TG>& SurfacePressure,
00118 Data<TP, 4, TG>& Pressure,
00119 Data<T, 4, TG>& CriticalRelativeHumidity,
00120 T coeff0 = 2., T coeff1 = sqrt(3.),
00121 T BL_CRH = 0.98);
00122
00123 template<class TP, class T, class TG>
00124 void ComputeCriticalRelativeHumidity(Data<TP, 4, TG>& Pressure,
00125 Data<T, 4, TG>& CriticalRelativeHumidity,
00126 T CRH_0 = 0.75, T CRH_1 = 0.95,
00127 T CRH_2 = 0.95,
00128 T P_0 = 70000., T P_1 = 40000.);
00129
00130 template<class TR, class TC, class T, class TG>
00131 void ComputeCloudFraction(Data<TR, 4, TG>& RelativeHumidity,
00132 Data<TC, 4, TG>& CriticalRelativeHumidity,
00133 Data<T, 4, TG>& CloudFraction);
00134
00135 template<class TP, class TR, class TC, class T, class TG>
00136 void ComputeCloudFraction(Data<TP, 3, TG>& BoundaryLayerHeight,
00137 Data<TR, 4, TG>& RelativeHumidity,
00138 Data<TC, 4, TG>& CriticalRelativeHumidity,
00139 Data<T, 4, TG>& CloudFraction);
00140
00141 template<class TU, class TV, class T, class TG>
00142 void ComputeModule(Data<TU, 4, TG>& U, Data<TV, 4, TG>& V,
00143 Data<T, 4, TG>& Module);
00144
00145 template<class TU, class TV, class T, class TG>
00146 void ComputeModule(Data<TU, 4, TG>& U, Data<TV, 4, TG>& V,
00147 Data<T, 3, TG>& Module);
00148
00149 template<class TU, class TV, class T, class TG>
00150 void ComputeModule(Data<TU, 3, TG>& U, Data<TV, 3, TG>& V,
00151 Data<T, 3, TG>& Module);
00152
00153 template<class TC, class TP, class T, class TG>
00154 void ComputeCloudiness(Data<TC, 4, TG>& CloudFraction,
00155 Data<TP, 4, TG>& Pressure,
00156 Grid<TG>& GridZ_interf,
00157 Data<int, 4>& LowIndices,
00158 Data<int, 4>& MediumIndices,
00159 Data<int, 4>& HighIndices,
00160 Data<T, 3, TG>& LowCloudiness,
00161 Data<T, 3, TG>& MediumCloudiness,
00162 Data<T, 3, TG>& HighCloudiness,
00163 T P_0 = 80000., T P_1 = 45000.);
00164
00165 template <class TP, class TH, class T, class TG>
00166 void ComputeCloudHeight(Data<TP, 4, TG>& Pressure,
00167 Data<TH, 4, TG>& RelativeHumidity,
00168 T (CriticalRelativeHumidity)(const T&, const T&,
00169 const T&),
00170 Data<T, 3, TG>& CloudHeight);
00171
00172 template <class TP, class TH, class TCRH, class T, class TG>
00173 void ComputeCloudHeight(Data<TH, 4, TG>& RelativeHumidity,
00174 Data<TCRH, 4, TG>& CriticalRelativeHumidity,
00175 Data<T, 3, TG>& CloudHeight);
00176
00177 template <class T, class TG>
00178 void ComputeCloudHeight(Data<int, 4>& LowIndices,
00179 Data<int, 4>& MediumIndices,
00180 Data<int, 4>& HighIndices,
00181 Grid<TG>& GridZ_interf,
00182 Data<T, 3, TG>& CloudHeight);
00183
00184 template<class T, class TLC, class TC>
00185 void ComputeTotalCloudiness(Data<TLC, 3, T>& LowCloudiness,
00186 Data<TLC, 3, T>& MediumCloudiness,
00187 Data<TLC, 3, T>& HighCloudiness,
00188 Data<TC, 3, T>& Cloudiness);
00189
00190 template <class TLC, class TC>
00191 TC ComputeTotalCloudiness(TLC low_cloudiness, TLC medium_cloudiness,
00192 TLC high_cloudiness);
00193
00194 template <class T>
00195 string ComputePasquillStabilityClass(T surface_wind, T solar_radiation,
00196 T cloudiness, bool isday);
00197
00198
00199 template <class Ta, class Tb, class TSP,
00200 class T, class TG>
00201 void ComputePressure(Data<Ta, 1, TG>& alpha, Data<Tb, 1, TG>& beta,
00202 Data<TSP, 3, TG>& SurfacePressure,
00203 Data<T, 4, TG>& Pressure, T P0 = 101325.);
00204
00205 template<class TPS, class TP, class TT, class T, class TG>
00206 void ComputeHeight(Data<TPS, 3, TG>& SurfacePressure,
00207 Data<TP, 4, TG>& Pressure,
00208 Data<TT, 4, TG>& Temperature,
00209 Grid<T>& Height, T g = 9.80665, T r = 287.0);
00210
00211 template<class TP, class TT, class T, class TG>
00212 void ComputeInterfHeight(Data<TP, 4, TG>& Pressure,
00213 Data<TT, 4, TG>& Temperature,
00214 Grid<T>& Height, bool ground_set = false,
00215 T g = 9.80665, T r = 287.0);
00216
00217 template<class TP, class TT, class T, class TG>
00218 void ComputeMiddleHeight(Data<TP, 4, TG>& Pressure,
00219 Data<TT, 4, TG>& Temperature,
00220 Grid<T>& InterfHeight, Grid<T>& MiddleHeight,
00221 T g = 9.80665, T r = 287.0);
00222
00223 template <class TT, class TH, class T, class TG>
00224 void ComputeVirtualTemperature(Data<TT, 4, TG>& Temperature,
00225 Data<TH, 4, TG>& SpecificHumidity,
00226 Data<T, 4, TG>& VirtualTemperature,
00227 T c = 0.608);
00228
00229 }
00230
00231
00232
00233 #ifdef POLYPHEMUS_SINGLE_UNDERSCORE
00234 #undef POLYPHEMUS_DOUBLE_UNDERSCORE
00235 #elif defined(__GNUG__) && __GNUG__ < 4 && !defined(__INTEL_COMPILER)
00236 #undef POLYPHEMUS_DOUBLE_UNDERSCORE
00237 #define POLYPHEMUS_DOUBLE_UNDERSCORE
00238 #endif
00239
00240 #ifdef POLYPHEMUS_DOUBLE_UNDERSCORE
00241 #define _compute_relative_humidity compute_relative_humidity__
00242 #else
00243 #define _compute_relative_humidity compute_relative_humidity_
00244 #endif
00245
00246 extern "C"
00247 {
00248 void _compute_relative_humidity(double*, double*, double*, double*);
00249 }
00250
00251
00252 #define ATMODATA_FILE_METEOROLOGY_HXX
00253 #endif