op_obj_intrp2 Function

private impure function op_obj_intrp2(this, in) result(out)

Interpolates in the x2-direction. Note: If input is face-centered (on x2), result is cell-centered (on x2m). If input is cell-centered (on x2m), result is face-centered (on x2).

Type Bound

op_obj

Arguments

Type IntentOptional Attributes Name
class(op_obj), intent(in) :: this

Differential operators utility

type(eulerian_obj_r), intent(in) :: in

Field to interpolate

Return Value type(eulerian_obj_r)

Result


Calls

proc~~op_obj_intrp2~~CallsGraph proc~op_obj_intrp2 op_obj%op_obj_intrp2 proc~eulerian_obj_init eulerian_obj_base%eulerian_obj_Init proc~op_obj_intrp2->proc~eulerian_obj_init

Called by

proc~~op_obj_intrp2~~CalledByGraph proc~op_obj_intrp2 op_obj%op_obj_intrp2 proc~cdifs_obj_advancesolutionib cdifs_obj_AdvanceSolutionIB proc~cdifs_obj_advancesolutionib->proc~op_obj_intrp2 proc~cdifs_obj_writeoutputdata cdifs_obj_WriteOutputData proc~cdifs_obj_writeoutputdata->proc~op_obj_intrp2 proc~op_obj_conv12 op_obj%op_obj_conv12 proc~op_obj_conv12->proc~op_obj_intrp2 proc~op_obj_conv22 op_obj%op_obj_conv22 proc~op_obj_conv22->proc~op_obj_intrp2 proc~op_obj_conv32 op_obj%op_obj_conv32 proc~op_obj_conv32->proc~op_obj_intrp2 interface~cdifs_obj_writeoutputdata cdifs_obj%cdifs_obj_WriteOutputData interface~cdifs_obj_writeoutputdata->proc~cdifs_obj_writeoutputdata proc~cdifs_obj_advancesolution cdifs_obj_AdvanceSolution proc~cdifs_obj_advancesolution->proc~cdifs_obj_advancesolutionib interface~cdifs_obj_advancesolution cdifs_obj%cdifs_obj_AdvanceSolution interface~cdifs_obj_advancesolution->proc~cdifs_obj_advancesolution proc~cdifs_obj_preparesolver cdifs_obj_PrepareSolver proc~cdifs_obj_preparesolver->interface~cdifs_obj_writeoutputdata interface~cdifs_obj_preparesolver cdifs_obj%cdifs_obj_PrepareSolver interface~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolver

Source Code

    impure function op_obj_intrp2(this,in) result(out)
      !> Interpolates in the x2-direction.
      ! Note: If input is face-centered (on x2), result is
      ! cell-centered (on x2m). If input is cell-centered (on x2m),
      ! result is face-centered (on x2).
      class(op_obj),        intent(in) :: this                                 !! Differential operators utility
      type(eulerian_obj_r), intent(in) :: in                                   !! Field to interpolate
      type(eulerian_obj_r)             :: out                                  !! Result
      ! Work variables
      integer :: i,j,k
      integer :: slo, shi

      call out%Initialize('interp-x2',this%block,this%parallel,in%staggering)

      associate (lo => this%block%lo,  hi => this%block%hi)
        select case (in%staggering)
        case (0,1,3)
          ! From xm to x
          do k=lo(3),hi(3)
            do j=lo(2),hi(2)
              do i=lo(1),hi(1)
                slo = j - this%st
                shi = j + this%st - 1

                out%cell(i,j,k)=dot_product(this%c_intrp2m(:,j),in%cell(i,slo:shi,k))
              end do
            end do
          end do
        case (2)
          ! From x to xm
          do k=lo(3),hi(3)
            do j=lo(2),hi(2)
              do i=lo(1),hi(1)
                slo = j - this%st + 1
                shi = j + this%st

                out%cell(i,j,k)=dot_product(this%c_intrp2 (:,j),in%cell(i,slo:shi,k))
              end do
            end do
          end do
        end select
      end associate

      return
    end function op_obj_intrp2