;+ ;; ;; Calcul de la Fonction de Courant a travers les lignes J ;; ;; ;; creation : 12/02/99 M Imbard ;; Modification : 12/11/98 G. Roullet ;; 18/11/98 G. Roullet ;- PRO msf_simple, v, msf, msfmsk, MSK = msk @common ;COMMON moy, zonmsk, mermsk, jpl IF n_elements(jpl) EQ 0 THEN jpl = jpj ; ; jpl bandes de latitudes ; fm = fltarr(jpl, jpk) msf = fltarr(jpl, jpk) msfmsk = fltarr(jpl, jpk) zv = v z = zv ze1v = zv ze3v = zv vert = replicate(1, jpk) ; ; Masque de u pour un calcul de msf sur le sous domaine msk(jpi,jpj) ; IF n_elements(msk) NE 0 THEN BEGIN zvmask = boundperio( (msk +shift(msk, 0, -1) ) < 1 ) zvmask = zvmask(*)#vert zv = zv*zvmask ENDIF ; ; Ecriture "tricky" optimisee... si vous avez compris comment ; on calculait un flux a partir de champ 2D, vous avez fait le ; plus dur : ici on generalise a 3D d''ou l''utilisation de #vert ; ; calcul du flux ; FOR i = 0, jpi-1 DO BEGIN for j= 0, jpj-1 do begin ze1v(i,j,*) = replicate(e1v(i,j),jpk) & endfor &endfor FOR k = 0, jpk-1 DO BEGIN ze3v(*,*,k)=replicate(e3t(k),jpi*jpj) & endfor ; z= -v*ze1v*ze3v ; ; integration zonale du flux ! ; fm = total(z, 1) ; ; calcul de la msf en integrant depuis le fond ; FOR k = jpk-2, 0, -1 DO begin msf[*, k] = msf[*, k+1]-fm(*, k) & endfor ; ; msfmsk est le masque associe a msf (utilise pour les graphiques) ; msfmsk = fm NE 0. ; END