source: trunk/PROGRAMMES/eof_NCEP_sais.m @ 25

Last change on this file since 25 was 25, checked in by jmignot, 15 years ago

homogeneisation case noms programmes & sorties

File size: 11.7 KB
Line 
1%EOF_NCEP_SAIS calcule les EOFs et composantes principales du champs de temperature de surface en moyennes mensuelles climatologiques
2% (12 points temporels)
3%
4% le programme enregistre automatiquement les resultats du calcul
5% (attention: penser a changer le nom du fichier de sortie en cas de
6% modification de parametres du programme: domaine spatial, moyenne
7% temporelle effectuee: annee / mois, etc. parametre "nomfic" ci dessous)
8%
9% le programme permet egalement de visualiser les resultats. Voir le doc
10% .pdf joint pour l'interpretation de cette visualisation.
11%
12% Date: Avril-Mai 2008
13% Auteur: juliette.mignot@locean-ipsl.upmc.fr
14% Contexte Ecole d'ete ENVI-STAT 2008
15
16%+
17%
18% module
19% ======
20%
21% ``eof_NCEP_sais``
22%
23% DESCRIPTION
24% ===========
25%
26% ``eof_NCEP_sais`` lit les fichiers
27% ``../DONNEES/lsmask_tropatl_PacandMedblancs.mat``
28% et ``../DONNEES/skt.mon.tropatl.mat``.
29%
30% ``eof_NCEP_sais`` calcule ++blabla++
31%
32% ``eof_NCEP_sais`` sauvegarde dans ``../DONNEES/eof_SSTmens_tropAtl30N-20S.mat``.
33%
34% Ces fichiers sont lus par ``Reg_serietemporelles.m_``\ .
35%
36% ``eof_NCEP_sais`` affiche trois figures :
37%  - ++
38%  - ++
39%  - valeurs propres de la matrice de covariance
40%
41% ``eof_NCEP_sais`` sauve ces images dans ``./eof_SSTmens_tropAtl30N-20S_[123].eps``.
42%
43% ++
44%
45% EXAMPLES
46% ========
47%
48% ::
49%
50% >> tpacpandreg_startup
51% >> eof_NCEP_sais
52%
53% SEE ALSO
54% ========
55%
56% tpacpandreg_startup.m_
57%
58% .. _tpacpandreg_startup.m : tpacpandreg_startup.m.html
59%
60% initfig.m_
61%
62% .. _initfig.m : initfig.m.html
63%
64% reg_seriestemporelles.m_
65%
66% .. _reg_seriestemporelles.m : reg_seriestemporelles.m.html
67%
68% whorldmap.m_
69%
70% .. _whorldmap.m : whorldmap.m.html
71%
72% colorbartype.m_
73%
74% .. _colorbartype.m : colorbartype.m.html
75%
76% contlab.m_
77%
78% .. _contlab.m : contlab.m.html
79%
80% TODO
81% ====
82%
83% improve description
84%
85% tester la branche NetCDF
86%
87% EVOLUTIONS
88% ==========
89%
90% $Id$
91%
92% - fplod 2009-08-25T10:40:16Z aedon.locean-ipsl.upmc.fr (Darwin)
93%
94%  * modif commentaires liée au dernier chgt de Juliette
95%
96% - jmignot 2009-08-25
97%
98%  * chgt de noms de fichiers : ``EOF_ devient ``eof_``
99%  * remplacement de ``colorbar`` par ``colorbartype``
100%    parce pas beau ni en matlab ni en octave (dégradé, noir et blanc dans
101%    les .jpg)
102%  * contraintes sur les limites x et y de axes car matlab et octave ne
103%    fixent pas les même limites par défaut
104%  * utisation de ``contlab`` pour ++
105
106%
107% - fplod 2009-08-21T15:04:16Z aedon.locean-ipsl.upmc.fr (Darwin)
108%
109%   * as octave save default format is ASCII and no default extension
110%     while matlab save default format is MAT v5 mat-file (little endian) and
111%     default extension is ``.mat``, write more precise save instruction
112%
113% - fplod 2009-08-21T12:58:38Z aedon.locean-ipsl.upmc.fr (Darwin)
114%
115%   * add header
116%   * répertoire de données relatifs au répertoire courant
117%   * suppression de ``clear all`` présent dans ``tpacpandreg_startup.m``
118%   * contournement pb octave pour ``contourf`` :
119%     Dans le fil de discussion [Pkg-octave-devel] Bug#492223: octave3.0: contourf only accepts vector X and Y if same+++,
120%     je comprends que j'ai affaire à un bug de octave 3.0 (donc à surveiller
121%     pour les prochaines versions) qui ne veut pas faire de contourf si les
122%     variables X et Y n'ont pas la même dimension et c'est le cas ici
123%     (lat = 42x1, lon= 70x1 vue avec size).
124%     http://lists.alioth.debian.org/pipermail/pkg-octave-devel/2008-July/004672.html
125%   * sauvegarde des figures
126
127%
128%-
129%
130N=4; %nb d'EOF a tracer
131
132nomfic='eof_SSTmens_tropAtl'
133% mettre 'eof_SSTan_tropAtl' quand on travaille en moyennes annuelles. Ce
134% fichier sera rappele dans les programme de regression lineaire
135%%
136%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
137%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
138%%%%              CHARGEMENT ET PREPARATION DES DONNEES
139%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
140
141nannees=60;
142   repertoire=[ '..' filesep 'DONNEES' filesep ] % a adapter a chaque cas: chemin d acces aux donnees
143
144% Mask
145%------
146  file='lsmask_tropatl_PacandMedblancs.mat'
147   load([repertoire file]);
148  ny=size(mask,1); nx=size(mask,2); % dimensions spatiales des tableaux
149
150% Data
151%--------
152  %SI .MAT
153  repertoire2=[repertoire 'MAT' filesep] % a adapter a chaque cas: chemin d acces aux donnees
154  file=['skt.mon.tropatl.mat']
155  load([repertoire2 file]); % chargement des donnees
156
157
158  %SI NETCDF
159  %repertoire2=[repertoire 'NETCDF' filesep]% a adapter a chaque cas: chemin d acces aux donnees
160  % file=['skt.mon.tropatl.nc']
161  % f=netcdf([repertoire file],'nowrite');
162  % tab=f{'skt'}(:,:,:);
163
164
165   tab=permute(tab,[2 3 1]);% permutation des dimensions pour organiser le tableau sous la forme [lat lon temps]
166
167
168%---------------------------------------------------
169%  MANIPULATIONS TEMPORELLES: MOYENNE ET ANOMALIES
170%---------------------------------------------------
171
172% Construction de moyennes mensuelles saisonnieres
173%---------------------------------------------------
174tab=reshape(tab,size(tab,1),size(tab,2),12,nannees);
175tab=squeeze(mean(tab,4));
176
177%  Construction des anomalies: on soustrait en chque point la moyenne temporelle totale
178%--------------------------------------------------------------------------
179tab_mean=squeeze(mean(tab,3)); tab_mean=repmat(tab_mean,[1 1 size(tab,3)]);
180anom=tab-tab_mean;
181ntemp=size(anom,3);
182
183%-------------------------------------------------------------
184%  MANIPULATIONS SPATIALES: PONDERATION, ZOOM GEOGRAPHIQUE
185%-------------------------------------------------------------
186
187% Pondération
188%----------------
189%Si on veut éventuellement attribuer un poids différent aux différents
190%points spatiaux, on le fait ici.
191
192% Préparation du zoom géographique: sur le masque, j'identifie les points
193% supplémentaires que je veux éliminer pour le calcul (critère en longitude
194% et/ou latitude par exemple)
195%---------------------------------------------------------------------
196limite_latS=-20; %limite du domaine d'etuade en latitude
197limite_latN=30; %limite du domaine d'etuade en latitude
198lat2D=repmat(lat,[1 size(mask,2)]);
199mask(lat2D>limite_latN&mask==0)=4;
200mask(lat2D<limite_latS&mask==0)=4;
201clear lat2D
202
203% Application du masque terre/mer pour pouvoir ensuite enlever les points de terre: on ne veut
204% travailler que sur l'océan
205%---------------------------------------------------------------------
206mask3D=repmat(mask,[1 1 size(tab,3)]);
207tab(mask3D~=0)=NaN;
208
209%  Elimination des points NaN
210%--------------------------------
211anom=reshape(anom,ny*nx,size(anom,3));
212maskr=reshape(mask,ny*nx,1);
213pt_val=find(maskr==0);
214Z=zeros(length(pt_val),ntemp);
215Z=anom(pt_val,:);
216%
217%%
218%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
219%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
220%%%                DECOMPOSITION EN COMPOSANTES PRINCIPALES
221%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
222
223%%%      CALCUL DE LA MATRICE DE COVARIANCE ET DIAGONALISATION
224
225% Z est donc une matrice N(points spatiaux) x M(points temporels) de
226% moyenne temporelle nulle sur laquelle on va faire l'analyse en EOF
227
228% matrice de covariance:
229  C = Z * Z';
230%  eval(['save ' repertoire 'MatCov_SST_tropAtl' num2str(limite_latN) 'N' num2str(limite_latS) 'S.asc C -ascii'])
231
232% diagonalisation
233  [E,Lambda] = eig(C);
234   % Lambda est la matrice diagonale des valeurs propres et E la matrice dont les colonnes sont les vecteurs propres correspondants.
235   % Soit Z*E = E*Lambda
236   % Les vecteurs propres sont appelés les EOF. Chaque EOF peut être considéré comme une carte de l'espace physique.
237
238
239 %%
240 %%%% calcul de la matrice donnant les pourcentages de variance
241Lambda = diag(Lambda);
242pctg_var = round(Lambda / sum(Lambda) * 1000) / 10;
243
244
245 %On definit les composantes principales de Q comme la decomposition du signal decrit par Q sur les EOF E.
246
247   P = Z' * E;
248
249%%
250%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
251%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
252 %%%             RECONSTRUCTION DES CARTES PHYSIQUES ET NORMALISATION DES
253 %%%             COMPOSANTES PRINCIPALES
254%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
255
256%initialisation des tableaux de stockage finaux
257TABEOF=zeros(ny,nx,N); %TABLEAU FINAL DES CARTES PHYSIQUES
258PC=zeros(ntemp,N);    %TABLEAU FINAL DES COMPOSANTES PRINCIPALES
259p_var=zeros(N,1);    %TABLEAU FINAL DES COMPOSANTES PRINCIPALES
260
261% boucle sur les differentes EOF pour reconstruire les cartes, normaliser
262% et enregistrer dans le tableau final
263for  i=1:1:N
264
265  disp(strcat('normalisation, projection et trace de l eof',num2str(i)))
266
267  pc = normalisation(P(:,end-i+1));
268  %
269  tabeof_temp=E(:,end-i+1);
270  tabeof=NaN+zeros(ny*nx,1);
271  tabeof(pt_val)=tabeof_temp;
272  tabeof=reshape(tabeof,ny,nx);
273  %remarque: autre facon de calculer le tabeof:
274  %  tabeof=projection(pc,Q'); tabeof=reshape(tabeof,ny,nx);
275
276      %%% enregistrement
277  TABEOF(:,:,i)=tabeof;
278  PC(:,i)=pc;
279  p_var(i)=pctg_var(end-i+1);
280
281end;
282
283fullfilename=[repertoire nomfic num2str(limite_latN) 'N' num2str(limite_latS) 'S.mat'];
284if (run_octave == 0)
285 save(fullfilename,'TABEOF','PC','p_var','lon','lat','mask','-v7');
286else
287 save('-v7',fullfilename,'TABEOF','PC','p_var','lon','lat','mask');
288end
289clear fullfilename;
290
291 %%               TRACE
292
293close all
294%parametres geographiques des graphes
295  geo=[-100 20 -30 30]; %[lonmin lonmax latmin latmax];
296  yti=[-30:10:30]; xti=[-100:30:20]; %labels de latitude et de longitude
297%niveaux de couleurs
298  lev=[-2:.02:2];
299  clip_lev=[-0.06 0.06]
300
301figure(1);
302initfig;
303figure(2);
304initfig;
305
306for i=1:4
307
308   %subplot(4,2,2*i-1)
309   ifigure=1;
310   figure(ifigure);
311   subplot(2,2,i)
312   if (run_octave == 0)
313    x=lon;
314    y=lat;
315   else
316    [x,y]=meshgrid(lon,lat);
317   end
318   z=squeeze(TABEOF(:,:,i));
319   contourf(x,y,z,lev);
320   caxis(clip_lev)
321   hold on
322   whorldmap
323   % limites geographies et labels de longitude et de latitude
324  ylim([geo(3) geo(4)])
325  xlim([geo(1) geo(2)])
326  set(gca, 'Xtick', xti, 'Ytick', yti)
327  if (run_octave == 0)
328    [longstr, latstr] = contlab(xti, yti);
329    set(gca, 'Xticklabel', longstr, 'Yticklabel', latstr)
330  end;
331  xlabel('longitude')
332  ylabel('latitude')
333
334   %titre de la figure
335   title([num2str(p_var(i)) '%'])
336
337  %barre de couleur
338  if (run_octave == 0)
339    hpal=jet(100); %carte des couleurs: du bleu au rouge par defaut.
340    pos1=get(gca,'Position')
341    pos=[pos1(1) pos1(2)-.075 pos1(3) .013];
342    colorbartype(pos,lev,1,clip_lev,hpal,0);
343    title('degC')
344  else
345    colorbar('East')
346  end;
347 
348   % sauvegarde de la figure
349   printer='eps';
350   print_printer=['-d', printer];
351   fullfilename=['.' filesep nomfic num2str(limite_latN) 'N' num2str(limite_latS) 'S_' , num2str(ifigure) '.' printer];
352   print(print_printer,fullfilename);
353   clear fullfilename;
354   clear printer;
355
356   %subplot(4,2,2*i)
357   ifigure=2;
358   figure(ifigure);
359   subplot(2,2,i)
360   plot(PC(:,i),'x-')
361   title(['composante principale correspondante (normalisée)'])
362   hold on
363   plot([1 ntemp],[0 0],'k')
364   xlim([1 ntemp])
365   xlabel('mois')
366   %
367   % sauvegarde de la figure
368   printer='eps';
369   print_printer=['-d', printer];
370   fullfilename=['.' filesep nomfic num2str(limite_latN) 'N' num2str(limite_latS) 'S_' , num2str(ifigure) '.' printer];
371   print(print_printer,fullfilename);
372   clear fullfilename;
373   clear printer;
374end;
375
376% Graphe pourcentages de variance expliqué
377ifigure=3;
378figure(ifigure);
379bar(flipud(pctg_var))
380xlim([0 10])
381title('valeurs propres de la matrice de covariance')
382ylabel('% de variance expliqué')
383xlabel('indice du vecteur propre')
384
385% sauvegarde de la figure
386printer='eps';
387print_printer=['-d', printer];
388fullfilename=['.' filesep nomfic num2str(limite_latN) 'N' num2str(limite_latS) 'S_' , num2str(ifigure) '.' printer];
389print(print_printer,fullfilename);
390clear fullfilename;
391clear printer;
Note: See TracBrowser for help on using the repository browser.