source: trunk/src/TropFlux_19890101_20091231.pro @ 13

Last change on this file since 13 was 12, checked in by pinsard, 13 years ago

fix for graph in PDF

  • Property svn:executable set to *
File size: 8.7 KB
Line 
1;+
2;
3; .. _TropFlux_19890101_20091231.pro:
4;
5; ==============================
6; TropFlux_19890101_20091231.pro
7; ==============================
8;
9; This program computes net heat flux components on the 1° oaflux grid.
10;
11; all input variables are corrected for mean bias and variability.
12;
13; gustiness correction is applied for wind speed based on cronin's climatological
14; gustiness values.
15;
16;
17;     .. graphviz::
18;
19;        digraph TropFlux_19890101_20091231 {
20;           graph [
21;           rankdir="LR",
22;           ]
23;           mask [shape=ellipse,fontname=Courier,label="/Volumes/Iomega_HDD/work/flux_reconstruction/gridded_data/mask_oaflux_30N30S.nc"];
24;           file_sst [shape=ellipse,fontname=Courier,label="/Volumes/Iomega_HDD/TropFlux/input_cor/full_cor/TropFlux_sst_19890101_20091231_v20.nc"];
25;           file_wind [shape=ellipse,fontname=Courier,label="/Volumes/Iomega_HDD/TropFlux/input_cor/full_cor/TropFlux_ws_19890101_20091231_v20.nc"];
26;           file_wg [shape=ellipse,fontname=Courier,label="/Users/pkb/data/TropFlux/TropFlux_gustiness_19890101_20091231_v50.nc"];
27;           file_sw [shape=ellipse,fontname=Courier,label="/Users/pkb/data/TropFlux/TropFlux_swr_19890101_20091231_BLND_v50.nc"];
28;           file_lw [shape=ellipse,fontname=Courier,label="/Volumes/Iomega_HDD/TropFlux/input_cor/full_cor/TropFlux_lwr_19890101_20091231_v2.nc"];
29;           file_air [shape=ellipse,fontname=Courier,label="/Users/pkb/data/TropFlux/TropFlux_t2m_19890101_20091231_v50.nc"];
30;           file_q [shape=ellipse,fontname=Courier,label="/Volumes/Iomega_HDD/TropFlux/input_cor/full_cor/TropFlux_q2m_19890101_20091231_v20.nc"];
31;
32;           ncfile [shape=ellipse,fontname=Courier,label="/Users/pkb/data/TropFlux/TropFlux_19890101_20091231_v51.nc"];
33;
34;           TropFlux_19890101_20091231 [shape=box,
35;           fontname=Courier,
36;           color=blue,
37;           URL="http://forge.ipsl.jussieu.fr/tropflux/browser/trunk/src/TropFlux_19890101_20091231.pro",
38;           label="${TROPFLUX}/src/TropFlux_19890101_20091231.pro"];
39;
40;           {mask file_sst file_wind file_wg file_sw file_lw file_air file_q} -> {TropFlux_19890101_20091231} -> {ncfile}
41;
42;          }
43;
44; SEE ALSO
45; ========
46;
47; :func:`cor30a`
48;
49; EXAMPLES
50; ========
51;
52; ::
53;
54;  IDL> tropflux_19890101_20091231
55;
56; TODO
57; ====
58;
59; hard coded directory - usage of ${TROPFLUX_ID}
60;
61; coding rules
62;
63; EVOLUTIONS
64; ==========
65;
66; - fplod 20101214T112131Z aedon.locean-ipsl.upmc.fr (Darwin)
67;
68;   * add graph
69;
70; - fplod 20101214T093615Z aedon.locean-ipsl.upmc.fr (Darwin)
71;
72;   * minimal header
73;
74; - pbk 2008
75;
76;   * creation
77;
78;-
79;
80pro TropFlux_19890101_20091231
81@common
82
83da1=19880101 & da2=20101231
84file='/Volumes/Iomega_HDD/work/flux_reconstruction/gridded_data/mask_oaflux_30N30S.nc'
85initncdf, file
86msk=ncdf_lec(file,var='msk')
87
88dir='/Volumes/Iomega_HDD/TropFlux/input_cor/full_cor/'
89dir1='/Users/pkb/data/TropFlux/'
90
91file_sst=dir+'TropFlux_sst_19890101_20091231_v20.nc'
92file_wind=dir+'TropFlux_ws_19890101_20091231_v20.nc'
93file_sw=dir1+'TropFlux_swr_19890101_20091231_BLND_v50.nc'
94file_lw=dir+'TropFlux_lwr_19890101_20091231_v2.nc'
95file_air=dir1+'TropFlux_t2m_19890101_20091231_v50.nc'
96file_q=dir+'TropFlux_q2m_19890101_20091231_v20.nc'
97file_wg=dir1+'TropFlux_gustiness_19890101_20091231_v50.nc'
98
99initncdf, file_sst
100
101ws=read_ncdf('ws',da1,da2,file=file_wind,/nostr)
102wg=read_ncdf('wg',da1-1,da2,file=file_wg,/nostr)
103tt=time & jpt=n_elements(time)
104sst=read_ncdf('sst',da1,da2,file=file_sst,/nostr)
105sst=reform(sst-273.15)
106swd=read_ncdf('swr',da1,da2,file=file_sw,/nostr)
107lw=read_ncdf('lwr',da1,da2,file=file_lw,/nostr)
108swd=swd/0.94  ;; converting from net swr to downward swr
109
110t2m=read_ncdf('t2m',da1,da2,file=file_air,/nostr)-273.15   ; in C
111q2m=read_ncdf('q2m',da1,da2,file=file_q,/nostr)    ; in g/kg
112
113w=sqrt(ws*ws+wg*wg)  ;; wind corrected for gustiness
114w=ws
115tmask=msk
116help, ws,w,wg,u,sst,swd,t2m,q2m
117ocean=where(msk eq 1,compl=land)
118valmask=1.e20
119time=tt & jpt=n_elements(time)
120
121;
122;; Constants for flux computation
123;
124zu=10.                          ; height of wind speed measurement (m)
125us=0.                           ; surf current (m/s)
126zt=2.                           ; Height of air T measurement (m)
127zq=2.                           ; height of humidity measurement (m)
128P=1008.                         ; Pressure
129zi=600.                         ; Inversion height (m)
130jcool=0                         ; Compute cool-skin
131jwave=0                         ; No waves
132twave=5.
133hwave=1.
134
135caldat, time,mon,day,yea
136swr=fltarr(jpi,jpj,jpt)+1.e20
137lwr=fltarr(jpi,jpj,jpt)+1.e20
138lat=fltarr(jpi,jpj,jpt)+1.e20
139sen=fltarr(jpi,jpj,jpt)+1.e20
140lwnet_clrk=fltarr(jpi,jpj,jpt)+1.e20
141;Ch=fltarr(jpi,jpj,jpt)+1.e20
142;Ce=fltarr(jpi,jpj,jpt)+1.e20
143junk=fltarr(jpi,jpj,jpt)+1.e20
144
145for jt=0,jpt-1 do begin
146  jday=time(jt)-julday(1,1,yea(jt))
147  print, 'Computing Fluxes ',jt,' / ',jpt-1
148;
149;  P=msl(*,*,jt) & P=P(ocean)
150  wn=w(*,*,jt) & wn=wn(ocean)          ; wind speed (m/s)
151  ts=sst(*,*,jt) & ts=ts(ocean)        ; Bulk sst (°C)
152  t=t2m(*,*,jt) & t=t(ocean)           ; 2m Air T (°C)
153  qs=qsee(ts,P)                        ; Sea surface sat. spec. humidity (g/kg)
154  q=q2m(*,*,jt) & q=q(ocean)           ; 2m AIr specific humidity  (g/kg)
155  Rs=swd(*,*,jt) & Rs=Rs(ocean)        ; Downward solar flux (W/m2)
156  ylat=gphit(ocean)
157;  cld=calc_cloud(jday,Rs,ylat)
158  cld=calc_cloud_vlat(jday,Rs,ylat)
159;  Rl=lwdown_clark(ts,q,cld,t,P)        ; Downward IR flux (W/m2)
160  Rl=lw(*,*,jt) & Rl=Rl(ocean)
161  rain=0.
162  lw_clrk=-lwnet_clark(ts,q,cld,t,P)
163;  junk(*,*,jt)=lw_clrk
164;
165;stop
166  y=cor30a(wn,us,ts,t,Qs,Q,Rs,Rl,rain,zi,P,zu,zt,zq,ylat,jcool,jwave,twave,hwave)
167;
168
169; A few punctual missing values (coare does not converge): filled by spatial extrapolation
170  tab=fltarr(jpi,jpj)+!values.f_nan & x=reform(y(*,0)) & tab(ocean)=x & m=finite(tab) & tab=extrapolate(tab,m) & swr(*,*,jt)=tab*msk+valmask*(1-msk)
171  tab=fltarr(jpi,jpj)+!values.f_nan & x=reform(y(*,1)) & tab(ocean)=x & m=finite(tab) & tab=extrapolate(tab,m) & lwr(*,*,jt)=tab*msk+valmask*(1-msk)
172  tab=fltarr(jpi,jpj)+!values.f_nan & x=reform(y(*,2)) & tab(ocean)=x & m=finite(tab) & tab=extrapolate(tab,m) & lat(*,*,jt)=tab*msk+valmask*(1-msk)
173  tab=fltarr(jpi,jpj)+!values.f_nan & x=reform(y(*,3)) & tab(ocean)=x & m=finite(tab) & tab=extrapolate(tab,m) & sen(*,*,jt)=tab*msk+valmask*(1-msk)
174;  tab=fltarr(jpi,jpj)+!values.f_nan & x=reform(lw_clrk) & tab(ocean)=x & m=finite(tab) & tab=extrapolate(tab,m) & lwnet_clrk(*,*,jt)=tab*msk+valmask*(1-msk)
175;  tab=fltarr(jpi,jpj)+!values.f_nan & x=reform(y(*,6)) & tab(ocean)=x & m=finite(tab) & tab=extrapolate(tab,m) & Ch(*,*,jt)=tab*msk+valmask*(1-msk)
176;  tab=fltarr(jpi,jpj)+!values.f_nan & x=reform(y(*,7)) & tab(ocean)=x & m=finite(tab) & tab=extrapolate(tab,m) & Ce(*,*,jt)=tab*msk+valmask*(1-msk)
177endfor
178tt=time
179time=timegen(7670, start=julday(1,1,1989,0), units='days') & jpt=n_elements(time)
180;
181cda0=string(jul2date(time(0)),format='(i8.8)')
182cda1=string(jul2date(time(jpt-1)),format='(i8.8)')
183tt=time-julday(1,1,1950,00,00,00)
184xlon=reform(glamt(*,0) ) & ylat=reform(gphit(0,*))
185
186ncfile='!/Users/pkb/data/TropFlux/TropFlux_19890101_20091231_v51.nc'
187lon_attr={units:'degrees_east',long_name:'Longitude'}
188lat_attr={units:'degrees_north',long_name:'Latitude'}
189swr_attr={units:'W/m2',missing_value:valmask,long_name:'Surface net shortwave radiation',short_name:'swr',axis:'TYX'}
190lwr_attr={units:'W/m2',missing_value:valmask,long_name:'Surface net longwave radiation',short_name:'lwr',axis:'TYX'}
191lwr_clrk_attr={units:'W/m2',missing_value:valmask,long_name:'Surface net longwave radiation from clark',short_name:'lwr',axis:'TYX'}
192lhf_attr={units:'W/m2',missing_value:valmask,long_name:'Surface latent flux',short_name:'lhf',axis:'TYX'}
193shf_attr={units:'W/m2',missing_value:valmask,long_name:'Surface sensible flux',short_name:'shf',axis:'TYX'}
194time_attr={units:'days since 1950-01-01 00:00:00',long_name:'Time axis',time_origin:' 1950-JAN-01 00:00:00'}
195Ch_attr={units:'',missing_value:valmask,long_name:'heat transfer coefficient at zt',short_name:'Ch',axis:'TYX'}
196Ce_attr={units:'',missing_value:valmask,long_name:'moisture transfer coefficient at zq',short_name:'Ce',axis:'TYX'}
197
198globattr={source:'Fluxes for the Global Tropical Ocean - TropFlux',timerange:cda0+' - '+cda1}
199
200help, swr,lwr,lat,sen,tt,xlon,ylat
201
202ncfields = 'swr[longitude,latitude,time]=swr:swr_attr; ' $
203;          +'lwr_coare[longitude,latitude,time]=lwr:lwr_attr; ' $
204          +'lwr[longitude,latitude,time]=lwnet_clrk:lwr_clrk_attr; ' $
205          +'lhf[longitude,latitude,time]=lat:lhf_attr; ' $
206          +'shf[longitude,latitude,time]=sen:shf_attr; ' $
207;          +'Ch[longitude,latitude,time]=Ch:Ch_attr; ' $
208;          +'Ce[longitude,latitude,time]=Ce:Ce_attr; ' $
209                      + 'longitude[]=xlon:lon_attr; ' $
210                      + 'latitude[]=ylat:lat_attr; ' $
211                      + 'tt[*time]=tt:time_attr ' $
212                      + ' @ globattr'
213
214@ncdf_quickwrite
215
216return
217end
Note: See TracBrowser for help on using the repository browser.