[Dart-dev] [7778] DART/trunk/location/threed_sphere: Update the documentation to match the code - both the default

nancy at ucar.edu nancy at ucar.edu
Mon Mar 30 11:28:55 MDT 2015


Revision: 7778
Author:   nancy
Date:     2015-03-30 11:28:54 -0600 (Mon, 30 Mar 2015)
Log Message:
-----------
Update the documentation to match the code - both the default
nml namelist file, and the html documentation.   minor revision
to the location code; give the pretty-print string one extra
digit of precision, and fix some comments in the code.  for the
box print routine, make the second argument optional for
backwards compatibility.

Modified Paths:
--------------
    DART/trunk/location/threed_sphere/location_mod.f90
    DART/trunk/location/threed_sphere/location_mod.html
    DART/trunk/location/threed_sphere/location_mod.nml

-------------- next part --------------
Modified: DART/trunk/location/threed_sphere/location_mod.f90
===================================================================
--- DART/trunk/location/threed_sphere/location_mod.f90	2015-03-30 16:36:43 UTC (rev 7777)
+++ DART/trunk/location/threed_sphere/location_mod.f90	2015-03-30 17:28:54 UTC (rev 7778)
@@ -176,6 +176,7 @@
 !                                    to one radian in horizontal
 ! vert_normalization_scale_height -> Number scale heights that give a distance 
 !                                    equivalent to one radian in horizontal
+! maintain_original_vert          -> DEPRECATED.  use the special values now.
 ! approximate_distance            -> Use a faster table lookup for the trig math.
 !                                    Works well for global models and large areas,
 !                                    and improves performance.  For smaller regions
@@ -183,7 +184,16 @@
 ! nlon                            -> Number longitude boxes for get_close_obs 
 !                                    nlon MUST BE ODD
 ! nlat                            -> Number latitude boxes for get_close_obs
+! output_box_info                 -> Useful for debugging performance problems.
+! print_box_level                 -> How much data to print out.
+! special_vert_normalization_obs_types -> Which obs types to modify the default vert
+!                                    normalization values
+! special_vert_normalization_pressure       -> must give all 4 values for each type listed
+! special_vert_normalization_heights
+! special_vert_normalization_levels
+! special_vert_normalization_scale_heights
 
+
 logical  :: horiz_dist_only                 = .true.
 real(r8) :: vert_normalization_pressure     = 100000.0_r8
 real(r8) :: vert_normalization_height       = 10000.0_r8
@@ -795,17 +805,17 @@
 ! into the return string. 
 select case  (loc%which_vert)
    case (VERTISUNDEF)
-      write(charstring, '(A,1X,A)')       trim(string1), '              Undefined'
+      write(charstring, '(A,A)')       trim(string1), '              Undefined'
    case (VERTISSURFACE)
-      write(charstring, '(A,1X,F12.5,A)') trim(string1), loc%vloc, '  surface (m)'
+      write(charstring, '(A,F13.5,A)') trim(string1), loc%vloc, ' surface (m)'
    case (VERTISLEVEL)
-      write(charstring, '(A,1X,F5.0,A)')  trim(string1), loc%vloc, '         level'
+      write(charstring, '(A,F6.0,A)')  trim(string1), loc%vloc, '        level'
    case (VERTISPRESSURE)
-      write(charstring, '(A,1X,F12.7,A)') trim(string1), loc%vloc / 100.0_r8, '  hPa'
+      write(charstring, '(A,F13.7,A)') trim(string1), loc%vloc / 100.0_r8, ' hPa'
    case (VERTISHEIGHT)
-      write(charstring, '(A,1X,F12.7,A)') trim(string1), loc%vloc / 1000.0_r8, '  km'
+      write(charstring, '(A,F13.7,A)') trim(string1), loc%vloc / 1000.0_r8, ' km'
    case (VERTISSCALEHEIGHT)
-      write(charstring, '(A,1X,F12.7,A)') trim(string1), loc%vloc, '  scale ht'
+      write(charstring, '(A,F13.7,A)') trim(string1), loc%vloc, ' scale ht'
    case default
       write(msgstring, *) 'unrecognized key for vertical type: ', loc%which_vert
       call error_handler(E_ERR, 'write_location', msgstring, source, revision, revdate)
