source: trunk/procs/macros/make_transfo.pro @ 170

Last change on this file since 170 was 170, checked in by pinsard, 15 years ago

fill uses paragraph in header with used commons

  • Property svn:keywords set to Id
File size: 5.2 KB
Line 
1;+
2;
3; compute transformation
4;
5; @param todo {in}
6;
7; input denflx = density flux
8;
9; @uses
10; <pro>common</pro>
11; <propost_it>com_eg</propost_it>
12;
13; @history
14; EG january 2001 (inspired from denflux.f)
15;
16; @version
17; $Id$
18;
19;-
20FUNCTION make_transfo, file_name, ncdf_db, todo $
21         , BOXZOOM=boxzoom $
22         , TIME_1=time_1 $
23         , TIME_2=time_2 $
24         , ALL_DATA=all_data $
25         , ZMTYP=zmtyp
26;
27  compile_opt idl2, strictarrsubs
28;
29@common
30@com_eg
31;
32;
33; Read sst (C), sss (PSU), Q [W/m2], E-P [kg/m2/s]=[mm/s]
34;
35   sst = nc_read(file_name,'sosstsst', ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data)
36   sss = nc_read(file_name,'sosaline', ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data)
37   hef = nc_read(file_name,'sohefldo', ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data)
38   emp = nc_read(file_name,'sowaflup', ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data)
39   sst = sst.data
40   sss = sss.data
41   hef = hef.data
42   emp = emp.data
43
44   idxt=where(sst eq valmask)
45   idxs=where(sss eq valmask)
46   IF idxt[0] NE -1 THEN sst[idxt]=0.
47   IF idxs[0] NE -1 THEN sss[idxs]=0.   
48
49; Compute potential density (sigma_0)
50                                                     
51   rho0 = eos[sst, sss]-1000.
52   IF idxs[0] NE -1 THEN rho0[idxt] = valmask   
53
54; Define density grid
55
56   n_sig = (sig_max - sig_min)/sig_del + 1
57   z_sig = sig_min+findgen(n_sig)*sig_del
58
59; other inits
60
61   sizef = size(sst)
62   jpi = sizef[1]
63   jpj = sizef[2]
64   jpt = 1
65   IF sizef[0] EQ 3 THEN jpt = sizef[3]
66
67   dt = 1./float(jpt)            ; integration delta time
68   drho = sig_del          ; delta rho
69   dsig = sig_del
70   P = 0.                        ; pressure = 0 (potential density)
71
72   t_area = 0.
73   t_heat = 0.
74   t_wafl = 0.
75   fluxbar = 0.
76   fluxsal = 0.
77
78; Output arrays
79
80   fheat = fltarr(jpi, jpj, jpt)
81   fwafl = fltarr(jpi, jpj, jpt)
82   dia = fltarr(n_sig+1)
83   diawf = fltarr(n_sig+1)
84   diat = fltarr( n_sig+1, jpt)
85   diawft = fltarr(n_sig+1, jpt)
86   hist = fltarr(n_sig+1, jpt)
87   histwf = fltarr(n_sig+1, jpt)
88   area = fltarr(n_sig+1, jpt)
89   nval = lonarr(n_sig+1, jpt)
90
91; Work arrays
92
93   timwrk = fltarr(jpt)
94
95   trf_bin = fltarr(n_sig+1)
96   trf_bin[*] = 0.
97;
98;  Loop on 2D domain (and time as '*' dimension)
99;
100   FOR ji = 0, (jpi-1) DO BEGIN
101      FOR jj = 0, (jpj-1) DO BEGIN
102 
103         IF rho0[ji, jj, 0] NE valmask THEN BEGIN
104;
105;        input fields
106            t = sst[ji, jj, *]
107            s = sss[ji, jj, *]
108            hf = hef[ji, jj, *]
109            ep = emp[ji, jj, *]
110            sig = rho0[ji, jj, *]
111
112;        compte alpha, beta, Cp
113            al = alpha[t, s, P]
114            be = betar[t, s, P]
115            Cp = Cpsw[t, s, P]
116
117;        find density bin
118            ib = ROUND((sig-sig_min)/dsig)
119           
120            ib = ib > 0
121            ib = ib < n_sig
122
123;        compute area and integral of fluxes
124
125            dA = e1t[ji, jj]*e2t[ji, jj]
126        ; conv = m2 -> 1.e6 km2
127            conv = 1.e-6*1.e-6
128            t_area = t_area + dA*conv
129        ; conv = W -> PW
130            conv = 1.e-15
131            t_heat = t_heat + total(hf)*dt*dA*conv 
132        ; conv = mm -> m and m3/s to Sv
133            conv = 1.e-3*1.e-6
134            t_wafl = t_wafl + total(ep)*dt*dA*conv 
135
136;        tally number of point in each bin
137
138            FOR jt = 0, (jpt-1) DO BEGIN
139               area[ib[jt], jt] = area[ib[jt], jt] + dA
140               nval[ib[jt], jt] = nval[ib[jt], jt] + 1
141            ENDFOR
142
143;        sum heat and fresh water fluxes as mass fluxes in kg/m2/s (all units SI)
144;        convwf : kg/m2/s=mm/s -> m/s
145            convwf = 1.e-3
146            fheat[ji, jj, *] = ( -al/Cp)*hf
147            fwafl[ji, jj, *] = (1000.+sig)*be*s*ep*convwf
148
149;        volume transport per density class (m3/s)
150;        period averaged density flux
151            FOR jt = 0, (jpt-1) DO BEGIN
152               fht = fheat[ji, jj, jt]*dA
153               fwf = fwafl[ji, jj, jt]*dA
154               hist[ib[jt], jt] = hist[ib[jt], jt] + (fht+fwf)/drho
155               histwf[ib[jt], jt] = histwf[ib[jt], jt] + fwf/drho
156               fluxbar = fluxbar + (fht+fwf)*dt
157               fluxsal = fluxsal + (fwf)*dt
158            ENDFOR
159
160         ENDIF
161;     end of loop on ji,jj
162      ENDFOR
163   ENDFOR
164
165
166   print, ' '
167   print, ' ----------------------------------------------------------------'
168   print, '                    Transformation statitics'
169   print, ' ----------------------------------------------------------------'
170   print, '   Net heat flux in ocean               (PW)  : ', t_heat
171   print, '   Net water flux in ocean              (Sv)  : ', t_wafl
172   print, '   Period averaged density flux       (kg/s)  : ', fluxbar
173   print, '      - heat flux contribution        (kg/s)  : ', fluxbar-fluxsal
174   print, '      - fresh water flux contribution (kg/s)  : ', fluxsal
175   print, '   Integral area (glob.=357.208)  (10^6 km2)  : ', t_area
176   print, ' '
177
178; output
179
180   CASE todo OF ;
181      'denflx': result = (fheat+fwafl)           ; density flux
182      'denflw': result = (fwafl)                 ; fresh water density flux
183      ELSE: result = -1
184   ENDCASE
185                                         
186   return, result
187END
Note: See TracBrowser for help on using the repository browser.