[Dart-dev] DART/branches Revision: 12096

dart at ucar.edu dart at ucar.edu
Fri Nov 10 15:20:11 MST 2017


hendric at ucar.edu
2017-11-10 15:20:11 -0700 (Fri, 10 Nov 2017)
71
adding code for interpolating 3d variables that
are not in the state.




Modified: DART/branches/recam/models/cam-fv/model_mod.f90
===================================================================
--- DART/branches/recam/models/cam-fv/model_mod.f90	2017-11-10 22:18:58 UTC (rev 12095)
+++ DART/branches/recam/models/cam-fv/model_mod.f90	2017-11-10 22:20:11 UTC (rev 12096)
@@ -51,14 +51,14 @@
 ! the arguments - they will be called *from* the dart code.
 
 ! routines in this list have code in this module
-public :: static_init_model,             &
-          get_model_size,                &
-          get_state_meta_data,           &
-          model_interpolate,             & ! big todo
+public :: static_init_model,                   &
+          get_model_size,                      &
+          get_state_meta_data,                 &
+          model_interpolate,                   & ! big todo
           shortest_time_between_assimilations, &
-          nc_write_model_atts,           &
-          write_model_time,              & ! todo
-          read_model_time,               &
+          nc_write_model_atts,                 &
+          write_model_time,                    & ! todo
+          read_model_time,                     &
           end_model
 
 ! code for these routines are in other modules
@@ -91,7 +91,9 @@
 
 ! state_variables defines the contents of the state vector.
 ! each line of this input should have the form:
+!
 !    netcdf_variable_name, dart_quantity, clamp_min, clamp_max, update_variable
+!
 ! all items must be strings (even if numerical values).
 ! for no clamping, use the string 'NA'
 ! to have the assimilation change the variable use 'UPDATE', else 'NO_UPDATE'
@@ -388,7 +390,53 @@
 
 end subroutine get_values_from_varid
 
+!-----------------------------------------------------------------------
+!> this is just for 3d fields
 
+subroutine get_values_from_nonstate_fields(ens_handle, ens_size, lon_index, lat_index, lev_index, obs_quantity, vals, my_status)
+type(ensemble_type),  intent(in)  :: ens_handle
+integer,              intent(in)  :: ens_size
+integer,              intent(in)  :: lon_index
+integer,              intent(in)  :: lat_index
+integer,              intent(in)  :: lev_index(ens_size)
+integer,              intent(in)  :: obs_quantity
+real(r8),             intent(out) :: vals(ens_size)
+integer,              intent(out) :: my_status(ens_size)
+
+integer  :: imember
+real(r8) :: vals_array(grid_data%lev%nsize,ens_size)
+
+vals(:) = MISSING_R8
+
+select case (obs_quantity)
+   case (QTY_PRESSURE, QTY_GEOMETRIC_HEIGHT) 
+      if (obs_quantity == QTY_PRESSURE) then
+         call cam_pressure_levels(ens_handle, ens_size, &
+                                  lon_index, lat_index, grid_data%lev%nsize, &
+                                  vals_array, my_status)
+      else
+         call cam_height_levels(ens_handle, ens_size, &
+                                lon_index, lat_index, grid_data%lev%nsize, &
+                                vals_array, my_status) 
+      endif
+
+      if (any(my_status /= 0)) return
+
+      do imember=1,ens_size
+         vals(imember) = vals_array(lev_index(imember), imember)
+      enddo
+
+   case (QTY_VERTLEVEL)
+      vals(:)      = lev_index(:)
+      my_status(:) = 0
+
+   case default
+      print*, 'should not go here'
+
+end select
+
+end subroutine get_values_from_nonstate_fields
+
 !-----------------------------------------------------------------------
 !>
 !> Model interpolate will interpolate any DART state variable
@@ -524,6 +572,13 @@
 ! need to consider the case for 2d vs 3d variables
 numdims = get_dims_from_qty(obs_qty, varid)
 
+!>@todo FIXME need to be refactored
+! if variable is in the state
+!    do 2d and 3d
+
+! if variable is not in the state
+!    do 2d and 3d
+


More information about the Dart-dev mailing list