[Dart-dev] DART/branches Revision: 12305

dart at ucar.edu dart at ucar.edu
Wed Jan 10 14:28:23 MST 2018


hendric at ucar.edu
2018-01-10 14:28:21 -0700 (Wed, 10 Jan 2018)
48

can not interpolate surface obs on 3d fields.




Modified: DART/branches/recam/models/cam-fv/model_mod.f90
===================================================================
--- DART/branches/recam/models/cam-fv/model_mod.f90	2018-01-10 18:45:29 UTC (rev 12304)
+++ DART/branches/recam/models/cam-fv/model_mod.f90	2018-01-10 21:28:21 UTC (rev 12305)
@@ -761,6 +761,20 @@
 ! do the horizontal interpolation for each ensemble member
 call quad_lon_lat_evaluate(interp_handle, lon_fract, lat_fract, ens_size, &
                            quad_vals, interp_vals, status_array)
+
+! print*, 'lon_ind_below ', four_lons(1)
+! print*, 'lon_ind_above ', four_lons(2)
+! print*, 'lat_ind_below ', four_lats(2)
+! print*, 'lat_ind_above ', four_lats(3)
+! print*, 'lon_fract     ', lon_fract
+! print*, 'lat_fract     ', lat_fract
+! print*, 'quad_vals(:,1) ', quad_vals(:,1)
+! print*, 'quad_vals(:,2) ', quad_vals(:,2)
+! print*, 'quad_vals(:,3) ', quad_vals(:,3)
+! print*, 'inperp_vals(:,1) ', interp_vals(1)
+! print*, 'inperp_vals(:,2) ', interp_vals(2)
+! print*, 'inperp_vals(:,3) ', interp_vals(3)
+
 if (any(status_array /= 0)) then
    istatus(:) = 8   ! cannot evaluate in the quad
    return
@@ -878,8 +892,10 @@
                          lon_lat_vert, which_vert, quad_vals, my_status)
 type(ensemble_type), intent(in) :: state_handle
 integer,             intent(in) :: ens_size
-integer,             intent(in) :: varid, obs_qty
-integer,             intent(in) :: four_lons(4), four_lats(4)
+integer,             intent(in) :: varid
+integer,             intent(in) :: obs_qty
+integer,             intent(in) :: four_lons(4)
+integer,             intent(in) :: four_lats(4)
 real(r8),            intent(in) :: lon_lat_vert(3)
 integer,             intent(in) :: which_vert
 real(r8),           intent(out) :: quad_vals(4, ens_size) !< array of interpolated values
@@ -907,7 +923,7 @@
    do icorner=1, 4
       call find_vertical_levels(state_handle, ens_size, &
                                 four_lons(icorner), four_lats(icorner), lon_lat_vert(3), &
-                                which_vert, obs_qty, &
+                                which_vert, obs_qty, varid, &
                                 four_bot_levs(icorner, :), four_top_levs(icorner, :), &
                                 four_vert_fracts(icorner, :), my_status)
       if (any(my_status /= 0)) return
@@ -1234,7 +1250,7 @@
 !> 
 
 subroutine find_vertical_levels(ens_handle, ens_size, lon_index, lat_index, vert_val, &
-                                which_vert, obs_qty, bot_levs, top_levs, vert_fracts, my_status)
+                                which_vert, obs_qty, var_id, bot_levs, top_levs, vert_fracts, my_status)
 type(ensemble_type), intent(in)  :: ens_handle
 integer,             intent(in)  :: ens_size
 integer,             intent(in)  :: lon_index 
@@ -1242,6 +1258,7 @@
 real(r8),            intent(in)  :: vert_val
 integer,             intent(in)  :: which_vert
 integer,             intent(in)  :: obs_qty
+integer,             intent(in)  :: var_id
 integer,             intent(out) :: bot_levs(ens_size)
 integer,             intent(out) :: top_levs(ens_size)
 real(r8),            intent(out) :: vert_fracts(ens_size)
@@ -1338,10 +1355,14 @@
 
    ! 2d fields
    case(VERTISUNDEF, VERTISSURFACE)
-      bot_levs(:) = nlevels
-      top_levs(:) = nlevels - 1
-      vert_fracts(:) = 1.0_r8
-      my_status(:) = 0
+      if (get_num_dims(domain_id,var_id) == 2) then
+         bot_levs(:) = nlevels
+         top_levs(:) = nlevels - 1
+         vert_fracts(:) = 1.0_r8
+         my_status(:) = 0
+      else
+         my_status(:) = 4 ! can not get vertical levels
+      endif
 
    case default
       write(string1, *) 'unsupported vertical type: ', which_vert
@@ -1391,7 +1412,7 @@
 ! get the surface elevation from the phis, including stagger if needed
 call get_quad_values(1, lon_index, lat_index, QTY_SURFACE_ELEVATION, qty, surface_elevation)
 
-! JPH CURRENT
+! DEBUG
 !print*, 'lon lat surf elev ', lon_index, lat_index, surface_elevation
 
 ! construct a virtual temperature column, one for each ensemble member
@@ -1416,7 +1437,7 @@
 ! convert entire array to geometric height (from potential height)
 call gph2gmh(height_array, grid_data%lat%vals(lat_index))
 
-! JPH CURRENT
+! JPU DEBUG
 ! if (debug_level > 100) then
 !    do k = 1,nlevels
 !      do imember = 1, ens_size


More information about the Dart-dev mailing list