tem_spatial_parabol2d_for_coord Function

private function tem_spatial_parabol2d_for_coord(me, coord, n) result(res)

This function computes 2d parabola profile from coord of elements

This profile is defined by element barycentric coordinate and 2d parabola parameters. 2D parabola profile at given plane is computed in the following way:

  • Project barycentric coordinate vector in a given plane via
  • Compute spatial value using

Arguments

Type IntentOptional Attributes Name
type(tem_canonicalND_type) :: me

contains line parameters for 2d parabola

real(kind=rk), intent(in) :: coord(n,3)

barycentric Ids of an elements. 1st index goes over number of elements and 2nd index goes over x,y,z coordinates

integer, intent(in) :: n

number of return values

Return Value real(kind=rk), (n)

return value of a function


Called by

proc~~tem_spatial_parabol2d_for_coord~~CalledByGraph proc~tem_spatial_parabol2d_for_coord tem_spatial_parabol2d_for_coord interface~tem_spatial_parabol2d_for tem_spatial_parabol2d_for interface~tem_spatial_parabol2d_for->proc~tem_spatial_parabol2d_for_coord proc~tem_spatial_for_coord tem_spatial_for_coord proc~tem_spatial_for_coord->interface~tem_spatial_parabol2d_for proc~tem_spatial_for_treeids tem_spatial_for_treeIDs proc~tem_spatial_for_treeids->interface~tem_spatial_parabol2d_for proc~tem_spatial_vector_for_coord tem_spatial_vector_for_coord proc~tem_spatial_vector_for_coord->interface~tem_spatial_parabol2d_for proc~tem_spatial_vector_for_treeids tem_spatial_vector_for_treeIDs proc~tem_spatial_vector_for_treeids->interface~tem_spatial_parabol2d_for interface~tem_spatial_for tem_spatial_for interface~tem_spatial_for->proc~tem_spatial_for_coord interface~tem_spatial_for->proc~tem_spatial_for_treeids interface~tem_spatial_for->proc~tem_spatial_vector_for_coord interface~tem_spatial_for->proc~tem_spatial_vector_for_treeids proc~tem_spatial_scalar_for_index tem_spatial_scalar_for_index interface~tem_spatial_for->proc~tem_spatial_scalar_for_index proc~tem_spatial_vector_for_index tem_spatial_vector_for_index interface~tem_spatial_for->proc~tem_spatial_vector_for_index proc~tem_spatial_scalar_for_index->proc~tem_spatial_for_coord proc~tem_spatial_vector_for_index->proc~tem_spatial_vector_for_coord proc~tem_spacetime_for_coord tem_spacetime_for_coord proc~tem_spacetime_for_coord->interface~tem_spatial_for proc~tem_spacetime_for_treeids tem_spacetime_for_treeIDs proc~tem_spacetime_for_treeids->interface~tem_spatial_for proc~tem_spacetime_scalar_for_index tem_spacetime_scalar_for_index proc~tem_spacetime_scalar_for_index->interface~tem_spatial_for proc~tem_spacetime_vector_for_coord tem_spacetime_vector_for_coord proc~tem_spacetime_vector_for_coord->interface~tem_spatial_for proc~tem_spacetime_vector_for_index tem_spacetime_vector_for_index proc~tem_spacetime_vector_for_index->interface~tem_spatial_for proc~tem_spacetime_vector_for_treeids tem_spacetime_vector_for_treeIDs proc~tem_spacetime_vector_for_treeids->interface~tem_spatial_for proc~tem_spatial_scalar_storeval tem_spatial_scalar_storeVal proc~tem_spatial_scalar_storeval->interface~tem_spatial_for proc~tem_spatial_vector_storeval tem_spatial_vector_storeVal proc~tem_spatial_vector_storeval->interface~tem_spatial_for

Source Code

  function tem_spatial_parabol2d_for_coord( me, coord, n ) result(res)
    ! -------------------------------------------------------------------- !
    !> contains line parameters for 2d parabola
    type( tem_canonicalND_type ) :: me
    !> number of return values
    integer, intent(in) :: n
    !> barycentric Ids of an elements.
    !! 1st index goes over number of elements and
    !! 2nd index goes over x,y,z coordinates
    real(kind=rk), intent(in) :: coord(n,3)
    !> return value of a function
    real(kind=rk) :: res(n)
    ! -------------------------------------------------------------------- !
    real(kind=rk) :: alpha, diff(3)
    real(kind=rk) :: vecAsqr, center(3), halfdir(3)
    ! loop variable
    integer :: iDir
    ! -------------------------------------------------------------------- !

    halfdir = 0.0_rk
    do iDir = 1, 3
      if( me%active(iDir) ) halfdir = me%vec(:, iDir)/2.0_rk
    end do

    vecAsqr = dot_product(halfdir, halfdir)

    center = me%origin + halfdir
    !loop over number of return values
    do iDir = 1, n

      !distance between parabola center and barycentric coordinates
      diff = coord(iDir,:) - center

      !projection of diff in a plane on vecA
      alpha =  dot_product( diff, halfdir ) / vecAsqr

      res(iDir) = (1.0_rk - alpha) * (1.0_rk + alpha)

      if ( abs(alpha) .gt. 1.0d0 ) then
        res(iDir) = 0.0_rk
      end if

    end do

  end function tem_spatial_parabol2d_for_coord