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>& SurfaceRichardson,
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 TT, class TP, class TH,
00166 class T, class TG>
00167 void ComputeCloudHeight(Data<TT, 4, TG>& Temperature,
00168 Data<TP, 4, TG>& Pressure,
00169 Data<TH, 4, TG>& RelativeHumidity,
00170 T (CriticalRelativeHumidity)(const T&, const T&,
00171 const T&),
00172 Data<T, 3, TG>& CloudHeight);
00173
00174 template <class TT, class TP, class TH,
00175 class TCRH, class T, class TG>
00176 void ComputeCloudHeight(Data<TT, 4, TG>& Temperature,
00177 Data<TP, 4, TG>& Pressure,
00178 Data<TH, 4, TG>& RelativeHumidity,
00179 Data<TCRH, 4, TG>& CriticalRelativeHumidity,
00180 Data<T, 3, TG>& CloudHeight);
00181
00182 template <class T, class TG>
00183 void ComputeCloudHeight(Data<int, 4>& LowIndices,
00184 Data<int, 4>& MediumIndices,
00185 Data<int, 4>& HighIndices,
00186 Grid<TG>& GridZ_interf,
00187 Data<T, 3, TG>& CloudHeight);
00188
00189 template <class Ta, class Tb, class TSP,
00190 class T, class TG>
00191 void ComputePressure(Data<Ta, 1, TG>& alpha, Data<Tb, 1, TG>& beta,
00192 Data<TSP, 3, TG>& SurfacePressure,
00193 Data<T, 4, TG>& Pressure, T P0 = 101325.);
00194
00195 template<class TPS, class TP, class TT, class T, class TG>
00196 void ComputeHeight(Data<TPS, 3, TG>& SurfacePressure,
00197 Data<TP, 4, TG>& Pressure,
00198 Data<TT, 4, TG>& Temperature,
00199 Grid<T>& Height, T g = 9.80665, T r = 287.0);
00200
00201 template<class TP, class TT, class T, class TG>
00202 void ComputeInterfHeight(Data<TP, 4, TG>& Pressure,
00203 Data<TT, 4, TG>& Temperature,
00204 Grid<T>& Height, bool ground_set = false,
00205 T g = 9.80665, T r = 287.0);
00206
00207 template<class TP, class TT, class T, class TG>
00208 void ComputeMiddleHeight(Data<TP, 4, TG>& Pressure,
00209 Data<TT, 4, TG>& Temperature,
00210 Grid<T>& InterfHeight, Grid<T>& MiddleHeight,
00211 T g = 9.80665, T r = 287.0);
00212
00213 template <class TT, class TH, class T, class TG>
00214 void ComputeVirtualTemperature(Data<TT, 4, TG>& Temperature,
00215 Data<TH, 4, TG>& SpecificHumidity,
00216 Data<T, 4, TG>& VirtualTemperature,
00217 T c = 0.608);
00218
00219 }
00220
00221
00222
00223 #if defined(__GNUG__) && __GNUG__ < 4 && !defined (__INTEL_COMPILER)
00224 #define _compute_relative_humidity compute_relative_humidity__
00225 #else
00226 #define _compute_relative_humidity compute_relative_humidity_
00227 #endif
00228
00229 extern "C"
00230 {
00231 void _compute_relative_humidity(double*, double*, double*, double*);
00232 }
00233
00234
00235 #define ATMODATA_FILE_METEOROLOGY_HXX
00236 #endif