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:

- Project barycentric coordinate vector in a given plane via
- Compute spatial value using Actual parabola 2d formula: \f$ (y-y_0) = a(x-x_0)^2 ) parabola open towards opposite x and with vertex at (1,0) is given by

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
```