;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;+ ; NAME:decoupeterre ; ; PURPOSE:tres semblable a grille. Ici qd vargrid ne 'T' ou 'W' alors ; pour le trace il faut recuperer Tmask, glamt, gphit et le tableau de ; triangulation sur le sous domaine considerer. La specificite de ; decoupeterre par rapport a grille, c''est que l''on prend ds la ; mesure du possible un sous domaine juste un peu plus grand que celui ; definit par domdef de facon a etre sur que le masque que l''on trace ; recouvrira bien tout le dessin. ; ; CATEGORY:pour plt ; ; CALLING SEQUENCE:decoupeterre, mask, glam, gphi, TRI = tri ; ; INPUTS: ; ; 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 ; ; /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:le masque et ses coordonnees ; ; COMMON BLOCKS: ; common.pro ; ; SIDE EFFECTS: ; ; RESTRICTIONS: ; ; EXAMPLE: ; ; MODIFICATION HISTORY: Sebastien Masson (smasson@lodyc.jussieu.fr) ; 24/2/99 ;- ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ PRO decoupeterre, mask, glam, gphi, TRI = tri, TOUT = tout, INDICEZOOM = indicezoom, coinmonte = coinmonte, coindescend = coindescend, _extra = ex @common tempsun = systime(1) ; pour key_performance ;------------------------------------------------------------ if keyword_set(tout) then begin oldboite = [lon1, lon2, lat1, lat2, prof1, prof2] domdef endif ;------------------------------------------------------------ ; case vargrid of 'U':BEGIN premierx = 0 > (min([premierxt, premierxu])-1) dernierx = (max([dernierxt, dernierxu])+1) < (jpi-1) premiery = premieryt derniery = dernieryt end 'V':BEGIN premierx = premierxt dernierx = dernierxt premiery = 0 > (min([premieryt, premieryv])-1) derniery = (max([dernieryt, dernieryv])+1) < (jpj-1) end 'F':BEGIN premierx = 0 > (min([premierxt, premierxu])-1) dernierx = (max([dernierxt, dernierxu])+1) < (jpi-1) premiery = 0 > (min([premieryt, premieryv])-1) derniery = (max([dernieryt, dernieryv])+1) < (jpj-1) END ENDCASE nx = dernierx-premierx+1 ny = derniery-premiery+1 premierz = premierzt dernierz = dernierzt glam=glamt[premierx:dernierx, premiery:derniery] gphi=gphit[premierx:dernierx, premiery:derniery] ; premierz = premierzt dernierz = dernierzt nz = nzt mask=tmask[premierx:dernierx, premiery:derniery, niveau-1] profond = niveau-1 ;------------------------------------------------------------ ; 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 ; si on est en train de tracer un niveau profond on refait la ; triangulation if keyword_set(profond) then begin tri = triangule(mask, periodique = keyword_set(key_periodique)*(nx EQ jpi), coinmonte = coinmonte, coindescend = coindescend, _extra = ex) indicezoom = (lindgen(jpi, jpj))[premierx:dernierx, premiery:derniery] ENDIF ELSE BEGIN ; sinon on recupere la partie de triangulation qui nous interesse et ; on la numerote convenablement! if nx EQ jpi AND ny EQ jpj then tri = triangles ELSE BEGIN msk = bytarr(jpi, jpj) msk[premierx:dernierx,premiery:derniery] = 1 ind = where( msk[triangles[0, *]] EQ 1 $ AND msk[triangles[1, *]] EQ 1 $ AND msk[triangles[2, *]] EQ 1 ) tri =triangles[*, ind]-(premierx+premiery*jpi) y = tri/jpi x = tri-y*jpi tri = x+y*nx ENDELSE ENDELSE ENDELSE if keyword_set(tout) then domdef, oldboite ;------------------------------------------------------------------- if keyword_set(key_performance) THEN print, 'temps decoupeterre', systime(1)-tempsun ;------------------------------------------------------------ return end