;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;+ ; NAME:grille ; ; PURPOSE: choisit la grille qui doit etre utilisee pour faire le graphe en ; fonction de vargrid et renvoie les parametres correspondants calcules ds ; domdef.pro et reduit au domaine definit par domdef (contrairement a ; grandegrille.pro) ; ; CATEGORY: ; ; CALLING SEQUENCE: ; grille,mask,glam,gphi,gdep,nx,ny,nz,premierx,premiery,premierz,dernierx,derniery,dernierz,e1,e2,e3 ; ; INPUTS:rien. ATTENTION les choix de la grille se fait a partir de la ; valeur de la variable globale vargrid, qui peut etre egale a 'T', ; 'U', 'V', 'W' ou 'F'. ; ; KEYWORD PARAMETERS: ; TRI si ce mot clef sert a obtenir grace a grille la ; triangulation qui se rapporte a la grille mais uniquement ; sur la partie du zoom. ce tableau de triangulation reduit ; est passe ds la variable que l''on a egalee a tri.par ex: ; grille,...,tri=triangulation_reduite. ne mot clef est ; utilise dans plt.pro ; ; /FORPLT: ds plt on veut que sur les points terres, glam et ; gphi soit egale a glamt et gphit quelle que soit la grille. ; ; /NOTRI: utile seulement qd TRI est active. dans ce cas ; grille retourne -1 ds la variable tri meme si la variable du ; common triangles est definie et differente de -1 ; ; OUTPUTS:mask,glam,gphi,gdep,nx,ny,nz,premierx,premiery,premierz, ; dernierx,derniery,dernierz,e1,e2,e3 ; ; pour leur definition cf domdef et la gestion des sous ; domaines sur le web ; ; Rq: ces outputs sont optionnels, si je veux recuperer que ; mask, glam et gphi il suffit de taper grille, mask, glam, gphi ; ; COMMON BLOCKS: ; common.pro congridseb.pro ; ; SIDE EFFECTS: utilise la variable globale vargird ; ; RESTRICTIONS: vargrid doit etre 'T', 'W', 'U', 'V' ou 'F' ; ; EXAMPLE: ; ; MODIFICATION HISTORY: Sebastien Masson (smasson@lodyc.jussieu.fr) ; 12/2/1999 ; 10/11/1999 /forplt ;- ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ pro grille, mask, glam, gphi, gdep, nx, ny,nz,premierx,premiery,premierz,dernierx, derniery, dernierz, e1,e2,e3, TRI = tri, NOTRI = notri, TOUT = tout, FORPLT = forplt, _EXTRA = ex @common tempsun = systime(1) ; pour key_performance ;------------------------------------------------------------ if keyword_set(tout) then begin oldboite = [lon1, lon2, lat1, lat2, prof1, prof2] domdef, grille = vargrid, _EXTRA = ex endif tempdeux = systime(1) ; pour key_performance =2 CASE 1 OF ;------------------------------------------------------------ ; grille T ;------------------------------------------------------------ vargrid eq 'OPAPTDHT' or vargrid eq 'OPAPT3DT' $ or vargrid eq 'T': begin ;scalaires nx=nxt ny=nyt nz=nzt premierx = premierxt premiery = premieryt premierz = premierzt dernierx = dernierxt derniery = dernieryt dernierz = dernierzt ;vecteurs 2d glam=glamt[premierx:dernierx, premiery:derniery] gphi=gphit[premierx:dernierx, premiery:derniery] e1 =e1t[premierx:dernierx, premiery:derniery] e2 =e2t[premierx:dernierx, premiery:derniery] ;vecteurs 3d mask=tmask[premierx:dernierx, premiery:derniery, premierz:dernierz] end ;------------------------------------------------------------ ; grille W ;------------------------------------------------------------ vargrid eq 'OPAPT3DW' or vargrid eq 'W': begin ;scalaires nx=nxt ny=nyt nz=nzw premierx = premierxt premiery = premieryt premierz = premierzw dernierx = dernierxt derniery = dernieryt dernierz = dernierzw ;vecteurs 2d terre = where(tmask[*, *, 0] EQ 0) glam=glamt[premierx:dernierx, premiery:derniery] gphi=gphit[premierx:dernierx, premiery:derniery] e1 =e1t[premierx:dernierx, premiery:derniery] e2 =e2t[premierx:dernierx, premiery:derniery] ;vecteurs 3d mask=tmask[premierx:dernierx, premiery:derniery, premierz:dernierz] end ;------------------------------------------------------------ ; grille U ;------------------------------------------------------------ vargrid eq 'OPAPTDHU' or vargrid eq 'OPAPT3DU' $ or vargrid eq 'U': begin ;scalaires nx=nxu ny=nyu nz=nzt premierx = premierxu premiery = premieryu premierz = premierzt dernierx = dernierxu derniery = dernieryu dernierz = dernierzt ;vecteurs 2d glam=glamu[premierx:dernierx, premiery:derniery] gphi=gphiu[premierx:dernierx, premiery:derniery] if keyword_set(forplt) then BEGIN mask = tmask[premierx:dernierx, premiery:derniery, niveau-1] terre = where(mask EQ 0) if terre[0] NE -1 then begin glam[terre] = (glamt[premierx:dernierx, premiery:derniery])[terre] gphi[terre] = (gphit[premierx:dernierx, premiery:derniery])[terre] endif ENDIF e1 =e1u[premierx:dernierx, premiery:derniery] e2 =e2u[premierx:dernierx, premiery:derniery] ;vecteurs 3d mask=(umask())[premierx:dernierx, premiery:derniery, premierz:dernierz] end ;------------------------------------------------------------ ; grille V ;------------------------------------------------------------ vargrid eq 'OPAPTDHV' or vargrid eq 'OPAPT3DV' $ or vargrid eq 'V': begin ;scalaires nx=nxv ny=nyv nz=nzt premierx = premierxv premiery = premieryv premierz = premierzt dernierx = dernierxv derniery = dernieryv dernierz = dernierzt ;vecteurs 2d glam=glamv[premierx:dernierx, premiery:derniery] gphi=gphiv[premierx:dernierx, premiery:derniery] if keyword_set(forplt) then BEGIN mask = tmask[premierx:dernierx, premiery:derniery, niveau-1] terre = where(mask EQ 0) if terre[0] NE -1 then begin glam[terre] = (glamt[premierx:dernierx, premiery:derniery])[terre] gphi[terre] = (gphit[premierx:dernierx, premiery:derniery])[terre] endif ENDIF e1 =e1v[premierx:dernierx, premiery:derniery] e2 =e2v[premierx:dernierx, premiery:derniery] ;vecteurs 3d mask=(vmask())[premierx:dernierx, premiery:derniery, premierz:dernierz] end ;------------------------------------------------------------ ; grille F ;------------------------------------------------------------ vargrid eq 'OPAPTDHF' or vargrid eq 'OPAPT3DF' $ or vargrid eq 'F': begin ;scalaires nx=nxf ny=nyf nz=nzt premierx = premierxf premiery = premieryf premierz = premierzt dernierx = dernierxf derniery = dernieryf dernierz = dernierzt ;vecteurs 2d glam=glamf[premierx:dernierx, premiery:derniery] gphi=gphif[premierx:dernierx, premiery:derniery] if keyword_set(forplt) then BEGIN mask = tmask[premierx:dernierx, premiery:derniery, niveau-1] terre = where(mask EQ 0) if terre[0] NE -1 then begin glam[terre] = (glamt[premierx:dernierx, premiery:derniery])[terre] gphi[terre] = (gphit[premierx:dernierx, premiery:derniery])[terre] endif ENDIF e1 =e1f[premierx:dernierx, premiery:derniery] e2 =e2f[premierx:dernierx, premiery:derniery] ;vecteurs 3d mask=(fmask())[premierx:dernierx, premiery:derniery, premierz:dernierz] END ;------------------------------------------------------------ ELSE:BEGIN ras = report('Vauvaise definition de la variable vargrid: '+vargrid+'ceete variable doit etre T, U, V, W ou F') stop END ENDCASE IF testvar(var = key_performance) EQ 2 THEN $ print, 'temps grille: attribution des scalaires, vecteurs et tableaux ', systime(1)-tempdeux ;------------------------------------------------------------ ; Variables se rapportant a la dimension verticale ;------------------------------------------------------------ tempdeux = systime(1) ; pour key_performance =2 if vargrid eq 'OPAPT3DW' or vargrid eq 'W' then begin gdep = gdepw[premierz:dernierz] e3=e3w[premierz:dernierz] endif else begin gdep = gdept[premierz:dernierz] e3=e3t[premierz:dernierz] endelse IF testvar(var = key_performance) EQ 2 THEN $ print, 'temps grille: Variables se rapportant a la dimension verticale ', systime(1)-tempdeux ;------------------------------------------------------------ ; vecteur triangulation Qd TRI est active ;------------------------------------------------------------ if arg_present(TRI) then $ if triangles[0] EQ -1 OR keyword_set(notri) then tri = -1 ELSE BEGIN tempdeux = systime(1) ; pour key_performance =2 msk = bytarr(jpi, jpj) msk[premierx:dernierx,premiery:derniery] = 1 ind = where( msk[triangles[0, *]]*msk[triangles[1, *]]*msk[triangles[2, *]] EQ 1 ) tri =triangles[*, ind]-(premierx+premiery*jpi) y = tri/jpi x = tri-y*jpi tri = x+y*nx IF testvar(var = key_performance) EQ 2 THEN $ print, 'temps grille: decoupage de la triangulation ', systime(1)-tempdeux ENDELSE ;------------------------------------------------------------------ ; pour s'assurer qu'il n'y a pas de dimension degenerees (=1) ;------------------------------------------------------------------- ; mask=reform(mask, /over) ; glam=reform(glam, /over) ; gphi=reform(gphi, /over) ; gdep=reform(gdep, /over) ; e1=reform(e1, /over) ; e2=reform(e2, /over) ; e3=reform(e3, /over) if keyword_set(tout) then domdef, oldboite, grille = vargrid if keyword_set(key_performance) THEN print, 'temps grille', systime(1)-tempsun return end