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://spacetown.free.fr/lib/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>& 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 }  // namespace AtmoData.
00220 
00221 
00222 // Fortran functions.
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

Generated on Tue Nov 7 14:58:48 2006 for AtmoData by  doxygen 1.4.2