source: trunk/GRILLE/v2t.pro @ 2

Last change on this file since 2 was 2, checked in by opalod, 22 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5; NAME:v2t
6;
7; PURPOSE:permet de passer un champs se rapportant a la grille V sur
8; la grille T, grace a la moyenne: res = 0.5*(res + shift(res, 0, +1))
9;     
10;
11; CATEGORY:grille
12;
13; CALLING SEQUENCE:res=v2t(tab)
14;
15; INPUTS:tab, un tableau 2, 3 ou 4d
16;
17; KEYWORD PARAMETERS:
18;
19; OUTPUTS:res, un tableau 2, 3 ou 4d
20;
21; COMMON BLOCKS:common.pro
22;
23; SIDE EFFECTS:force les parametres du zoom sur la grille V a etre
24; les memes que ceux sur la grille T.
25;
26; RESTRICTIONS:les points qui ne peuvent etre calcules sont mis a la
27; valeur NaN consacree par IDL: !values.f_nan
28;
29; EXAMPLE:
30;
31; MODIFICATION HISTORY:a partir des programmes de Marina Levy
32;                      Sebastien Masson (smasson@lodyc.jussieu.fr):
33;                      inspection des traveuax finis. 5/6/2000
34;
35;-
36;------------------------------------------------------------
37;------------------------------------------------------------
38;------------------------------------------------------------
39FUNCTION v2t, temp
40@common
41   res = temp
42;on force nxt=nxv, etc ...
43   premierxt = premierxv
44   dernierxt = dernierxv
45   premieryt = premieryv
46   dernieryt = dernieryv
47   nxt = nxv
48   nyt = nyv
49   vargrid = 'T'
50   if NOT keyword_set(valmask) then valmask = 1e20
51   lat1 = gphit[0, premieryt]
52   lat2 = gphiv[0, dernieryv]
53
54; cas sur la taille du tableau et application
55   taille = size(temp)
56   CASE taille[0] OF
57      1: res = -1
58      2: BEGIN
59         case 1 of
60            taille[1] eq nxv and taille[2] eq nyv:
61            taille[1] eq jpi and taille[2] eq jpj: $
62             res=res[premierxv:dernierxv, premieryv:dernieryv]
63            else: $
64             return, report('Probleme d''adequation entre les tailles du domaine et de la boite.')
65         endcase
66         mask = (vmask())[premierxv:dernierxv, premieryv:dernieryv, 0]
67         terre = where(mask EQ 0)
68         IF terre[0] NE -1 THEN res[terre] = !values.f_nan
69         res = 0.5*(res + shift(res, 0, +1))
70         res[*, 0] = !values.f_nan
71         mask = tmask[premierxv:dernierxv, premieryv:dernieryv, 0]
72         terre = where(mask EQ 0)
73         IF terre[0] NE -1 THEN res[terre] = valmask
74      END
75      3: BEGIN
76         case 1 of
77            taille[1] eq nxv and taille[2] eq nyv AND taille[3] EQ nzt:
78            taille[1] eq nxv and taille[2] eq nyv AND taille[3] EQ jpk: $
79             res=res[*, *, premierzt:dernierzt]
80            taille[1] eq nxv and taille[2] eq nyv AND taille[3] EQ jpt:
81            taille[1] eq jpi and taille[2] eq jpj AND taille[3] EQ jpk: $
82             res=res[premierxv:dernierxv, premieryv:dernieryv, premierzt:dernierzt]
83            taille[1] eq jpi and taille[2] eq jpj AND taille[3] EQ jpt: $
84             res=res[premierxv:dernierxv, premieryv:dernieryv, *]
85            else: $
86             return, report('Probleme d''adequation entre les tailles du domaine et de la boite.')
87         ENDCASE
88         if taille[3] EQ jpt then begin
89            mask = (vmask())[premierxv:dernierxv, premieryv:dernieryv, dernierzt*(nzt NE jpk)]
90            mask = temporary(mask[*])#replicate(1, jpt)
91            mask = reform(mask, nxv, nyv, jpt, /over)
92         ENDIF ELSE mask = (vmask())[premierxv:dernierxv, premieryv:dernieryv, premierzt:dernierzt]
93         terre = where(temporary(mask) EQ 0)
94         IF terre[0] NE -1 THEN res[temporary(terre)] = !values.f_nan
95         res = 0.5*(res + shift(res, 0, +1, 0))
96         res[*, 0, *] = !values.f_nan
97         if taille[3] EQ jpt then BEGIN
98            mask = tmask[premierxv:dernierxv, premieryv:dernieryv, dernierzt*(nzt NE jpk)]
99            mask = temporary(mask[*])#replicate(1, jpt)
100            mask = reform(mask, nxv, nyv, jpt, /over)
101         ENDIF ELSE mask = tmask[premierxv:dernierxv, premieryv:dernieryv, premierzt:dernierzt]
102         terre = where(temporary(mask) EQ 0)
103         IF terre[0] NE -1 THEN res[temporary(terre)] = valmask
104      END
105      4: BEGIN
106         case 1 of
107            taille[1] eq nxv and taille[2] eq nyv AND taille[3] EQ nzt AND taille[4] EQ jpt:
108            taille[1] eq nxv and taille[2] eq nyv AND taille[3] EQ jpk AND taille[4] EQ jpt: $
109             res=res[*, *, premierzt:dernierzt, *]
110            taille[1] eq jpi and taille[2] eq jpj AND taille[3] EQ jpk AND taille[4] EQ jpt: $
111             res=res[premierxv:dernierxv, premieryv:dernieryv, premierzt:dernierzt, *]
112            else: $
113             return, report('Probleme d''adequation entre les tailles du domaine et de la boite.')
114         ENDCASE
115         mask = (vmask())[premierxv:dernierxv, premieryv:dernieryv, premierzt:dernierzt]
116         mask = temporary(mask[*])#replicate(1, jpt)
117         mask = reform(mask, nxv, nyv, nzt, jpt, /over)
118         terre = where(temporary(mask) EQ 0)
119         IF terre[0] NE -1 THEN res[temporary(terre)] = !values.f_nan
120         res = 0.5*(res + shift(res, 0, +1, 0, 0))
121         res[*, 0, *, *] = !values.f_nan
122         mask = tmask[premierxv:dernierxv, premieryv:dernieryv, premierzt:dernierzt]
123         mask = temporary(mask[*])#replicate(1, jpt)
124         mask = reform(mask, nxv, nyv, nzt, jpt, /over)
125         terre = where(temporary(mask) EQ 0)
126         IF terre[0] NE -1 THEN res[temporary(terre)] = valmask
127      END
128   endcase
129
130   return, res
131END
132
Note: See TracBrowser for help on using the repository browser.