[Dart-dev] DART/branches Revision: 11730
dart at ucar.edu
dart at ucar.edu
Wed Jun 14 12:53:32 MDT 2017
nancy at ucar.edu
2017-06-14 12:53:32 -0600 (Wed, 14 Jun 2017)
106
remove ens_size array dimension and do the interpolation
in a loop. still fails right now in z2zint().
Modified: DART/branches/coamps/models/coamps_nest/coamps_interp_mod.f90
===================================================================
--- DART/branches/coamps/models/coamps_nest/coamps_interp_mod.f90 2017-06-14 18:02:12 UTC (rev 11729)
+++ DART/branches/coamps/models/coamps_nest/coamps_interp_mod.f90 2017-06-14 18:53:32 UTC (rev 11730)
@@ -27,8 +27,7 @@
get_nest_size, get_nest_level, &
in_this_nest
- use coamps_statevar_mod, only : state_variable, get_var_substate, is_sigma_level, &
- state_limits
+ use coamps_statevar_mod, only : state_variable, get_var_start, is_sigma_level
use coamps_statevec_mod, only : state_vector, find_state_variable
@@ -50,7 +49,8 @@
use obs_kind_mod
use types_mod, only : MISSING_I, &
MISSING_R8, &
- r8
+ r8, &
+ i8
use utilities_mod, only : do_output, &
E_ERR, &
E_MSG, &
@@ -157,9 +157,9 @@
! I can keep them straight:
! "values" arrays index as (neighbor, level)
! availability array index as (level, variable)
- integer, parameter :: VALUES_DIM_ENSEMBLE = 1
- integer, parameter :: VALUES_DIM_NEIGHBOR = 2
- integer, parameter :: VALUES_DIM_LEVEL = 3
+ integer, parameter :: VALUES_DIM_NEIGHBOR = 1
+ integer, parameter :: VALUES_DIM_LEVEL = 2
+ integer, parameter :: VALUES_DIM_ENSEMBLE = 3
integer, parameter :: AVAILABILITY_DIM_LEVEL = 1
integer, parameter :: AVAILABILITY_DIM_VARIABLE = 2
@@ -177,10 +177,11 @@
! NEW:
type(ensemble_type), pointer :: state_handle
integer :: ensemble_size
+ integer :: ensemble_number ! TEMP SOLUTION - slow!!!
+
type(coamps_domain), pointer :: model_domain
type(coamps_nest), pointer :: interp_nest
type(state_vector), pointer :: state_definition
- type(state_limits) :: state_limits
! Location (horizontal and vertical) of where we will interpolate
type(nest_point) :: interp_point
@@ -192,9 +193,9 @@
integer, dimension(NUM_NEIGHBORS) :: neighbors_j
! OLD Raw values - indexed by (neighbor, sigma level)
- ! Raw values - indexed by (ens_size, neighbor, sigma level)
- real(kind=r8), dimension(:,:,:), pointer :: target_values
- real(kind=r8), dimension(:,:,:), pointer :: vcoord_values
+ ! Raw values - indexed by (ens_size, neighbor, sigma level)? or (neighbor, sigma level, ensemble number)?
+ real(kind=r8), dimension(:,:), pointer :: target_values
+ real(kind=r8), dimension(:,:), pointer :: vcoord_values
! Variable availability is stored as an (# of levels) x (# of vars)
! array - if the value at (level, variable) is .true., then that
@@ -205,11 +206,11 @@
integer :: num_levels_available
! Filtered raw values only on levels that have all data available
- real(kind=r8), dimension(:,:,:), pointer :: available_target_values
- real(kind=r8), dimension(:,:,:), pointer :: available_vcoord_values
+ real(kind=r8), dimension(:,:), pointer :: available_target_values
+ real(kind=r8), dimension(:,:), pointer :: available_vcoord_values
! Results of vertical interpolation
- real(kind=r8), dimension(:,:,:), pointer :: vinterp_values
+ real(kind=r8), dimension(:,:), pointer :: vinterp_values
real(kind=r8), dimension(SINGLE_LEVEL) :: vinterp_level
! Weights for the horizontal interpolation
@@ -262,22 +263,24 @@
! IN state big ol' DART state vector
! NOW: state_handle handle to entire ensemble of state
! IN ens_size ensemble size
+ ! IN ens_num ensemble_number - FIXME: doing one at a time
! IN domain COAMPS domain to interpolate on
! IN state_def COAMPS state vector definition
! IN obs_loc DART location structure to interpolate to
! IN obs_kind integer version of raw variable type
! OUT obs_value result of interpolation
! OUT interp_worked true if interpolation was successful
- subroutine interpolate(state_handle, ens_size, domain, state_def, obs_loc, obs_kind, &
+ subroutine interpolate(state_handle, ens_size, ens_num, domain, state_def, obs_loc, obs_kind, &
obs_value, interp_worked)
type(ensemble_type), intent(in) :: state_handle
integer, intent(in) :: ens_size
+ integer, intent(in) :: ens_num
type(coamps_domain), intent(in) :: domain
type(state_vector), intent(in) :: state_def
type(location_type), intent(in) :: obs_loc
integer, intent(in) :: obs_kind
- real(kind=r8), intent(out) :: obs_value(ens_size)
- logical, optional, intent(out) :: interp_worked(ens_size)
More information about the Dart-dev
mailing list