62 size_type dis_nnod = base::_node.dis_size ();
67 ops << setprecision(numeric_limits<Float>::digits10)
74 h.dimension = base::_dimension;
75 h.sys_coord = base::_sys_coord;
76 h.order = base::order();
77 h.dis_size_by_variant [0] = base::_node.dis_size();
79 h.dis_size_by_variant [variant] = base::_geo_element [variant].dis_size();
81 ops << endl << h << endl;
85 if (base::_dimension > 0) {
86 T rounding_prec = iorheo::getrounding_precision(ops.
os());
87 if (rounding_prec == 0) {
88 base::_node.permuted_put_values (ops,
92 base::_node.permuted_put_values (ops,
104 std::vector<size_type> node_perm ((my_proc == io_proc) ? dis_nnod : 0);
106 if (my_proc == io_proc) {
107 size_type i_start = _inod2ios_dis_inod.ownership().first_index(my_proc);
108 size_type i_size = _inod2ios_dis_inod.ownership().size (my_proc);
110 node_perm [i_start + i] = _inod2ios_dis_inod [i];
112 for (
size_type iproc = 0; iproc < nproc; iproc++) {
113 if (iproc == my_proc)
continue;
114 size_type i_start = _inod2ios_dis_inod.ownership().first_index(iproc);
115 size_type i_size = _inod2ios_dis_inod.ownership().size (iproc);
116 comm.recv (iproc, tag_gather, node_perm.begin().operator->() + i_start, i_size);
119 comm.send (0, tag_gather, _inod2ios_dis_inod.begin().operator->(), _inod2ios_dis_inod.size());
125 for (
size_type dim = base::_gs._map_dimension; dim > 0; dim--) {
130 if (base::_gs.ownership_by_variant[variant].dis_size() == 0)
continue;
131 permutation_proxy perm (base::_geo_element [variant], first_dis_v);
132 base::_geo_element [variant].permuted_put_values (ops, perm, put_element);
133 first_dis_v += base::_gs.ownership_by_variant[variant].dis_size();
141 iter = base::_domains.begin(),
142 last = base::_domains.end();
143 iter != last; ++iter) {
145 (*iter).put (ops, *
this);
the finite element boundary domain
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")