[Dart-dev] [4173] DART/trunk/observations/SSEC: Latest updates from Ryan to allow different QC algorithms, and i updated the

nancy at ucar.edu nancy at ucar.edu
Mon Nov 30 14:37:15 MST 2009


Revision: 4173
Author:   nancy
Date:     2009-11-30 14:37:15 -0700 (Mon, 30 Nov 2009)
Log Message:
-----------
Latest updates from Ryan to allow different QC algorithms, and i updated the
html to match and add a bit more detail. the doc's still a bit thin, though.

Modified Paths:
--------------
    DART/trunk/observations/SSEC/SSEC.html
    DART/trunk/observations/SSEC/convert_ssec_satwnd.f90

-------------- next part --------------
Modified: DART/trunk/observations/SSEC/SSEC.html
===================================================================
--- DART/trunk/observations/SSEC/SSEC.html	2009-11-30 21:01:31 UTC (rev 4172)
+++ DART/trunk/observations/SSEC/SSEC.html	2009-11-30 21:37:15 UTC (rev 4173)
@@ -35,6 +35,7 @@
 <A HREF="#Overview">OVERVIEW</A> / 
 <A HREF="#DataSources">DATA SOURCES</A> / 
 <A HREF="#Programs">PROGRAMS</A> /
+<A HREF="#References">REFERENCES</A> /
 <A HREF="#KnownBugs">KNOWN BUGS</A> /
 <A HREF="#FuturePlans">FUTURE PLANS</A> 
 </DIV>
@@ -50,18 +51,13 @@
 <H2>OVERVIEW</H2>
 
 <P>
-The Space Science and Engineering Center (SSEC) at University of
-Wisconsin-Madision has an online 
-<A href="http://www.ssec.wisc.edu/data">data center</A> with both
-real-time and archival weather satellite data.
+The program in this directory takes satellite wind data from the
+University of Wisconsin-Madison Space Science and Engineering
+Center, and converts it into DART format observation sequence files,
+for use in assimilating with the DART filter program.
 </P>
 
-<P>The last 2 day's worth of data is available from
-<A href="ftp://cyclone.ssec.wisc.edu/pub/fnoc">
-ftp://cyclone.ssec.wisc.edu/pub/fnoc</A>.
 
-</P>
-
 <!--==================================================================-->
 
 <A NAME="DataSources"></A>
@@ -69,10 +65,15 @@
 <H2>DATA SOURCES</H2>
 
 <P>
-
+The Space Science and Engineering Center (SSEC) at University of
+Wisconsin-Madison has an online 
+<A href="http://www.ssec.wisc.edu/data">data center</A> with both
+real-time and archival weather satellite data.
 </P>
 
-<P>
+<P>The last 2 day's worth of data is available from
+<A href="ftp://cyclone.ssec.wisc.edu/pub/fnoc">
+ftp://cyclone.ssec.wisc.edu/pub/fnoc</A>.
 
 </P>
 
@@ -83,7 +84,37 @@
 <H2>PROGRAMS</H2>
 
 <P>
+Conversion program <em class="code">convert_ssec_satwnd</em> converts the
+ascii data in the input files into a DART observation sequence file.
+Go into the <em class="code">work</em> directory and run 
+the <em class="code">quickbuild.csh</em> script to
+compile the necessary files.
+</P><P>
+The program reads standard input for the data time range,
+which types of observations to convert, and then, if quality control
+information is found in the input file, what type of quality
+control algorithm to use when deciding whether the observation
+is of good quality or not.  See the references below.
+</P>
 
+<!--==================================================================-->
+<!-- References.                                                      -->
+<!--==================================================================-->
+
+<A NAME="References"></A>
+<BR><HR><BR>
+<H2>REFERENCES</H2>
+<P>
+<UL>
+<LI>
+RF method: Velden, C. S., T. L. Olander, and S. Wanzong, 1998: The impact of multispectral GOES-8 wind information on Atlantic
+tropical cyclone track forecasts in 1995. Part I: Dataset methodology, description, and case analysis. Mon. Wea. Rev., 126, 1202-1218.
+</LI><LI>
+QI method: Holmlund, K., 1998: The utilization of statistical properties of satellite-derived atmospheric motion vectors to derive quality indicators. Wea. Forecasting, 13, 1093-1104.
+</LI><LI>
+Comparison of two methods: Holmlund, K., C.S. Velden, and M. Rohn, 2001: Enhanced Automated Quality Control Applied to High-Density Satellite-Derived Winds. Mon. Wea. Rev., 129, 517-529.
+</LI>
+</UL>
 </P>
 
 <!--==================================================================-->

Modified: DART/trunk/observations/SSEC/convert_ssec_satwnd.f90
===================================================================
--- DART/trunk/observations/SSEC/convert_ssec_satwnd.f90	2009-11-30 21:01:31 UTC (rev 4172)
+++ DART/trunk/observations/SSEC/convert_ssec_satwnd.f90	2009-11-30 21:37:15 UTC (rev 4173)
@@ -38,19 +38,21 @@
 character (len=6)   :: sat
 character (len=4)   :: band, hourin
 