@@ -1685,8 +1695,8 @@
       call error_handler(E_ERR, 'get_close_obs', msgstring, source, revision, revdate, &
                          text2='optional arg "dist" not present; we are returning a superset of close locations', &
                          text3='the exhaustive search should find an equal or lesser number of locations')
-   endif
 endif
+endif
 !--------------------End of verify by comparing to exhaustive search --------------
 
 end subroutine get_close_obs
@@ -2145,12 +2155,12 @@
 ! dump from all mpi tasks in a format that can be plotted with matlab.
 
 type(get_close_type), intent(in) :: gc
-integer, intent(in)              :: tt
+integer, intent(in), optional    :: tt
 integer, intent(in), optional    :: amount
 
-integer :: i, j, k, first, index, mytask, alltasks
+integer :: i, j, k, first, index, mytask, alltasks, whichtt
 integer :: sample, nfull, nempty, howmuch, total, maxcount, maxi, maxj
-logical :: tickmark(gc%gtt(tt)%num), iam0
+logical :: tickmark(gc%gtt(1)%num), iam0
 real(r8) :: lon_cen, lat_cen
 
 logical, save :: write_now = .true.
@@ -2161,7 +2171,15 @@
 ! cumulative times through this routine
 been_called = been_called + 1
 
-! second arg is now an int, not logical, and means:
+! second arg is optional, defaults to 1, and selects which
+! of the cutoff structs to print
+if (present(tt)) then
+   whichtt = tt
+else
+   whichtt = 1
+endif
+
+! third arg is now an int, not logical, and means:
 ! 0 = very terse, only box summary (default).  
 ! 1 = structs and first part of arrays.
 ! 2 = all parts of all arrays.
@@ -2192,7 +2210,7 @@
 ! locations from the state vector in one set of boxes, but just a few
 ! locations from the locations in another.  this lets you turn off
 ! the debugging level for the large set and leave it on for the small.
-!if (gc%gtt(tt)%num > 100) howmuch = 0
+!if (gc%gtt(whichtt)%num > 100) howmuch = 0
 
 ! print the get_close_type derived type values
 
@@ -2200,46 +2218,46 @@
    write(msgstring,*) 'get_close_type values:'
    call error_handler(E_MSG, 'loc', msgstring)
 
-   write(msgstring,*) ' num = ', gc%gtt(tt)%num
+   write(msgstring,*) ' num = ', gc%gtt(whichtt)%num
    call error_handler(E_MSG, 'loc', msgstring)
 
    write(msgstring,*) ' nlon, nlat = ', nlon, nlat
    call error_handler(E_MSG, 'loc', msgstring)
 
-   write(msgstring,"(A,F12.6)") ' maxdist = ', gc%gtt(tt)%maxdist
+   write(msgstring, "(A,F12.6)") ' maxdist = ', gc%gtt(whichtt)%maxdist
    call error_handler(E_MSG, 'loc', msgstring)
-   write(msgstring, "(A,3(F12.6))") ' latbox: bot, top, width = ', gc%gtt(tt)%bot_lat, gc%gtt(tt)%top_lat, gc%gtt(tt)%lat_width
+   write(msgstring, "(A,3(F12.6))") ' latbox: bot, top, width = ', gc%gtt(whichtt)%bot_lat, gc%gtt(whichtt)%top_lat, gc%gtt(whichtt)%lat_width
    call error_handler(E_MSG, 'loc', msgstring)
-   write(msgstring, "(A,3(F12.6))") ' lonbox: bot, top, width = ', gc%gtt(tt)%bot_lon, gc%gtt(tt)%top_lon, gc%gtt(tt)%lon_width
+   write(msgstring, "(A,3(F12.6))") ' lonbox: bot, top, width = ', gc%gtt(whichtt)%bot_lon, gc%gtt(whichtt)%top_lon, gc%gtt(whichtt)%lon_width
    call error_handler(E_MSG, 'loc', msgstring)
 
-   write(msgstring,"(A,F12.6)") ' maxdist = ', RAD2DEG*gc%gtt(tt)%maxdist
+   write(msgstring, "(A,F12.6)") ' maxdist = ', RAD2DEG*gc%gtt(whichtt)%maxdist
    call error_handler(E_MSG, 'loc', msgstring)
