NeoPZ
tbbtst.cpp
Go to the documentation of this file.
1 #include <iostream>
2 #include <algorithm>
6 #include "tpzdohrsubstruct.h"
7 #include "tpzdohrmatrix.h"
8 #include "tpzdohrprecond.h"
9 #include "pzdohrstructmatrix.h"
10 #include "pzdohrstructmatrix.cpp"
11 #include "pzstepsolver.h"
12 #include "pzcompel.h"
13 #include "pzgeoelbc.h"
14 #include "pzelast3d.h"
15 #include "pzbndcond.h"
16 #include "tpzdohrassembly.h"
17 #include "pzlog.h"
18 #include "tpzgensubstruct.h"
19 #include "tpzpairstructmatrix.h"
20 #include "pzviscoelastic.h"
21 #include "TPZVTKGeoMesh.h"
22 #include "pzgeotetrahedra.h"
23 #include "pzskylstrmatrix.h"
24 #include "tpzarc3d.h"
25 #include "tpzdohrmatrix.h"
26 #include "pzvtkmesh.h"
27 #include "pzskylmat.h"
28 
29 #ifdef USING_TBB
30 #include <tbb/blocked_range.h>
31 #include <tbb/partitioner.h>
32 #include <tbb/task_scheduler_init.h>
33 #include <tbb/parallel_for.h>
34 #endif
35 
39 clarg::argString predio_file("-f", "Mesh file.", "8andares02.txt");
40 clarg::argInt plevel("-p", "plevel", 1);
41 clarg::argInt nsub("-nsub", "number of substructs", 32);
42 clarg::argInt nloop("-l", "Number of loop iterations of the Subst_Backward/Subst_Forward", 1);
43 clarg::argBool usetbb("-tbb", "Use of parallel tbb version", false);
44 clarg::argBool aff_tbb("-aff", "Use of affinity partitioner", false);
45 clarg::argBool help("-h", "Show usage message.", false);
46 
47 RunStatsTable dec_rst ("-dec", "Decompose statistics raw data table");
48 RunStatsTable sub_rst ("-sub", "Substitution Forward/Backward statistics raw data table");
49 
50 
51 vector<TPZSkylMatrix<STATE>* > *get_sky_matrices();
52 
53 #ifdef USING_TBB
54 class tbb_cholesky {
55 public:
56 
57  vector<TPZSkylMatrix<REAL>* > *fTasks;
58 
59  void operator()(const tbb::blocked_range<size_t>& range) const {
60  for(size_t i=range.begin(); i!=range.end(); ++i ) {
61  (*fTasks)[i]->Decompose_Cholesky();
62  }
63  } // operator()
64 };
65 
66 class tbb_substitution {
67 public:
68 
69  vector<TPZSkylMatrix<REAL>* > *fTasks;
70 
71  void operator()(const tbb::blocked_range<size_t>& range) const {
72  for(size_t i=range.begin(); i!=range.end(); ++i ) {
73  TPZFMatrix<REAL> f((*fTasks)[i]->Dim(),1,M_PI);
74  (*fTasks)[i]->Subst_Forward(&f);
75  (*fTasks)[i]->Subst_Backward(&f);
76  }
77  } // operator()
78 };
79 #endif
80 
81 void usage(char *prog)
82 {
83  printf("\nUsage: %s\n", prog);
84  printf("Arguments: \n");
85 
86  clarg::arguments_descriptions(cout, " ", "\n");
87 }
88 
90 
91 int main(int argc, char **argv)
92 {
93  // parse the arguments
94  if (clarg::parse_arguments(argc, argv)) {
95  cerr << "Error when parsing the arguments!" << endl;
96  usage(argv[0]);
97  return 1;
98  }
99 
100  if (!predio_file.was_set() || help.get_value()) {
101  usage(argv[0]);
102  return 1;
103  }
104 
105  vector<TPZSkylMatrix<STATE>* > * fTasks = get_sky_matrices();
106 
107  std::sort(fTasks->begin(), fTasks->end(), wayToSort);
108 // for(int i=0; i<fTasks->size(); i++)
109 // {
110 // cout << (*fTasks)[i]->MemoryFootprint() << endl;// = new TPZSkylMatrix<REAL>(*orig);
111 // }
112 
113 
114  TPZSkylMatrix<REAL> *orig = (*fTasks)[0];
115  fTasks->clear();
116  fTasks->resize(nsub.get_value());
117  for(int i=0; i<fTasks->size(); i++)
118  {
119  (*fTasks)[i] = new TPZSkylMatrix<REAL>(*orig);
120  }
121 
122  cout << "The copied matrix has Memory Foot Print of : " << (orig->MemoryFootprint()/(1024*1024)) << " MBs" << endl;
123 
124 #ifdef USING_TBB
125  tbb::task_scheduler_init init;
126 #endif
127 
128  int nmatrices = nsub.get_value();
129  if (!usetbb.get_value()) {
130  // serial decompose cholesky
131  dec_rst.start();
132  cout << "TPZSkylMatrix::Decompose_Cholesky()" << endl;
133  for (int i=0; i<nmatrices; i++) {
134  (*fTasks)[i]->Decompose_Cholesky();
135  }
136  dec_rst.stop();
137  // serial Subst_Backward/Subst_Forward
138  cout << "TPZSkylMatrix::Subst_Backward/Subst_Forward()" << endl;
139  sub_rst.start();
140  for (int k=0; k<nloop.get_value();k++) {
141  for (int i=0; i<nmatrices; i++) {
142  TPZFMatrix<REAL> f((*fTasks)[i]->Dim(),1,M_PI);
143  (*fTasks)[i]->Subst_Forward(&f);
144  (*fTasks)[i]->Subst_Backward(&f);
145  }
146  }
147  sub_rst.stop();
148  } else {
149 #ifdef USING_TBB
150 
151  tbb_cholesky disp;
152  disp.fTasks = fTasks;
153 
154  tbb::affinity_partitioner ap;
155  cout << "TPZSkylMatrix::Decompose_Cholesky()" << endl;
156  dec_rst.start();
157  if (aff_tbb.get_value())
158  parallel_for(tbb::blocked_range<size_t>(0, nmatrices), disp, ap);
159  else
160  parallel_for(tbb::blocked_range<size_t>(0, nmatrices), disp);
161  dec_rst.stop();
162  tbb_substitution dispb;
163  dispb.fTasks = fTasks;
164  cout << "TPZSkylMatrix::Subst_Backward/Subst_Forward()" << endl;
165  sub_rst.start();
166  for (int k=0; k<nloop.get_value();k++) {
167  if (aff_tbb.get_value())
168  parallel_for(tbb::blocked_range<size_t>(0, nmatrices), dispb, ap);
169  else
170  parallel_for(tbb::blocked_range<size_t>(0, nmatrices), dispb);
171  }
172  sub_rst.stop();
173 #else
174  cout << "Compiled without TBB support." << endl;
175 #endif
176  }
177 
178 
179 
180 } // main
181 
183 {
184  //int nBCs = 1;
185  int numnodes=-1;
186  int numelements=-1;
187 
188  {
189  bool countnodes = false;
190  bool countelements = false;
191 
192  ifstream read (filename.c_str());
193  if (!read.is_open()) {
194  cerr << "Could not open file: " << filename << endl;
195  exit(1);
196  }
197 
198  while(read)
199  {
200  char buf[1024];
201  read.getline(buf, 1024);
202  std::string str(buf);
203  if(str == "Coordinates") countnodes = true;
204  if(str == "end coordinates") countnodes = false;
205  if(countnodes) numnodes++;
206 
207  if(str == "Elements") countelements = true;
208  if(str == "end elements") countelements = false;
209  if(countelements) numelements++;
210  }
211  }
212 
213  TPZGeoMesh * gMesh = new TPZGeoMesh;
214 
215  gMesh -> NodeVec().Resize(numnodes);
216 
217  TPZVec <int64_t> TopolTetra(4);
218 
219  const int Qnodes = numnodes;
220  TPZVec <TPZGeoNode> Node(Qnodes);
221 
222  //setting nodes coords
223  int64_t nodeId = 0, elementId = 0, matElId = 1;
224 
225  ifstream read;
226  read.open(filename.c_str());
227 
228  double nodecoordX , nodecoordY , nodecoordZ ;
229 
230  char buf[1024];
231  read.getline(buf, 1024);
232  read.getline(buf, 1024);
233  std::string str(buf);
234  int in;
235  for(in=0; in<numnodes; in++)
236  {
237  read >> nodeId;
238  read >> nodecoordX;
239  read >> nodecoordY;
240  read >> nodecoordZ;
241  Node[nodeId-1].SetNodeId(nodeId);
242  Node[nodeId-1].SetCoord(0,nodecoordX);
243  Node[nodeId-1].SetCoord(1,nodecoordY);
244  Node[nodeId-1].SetCoord(2,nodecoordZ);
245  gMesh->NodeVec()[nodeId-1] = Node[nodeId-1];
246  }
247 
248  {
249  read.close();
250  read.open(filename.c_str());
251 
252  int l , m = numnodes+5;
253  for(l=0; l<m; l++)
254  {
255  read.getline(buf, 1024);
256  }
257 
258  int el;
259  int matBCid = -1;
260  //std::set<int> ncoordz; //jeitoCaju
261  for(el=0; el<numelements; el++)
262  {
263  read >> elementId;
264  read >> TopolTetra[0]; //node 1
265  read >> TopolTetra[1]; //node 2
266  read >> TopolTetra[2]; //node 3
267  read >> TopolTetra[3]; //node 4
268 
269  // O GID comeca com 1 na contagem dos nodes, e nao zero como no PZ, assim o node 1 na verdade é o node 0
270  TopolTetra[0]--;
271  TopolTetra[1]--;
272  TopolTetra[2]--;
273  TopolTetra[3]--;
274 
275  int index = el;
276 
277  new TPZGeoElRefPattern< pzgeom::TPZGeoTetrahedra> (index, TopolTetra, matElId, *gMesh);
278  }
279 
280  gMesh->BuildConnectivity();
281  // Colocando as condicoes de contorno
282 
283  for(el=0; el<numelements; el++)
284  {
285  TPZManVector <TPZGeoNode,4> Nodefinder(4);
286  TPZManVector <REAL,3> nodecoord(3);
287  TPZGeoEl *tetra = gMesh->ElementVec()[el];
288  // na face z = 0
289  TPZVec<int64_t> ncoordzVec(0); int64_t sizeOfVec = 0;
290  for (int i = 0; i < 4; i++)
291  {
292  int64_t pos = tetra->NodeIndex(i);
293  Nodefinder[i] = gMesh->NodeVec()[pos];
294  Nodefinder[i].GetCoordinates(nodecoord);
295  if (nodecoord[2] == 0.)
296  {
297  sizeOfVec++;
298  ncoordzVec.Resize(sizeOfVec);
299  ncoordzVec[sizeOfVec-1] = pos;
300  }
301  }
302  if(ncoordzVec.NElements() == 3)
303  {
304  int lado = tetra->WhichSide(ncoordzVec);
305  TPZGeoElSide tetraSide(tetra, lado);
306  TPZGeoElBC(tetraSide,matBCid);
307  }
308  }
309  }
310 
311  return gMesh;
312 }
313 
315 {
316  mesh->SetDimModel(3);
317  int nummat = 1;
318  STATE E = 1.e6;
319  STATE poisson = 0.3;
320  TPZManVector<STATE> force(3,0.);
321  force[1] = 20.;
322  TPZElasticity3D *elast = new TPZElasticity3D(nummat,E,poisson,force);
323  TPZMaterial * elastauto(elast);
324  TPZFMatrix<STATE> val1(3,3,0.),val2(3,1,0.);
325  TPZBndCond *bc = elast->CreateBC(elastauto, -1, 0, val1, val2);
326  TPZMaterial * bcauto(bc);
327  mesh->InsertMaterialObject(elastauto);
328  mesh->InsertMaterialObject(bcauto);
329 }
330 
331 template<class TVar>
333 {
334 private:
335 
342  template<class TTVar>
343  struct work_item_t
344  {
345  work_item_t (unsigned submesh_idx, const TPZAutoPointer<TPZDohrSubstructCondense<TTVar> >& substruct) :
346  fSubMeshIndex(submesh_idx), fSubstruct(substruct) {}
347 
348  unsigned fSubMeshIndex;
350  };
351 
353  std::vector<work_item_t<TVar> > work_items;
354  // TODO: Try the cache_aligned_allocator for improved performance.
355  //std::vector<work_item_t<TVar>,cache_aligned_allocator<work_item_t<TVar> > > work_items;
356 
357  /* Pointers to shared data structures. */
360 
361 public:
362 
365  fAssembly(assembly), fMesh(mesh) {}
366 
368  void push_work_item(unsigned submesh_idx, const TPZAutoPointer<TPZDohrSubstructCondense<TVar> >& substruct)
369  {
370  work_items.push_back(work_item_t<TVar>(submesh_idx, substruct));
371  }
372 
374  void run_serial()
375  {
376  typename std::vector<work_item_t<TVar> >::iterator it = work_items.begin();
377  typename std::vector<work_item_t<TVar> >::iterator end = work_items.end();
378 
379  for (;it != end; it++)
380  {
381  work_item_t<TVar>& wi = *it;
382  TPZSubCompMesh* submesh = SubMesh(fMesh, wi.fSubMeshIndex);
383  AssembleMatrices(submesh, wi.fSubstruct, fAssembly,NULL);
384  }
385  }
386 
387 #ifdef USING_TBB
388 
389  void operator()(const blocked_range<size_t>& range) const
390  {
391  for(size_t i=range.begin(); i!=range.end(); ++i ) {
392  const work_item_t<TVar>& wi = work_items[i];
393  TPZSubCompMesh* submesh = SubMesh(fMesh, wi.fSubMeshIndex);
394  AssembleMatrices(submesh, wi.fSubstruct, fAssembly,NULL);
395  }
396  }
397 
399  void run_parallel_for()
400  {
401  /* TBB Parallel for. It will split the range into N sub-ranges and
402  invoke the operator() for each sub-range.*/
403  parallel_for(blocked_range<size_t>(0,work_items.size(), 1 /*IdealGrainSize*/), *this);
404  }
405 #endif
406 };
407 
408 vector<TPZSkylMatrix<STATE>* > * only_assemble(TPZDohrStructMatrix* dohrstruct,
409  TPZMatrix<STATE> & mat, TPZFMatrix<STATE> & rhs,
411 {
412  TPZMatrix<STATE> *dohrgeneric = &mat;
414  dynamic_cast<TPZDohrMatrix<STATE,TPZDohrSubstructCondense<STATE> > *> (dohrgeneric);
415 
416  const std::list<TPZAutoPointer<TPZDohrSubstructCondense<STATE> > > &sublist = dohr->SubStructures();
417  vector<TPZSkylMatrix<STATE>* > *fSkyTasks = new vector<TPZSkylMatrix<STATE>* >();
418  std::list<TPZAutoPointer<TPZDohrSubstructCondense<STATE> > >::const_iterator it = sublist.begin();
419  unsigned nsub = NSubMesh(fMesh);
420  TPZSkylMatrix<STATE> *sky = 0;
421 
422  par_assemble_task_t<STATE> parallel_tasks(dohrstruct->Assembly(), fMesh);
423 
424  /* Initialize work items. */
425  std::cout << "TPZDohrStructMatrix::Assemble()" << std::endl;
426  for (unsigned isub=0; isub<nsub ; isub++) {
427  TPZSubCompMesh *submesh = SubMesh(fMesh, isub);
428  if(!submesh) continue;
429  parallel_tasks.push_work_item(isub, *it);
430  it++;
431  }
432 
433 #ifdef USING_TBB
434  parallel_tasks.run_parallel_for();
435 #else
436  parallel_tasks.run_serial();
437 #endif
438 
439  it = sublist.begin();
440  for (unsigned isub=0; isub<nsub ; isub++) {
441  TPZSubCompMesh *submesh = SubMesh(fMesh, isub);
442  if(!submesh) continue;
443 
444  // The Matred Big Matrix
445  TPZAutoPointer<TPZMatRed<STATE,TPZFMatrix<STATE> > > matredbig = (*it)->fMatRedComplete;
446  TPZAutoPointer<TPZMatrix<STATE> > Stiffness = matredbig->K00();
447 
448  sky = dynamic_cast<TPZSkylMatrix<STATE> *> (Stiffness.operator->());
449 
450  fSkyTasks->push_back(sky);
451 
452  // The Internal Matrix
453  TPZAutoPointer<TPZMatRed<STATE,TPZFMatrix<STATE> > > matred = (*it)->fMatRed;
454  TPZAutoPointer<TPZMatrix<STATE> > InternalStiffness = matred->K00();
455 
456  sky = dynamic_cast<TPZSkylMatrix<STATE> *> (InternalStiffness.operator->());
457 
458  fSkyTasks->push_back(sky);
459 
460  it++;
461  }
462  return fSkyTasks;
463 }
464 
465 vector<TPZSkylMatrix<STATE>* > *get_sky_matrices() {
466 
469  TPZAutoPointer<TPZCompMesh> cmeshauto = new TPZCompMesh(gmesh);
470  cmeshauto->SetDimModel(3);
471  insert_elasticity(cmeshauto);
472  cmeshauto->AutoBuild();
473 
474  TPZDohrStructMatrix* dohrstruct = new TPZDohrStructMatrix(cmeshauto);
475  dohrstruct->IdentifyExternalConnectIndexes();
476 
477  cout << "TPZDohrStructMatrix::SubStructure()" << endl;
478  dohrstruct->SubStructure(nsub.get_value());
479 
480  cout << "TPZDohrStructMatrix::Create()" << endl;
481  TPZMatrix<STATE> *matptr = dohrstruct->Create();
482  TPZFMatrix<STATE> *rhs = new TPZFMatrix<STATE>(cmeshauto->NEquations(),1,0.);
483 
484  return only_assemble(dohrstruct, *matptr,*rhs, cmeshauto);
485 }
Assembling using Dohrmann algorithm. Sub structure.
static void SetgOrder(int order)
Sets the value of the default interpolation order.
Definition: pzcompel.h:825
int main(int argc, char **argv)
Definition: tbbtst.cpp:91
filename
Definition: stats.py:82
Contains definitions to LOGPZ_DEBUG, LOGPZ_INFO, LOGPZ_WARN, LOGPZ_ERROR and LOGPZ_FATAL, and the implementation of the inline InitializePZLOG(string) function using log4cxx library or not. It must to be called out of "#ifdef LOG4CXX" scope.
Implements a vector class which allows to use external storage provided by the user. Utility.
Definition: pzquad.h:16
clarg::argBool bc("-bc", "binary checkpoints", false)
Contains the TPZDohrSubstruct class which implements sub structure matrices using Dohrman algorithm...
TPZAutoPointer< TPZDohrAssembly< TVar > > fAssembly
Definition: tbbtst.cpp:358
Contains the TPZVTKGraphMesh class which implements the graphical mesh to VTK environment.
Contains declaration of TPZCompEl class which defines the interface of a computational element...
TPZAutoPointer< TPZDohrAssembly< STATE > > Assembly()
static TPZSubCompMesh * SubMesh(TPZAutoPointer< TPZCompMesh > compmesh, int isub)
return a pointer to the isub submesh
This class implements a 3D isotropic elasticity material.
Definition: pzelast3d.h:21
Contains the TPZDohrMatrix class which implements a matrix divided into substructures. Also contains the TPZDohrThreadMultData and TPZDohrThreadMultList structs.
clarg::argBool aff_tbb("-aff", "Use of affinity partitioner", false)
virtual int64_t MemoryFootprint() const override
Returns the approximate size of the memory footprint (amount of memory required to store this object)...
Definition: pzskylmat.h:408
clarg::argInt plevel("-p", "plevel", 1)
clarg::argInt nsub("-nsub", "number of substructs", 32)
Utility class which represents an element with its side. The Geometric approximation classes Geometry...
Definition: pzgeoelside.h:83
Contains declaration of TPZGeoElBC class, it is a structure to help the construction of geometric ele...
TPZGeoMesh * malha_predio(string filename)
Definition: tbbtst.cpp:182
TPZAutoPointer< TPZCompMesh > fMesh
Definition: tbbtst.cpp:359
Implements a matrix divided into substructures. Matrix Sub structure.
Definition: tpzdohrmatrix.h:30
virtual int64_t NodeIndex(int i) const =0
Returns the index of the ith node the index is the location of the node in the nodevector of the mesh...
Contains the TPZDohrAssembly class which implements assembling using Dohrmann algorithm.
int WhichSide(TPZVec< int64_t > &SideNodeIds)
Returns the side number which is connected to the SideNodes returns -1 if no side is found...
Definition: pzgeoel.cpp:165
Implements a skyline storage format. A Skyline matrix is symmetric so square. Matrix.
Definition: pzskylmat.h:394
Contains the TPZDohrStructMatrix class which implements structural matrix divided in sub structures...
Contains the TPZElasticity3D class which implements a 3D isotropic elasticity material.
This abstract class defines the behaviour which each derived class needs to implement.
Definition: TPZMaterial.h:39
Contains the TPZBndCond class which implements a boundary condition for TPZMaterial objects...
virtual void Resize(const int64_t newsize, const T &object)
Resizes the vector object reallocating the necessary storage, copying the existing objects to the new...
Definition: pzvec.h:373
Contains the TPZGenSubStruct class which is an interface to "feed" the datastructure of the Dohrmann ...
f
Definition: test.py:287
Implements a generic geometric element which is refined according to a generic refinement pattern...
Definition: pzgmesh.h:35
Defines the behaviour of all geometric elements. GeometryTPZGeoEl is the common denominator for all g...
Definition: pzgeoel.h:43
Contains the implementation of the TPZDohrStructMatrix methods.
Contains the TPZGeoTetrahedra class which implements the geometry of a tetrahedral element...
Implements a group of computational elements as a mesh and an element. Computational Mesh...
Definition: pzsubcmesh.h:36
int parse_arguments(int argc, char *argv[])
Definition: arglib.cpp:195
def read(filename)
Definition: stats.py:13
static int64_t NSubMesh(TPZAutoPointer< TPZCompMesh > compmesh)
Return the number of submeshes.
This class defines the boundary condition for TPZMaterial objects.
Definition: pzbndcond.h:29
Contains the TPZSkylineStructMatrix class which implements SkyLine Structural Matrices.
void parallel_for(int n, body_t &obj)
Definition: pzparallel.h:24
TPZAdmChunkVector< TPZGeoNode > & NodeVec()
Definition: pzgmesh.h:140
Contains the TPZDohrPrecond class which implements a matrix which computes the preconditioner develop...
virtual TPZMatrix< STATE > * Create() override
This will create a DohrMatrix.
clarg::argInt nloop("-l", "Number of loop iterations of the Subst_Backward/Subst_Forward", 1)
Contains the TPZPairStructMatrix class.
clarg::argBool help("-h", "Show usage message.", false)
void IdentifyExternalConnectIndexes()
Identify the external connects.
Contains TPZSkyline class which implements a skyline storage format.
work_item_t(unsigned submesh_idx, const TPZAutoPointer< TPZDohrSubstructCondense< TTVar > > &substruct)
Definition: tbbtst.cpp:345
RunStatsTable dec_rst("-dec", "Decompose statistics raw data table")
void arguments_descriptions(ostream &os, string prefix, string suffix)
Definition: arglib.cpp:189
RunStatsTable sub_rst("-sub", "Substitution Forward/Backward statistics raw data table")
TPZAutoPointer< TPZDohrSubstructCondense< TTVar > > fSubstruct
Definition: tbbtst.cpp:349
void SetDimModel(int dim)
Set de dimension of the domain of the problem.
Definition: pzcmesh.h:139
bool wayToSort(TPZSkylMatrix< REAL > *i, TPZSkylMatrix< REAL > *j)
Definition: tbbtst.cpp:89
Structure to help the construction of geometric elements along side of a given geometric element...
Definition: pzgeoelbc.h:21
void BuildConnectivity()
Build the connectivity of the grid.
Definition: pzgmesh.cpp:967
static void AssembleMatrices(TPZSubCompMesh *submesh, TPZAutoPointer< TPZDohrSubstructCondense< STATE > > substruct, TPZAutoPointer< TPZDohrAssembly< STATE > > dohrassembly, pthread_mutex_t *TestThread)
virtual TPZBndCond * CreateBC(TPZMaterial *reference, int id, int typ, TPZFMatrix< STATE > &val1, TPZFMatrix< STATE > &val2)
Creates an object TPZBndCond derived of TPZMaterial.
int InsertMaterialObject(TPZMaterial *mat)
Insert a material object in the datastructure.
Definition: pzcmesh.cpp:287
Contains the TPZArc3D class which implements three dimensional arc.
const SubsList & SubStructures() const
Definition: tpzdohrmatrix.h:64
std::vector< work_item_t< TVar > > work_items
Definition: tbbtst.cpp:353
This class implements a geometric mesh for the pz environment. Geometry.
Definition: pzgmesh.h:48
void usage(char *prog)
Definition: tbbtst.cpp:81
bool was_set() const
Definition: arglib.h:138
clarg::argBool usetbb("-tbb", "Use of parallel tbb version", false)
vector< TPZSkylMatrix< STATE > *> * only_assemble(TPZDohrStructMatrix *dohrstruct, TPZMatrix< STATE > &mat, TPZFMatrix< STATE > &rhs, TPZAutoPointer< TPZCompMesh > &fMesh)
Definition: tbbtst.cpp:408
Implements computational mesh. Computational Mesh.
Definition: pzcmesh.h:47
const T & get_value() const
Definition: arglib.h:177
Contains TPZStepSolver class which defines step solvers class.
void push_work_item(unsigned submesh_idx, const TPZAutoPointer< TPZDohrSubstructCondense< TVar > > &substruct)
Definition: tbbtst.cpp:368
clarg::argString predio_file("-f", "Mesh file.", "8andares02.txt")
int64_t NElements() const
Returns the number of elements of the vector.
Definition: pzvec.h:190
vector< TPZSkylMatrix< STATE > *> * get_sky_matrices()
Definition: tbbtst.cpp:465
par_assemble_task_t(TPZAutoPointer< TPZDohrAssembly< TVar > > assembly, TPZAutoPointer< TPZCompMesh > mesh)
Definition: tbbtst.cpp:363
clarg::argString m("-m", "input matrix file name (text format)", "matrix.txt")
void insert_elasticity(TPZAutoPointer< TPZCompMesh > mesh)
Definition: tbbtst.cpp:314
Contains the TPZVTKGeoMesh class which implements the graphical mesh to VTK environment to geometric ...
void SubStructure(int nsub)
Partition the mesh in submeshes.
Implements structural matrix divided in sub structures. Structural Matrix Sub structure.
TPZAdmChunkVector< TPZGeoEl * > & ElementVec()
Methods for handling pzlists.
Definition: pzgmesh.h:138