source: trunk/procs/msf_mult.pro @ 12

Last change on this file since 12 was 2, checked in by post_it, 17 years ago

Initial import from ~/POST_IT/

File size: 1.6 KB
Line 
1;+
2;;
3;;  Calcul de la Fonction de Courant a travers les lignes J
4;;
5;;
6;;  creation : 12/02/99 M Imbard
7;;  Modification : 12/11/98 G. Roullet
8;;                 18/11/98 G. Roullet
9;-
10PRO msf_mult, v, msf, msfmsk, MSK = msk
11@common
12;COMMON moy, zonmsk, mermsk, jpl
13IF n_elements(jpl) EQ 0 THEN jpl = jpj
14;
15;  jpl bandes de latitudes
16;
17fm     = fltarr(jpl, jpk, jpt)
18msf    = fltarr(jpl, jpk, jpt)
19msfmsk = fltarr(jpl, jpk, jpt)
20zv = v
21z  = zv
22ze1v   = zv
23ze3v   = zv
24vert = replicate(1, jpk, jpt)
25;
26;  Masque de u pour un calcul de msf sur le sous domaine msk(jpi,jpj)
27;
28IF n_elements(msk) NE 0 THEN BEGIN
29; msk est souvent vide
30; donc cette procedure est ineffective.
31      zvmask = boundperio( (msk +shift(msk, 0, -1) ) < 1 )
32      zvmask = zvmask(*)#vert
33      zv = zv*zvmask
34ENDIF
35;
36;  Ecriture "tricky" optimisee... si vous avez compris comment
37;  on calculait un flux a partir de champ 2D, vous avez fait le
38;  plus dur : ici on generalise a 3D d''ou l''utilisation de #vert
39;
40;  calcul du flux
41;
42FOR i = 0, jpi-1 DO BEGIN for j= 0, jpj-1 do begin ze1v(i,j,*,*) = replicate(e1v(i,j),jpk*jpt) & endfor &endfor
43FOR k = 0, jpk-1 DO BEGIN ze3v(*,*,k,*)=replicate(e3t(k),jpi*jpj*jpt) & endfor
44;
45z= -v*ze1v*ze3v
46;la multiplication ne fait plus disparaitre la dimension temporelle
47;maintenant que ze1v et ze3v ont ete modifie depuis msf_simple.pro
48; integration zonale du flux !
49;
50fm = total(z, 1)
51;
52;  calcul de la msf en integrant depuis le fond
53;
54FOR k = jpk-2, 0, -1 DO begin msf[*, k,*] = msf[*, k+1,*]-fm(*, k,*) & endfor
55;
56;  msfmsk est le masque associe a msf (utilise pour les graphiques)
57;
58msfmsk = fm NE 0.
59;
60END
Note: See TracBrowser for help on using the repository browser.