1#ifndef _RHEOLEF_INV_PIOLA_H
2#define _RHEOLEF_INV_PIOLA_H
28#include "rheolef/geo.h"
29#include "rheolef/piola_util.h"
54 std::vector<value_type>
node;
56 mutable Eigen::Matrix<float_type,Eigen::Dynamic,1>
value;
57 mutable Eigen::Matrix<value_type,Eigen::Dynamic,1>
grad_value;
78 dim = omega.dimension();
79 b = omega.get_piola_basis();
82 node.resize (dis_inod.size());
83 for (
size_t loc_inod = 0, loc_nnod = node.size(); loc_inod < loc_nnod; ++loc_inod) {
84 node[loc_inod] = omega.dis_node (dis_inod[loc_inod]);
90 switch (hat_K.variant()) {
103 b.evaluate (hat_K, hat_x, value);
105 for (
size_t loc_inod = 0, loc_nnod = node.size(); loc_inod < loc_nnod; ++loc_inod) {
106 r = r + value[loc_inod]*node[loc_inod];
113 b.grad_evaluate (hat_K, hat_x, grad_value);
115 for (
size_t loc_inod = 0, loc_nnod = node.size(); loc_inod < loc_nnod; ++loc_inod) {
116 cumul_otimes(DF, node[loc_inod], grad_value[loc_inod], dim, map_dim);
143 return DF.trans_mult(r);
generic mesh with rerefence counting
value_type derivative_trans_mult(const value_type &r) const
float_type duality_product(const value_type &r, const value_type &s) const
value_type derivative_solve(const value_type &r) const
point_basic< T > value_type
void set_x(const value_type &x1)
Eigen::Matrix< float_type, Eigen::Dynamic, 1 > value
void update_derivative(const value_type &hat_xh) const
value_type::size_type size_type
float_type dual_space_norm(const value_type &r) const
std::vector< value_type > node
float_type space_norm(const value_type &hat_xh) const
void reset(const geo_basic< T, M > &omega, const reference_element &hat_K, const std::vector< size_t > &dis_inod)
value_type initial() const
value_type residue(const value_type &hat_xh) const
Eigen::Matrix< value_type, Eigen::Dynamic, 1 > grad_value
see the reference_element page for the full documentation
static const variant_type H
static const variant_type q
static const variant_type e
size_type dimension() const
static const variant_type T
static const variant_type P
static const variant_type t
This file is part of Rheolef.
tensor_basic< T > pseudo_inverse_jacobian_piola_transformation(const tensor_basic< T > &DF, size_t d, size_t map_d)
rheolef::std enable_if ::type dot const Expr1 expr1, const Expr2 expr2 dot(const Expr1 &expr1, const Expr2 &expr2)
void cumul_otimes(tensor_basic< T > &t, const point_basic< T > &a, const point_basic< T > &b, size_t na, size_t nb)
T norm(const vec< T, M > &x)
norm(x): see the expression page for the full documentation