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.
pfem_2_monolithic_slip_scheme.h
Go to the documentation of this file.
1 /*
2 ==============================================================================
3 KratosFluidDynamicsApplication
4 A library based on:
5 Kratos
6 A General Purpose Software for Multi-Physics Finite Element Analysis
7 Version 1.0 (Released on march 05, 2007).
8 
9 Copyright 2007
10 Pooyan Dadvand, Riccardo Rossi, Janosch Stascheit, Felix Nagel
11 pooyan@cimne.upc.edu
12 rrossi@cimne.upc.edu
13 janosch.stascheit@rub.de
14 nagel@sd.rub.de
15 - CIMNE (International Center for Numerical Methods in Engineering),
16 Gran Capita' s/n, 08034 Barcelona, Spain
17 - Ruhr-University Bochum, Institute for Structural Mechanics, Germany
18 
19 
20 Permission is hereby granted, free of charge, to any person obtaining
21 a copy of this software and associated documentation files (the
22 "Software"), to deal in the Software without restriction, including
23 without limitation the rights to use, copy, modify, merge, publish,
24 distribute, sublicense and/or sell copies of the Software, and to
25 permit persons to whom the Software is furnished to do so, subject to
26 the following condition:
27 
28 Distribution of this code for any commercial purpose is permissible
29 ONLY BY DIRECT ARRANGEMENT WITH THE COPYRIGHT OWNERS.
30 
31 The above copyright notice and this permission notice shall be
32 included in all copies or substantial portions of the Software.
33 
34 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
35 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
36 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
37 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
38 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
39 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
40 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
41 
42 ==============================================================================
43  */
44 
45 #if !defined(KRATOS_PFEM2_MONOLITHIC_SLIP_SCHEME )
46 #define KRATOS_PFEM2_MONOLITHIC_SLIP_SCHEME
47 
48 
49 /* System includes */
50 
51 
52 /* External includes */
53 #include "boost/smart_ptr.hpp"
54 
55 /* Project includes */
56 #include "includes/define.h"
57 #include "includes/model_part.h"
59 #include "includes/variables.h"
61 
62 #include "containers/array_1d.h"
63 #include "utilities/openmp_utils.h"
65 #include "processes/process.h"
66 
67 namespace Kratos {
68 
94  template<class TSparseSpace,
95  class TDenseSpace //= DenseSpace<double>
96  >
97  class PFEM2MonolithicSlipScheme : public Scheme<TSparseSpace, TDenseSpace> {
98  public:
102  //typedef boost::shared_ptr< ResidualBasedPredictorCorrectorBossakScheme<TSparseSpace,TDenseSpace> > Pointer;
103 
105 
107 
108  typedef typename BaseType::TDataType TDataType;
109 
111 
113 
115 
117 
119 
121 
123 
124 
132  PFEM2MonolithicSlipScheme(unsigned int DomainSize)
133  :
134  Scheme<TSparseSpace, TDenseSpace>(),
135  mRotationTool(DomainSize,DomainSize+1,SLIP)
136  {
137  }
138 
139 
143 
144 
153  //***************************************************************************
154 
155  virtual void Update(ModelPart& r_model_part,
156  DofsArrayType& rDofSet,
158  TSystemVectorType& Dv,
159  TSystemVectorType& b) override
160  {
161  KRATOS_TRY;
162 
163  mRotationTool.RotateVelocities(r_model_part);
164 
165  BasicUpdateOperations(r_model_part, rDofSet, A, Dv, b);
166 
167  mRotationTool.RecoverVelocities(r_model_part);
168 
169  KRATOS_CATCH("")
170  }
171 
172  //***************************************************************************
173 
174  virtual void BasicUpdateOperations(ModelPart& rModelPart,
175  DofsArrayType& rDofSet,
177  TSystemVectorType& Dv,
179  {
180  KRATOS_TRY
181 
182  int NumThreads = OpenMPUtils::GetNumThreads();
183  OpenMPUtils::PartitionVector DofSetPartition;
184  OpenMPUtils::DivideInPartitions(rDofSet.size(), NumThreads, DofSetPartition);
185 
186  //update of velocity (by DOF)
187  #pragma omp parallel
188  {
189  int k = OpenMPUtils::ThisThread();
190 
191  typename DofsArrayType::iterator DofSetBegin = rDofSet.begin() + DofSetPartition[k];
192  typename DofsArrayType::iterator DofSetEnd = rDofSet.begin() + DofSetPartition[k + 1];
193 
194  for (typename DofsArrayType::iterator itDof = DofSetBegin; itDof != DofSetEnd; itDof++) {
195  if (itDof->IsFree()) {
196  itDof->GetSolutionStepValue() += TSparseSpace::GetValue(Dv, itDof->EquationId());
197  }
198  }
199 
200  }
201 
202  KRATOS_CATCH("")
203  }
204 
205 
206 
207  //***************************************************************************
208 
220  void CalculateSystemContributions(Element& rCurrentElement,
221  LocalSystemMatrixType& LHS_Contribution,
222  LocalSystemVectorType& RHS_Contribution,
224  const ProcessInfo& CurrentProcessInfo) override
225  {
226  KRATOS_TRY
227 
228  //Initializing the non linear iteration for the current element
229  //KRATOS_WATCH(LHS_Contribution);
230  //basic operations for the element considered
231  rCurrentElement.CalculateLocalSystem(LHS_Contribution, RHS_Contribution, CurrentProcessInfo);
232 
233  rCurrentElement.EquationIdVector(EquationId, CurrentProcessInfo);
234 
235  // If there is a slip condition, apply it on a rotated system of coordinates
236  mRotationTool.Rotate(LHS_Contribution,RHS_Contribution,rCurrentElement.GetGeometry());
237  mRotationTool.ApplySlipCondition(LHS_Contribution,RHS_Contribution,rCurrentElement.GetGeometry());
238 
239  KRATOS_CATCH("")
240  }
241 
242  void CalculateRHSContribution(Element& rCurrentElement,
243  LocalSystemVectorType& RHS_Contribution,
245  const ProcessInfo& CurrentProcessInfo) override
246  {
247 
248  //Initializing the non linear iteration for the current element
249 
250  //basic operations for the element considered
251  rCurrentElement.CalculateRightHandSide(RHS_Contribution, CurrentProcessInfo);
252 
253  rCurrentElement.EquationIdVector(EquationId, CurrentProcessInfo);
254 
255 
256  // If there is a slip condition, apply it on a rotated system of coordinates
257  mRotationTool.Rotate(RHS_Contribution,rCurrentElement.GetGeometry());
258  mRotationTool.ApplySlipCondition(RHS_Contribution,rCurrentElement.GetGeometry());
259  }
260 
264  virtual void CalculateSystemContributions(Condition& rCurrentCondition,
265  LocalSystemMatrixType& LHS_Contribution,
266  LocalSystemVectorType& RHS_Contribution,
268  const ProcessInfo& CurrentProcessInfo) override
269  {
270  KRATOS_TRY
271 
272  //KRATOS_WATCH("CONDITION LOCALVELOCITYCONTRIBUTION IS NOT DEFINED");
273  rCurrentCondition.CalculateLocalSystem(LHS_Contribution, RHS_Contribution, CurrentProcessInfo);
274  rCurrentCondition.EquationIdVector(EquationId, CurrentProcessInfo);
275 
276  // Rotate contributions (to match coordinates for slip conditions)
277  //mRotationTool.Rotate(LHS_Contribution,RHS_Contribution,rCurrentCondition->GetGeometry());
278  //mRotationTool.ApplySlipCondition(LHS_Contribution,RHS_Contribution,rCurrentCondition->GetGeometry());
279 
280  KRATOS_CATCH("")
281  }
282 
283  virtual void CalculateRHSContribution(Condition& rCurrentCondition,
284  LocalSystemVectorType& RHS_Contribution,
286  const ProcessInfo& rCurrentProcessInfo) override
287  {
288  KRATOS_TRY;
289 
290 
291  //KRATOS_WATCH("CONDITION LOCALVELOCITYCONTRIBUTION IS NOT DEFINED");
292  //Initializing the non linear iteration for the current condition
293 
294  //basic operations for the element considered
295  rCurrentCondition.CalculateRightHandSide(RHS_Contribution,rCurrentProcessInfo);
296 
297  rCurrentCondition.EquationIdVector(EquationId,rCurrentProcessInfo);
298 
299 
300  // Rotate contributions (to match coordinates for slip conditions)
301  mRotationTool.Rotate(RHS_Contribution,rCurrentCondition.GetGeometry());
302  mRotationTool.ApplySlipCondition(RHS_Contribution,rCurrentCondition.GetGeometry());
303 
304  KRATOS_CATCH("");
305  }
306  //*************************************************************************************
307  //*************************************************************************************
308 
309  virtual void InitializeSolutionStep(ModelPart& r_model_part,
311  TSystemVectorType& Dx,
312  TSystemVectorType& b) override
313  {
314  const ProcessInfo& CurrentProcessInfo = r_model_part.GetProcessInfo();
315 
317 
318  double DeltaTime = CurrentProcessInfo[DELTA_TIME];
319 
320  if (DeltaTime == 0)
321  KRATOS_THROW_ERROR(std::logic_error, "detected delta_time = 0 ... check if the time step is created correctly for the current model part", "");
322 
323  }
324  //*************************************************************************************
325  //*************************************************************************************
326 
327  virtual void InitializeNonLinIteration(ModelPart& r_model_part,
329  TSystemVectorType& Dx,
330  TSystemVectorType& b) override
331  {
332  KRATOS_TRY
333 
334  KRATOS_CATCH("")
335  }
336 
338  {
339  /*
340  ProcessInfo& CurrentProcessInfo = rModelPart.GetProcessInfo();
341 
342  //if orthogonal subscales are computed
343 
344  if (CurrentProcessInfo[OSS_SWITCH] == 1.0) {
345  if (rModelPart.GetCommunicator().MyPID() == 0)
346  std::cout << "Computing OSS projections" << std::endl;
347  for (typename ModelPart::NodesContainerType::iterator ind = rModelPart.NodesBegin(); ind != rModelPart.NodesEnd(); ind++) {
348 
349  noalias(ind->FastGetSolutionStepValue(ADVPROJ)) = ZeroVector(3);
350 
351  ind->FastGetSolutionStepValue(DIVPROJ) = 0.0;
352 
353  ind->FastGetSolutionStepValue(NODAL_AREA) = 0.0;
354 
355 
356  }//end of loop over nodes
357 
358  //loop on nodes to compute ADVPROJ CONVPROJ NODALAREA
359  array_1d<double, 3 > output;
360 
361 
362  for (typename ModelPart::ElementsContainerType::iterator elem = rModelPart.ElementsBegin(); elem != rModelPart.ElementsEnd(); elem++)
363  {
364  elem->Calculate(ADVPROJ, output, CurrentProcessInfo);
365  }
366 
367  rModelPart.GetCommunicator().AssembleCurrentData(NODAL_AREA);
368  rModelPart.GetCommunicator().AssembleCurrentData(DIVPROJ);
369  rModelPart.GetCommunicator().AssembleCurrentData(ADVPROJ);
370 
371  // Correction for periodic conditions
372  this->PeriodicConditionProjectionCorrection(rModelPart);
373 
374  for (typename ModelPart::NodesContainerType::iterator ind = rModelPart.NodesBegin(); ind != rModelPart.NodesEnd(); ind++)
375  {
376  if (ind->FastGetSolutionStepValue(NODAL_AREA) == 0.0)
377  {
378  ind->FastGetSolutionStepValue(NODAL_AREA) = 1.0;
379  //KRATOS_WATCH("*********ATTENTION: NODAL AREA IS ZERRROOOO************");
380  }
381  const double Area = ind->FastGetSolutionStepValue(NODAL_AREA);
382  ind->FastGetSolutionStepValue(ADVPROJ) /= Area;
383  ind->FastGetSolutionStepValue(DIVPROJ) /= Area;
384  }
385  }
386  */
387  }
388 
390  {
391  /*
392  Element::EquationIdVectorType EquationId;
393  LocalSystemVectorType RHS_Contribution;
394  LocalSystemMatrixType LHS_Contribution;
395  ProcessInfo& CurrentProcessInfo = rModelPart.GetProcessInfo();
396 
397  for (ModelPart::NodeIterator itNode = rModelPart.NodesBegin(); itNode != rModelPart.NodesEnd(); ++itNode)
398  {
399  itNode->FastGetSolutionStepValue(REACTION_X,0) = 0.0;
400  itNode->FastGetSolutionStepValue(REACTION_Y,0) = 0.0;
401  itNode->FastGetSolutionStepValue(REACTION_Z,0) = 0.0;
402  }
403 
404  for (ModelPart::ElementsContainerType::ptr_iterator itElem = rModelPart.Elements().ptr_begin(); itElem != rModelPart.Elements().ptr_end(); ++itElem)
405  {
406  //KRATOS_WATCH(LHS_Contribution);
407  //basic operations for the element considered
408  (*itElem)->CalculateLocalSystem(LHS_Contribution, RHS_Contribution, CurrentProcessInfo);
409 
410  (*itElem)->EquationIdVector(EquationId, CurrentProcessInfo);
411 
412 
413 
414  GeometryType& rGeom = (*itElem)->GetGeometry();
415  unsigned int NumNodes = rGeom.PointsNumber();
416  unsigned int Dimension = rGeom.WorkingSpaceDimension();
417  unsigned int index = 0;
418 
419  for (unsigned int i = 0; i < NumNodes; i++)
420  {
421  rGeom[i].FastGetSolutionStepValue(REACTION_X,0) -= RHS_Contribution[index++];
422  rGeom[i].FastGetSolutionStepValue(REACTION_Y,0) -= RHS_Contribution[index++];
423  if (Dimension == 3) rGeom[i].FastGetSolutionStepValue(REACTION_Z,0) -= RHS_Contribution[index++];
424  index++; // skip pressure dof
425  }
426  }
427 
428  rModelPart.GetCommunicator().AssembleCurrentData(REACTION);
429  */
430  // Base scheme calls FinalizeSolutionStep method of elements and conditions
432  }
433 
434  //************************************************************************************************
435  //************************************************************************************************
436 
459  protected:
491  private:
501 
502 
529  }; /* Class Scheme */
530 
539 } /* namespace Kratos.*/
540 
541 #endif /* KRATOS_RESIDUALBASED_PREDICTOR_CORRECTOR_BOSSAK_SCHEME defined */
Base class for all Conditions.
Definition: condition.h:59
virtual void EquationIdVector(EquationIdVectorType &rResult, const ProcessInfo &rCurrentProcessInfo) const
Definition: condition.h:260
virtual void CalculateRightHandSide(VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo)
Definition: condition.h:440
virtual void CalculateLocalSystem(MatrixType &rLeftHandSideMatrix, VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo)
Definition: condition.h:408
virtual void RotateVelocities(ModelPart &rModelPart) const
Transform nodal velocities to the rotated coordinates (aligned with each node's normal)
Definition: coordinate_transformation_utilities.h:631
virtual void RecoverVelocities(ModelPart &rModelPart) const
Transform nodal velocities from the rotated system to the original one.
Definition: coordinate_transformation_utilities.h:669
virtual void ApplySlipCondition(TLocalMatrixType &rLocalMatrix, TLocalVectorType &rLocalVector, GeometryType &rGeometry) const
Apply slip boundary conditions to the rotated local contributions.
Definition: coordinate_transformation_utilities.h:565
virtual void Rotate(TLocalMatrixType &rLocalMatrix, TLocalVectorType &rLocalVector, GeometryType &rGeometry) const
Rotate the local system contributions so that they are oriented with each node's normal.
Definition: coordinate_transformation_utilities.h:447
Base class for all Elements.
Definition: element.h:60
virtual void CalculateRightHandSide(VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo)
Definition: element.h:437
virtual void EquationIdVector(EquationIdVectorType &rResult, const ProcessInfo &rCurrentProcessInfo) const
Definition: element.h:258
std::vector< DofType::Pointer > DofsVectorType
Definition: element.h:100
virtual void CalculateLocalSystem(MatrixType &rLeftHandSideMatrix, VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo)
Definition: element.h:405
std::vector< std::size_t > EquationIdVectorType
Definition: element.h:98
GeometryType & GetGeometry()
Returns the reference of the geometry.
Definition: geometrical_object.h:158
Geometry base class.
Definition: geometry.h:71
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
ProcessInfo & GetProcessInfo()
Definition: model_part.h:1746
static void DivideInPartitions(const int NumTerms, const int NumThreads, PartitionVector &Partitions)
Divide an array of length NumTerms between NumThreads threads.
Definition: openmp_utils.h:158
static int ThisThread()
Wrapper for omp_get_thread_num().
Definition: openmp_utils.h:108
std::vector< int > PartitionVector
Vector type for the output of DivideInPartitions method.
Definition: openmp_utils.h:53
Definition: pfem_2_monolithic_slip_scheme.h:97
BaseType::LocalSystemMatrixType LocalSystemMatrixType
Definition: pfem_2_monolithic_slip_scheme.h:120
BaseType::TSystemMatrixType TSystemMatrixType
Definition: pfem_2_monolithic_slip_scheme.h:114
virtual void Update(ModelPart &r_model_part, DofsArrayType &rDofSet, TSystemMatrixType &A, TSystemVectorType &Dv, TSystemVectorType &b) override
Definition: pfem_2_monolithic_slip_scheme.h:155
PFEM2MonolithicSlipScheme(unsigned int DomainSize)
Definition: pfem_2_monolithic_slip_scheme.h:132
void CalculateRHSContribution(Element &rCurrentElement, LocalSystemVectorType &RHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &CurrentProcessInfo) override
This function is designed to calculate just the RHS contribution.
Definition: pfem_2_monolithic_slip_scheme.h:242
BaseType::DofsArrayType DofsArrayType
Definition: pfem_2_monolithic_slip_scheme.h:110
Scheme< TSparseSpace, TDenseSpace > BaseType
Definition: pfem_2_monolithic_slip_scheme.h:106
void FinalizeSolutionStep(ModelPart &rModelPart, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b) override
Function called once at the end of a solution step, after convergence is reached if an iterative proc...
Definition: pfem_2_monolithic_slip_scheme.h:389
virtual void CalculateRHSContribution(Condition &rCurrentCondition, LocalSystemVectorType &RHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &rCurrentProcessInfo) override
Functions totally analogous to the precedent but applied to the "condition" objects.
Definition: pfem_2_monolithic_slip_scheme.h:283
virtual void BasicUpdateOperations(ModelPart &rModelPart, DofsArrayType &rDofSet, TSystemMatrixType &A, TSystemVectorType &Dv, TSystemVectorType &b)
Definition: pfem_2_monolithic_slip_scheme.h:174
virtual void CalculateSystemContributions(Condition &rCurrentCondition, LocalSystemMatrixType &LHS_Contribution, LocalSystemVectorType &RHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &CurrentProcessInfo) override
Definition: pfem_2_monolithic_slip_scheme.h:264
KRATOS_CLASS_POINTER_DEFINITION(PFEM2MonolithicSlipScheme)
BaseType::TSystemVectorType TSystemVectorType
Definition: pfem_2_monolithic_slip_scheme.h:116
Element::DofsVectorType DofsVectorType
Definition: pfem_2_monolithic_slip_scheme.h:112
virtual void FinalizeNonLinIteration(ModelPart &rModelPart, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b) override
Function to be called when it is needed to finalize an iteration. It is designed to be called at the ...
Definition: pfem_2_monolithic_slip_scheme.h:337
BaseType::TDataType TDataType
Definition: pfem_2_monolithic_slip_scheme.h:108
virtual void InitializeNonLinIteration(ModelPart &r_model_part, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b) override
unction to be called when it is needed to initialize an iteration. It is designed to be called at the...
Definition: pfem_2_monolithic_slip_scheme.h:327
Element::GeometryType GeometryType
Definition: pfem_2_monolithic_slip_scheme.h:122
virtual ~PFEM2MonolithicSlipScheme()
Definition: pfem_2_monolithic_slip_scheme.h:142
void CalculateSystemContributions(Element &rCurrentElement, LocalSystemMatrixType &LHS_Contribution, LocalSystemVectorType &RHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &CurrentProcessInfo) override
Definition: pfem_2_monolithic_slip_scheme.h:220
BaseType::LocalSystemVectorType LocalSystemVectorType
Definition: pfem_2_monolithic_slip_scheme.h:118
virtual void InitializeSolutionStep(ModelPart &r_model_part, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b) override
Function called once at the beginning of each solution step.
Definition: pfem_2_monolithic_slip_scheme.h:309
A sorted associative container similar to an STL set, but uses a vector to store pointers to its data...
Definition: pointer_vector_set.h:72
boost::indirect_iterator< typename TContainerType::iterator > iterator
Definition: pointer_vector_set.h:95
size_type size() const
Returns the number of elements in the container.
Definition: pointer_vector_set.h:502
iterator begin()
Returns an iterator pointing to the beginning of the container.
Definition: pointer_vector_set.h:278
ProcessInfo holds the current value of different solution parameters.
Definition: process_info.h:59
This class provides the implementation of the basic tasks that are needed by the solution strategy.
Definition: scheme.h:56
typename TSparseSpace::MatrixType TSystemMatrixType
Matrix type definition.
Definition: scheme.h:71
virtual void EquationId(const Element &rElement, Element::EquationIdVectorType &rEquationId, const ProcessInfo &rCurrentProcessInfo)
This method gets the eqaution id corresponding to the current element.
Definition: scheme.h:636
typename TSparseSpace::VectorType TSystemVectorType
Vector type definition.
Definition: scheme.h:74
typename TDenseSpace::VectorType LocalSystemVectorType
Local system vector type definition.
Definition: scheme.h:80
virtual void FinalizeSolutionStep(ModelPart &rModelPart, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b)
Function called once at the end of a solution step, after convergence is reached if an iterative proc...
Definition: scheme.h:294
virtual void InitializeSolutionStep(ModelPart &rModelPart, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b)
Function called once at the beginning of each solution step.
Definition: scheme.h:272
typename TSparseSpace::DataType TDataType
Data type definition.
Definition: scheme.h:68
typename TDenseSpace::MatrixType LocalSystemMatrixType
Local system matrix type definition.
Definition: scheme.h:77
#define KRATOS_THROW_ERROR(ExceptionType, ErrorMessage, MoreInfo)
Definition: define.h:77
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
Parameters GetValue(Parameters &rParameters, const std::string &rEntry)
Definition: add_kratos_parameters_to_python.cpp:53
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
b
Definition: generate_total_lagrangian_mixed_volumetric_strain_element.py:31
int k
Definition: quadrature.py:595
A
Definition: sensitivityMatrix.py:70