;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;+ ; NAME:u2t ; ; PURPOSE:permet de passer un champs se rapportant a la grille U sur ; la grille T, grace a la moyenne: res = 0.5*(res + shift(res, 1, 0)) ; ; ; CATEGORY:grille ; ; CALLING SEQUENCE:res=u2t(tab) ; ; INPUTS:tab, un tableau 2, 3 ou 4d ; ; KEYWORD PARAMETERS: ; ; OUTPUTS:res, un tableau 2, 3 ou 4d ; ; COMMON BLOCKS:common.pro ; ; SIDE EFFECTS:force les parametres du zoom sur la grille V a etre ; les memes que ceux sur la grille T. ; ; RESTRICTIONS:les points qui ne peuvent etre calcules sont mis a la ; valeur NaN consacree par IDL: !values.f_nan ; ; EXAMPLE: ; ; MODIFICATION HISTORY:a partir des programmes de Marina Levy ; Sebastien Masson (smasson@lodyc.jussieu.fr): ; inspection des traveuax finis. 5/6/2000 ; ;- ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ FUNCTION u2t, temp @common res = temp ;on force nxt=nxu, etc ... premierxt = premierxu dernierxt = dernierxu premieryt = premieryu dernieryt = dernieryu nxt = nxu nyt = nyu vargrid = 'T' if NOT keyword_set(valmask) then valmask = 1e20 lon1 = glamt[premierxt, 0] lon2 = glamu[dernierxu, 0] ; ; cas sur la taille du tableau et application taille = size(temp) CASE taille[0] OF 1: res = -1 2: BEGIN case 1 of taille[1] eq nxu and taille[2] eq nyu: taille[1] eq jpi and taille[2] eq jpj: $ res=res[premierxu:dernierxu, premieryu:dernieryu] else: $ return, report('Probleme d''adequation entre les tailles du domaine et de la boite.') endcase mask = (umask())[premierxu:dernierxu, premieryu:dernieryu, 0] terre = where(mask EQ 0) IF terre[0] NE -1 THEN res[terre] = !values.f_nan res = 0.5*(res + shift(res, 1, 0)) if NOT (keyword_set(key_periodique) AND nxu EQ jpi) then res[0, *] = !values.f_nan mask = tmask[premierxu:dernierxu, premieryu:dernieryu, 0] terre = where(mask EQ 0) IF terre[0] NE -1 THEN res[terre] = valmask END 3: BEGIN case 1 of taille[1] eq nxu and taille[2] eq nyu AND taille[3] EQ nzt: taille[1] eq nxu and taille[2] eq nyu AND taille[3] EQ jpk: $ res=res[*, *, premierzt:dernierzt] taille[1] eq nxu and taille[2] eq nyu AND taille[3] EQ jpt: taille[1] eq jpi and taille[2] eq jpj AND taille[3] EQ jpk: $ res=res[premierxu:dernierxu, premieryu:dernieryu, premierzt:dernierzt] taille[1] eq jpi and taille[2] eq jpj AND taille[3] EQ jpt: $ res=res[premierxu:dernierxu, premieryu:dernieryu, *] else: $ return, report('Probleme d''adequation entre les tailles du domaine et de la boite.') ENDCASE if taille[3] EQ jpt then begin mask = (umask())[premierxu:dernierxu, premieryu:dernieryu, dernierzt*(nzt NE jpk)] mask = temporary(mask[*])#replicate(1, jpt) mask = reform(mask, nxu, nyu, jpt, /over) ENDIF ELSE mask = (umask())[premierxu:dernierxu, premieryu:dernieryu, premierzt:dernierzt] terre = where(temporary(mask) EQ 0) IF terre[0] NE -1 THEN res[temporary(terre)] = !values.f_nan res = 0.5*(res + shift(res, 1, 0, 0)) if NOT (keyword_set(key_periodique) AND nxu EQ jpi) then res[0, *, *] = !values.f_nan if taille[3] EQ jpt then BEGIN mask = tmask[premierxu:dernierxu, premieryu:dernieryu, dernierzt*(nzt NE jpk)] mask = temporary(mask[*])#replicate(1, jpt) mask = reform(mask, nxu, nyu, jpt, /over) ENDIF ELSE mask = tmask[premierxu:dernierxu, premieryu:dernieryu, premierzt:dernierzt] terre = where(temporary(mask) EQ 0) IF terre[0] NE -1 THEN res[temporary(terre)] = valmask END 4: BEGIN case 1 of taille[1] eq nxu and taille[2] eq nyu AND taille[3] EQ nzt AND taille[4] EQ jpt: taille[1] eq nxu and taille[2] eq nyu AND taille[3] EQ jpk AND taille[4] EQ jpt: $ res=res[*, *, premierzt:dernierzt, *] taille[1] eq jpi and taille[2] eq jpj AND taille[3] EQ jpk AND taille[4] EQ jpt: $ res=res[premierxu:dernierxu, premieryu:dernieryu, premierzt:dernierzt, *] else: $ return, report('Probleme d''adequation entre les tailles du domaine et de la boite.') ENDCASE mask = (umask())[premierxu:dernierxu, premieryu:dernieryu, premierzt:dernierzt] mask = temporary(mask[*])#replicate(1, jpt) mask = reform(mask, nxu, nyu, nzt, jpt, /over) terre = where(temporary(mask) EQ 0) IF terre[0] NE -1 THEN res[temporary(terre)] = !values.f_nan res = 0.5*(res + shift(res, 1, 0, 0, 0)) if NOT (keyword_set(key_periodique) AND nxu EQ jpi) then res[0, *, *, *] = !values.f_nan mask = tmask[premierxu:dernierxu, premieryu:dernieryu, premierzt:dernierzt] mask = temporary(mask[*])#replicate(1, jpt) mask = reform(mask, nxu, nyu, nzt, jpt, /over) terre = where(temporary(mask) EQ 0) IF terre[0] NE -1 THEN res[temporary(terre)] = valmask END endcase return, res END