9#include <kernel/util/tiny_algebra.hpp>
17 template<
typename SpaceData_>
18 CUDA_HOST_DEVICE
static void trans_values(SpaceData_& space_data)
21 for(
int i(0); i < SpaceData_::max_local_dofs; ++i)
24 space_data.phi[i].value = space_data.phi[i].ref_value;
28 template<
typename SpaceData_,
typename JacInvType_>
29 CUDA_HOST_DEVICE
static void trans_gradients(SpaceData_& space_data,
const JacInvType_&
jac_inv)
32 for(
int i(0); i < SpaceData_::max_local_dofs; ++i)
35 space_data.phi[i].grad.set_vec_mat_mult(space_data.phi[i].ref_grad,
jac_inv);
39 template<
typename SpaceData_,
typename JacInvType_>
40 CUDA_HOST_DEVICE
static void inplace_trans_gradients(SpaceData_& space_data,
const JacInvType_&
jac_inv)
42 typename SpaceData_::EvalTraits::BasisReferenceGradientType tmp;
44 for(
int i(0); i < SpaceData_::max_local_dofs; ++i)
46 tmp = space_data.phi[i].grad;
48 space_data.phi[i].grad.set_vec_mat_mult(tmp,
jac_inv);
52 template<
typename SpaceData_,
typename JacInvType_,
typename HessInvType_>
53 CUDA_HOST_DEVICE
static void trans_hessians(SpaceData_& space_data,
const JacInvType_&
jac_inv,
const HessInvType_&
hess_inv)
56 for(
int i(0); i < SpaceData_::max_local_dofs; ++i)
59 space_data.phi[i].hess.set_double_mat_mult(space_data.phi[i].ref_hess,
jac_inv,
jac_inv);
60 space_data.phi[i].hess.add_vec_tensor_mult(space_data.phi[i].ref_grad,
hess_inv);
@ hess_inv
specifies whether the trafo should supply inverse hessian tensors
@ jac_inv
specifies whether the trafo should supply inverse jacobian matrices