subroutine Init_Tensor3D(this,interp,nVar,nElem)
implicit none
class(Tensor3D),intent(out) :: this
type(Lagrange),target,intent(in) :: interp
integer,intent(in) :: nVar
integer,intent(in) :: nElem
! local
integer :: i
this%interp => interp
this%nVar = nVar
this%nElem = nElem
this%N = interp%N
this%M = interp%M
allocate(this%interior(1:interp%N+1,1:interp%N+1,1:interp%N+1,1:nelem,1:nvar,1:3,1:3), &
this%boundary(1:interp%N+1,1:interp%N+1,1:6,1:nelem,1:nvar,1:3,1:3), &
this%extBoundary(1:interp%N+1,1:interp%N+1,1:6,1:nelem,1:nvar,1:3,1:3))
allocate(this%meta(1:nVar))
allocate(this%eqn(1:9*nVar))
this%interior = 0.0_prec
this%boundary = 0.0_prec
this%extBoundary = 0.0_prec
! Initialize equation parser
! This is done to prevent segmentation faults that arise
! when building with amdflang that are traced back to
! feqparse_functions.f90 : finalize routine
! When the equation parser is not initialized, the
! functions are not allocated, which I think are the
! source of the segfault - joe@fluidnumerics.com
do i = 1,4*nvar
this%eqn(i) = EquationParser('f=0',(/'x','y','z','t'/))
enddo
call gpuCheck(hipMalloc(this%interior_gpu,sizeof(this%interior)))
call gpuCheck(hipMalloc(this%boundary_gpu,sizeof(this%boundary)))
call gpuCheck(hipMalloc(this%extBoundary_gpu,sizeof(this%extBoundary)))
call hipblasCheck(hipblasCreate(this%blas_handle))
call this%UpdateDevice()
endsubroutine Init_Tensor3D