21 #include "rheolef/piola_on_pointset.h"
22 #include "rheolef/piola_util.h"
36 _bops.set (quad, piola_basis);
38 _last_visited_geo.fill (
"");
39 _last_visited_dis_ie.fill (std::numeric_limits<size_type>::max());
48 _bops.set (nodal_basis, piola_basis);
50 _last_visited_geo.fill (
"");
51 _last_visited_dis_ie.fill (std::numeric_limits<size_type>::max());
63 if (_last_visited_geo [hat_K.
variant()] == omega_K.name() &&
67 _last_visited_geo [hat_K.
variant()] = omega_K.name();
71 Eigen::Matrix<piola<T>,Eigen::Dynamic,1>&
piola = _piola [hat_K.
variant()];
72 Eigen::Matrix<T,Eigen::Dynamic,1>& weight = _weight [hat_K.
variant()];
74 const Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>&
75 s_phij_xi = _bops.template evaluate<T> (hat_K);
76 const Eigen::Matrix<point_basic<T>,Eigen::Dynamic,Eigen::Dynamic>&
77 grad_phij_xi = _bops.template grad_evaluate<point_basic<T>> (hat_K);
85 piola .resize (loc_nnod);
86 for (
size_type loc_inod = 0; loc_inod < loc_nnod; ++loc_inod) {
94 omega_K.dis_inod (K, _dis_inod_K);
95 for (
size_type loc_jdof = 0; loc_jdof < loc_ndof; ++loc_jdof) {
97 const point_basic<T>& xjnod = omega_K.dis_node (_dis_inod_K[loc_jdof]);
98 for (
size_type loc_inod = 0; loc_inod < loc_nnod; ++loc_inod) {
107 if (map_d > 0 && map_d + 1 ==
d) {
113 for (
size_type loc_inod = 0; loc_inod < loc_nnod; ++loc_inod) {
118 if (!_bops.has_quadrature())
return;
119 weight.resize (loc_nnod);
122 for (
size_type loc_inod = 0; loc_inod < loc_nnod; ++loc_inod) {
123 T weight_q = quad (hat_K, loc_inod).w;
124 weight[loc_inod] =
piola[loc_inod].
detDF*weight_q;
126 weight[loc_inod] *=
piola[loc_inod].
F [i_comp_axi];
134 #define _RHEOLEF_instanciation(T) \
135 template class piola_on_pointset_rep<T>; \
137 #define _RHEOLEF_instanciation_update(T,M) \
138 template void piola_on_pointset_rep<T>::_update ( \
139 const geo_basic<T,M>& omega_K, \
140 const geo_element& K) const; \
144 #ifdef _RHEOLEF_HAVE_MPI
see the Float page for the full documentation
see the geo_element page for the full documentation
see the integrate_option page for the full documentation
reference_element::size_type size_type
void initialize(const basis_basic< T > &piola_basis, const quadrature< T > &quad, const integrate_option &iopt)
void _update(const geo_basic< T, M > &omega, const geo_element &K) const
see the reference_element page for the full documentation
size_type dimension() const
variant_type variant() const
Float alpha[pmax+1][pmax+1]
This file is part of Rheolef.
void map_projector(const tensor_basic< T > &DF, size_t d, size_t map_d, tensor_basic< T > &P)
void cumul_otimes(tensor_basic< T > &t, const point_basic< T > &a, const point_basic< T > &b, size_t na, size_t nb)
T det_jacobian_piola_transformation(const tensor_basic< T > &DF, size_t d, size_t map_d)
tensor_basic< T > pseudo_inverse_jacobian_piola_transformation(const tensor_basic< T > &DF, size_t d, size_t map_d)
_RHEOLEF_instanciation(Float, sequential, std::allocator< Float >) _RHEOLEF_instanciation(Float
#define _RHEOLEF_instanciation_update(T, M)
coordinate_type sys_coord