[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