-   write(msgstring, "(A,3(F12.6))") ' latbox: bot, top, width = ', RAD2DEG*gc%gtt(tt)%bot_lat, RAD2DEG*gc%gtt(tt)%top_lat, RAD2DEG*gc%gtt(tt)%lat_width
+   write(msgstring, "(A,3(F12.6))") ' latbox: bot, top, width = ', RAD2DEG*gc%gtt(whichtt)%bot_lat, RAD2DEG*gc%gtt(whichtt)%top_lat, RAD2DEG*gc%gtt(whichtt)%lat_width
    call error_handler(E_MSG, 'loc', msgstring)
-   write(msgstring, "(A,3(F12.6))") ' lonbox: bot, top, width = ', RAD2DEG*gc%gtt(tt)%bot_lon, RAD2DEG*gc%gtt(tt)%top_lon, RAD2DEG*gc%gtt(tt)%lon_width
+   write(msgstring, "(A,3(F12.6))") ' lonbox: bot, top, width = ', RAD2DEG*gc%gtt(whichtt)%bot_lon, RAD2DEG*gc%gtt(whichtt)%top_lon, RAD2DEG*gc%gtt(whichtt)%lon_width
    call error_handler(E_MSG, 'loc', msgstring)
 
-   write(msgstring,*) ' lon_cyclic = ', gc%gtt(tt)%lon_cyclic
+   write(msgstring,*) ' lon_cyclic = ', gc%gtt(whichtt)%lon_cyclic
    call error_handler(E_MSG, 'loc', msgstring)
 endif
 
 ! this one can be very large.   print only the first nth unless
 ! instructed otherwise.  (print n+1 because 1 more value fits on
 ! the line because it prints ( i ) and not ( i, j ) like the others.)
-if (allocated(gc%gtt(tt)%loc_box)) then
-   i = size(gc%gtt(tt)%loc_box,1)
-   if (i/= gc%gtt(tt)%num) then
-      write(msgstring,*) ' warning: size of loc_box incorrect, nlocs, i =', gc%gtt(tt)%num, i
+if (allocated(gc%gtt(whichtt)%loc_box)) then
+   i = size(gc%gtt(whichtt)%loc_box,1)
+   if (i/= gc%gtt(whichtt)%num) then
+      write(msgstring,*) ' warning: size of loc_box incorrect, nlocs, i =', gc%gtt(whichtt)%num, i
       call error_handler(E_MSG, 'locations_mod', msgstring)
    endif
    if (howmuch > 1) then
       ! DEBUG
-      write(msgstring,"(A,I8,A,36(I8,1X))") ' loc_box(',i,') =', gc%gtt(tt)%loc_box(1:min(i,36))  ! (nlocs)
-      !write(msgstring,*) ' loc_box(',i,') =', gc%gtt(tt)%loc_box    ! (nlocs)
+      write(msgstring,"(A,I8,A,36(I8,1X))") ' loc_box(',i,') =', gc%gtt(whichtt)%loc_box(1:min(i,36))  ! (nlocs)
+      !write(msgstring,*) ' loc_box(',i,') =', gc%gtt(whichtt)%loc_box    ! (nlocs)
       call error_handler(E_MSG, 'locations_mod', msgstring)
    else if(howmuch > 0) then
-      write(msgstring,*) ' loc_box(',i,') =', gc%gtt(tt)%loc_box(1:min(i,sample+1))
+      write(msgstring,*) ' loc_box(',i,') =', gc%gtt(whichtt)%loc_box(1:min(i,sample+1))
       call error_handler(E_MSG, 'locations_mod', msgstring)
       write(msgstring,*) '  <rest of loc_box omitted>'
       call error_handler(E_MSG, 'locations_mod', msgstring)
@@ -2253,9 +2271,9 @@
 
 ! like loc_box, this one can be very large.   print only the first nth unless
 ! instructed otherwise
-if (allocated(gc%gtt(tt)%start)) then
-   i = size(gc%gtt(tt)%start,1)
-   j = size(gc%gtt(tt)%start,2)
+if (allocated(gc%gtt(whichtt)%start)) then
+   i = size(gc%gtt(whichtt)%start,1)
+   j = size(gc%gtt(whichtt)%start,2)
    if ((i /= nlon) .or. (j /= nlat)) then
       write(msgstring,*) ' warning: size of start incorrect, nlon, nlat, i, j =', nlon, nlat, i, j
       call error_handler(E_MSG, 'locations_mod', msgstring)
