[Dart-dev] [3832] DART/trunk/observations: Set of updates from Ryan Torn for the MADIS and SSEC converters.
nancy at ucar.edu
nancy at ucar.edu
Thu Apr 30 17:05:42 MDT 2009
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/dart-dev/attachments/20090430/afeb1b52/attachment-0001.html
-------------- next part --------------
Modified: DART/trunk/observations/MADIS/convert_madis_acars.f90
===================================================================
--- DART/trunk/observations/MADIS/convert_madis_acars.f90 2009-04-29 21:02:50 UTC (rev 3831)
+++ DART/trunk/observations/MADIS/convert_madis_acars.f90 2009-04-30 23:05:42 UTC (rev 3832)
@@ -11,11 +11,7 @@
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
program convert_madis_acars
-use types_mod, only : r8
-use meteor_mod, only : pres_alt_to_pres, sat_vapor_pressure, &
- specific_humidity, wind_dirspd_to_uv
-use ncep_obs_err_mod, only : ncep_acars_wind_error, ncep_acars_temp_error, &
- ncep_acars_moist_error
+use types_mod, only : r8, missing_r8
use location_mod, only : VERTISPRESSURE
use obs_sequence_mod, only : obs_sequence_type, obs_type, read_obs_seq, &
static_init_obs_sequence, init_obs, write_obs_seq, &
@@ -25,6 +21,10 @@
increment_time, get_time, GREGORIAN, operator(-)
use obs_kind_mod, only : ACARS_U_WIND_COMPONENT, ACARS_V_WIND_COMPONENT, &
ACARS_TEMPERATURE, ACARS_SPECIFIC_HUMIDITY
+use meteor_mod, only : pres_alt_to_pres, sat_vapor_pressure, &
+ specific_humidity, wind_dirspd_to_uv
+use obs_err_mod, only : acars_wind_error, acars_temp_error, &
+ acars_rel_hum_error
use netcdf
implicit none
@@ -42,7 +42,7 @@
oday, osec, nused, iyear, imonth, iday, ihour, imin, isec
logical :: file_exist
real(r8) :: palt_miss, tair_miss, relh_miss, wdir_miss, wspd_miss, uwnd, &
- vwnd, qobs, qsat, oerr, window_hours, pres, qc
+ vwnd, qobs, qsat, oerr, window_hours, pres, qc, qerr
integer, allocatable :: tobs(:)
real(r8), allocatable :: lat(:), lon(:), palt(:), tair(:), relh(:), &
@@ -52,10 +52,8 @@
type(obs_type) :: obs
type(time_type) :: comp_day0, time_obs, time_anal
-print*,'Enter the target assimilation time (yyyy-mm-dd_hh:mm:ss)'
-read*,datime
-print*,'Enter the observation window (hours)'
-read*,window_hours
+print*,'Enter target assimilation time (yyyy-mm-dd_hh:mm:ss), obs window (hours)'
+read*,datime,window_hours
call set_calendar_type(GREGORIAN)
read(datime(1:4), fmt='(i4)') iyear
@@ -165,9 +163,9 @@
if ( wdir(n) /= wdir_miss .and. wspd(n) /= wspd_miss ) then
call wind_dirspd_to_uv(wdir(n), wspd(n), uwnd, vwnd)
- if ( abs(uwnd) < 150.0_r8 .and. abs(vwnd) < 150.0_r8 ) then
+ oerr = acars_wind_error(pres * 0.01_r8)
+ if ( abs(uwnd) < 150.0_r8 .and. abs(vwnd) < 150.0_r8 .and. oerr /= missing_r8) then
- oerr = ncep_acars_wind_error
call create_obs_type(lat(n), lon(n), pres, VERTISPRESSURE, uwnd, &
ACARS_U_WIND_COMPONENT, oerr, oday, osec, qc, obs)
call append_obs_to_seq(obs_seq, obs)
@@ -182,11 +180,15 @@
! add air temperature data to obs. sequence
if ( tair(n) /= tair_miss ) then
- oerr = ncep_acars_temp_error(pres * 0.01_r8)
- call create_obs_type(lat(n), lon(n), pres, VERTISPRESSURE, tair(n), &
- ACARS_TEMPERATURE, oerr, oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
+ oerr = acars_temp_error(pres * 0.01_r8)
+ if ( tair(n) >= 180.0_r8 .and. tair(n) <= 330.0_r8 .and. oerr /= missing_r8 ) then
+ call create_obs_type(lat(n), lon(n), pres, VERTISPRESSURE, tair(n), &
+ ACARS_TEMPERATURE, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+
+ end if
+
end if
! add relative humidity data to obs. sequence, but as specific humidity
@@ -194,9 +196,10 @@
qsat = specific_humidity(sat_vapor_pressure(tair(n)), pres)
qobs = qsat * relh(n)
- oerr = max(ncep_acars_moist_error * qsat, 0.0001_r8)
+ qerr = acars_rel_hum_error(pres * 0.01_r8, tair(n), relh(n))
+ oerr = max(qerr * qsat, 0.0001_r8)
- if ( abs(qobs) < 0.1_r8 ) then
+ if ( abs(qobs) < 0.1_r8 .and. qerr /= missing_r8 ) then
call create_obs_type(lat(n), lon(n), pres, VERTISPRESSURE, qobs, &
ACARS_SPECIFIC_HUMIDITY, oerr, oday, osec, qc, obs)
Modified: DART/trunk/observations/MADIS/convert_madis_marine.f90
===================================================================
--- DART/trunk/observations/MADIS/convert_madis_marine.f90 2009-04-29 21:02:50 UTC (rev 3831)
+++ DART/trunk/observations/MADIS/convert_madis_marine.f90 2009-04-30 23:05:42 UTC (rev 3832)
@@ -11,7 +11,7 @@
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
program convert_madis_marine
-use types_mod, only : r8
+use types_mod, only : r8, missing_r8
use time_manager_mod, only : time_type, set_calendar_type, set_date, &
increment_time, get_time, operator(-), GREGORIAN
use location_mod, only : VERTISSURFACE
@@ -20,9 +20,11 @@
append_obs_to_seq, init_obs_sequence, get_num_obs, &
set_copy_meta_data, set_qc_meta_data
use meteor_mod, only : sat_vapor_pressure, specific_humidity, &
- wind_dirspd_to_uv
-use ncep_obs_err_mod, only : ncep_marine_temp_error, ncep_marine_moist_error, &
- ncep_marine_wind_error, ncep_marine_altim_error
+ wind_dirspd_to_uv, pres_alt_to_pres
+use obs_err_mod, only : fixed_marine_temp_error, fixed_marine_rel_hum_error, &
+ fixed_marine_wind_error, fixed_marine_pres_error, &
+ moving_marine_temp_error, moving_marine_rel_hum_error, &
+ moving_marine_wind_error, moving_marine_pres_error
use obs_kind_mod, only : MARINE_SFC_U_WIND_COMPONENT, MARINE_SFC_V_WIND_COMPONENT, &
MARINE_SFC_TEMPERATURE, MARINE_SFC_SPECIFIC_HUMIDITY, &
MARINE_SFC_ALTIMETER
@@ -47,9 +49,9 @@
osec, nused, iyear, imonth, iday, ihour, imin, isec
logical :: file_exist
real(r8) :: sfcp_miss, tair_miss, tdew_miss, wdir_miss, wspd_miss, uwnd, &
- vwnd, altim, qobs, qsat, qobserr, slp_miss, elev_miss, qc
+ vwnd, altim, palt, oerr, qobs, qerr, qsat, slp_miss, elev_miss, qc
-integer, allocatable :: tobs(:)
+integer, allocatable :: tobs(:), plid(:)
real(r8), allocatable :: lat(:), lon(:), elev(:), sfcp(:), tair(:), slp(:), &
tdew(:), wdir(:), wspd(:), latu(:), lonu(:)
@@ -78,10 +80,11 @@
allocate( lat(nobs)) ; allocate( lon(nobs))
allocate(latu(nobs)) ; allocate(lonu(nobs))
-allocate(elev(nobs)) ; allocate(sfcp(nobs))
+allocate(elev(nobs)) ; allocate(plid(nobs))
+allocate(sfcp(nobs)) ; allocate(slp(nobs))
allocate(tair(nobs)) ; allocate(tdew(nobs))
allocate(wdir(nobs)) ; allocate(wspd(nobs))
-allocate(tobs(nobs)) ; allocate(slp(nobs))
+allocate(tobs(nobs))
! read the latitude array
call check( nf90_inq_varid(ncid, "latitude", varid) )
@@ -96,6 +99,10 @@
call check( nf90_get_var(ncid, varid, elev) )
call check( nf90_get_att(ncid, varid, '_FillValue', elev_miss) )
+! read the platform type array
+call check( nf90_inq_varid(ncid, "dataPlatformType", varid) )
+call check( nf90_get_var(ncid, varid, plid) )
+
! read the altimeter setting array
call check( nf90_inq_varid(ncid, "stationPress", varid) )
call check( nf90_get_var(ncid, varid, sfcp) )
@@ -170,26 +177,49 @@
do i = 1, nused
if ( lon(n) == lon(i) .and. lat(n) == lat(i) ) cycle obsloop
end do
- qc = 1.0_r8
+ qc = 1.0_r8 ;
+ if ( elev(n) /= missing_r8 ) then
+ palt = pres_alt_to_pres(elev(n)) * 0.01_r8
+ else
+ palt = pres_alt_to_pres(def_elev) * 0.01_r8
+ end if
! add altimeter data to obs_seq
if ( sfcp(n) /= sfcp_miss .and. elev(n) /= elev_miss ) then
altim = compute_altimeter(sfcp(n) * 0.01_r8, elev(n))
- call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, altim, &
- MARINE_SFC_ALTIMETER, ncep_marine_altim_error, &
- oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
+ if ( plid(n) == 0 ) then
+ oerr = fixed_marine_pres_error(palt)
+ else
+ oerr = moving_marine_pres_error(palt)
+ end if
+ if ( altim >= 890.0_r8 .and. altim <= 1100.0_r8 .and. oerr /= missing_r8 ) then
+
+ call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, altim, &
+ MARINE_SFC_ALTIMETER, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+
+ end if
+
! if surface pressure and elevation do not exist, use SLP.
else if ( slp(n) /= slp_miss ) then
- altim = compute_altimeter(slp(n) * 0.01_r8, 0.0_r8)
- call create_obs_type(lat(n), lon(n), def_elev, VERTISSURFACE, altim, &
- MARINE_SFC_ALTIMETER, ncep_marine_altim_error, &
- oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
+ altim = compute_altimeter(slp(n) * 0.01_r8, 0.0_r8)
+ if ( plid(n) == 0 ) then
+ oerr = fixed_marine_pres_error(palt)
+ else
+ oerr = moving_marine_pres_error(palt)
+ end if
+
+ if ( altim >= 890.0_r8 .and. altim <= 1100.0_r8 .and. oerr /= missing_r8 ) then
+ call create_obs_type(lat(n), lon(n), def_elev, VERTISSURFACE, altim, &
+ MARINE_SFC_ALTIMETER, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+
+ end if
+
end if
if ( elev(n) == elev_miss ) elev(n) = def_elev
@@ -197,15 +227,18 @@
if ( wdir(n) /= wdir_miss .and. wspd(n) /= wspd_miss ) then
call wind_dirspd_to_uv(wdir(n), wspd(n), uwnd, vwnd)
- if ( abs(uwnd) < 150.0_r8 .and. abs(vwnd) < 150.0_r8 ) then
+ if ( plid(n) == 0 ) then
+ oerr = fixed_marine_wind_error(palt)
+ else
+ oerr = moving_marine_wind_error(palt)
+ end if
+ if ( abs(uwnd) < 150.0_r8 .and. abs(vwnd) < 150.0_r8 .and. oerr /= missing_r8 ) then
call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, uwnd, &
- MARINE_SFC_U_WIND_COMPONENT, ncep_marine_wind_error, &
- oday, osec, qc, obs)
+ MARINE_SFC_U_WIND_COMPONENT, oerr, oday, osec, qc, obs)
call append_obs_to_seq(obs_seq, obs)
call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, vwnd, &
- MARINE_SFC_V_WIND_COMPONENT, ncep_marine_wind_error, &
- oday, osec, qc, obs)
+ MARINE_SFC_V_WIND_COMPONENT, oerr, oday, osec, qc, obs)
call append_obs_to_seq(obs_seq, obs)
end if
@@ -214,25 +247,38 @@
! add air temperature data to obs. sequence
if ( tair(n) /= tair_miss ) then
-
- call create_obs_type(lat(n), lon(n), def_elev, VERTISSURFACE, tair(n), &
- MARINE_SFC_TEMPERATURE, ncep_marine_temp_error, &
- oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
+
+ if ( plid(n) == 0 ) then
+ oerr = fixed_marine_temp_error(palt)
+ else
+ oerr = moving_marine_temp_error(palt)
+ end if
+ if ( tair(n) >= 200.0_r8 .and. tair(n) <= 335.0_r8 .and. oerr /= missing_r8 ) then
+
+ call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, tair(n), &
+ MARINE_SFC_TEMPERATURE, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+ end if
+
end if
! add dew-point temperature data to obs. sequence, but as specific humidity
if ( tair(n) /= tair_miss .and. tdew(n) /= tdew_miss .and. sfcp(n) /= sfcp_miss ) then
- qobs = specific_humidity(sat_vapor_pressure(tdew(n)), sfcp(n))
- qsat = specific_humidity(sat_vapor_pressure(tair(n)), sfcp(n))
- qobserr = max(ncep_marine_moist_error * qsat, 0.0001_r8)
+ qobs = specific_humidity(sat_vapor_pressure(tdew(n)), sfcp(n))
+ qsat = specific_humidity(sat_vapor_pressure(tair(n)), sfcp(n))
+ if ( plid(n) == 0 ) then
+ oerr = fixed_marine_rel_hum_error(palt, tair(n), qobs / qsat)
+ else
+ oerr = moving_marine_rel_hum_error(palt, tair(n), qobs / qsat)
+ end if
+ oerr = max(qerr * qsat, 0.0001_r8)
- if ( abs(qobs) < 100.0_r8 ) then
+ if ( qobs >= 0.0_r8 .and. qobs <= 0.07_r8 .and. qerr /= missing_r8 ) then
call create_obs_type(lat(n), lon(n), def_elev, VERTISSURFACE, qobs, &
- MARINE_SFC_SPECIFIC_HUMIDITY, qobserr, oday, osec, qc, obs)
+ MARINE_SFC_SPECIFIC_HUMIDITY, oerr, oday, osec, qc, obs)
call append_obs_to_seq(obs_seq, obs)
end if
@@ -299,7 +345,7 @@
subroutine create_obs_type(lat, lon, pres, vcord, obsv, okind, oerr, day, sec, qc, obs)
use types_mod, only : r8
-use obs_sequence_mod, only : obs_type, set_obs_values, set_qc, set_obs_def
+use obs_sequence_mod, only : obs_type, set_obs_values, set_qc, set_obs_def, init_obs
use obs_def_mod, only : obs_def_type, set_obs_def_time, set_obs_def_kind, &
set_obs_def_error_variance, set_obs_def_location
use location_mod, only : location_type, set_location
@@ -309,11 +355,12 @@
integer, intent(in) :: okind, vcord, day, sec
real(r8), intent(in) :: lat, lon, pres, obsv, oerr, qc
-type(obs_type), intent(inout) :: obs
+type(obs_type), intent(out) :: obs
real(r8) :: obs_val(1), qc_val(1)
type(obs_def_type) :: obs_def
+call init_obs(obs, 1, 1)
call set_obs_def_location(obs_def, set_location(lon, lat, pres, vcord))
call set_obs_def_kind(obs_def, okind)
call set_obs_def_time(obs_def, set_time(sec, day))
Modified: DART/trunk/observations/MADIS/convert_madis_rawin.f90
===================================================================
--- DART/trunk/observations/MADIS/convert_madis_rawin.f90 2009-04-29 21:02:50 UTC (rev 3831)
+++ DART/trunk/observations/MADIS/convert_madis_rawin.f90 2009-04-30 23:05:42 UTC (rev 3832)
@@ -10,7 +10,7 @@
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
program convert_madis_rawin
-use types_mod, only : r8
+use types_mod, only : r8, missing_r8
use time_manager_mod, only : time_type, set_calendar_type, set_date, &
get_time, increment_time, GREGORIAN, operator(-)
use location_mod, only : VERTISSURFACE, VERTISPRESSURE, VERTISHEIGHT
@@ -19,9 +19,9 @@
append_obs_to_seq, init_obs_sequence, get_num_obs, &
set_copy_meta_data, set_qc_meta_data
use meteor_mod, only : sat_vapor_pressure, specific_humidity, &
- wind_dirspd_to_uv
-use ncep_obs_err_mod, only : ncep_rawin_temp_error, ncep_rawin_wind_error, &
- ncep_rawin_sfcpres_error, ncep_rawin_moist_error
+ wind_dirspd_to_uv, pres_alt_to_pres
+use obs_err_mod, only : rawin_temp_error, rawin_wind_error, &
+ rawin_pres_error, rawin_rel_hum_error
use obs_def_altimeter_mod, only : compute_altimeter
use obs_kind_mod, only : RADIOSONDE_U_WIND_COMPONENT, &
RADIOSONDE_V_WIND_COMPONENT, &
@@ -51,7 +51,7 @@
real(r8) :: obswindow, otime, lat, lon, elev, uwnd, vwnd, qobs, qsat, oerr, &
pres_miss, wdir_miss, wspd_miss, tair_miss, tdew_miss, prespa, &
- time_miss, qc, altim
+ time_miss, qc, altim, qerr
real(r8), allocatable :: pres(:), wdir(:), wspd(:), tair(:), tdew(:)
@@ -59,10 +59,8 @@
type(obs_type) :: obs
type(time_type) :: comp_day0, time_anal, time_obs
-print*,'Enter the analysis time (yyyy-mm-dd_hh:mm:ss)'
-read*,datestr
-print*,'Enter the observation window (hours)'
-read*,obswindow
+print*,'Enter the analysis time (yyyy-mm-dd_hh:mm:ss) and window (hours)'
+read*,datestr, obswindow
print*,'Include significant level winds, temperature?'
read*,sigwnd, sigtmp
@@ -182,11 +180,15 @@
if ( pres(1) /= pres_miss ) then
altim = compute_altimeter(pres(1), elev)
- call create_obs_type(lat, lon, elev, VERTISSURFACE, altim, &
- RADIOSONDE_SURFACE_ALTIMETER, ncep_rawin_sfcpres_error, &
- oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
+ oerr = rawin_pres_error(pres_alt_to_pres(elev) * 0.01_r8)
+ if ( altim >= 880.0_r8 .and. altim <= 1100.0_r8 .and. oerr /= missing_r8 ) then
+ call create_obs_type(lat, lon, elev, VERTISSURFACE, altim, &
+ RADIOSONDE_SURFACE_ALTIMETER, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+
+ end if
+
end if
do k = 2, nman ! obtain the mandatory level data
@@ -196,23 +198,32 @@
if ( wdir(k) /= wdir_miss .and. wspd(k) /= wspd_miss ) then
call wind_dirspd_to_uv(wdir(k), wspd(k), uwnd, vwnd)
- oerr = ncep_rawin_wind_error(pres(k))
- call create_obs_type(lat, lon, prespa, VERTISPRESSURE, uwnd, &
- RADIOSONDE_U_WIND_COMPONENT, oerr, oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
- call create_obs_type(lat, lon, prespa, VERTISPRESSURE, vwnd, &
- RADIOSONDE_V_WIND_COMPONENT, oerr, oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
+ oerr = rawin_wind_error(pres(k))
+ if ( abs(uwnd) <= 150.0_r8 .and. &
+ abs(vwnd) <= 150.0_r8 .and. oerr /= missing_r8 ) then
+ call create_obs_type(lat, lon, prespa, VERTISPRESSURE, uwnd, &
+ RADIOSONDE_U_WIND_COMPONENT, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+ call create_obs_type(lat, lon, prespa, VERTISPRESSURE, vwnd, &
+ RADIOSONDE_V_WIND_COMPONENT, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+
+ end if
+
end if
if ( tair(k) /= tair_miss ) then
- oerr = ncep_rawin_temp_error(pres(k))
- call create_obs_type(lat, lon, prespa, VERTISPRESSURE, tair(k), &
- RADIOSONDE_TEMPERATURE, oerr, oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
+ oerr = rawin_temp_error(pres(k))
+ if ( tair(k) >= 180.0_r8 .and. tair(k) <= 330.0_r8 .and. oerr /= missing_r8 ) then
+ call create_obs_type(lat, lon, prespa, VERTISPRESSURE, tair(k), &
+ RADIOSONDE_TEMPERATURE, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+
+ end if
+
end if
if ( tair(k) /= tair_miss .and. tdew(k) /= tdew_miss ) then
@@ -220,8 +231,10 @@
qobs = tair(k) - tdew(k)
qobs = specific_humidity(sat_vapor_pressure(qobs), prespa)
qsat = specific_humidity(sat_vapor_pressure(tair(k)), prespa)
- oerr = max(ncep_rawin_moist_error * qsat, 0.0001_r8)
- if ( qobs > 0.0_r8 .and. qobs < 0.070_r8 ) then
+ qerr = rawin_rel_hum_error(pres(k), tair(k), qobs / qsat)
+ oerr = max(qerr * qsat, 0.0001_r8)
+
+ if ( qobs > 0.0_r8 .and. qobs <= 0.070_r8 .and. qerr /= missing_r8 ) then
call create_obs_type(lat, lon, prespa, VERTISPRESSURE, qobs, &
RADIOSONDE_SPECIFIC_HUMIDITY, oerr, oday, osec, qc, obs)
call append_obs_to_seq(obs_seq, obs)
@@ -257,11 +270,15 @@
if ( tair(k) /= tair_miss ) then
- oerr = ncep_rawin_temp_error(pres(k))
- call create_obs_type(lat, lon, prespa, VERTISPRESSURE, tair(k), &
- RADIOSONDE_TEMPERATURE, oerr, oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
+ oerr = rawin_temp_error(pres(k))
+ if ( tair(k) >= 180.0_r8 .and. tair(k) <= 330.0_r8 .and. oerr /= missing_r8 ) then
+ call create_obs_type(lat, lon, prespa, VERTISPRESSURE, tair(k), &
+ RADIOSONDE_TEMPERATURE, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+
+ end if
+
end if
if ( tair(k) /= tair_miss .and. tdew(k) /= tdew_miss ) then
@@ -269,8 +286,9 @@
qobs = tair(k) - tdew(k)
qobs = specific_humidity(sat_vapor_pressure(qobs), prespa)
qsat = specific_humidity(sat_vapor_pressure(tair(k)), prespa)
- oerr = max(ncep_rawin_moist_error * qsat, 0.0001_r8)
- if ( qobs > 0.0_r8 .and. qobs < 0.070_r8 ) then
+ qerr = rawin_rel_hum_error(pres(k), tair(k), qobs / qsat)
+ oerr = max(qerr * qsat, 0.0001_r8)
+ if ( qobs > 0.0_r8 .and. qobs <= 0.070_r8 .and. qerr /= missing_r8 ) then
call create_obs_type(lat, lon, prespa, VERTISPRESSURE, qobs, &
RADIOSONDE_SPECIFIC_HUMIDITY, oerr, oday, osec, qc, obs)
call append_obs_to_seq(obs_seq, obs)
@@ -308,14 +326,19 @@
if ( wdir(k) /= wdir_miss .and. wspd(k) /= wspd_miss ) then
call wind_dirspd_to_uv(wdir(k), wspd(k), uwnd, vwnd)
- oerr = ncep_rawin_wind_error(500.0_r8)
- call create_obs_type(lat, lon, pres(k), VERTISHEIGHT, uwnd, &
- RADIOSONDE_U_WIND_COMPONENT, oerr, oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
- call create_obs_type(lat, lon, pres(k), VERTISHEIGHT, vwnd, &
- RADIOSONDE_V_WIND_COMPONENT, oerr, oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
+ oerr = rawin_wind_error(pres_alt_to_pres(pres(k)) * 0.01_r8)
+ if ( abs(uwnd) <= 150.0_r8 .and. &
+ abs(vwnd) <= 150.0_r8 .and. oerr /= missing_r8 ) then
+ call create_obs_type(lat, lon, pres(k), VERTISHEIGHT, uwnd, &
+ RADIOSONDE_U_WIND_COMPONENT, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+ call create_obs_type(lat, lon, pres(k), VERTISHEIGHT, vwnd, &
+ RADIOSONDE_V_WIND_COMPONENT, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+
+ end if
+
end if
end do
Modified: DART/trunk/observations/MADIS/convert_madis_surface.f90
===================================================================
--- DART/trunk/observations/MADIS/convert_madis_surface.f90 2009-04-29 21:02:50 UTC (rev 3831)
+++ DART/trunk/observations/MADIS/convert_madis_surface.f90 2009-04-30 23:05:42 UTC (rev 3832)
@@ -11,7 +11,7 @@
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
program convert_madis_surface
-use types_mod, only : r8
+use types_mod, only : r8, missing_r8
use time_manager_mod, only : time_type, set_calendar_type, set_date, &
increment_time, get_time, GREGORIAN, operator(-)
use location_mod, only : VERTISSURFACE
@@ -20,9 +20,9 @@
append_obs_to_seq, init_obs_sequence, get_num_obs, &
set_copy_meta_data, set_qc_meta_data
use meteor_mod, only : sat_vapor_pressure, specific_humidity, &
- wind_dirspd_to_uv, invert_altimeter
-use ncep_obs_err_mod, only : ncep_land_temp_error, ncep_land_wind_error, &
- ncep_land_altim_error, ncep_land_moist_error
+ wind_dirspd_to_uv, invert_altimeter, pres_alt_to_pres
+use obs_err_mod, only : land_temp_error, land_wind_error, &
+ land_pres_error, land_rel_hum_error
use obs_kind_mod, only : LAND_SFC_U_WIND_COMPONENT, LAND_SFC_V_WIND_COMPONENT, &
LAND_SFC_TEMPERATURE, LAND_SFC_SPECIFIC_HUMIDITY, &
LAND_SFC_ALTIMETER
@@ -44,7 +44,7 @@
dsec, nused, iyear, imonth, iday, ihour, imin, isec
logical :: file_exist
real(r8) :: alti_miss, tair_miss, tdew_miss, wdir_miss, wspd_miss, uwnd, &
- vwnd, qobs, qsat, oerr, stn_pres, qc
+ vwnd, palt, qobs, qsat, oerr, pres, qerr, qc
integer, allocatable :: tobs(:)
real(r8), allocatable :: lat(:), lon(:), elev(:), alti(:), tair(:), &
@@ -159,29 +159,35 @@
if ( lon(n) == lon(i) .and. lat(n) == lat(i) ) cycle obsloop
end do
qc = 1.0_r8
+ palt = pres_alt_to_pres(elev(n)) * 0.01_r8
! add altimeter data to text file
if ( alti(n) /= alti_miss ) then
- call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, alti(n) * 0.01_r8, &
- LAND_SFC_ALTIMETER, ncep_land_altim_error, oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
+ pres = invert_altimeter(alti(n) * 0.01_r8, elev(n))
+ oerr = land_pres_error(palt)
+ if ( alti(n) >= 89000.0_r8 .and. alti(n) <= 110000.0_r8 .and. oerr /= missing_r8 ) then
+ call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, alti(n) * 0.01_r8, &
+ LAND_SFC_ALTIMETER, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+
+ end if
+
end if
! add wind component data to text file
if ( wdir(n) /= wdir_miss .and. wspd(n) /= wspd_miss ) then
call wind_dirspd_to_uv(wdir(n), wspd(n), uwnd, vwnd)
- if ( abs(uwnd) < 150.0_r8 .and. abs(vwnd) < 150.0_r8 ) then
+ oerr = land_wind_error(palt)
+ if ( abs(uwnd) < 150.0_r8 .and. abs(vwnd) < 150.0_r8 .and. oerr /= missing_r8 ) then
call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, uwnd, &
- LAND_SFC_U_WIND_COMPONENT, ncep_land_wind_error, &
- oday, osec, qc, obs)
+ LAND_SFC_U_WIND_COMPONENT, oerr, oday, osec, qc, obs)
call append_obs_to_seq(obs_seq, obs)
call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, vwnd, &
- LAND_SFC_V_WIND_COMPONENT, ncep_land_wind_error, &
- oday, osec, qc, obs)
+ LAND_SFC_V_WIND_COMPONENT, oerr, oday, osec, qc, obs)
call append_obs_to_seq(obs_seq, obs)
end if
@@ -191,24 +197,31 @@
! add air temperature data to text file
if ( tair(n) /= tair_miss ) then
- call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, tair(n), &
- LAND_SFC_TEMPERATURE, ncep_land_temp_error, oday, osec, qc, obs)
- call append_obs_to_seq(obs_seq, obs)
+ oerr = land_temp_error(palt)
+ if ( tair(n) >= 200.0_r8 .and. tair(n) <= 335.0_r8 .and. oerr /= missing_r8 ) then
+ call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, tair(n), &
+ LAND_SFC_TEMPERATURE, oerr, oday, osec, qc, obs)
+ call append_obs_to_seq(obs_seq, obs)
+
+ end if
+
end if
! add dew-point temperature data to text file, but as specific humidity
if ( tair(n) /= tair_miss .and. tdew(n) /= tdew_miss .and. alti(n) /= alti_miss ) then
- stn_pres = invert_altimeter(alti(n) * 0.01_r8, elev(n)) * 100.0_r8
- qobs = specific_humidity(sat_vapor_pressure(tdew(n)), stn_pres)
- qsat = specific_humidity(sat_vapor_pressure(tair(n)), stn_pres)
- oerr = max(ncep_land_moist_error * qsat, 0.0001_r8)
+ qobs = specific_humidity(sat_vapor_pressure(tdew(n)), pres * 100.0_r8)
+ qsat = specific_humidity(sat_vapor_pressure(tair(n)), pres * 100.0_r8)
+ qerr = land_rel_hum_error(pres, tair(n), qobs / qsat)
+ oerr = max(qerr * qsat, 0.0001_r8)
- if ( abs(qobs) < 100.0_r8 ) then
+ if ( qobs > 0.0_r8 .and. qobs <= 0.07_r8 .and. qerr /= missing_r8 ) then
+
call create_obs_type(lat(n), lon(n), elev(n), VERTISSURFACE, qobs, &
LAND_SFC_SPECIFIC_HUMIDITY, oerr, oday, osec, qc, obs)
call append_obs_to_seq(obs_seq, obs)
+
end if
end if
Modified: DART/trunk/observations/MADIS/data/acars.in
===================================================================
--- DART/trunk/observations/MADIS/data/acars.in 2009-04-29 21:02:50 UTC (rev 3831)
+++ DART/trunk/observations/MADIS/data/acars.in 2009-04-30 23:05:42 UTC (rev 3832)
@@ -1,2 +1 @@
-2005-08-26_00:00:00
-6
+2005-08-26_00:00:00 6
Deleted: DART/trunk/observations/MADIS/ncep_obs_err_mod.f90
===================================================================
--- DART/trunk/observations/MADIS/ncep_obs_err_mod.f90 2009-04-29 21:02:50 UTC (rev 3831)
+++ DART/trunk/observations/MADIS/ncep_obs_err_mod.f90 2009-04-30 23:05:42 UTC (rev 3832)
@@ -1,280 +0,0 @@
-module ncep_obs_err_mod
-
-use types_mod, only : r8
-
-implicit none
-private
-
-real(r8), parameter :: ncep_marine_wind_error = 2.5_r8, &
- ncep_marine_temp_error = 2.5_r8, &
- ncep_marine_moist_error = 0.2_r8, &
- ncep_marine_altim_error = 1.6_r8
-
-real(r8), parameter :: ncep_land_wind_error = 3.5_r8, &
- ncep_land_temp_error = 2.5_r8, &
- ncep_land_moist_error = 0.2_r8, &
- ncep_land_altim_error = 1.0_r8
-
-real(r8), parameter :: ncep_acars_wind_error = 3.0_r8, &
- ncep_acars_moist_error = 0.20_r8
-
-real(r8), parameter :: ncep_rawin_sfcpres_error = 1.0_r8, &
- ncep_rawin_moist_error = 0.20_r8
-
-real(r8), parameter :: ncep_tc_pos_error = 0.1_r8, &
- ncep_tc_pmin_error = 2.0_r8, &
- ncep_tc_wmax_error = 3.0_r8
-
-public :: ncep_marine_wind_error, &
- ncep_marine_temp_error, &
- ncep_marine_moist_error, &
- ncep_marine_altim_error
-
-public :: ncep_land_wind_error, &
- ncep_land_temp_error, &
- ncep_land_moist_error, &
- ncep_land_altim_error
-
-public :: ncep_acars_wind_error, &
- ncep_acars_temp_error, &
- ncep_acars_moist_error
-
-public :: ncep_cloud_wind_error, &
- ncep_wv_wind_error
-
-public :: ncep_rawin_temp_error, &
- ncep_rawin_wind_error, &
- ncep_rawin_sfcpres_error, &
- ncep_rawin_moist_error
-
-public :: ncep_tc_pos_error, &
- ncep_tc_pmin_error, &
- ncep_tc_wmax_error
-
-contains
-
-
-function ncep_acars_temp_error(pres)
-
-real(r8), intent(in) :: pres
-
-real(r8) :: ncep_acars_temp_error
-
-if ( pres <= 800.0_r8 ) then
- ncep_acars_temp_error = 1.00_r8
-elseif ( pres <= 850.0_r8 ) then
- ncep_acars_temp_error = 1.12_r8
-elseif ( pres <= 900.0_r8 ) then
- ncep_acars_temp_error = 1.24_r8
-elseif ( pres <= 950.0_r8 ) then
- ncep_acars_temp_error = 1.35_r8
-elseif ( pres <= 1100.0_r8 ) then
- ncep_acars_temp_error = 1.47_r8
-else
- print*,'bad pressure level',pres
- stop
-end if
-
-return
-end function ncep_acars_temp_error
-
-
-function ncep_cloud_wind_error(pres)
-
-real(r8), intent(in) :: pres ! (mb)
-
-real(r8) :: ncep_cloud_wind_error
-
-if ( pres <= 250.0_r8 ) then
- ncep_cloud_wind_error = 5.0_r8
- return
-else if ( pres <= 300.0_r8 ) then
- ncep_cloud_wind_error = 4.6_r8
- return
-else if ( pres <= 350.0_r8 ) then
- ncep_cloud_wind_error = 4.3_r8
- return
-else if ( pres <= 400.0_r8 ) then
- ncep_cloud_wind_error = 4.0_r8
- return
-else if ( pres <= 450.0_r8 ) then
- ncep_cloud_wind_error = 3.0_r8
- return
-else if ( pres <= 500.0_r8 ) then
- ncep_cloud_wind_error = 2.1_r8
- return
-else if ( pres <= 600.0_r8 ) then
- ncep_cloud_wind_error = 2.0_r8
- return
-else if ( pres <= 700.0_r8 ) then
- ncep_cloud_wind_error = 1.9_r8
- return
-else if ( pres <= 1100.0_r8 ) then
- ncep_cloud_wind_error = 1.8_r8
- return
-else
- print*,'bad pressure level',pres
- stop
-end if
-
-return
-end function ncep_cloud_wind_error
-
-
-function ncep_wv_wind_error(pres)
-
-real(r8), intent(in) :: pres ! (mb)
-
-real(r8) :: ncep_wv_wind_error
-
-if ( pres <= 250.0_r8 ) then
- ncep_wv_wind_error = 7.0_r8
- return
-else if ( pres <= 300.0_r8 ) then
- ncep_wv_wind_error = 6.6_r8
- return
-else if ( pres <= 350.0_r8 ) then
- ncep_wv_wind_error = 6.3_r8
- return
-else if ( pres <= 400.0_r8 ) then
- ncep_wv_wind_error = 6.0_r8
- return
-else if ( pres <= 450.0_r8 ) then
- ncep_wv_wind_error = 5.0_r8
- return
-else if ( pres <= 500.0_r8 ) then
- ncep_wv_wind_error = 4.1_r8
- return
-else if ( pres <= 600.0_r8 ) then
- ncep_wv_wind_error = 4.0_r8
- return
-else if ( pres <= 700.0_r8 ) then
- ncep_wv_wind_error = 3.9_r8
- return
-else if ( pres <= 1100.0_r8 ) then
- ncep_wv_wind_error = 3.8_r8
- return
-else
- print*,'bad pressure level',pres
- stop
-end if
-
-return
-end function ncep_wv_wind_error
-
-
-function ncep_rawin_temp_error(pres)
-
-real(r8), intent(in) :: pres ! (mb)
-
-real(r8) :: ncep_rawin_temp_error
-
-if ( pres <= 10.0_r8 ) then
- ncep_rawin_temp_error = 1.50_r8
- return
-else if ( pres <= 20.0_r8 ) then
- ncep_rawin_temp_error = 1.25_r8
- return
-else if ( pres <= 30.0_r8 ) then
- ncep_rawin_temp_error = 1.00_r8
- return
-else if ( pres <= 40.0_r8 ) then
- ncep_rawin_temp_error = 0.95_r8
- return
-else if ( pres <= 50.0_r8 ) then
- ncep_rawin_temp_error = 0.90_r8
- return
-else if ( pres <= 100.0_r8 ) then
- ncep_rawin_temp_error = 0.80_r8
- return
-else if ( pres <= 150.0_r8 ) then
- ncep_rawin_temp_error = 1.00_r8
- return
-else if ( pres <= 250.0_r8 ) then
- ncep_rawin_temp_error = 1.20_r8
- return
-else if ( pres <= 300.0_r8 ) then
- ncep_rawin_temp_error = 0.90_r8
- return
-else if ( pres <= 850.0_r8 ) then
- ncep_rawin_temp_error = 0.80_r8
- return
-else if ( pres <= 900.0_r8 ) then
- ncep_rawin_temp_error = 0.90_r8
- return
-else if ( pres <= 950.0_r8 ) then
- ncep_rawin_temp_error = 1.10_r8
- return
-else if ( pres <= 1100.0_r8 ) then
- ncep_rawin_temp_error = 1.20_r8
- return
-else
- print*,'bad pressure level',pres
- stop
-end if
-
-return
-end function ncep_rawin_temp_error
-
-
-function ncep_rawin_wind_error(pres)
-
-real(r8), intent(in) :: pres ! (mb)
-
-real(r8) :: ncep_rawin_wind_error
-
-if ( pres <= 100.0_r8 ) then
- ncep_rawin_wind_error = 2.1_r8
- return
-else if ( pres <= 150.0_r8 ) then
- ncep_rawin_wind_error = 2.4_r8
- return
-else if ( pres <= 200.0_r8 ) then
- ncep_rawin_wind_error = 2.7_r8
- return
-else if ( pres <= 250.0_r8 ) then
- ncep_rawin_wind_error = 3.2_r8
- return
-else if ( pres <= 300.0_r8 ) then
- ncep_rawin_wind_error = 3.0_r8
- return
-else if ( pres <= 350.0_r8 ) then
- ncep_rawin_wind_error = 2.8_r8
- return
-else if ( pres <= 400.0_r8 ) then
- ncep_rawin_wind_error = 2.6_r8
- return
-else if ( pres <= 450.0_r8 ) then
- ncep_rawin_wind_error = 2.3_r8
- return
-else if ( pres <= 500.0_r8 ) then
- ncep_rawin_wind_error = 2.1_r8
- return
-else if ( pres <= 550.0_r8 ) then
- ncep_rawin_wind_error = 2.0_r8
- return
-else if ( pres <= 600.0_r8 ) then
- ncep_rawin_wind_error = 1.9_r8
- return
-else if ( pres <= 650.0_r8 ) then
- ncep_rawin_wind_error = 1.8_r8
- return
-else if ( pres <= 800.0_r8 ) then
- ncep_rawin_wind_error = 1.6_r8
- return
-else if ( pres <= 950.0_r8 ) then
- ncep_rawin_wind_error = 1.5_r8
- return
-else if ( pres <= 1100.0_r8 ) then
- ncep_rawin_wind_error = 1.4_r8
- return
-else
- print*,'bad pressure level',pres
- stop
-end if
-
-return
-end function ncep_rawin_wind_error
-
-
-end module ncep_obs_err_mod
Modified: DART/trunk/observations/MADIS/work/path_names_convert_madis_acars
===================================================================
--- DART/trunk/observations/MADIS/work/path_names_convert_madis_acars 2009-04-29 21:02:50 UTC (rev 3831)
+++ DART/trunk/observations/MADIS/work/path_names_convert_madis_acars 2009-04-30 23:05:42 UTC (rev 3832)
@@ -1,5 +1,5 @@
observations/MADIS/convert_madis_acars.f90
-observations/MADIS/ncep_obs_err_mod.f90
+observations/obs_error/ncep_obs_err_mod.f90
observations/MADIS/meteor_mod.f90
location/threed_sphere/location_mod.f90
obs_sequence/obs_sequence_mod.f90
Modified: DART/trunk/observations/MADIS/work/path_names_convert_madis_marine
===================================================================
--- DART/trunk/observations/MADIS/work/path_names_convert_madis_marine 2009-04-29 21:02:50 UTC (rev 3831)
+++ DART/trunk/observations/MADIS/work/path_names_convert_madis_marine 2009-04-30 23:05:42 UTC (rev 3832)
@@ -1,5 +1,5 @@
observations/MADIS/convert_madis_marine.f90
-observations/MADIS/ncep_obs_err_mod.f90
+observations/obs_error/ncep_obs_err_mod.f90
observations/MADIS/meteor_mod.f90
location/threed_sphere/location_mod.f90
obs_sequence/obs_sequence_mod.f90
Modified: DART/trunk/observations/MADIS/work/path_names_convert_madis_rawin
===================================================================
--- DART/trunk/observations/MADIS/work/path_names_convert_madis_rawin 2009-04-29 21:02:50 UTC (rev 3831)
+++ DART/trunk/observations/MADIS/work/path_names_convert_madis_rawin 2009-04-30 23:05:42 UTC (rev 3832)
@@ -1,5 +1,5 @@
observations/MADIS/convert_madis_rawin.f90
-observations/MADIS/ncep_obs_err_mod.f90
+observations/obs_error/ncep_obs_err_mod.f90
observations/MADIS/meteor_mod.f90
location/threed_sphere/location_mod.f90
obs_sequence/obs_sequence_mod.f90
Modified: DART/trunk/observations/MADIS/work/path_names_convert_madis_surface
===================================================================
--- DART/trunk/observations/MADIS/work/path_names_convert_madis_surface 2009-04-29 21:02:50 UTC (rev 3831)
+++ DART/trunk/observations/MADIS/work/path_names_convert_madis_surface 2009-04-30 23:05:42 UTC (rev 3832)
@@ -1,5 +1,5 @@
observations/MADIS/convert_madis_surface.f90
-observations/MADIS/ncep_obs_err_mod.f90
+observations/obs_error/ncep_obs_err_mod.f90
observations/MADIS/meteor_mod.f90
location/threed_sphere/location_mod.f90
obs_sequence/obs_sequence_mod.f90
Deleted: DART/trunk/observations/SSEC/convert_ssec_clwnd.f90
===================================================================
--- DART/trunk/observations/SSEC/convert_ssec_clwnd.f90 2009-04-29 21:02:50 UTC (rev 3831)
+++ DART/trunk/observations/SSEC/convert_ssec_clwnd.f90 2009-04-30 23:05:42 UTC (rev 3832)
@@ -1,201 +0,0 @@
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!
-! convert_ssec_clwnd - program that reads ASCII cloud wind data from
-! CIMSS/SSEC and writes a genertic text file
-! for use in creating obs_seq files.
-!
-! created Dec. 2007 Ryan Torn, NCAR/MMM
-!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-program convert_ssec_clwnd
-
-use types_mod, only : r8
-use utilities_mod, only : get_unit
-use time_manager_mod, only : time_type, set_calendar_type, GREGORIAN, &
- increment_time, get_time, set_date, operator(-)
-use location_mod, only : VERTISPRESSURE
-use obs_sequence_mod, only : obs_sequence_type, obs_type, read_obs_seq, &
- static_init_obs_sequence, init_obs, write_obs_seq, &
- append_obs_to_seq, init_obs_sequence, get_num_obs, &
- set_copy_meta_data, set_qc_meta_data
-use meteor_mod, only : wind_dirspd_to_uv
-use ncep_obs_err_mod, only : ncep_cloud_wind_error, ncep_wv_wind_error
-use obs_kind_mod, only : SAT_U_WIND_COMPONENT, SAT_V_WIND_COMPONENT
-use netcdf
-
-implicit none
-
-character(len=15), parameter :: ssec_cloud_file = 'clwnd_input.txt'
-character(len=129), parameter :: cloud_wind_file = 'obs_seq.clwnd'
-
-integer, parameter :: nmaxwnd = 50000, & ! maximum number of vectors
- num_copies = 1, & ! number of copies in sequence
- num_qc = 1 ! number of QC entries
-
-character (len=129) :: meta_data
-character (len=80) :: junk
-character (len=19) :: datestr
-character (len=8) :: datein
-character (len=6) :: sat
-character (len=4) :: band, hourin
-
-logical :: iruse, visuse, wvuse, swiruse, file_exist
-
-integer :: in_unit, i, days, secs, nused, iyear, imonth, iday, ihour, &
- imin, isec, dsec, dday, dsecobs
-real(r8) :: obs_window, lat, lon, pres, wdir, wspd, uwnd, vwnd, oerr, &
- latu(nmaxwnd), lonu(nmaxwnd), prsu(nmaxwnd), qc
-
-type(obs_sequence_type) :: obs_seq
-type(obs_type) :: obs
-type(time_type) :: time_anal
-
-print*,'Enter the analysis time (yyyy-mm-dd_hh:mm:ss) and window (hours)'
-read*, datestr, obs_window
-print*,'Do you want to include IR, VISIBLE, WV data, and SW IR? (T/F, 4 times)'
-read*, iruse, visuse, wvuse, swiruse
-dsecobs = nint(obs_window * 3600.0_r8)
-
-call set_calendar_type(GREGORIAN)
-read(datestr(1:4), fmt='(i4)') iyear
-read(datestr(6:7), fmt='(i2)') imonth
@@ Diff output truncated at 40000 characters. @@
More information about the Dart-dev
mailing list