1 | function [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: cal_hcl.m 325 2011-08-04 15:30:01Z pinsard $ |
---|
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 | |
---|
108 | tps_min_mod=(tps_min-datenum([1957 01 01 00 00 00]))*24; |
---|
109 | tps_max_mod=(tps_max-datenum([1957 01 01 00 00 00]))*24; |
---|
110 | |
---|
111 | if 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 | |
---|
117 | else |
---|
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]; |
---|
147 | end |
---|
148 | tps=tps/24+datenum([1957 01 01 00 00 00]); |
---|
149 | |
---|
150 | % Calcul des altitudes des niveaux de modele en passnat par la pression |
---|
151 | p=flipud(load('/homedata/mleduc/OPERA/ml91.dat')); % col 1 : numero du niveau ; col 5 : pression a mi-couche |
---|
152 | for i=1:length(level)+1 |
---|
153 | phalf(:,i,:,:)=p(i,2)+p(i,3)*msl; |
---|
154 | end |
---|
155 | for 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; |
---|
158 | end |
---|
159 | |
---|
160 | % Calcul rapport de melange |
---|
161 | r=hspe2rmix(q,p_mod); |
---|
162 | |
---|
163 | % Calcul teperature potentielle |
---|
164 | [tpt tv]=tpot(ta,p_mod,r); |
---|
165 | |
---|
166 | % Calcul hauteur de couche limite |
---|
167 | for 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 |
---|
171 | end |
---|