46 _name =
"level_set_from_" +
lambda.name();
48 _dimension =
lambda.dimension();
49 _piola_basis =
lambda.get_piola_basis();
50 _sys_coord =
lambda.coordinate_system();
51 _have_connectivity =
true;
54 _gs._map_dimension = 0;
56 if (ge_list[variant].dis_size() != 0) {
63 communicator comm =
lambda.sizes().node_ownership.comm();
65 _gs.node_ownership = _node.ownership();
68 check_macro (order() == 1,
"order > 1: not yet supported");
79 _geo_element [variant].resize (_gs.ownership_by_variant [variant], param);
89 check_macro (order() == 1,
"order > 1: not yet supported");
90 _gs.ownership_by_dimension [0] = _gs.node_ownership;
94 size_type first_dis_iv = _gs.ownership_by_dimension [0].first_index();
95 for (
size_type iv = 0, nv = _gs.ownership_by_dimension [0].size(); iv < nv; iv++) {
106 size_type first_dis_ie = _gs.ownership_by_dimension [_gs._map_dimension].first_index();
111 size_type first_dis_igev = _gs.ownership_by_variant [variant].first_index();
115 iter = ge_list[variant].begin(),
116 last = ge_list[variant].end();
117 iter != last; iter++, ge_iter++, dis_ie++, dis_igev++) {
119 size_type ios_dis_ie = first_dis_v + dis_igev;
120 (*ge_iter).set_dis_ie (dis_ie);
121 (*ge_iter).set_ios_dis_ie (ios_dis_ie);
123 first_dis_v += _gs.ownership_by_variant[variant].dis_size();
125 if (_gs._map_dimension >= 2) {
126 _have_connectivity =
false;
154 _inod2ios_dis_inod(),
155 _ios_inod2dis_inod(),
158 _igev2ios_dis_igev(),
161 base::build_from_list (
lambda, node_list, ge_list);
165 build_external_entities ();
170 communicator comm =
lambda.sizes().node_ownership.comm();
171 if (comm.size() > 1) {
dis_trace_macro (
"ios: not yet fully computed"); }
176 _inod2ios_dis_inod.resize (base::_node.ownership());
177 size_type first_dis_inod = base::_node.ownership().first_index();
178 for (
size_type inod = 0, nnod = _inod2ios_dis_inod.size(); inod < nnod; inod++) {
179 _inod2ios_dis_inod [inod] = first_dis_inod + inod;
181 _ios_inod2dis_inod = _inod2ios_dis_inod;
194 _ios_ige2dis_ige[base::_gs._map_dimension].resize (base::_gs.ownership_by_dimension [base::_gs._map_dimension]);
195 size_type first_dis_ige = base::_gs.ownership_by_dimension [base::_gs._map_dimension].first_index();
199 _igev2ios_dis_igev[variant].resize (base::_gs.ownership_by_variant [variant]);
200 size_type first_dis_igev = base::_gs.ownership_by_variant [variant].first_index();
201 for (
size_type igev = 0, ngev = base::_geo_element[variant].size(); igev < ngev; igev++, ige++) {
202 const geo_element& K = base::_geo_element [variant][igev];
203 _ios_ige2dis_ige [base::_gs._map_dimension][ige] = first_dis_ige + ige;
204 _igev2ios_dis_igev [variant][igev] = first_dis_igev + igev;
206 _ios_igev2dis_igev[variant] = _igev2ios_dis_igev [variant];
void build_from_list(const geo_basic< T, M > &lambda, const disarray< point_basic< T >, M > &node_list, const std::array< disarray< geo_element_auto< heap_allocator< size_type > >, M >, reference_element::max_variant > &elt_list)
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")