1 ; ***********************************************
3 ; ***********************************************
4 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
5 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
6 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
7 load "/fis/cgd/cseg/people/jeff/clamp/co2/metrics_table.ncl"
8 ;************************************************
10 ;************************************************
11 ; read in data: observed
12 ;************************************************
13 diri = "/fis/cgd/cseg/people/jeff/clamp_data/co2/"
14 fili = "co2_globalView_98.nc"
15 g = addfile (diri+fili,"r")
19 sta = chartostring(g->STATION)
27 ;**************************************************************
28 ; get only the lowest level at each station
29 ;**************************************************************
31 lat_tmp@_FillValue = 1.e+36
34 if (.not. ismissing(lat_tmp(n))) then
35 indexes = ind(lat(n) .eq. lat .and. lon(n) .eq. lon)
36 if (dimsizes(indexes) .gt. 1) then
37 lat_tmp(indexes(1:)) = lat_tmp@_FillValue
43 indexes = ind(.not. ismissing(lat_tmp))
44 ;print (dimsizes(indexes))
49 val_ob = val(indexes,:)
50 ;printVarSummary (val_ob)
51 ;print (lat_ob +"/"+lon_ob)
53 ;************************************************
55 ;************************************************
56 diri2 = "/fis/cgd/cseg/people/jeff/clamp_data/model/"
57 ; fili2 = "b30.061m_401_425_MONS_climo_atm.nc"
58 fili2 = "b30.061n_1995-2004_MONS_climo_atm.nc"
60 g = addfile(diri2+fili2,"r")
69 ; get the co2 at the lowest level
72 ; change to unit of observed (u mol/mol)
73 ; Model_units [=] kgCO2 / kgDryAir
74 ; 28.966 = molecular weight of dry air
75 ; 44. = molecular weight of CO2
78 factor = (28.966/44.) * 1e6
83 ; y = where(y0 .lt. 287.,y@_FillValue,y)
85 ; print (min(y)+"/"+max(y))
87 ; interpolate into observed station
88 ; note: model is 0-360E, 90S-90N
90 ; to be able to handle observation at (-89.98,-24.80)
94 i = ind(lon_ob .lt. 0.)
95 lon_ob(i) = lon_ob(i) + 360.
97 yo = linint2_points_Wrap(xi,yi,y,True,lon_ob,lat_ob,0)
99 val_model = yo(pts|:,time|:)
100 ; printVarSummary (val_model)
101 ; print (min(val_model)+"/"+max(val_model))
104 val_model = val_model - conform(val_model,dim_avg(val_model),0)
105 ; print (min(val_model)+"/"+max(val_model))
110 case_zone = (/"Stations","Amplitude Ratio", \
111 "Correlation Coef","M score","Combined Score"/)
112 nCase_zone = dimsizes(case_zone )
115 var_zone = (/"60N-90N","30N-60N","EQ-30N","90S-EQ","Total"/)
116 nVar_zone = dimsizes(var_zone)
118 ; arrays to be passed to diagram.
119 case_value_zone = new ((/nCase_zone, nVar_zone/),float )
124 ; maximum score for the zone, 60N-90N
127 ; index of stations in this zone
128 ind_z = ind(lat_ob .ge. 60.)
130 ; print (lat_ob(ind_z)+"/"+lon_ob(ind_z))
131 ; print (val_ob(ind_z,:))
132 ; print (val_model(ind_z,:))
136 ; maximum score for the zone, 30N-60N
139 ; index of stations in this zone
140 ind_z = ind(lat_ob .ge. 30. .and. lat_ob .lt. 60.)
142 ; print (lat_ob(ind_z)+"/"+lon_ob(ind_z))
143 ; print (val_ob(ind_z,:))
144 ; print (val_model(ind_z,:))
148 ; maximum score for the zone, EQ-30N
151 ; index of stations in this zone
152 ind_z = ind(lat_ob .ge. 0. .and. lat_ob .lt. 30.)
154 ; print (lat_ob(ind_z)+"/"+lon_ob(ind_z))
155 ; print (val_ob(ind_z,:))
156 ; print (val_model(ind_z,:))
160 ; maximum score for the zone, 90S-EQ
163 ; index of stations in this zone
164 ind_z = ind(lat_ob .lt. 0. )
166 ; print (lat_ob(ind_z)+"/"+lon_ob(ind_z))
167 ; print (val_ob(ind_z,:))
168 ; print (val_model(ind_z,:))
171 npts = dimsizes(ind_z)
174 amp_ob = new((/npts/),float)
175 amp_model = new((/npts/),float)
177 amp_ratio_sta = new((/npts/),float)
178 ccr_sta = new((/npts/),float)
179 M_sta = new((/npts/),float)
180 score_sta = new((/npts/),float)
183 amp_ob(n) = max(val_ob(ind_z(n),:)) - min(val_ob(ind_z(n),:))
184 amp_model(n) = max(val_model(ind_z(n),:)) - min(val_model(ind_z(n),:))
186 amp_ratio_sta(n) = amp_model(n)/amp_ob(n)
187 ccr_sta(n) = esccr(val_ob(ind_z(n),:),val_model(ind_z(n),:),0)
188 M_sta(n) = 1.-abs(amp_ratio_sta(n)-1.)
189 score_sta(n) = (ccr_sta(n)*ccr_sta(n) + M_sta(n))*0.5 * score_max
191 print (sta(ind_z(n))+"/"+lat(ind_z(n))+"/"+lon(ind_z(n))+"/"+amp_ratio_sta(n)+"/"+ccr_sta(n)+"/"+M_sta(n)+"/"+score_sta(n))
194 amp_ratio_zone = avg(amp_ratio_sta)
195 ccr_zone = avg(ccr_sta)
196 M_zone = 1.- (sum(abs(amp_model-amp_ob)/(amp_model+amp_ob))/npts)
197 score_zone = (ccr_zone*ccr_zone + M_zone)*0.5 * score_max
199 print (npts+"/"+amp_ratio_zone+"/"+ccr_zone+"/"+M_zone+"/"+score_zone)
201 case_value_zone(0,z) = npts
202 case_value_zone(1,z) = (/amp_ratio_zone/)
203 case_value_zone(2,z) = (/ccr_zone/)
204 case_value_zone(3,z) = (/M_zone/)
205 case_value_zone(4,z) = (/score_zone/)
206 ;**************************************************
208 ;**************************************************
209 ; column for station table
210 case_sta = (/"Latitude","Longitude","Amplitude Ratio", \
211 "Correlation Coef","M score","Combined Score"/)
212 nCase_sta = dimsizes(case_sta )
214 ; row for station table
216 nVar_sta = dimsizes(var_sta)
218 ; arrays to be passed to diagram.
219 case_value_sta = new ((/nCase_sta, nVar_sta/),float )
221 case_value_sta(0,:) = (/lat(ind_z)/)
222 case_value_sta(1,:) = (/lon(ind_z)/)
223 case_value_sta(2,:) = (/amp_ratio_sta/)
224 case_value_sta(3,:) = (/ccr_sta/)
225 case_value_sta(4,:) = (/M_sta/)
226 case_value_sta(5,:) = (/score_sta/)
228 ;**************************************************
230 ;**************************************************
232 tt_opt@pltType= "png" ; "eps" [default], "pdf", "ps"
233 ; "png", "gif" [if you have ImageMajik 'convert']
235 tt_opt@tableTitle = "Zone "+ zone
236 plot_name = "table_sta." + zone
238 metrics_table(plot_name, var_sta, case_sta , case_value_sta, tt_opt)
243 delete (amp_ratio_sta)
248 delete (case_value_sta)
250 ;**************************************************
252 ;**************************************************
253 case_value_zone(0,4) = case_value_zone(0,0)+case_value_zone(0,1)+case_value_zone(0,2)+case_value_zone(0,3)
254 case_value_zone(1,4) = 0.
255 case_value_zone(2,4) = 0.
256 case_value_zone(3,4) = 0.
257 case_value_zone(4,4) = case_value_zone(4,0)+case_value_zone(4,1)+case_value_zone(4,2)+case_value_zone(4,3)
260 tt_opt@pltType= "png" ; "eps" [default], "pdf", "ps"
261 ; "png", "gif" [if you have ImageMajik 'convert']
263 tt_opt@tableTitle = "Zone"
264 plot_name = "table_zone"
266 metrics_table(plot_name, var_zone, case_zone , case_value_zone, tt_opt)