-logical :: iruse, visuse, wvuse, swiruse, file_exist, qcinfile
+logical :: iruse, visuse, wvuse, swiruse, file_exist, qifile, eefile, &
+           userfqc, useqiqc, useeeqc
 
 integer :: in_unit, i, days, secs, nused, iyear, imonth, iday, ihour, & 
-           imin, isec, dsec, dday, dsecobs
-real(r8) :: obs_window, minqc, lat, lon, pres, wdir, wspd, uwnd, vwnd, oerr, &
-            latu(nmaxwnd), lonu(nmaxwnd), prsu(nmaxwnd), qc, qcin1, qcin2
+           imin, isec, dsec, dday, dsecobs, qctype
+real(r8) :: obs_window, lat, lon, pres, wdir, wspd, uwnd, vwnd, oerr, &
+            latu(nmaxwnd), lonu(nmaxwnd), prsu(nmaxwnd), qc, qcthresh, &
+            rfqc, qiqc, eeqc
 
 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), window (hours), and min. qc'
-read*, datestr, obs_window, minqc
+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)
@@ -65,11 +67,43 @@
 time_anal = set_date(iyear, imonth, iday, ihour, imin, isec)
 call get_time(time_anal, secs, days)
 
-in_unit  = get_unit()  ;  qcinfile = .false.
+qifile  = .false.  ;  eefile  = .false.
+userfqc = .false.  ;  useqiqc = .false.  ;  useeeqc = .false.  
+
+in_unit  = get_unit()
 open(unit=in_unit,  file = ssec_sat_file,  status='old')
 read(in_unit,'(a100)') header
-if ( header(75:76) == 'qi' ) qcinfile = .true.
 
+if ( header(81:82) == 'ee' ) then
+
+  print*,'Enter the QC type (0=none, 1=rf, 2=qi, 3=ee) and threshhold'
+  read*, qctype, qcthresh
+
+  select case ( qctype )
+    case (1)  !  Regression Factor QC
+      userfqc = .true.
+    case (2)  !  QI format QC
+      useqiqc = .true.
+    case (3)
+      useeeqc = .true.
+  end select
+  eefile = .true.
+
+else if ( header(75:76) == 'qi' ) then
+  
+  print*,'Enter the QC type (0=none, 1=rf, 2=qi) and threshhold' 
+  read*, qctype, qcthresh
+
+  select case ( qctype )
+    case (1)  !  Regression Factor QC
+      userfqc = .true.
+    case (2)  !  QI format QC
+      useqiqc = .true.
+  end select
+  qifile = .true.
+
+end if
+
 !  either read existing obs_seq or create a new one
 call static_init_obs_sequence()
 call init_obs(obs, num_copies, num_qc)
@@ -95,12 +129,25 @@
 nused = 0
 obsloop: do
 
-  if ( qcinfile ) then
+  if ( qifile ) then  !  QI format file
+
     read(in_unit,*,END=200) band, sat, datein, hourin, lat, lon, &
-                            pres, wspd, wdir, qcin1, qcin2
-    if ( qcin2 < minqc ) cycle obsloop
-  else
+                            pres, wspd, wdir, rfqc, qiqc
+    if ( userfqc .and. rfqc > qcthresh )  cycle obsloop
+    if ( useqiqc .and. qiqc < qcthresh )  cycle obsloop
+
+  else if ( eefile ) then  !  EE format file
+  
+    read(in_unit,*,END=200) band, sat, datein, hourin, lat, lon, &
+                            pres, wspd, wdir, rfqc, qiqc, eeqc
+    if ( userfqc .and. (rfqc > qcthresh) )  cycle obsloop
+    if ( useqiqc .and. (qiqc < qcthresh) )  cycle obsloop
+    if ( useeeqc .and. (eeqc > qcthresh) )  cycle obsloop
+
+  else  !  file without QC information
+
     read(in_unit,*,END=200) band, sat, datein, hourin, lat, lon, pres, wspd, wdir
+
   end if
 
   read(datein(1:4), fmt='(i4)') iyear
@@ -124,11 +171,11 @@
   end do
   qc = 1.0_r8
 
-  if ( trim(adjustl(band(1:2))) == 'WV' ) then
-    oerr = sat_wv_wind_error(pres)
-  else
+!  if ( trim(adjustl(band(1:2))) == 'WV' ) then
+!    oerr = sat_wv_wind_error(pres)
+!  else
     oerr = sat_wind_error(pres)
-  end if
+!  end if
 
   !  perform sanity checks on observation errors and values
   if ( oerr == missing_r8 .or. wdir < 0.0_r8 .or. wdir > 360.0_r8 .or. &


More information about the Dart-dev mailing list