~ubuntu-branches/ubuntu/trusty/rheolef/trusty

« back to all changes in this revision

Viewing changes to nfem/plib/domain_indirect_mpi.cc

  • Committer: Package Import Robot
  • Author(s): Pierre Saramito
  • Date: 2012-04-06 09:12:21 UTC
  • mfrom: (1.1.5)
  • Revision ID: package-import@ubuntu.com-20120406091221-m58me99p1nxqui49
Tags: 6.0-1
* New upstream release 6.0 (major changes):
  - massively distributed and parallel support
  - full FEM characteristic method (Lagrange-Gakerkin method) support
  - enhanced users documentation 
  - source code supports g++-4.7 (closes: #667356)
* debian/control: dependencies for MPI distributed solvers added
* debian/rules: build commands simplified
* debian/librheolef-dev.install: man1/* to man9/* added
* debian/changelog: package description rewritted (closes: #661689)

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#ifdef _RHEOLEF_HAVE_MPI
25
25
#include "rheolef/domain_indirect.h"
26
26
#include "rheolef/geo.h"
27
 
#include "rheolef/geo_connectivity.h"
28
27
 
29
28
namespace rheolef {
30
29
 
157
156
  }
158
157
  size_type version, dis_noige;
159
158
  ips >> base::_name
160
 
      >> version >> base::_map_dim >> dis_noige;
 
159
      >> version
 
160
      >> base::_map_dim
 
161
      >> dis_noige;
161
162
  check_macro (version == 2, "unsupported version="<<version<<" domain format");
162
 
  std::fill (_ini_size_by_variant, _ini_size_by_variant+reference_element::max_size, 0);
163
163
 
164
164
  // 1.2) get data
165
165
  distributor ini_ioige_ownership (dis_noige, comm);
166
 
  array<domain_pair_type,distributed> ini_oige (ini_ioige_ownership);
 
166
  array<geo_element_indirect,distributed> ini_oige (ini_ioige_ownership);
167
167
  ini_oige.get_values (ips);
168
168
  // ---------------------------
169
169
  // 2) first renumbering (ios)
177
177
    ios_owner [ini_ioige] = ios_ige_ownership.find_owner (ios_ige);
178
178
  }
179
179
  // 2.2) ios repartition
180
 
  array<domain_pair_type>  ios_oige;
 
180
  array<geo_element_indirect>  ios_oige;
181
181
  array<size_type>  ini_ioige2ios_dis_ioige;
182
182
  array<size_type>  ios_ioige2ini_dis_ioige;
183
183
  ini_oige.repartition (
191
191
  // ---------------------
192
192
  // 3.1) geo_element renumbering
193
193
  distributor ios_ioige_ownership = ios_oige.ownership();
194
 
  array<domain_pair_type>  tmp_oige (ios_ioige_ownership);
 
194
  array<geo_element_indirect>  tmp_oige (ios_ioige_ownership);
195
195
  for (size_type ios_ioige = 0, ios_noige = ios_ioige_ownership.size();
196
196
        ios_ioige < ios_noige; ios_ioige++) {
197
197
    orientation_type orient      = ios_oige [ios_ioige].orientation();
218
218
        ios_ioige2dis_ioige);
219
219
  
220
220
  // 3.4) shift from "dis_ioige" to a "ioige" numbering local to each process:
221
 
  distributor ioige_ownership = array<domain_pair_type>::ownership();
 
221
  distributor ioige_ownership = array<geo_element_indirect>::ownership();
222
222
  for (size_type ioige = 0, noige = ioige_ownership.size(); ioige < noige; ioige++) {
223
223
    size_type        dis_ige = operator[] (ioige).index();
224
224
    size_type        ige = dis_ige - ige_ownership.first_index();
251
251
  ops << "domain" << endl
252
252
      << base::_name << endl
253
253
      << "2 " << base::_map_dim << " " << dis_size() << endl;
254
 
  distributor ioige_ownership = array<domain_pair_type>::ownership();
 
254
  distributor ioige_ownership = array<geo_element_indirect>::ownership();
255
255
  distributor ini_ioige_ownership = _ini_ioige2dis_ioige.ownership();
256
256
  distributor ige_ownership = omega.geo_element_ownership (base::_map_dim);
257
 
  array<domain_pair_type> ini_oige (ini_ioige_ownership);
 
257
  array<geo_element_indirect> ini_oige (ini_ioige_ownership);
258
258
  for (size_type ioige = 0, noige = ioige_ownership.size(); ioige < noige; ioige++) {
259
259
    size_type ini_dis_ioige = _ioige2ini_dis_ioige [ioige];
260
260
    orientation_type orient = operator[] (ioige).orientation();
261
261
    size_type        ige    = operator[] (ioige).index();
262
262
    size_type   ios_dis_ige = omega.ige2ios_dis_ige (base::_map_dim, ige);
263
 
    ini_oige.dis_entry (ini_dis_ioige) = domain_pair_type (orient, ios_dis_ige);
 
263
    ini_oige.dis_entry (ini_dis_ioige) = geo_element_indirect (orient, ios_dis_ige);
264
264
  }
265
265
  ini_oige.dis_entry_assembly();
266
266
  ini_oige.put_values (ops);