14 #if !defined(KRATOS_CALCULATE_EMBEDDED_VARIABLE_FROM_SKIN_PROCESS_INCLUDED )
15 #define KRATOS_CALCULATE_EMBEDDED_VARIABLE_FROM_SKIN_PROCESS_INCLUDED
64 template<
class TVarType >
158 template <
class TVarType,
class TSparseSpace,
class TDenseSpace,
class TLinearSolver>
194 rModel.GetModelPart(rSettings[
"base_model_part_name"].GetString()),
195 rModel.GetModelPart(rSettings[
"skin_model_part_name"].GetString()),
218 const double GradientPenaltyCoefficient = 0.0,
219 const unsigned int BufferPosition = 0,
220 const std::string& AuxPartName =
"IntersectedElementsModelPart",
224 , mBufferPosition(BufferPosition),
225 mAuxModelPartName(AuxPartName),
226 mGradientPenaltyCoefficient(GradientPenaltyCoefficient),
227 mrBaseModelPart(rBaseModelPart),
228 mrSkinModelPart(rSkinModelPart),
229 mrSkinVariable(rSkinVariable),
230 mrEmbeddedNodalVariable(rEmbeddedNodalVariable)
236 "Asked for buffer position " << mBufferPosition <<
" buf base model part buffer size is " << rBaseModelPart.
GetBufferSize() << std::endl;
238 "Asked for buffer position " << mBufferPosition <<
" buf skin model part buffer size is " << rSkinModelPart.
GetBufferSize() << std::endl;
241 int n_loc_mesh_nodes = mrBaseModelPart.GetCommunicator().pLocalMesh()->NumberOfNodes();
242 int n_loc_mesh_elements = mrBaseModelPart.GetCommunicator().pLocalMesh()->NumberOfElements();
243 KRATOS_ERROR_IF(mrBaseModelPart.GetCommunicator().GetDataCommunicator().SumAll(n_loc_mesh_nodes) == 0) <<
"The base model part has no nodes." << std::endl;
244 KRATOS_ERROR_IF(mrBaseModelPart.GetCommunicator().GetDataCommunicator().SumAll(n_loc_mesh_elements) == 0) <<
"The base model Part has no elements." << std::endl;
247 const auto &r_aux_geom = (mrBaseModelPart.ElementsBegin())->GetGeometry();
248 const unsigned int dim = r_aux_geom.WorkingSpaceDimension();
251 "In 2D the element type is expected to be a triangle." << std::endl;
252 }
else if(
dim == 3) {
254 "In 3D the element type is expected to be a tetrahedron" << std::endl;
256 KRATOS_ERROR <<
"Wrong geometry WorkingSpaceDimension(). Expected 2 or 3 and obtained: " <<
dim;
261 mpLinearSolver = linear_solver_factory.
Create(LinearSolverSettings);
269 Model& current_model = mrBaseModelPart.GetModel();
290 Model ¤t_model = mrBaseModelPart.GetModel();
298 this->GenerateIntersectedEdgesElementsModelPart();
301 this->SetLinearStrategy();
304 mpSolvingStrategy->Solve();
307 this->SetObtainedEmbeddedNodalValues();
314 Model& current_model = mrBaseModelPart.GetModel();
316 r_intersected_edges_model_part.
Nodes().clear();
317 r_intersected_edges_model_part.
Elements().clear();
318 r_intersected_edges_model_part.
Conditions().clear();
320 mpSolvingStrategy->Clear();
335 "base_model_part_name": "",
336 "skin_model_part_name": "",
337 "skin_variable_name": "",
338 "embedded_nodal_variable_name": "",
339 "buffer_position": 0,
340 "gradient_penalty_coefficient": 0.0,
341 "aux_model_part_name": "IntersectedElementsModelPart",
342 "linear_solver_settings": {
343 "preconditioner_type": "amg",
344 "solver_type": "amgcl",
345 "smoother_type": "ilu0",
347 "max_iteration": 1000,
352 "use_block_matrices_if_possible": true
357 return default_settings;
365 return StaticGetDefaultParameters();
381 std::string
Info()
const override
383 return "CalculateEmbeddedNodalVariableFromSkinProcess";
389 rOStream <<
"CalculateEmbeddedNodalVariableFromSkinProcess";
441 this->CalculateIntersections();
451 r_int_elems_model_part.
Nodes().clear();
452 r_int_elems_model_part.
Elements().clear();
459 r_int_elems_model_part.
GetProcessInfo()[GRADIENT_PENALTY_COEFFICIENT] = mGradientPenaltyCoefficient;
462 this->AddIntersectedElementsVariables(r_int_elems_model_part);
465 this->AddIntersectedElementsModelPartElements(r_int_elems_model_part);
468 this->AddIntersectedElementsModelPartDOFs(r_int_elems_model_part);
476 const auto &r_int_elems_model_part = (mrBaseModelPart.
GetModel()).GetModelPart(mAuxModelPartName);
479 auto &r_emb_nod_val = (mrBaseModelPart.GetNode(rNode.Id())).FastGetSolutionStepValue(mrEmbeddedNodalVariable, mBufferPosition);
480 r_emb_nod_val = rNode.FastGetSolutionStepValue(rUnknownVariable);
508 auto &r_int_obj_vect = mpFindIntersectedGeometricalObjectsProcess->GetIntersections();
515 std::unordered_map<unsigned int, Node::Pointer> map_of_nodes;
518 std::size_t new_elem_id = 1;
519 for (
unsigned int i_elem = 0; i_elem < mrBaseModelPart.
NumberOfElements(); ++i_elem) {
522 if (r_int_obj_vect[i_elem].size() != 0) {
524 auto &r_geom = it_elem->GetGeometry();
525 const auto edges = r_geom.GenerateEdges();
528 for (
unsigned int i_edge = 0; i_edge < r_geom.EdgesNumber(); ++i_edge) {
530 auto &r_i_edge_geom = edges[i_edge];
531 auto i_edge_pair = this->SetEdgePair(r_i_edge_geom);
533 if (edges_set.find(i_edge_pair) == edges_set.end()) {
535 double i_edge_d = 0.0;
536 unsigned int n_int_obj = 0;
537 TVarType i_edge_val = mrEmbeddedNodalVariable.
Zero();
540 for (
auto &r_int_obj : r_int_obj_vect[i_elem]) {
541 Point intersection_point;
542 const bool is_intersected = this->ComputeEdgeIntersection(
543 r_int_obj.GetGeometry(),
549 if (is_intersected) {
553 r_int_obj.GetGeometry().PointLocalCoordinates(local_coords, intersection_point);
554 r_int_obj.GetGeometry().ShapeFunctionsValues(int_obj_N, local_coords);
555 for (
unsigned int i_node = 0; i_node < r_int_obj.GetGeometry().PointsNumber(); ++i_node) {
556 i_edge_val += r_int_obj.GetGeometry()[i_node].FastGetSolutionStepValue(mrSkinVariable, mBufferPosition) * int_obj_N[i_node];
558 i_edge_d += intersection_point.
Distance(r_i_edge_geom[0]) / r_i_edge_geom.Length();
563 if (n_int_obj != 0) {
565 it_elem->Set(INTERFACE,
true);
569 i_edge_d /= n_int_obj;
570 i_edge_val /= n_int_obj;
573 this->AddEdgeNodes(r_i_edge_geom, rModelPart, map_of_nodes);
576 auto p_element = Kratos::make_intrusive<EmbeddedNodalVariableCalculationElementSimplex<TVarType>>(
578 this->pSetEdgeElementGeometry(map_of_nodes, r_i_edge_geom, i_edge_pair),
582 p_element->SetValue(DISTANCE, i_edge_d);
583 p_element->SetValue(rUnknownVariable, i_edge_val);
589 edges_set.insert(i_edge_pair);
592 rModelPart.
Elements().push_back(p_element);
604 for(
auto& item: map_of_nodes){
605 tmp.push_back(item.second);
613 SchemePointerType p_scheme = Kratos::make_shared<ResidualBasedIncrementalUpdateStaticScheme<TSparseSpace, TDenseSpace>>();
615 bool calculate_norm_dx =
false;
616 bool calculate_reactions =
false;
617 bool reform_dof_at_each_iteration =
false;
618 BuilderSolverPointerType p_builder_and_solver = Kratos::make_shared<ResidualBasedBlockBuilderAndSolver<TSparseSpace, TDenseSpace, TLinearSolver>>(mpLinearSolver);
621 ModelPart &r_aux_model_part = current_model.GetModelPart(mAuxModelPartName);
623 mpSolvingStrategy = Kratos::make_unique<ResidualBasedLinearStrategy<TSparseSpace, TDenseSpace, TLinearSolver>>(
626 p_builder_and_solver,
628 reform_dof_at_each_iteration,
631 mpSolvingStrategy->
Check();
632 mpSolvingStrategy->SetEchoLevel(mEchoLevel);
668 rSettings[
"linear_solver_settings"],
671 rSettings[
"gradient_penalty_coefficient"].GetDouble(),
672 rSettings[
"buffer_position"].GetInt(),
673 rSettings[
"aux_model_part_name"].GetString(),
674 rSettings[
"echo_level"].GetInt())
698 void CalculateIntersections()
700 mpFindIntersectedGeometricalObjectsProcess = Kratos::make_unique<FindIntersectedGeometricalObjectsProcess>(mrBaseModelPart, mrSkinModelPart);
701 mpFindIntersectedGeometricalObjectsProcess->ExecuteInitialize();
702 mpFindIntersectedGeometricalObjectsProcess->FindIntersections();
705 void ClearIntersections()
707 mpFindIntersectedGeometricalObjectsProcess->Clear();
710 bool ComputeEdgeIntersection(
714 Point& rIntersectionPoint)
const
716 bool intersection_flag =
false;
717 const unsigned int work_dim = rIntObjGeometry.WorkingSpaceDimension();
719 const unsigned int intersection_status = IntersectionUtilities::ComputeLineLineIntersection<Element::GeometryType>(
720 rIntObjGeometry, rEdgePoint1.Coordinates(), rEdgePoint2.Coordinates(), rIntersectionPoint.Coordinates());
721 if (intersection_status == 1 || intersection_status == 3) {
722 intersection_flag =
true;
724 }
else if (work_dim == 3){
725 const unsigned int intersection_status = IntersectionUtilities::ComputeTriangleLineIntersection<Element::GeometryType>(
726 rIntObjGeometry, rEdgePoint1.Coordinates(), rEdgePoint2.Coordinates(), rIntersectionPoint.Coordinates());
727 if (intersection_status == 1) {
728 intersection_flag =
true;
731 KRATOS_ERROR <<
"Working space dimension value equal to " << work_dim <<
". Check your skin geometry implementation." << std::endl;
734 return intersection_flag;
738 const Geometry<Node> &rEdgeGeometry,
739 ModelPart &rModelPart,
740 std::unordered_map<unsigned int, Node::Pointer>& rNodesMap
743 const auto& rp_var_list = rModelPart.pGetNodalSolutionStepVariablesList();
744 unsigned int buffer_size = rModelPart.GetBufferSize();
747 for (std::size_t
i = 0;
i < 2; ++
i) {
748 auto p_i_node = rEdgeGeometry(
i);
750 if (!p_i_node->Is(VISITED)) {
751 p_i_node->Set(VISITED,
true);
752 auto p_node_copy = Kratos::make_intrusive< Node >(
754 p_i_node->Coordinates());
755 p_node_copy->SetSolutionStepVariablesList(rp_var_list);
756 p_node_copy->SetBufferSize(buffer_size);
758 rNodesMap[p_i_node->Id()] = p_node_copy;
763 Element::GeometryType::Pointer pSetEdgeElementGeometry(
764 std::unordered_map<unsigned int, Node::Pointer>& rNodesMap,
766 const std::pair<std::size_t, std::size_t> NewEdgeIds)
const
769 points_array.
push_back(rNodesMap[std::get<0>(NewEdgeIds)]);
770 points_array.push_back(rNodesMap[std::get<1>(NewEdgeIds)]);
771 return rCurrentEdgeGeometry.Create(points_array);
774 inline std::pair<std::size_t, std::size_t> SetEdgePair(
const Geometry<Node> &rEdgeGeom)
const
776 std::pair<std::size_t, std::size_t> edge_pair(
777 (rEdgeGeom[0].Id() < rEdgeGeom[1].Id()) ? rEdgeGeom[0].Id() : rEdgeGeom[1].Id(),
778 (rEdgeGeom[0].Id() > rEdgeGeom[1].Id()) ? rEdgeGeom[0].Id() : rEdgeGeom[1].Id());
797 CalculateEmbeddedNodalVariableFromSkinProcess&
operator=(CalculateEmbeddedNodalVariableFromSkinProcess
const& rOther) =
delete;
800 CalculateEmbeddedNodalVariableFromSkinProcess(CalculateEmbeddedNodalVariableFromSkinProcess
const& rOther) =
delete;
816 template<
class TVarType,
class TSparseSpace,
class TDenseSpace,
class TLinearSolver>
818 std::istream& rIStream,
822 template<
class TVarType,
class TSparseSpace,
class TDenseSpace,
class TLinearSolver>
824 std::ostream& rOStream,
828 rOStream << std::endl;
PeriodicInterfaceProcess & operator=(const PeriodicInterfaceProcess &)=delete
Current class provides an implementation for the base builder and solving operations.
Definition: builder_and_solver.h:64
Definition: calculate_embedded_nodal_variable_from_skin_process.h:160
const std::string mAuxModelPartName
Definition: calculate_embedded_nodal_variable_from_skin_process.h:413
const std::size_t mEchoLevel
Definition: calculate_embedded_nodal_variable_from_skin_process.h:411
KRATOS_CLASS_POINTER_DEFINITION(CalculateEmbeddedNodalVariableFromSkinProcess)
Pointer definition of CalculateEmbeddedNodalVariableFromSkinProcess.
static Parameters StaticGetDefaultParameters()
Get the Default Settings object This method returns the default parameters for this proces....
Definition: calculate_embedded_nodal_variable_from_skin_process.h:330
CalculateEmbeddedNodalVariableFromSkinProcess(Model &rModel, Parameters rSettings)
Construct a new Calculate Embedded Nodal Variable From Skin Process object Constructor with model and...
Definition: calculate_embedded_nodal_variable_from_skin_process.h:190
void Clear() override
This method clears the assignation of the conditions.
Definition: calculate_embedded_nodal_variable_from_skin_process.h:312
ModelPart & mrSkinModelPart
Definition: calculate_embedded_nodal_variable_from_skin_process.h:417
void AddIntersectedElementsVariables(ModelPart &rModelPart) const
Definition: calculate_embedded_nodal_variable_from_skin_process.h:484
void operator()()
Definition: calculate_embedded_nodal_variable_from_skin_process.h:279
Scheme< TSparseSpace, TDenseSpace >::Pointer SchemePointerType
Definition: calculate_embedded_nodal_variable_from_skin_process.h:167
FindIntersectedGeometricalObjectsProcess::UniquePointer FindIntersectedGeometricalObjectsProcessPointerType
Definition: calculate_embedded_nodal_variable_from_skin_process.h:170
ImplicitSolvingStrategy< TSparseSpace, TDenseSpace, TLinearSolver >::UniquePointer SolvingStrategyPointerType
Definition: calculate_embedded_nodal_variable_from_skin_process.h:169
TLinearSolver::Pointer LinearSolverPointerType
Definition: calculate_embedded_nodal_variable_from_skin_process.h:166
const Variable< TVarType > & mrSkinVariable
Definition: calculate_embedded_nodal_variable_from_skin_process.h:419
std::string Info() const override
Turn back information as a string.
Definition: calculate_embedded_nodal_variable_from_skin_process.h:381
void AddIntersectedElementsModelPartDOFs(ModelPart &rModelPart) const
Definition: calculate_embedded_nodal_variable_from_skin_process.h:489
ModelPart & GetIntersectedEdgesModelPart() const
Definition: calculate_embedded_nodal_variable_from_skin_process.h:288
const Variable< TVarType > & mrEmbeddedNodalVariable
Definition: calculate_embedded_nodal_variable_from_skin_process.h:420
std::unordered_set< std::pair< std::size_t, std::size_t >, PairHasher< std::size_t, std::size_t >, PairComparor< std::size_t, std::size_t > > EdgesSetType
Definition: calculate_embedded_nodal_variable_from_skin_process.h:172
void AddIntersectedElementsModelPartElements(ModelPart &rModelPart) const
Definition: calculate_embedded_nodal_variable_from_skin_process.h:494
void SetObtainedEmbeddedNodalValues() const
Definition: calculate_embedded_nodal_variable_from_skin_process.h:473
FindIntersectedGeometricalObjectsProcessPointerType mpFindIntersectedGeometricalObjectsProcess
Definition: calculate_embedded_nodal_variable_from_skin_process.h:425
const double mGradientPenaltyCoefficient
Definition: calculate_embedded_nodal_variable_from_skin_process.h:414
const unsigned int mBufferPosition
Definition: calculate_embedded_nodal_variable_from_skin_process.h:412
CalculateEmbeddedNodalVariableFromSkinProcess(ModelPart &rBaseModelPart, ModelPart &rSkinModelPart, Parameters rSettings)
Construct a new Calculate Embedded Nodal Variable From Skin Process object Constructor with backgroun...
Definition: calculate_embedded_nodal_variable_from_skin_process.h:661
CalculateEmbeddedNodalVariableFromSkinProcess(ModelPart &rBaseModelPart, ModelPart &rSkinModelPart, Parameters LinearSolverSettings, const Variable< TVarType > &rSkinVariable, const Variable< TVarType > &rEmbeddedNodalVariable, const double GradientPenaltyCoefficient=0.0, const unsigned int BufferPosition=0, const std::string &AuxPartName="IntersectedElementsModelPart", const std::size_t EchoLevel=0)
Construct a new Calculate Embedded Nodal Variable From Skin Process object.
Definition: calculate_embedded_nodal_variable_from_skin_process.h:212
const Parameters GetDefaultParameters() const override
This method provides the defaults parameters to avoid conflicts between the different constructors.
Definition: calculate_embedded_nodal_variable_from_skin_process.h:363
BuilderAndSolver< TSparseSpace, TDenseSpace, TLinearSolver >::Pointer BuilderSolverPointerType
Definition: calculate_embedded_nodal_variable_from_skin_process.h:168
~CalculateEmbeddedNodalVariableFromSkinProcess() override
Destructor.
Definition: calculate_embedded_nodal_variable_from_skin_process.h:267
void SetLinearStrategy()
Definition: calculate_embedded_nodal_variable_from_skin_process.h:610
void Execute() override
Execute method is used to execute the Process algorithms.
Definition: calculate_embedded_nodal_variable_from_skin_process.h:294
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: calculate_embedded_nodal_variable_from_skin_process.h:393
virtual void GenerateIntersectedEdgesElementsModelPart()
Definition: calculate_embedded_nodal_variable_from_skin_process.h:436
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: calculate_embedded_nodal_variable_from_skin_process.h:387
ModelPart & mrBaseModelPart
Definition: calculate_embedded_nodal_variable_from_skin_process.h:416
Node NodeType
definition of node type (default is: Node)
Definition: element.h:74
Geometry< NodeType > GeometryType
definition of the geometry type with given NodeType
Definition: element.h:83
Definition: calculate_embedded_nodal_variable_from_skin_process.h:66
static const Variable< TVarType > & GetUnknownVariable()
Get the Unknown Variable object This method returns a reference to the unknown variable....
static void AddUnknownVariableDofs(ModelPart &rModelPart)
Add the unknown variable DOFs to a model part This method adds the unknown variable DOFs to the model...
KRATOS_CLASS_POINTER_DEFINITION(EmbeddedNodalVariableFromSkinTypeHelperClass)
Pointer definition of EmbeddedNodalVariableFromSkinTypeHelperClass.
static void AddUnknownVariable(ModelPart &rModelPart)
Add the unknown variable to a model part This method adds the unknown variable to the model part of i...
PointerVector< TPointType > PointsArrayType
Definition: geometry.h:118
Implicit solving strategy base class This is the base class from which we will derive all the implici...
Definition: implicit_solving_strategy.h:61
KratosComponents class encapsulates a lookup table for a family of classes in a generic way.
Definition: kratos_components.h:49
Here we add the functions needed for the registration of linear solvers.
Definition: linear_solver_factory.h:62
virtual LinearSolver< TSparseSpace, TLocalSpace >::Pointer Create(Kratos::Parameters Settings) const
This method creates a new solver.
Definition: linear_solver_factory.h:100
This class aims to manage different model parts across multi-physics simulations.
Definition: model.h:60
ModelPart & GetModelPart(const std::string &rFullModelPartName)
This method returns a model part given a certain name.
Definition: model.cpp:107
ModelPart & CreateModelPart(const std::string &ModelPartName, IndexType NewBufferSize=1)
This method creates a new model part contained in the current Model with a given name and buffer size...
Definition: model.cpp:37
void DeleteModelPart(const std::string &ModelPartName)
This method deletes a modelpart with a given name.
Definition: model.cpp:64
bool HasModelPart(const std::string &rFullModelPartName) const
This method checks if a certain a model part exists given a certain name.
Definition: model.cpp:178
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
PropertiesType::Pointer pGetProperties(IndexType PropertiesId, IndexType MeshIndex=0)
Returns the Properties::Pointer corresponding to it's identifier.
Definition: model_part.cpp:664
void SetBufferSize(IndexType NewBufferSize)
This method sets the suffer size of the model part database.
Definition: model_part.cpp:2171
virtual int Check() const
run input validation
Definition: model_part.cpp:2204
IndexType GetBufferSize() const
This method gets the suffer size of the model part database.
Definition: model_part.h:1876
ConditionsContainerType & Conditions(IndexType ThisIndex=0)
Definition: model_part.h:1381
PropertiesType::Pointer CreateNewProperties(IndexType PropertiesId, IndexType MeshIndex=0)
Creates a new property in the current mesh.
Definition: model_part.cpp:640
void AddNodalSolutionStepVariable(VariableData const &ThisVariable)
Definition: model_part.h:532
SizeType NumberOfElements(IndexType ThisIndex=0) const
Definition: model_part.h:1027
ProcessInfo & GetProcessInfo()
Definition: model_part.h:1746
ElementsContainerType & Elements(IndexType ThisIndex=0)
Definition: model_part.h:1189
void AddNodes(std::vector< IndexType > const &NodeIds, IndexType ThisIndex=0)
Definition: model_part.cpp:235
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
Model & GetModel()
Definition: model_part.h:323
This class defines the node.
Definition: node.h:65
This class provides to Kratos a data structure for I/O based on the standard of JSON.
Definition: kratos_parameters.h:59
Point class.
Definition: point.h:59
double Distance(const Point &rOtherPoint) const
This method computes the distance between this point and another one.
Definition: point.h:166
void push_back(const TPointerType &x)
Definition: pointer_vector.h:270
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
The base class for all processes in Kratos.
Definition: process.h:49
This class provides the implementation of the basic tasks that are needed by the solution strategy.
Definition: scheme.h:56
const TDataType & Zero() const
This method returns the zero value of the variable type.
Definition: variable.h:346
This class implements a set of auxiliar, already parallelized, methods to perform some common tasks r...
Definition: variable_utils.h:63
void AddDof(const TVarType &rVar, ModelPart &rModelPart)
This function add dofs to the nodes in a model part. It is useful since addition is done in parallel.
Definition: variable_utils.h:1361
void SetFlag(const Flags &rFlag, const bool FlagValue, TContainerType &rContainer)
Sets a flag according to a given status over a given container.
Definition: variable_utils.h:900
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
std::ostream & operator<<(std::ostream &rOStream, const CalculateEmbeddedNodalVariableFromSkinProcess< TVarType, TSparseSpace, TDenseSpace, TLinearSolver > &rThis)
output stream function
Definition: calculate_embedded_nodal_variable_from_skin_process.h:823
std::istream & operator>>(std::istream &rIStream, CalculateEmbeddedNodalVariableFromSkinProcess< TVarType, TSparseSpace, TDenseSpace, TLinearSolver > &rThis)
input stream function
#define KRATOS_ERROR
Definition: exception.h:161
#define KRATOS_ERROR_IF(conditional)
Definition: exception.h:162
static int EchoLevel
Definition: co_sim_EMPIRE_API.h:42
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
void block_for_each(TIterator itBegin, TIterator itEnd, TFunction &&rFunction)
Execute a functor on all items of a range in parallel.
Definition: parallel_utilities.h:299
tuple tmp
Definition: generate_total_lagrangian_mixed_volumetric_strain_element.py:98
x
Definition: sensitivityMatrix.py:49
int dim
Definition: sensitivityMatrix.py:25
def ValidateAndAssignDefaults(defaults, settings, recursive=False)
Definition: sdof_solver.py:252
integer i
Definition: TensorModule.f:17
This is a key comparer between two indexes pairs.
Definition: key_hash.h:432
This is a hasher for pairs.
Definition: key_hash.h:412