[Dart-dev] [3241] DART/trunk/diagnostics/threed_sphere/obs_diag.f90:
Added definitions of bias,rmse,spread of horizontal winds to netCDF file,
thoar at subversion.ucar.edu
thoar at subversion.ucar.edu
Thu Feb 21 15:18:04 MST 2008
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/dart-dev/attachments/20080221/aae668d9/attachment-0001.html
-------------- next part --------------
Modified: DART/trunk/diagnostics/threed_sphere/obs_diag.f90
===================================================================
--- DART/trunk/diagnostics/threed_sphere/obs_diag.f90 2008-02-15 18:21:54 UTC (rev 3240)
+++ DART/trunk/diagnostics/threed_sphere/obs_diag.f90 2008-02-21 22:18:04 UTC (rev 3241)
@@ -56,9 +56,9 @@
! version controlled file description for error handling, do not edit
character(len=128), parameter :: &
- source = "$URL$", &
- revision = "$Revision$", &
- revdate = "$Date$"
+ source = '$URL$', &
+ revision = '$Revision$', &
+ revdate = '$Date$'
!---------------------------------------------------------------------
!---------------------------------------------------------------------
@@ -150,7 +150,7 @@
! Namelist with (some scalar) default values
!-----------------------------------------------------------------------
-character(len = 129) :: obs_sequence_name = "obs_seq.final"
+character(len = 129) :: obs_sequence_name = 'obs_seq.final'
integer, dimension(6) :: first_bin_center = (/ 2003, 1, 1, 0, 0, 0 /)
integer, dimension(6) :: last_bin_center = (/ 2003, 1, 2, 0, 0, 0 /)
integer, dimension(6) :: bin_separation = (/ 0, 0, 0, 6, 0, 0 /)
@@ -281,9 +281,9 @@
call static_init_obs_sequence() ! Initialize the obs sequence module
!----------------------------------------------------------------------
-! Define/Append the 'wind velocity' obs_kinds to supplant the list declared
+! Define/Append the 'horizontal wind' obs_kinds to supplant the list declared
! in obs_kind_mod.f90 i.e. if there is a RADIOSONDE_U_WIND_COMPONENT
-! and a RADIOSONDE_V_WIND_COMPONENT, there must be a RADIOSONDE_WIND_VELOCITY
+! and a RADIOSONDE_V_WIND_COMPONENT, there must be a RADIOSONDE_HORIZONTAL_WIND
! Replace calls to 'get_obs_kind_name' with variable 'my_obs_kind_names'
!----------------------------------------------------------------------
@@ -296,9 +296,9 @@
! Read the namelist
!----------------------------------------------------------------------
-call find_namelist_in_file("input.nml", "obs_diag_nml", iunit)
+call find_namelist_in_file('input.nml', 'obs_diag_nml', iunit)
read(iunit, nml = obs_diag_nml, iostat = io)
-call check_namelist_read(iunit, io, "obs_diag_nml")
+call check_namelist_read(iunit, io, 'obs_diag_nml')
! Record the namelist values used for the run ...
call error_handler(E_MSG,'obs_diag','obs_diag_nml values are',' ',' ',' ')
@@ -394,7 +394,7 @@
guess%NbadUV = 0
guess%NbadLV = 0
-guess%string = "guess"
+guess%string = 'guess'
guess%num_times = Nepochs
guess%num_levels = Nlevels
guess%num_regions = Nregions
@@ -411,7 +411,7 @@
analy%NbadUV = 0
analy%NbadLV = 0
-analy%string = "analy"
+analy%string = 'analy'
analy%num_times = Nepochs
analy%num_levels = Nlevels
analy%num_regions = Nregions
@@ -449,7 +449,7 @@
guessAVG%NbadUV = 0
guessAVG%NbadLV = 0
-guessAVG%string = "VPguess"
+guessAVG%string = 'VPguess'
guessAVG%num_levels = Nlevels
guessAVG%num_regions = Nregions
guessAVG%num_variables = num_obs_kinds
@@ -465,7 +465,7 @@
analyAVG%NbadUV = 0
analyAVG%NbadLV = 0
-analyAVG%string = "VPanaly"
+analyAVG%string = 'VPanaly'
analyAVG%num_levels = Nlevels
analyAVG%num_regions = Nregions
analyAVG%num_variables = num_obs_kinds
@@ -961,7 +961,7 @@
obs(1), obs_err_var, pr_mean, pr_sprd, po_mean, po_sprd)
!-----------------------------------------------------------
- ! Additional work for wind speed (given U,V)
+ ! Additional work for horizontal wind (given U,V)
!-----------------------------------------------------------
ObsIsWindCheck: if ( get_obs_kind_var_type(flavor) == KIND_V_WIND_COMPONENT ) then
@@ -981,7 +981,7 @@
call IPE(analy%NbadUV(iepoch,level_index,iregion,wflavor), 1)
else
- ! The next big assumption is that the 'wind speed' flavors
+ ! The next big assumption is that the 'horizontal wind' flavors
! need to have their which_vert explicitly set so the netcdf
! files know what sort of vertical coordinate to use. The only
! way I know of is to use the observation of that type to tell us.
@@ -1039,7 +1039,7 @@
call Bin3D(qc_integer, level_index, iregion, flavor, &
obs(1), obs_err_var, pr_mean, pr_sprd, po_mean, po_sprd )
- ! Handle wind speed given U,V components
+ ! Handle horizontal wind given U,V components
if ( get_obs_kind_var_type(flavor) == KIND_V_WIND_COMPONENT ) then
@@ -2071,7 +2071,7 @@
! This routine ensures that the U,V components of wind
! are from the same observation location so we can convert
- ! them to wind speed. I suppose I _could_ also check the time,
+ ! them to a horizontal wind. I suppose I _could_ also check the time,
! but a mismatch there is supremely unlikely.
integer, intent(in) :: flavor1, flavor2
@@ -2111,8 +2111,8 @@
! must be matching wind components ...
! must figure out what the obs_kind_name should be ...
- ! There are only two viable wind component strings:
- ! '_?_WIND_COMPONENT' and '_?_10_METER_WIND_SPEED'
+ ! There are only two viable wind component strings (see obs_def_mod.f90):
+ ! '_?_WIND_COMPONENT' and '_?_10_METER_WIND'
str1 = get_obs_kind_name(flavor1)
str2 = get_obs_kind_name(flavor2)
@@ -2125,9 +2125,9 @@
endif
if (indx1 > 0) then ! must be _?_WIND_COMPONENT
- str3 = str1(1:indx1)//'_WIND_VELOCITY'
- else ! must be _?_10_METER_WIND_SPEED
- str3 = str1(1:indx2)//'_WIND_VELOCITY'
+ str3 = str1(1:indx1)//'_HORIZONTAL_WIND'
+ else ! must be _?_10_METER_WIND
+ str3 = str1(1:indx2)//'_HORIZONTAL_WIND'
indx1 = indx2
endif
@@ -2158,8 +2158,8 @@
! This function simply accumulates the appropriate sums.
! The normalization occurrs after all the data has been read, naturally.
!
- ! Wind measurements are bivariate - so we are collapsing them to
- ! scalar speed. The optional arguments specify the U components
+ ! Wind measurements are vector quantities - so we are collapsing them to
+ ! scalar speed for the bias. The optional arguments specify the U components
! while the mandatory arguments specify the V components.
! Its an 'all-or-nothing' optional argument situation.
!----------------------------------------------------------------------
@@ -2176,6 +2176,7 @@
real(r8), intent(in) :: obsval, obserrvar, prmean, prsprd, pomean, posprd
real(r8), intent(in), optional :: uobs, uobserrvar, uprmean, uprsprd, upomean, uposprd
+ real(r8) :: obsspeed
real(r8) :: priorsqerr ! PRIOR Squared Error
real(r8) :: priorbias ! PRIOR simple bias
real(r8) :: priorspred ! PRIOR (spread,variance)
@@ -2190,11 +2191,14 @@
present(uprsprd), present(upomean), present(uposprd) /)
if ( all(optionals) ) then
-
priorsqerr = (prmean - obsval)**2 + (uprmean - uobs)**2
postsqerr = (pomean - obsval)**2 + (upomean - uobs)**2
- priorbias = (prmean - obsval) + (uprmean - uobs)
- postbias = (pomean - obsval) + (upomean - uobs)
+
+ ! This calculation is the bias in the wind speed (F-O)
+ obsspeed = sqrt(uobs**2 + obsval**2)
+ priorbias = sqrt(prmean**2 + uprmean**2) - obsspeed
+ postbias = sqrt(pomean**2 + upomean**2) - obsspeed
+
priorspred = prsprd**2 + uprsprd**2
postspred = posprd**2 + uposprd**2
priorspredplus = prsprd**2 + obserrvar + uprsprd**2 + uobserrvar
@@ -2277,7 +2281,7 @@
real(r8), intent(in) :: obsval, obserrvar, prmean, prsprd, pomean, posprd
real(r8), intent(in), optional :: uobs, uobserrvar, uprmean, uprsprd, upomean, uposprd
- real(r8) :: obsspeed ! PRIOR Squared Error
+ real(r8) :: obsspeed
real(r8) :: priorsqerr ! PRIOR Squared Error
real(r8) :: priorbias ! PRIOR simple bias
real(r8) :: priorspred ! PRIOR (spread,variance)
@@ -2295,14 +2299,10 @@
priorsqerr = (prmean - obsval)**2 + (uprmean - uobs)**2
postsqerr = (pomean - obsval)**2 + (upomean - uobs)**2
- ! This calculation is the bias in the wind vector
- priorbias = (prmean - obsval) + (uprmean - uobs)
- postbias = (pomean - obsval) + (upomean - uobs)
-
- ! This calculation is the bias in the wind speed
+ ! This calculation is the bias in the wind speed (F-O)
obsspeed = sqrt(uobs**2 + obsval**2)
- priorbias = obsspeed - sqrt(prmean**2 + uprmean**2)
- postbias = obsspeed - sqrt(pomean**2 + upomean**2)
+ priorbias = sqrt(prmean**2 + uprmean**2) - obsspeed
+ postbias = sqrt(pomean**2 + upomean**2) - obsspeed
priorspred = prsprd**2 + uprsprd**2
postspred = posprd**2 + uposprd**2
@@ -2424,45 +2424,63 @@
call DATE_AND_TIME(crdate,crtime,crzone,values)
write(msgstring,'(''YYYY MM DD HH MM SS = '',i4,5(1x,i2.2))') &
values(1), values(2), values(3), values(5), values(6), values(7)
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "creation_date", trim(msgstring) ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'creation_date', trim(msgstring) ), &
'WriteNetCDF', 'put_att creation_date '//trim(fname))
-! call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "title", global_meta_data), &
+! call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'title', global_meta_data), &
! 'WriteNetCDF', 'put_att title '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "obs_diag_source", source ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'obs_diag_source', source ), &
'WriteNetCDF', 'put_att obs_diag_source '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "obs_diag_revision", revision ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'obs_diag_revision', revision ), &
'WriteNetCDF', 'put_att obs_diag_revision '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "obs_diag_revdate", revdate ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'obs_diag_revdate', revdate ), &
'WriteNetCDF', 'put_att obs_diag_revdate '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "bias_convention", "forecast - observation" ), &
- 'WriteNetCDF', 'put_att bias '//trim(fname))
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'bias_convention', &
+ 'forecast - observation' ), 'WriteNetCDF', 'put_att bias '//trim(fname))
+
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'horizontal_wind', &
+ 'vector wind derived from U,V components' ), &
+ 'WriteNetCDF', 'put_att wind '//trim(fname))
+
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'horizontal_wind_bias', &
+ 'definition : sum[sqrt(u**2 + v**2) - obsspeed]/nobs' ), &
+ 'WriteNetCDF', 'put_att wind bias '//trim(fname))
+
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'horizontal_wind_rmse', &
+ 'definition : sqrt(sum[(u-uobs)**2 + (v-vobs)**2]/nobs)' ), &
+ 'WriteNetCDF', 'put_att wind rmse '//trim(fname))
+
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'horizontal_wind_spread', &
+ 'definition : sqrt(sum[var(u) + var(v)]/nobs)' ), &
+ 'WriteNetCDF', 'put_att wind spread '//trim(fname))
+
+
! write all namelist quantities
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "first_bin_center", first_bin_center ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'first_bin_center', first_bin_center ), &
'WriteNetCDF', 'put_att first_bin_center '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "last_bin_center", last_bin_center ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'last_bin_center', last_bin_center ), &
'WriteNetCDF', 'put_att last_bin_center '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "bin_separation", bin_separation ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'bin_separation', bin_separation ), &
'WriteNetCDF', 'put_att bin_separation '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "bin_width", bin_width ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'bin_width', bin_width ), &
'WriteNetCDF', 'put_att bin_width '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "time_to_skip", time_to_skip ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'time_to_skip', time_to_skip ), &
'WriteNetCDF', 'put_att time_to_skip '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "max_num_bins", max_num_bins ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'max_num_bins', max_num_bins ), &
'WriteNetCDF', 'put_att max_num_bins '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "rat_cri", rat_cri ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'rat_cri', rat_cri ), &
'WriteNetCDF', 'put_att rat_cri '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "input_qc_threshold", input_qc_threshold ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'input_qc_threshold', input_qc_threshold ), &
'WriteNetCDF', 'put_att input_qc_threshold '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "lonlim1", lonlim1(1:Nregions) ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'lonlim1', lonlim1(1:Nregions) ), &
'WriteNetCDF', 'put_att lonlim1 '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "lonlim2", lonlim2(1:Nregions) ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'lonlim2', lonlim2(1:Nregions) ), &
'WriteNetCDF', 'put_att lonlim2 '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "latlim1", latlim1(1:Nregions) ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'latlim1', latlim1(1:Nregions) ), &
'WriteNetCDF', 'put_att latlim1 '//trim(fname))
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "latlim2", latlim2(1:Nregions) ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'latlim2', latlim2(1:Nregions) ), &
'WriteNetCDF', 'put_att latlim2 '//trim(fname))
! write all observation sequence files used
@@ -2479,11 +2497,11 @@
enddo FILEloop
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "NumIdentityObs", Nidentity ), &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'NumIdentityObs', Nidentity ), &
'WriteNetCDF', 'put_att identity '//trim(fname))
! write all 'known' observation types
- call nc_check(nf90_put_att(ncid, NF90_GLOBAL, "comment", &
+ call nc_check(nf90_put_att(ncid, NF90_GLOBAL, 'comment', &
'All known observation types follow. &
&Also see ObservationTypes variable.' ), &
'WriteNetCDF', 'put_att latlim2 '//trim(fname))
@@ -2498,199 +2516,199 @@
!----------------------------------------------------------------------------
call nc_check(nf90_def_dim(ncid=ncid, &
- name="copy", len = Ncopies, dimid = CopyDimID), &
+ name='copy', len = Ncopies, dimid = CopyDimID), &
'WriteNetCDF', 'copy:def_dim '//trim(fname))
call nc_check(nf90_def_dim(ncid=ncid, &
- name="obstypes", len = max_obs_kinds, dimid = TypesDimID), &
+ name='obstypes', len = max_obs_kinds, dimid = TypesDimID), &
'WriteNetCDF', 'types:def_dim '//trim(fname))
call nc_check(nf90_def_dim(ncid=ncid, &
- name="region", len = Nregions, dimid = RegionDimID), &
+ name='region', len = Nregions, dimid = RegionDimID), &
'WriteNetCDF', 'region:def_dim '//trim(fname))
call nc_check(nf90_def_dim(ncid=ncid, &
- name="surface", len = 1, dimid = SlevelDimID), &
+ name='surface', len = 1, dimid = SlevelDimID), &
'WriteNetCDF', 'slevel:def_dim '//trim(fname))
call nc_check(nf90_def_dim(ncid=ncid, &
- name="mlevel", len = Nmlevels, dimid = MlevelDimID), &
+ name='mlevel', len = Nmlevels, dimid = MlevelDimID), &
'WriteNetCDF', 'mlevel:def_dim '//trim(fname))
call nc_check(nf90_def_dim(ncid=ncid, &
- name="plevel", len = Nplevels, dimid = PlevelDimID), &
+ name='plevel', len = Nplevels, dimid = PlevelDimID), &
'WriteNetCDF', 'plevel:def_dim '//trim(fname))
call nc_check(nf90_def_dim(ncid=ncid, &
- name="plevel_edges", len = Nplevels+1, dimid = PlevIntDimID), &
+ name='plevel_edges', len = Nplevels+1, dimid = PlevIntDimID), &
'WriteNetCDF', 'plevel_edges:def_dim '//trim(fname))
call nc_check(nf90_def_dim(ncid=ncid, &
- name="hlevel", len = Nhlevels, dimid = HlevelDimID), &
+ name='hlevel', len = Nhlevels, dimid = HlevelDimID), &
'WriteNetCDF', 'hlevel:def_dim '//trim(fname))
call nc_check(nf90_def_dim(ncid=ncid, &
- name="hlevel_edges", len = Nhlevels+1, dimid = HlevIntDimID), &
+ name='hlevel_edges', len = Nhlevels+1, dimid = HlevIntDimID), &
'WriteNetCDF', 'hlevel_edges:def_dim '//trim(fname))
call nc_check(nf90_def_dim(ncid=ncid, &
- name="time", len = NF90_UNLIMITED, dimid = TimeDimID), &
+ name='time', len = NF90_UNLIMITED, dimid = TimeDimID), &
'WriteNetCDF', 'time:def_dim '//trim(fname))
call nc_check(nf90_def_dim(ncid=ncid, &
- name="bounds", len = 2, dimid = BoundsDimID), &
+ name='bounds', len = 2, dimid = BoundsDimID), &
'WriteNetCDF', 'bounds:def_dim '//trim(fname))
call nc_check(nf90_def_dim(ncid=ncid, &
- name="stringlength", len = stringlength, dimid = StringDimID), &
+ name='stringlength', len = stringlength, dimid = StringDimID), &
'WriteNetCDF', 'stringlength:def_dim '//trim(fname))
! Define the types of derived quantities - aka - 'copies'
- call nc_check(nf90_def_var(ncid=ncid, name="copy", xtype=nf90_int, &
+ call nc_check(nf90_def_var(ncid=ncid, name='copy', xtype=nf90_int, &
dimids=CopyDimID, varid=CopyVarID), &
'WriteNetCDF', 'copy:def_var')
- call nc_check(nf90_put_att(ncid, CopyVarID, "explanation", 'see CopyMetaData'), &
+ call nc_check(nf90_put_att(ncid, CopyVarID, 'explanation', 'see CopyMetaData'), &
'WriteNetCDF', 'copy:explanation')
! Define the observation types - needed to be a coordinate variable
- call nc_check(nf90_def_var(ncid=ncid, name="obstypes", xtype=nf90_int, &
+ call nc_check(nf90_def_var(ncid=ncid, name='obstypes', xtype=nf90_int, &
dimids=TypesDimID, varid=TypesVarID), &
'WriteNetCDF', 'types:def_var')
- call nc_check(nf90_put_att(ncid, TypesVarID, "explanation", 'see ObservationTypes'), &
+ call nc_check(nf90_put_att(ncid, TypesVarID, 'explanation', 'see ObservationTypes'), &
'WriteNetCDF', 'types:explanation')
! Define the regions coordinate variable and attributes
- call nc_check(nf90_def_var(ncid=ncid, name="region", xtype=nf90_int, &
+ call nc_check(nf90_def_var(ncid=ncid, name='region', xtype=nf90_int, &
dimids=RegionDimID, varid=RegionVarID), 'WriteNetCDF', 'region:def_var')
- call nc_check(nf90_put_att(ncid, RegionVarID, "long_name", "model region"), &
+ call nc_check(nf90_put_att(ncid, RegionVarID, 'long_name', 'model region'), &
'WriteNetCDF', 'region:long_name')
- call nc_check(nf90_put_att(ncid, RegionVarID, "units", "nondimensional"), &
+ call nc_check(nf90_put_att(ncid, RegionVarID, 'units', 'nondimensional'), &
'WriteNetCDF', 'region:units')
- call nc_check(nf90_put_att(ncid, RegionVarID, "valid_range", (/1,Nregions/)), &
+ call nc_check(nf90_put_att(ncid, RegionVarID, 'valid_range', (/1,Nregions/)), &
'WriteNetCDF', 'region:valid_range')
! Define the model level coordinate variable and attributes
- call nc_check(nf90_def_var(ncid=ncid, name="mlevel", xtype=nf90_int, &
+ call nc_check(nf90_def_var(ncid=ncid, name='mlevel', xtype=nf90_int, &
dimids=MlevelDimID, varid=MlevelVarID), 'WriteNetCDF', 'mlevel:def_var')
- call nc_check(nf90_put_att(ncid, MlevelVarID, "long_name", "model level"), &
+ call nc_check(nf90_put_att(ncid, MlevelVarID, 'long_name', 'model level'), &
'WriteNetCDF', 'mlevel:long_name')
- call nc_check(nf90_put_att(ncid, MlevelVarID, "units", "nondimensional"), &
+ call nc_check(nf90_put_att(ncid, MlevelVarID, 'units', 'nondimensional'), &
'WriteNetCDF', 'mlevel:units')
- call nc_check(nf90_put_att(ncid, MlevelVarID, "valid_range", (/1,Nmlevels/)), &
+ call nc_check(nf90_put_att(ncid, MlevelVarID, 'valid_range', (/1,Nmlevels/)), &
'WriteNetCDF', 'mlevel:valid_range')
! Define the pressure level coordinate variable and attributes
- call nc_check(nf90_def_var(ncid=ncid, name="plevel", xtype=nf90_real, &
+ call nc_check(nf90_def_var(ncid=ncid, name='plevel', xtype=nf90_real, &
dimids=PlevelDimID, varid=PlevelVarID), 'WriteNetCDF', 'plevel:def_var')
- call nc_check(nf90_put_att(ncid, PlevelVarID, "long_name", "pressure bin midpoints"), &
+ call nc_check(nf90_put_att(ncid, PlevelVarID, 'long_name', 'pressure bin midpoints'), &
'WriteNetCDF', 'plevel:long_name')
- call nc_check(nf90_put_att(ncid, PlevelVarID, "units", "hPa"), &
+ call nc_check(nf90_put_att(ncid, PlevelVarID, 'units', 'hPa'), &
'WriteNetCDF', 'plevel:units')
- call nc_check(nf90_put_att(ncid, PlevelVarID, "valid_range", &
+ call nc_check(nf90_put_att(ncid, PlevelVarID, 'valid_range', &
(/ minval(plevel(1:Nplevels)), maxval(plevel(1:Nplevels)) /)), &
'WriteNetCDF', 'plevel:valid_range')
! Define the pressure level interface coordinate variable and attributes
- call nc_check(nf90_def_var(ncid=ncid, name="plevel_edges", xtype=nf90_real, &
+ call nc_check(nf90_def_var(ncid=ncid, name='plevel_edges', xtype=nf90_real, &
dimids=PlevIntDimID, varid=PlevIntVarID), 'WriteNetCDF', 'plevel_edges:def_var')
- call nc_check(nf90_put_att(ncid, PlevIntVarID, "long_name", "pressure bin edges"), &
+ call nc_check(nf90_put_att(ncid, PlevIntVarID, 'long_name', 'pressure bin edges'), &
'WriteNetCDF', 'plevel_edges:long_name')
- call nc_check(nf90_put_att(ncid, PlevIntVarID, "units", "hPa"), &
+ call nc_check(nf90_put_att(ncid, PlevIntVarID, 'units', 'hPa'), &
'WriteNetCDF', 'plevel_edges:units')
- call nc_check(nf90_put_att(ncid, PlevIntVarID, "valid_range", &
+ call nc_check(nf90_put_att(ncid, PlevIntVarID, 'valid_range', &
(/ minval(plevel_edges(1:Nplevels+1)), maxval(plevel_edges(1:Nplevels+1)) /)), &
'WriteNetCDF', 'plevel_edges:valid_range')
! Define the height level coordinate variable and attributes
- call nc_check(nf90_def_var(ncid=ncid, name="hlevel", xtype=nf90_real, &
+ call nc_check(nf90_def_var(ncid=ncid, name='hlevel', xtype=nf90_real, &
dimids=HlevelDimID, varid=HlevelVarID), 'WriteNetCDF', 'hlevel:def_var')
- call nc_check(nf90_put_att(ncid, HlevelVarID, "long_name", "height bin midpoints"), &
+ call nc_check(nf90_put_att(ncid, HlevelVarID, 'long_name', 'height bin midpoints'), &
'WriteNetCDF', 'hlevel:long_name')
- call nc_check(nf90_put_att(ncid, HlevelVarID, "units", "m"), &
+ call nc_check(nf90_put_att(ncid, HlevelVarID, 'units', 'm'), &
'WriteNetCDF', 'hlevel:units')
- call nc_check(nf90_put_att(ncid, HlevelVarID, "valid_range", &
+ call nc_check(nf90_put_att(ncid, HlevelVarID, 'valid_range', &
(/ minval(hlevel(1:Nhlevels)), maxval(hlevel(1:Nhlevels)) /)), &
'WriteNetCDF', 'hlevel:valid_range')
! Define the height level interface coordinate variable and attributes
- call nc_check(nf90_def_var(ncid=ncid, name="hlevel_edges", xtype=nf90_real, &
+ call nc_check(nf90_def_var(ncid=ncid, name='hlevel_edges', xtype=nf90_real, &
dimids=HlevIntDimID, varid=HlevIntVarID), 'WriteNetCDF', 'hlevel_edges:def_var')
- call nc_check(nf90_put_att(ncid, HlevIntVarID, "long_name", "height bin edges"), &
+ call nc_check(nf90_put_att(ncid, HlevIntVarID, 'long_name', 'height bin edges'), &
'WriteNetCDF', 'hlevel_edges:long_name')
- call nc_check(nf90_put_att(ncid, HlevIntVarID, "units", "m"), &
+ call nc_check(nf90_put_att(ncid, HlevIntVarID, 'units', 'm'), &
'WriteNetCDF', 'hlevel_edges:units')
- call nc_check(nf90_put_att(ncid, HlevIntVarID, "valid_range", &
+ call nc_check(nf90_put_att(ncid, HlevIntVarID, 'valid_range', &
(/ minval(hlevel_edges(1:Nhlevels+1)), maxval(hlevel_edges(1:Nhlevels+1)) /)), &
'WriteNetCDF', 'hlevel_edges:valid_range')
- ! Define "bounds" dimension
+ ! Define 'bounds' dimension
- call nc_check(nf90_def_var(ncid=ncid, name="bounds", xtype=nf90_int, &
+ call nc_check(nf90_def_var(ncid=ncid, name='bounds', xtype=nf90_int, &
dimids=BoundsDimID, varid=BoundsVarID), 'WriteNetCDF', 'bounds:def_var')
- call nc_check(nf90_put_att(ncid, BoundsVarID, "valid_range", (/1,2/)), &
+ call nc_check(nf90_put_att(ncid, BoundsVarID, 'valid_range', (/1,2/)), &
'WriteNetCDF', 'bounds:valid_range')
! Define the time coordinate variable and attributes
- call nc_check(nf90_def_var(ncid=ncid, name="time", xtype=nf90_double, &
+ call nc_check(nf90_def_var(ncid=ncid, name='time', xtype=nf90_double, &
dimids=TimeDimID, varid=TimeVarID), 'WriteNetCDF', 'time:def_var')
- call nc_check(nf90_put_att(ncid, TimeVarID, "standard_name", "time"), &
+ call nc_check(nf90_put_att(ncid, TimeVarID, 'standard_name', 'time'), &
'WriteNetCDF', 'time:standard_name')
- call nc_check(nf90_put_att(ncid, TimeVarID, "long_name", "temporal bin midpoints"), &
+ call nc_check(nf90_put_att(ncid, TimeVarID, 'long_name', 'temporal bin midpoints'), &
'WriteNetCDF', 'time:long_name')
- call nc_check(nf90_put_att(ncid, TimeVarID, "units", "days since 1601-1-1"), &
+ call nc_check(nf90_put_att(ncid, TimeVarID, 'units', 'days since 1601-1-1'), &
'WriteNetCDF', 'time:units')
- call nc_check(nf90_put_att(ncid, TimeVarID, "calendar", "Gregorian"), &
+ call nc_check(nf90_put_att(ncid, TimeVarID, 'calendar', 'Gregorian'), &
'WriteNetCDF', 'time:calendar')
- call nc_check(nf90_put_att(ncid, TimeVarID, "axis", "T"), &
+ call nc_check(nf90_put_att(ncid, TimeVarID, 'axis', 'T'), &
'WriteNetCDF', 'time:axis')
- call nc_check(nf90_put_att(ncid, TimeVarID, "bounds", "time_bounds"), &
+ call nc_check(nf90_put_att(ncid, TimeVarID, 'bounds', 'time_bounds'), &
'WriteNetCDF', 'time:bounds')
- call nc_check(nf90_put_att(ncid, TimeVarID, "valid_range", &
+ call nc_check(nf90_put_att(ncid, TimeVarID, 'valid_range', &
(/ epoch_center(1), epoch_center(Nepochs) /)), &
'WriteNetCDF', 'time:valid_range')
! Define the time edges coordinate variable and attributes
- call nc_check(nf90_def_var(ncid=ncid, name="time_bounds", xtype=nf90_double, &
+ call nc_check(nf90_def_var(ncid=ncid, name='time_bounds', xtype=nf90_double, &
dimids=(/ BoundsDimID, TimeDimID/), varid=TimeBoundsVarID), &
'WriteNetCDF', 'time_bounds:def_var')
- call nc_check(nf90_put_att(ncid, TimeBoundsVarID, "long_name", "temporal bin edges"), &
+ call nc_check(nf90_put_att(ncid, TimeBoundsVarID, 'long_name', 'temporal bin edges'), &
'WriteNetCDF', 'time_bounds:long_name')
- call nc_check(nf90_put_att(ncid, TimeBoundsVarID, "units", "days since 1601-1-1"), &
+ call nc_check(nf90_put_att(ncid, TimeBoundsVarID, 'units', 'days since 1601-1-1'), &
'WriteNetCDF', 'time_bounds:units')
- call nc_check(nf90_put_att(ncid, TimeBoundsVarID, "calendar", "Gregorian"), &
+ call nc_check(nf90_put_att(ncid, TimeBoundsVarID, 'calendar', 'Gregorian'), &
'WriteNetCDF', 'time_bounds:calendar')
- call nc_check(nf90_put_att(ncid, TimeBoundsVarID, "valid_range", &
+ call nc_check(nf90_put_att(ncid, TimeBoundsVarID, 'valid_range', &
(/ epoch_edges(1,1), epoch_edges(2,Nepochs) /)), &
'WriteNetCDF', 'time_bounds:valid_range')
! Define the regions variable ... an unusual coordinate variable IMHO
- call nc_check(nf90_def_var(ncid=ncid, name="region_names", xtype=nf90_char, &
+ call nc_check(nf90_def_var(ncid=ncid, name='region_names', xtype=nf90_char, &
dimids=(/ StringDimID, RegionDimID /), varid=RegionNamesVarID), &
'WriteNetCDF', 'region:def_var')
- call nc_check(nf90_put_att(ncid, RegionNamesVarID, "long_name", "region names"), &
+ call nc_check(nf90_put_att(ncid, RegionNamesVarID, 'long_name', 'region names'), &
'WriteNetCDF', 'region:long_name')
- call nc_check(nf90_def_var(ncid=ncid, name="CopyMetaData", xtype=nf90_char, &
+ call nc_check(nf90_def_var(ncid=ncid, name='CopyMetaData', xtype=nf90_char, &
dimids=(/ StringDimID, CopyDimID /), varid=CopyMetaVarID), &
'WriteNetCDF', 'copymeta:def_var')
- call nc_check(nf90_put_att(ncid, CopyMetaVarID, "long_name", "quantity names"), &
+ call nc_check(nf90_put_att(ncid, CopyMetaVarID, 'long_name', 'quantity names'), &
'WriteNetCDF', 'copymeta:long_name')
- call nc_check(nf90_def_var(ncid=ncid, name="ObservationTypes", xtype=nf90_char, &
+ call nc_check(nf90_def_var(ncid=ncid, name='ObservationTypes', xtype=nf90_char, &
dimids=(/ StringDimID, TypesDimID /), varid=TypesMetaVarID), &
'WriteNetCDF', 'typesmeta:def_var')
- call nc_check(nf90_put_att(ncid, TypesMetaVarID, "long_name", "DART observation types"), &
+ call nc_check(nf90_put_att(ncid, TypesMetaVarID, 'long_name', 'DART observation types'), &
'WriteNetCDF', 'typesmeta:long_name')
- call nc_check(nf90_put_att(ncid, TypesMetaVarID, "comment", &
- "table relating integer to observation type string"), &
+ call nc_check(nf90_put_att(ncid, TypesMetaVarID, 'comment', &
+ 'table relating integer to observation type string'), &
'WriteNetCDF', 'typesmeta:comment')
! Set nofill mode - supposed to be performance gain
@@ -2972,9 +2990,9 @@
Function grok_observation_names(my_names)
!----------------------------------------------------------------------
- ! Define/Append the 'wind velocity' obs_kinds to supplant the list declared
+ ! Define/Append the 'horizontal wind' obs_kinds to supplant the list declared
! in obs_kind_mod.f90 i.e. if there is a RADIOSONDE_U_WIND_COMPONENT
- ! and a RADIOSONDE_V_WIND_COMPONENT, there must be a RADIOSONDE_WIND_VELOCITY
+ ! and a RADIOSONDE_V_WIND_COMPONENT, there must be a RADIOSONDE_HORIZONTAL_WIND
! Replace calls to 'get_obs_kind_name' with variable 'my_obs_kind_names'
!----------------------------------------------------------------------
@@ -2986,7 +3004,7 @@
character(len=stringlength), dimension(2*max_obs_kinds) :: names
! Initially, the array of obs_kind_names is exactly 'max_num_obs' in length.
- ! This block finds the U,V wind pairs and searches for pre-existing wind_velocity
+ ! This block finds the U,V wind pairs and creates the 'horizontal_wind'
! equivalents. Depending on the number of unique wind pairs - we can allocate
! space, copy the existing names into that array, and append the new unique ones.
! easy ...
@@ -3028,7 +3046,7 @@
if (indxN > 0) then ! we know they are matching kinds
nwinds = nwinds + 1
- str3 = str1(1:indx2)//'_WIND_VELOCITY'
+ str3 = str1(1:indx2)//'_HORIZONTAL_WIND'
names(max_obs_kinds + nwinds) = str3
! write(*,*)'Seems like ',str1(1:indx1N),' matches ',str2(1:indx2N)
@@ -3055,7 +3073,7 @@
indxN = index(str1(1:indx1),str2(1:indx2))
if (indxN > 0) then ! we know they are matching kinds
nwinds = nwinds + 1
- str3 = str1(1:indx2)//'_10_METER_WIND_VELOCITY'
+ str3 = str1(1:indx2)//'_10_METER_HORIZONTAL_WIND'
names(max_obs_kinds + nwinds) = str3
endif
endif
More information about the Dart-dev
mailing list