This function computes 2d parabola profile from treeIds 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:
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_canonicalND_type) | :: | me |
contains parameters for 2d parabola |
|||
integer(kind=long_k), | intent(in) | :: | treeIds(n) |
treeIds of elements in given level |
||
type(treelmesh_type), | intent(in) | :: | tree |
global treelm mesh |
||
integer, | intent(in) | :: | n |
number of return values |
return value of a function
function tem_spatial_parabol2d_for_treeIds( me, treeIds, tree, n ) result(res) ! -------------------------------------------------------------------- ! !> contains parameters for 2d parabola type( tem_canonicalND_type ) :: me !> global treelm mesh type( treelmesh_type ), intent(in) ::tree !> number of return values integer, intent(in) :: n !> treeIds of elements in given level integer(kind=long_k), intent(in) :: treeIds(n) !> return value of a function real(kind=rk) :: res(n) ! -------------------------------------------------------------------- ! real(kind=rk) :: coord(3), alpha, diff(3) real(kind=rk) :: vecAsqr, center(3), halfdir(3) !loop variables integer :: iDir ! -------------------------------------------------------------------- ! ! since this is a line only one of the three vectors in vec ! is active halfdir = 0.0_rk do iDir = 1, 3 if( me%active( iDir )) halfdir = me%vec( :, iDir )/2.0_rk end do center = me%origin + halfdir vecAsqr = dot_product( halfdir, halfdir ) !loop over number of return values do iDir = 1, n !barycentric coordinate coord = tem_BaryOfId( tree, treeIds(iDir) ) !distance between parabola center and barycentric coordinates diff = coord - 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_treeIds