21#include "rheolef/config.h"
22#ifdef _RHEOLEF_HAVE_MPI
23#include "rheolef/geo.h"
24#include "rheolef/geo_domain.h"
25#include "rheolef/dis_macros.h"
26#include "rheolef/rheostream.h"
27#include "rheolef/iorheo.h"
28#include "rheolef/index_set.h"
36struct permutation_proxy {
38 permutation_proxy (
const hack_array<geo_element_hack>& elts, size_type first_dis_v = 0)
39 : _elts(elts), _first_dis_v(first_dis_v) {}
40 size_type size()
const {
return _elts.size(); }
41 size_type operator[] (size_type ie)
const {
42 const geo_element& K = _elts [ie];
43 return K.ios_dis_ie() - _first_dis_v;
45 const permutation_proxy& data()
const {
return *
this; }
47 const hack_array<geo_element_hack>& _elts;
48 size_type _first_dis_v;
67 ops << setprecision(numeric_limits<Float>::digits10)
81 ops << endl << h << endl;
86 T rounding_prec = iorheo::getrounding_precision(ops.
os());
87 if (rounding_prec == 0) {
104 std::vector<size_type> node_perm ((my_proc == io_proc) ? dis_nnod : 0);
106 if (my_proc == io_proc) {
112 for (
size_type iproc = 0; iproc < nproc; iproc++) {
113 if (iproc == my_proc)
continue;
116 comm.recv (iproc, tag_gather, node_perm.begin().operator->() + i_start, i_size);
143 iter != last; ++iter) {
145 (*iter).put (ops, *
this);
see the communicator page for the full documentation
static tag_type get_new_tag()
returns a new tag
the finite element boundary domain
std::vector< domain_indirect_basic< distributed > > _domains
coordinate_type _sys_coord
disarray< node_type, distributed > _node
size_type variant() const
std::array< hack_array< geo_element_hack, distributed >, reference_element::max_variant > _geo_element
const communicator & comm() const
size_type dis_size(size_type dim) const
reference_element::size_type size_type
const_iterator end(size_type dim) const
base::size_type size_type
disarray< size_type > _inod2ios_dis_inod
base::const_iterator const_iterator
const_iterator begin(size_type dim) const
sequential mesh representation
std::bitset< last > flag_type
static flag_type flags(std::ios &s)
static flag_type format_field
odiststream: see the diststream page for the full documentation
static size_type io_proc()
static const variant_type max_variant
static variant_type last_variant_by_dimension(size_type dim)
static variant_type first_variant_by_dimension(size_type dim)
static const variant_type p
#define fatal_macro(message)
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
This file is part of Rheolef.
point output helper, with rounding feature