source: trunk/SRC/ToBeReviewed/CALCULS/rhon.pro @ 134

Last change on this file since 134 was 134, checked in by navarro, 18 years ago

change *.pro file properties (del eof-style, del executable, set keywords Id

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 4.7 KB
Line 
1;+
2   ;;
3   ;; Calcul de la fonction d'etat (issue de eos.F)
4   ;;
5   ;; Creation : 1997 / G. Roullet
6   ;; adaptation pour les tableaux z,zt,xyz,xyzt
7   ;; par seb.
8   ;;
9;-
10FUNCTION rhon, sn, tn, INSITU = insitu, SIGMA_N = sigma_n
11;
12  compile_opt idl2, strictarrsubs
13;
14@common
15   tempsun = systime(1)         ; pour key_performance
16      sn = -1e5 > double(sn) < 1e5
17      tn = -1e5 > double(tn) < 1e5
18
19
20      IF keyword_set(sigma_n) then insitu = 1
21
22   taille = size(sn)
23   case taille[0] of
24      0:BEGIN                   ;z
25         zrhop=0d
26         jkmax = 1
27      END
28      1:BEGIN                   ;z
29         zrhop=dblarr(taille[1])
30         jkmax = taille[1]
31      END
32      2:BEGIN                   ;xy (jpt=1) ou zt
33         zrhop=dblarr(taille[1],taille[2])
34         if jpt EQ 1 then jkmax = 1 ELSE jkmax = taille[1]
35      END
36      3:BEGIN                   ;xyz (jpt=1) ou xyt
37         zrhop=dblarr(taille[1],taille[2],taille[3])
38         if jpt EQ 1 then jkmax = taille[3] ELSE jkmax = 1
39      END
40      4:BEGIN                   ;xyzt
41         zrhop=dblarr(taille[1],taille[2],taille[3],taille[4] )
42         jkmax = taille[3]
43      END
44   endcase
45   
46
47
48   FOR jk = 0, jkmax-1 DO BEGIN
49
50      case taille[0] of
51         0:BEGIN                ;z
52            ztt = tn
53            zs = sn
54         END
55         1:BEGIN                ;z
56            ztt = tn[jk]
57            zs = sn[jk]
58         END
59         2:BEGIN                ;xy (jpt=1) ou zt
60            if jpt EQ 1 then begin
61               ztt = tn
62               zs = sn
63            ENDIF ELSE BEGIN
64               ztt = tn[jk, *]
65               zs = sn[jk, *]
66            ENDELSE
67         END
68         3:BEGIN                ;xyz (jpt=1) ou xyt
69            if jpt EQ 1 then begin
70               ztt = tn[*, *, jk]
71               zs = sn[*, *,jk]
72            endif ELSE BEGIN
73               ztt = tn
74               zs = sn
75            ENDELSE
76         END
77         4:BEGIN                ;xyzt
78            ztt = tn[*, *, jk, *]
79            zs = sn[*, *,jk, *]
80         END
81      endcase
82      if n_elements(sigma_n) NE 0 then zh = 1000.*sigma_n ELSE zh = gdept[jk]
83; ...   square root salinity
84      zsr= sqrt(abs(zs))
85; ...   compute density pure water at atm pressure
86      zr1=((((6.536332e-9*ztt-1.120083e-6)*ztt+1.001685e-4)*ztt-9.095290e-3)*ztt+6.793952e-2)*ztt+999.842594
87; ...   seawater density atm pressure
88      zr2= (((5.3875e-9*ztt-8.2467e-7)*ztt+7.6438e-5)*ztt-4.0899e-3)*ztt+0.824493
89      zr3= (-1.6546e-6*ztt+1.0227e-4)*ztt-5.72466e-3
90      zr4= 4.8314e-4
91;
92; ...   potential density (reference to the surface)
93      case taille[0] of
94         0: zrhop    = (zr4*zs + zr3*zsr + zr2)*zs + zr1
95         1: zrhop[jk]= (zr4*zs + zr3*zsr + zr2)*zs + zr1
96         2:BEGIN
97            if jpt EQ 1 then zrhop = (zr4*zs + zr3*zsr + zr2)*zs + zr1 $
98            ELSE zrhop[jk, *]= (zr4*zs + zr3*zsr + zr2)*zs + zr1
99         END
100         3:BEGIN
101            if jpt EQ 1 then zrhop[*, *,jk]= (zr4*zs + zr3*zsr + zr2)*zs + zr1 $
102             ELSE zrhop = (zr4*zs + zr3*zsr + zr2)*zs + zr1
103         END
104         4: zrhop[*, *,jk, *]= (zr4*zs + zr3*zsr + zr2)*zs + zr1
105      endcase
106
107      IF n_elements(insitu) EQ 1 THEN BEGIN
108; ...   add the compression terms
109         ze = (-3.508914e-8*ztt-1.248266e-8)*ztt-2.595994e-6
110         zbw= ( 1.296821e-6*ztt-5.782165e-9)*ztt+1.045941e-4
111         zb = zbw + ze * zs
112;
113         zd = -2.042967e-2
114         zc = (-7.267926e-5*ztt+2.598241e-3)*ztt+0.1571896
115         zaw = ((5.939910e-6*ztt+2.512549e-3)*ztt-0.1028859)*ztt -4.721788
116         za = ( zd*zsr + zc)*zs + zaw
117;
118         zb1= (-0.1909078*ztt+7.390729)*ztt-55.87545
119         za1= ((2.326469e-3*ztt+1.553190)*ztt-65.00517)*ztt+1044.077
120         zkw= (((-1.361629e-4*ztt-1.852732e-2)*ztt-30.41638)*ztt+2098.925)*ztt+190925.6
121         zk0= (zb1*zsr + za1)*zs + zkw
122;
123; ...   masked in situ density
124         case taille[0] of
125            0: zrhop = zrhop / (1.0-zh/(zk0-zh*(za-zh*zb)))
126            1: zrhop[jk] = zrhop[jk] / (1.0-zh/(zk0-zh*(za-zh*zb)))
127            2:BEGIN
128               if jpt EQ 1 then zrhop = zrhop / (1.0-zh/(zk0-zh*(za-zh*zb))) $
129               ELSE zrhop[jk, *] = zrhop[jk, *] / (1.0-zh/(zk0-zh*(za-zh*zb)))
130            END
131            3:BEGIN
132               if jpt EQ 1 then zrhop[*, *,jk] = zrhop[*, *,jk] / (1.0-zh/(zk0-zh*(za-zh*zb))) $
133               ELSE zrhop = zrhop / (1.0-zh/(zk0-zh*(za-zh*zb)))
134            END
135            4: zrhop[*, *,jk, *] = zrhop[*, *,jk, *] / (1.0-zh/(zk0-zh*(za-zh*zb)))
136         endcase
137         
138      ENDIF
139   ENDFOR
140   
141   terre = where(tn GE 1e6)
142   if terre[0] NE -1 then zrhop[terre] = valmask
143
144   if keyword_set(key_performance) THEN print, 'temps rhon', systime(1)-tempsun
145
146   
147   return, zrhop
148END
149
150
Note: See TracBrowser for help on using the repository browser.