[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