source: trunk/PROGRAMMES/eof_NCEP_sais.m @ 26

Last change on this file since 26 was 26, checked in by pinsard, 15 years ago

production de .ps au lieu de .eps

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