Main Page | User's Guide | Namespace List | Class List | File List | Namespace Members | Class Members

Meteorology.hxx

00001 // Copyright (C) 2003-2005 CEREA
00002 //     Author: Vivien Mallet
00003 //
00004 // CEREA (http://www.enpc.fr/cerea) is a joint laboratory of
00005 // ENPC (http://www.enpc.fr) and EDF R&D (http://www.edf.fr).
00006 //
00007 // This file is part of AtmoData library.
00008 // AtmoData library is a tool for data processing in atmospheric
00009 // sciences.
00010 //
00011 // AtmoData is free software; you can redistribute it and/or modify
00012 // it under the terms of the GNU General Public License as published by
00013 // the Free Software Foundation; either version 2 of the License, or
00014 // (at your option) any later version.
00015 //
00016 // AtmoData is distributed in the hope that it will be useful,
00017 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019 // GNU General Public License (file "license") for more details.
00020 //
00021 // For more information, please see the AtmoData home page:
00022 //     http://www.enpc.fr/cerea/atmodata/
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 }  // namespace AtmoData.
00230 
00231 
00232 // Fortran functions.
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

Generated on Wed Apr 25 11:28:00 2007 for AtmoData by  doxygen 1.4.2