KratosMultiphysics
KRATOS Multiphysics (Kratos) is a framework for building parallel, multi-disciplinary simulation software, aiming at modularity, extensibility, and high performance. Kratos is written in C++, and counts with an extensive Python interface.
mesh_suite_modeler.h
Go to the documentation of this file.
1 // | / |
2 // ' / __| _` | __| _ \ __|
3 // . \ | ( | | ( |\__ `
4 // _|\_\_| \__,_|\__|\___/ ____/
5 // Multi-Physics
6 //
7 // License: BSD License
8 // Kratos default license: kratos/license.txt
9 //
10 // Main authors: Pooyan Dadvand
11 //
12 //
13 
14 
15 #if !defined(KRATOS_MESH_SUITE_MODELER_H_INCLUDED )
16 #define KRATOS_MESH_SUITE_MODELER_H_INCLUDED
17 
18 
19 
20 // System includes
21 #include <string>
22 #include <iostream>
23 #include <cstdlib>
24 #include <iomanip>
25 #include <fstream>
26 
27 
28 // External includes
29 #include "malla.h"
30 #include "voronoi.h"
31 
32 
33 // Project includes
34 #include "includes/define.h"
35 #include "includes/model_part.h"
36 //#include "geometries/triangle_2d.h"
37 #include "punto.h"
38 #include "nodo.h"
39 
40 namespace Kratos
41 {
42 
45 
49 
53 
57 
61 
63 
65 class MeshSuiteModeler : public malla
66 {
67 public:
70 
73 
77 
80 
82  virtual ~MeshSuiteModeler() {}
83 
84 
88 
89 
93 
94  //**************************************************************************************
95  //**************************************************************************************
96 
97  void GenerateMesh(ModelPart& ThisModelPart, Element const& rReferenceElement)
98  {
100 
101  mk_puntos(true);
102  //delaunay(true,false);
103 
104  //erasing the elements
105  ThisModelPart.Nodes().clear();
106  ThisModelPart.Elements().clear();
107 
108  //generating in Kratos the new nodes
109 
110  ThisModelPart.Nodes().reserve(n.len);
111  for(int i = 0 ; i < n.len ; i++)
112  {
113  Node::Pointer p_node = Kratos::Node::Pointer(new Kratos::Node(0,n[i][0], n[i][1], n[i][2]));
114  p_node->SetId(i+1);
115  ThisModelPart.Nodes().push_back(p_node);
116  }
117 
118  Properties::Pointer properties = ThisModelPart.GetMesh().pGetProperties(1);
119 
120 
121  ThisModelPart.Elements().reserve(e.len);
122  for(int i_element = 0 ; i_element < e.len ; i_element++)
123  {
125 
126  for(int i_node = 0 ; i_node < e[i_element].nv() ; i_node++)
127  {
128  temp.push_back(ThisModelPart.Nodes()(e[i_element][i_node] + 1));
129  }
130  Element::Pointer p_element = rReferenceElement.Create(i_element + 1, temp, properties);
131  ThisModelPart.Elements().push_back(p_element);
132  }
133  KRATOS_CATCH("")
134  }
135 
136  //**************************************************************************************
137  //**************************************************************************************
138  void FixNodes(ModelPart& ThisModelPart)
139  {
140 
141  for(ModelPart::NodeIterator i_node = ThisModelPart.NodesBegin() ; i_node != ThisModelPart.NodesEnd() ; ++i_node)
142  {
143  n[i_node->Id()-1].f.set(n_permanente);
144  }
145  }
146 
147  //**************************************************************************************
148  //**************************************************************************************
149  int UpdateMesh(ModelPart& ThisModelPart)
150  {
151  // lee los nodos
152  for(ModelPart::NodeIterator i_node = ThisModelPart.NodesBegin() ; i_node != ThisModelPart.NodesEnd() ; ++i_node)
153  {
154  std::size_t id = i_node->Id() - 1;
155  n[id][0] = i_node->X();
156  n[id][1] = i_node->Y();
157  n[id][2] = i_node->Z();
158  }
159 
160 
161  return true;
162  }
163 
164 
165  //**************************************************************************************
166  //**************************************************************************************
167  int SetMesh(ModelPart& ThisModelPart)
168  {
169  KRATOS_TRY
170  ini();
171 
172  // lee de acuerdo a filext
173  array1<nodo> nl;
174  array1<elemento> el;
175 
176  nl.clean();
177  el.clean();
178 
179  // lee los nodos
180  for(ModelPart::NodeIterator i_node = ThisModelPart.NodesBegin() ; i_node != ThisModelPart.NodesEnd() ; ++i_node)
181  nl+=nodo(i_node->X(), i_node->Y() , i_node->Z());
182 
183 
184 
185  // lee los elementos
186  for(ModelPart::ElementIterator i_element = ThisModelPart.ElementsBegin() ; i_element != ThisModelPart.ElementsEnd() ; ++i_element)
187  {
188  if(i_element->GetGeometry().PointsNumber() == 2)
189  {
190  elemento temp(e_segmento);
191  temp[0] = i_element->GetGeometry()[0].Id() - 1;
192  temp[1] = i_element->GetGeometry()[1].Id() - 1;
193  // KRATOS_WATCH(temp[0])
194  // KRATOS_WATCH(temp[1])
195  el+=temp;
196  }
197  else if(i_element->GetGeometry().PointsNumber() == 3)
198  {
199  elemento temp(e_triangulo);
200  temp[0] = i_element->GetGeometry()[0].Id() - 1;
201  temp[1] = i_element->GetGeometry()[1].Id() - 1;
202  temp[2] = i_element->GetGeometry()[2].Id() - 1;
203  el+=temp;
204  }
205  }
206  // // nombre y extensión
207  // if (!inombre[0]) {add_error(No_Mesh); return false;}
208  // renombra(inombre);
209 
210 
211  if (!nl)
212  {
213  add_error(No_Mesh);
214  return false;
215  }
216 
217  int i,j,in,nc=0;
218  int &nlen=nl.len;
219  n.resize(nlen);
220 
221  // bounding box
222  pmin=pmax=nl[0];
223  for (i=1; i<nlen; i++)
224  {
225  if (nl[i].f.es(n_borrado)) continue;
226  pmin.set_min(nl[i]);
227  pmax.set_max(nl[i]);
228  }
229 
230  // hay z?
231  bool hayz=pmax[2]-pmin[2]>ERRADM;
232  if (!hayz) tipo.set(m_planaxy);
233  else tipo.reset(m_planaxy);
234  if(!o)
235  o=new octree(n,pmin,pmax,hayz ? 3 : 2);
236  bool puesto,hayrep=false;
237  double d,dmax=0;
238  pline map(nlen);
239  map.len=nlen;
240  // los nodos frontera van primero y los
241  // de h (si hay) despues
242  bool haynh=false;
243  for (i=0; i<nlen; i++)
244  {
245  if (nl[i].f.es(n_borrado)) continue;
246  if (nl[i].f.es(n_h))
247  {
248  haynh=true;
249  continue;
250  }
251  in=map[i]=n+=nl[i]; // presupongo que es n.len-1
252  o->add_no_rep(in,nc,puesto,epsilon);
253  if (puesto) continue;
254  if (nc<0||nc>=nlen)
255  {
256  add_error(Bad_Format);
257  return false;
258  }
259  hayrep=true;
260  d=n[nc].distancia(nl[i]);
261  if (d>dmax) dmax=d;
262  n.len--;
263  map[i]=nc;// si no es n.len-1 usar remove
264  n[nc].f.set(nl[i].f); // oreo flags
265  if (n[nc].h>ERRADM&&nl[i].h>ERRADM)
266  set_min(n[nc].h,nl[i].h); // h es el menor
267  else
268  set_max(n[nc].h,nl[i].h); // h > 0
269  n[nc].v=(n[nc].v+nl[i].v)/2;
270  }
271  // los nodos de h
272  if (haynh) for (i=0; i<nlen; i++)
273  {
274  if (nl[i].f.es(n_borrado)) continue;
275  if (nl[i].f.noes(n_h)) continue;
276  in=map[i]=n+=nl[i]; // presupongo que es n.len-1
277  // o->add_no_rep(in,nc,puesto,epsilon);
278  if (puesto)
279  {
280  nodosh++;
281  if (n[in].h<ERRADM) n[in].h=MAXREAL;
282  continue;
283  }
284  n.len--;
285  map[i]=nc;// si no es n.len-1 usar remove
286  // no oreo flags
287  if (n[nc].h>ERRADM&&nl[i].h>ERRADM)
288  set_min(n[nc].h,nl[i].h); // h es el menor
289  else
290  set_max(n[nc].h,nl[i].h); // h > 0
291  if (n[nc].h<ERRADM) n[nc].h=MAXREAL;
292  n[nc].v=(n[nc].v+nl[i].v)/2;
293  }
294 
295  // modifica los elementos y hace eldenod
296  if (el)
297  {
298  tipo.reset(m_nodos);
299  int nv,dim,ie;
300  flagtype fdim;
301  e.resize(el);
302  for (i=0; i<el.len; i++)
303  {
304  elemento &ei=el[i];
305  nv=ei.nv();
306  dim=ei.dim();
307  // verifica nodos h
308  for (haynh=false,j=0; j<nv; j++)
309  {
310  if (n[ei[j]=map[ei[j]]].f.es(n_h)) haynh=true;
311  }
312  // verifica si el elm esta repetido
313  cpline &en=n[ei[0]].e;
314  for (j=0; j<en.len; j++) if (ei==e[en[j]]) break;
315  if (j<en.len) // repetido
316  {
317  add_warning(Repeated_Elements);
318  continue;
319  }
320  // verifica si el elm tiene nodos repetidos
321  for (j=0; j<nv; j++)
322  if (ei[j]==ei.npos(j))
323  break;
324  if (j<nv) continue; // no lo agrega
325  // nodos h
326  if (haynh) // no agrega el elemento, solo saca el h de cada nodo
327  {
328  for (j=0; j<nv; j++)
329  {
330  nodo &ni=n[ei[j]];
331  if (ni.f.noes(n_h)) continue;
332  if (ni.h!=MAXREAL) continue; // ya tiene h
333  d=ni.distancia(n[ei.nant(j)]);
334  if (d>ERRADM) ni.h=d;
335  d=ni.distancia(n[ei.npos(j)]);
336  if (d>ERRADM&&d<ni.h) ni.h=d;
337  }
338  continue;
339  }
340  // agrega el elemento
341  ie=e+=ei;
342  for (j=0; j<nv; j++) n[ei[j]].e+=ie;
343  eltipos.set(ei.ftipo());
344  if (dim==0) fdim.set(m_nodos);
345  else if (dim==1) fdim.set(m_lin);
346  else if (dim==2) fdim.set(m_sup);
347  else if (dim==3) fdim.set(m_vol);
348  }
349  if (fdim==m_nodos) tipo.set(m_nodos);
350  if (fdim==m_lin) tipo.set(m_lin);
351  if (fdim==m_sup) tipo.set(m_sup);
352  if (fdim==m_vol) tipo.set(m_vol);
353  }
354  else tipo.set(m_nodos);
355 
356  return true;
357  KRATOS_CATCH("")
358  }
359 
360  //*******************************************************************************************
361  //*******************************************************************************************
362  //void UpdateNodePosition(ModelPart& ThisModelPart)
363  //{
364  // KRATOS_TRY
365  //
366  // for(int i = 0 ; i < n.len ; i++)
367  // {
368  // Node& r_node = ThisModelPart.Nodes()[i+1];
369  // n[i][0] = r_node.X();
370  // n[i][1] = r_node.Y();
371  // n[i][2] = r_node.Z();
372  // }
373  // KRATOS_CATCH("")
374  //}
375 
376  //*******************************************************************************************
377  //*******************************************************************************************
378  //void SetNodalH(ModelPart& ThisModelPart)
379  //{
380  // KRATOS_TRY
381  //
382  // ModelPart::NodesContainerType::iterator in = ThisModelPart.NodesBegin();
383  // for(int i = 0 ; i < n.len ; i++)
384  // {
385  // Node& r_node = *(in);
386  // double KratosH = r_node.FastGetSolutionStepValue(NODAL_H);
387 
388  // if(r_node.FastGetSolutionStepValue(IS_BOUNDARY) == 0) //only on internal nodes
389  // {
390  // n[i].h = KratosH;
391  // }
392 
393  // //KRATOS_WATCH(n[i].h);
394  // in++;
395  // }
396  // KRATOS_CATCH("")
397  //}
398 
399  //*******************************************************************************************
400  //*******************************************************************************************
402  ModelPart& ThisModelPart ,
403  Element const& rReferenceElement,
404  Condition const& rReferenceBoundaryCondition,
405  double my_alpha = 1.4)
406  {
407  KRATOS_TRY
408 
409  delaunay(true,false);
410  alpha_shape(my_alpha);
411 
412  //mk_vecinos_y_frontera();
413  mk_nn();
414  //mk_frontera();
415 
416  ThisModelPart.Elements().clear();
417 
418  for(int i = 0 ; i < n.len ; i++)
419  {
420  Node& r_node = ThisModelPart.Nodes()[i+1];
421  r_node.X() = n[i][0];
422  r_node.Y() = n[i][1];
423  r_node.Z() = n[i][2];
424  }
425 
426  Properties::Pointer properties = ThisModelPart.GetMesh().pGetProperties(1);
427 
428  ModelPart::NodesContainerType& r_model_nodes = ThisModelPart.Nodes();
429 
430  //adding domain elements
431  for(int i_element = 0 ; i_element < e.len ; i_element++)
432  {
434 
435  Element::GeometryType::Pointer p_geometry;
436 
437  int nv = e[i_element].nv();
438  //temp.reserve(nv);
439  for(int i_node = 0 ; i_node < nv ; i_node++)
440  {
441  int index = e[i_element][i_node] + 1;
442  temp.push_back(r_model_nodes(index));
443  }
444 
445  p_geometry = Element::GeometryType::Pointer(new Element::GeometryType(temp));
446 
447  Element::Pointer p_element = rReferenceElement.Create(i_element + 1, *p_geometry, properties);
448 
449  ThisModelPart.Elements().push_back(p_element);
450  }
451 
452 
453  //adding boundary elements
454  //ThisModelPart.Conditions().clear();
455  //for(int i_bound = 0; i_bound < frontera.len ; i_bound++)
456  //{
457  // for(int i_element = 0 ; i_element < frontera[i_bound].e.len ; i_element++)
458  // {
459  // Condition::NodesArrayType temp;
460 
461  // for(int i_node = 0 ; i_node < frontera[i_bound].e[i_element].nv() ; i_node++)
462  // {
463  // int index = frontera[i_bound].e[i_element][i_node] + 1;
464  // temp.push_back(r_model_nodes(index));
465  // }
466 
467  // int pos = ThisModelPart.Conditions().size();
468  // Condition::Pointer p_cond = rReferenceBoundaryCondition.Create(pos, temp, properties);
469 
470  // ThisModelPart.Conditions().push_back(p_cond);
471 
472  // }
473  //}
474 
475  //resetting the boundary flags needed on the frontier
476  for(ModelPart::NodeIterator i_node = ThisModelPart.NodesBegin() ; i_node != ThisModelPart.NodesEnd() ; ++i_node)
477  {
478  i_node->GetSolutionStepValue(IS_BOUNDARY) = 0.00;
479  i_node->GetSolutionStepValue(IS_FREE_SURFACE) = 0.00;
480  }
481 
482  //setting the flags needed on the frontier
483  for(int i_bound = 0; i_bound < frontera.len ; i_bound++)
484  {
485  for(int ii = 0 ; ii < frontera[i_bound].n.len ; ii++)
486  {
487  //attention: nodes identified with 1 are nodes in a larger domain
488  //nodes identified with 2 identify nodes which are boundaries of a single isolated element
489 
490  if(frontera[i_bound].e.len > 3) //in this case the frontier is "big" as it has more than three edges
491  {
492  ThisModelPart.Nodes()[frontera[i_bound].n[ii]+1].GetSolutionStepValue(IS_BOUNDARY) = 1;
493  }
494  else
495  {
496  ThisModelPart.Nodes()[frontera[i_bound].n[ii]+1].GetSolutionStepValue(IS_BOUNDARY) = 2;
497  }
498 
499  //attention: nodes which
500  }
501  }
502 
503  //free surface nodes are nodes of the boundary which are not nodes of the structure
504  for(ModelPart::NodeIterator i_node = ThisModelPart.NodesBegin() ; i_node != ThisModelPart.NodesEnd() ; ++i_node)
505  {
506  if(i_node->GetSolutionStepValue(IS_BOUNDARY) == 1.00 && i_node->GetSolutionStepValue(IS_STRUCTURE) != 1)
507  i_node->GetSolutionStepValue(IS_FREE_SURFACE) = 1.00;
508  }
509 
511  for(int i = 0 ; i < nn.len ; i++)
512  {
513  int numb_of_neighb = nn[i].len;
514  GlobalPointersVector< Node >& neighbours = (r_model_nodes[i+1].GetValues(NEIGHBOUR_NODES));
515  //PointerVector< Node >& neighbours = (r_model_nodes[i+1].GetValues(NEIGHBOUR_NODES));
516 
517  neighbours.clear();
518  neighbours.reserve(numb_of_neighb);
519  for(int j = 0; j<numb_of_neighb; j++)
520  {
521  int ii = nn[i][j]+1;
522  //neighbours.push_back(Kratos::weak_ptr< Node >( r_model_nodes(ii) ) );
523  neighbours.push_back( r_model_nodes(ii) );
524  }
525  }
526 
527  //perform an update to ensure the database is allocated correctly
528  for(ModelPart::NodeIterator i_node = ThisModelPart.NodesBegin() ; i_node != ThisModelPart.NodesEnd() ; ++i_node)
529  {
530  (i_node->SolutionStepData()).Update();
531  }
532 
533 
534  KRATOS_CATCH("")
535  }
536 
537  //*******************************************************************************************
538  //*******************************************************************************************
539  //void RefineMesh(ModelPart& ThisModelPart)
540  //{
541  // KRATOS_TRY
542  // // voronoi v(this);
543  // // v.parcial=false;
544 
545  // // if (!v.delaunay()) // triangulacion (del para que no meta ni saque ptos)
546  // // return ; //false
547 
548  // // double alpha=1.2;
549  // // v.alpha_shape(alpha);// alpha shape
550 
551  // //misma cantidad de nodos porque hice delaunay sin refinar
552  // for(int i=0;i<n.len;i++) n[i].h=fabs(n[i][0]/10.00 + n[i][1]/10.00) + 0.2;
553 
554  // // bool calpha = false; // Don't do alpha_shape
555  // // // bool calpha = true; // Do alpha_shape
556  // // if (!v.refina_esferas(calpha)) // triangulacion
557  // // return ; //false
558  // // // if (slivers) v.rm_slivers();
559  // // v.s2e();
560  // // mk_nn();
561 
562  // delaunay_refinado(true);
563  // ThisModelPart.Nodes().clear();
564  // ThisModelPart.Elements().clear();
565 
566  // for(int i = 0 ; i < n.len ; i++)
567  // {
568  // Node::Pointer p_node = Kratos::Node::Pointer(new Kratos::Node(0,n[i][0], n[i][1], n[i][2]));
569  // //Node::Pointer p_node = n[i].GetKratosNode();
570  // p_node->SetId(i+1);
571  // ThisModelPart.Nodes().push_back(p_node);
572  // }
573 
574  // //Node zero(0,0,0,0);
575  // Properties::Pointer properties(new Properties);
576 
577  // for(int i_element = 0 ; i_element < e.len ; i_element++)
578  // {
579  // Element::GeometryType temp;
580  // Element::GeometryType::Pointer p_geometry;
581 
582  // for(int i_node = 0 ; i_node < e[i_element].nv() ; i_node++)
583  // temp.push_back(ThisModelPart.Nodes()[e[i_element][i_node] + 1]);
584 
585 
586  // //if(e[i_element].tipo() == e_triangulo)
587  // // p_geometry = Element::GeometryType::Pointer(new Triangle2D<Node >(temp.Points()));
588  // //else
589  // p_geometry = Element::GeometryType::Pointer(new Element::GeometryType(temp));
590 
591  // Element::Pointer p_element(new Element(i_element + 1, p_geometry, properties));
592  // ThisModelPart.Elements().push_back(p_element);
593  // }
594  // KRATOS_CATCH("")
595  //}
596 
597 
598 
602 
603 
607 
608 
612 
614  virtual std::string Info() const
615  {
616  return "";
617  }
618 
620  virtual void PrintInfo(std::ostream& rOStream) const {}
621 
623  virtual void PrintData(std::ostream& rOStream) const {}
624 
625 
629 
630 
632 
633 protected:
636 
637 
641 
642 
646 
647 
651 
652 
656 
657 
661 
662 
666 
667 
669 
670 private:
673 
674 
678 
679 
683 
684 
688 
689 
693 
694 
698 
699 
703 
705  MeshSuiteModeler& operator=(MeshSuiteModeler const& rOther);
706 
708  MeshSuiteModeler(MeshSuiteModeler const& rOther);
709 
710 
712 
713 }; // Class MeshSuiteModeler
714 
716 
719 
720 
724 
725 
727 inline std::istream& operator >> (std::istream& rIStream,
728  MeshSuiteModeler& rThis);
729 
731 inline std::ostream& operator << (std::ostream& rOStream,
732  const MeshSuiteModeler& rThis)
733 {
734  rThis.PrintInfo(rOStream);
735  rOStream << std::endl;
736  rThis.PrintData(rOStream);
737 
738  return rOStream;
739 }
741 
742 
743 } // namespace Kratos.
744 
745 #endif // KRATOS_MESH_SUITE_MODELER_H_INCLUDED defined
746 
747 
Base class for all Conditions.
Definition: condition.h:59
Base class for all Elements.
Definition: element.h:60
virtual Pointer Create(IndexType NewId, NodesArrayType const &ThisNodes, PropertiesType::Pointer pProperties) const
It creates a new element pointer.
Definition: element.h:202
Geometry base class.
Definition: geometry.h:71
This class is a vector which stores global pointers.
Definition: global_pointers_vector.h:61
void push_back(TPointerType x)
Definition: global_pointers_vector.h:322
void clear()
Definition: global_pointers_vector.h:361
void reserve(int dim)
Definition: global_pointers_vector.h:375
PropertiesType::Pointer pGetProperties(IndexType PropertiesId)
Definition: mesh.h:394
Short class definition.
Definition: mesh_suite_modeler.h:66
void FixNodes(ModelPart &ThisModelPart)
Definition: mesh_suite_modeler.h:138
virtual void PrintInfo(std::ostream &rOStream) const
Print information about this object.
Definition: mesh_suite_modeler.h:620
void ReGenerateMesh(ModelPart &ThisModelPart, Element const &rReferenceElement, Condition const &rReferenceBoundaryCondition, double my_alpha=1.4)
Definition: mesh_suite_modeler.h:401
virtual ~MeshSuiteModeler()
Destructor.
Definition: mesh_suite_modeler.h:82
void GenerateMesh(ModelPart &ThisModelPart, Element const &rReferenceElement)
Definition: mesh_suite_modeler.h:97
int SetMesh(ModelPart &ThisModelPart)
Definition: mesh_suite_modeler.h:167
virtual std::string Info() const
Turn back information as a string.
Definition: mesh_suite_modeler.h:614
virtual void PrintData(std::ostream &rOStream) const
Print object's data.
Definition: mesh_suite_modeler.h:623
int UpdateMesh(ModelPart &ThisModelPart)
Definition: mesh_suite_modeler.h:149
MeshSuiteModeler()
Default constructor.
Definition: mesh_suite_modeler.h:79
KRATOS_CLASS_POINTER_DEFINITION(MeshSuiteModeler)
Pointer definition of MeshSuiteModeler.
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
ElementIterator ElementsBegin(IndexType ThisIndex=0)
Definition: model_part.h:1169
NodeIterator NodesBegin(IndexType ThisIndex=0)
Definition: model_part.h:487
MeshType::NodeIterator NodeIterator
Definition: model_part.h:134
ElementsContainerType & Elements(IndexType ThisIndex=0)
Definition: model_part.h:1189
MeshType::NodesContainerType NodesContainerType
Nodes container. Which is a vector set of nodes with their Id's as key.
Definition: model_part.h:128
ElementIterator ElementsEnd(IndexType ThisIndex=0)
Definition: model_part.h:1179
MeshType::ElementIterator ElementIterator
Definition: model_part.h:174
NodeIterator NodesEnd(IndexType ThisIndex=0)
Definition: model_part.h:497
MeshType & GetMesh(IndexType ThisIndex=0)
Definition: model_part.h:1791
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
This class defines the node.
Definition: node.h:65
double Y() const
Definition: point.h:187
double Z() const
Definition: point.h:193
double X() const
Definition: point.h:181
PointerVector is a container like stl vector but using a vector to store pointers to its data.
Definition: pointer_vector.h:72
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
std::istream & operator>>(std::istream &rIStream, LinearMasterSlaveConstraint &rThis)
input stream function
std::ostream & operator<<(std::ostream &rOStream, const LinearMasterSlaveConstraint &rThis)
output stream function
Definition: linear_master_slave_constraint.h:432
f
Definition: generate_convection_diffusion_explicit_element.py:112
h
Definition: generate_droplet_dynamics.py:91
int d
Definition: ode_solve.py:397
int n
manufactured solution and derivatives (u=0 at z=0 dudz=0 at z=domain_height)
Definition: ode_solve.py:402
int j
Definition: quadrature.py:648
el
Definition: read_stl.py:25
float temp
Definition: rotating_cone.py:85
alpha_shape
Definition: script.py:120
int dim
Definition: sensitivityMatrix.py:25
integer i
Definition: TensorModule.f:17
e
Definition: run_cpp_mpi_tests.py:31