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