@@ -2264,11 +2282,11 @@
       write(msgstring,*) ' start(',i,j,') ='              ! (nlon, nlat)
       call error_handler(E_MSG, 'locations_mod', msgstring)
       do k=1, j
-         write(msgstring,"(36(I8,1X))") gc%gtt(tt)%start(1:min(i,36), k)
+         write(msgstring,"(36(I8,1X))") gc%gtt(whichtt)%start(1:min(i,36), k)
          call error_handler(E_MSG, 'locations_mod', msgstring)
       enddo
    else if (howmuch > 0) then
-      write(msgstring,*) ' start(',i,j,') =', gc%gtt(tt)%start(1:min(i,sample), 1)
+      write(msgstring,*) ' start(',i,j,') =', gc%gtt(whichtt)%start(1:min(i,sample), 1)
       call error_handler(E_MSG, 'locations_mod', msgstring)
       write(msgstring,*) '  <rest of start omitted>'
       call error_handler(E_MSG, 'locations_mod', msgstring)
@@ -2281,9 +2299,9 @@
 endif
 
 ! as above, print only first n unless second arg is .true.
-if (allocated(gc%gtt(tt)%lon_offset)) then
-   i =  size(gc%gtt(tt)%lon_offset,1)
-   j =  size(gc%gtt(tt)%lon_offset,2)
+if (allocated(gc%gtt(whichtt)%lon_offset)) then
+   i =  size(gc%gtt(whichtt)%lon_offset,1)
+   j =  size(gc%gtt(whichtt)%lon_offset,2)
    if ((i /= nlat) .or. (j /= nlat)) then
       write(msgstring,*) ' warning: size of lon_offset incorrect, nlat, i, j =', nlat, i, j
       call error_handler(E_MSG, 'locations_mod', msgstring)
@@ -2292,11 +2310,11 @@
       write(msgstring,*) ' lon_offset(',i,j,') ='                 ! (nlat, nlat)
       call error_handler(E_MSG, 'locations_mod', msgstring)
       do k=1, j
-         write(msgstring,"(36(I8,1X))") gc%gtt(tt)%lon_offset(1:min(i,36), k) 
+         write(msgstring,"(36(I8,1X))") gc%gtt(whichtt)%lon_offset(1:min(i,36), k) 
          call error_handler(E_MSG, 'locations_mod', msgstring)
       enddo
    else if (howmuch > 0) then
-      write(msgstring,*) ' lon_offset(',i,j,') =', gc%gtt(tt)%lon_offset(1:min(i,sample), 1)
+      write(msgstring,*) ' lon_offset(',i,j,') =', gc%gtt(whichtt)%lon_offset(1:min(i,sample), 1)
       call error_handler(E_MSG, 'locations_mod', msgstring)
       write(msgstring,*) '  <rest of lon_offset omitted>'
       call error_handler(E_MSG, 'locations_mod', msgstring)
@@ -2309,9 +2327,9 @@
 endif
 
 ! as above, print only first n unless second arg is .true.
-if (allocated(gc%gtt(tt)%count)) then
-   i = size(gc%gtt(tt)%count,1)
-   j = size(gc%gtt(tt)%count,2)
+if (allocated(gc%gtt(whichtt)%count)) then
+   i = size(gc%gtt(whichtt)%count,1)
+   j = size(gc%gtt(whichtt)%count,2)
    if ((i /= nlon) .or. (j /= nlat)) then
       write(msgstring,*) ' warning: size of count incorrect, nlon, nlat, i, j =', &
                       nlon, nlat, i, j
@@ -2321,11 +2339,11 @@
       write(msgstring,*) ' count(',i,j,') ='              ! (nlon, nlat)
       call error_handler(E_MSG, 'locations_mod', msgstring)
       do k=1, j
-         write(msgstring,"(36(I8,1X))") gc%gtt(tt)%count(1:min(i,36), k) 
+         write(msgstring,"(36(I8,1X))") gc%gtt(whichtt)%count(1:min(i,36), k) 
          call error_handler(E_MSG, 'locations_mod', msgstring)
       enddo
    else if (howmuch > 0) then
