op_obj_conv32 Function

private impure function op_obj_conv32(this, in1, in2) result(out)

Computes d(U3 U1)/dx1.

Type Bound

op_obj

Arguments

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

Differential operators utility

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

Convecting velocity: Ui

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

Velocity Uj

Return Value type(eulerian_obj_r)

Result


Calls

proc~~op_obj_conv32~~CallsGraph proc~op_obj_conv32 op_obj%op_obj_conv32 proc~eulerian_obj_init eulerian_obj_base%eulerian_obj_Init proc~op_obj_conv32->proc~eulerian_obj_init proc~eulerian_obj_updateghostcells eulerian_obj_base%eulerian_obj_UpdateGhostCells proc~op_obj_conv32->proc~eulerian_obj_updateghostcells proc~op_obj_intrp2 op_obj%op_obj_intrp2 proc~op_obj_conv32->proc~op_obj_intrp2 proc~eulerian_obj_updateghostcells_x eulerian_obj_base%eulerian_obj_UpdateGhostCells_x proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_x proc~eulerian_obj_updateghostcells_y eulerian_obj_base%eulerian_obj_UpdateGhostCells_y proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_y proc~eulerian_obj_updateghostcells_z eulerian_obj_base%eulerian_obj_UpdateGhostCells_z proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_z proc~op_obj_intrp2->proc~eulerian_obj_init cell cell proc~eulerian_obj_updateghostcells_x->cell mpi_irecv mpi_irecv proc~eulerian_obj_updateghostcells_x->mpi_irecv mpi_isend mpi_isend proc~eulerian_obj_updateghostcells_x->mpi_isend mpi_waitall mpi_waitall proc~eulerian_obj_updateghostcells_x->mpi_waitall proc~eulerian_obj_updateghostcells_y->cell proc~eulerian_obj_updateghostcells_y->mpi_irecv proc~eulerian_obj_updateghostcells_y->mpi_isend proc~eulerian_obj_updateghostcells_y->mpi_waitall proc~eulerian_obj_updateghostcells_z->cell proc~eulerian_obj_updateghostcells_z->mpi_irecv proc~eulerian_obj_updateghostcells_z->mpi_isend proc~eulerian_obj_updateghostcells_z->mpi_waitall

Source Code

    impure function op_obj_conv32(this,in1,in2) result(out)
      !> Computes d(U3 U1)/dx1.
      class(op_obj),        intent(in) :: this                                 !! Differential operators utility
      type(eulerian_obj_r), intent(in) :: in1                                  !! Convecting velocity: Ui
      type(eulerian_obj_r), intent(in) :: in2                                  !! Velocity Uj
      type(eulerian_obj_r)             :: out                                  !! Result
      ! Work variables
      type(eulerian_obj_r) :: in1c                                             !! Interpolated Ui from face to cell center
      integer :: i,j,k,n

      call in1c%Initialize('in1c',     this%block,this%parallel,0             )
      call out%Initialize('ddx3(U3U2)',this%block,this%parallel,in2%staggering)
      out = 0.0_wp

      ! Interpolate U3 from (xm,ym,z) to (x,ym,z)
      in1c = this%intrp2(in1)
      call in1c%UpdateGhostCells

      associate (lo => this%block%lo,  hi => this%block%hi)
       do k=lo(3),hi(3)
         do j=lo(2),hi(2)
           do i=lo(1),hi(1)
             do n = -this%st+1, this%st
               out%cell(i,j,k) = out%cell(i,j,k) + this%c_d1dx3 (n,k)*in1c%cell(i,j,k+n)* &
                                                 0.5_wp*(in2%cell(i,j,k+2*n-1)+in2%cell(i,j,k))
             end do
           end do
         end do
       end do
      end associate

      return
    end function op_obj_conv32