9 use fckit_mpi_module,              
only: fckit_mpi_comm
 
   12 use datetime_mod,                   
only: datetime
 
   13 use type_bump,                      
only: bump_type
 
   14 use unstructured_interpolation_mod, 
only: unstrc_interp
 
   17 use ufo_locs_mod,                   
only: ufo_locs, ufo_locs_time_mask
 
   18 use ufo_geovals_mod,                
only: ufo_geovals
 
   36   integer                   :: isc, iec, jsc, jec, npz, ngrid
 
   37   character(len=2048)       :: interp_method
 
   39   type(unstrc_interp)       :: unsinterp
 
   40   type(fckit_mpi_comm)      :: comm
 
   63 type(ufo_locs),                
intent(in)    :: locs
 
   72 self%ngrid = geom%ngrid
 
   73 self%comm = geom%f_comm
 
   77 self%interp_method = trim(geom%interp_method)
 
   78 if (trim(self%interp_method) == 
'bump') 
then 
   79   call self%bump%setup(geom%f_comm, geom%isc, geom%iec, geom%jsc, geom%jec, geom%npz, &
 
   80                        geom%grid_lon(geom%isc:geom%iec, geom%jsc:geom%jec), &
 
   81                        geom%grid_lat(geom%isc:geom%iec, geom%jsc:geom%jec), &
 
   82                        locs%nlocs, locs%lon, locs%lat, 55555)
 
   86 call self%unsinterp%create( geom%f_comm, self%nnear, 
'barycent', &
 
   88                             locs%nlocs, locs%lat, locs%lon )
 
   98 if (trim(self%interp_method) == 
'bump') 
call self%bump%delete()
 
  100 call self%unsinterp%delete()
 
  111 type(datetime),               
intent(in)    :: t1
 
  112 type(datetime),               
intent(in)    :: t2
 
  113 type(ufo_locs),               
intent(in)    :: locs
 
  114 type(ufo_geovals),            
intent(inout) :: geovals
 
  116 integer :: gv, n, ji, jj, jlev
 
  118 character(len=field_clen) :: fv3jedi_name
 
  119 logical, 
allocatable :: time_mask(:)
 
  120 real(kind=
kind_real), 
allocatable :: field_us(:)
 
  121 real(kind=
kind_real), 
allocatable :: geovals_all(:,:), geovals_tmp(:)
 
  125 call ufo_locs_time_mask(locs, t1, t2, time_mask)
 
  130 if (.not. geovals%linit) 
then 
  131   do gv = 1, geovals%nvar
 
  132     geovals%geovals(gv)%nval = fields(gv)%npz
 
  133     allocate(geovals%geovals(gv)%vals(geovals%geovals(gv)%nval, geovals%geovals(gv)%nlocs))
 
  134     geovals%geovals(gv)%vals = 0.0_kind_real
 
  137 geovals%linit = .true.
 
  142 allocate(field_us(self%ngrid))
 
  143 allocate(geovals_all(locs%nlocs, self%npz+1))
 
  144 allocate(geovals_tmp(locs%nlocs))
 
  146 do gv = 1, geovals%nvar
 
  151   call get_field(fields, fv3jedi_name, field)
 
  155   geovals_all = 0.0_kind_real
 
  159   if ( trim(self%interp_method) == 
'bump' .and. &
 
  160        .not.field%integerfield .and. trim(field%space)==
'magnitude' ) 
then 
  162     call self%bump%apply(field%npz, field%array, locs%nlocs, geovals_all(:,1:field%npz))
 
  166     do jlev = 1, field%npz
 
  168       do jj = field%jsc, field%jec
 
  169         do ji = field%isc, field%iec
 
  171           field_us(n) = field%array(ji, jj, jlev)
 
  177       if (.not. field%integerfield .and. trim(field%space)==
'magnitude') 
then 
  178         call self%unsinterp%apply(field_us, geovals_tmp)
 
  179       elseif (field%integerfield) 
then 
  181       elseif (trim(field%space)==
'direction') 
then 
  184         call abor1_ftn(
"fv3jedi_getvalues_mod.fill_geovals: interpolation for this kind of "// &
 
  185                        "field is not supported. FieldName: "// trim(field%fv3jedi_name))
 
  187       geovals_all(1:locs%nlocs, jlev) = geovals_tmp(1:locs%nlocs)
 
  195     if (time_mask(n)) geovals%geovals(gv)%vals(1:field%npz, n) = geovals_all(n, 1:field%npz)
 
  201 deallocate(geovals_all)
 
  202 deallocate(geovals_tmp)
 
  203 deallocate(time_mask)