-      write(msgstring,*) ' count(',i,j,') =', gc%gtt(tt)%count(1:min(i,sample), 1)
+      write(msgstring,*) ' count(',i,j,') =', gc%gtt(whichtt)%count(1:min(i,sample), 1)
       call error_handler(E_MSG, 'locations_mod', msgstring)
       write(msgstring,*) '  <rest of count omitted>'
       call error_handler(E_MSG, 'locations_mod', msgstring)
@@ -2348,10 +2366,10 @@
 
 do i=1, nlon
    do j=1, nlat
-      first = gc%gtt(tt)%start(i, j)
-      do k=1, gc%gtt(tt)%count(i, j)
+      first = gc%gtt(whichtt)%start(i, j)
+      do k=1, gc%gtt(whichtt)%count(i, j)
          index = first + k - 1
-         if ((index < 1) .or. (index > gc%gtt(tt)%num)) then
+         if ((index < 1) .or. (index > gc%gtt(whichtt)%num)) then
             write(msgstring, *) 'exiting at first bad value; could be more'
             call error_handler(E_MSG, 'locations_mod', msgstring)
             write(msgstring, *) 'bad loc list index, in box: ', index, i, j
@@ -2369,7 +2387,7 @@
    enddo
 enddo
 
-do i=1, gc%gtt(tt)%num
+do i=1, gc%gtt(whichtt)%num
   if (.not. tickmark(i)) then
      write(msgstring, *) 'exiting at first bad value; could be more'
      call error_handler(E_MSG, 'locations_mod', msgstring)
@@ -2401,19 +2419,19 @@
 
 do i=1, nlon
    if (howmuch == -8) then
-      lon_cen = gc%gtt(tt)%bot_lon + ((i-1)*gc%gtt(tt)%lon_width) + (gc%gtt(tt)%lon_width/2.0)
+      lon_cen = gc%gtt(whichtt)%bot_lon + ((i-1)*gc%gtt(whichtt)%lon_width) + (gc%gtt(whichtt)%lon_width/2.0)
       write(funit, '(A,I2,A,I4,A,F12.9,A)') 'xlocs(', i, ',', mytask+1, ') = ',  lon_cen, ';'
    endif
    do j=1, nlat
       if (howmuch == -8 .and. i==1) then
-         lat_cen = gc%gtt(tt)%bot_lat + ((j-1)*gc%gtt(tt)%lat_width) + (gc%gtt(tt)%lat_width/2.0)
+         lat_cen = gc%gtt(whichtt)%bot_lat + ((j-1)*gc%gtt(whichtt)%lat_width) + (gc%gtt(whichtt)%lat_width/2.0)
          write(funit, '(A,I2,A,I4,A,F12.9,A)') 'ylocs(', j, ',', mytask+1, ') = ',  lat_cen, ';'
       endif
-      if (gc%gtt(tt)%count(i, j) > 0) then
+      if (gc%gtt(whichtt)%count(i, j) > 0) then
          nfull = nfull + 1
-         total = total + gc%gtt(tt)%count(i, j)
-         if (gc%gtt(tt)%count(i, j) > maxcount) then
-            maxcount = gc%gtt(tt)%count(i, j)
+         total = total + gc%gtt(whichtt)%count(i, j)
+         if (gc%gtt(whichtt)%count(i, j) > maxcount) then
+            maxcount = gc%gtt(whichtt)%count(i, j)
             maxi = i
             maxj = j
          endif
@@ -2423,7 +2441,7 @@
       ! output for grid boxes; in matlab-friendly format
       if (howmuch == -8) then
          write(funit, '(A,I2,A,I2,A,I4,A,I8,A)') 'boxes(', i, ', ', j, &
-                                ',', mytask+1, ') = ', gc%gtt(tt)%count(i, j), ';'
+                                ',', mytask+1, ') = ', gc%gtt(whichtt)%count(i, j), ';'
       endif
    enddo
 enddo

Modified: DART/trunk/location/threed_sphere/location_mod.html
===================================================================
--- DART/trunk/location/threed_sphere/location_mod.html	2015-03-30 16:36:43 UTC (rev 7777)
+++ DART/trunk/location/threed_sphere/location_mod.html	2015-03-30 17:28:54 UTC (rev 7778)
@@ -108,9 +108,9 @@
 <em class=code>
 call get_close_maxdist_init()  ! is called before get_close_obs_init()
 call get_close_obs_init()
