source: trunk/src/cal_hcl.m @ 325

Last change on this file since 325 was 325, checked in by pinsard, 13 years ago

rehab MSG, EPSAT tools (to be cont.)

  • Property svn:keywords set to Id
File size: 5.8 KB
Line 
1function [tps,alt,lat,lon,tpt,ep_cl]=cal_hcl(tps_min,tps_max,lat_min,lat_max,lon_min,lon_max)
2
3%CAL_HCL Calcul de la hauteur de la couche limite ECMWF opera
4
5%+
6%
7% .. _cal_hcl.m:
8%
9% =========
10% cal_hcl.m
11% =========
12%
13% DESCRIPTION
14% ===========
15%
16% Calcul de la hauteur de la couche limite
17% a partir des analyses operationnelles ECMWF
18%
19% Entrees :
20%
21% tps_min
22%    borne min pour la date au format matlab
23% tps_max
24%    borne max pour la date au format matlab
25% lat_min
26%    borne min pour la latitude
27% lat_max
28%    borne max pour la latitude
29% lon_min
30%    borne min pour la longitude
31% lon_max
32%    borne max pour la longitude
33%
34% Sorties :
35%
36% tps
37%    vecteur temps format matlab
38% alt
39%    vecteur altitude
40% lat
41%    vecteur latitude
42% lon
43%    vecteur longitude
44% tpt
45%    temperature potentielle
46% ep_cl
47%    hauteur de couche limite
48%
49% EXAMPLES
50% ========
51%
52% ::
53%
54%   >> tps_min=datenum([2006 07 01])
55%   >> tps_max=datenum([2006 07 10]);
56%   >> lat_min=-5; lat_max=5;
57%   >> lon_min=-10; lon_max=10;
58%   >> [tps,alt,lat,lon,tpt,ep_cl]=cal_hcl(tps_min,tps_max,lat_min,lat_max,lon_min,lon_max);
59%   >> moytps_epcl=squeeze(nanmean(ep_cl,1));
60%   >> % Graphique
61%   >> nb_color=20;
62%   >> xmin=min(min(moytps_epcl));
63%   >> xmax=max(max(moytps_epcl));
64%   >> dx=(xmax-xmin)/nb_color;
65%   >> figure;
66%   >> contourf(lon,lat,moytps_epcl,[xmin:dx:xmax]);
67%   >> colormap(jet(nb_color));
68%   >> colorbar;
69%
70% SEE ALSO
71% ========
72% Appelle :
73%
74% :ref:`extract_nc.m` -> lecture fichier .nc
75%
76% :ref:`hspe2rmix.m`  -> calcul le rapport de mélange avec l'humidité spécifique
77%
78% :ref:`tpot.m`       -> calcul de la température potentielle
79%
80% :ref:`h_clim.m`     -> calcul de la hauteur de couche limite
81%
82% TODO
83% ====
84%
85% pour l'instant fonction sur climserv donc matlab 7.10
86%
87% EVOLUTIONS
88% ==========
89%
90% $Id$
91%
92% $URL$
93%
94% - fplod 20100713T110004Z aedon.locean-ipsl.upmc.fr (Darwin)
95%
96%   * header in ReStructured Text
97%
98% - mllod 20100713
99%
100%   * 1er commit
101%
102%-
103[y_min m_min d_min hh_min mm_min ss_min]=datevec(tps_min);
104[y_max m_max d_max hh_max mm_max ss_max]=datevec(tps_max);
105
106%% Charge les analyses operationnelles ECMWF
107
108tps_min_mod=(tps_min-datenum([1957 01 01 00 00 00]))*24;
109tps_max_mod=(tps_max-datenum([1957 01 01 00 00 00]))*24;
110
111if m_min == m_max
112
113  [tps,level,lat,lon,ta]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_ML/2006/ta.2006%02d.amh.WESTAFR_025.nc',m_min),{'ta'},'time',tps_min_mod,tps_max_mod,'level',61.,91.,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
114  [tps,level,lat,lon,q]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_ML/2006/q.2006%02d.amh.WESTAFR_025.nc',m_min),{'q'},'time',tps_min_mod,tps_max_mod,'level',61.,91.,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
115  [tps,lat,lon,msl]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_SF/2006/msl.2006%02d.ash.WESTAFR_025.nc',m_min),{'msl'},'time',tps_min_mod,tps_max_mod,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
116
117else
118
119  [tps,level,lat,lon,ta]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_ML/2006/ta.2006%02d.amh.WESTAFR_025.nc',m_min),{'ta'},'time',tps_min_mod,NaN,'level',61.,91.,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
120  [tps,level,lat,lon,q]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_ML/2006/q.2006%02d.amh.WESTAFR_025.nc',m_min),{'q'},'time',tps_min_mod,NaN,'level',61.,91.,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
121  [tps,lat,lon,msl]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_SF/2006/msl.2006%02d.ash.WESTAFR_025.nc',m_min),{'msl'},'time',tps_min_mod,NaN,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
122
123  i=1;
124  while m_min+i ~= m_max
125
126    [tps_tmp,level,lat,lon,ta_tmp]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_ML/2006/ta.2006%02d.amh.WESTAFR_025.nc',m_min+i),{'ta'},'time',NaN,NaN,'level',61.,91.,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
127    [tps_tmp,level,lat,lon,q_tmp]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_ML/2006/q.2006%02d.amh.WESTAFR_025.nc',m_min+i),{'q'},'time',NaN,NaN,'level',61.,91.,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
128    [tps_tmp,lat,lon,msl_tmp]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_SF/2006/msl.2006%02d.ash.WESTAFR_025.nc',m_min+i),{'msl'},'time',NaN,NaN,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
129
130    tps=[tps;tps_tmp];
131    ta=[ta;ta_tmp];
132    q=[q;q_tmp];
133    msl=[msl;msl_tmp];
134
135    i=i+1;
136  end
137
138  [tps_tmp,level,lat,lon,ta_tmp]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_ML/2006/ta.2006%02d.amh.WESTAFR_025.nc',m_min+i),{'ta'},'time',NaN,tps_max_mod,'level',61.,91.,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
139  [tps_tmp,level,lat,lon,q_tmp]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_ML/2006/q.2006%02d.amh.WESTAFR_025.nc',m_min+i),{'q'},'time',NaN,tps_max_mod,'level',61.,91.,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
140  [tps_tmp,lat,lon,msl_tmp]=extract_nc(sprintf('/bdd/OPERA/NETCDF/WESTAFR_025/4xdaily/AN_SF/2006/msl.2006%02d.ash.WESTAFR_025.nc',m_min+i),{'msl'},'time',NaN,tps_max_mod,'lat',lat_min,lat_max,'lon',lon_min,lon_max);
141
142
143  tps=[tps;tps_tmp];
144  ta=[ta;ta_tmp];
145  q=[q;q_tmp];
146  msl=[msl;msl_tmp];
147end
148tps=tps/24+datenum([1957 01 01 00 00 00]);
149
150% Calcul des altitudes des niveaux de modele en passnat par la pression
151p=flipud(load('/homedata/mleduc/OPERA/ml91.dat')); % col 1 : numero du niveau ; col 5 : pression a mi-couche
152for i=1:length(level)+1
153  phalf(:,i,:,:)=p(i,2)+p(i,3)*msl;
154end
155for i=1:length(level)
156  p_mod(:,i,:,:)=squeeze(0.5*(phalf(:,i,:,:)+phalf(:,i+1,:,:)));
157  alt(:,i,:,:)=(-8.32*((squeeze(ta(:,1,:,:))+squeeze(ta(:,i,:,:)))/2).*(log(squeeze(p_mod(:,i,:,:)))-log(msl))/(29*9.81))*1000;
158end
159
160% Calcul rapport de melange
161r=hspe2rmix(q,p_mod);
162
163% Calcul teperature potentielle
164[tpt tv]=tpot(ta,p_mod,r);
165
166% Calcul hauteur de couche limite
167for i= 1:size(tpt,3)
168  for j=1:size(tpt,4)
169    [ep_cl(:,i,j),grad_tpt(:,i,j)]=h_clim(tpt(:,:,i,j),alt(:,:,i,j));
170  end
171end
Note: See TracBrowser for help on using the repository browser.