-
+...
 call get_close_obs()           ! called many, many times
-
+...
 call get_close_obs_destroy()
 </em>
 </pre>
@@ -189,7 +189,7 @@
 </P>
 <H4>Horizontal Distance Only</H4>
 <P>
-If <em>horiz_distance_only</em> is .true. in the namelist, then the
+If <em>horiz_distance_only</em> is .true. in the namelist then the
 vertical coordinate is ignored and only the great-circle distance
 between the two locations is computed, as if they were both on the
 surface of the sphere. 
@@ -349,8 +349,13 @@
    approximate_distance            = .false.,
    nlon                            = 71,
    nlat                            = 36,
-   output_box_info     = .false.,
-   maintain_original_vert          = .false.,
+   output_box_info                 = .false.,
+   special_vert_normalization_obs_types     = ''
+   special_vert_normalization_pressures     = 100000.0
+   special_vert_normalization_heights       = 10000.0
+   special_vert_normalization_levels        = 20.0
+   special_vert_normalization_scale_heights = 5.0
+   <em class=removed>maintain_original_vert = .false.</em>
 /
 </pre>
 </div>
@@ -374,55 +379,65 @@
 <TBODY valign=top>
 
 <TR><TD>horiz_dist_only</TD>
-<TD>logical</TD>
-<TD>Only compute horizontal distance component?
+    <TD>logical</TD>
+    <TD>If .TRUE. compute great-circle distance using the horizontal distance component only.
+If .FALSE. compute distances by including the vertical and horizontal separation.
+All distances are computed in radians; the corresponding vertical normalization
+factors are used to compute the vertical distance.<br>
+The vertical coordinate system must be the same for both locations in order
+to compute a distance.  However, if either location is VERTISUNDEF, or both are
+VERTISSURFACE, only a horizontal distance is computed.  For any other combination
+of vertical coordinate systems this routine will fail because it cannot convert
+between vertical coordinate systems without model-specific information.
+The model_mod interface code may supply a get_close_obs() routine to intercept 
+and convert the vertical coordinates before calling this get_close_obs() routine.
 </TD></TR>
 
 <TR><TD>vert_normalization_pressure</TD>
     <TD>real(r8)</TD>
-    <TD>How many pascals should be equivalent distance to one radian? 
+    <TD>The number of pascals equivalent to a horizontal
+distance of one radian.
 </TD></TR>
 
 <TR><TD>vert_normalization_height</TD>
     <TD>real(r8)</TD>
-    <TD>How many geopotential meters should be equal to one radian?
+    <TD>The number of meters equivalent to a horizontal
+distance of one radian.
 </TD></TR>
 
 <TR><TD>vert_normalization_scale_height</TD>
     <TD>real(r8)</TD>
-    <TD>How many scale heights should be equal to one radian? 
+    <TD>The number of scale heights equivalent to a horizontal
+distance of one radian.
 </TD></TR>
 
 <TR><TD>vert_normalization_level</TD>
     <TD>real(r8)</TD>
-    <TD>How many model levels should be equal to one radian? 
+    <TD>The number of model levels equivalent to a horizontal
+distance of one radian.
 </TD></TR>
 
-<TR><TD>maintain_original_vert</TD>
-    <TD>logical</TD>
-    <TD>If using per-type specialized localization distances
-(see <a href="../../assim_tools/assim_tools_mod.html#Namelist">assim_tools_mod</a>)
-by default the vertical distances are altered also.  To maintain
-the original vertical scaling while changing the horizontal, set this to true.
-</TD></TR>
-
 <TR><TD>approximate_distance</TD>
     <TD>logical</TD>
     <TD> If true, uses a table lookup for fast approximate
 computation of distances on sphere. Distance computation can be
-a first order cost for some spherical problems, so this can increase
-speed significantly at a loss of some precision.
+a first order cost for some spherical problems so this can increase
+speed significantly at a loss of some precision. WARNING: This should
+be set to .FALSE. if you need to compute small distances accurately
+or you have a regional model.
 </TD></TR>
 
 <TR><TD>nlon</TD>
     <TD>integer</TD>
-    <TD> Number of boxes (bins) created in the longitude direction.  Must be 
-an odd number.   (See discussion above for more information about this item.)
+    <TD> Used internally by the search code to speed the search for
+nearby locations.  Number of boxes (bins) created in the longitude direction.  
+Must be an odd number.   (See discussion above for more information about this item.)
 </TD></TR>
 
 <TR><TD>nlat</TD>
     <TD>integer</TD>
-    <TD> Number of boxes (bins) created in the latitude direction.  (See
+    <TD> Used internally by the search code to speed the search for
+nearby locations. Number of boxes (bins) created in the latitude direction.  (See
 discussion above for more information about this item.)
 </TD></TR>
 
@@ -432,10 +447,75 @@
 the array of boxes.
 </TD></TR>
 
+<TR><TD>special_vert_normalization_obs_types</TD>
+    <TD>character(len=32), dimension(500)</TD>
+    <TD>If specified, must be a string array of observation specific types
+(e.g. RADIOSONDE_TEMPERATURE, AIRCRAFT_TEMPERATURE, etc).  For each type
+listed here a vertical normalization value must be given which overrides
+the default vertical normalization values.  Even if only one is going to
+be used, all 4 normalization values must be specified for each special type. 
+</TD></TR>
+
+<TR><TD>special_vert_normalization_pressure</TD>
+    <TD>real(r8), dimension(500)</TD>
+    <TD>The number of pascals equivalent to a horizontal
+distance of one radian, one value for each special observation type
+listed in the 'special_vert_normalization_obs_types' list. 
+</TD></TR>
+
+<TR><TD>special_vert_normalization_height</TD>
+    <TD>real(r8), dimension(500)</TD>
+    <TD>The number of geopotential meters equivalent to a horizontal
+distance of one radian, one value for each special observation type
+listed in the 'special_vert_normalization_obs_types' list. 
+</TD></TR>
+
+<TR><TD>special_vert_normalization_scale_height</TD>
+    <TD>real(r8), dimension(500)</TD>
+    <TD>The number of scale heights equivalent to a horizontal
+distance of one radian, one value for each special observation type
+listed in the 'special_vert_normalization_obs_types' list. 
+</TD></TR>
+
+<TR><TD>special_vert_normalization_level</TD>
+    <TD>real(r8), dimension(500)</TD>
+    <TD>The number of model levels equivalent to a horizontal
+distance of one radian, one value for each special observation type
+listed in the 'special_vert_normalization_obs_types' list. 
+</TD></TR>
 </TBODY> 
 </TABLE>
 </div>
 
+<P> The following item used to be in the namelist
+but has been removed since the functionality has
+been superseded by the special vertical normalizations.
+Remove it from your namelist to avoid errors.
+</P>
+
+<div>
+<TABLE border=0 cellpadding=10 width=100% summary='namelist description'>
+<THEAD align=left>
+<TR><TH> Deprecated Item </TH>
+    <TH> Type </TH>
+    <TH> Description </TH> </TR>
+</THEAD>
+
+<TBODY valign=top>
+
+<TR><TD>maintain_original_vert</TD>
+    <TD>logical</TD>
+    <TD>If using per-type specialized localization distances
+(see <a href="../../assim_tools/assim_tools_mod.html#Namelist">assim_tools_mod</a>)
+by default the vertical distances are altered also.  To maintain
+the original vertical scaling while changing the horizontal, set this to true.
+</TD></TR>
+
+</TBODY>
+</TABLE>
+</div>
+
+
 <br />
 <br />
 

Modified: DART/trunk/location/threed_sphere/location_mod.nml
===================================================================
--- DART/trunk/location/threed_sphere/location_mod.nml	2015-03-30 16:36:43 UTC (rev 7777)
+++ DART/trunk/location/threed_sphere/location_mod.nml	2015-03-30 17:28:54 UTC (rev 7778)
@@ -8,6 +8,10 @@
    nlon                            = 71,
    nlat                            = 36,
    output_box_info                 = .false.,
-   maintain_original_vert          = .false.,
+   special_vert_normalization_obs_types     = ''
+   special_vert_normalization_pressures     = 100000.0
+   special_vert_normalization_heights       = 10000.0
+   special_vert_normalization_levels        = 20.0
+   special_vert_normalization_scale_heights = 5.0
 /
 


More information about the Dart-dev mailing list