NeoPZ
|
#include <TPZBuildSBFem.h>
Public Member Functions | |
TPZBuildSBFem (TPZAutoPointer< TPZGeoMesh > gmesh, int skeletonmatid, std::map< int, int > &matidtranslation) | |
simple constructor More... | |
void | SetMatIdTranslation (const std::map< int, int > &matidtranslation) |
set the matid translation More... | |
void | StandardConfiguration () |
standard configuration means each element is a partition and a center node is created More... | |
void | StandardConfiguration (TPZVec< int64_t > &elementindices) |
standard configuration means each element is a partition and a center node is created for the indicated elements More... | |
void | Configure (TPZVec< int64_t > &scalingcenters) |
build element groups according to the id of the scaling centers More... | |
void | AddPartition (TPZVec< int64_t > &elids, int64_t centernodeindex) |
add a partition manually More... | |
void | SetPartitions (TPZVec< int64_t > &gelpartitionids, TPZVec< int64_t > &partition_nodeindices) |
define the partition index of each element and the ids of the scaling centers More... | |
void | BuildComputationMesh (TPZCompMesh &cmesh) |
add the sbfem elements to the computational mesh, the material should exist in cmesh More... | |
void | BuildComputationMesh (TPZCompMesh &cmesh, const std::set< int > &volmatids, const std::set< int > &boundmatids) |
add the sbfem elements to the computational mesh, the material should exist in cmesh More... | |
void | BuildComputationalMeshFromSkeleton (TPZCompMesh &cmesh) |
build the computational elements of the skeleton and build the volume elements directly from the skeleton elements More... | |
void | DivideSkeleton (int nref) |
Divide the skeleton elements. More... | |
void | DivideSkeleton (int nref, const std::set< int > &volmatids) |
Divide the skeleton elements - elements of dimension dim-1 which are not in volmatids. More... | |
Private Member Functions | |
void | AddSkeletonElements () |
create the geometric skeleton elements More... | |
void | CreateElementCenterNodes (TPZVec< int64_t > &elindices) |
create a geometric node at the center of each partition More... | |
void | CreateVolumetricElements (TPZCompMesh &cmesh) |
create geometric volumetric elements More... | |
void | CreateVolumetricElementsFromSkeleton (TPZCompMesh &cmesh) |
create geometric volumetric elements More... | |
void | CreateVolumetricElements (TPZCompMesh &cmesh, const std::set< int > &matids) |
create geometric volumetric elements for all elements with the matid More... | |
void | CreateElementGroups (TPZCompMesh &cmesh) |
put the sbfem volumetric elements in element groups More... | |
Private Attributes | |
TPZAutoPointer< TPZGeoMesh > | fGMesh |
geometric mesh More... | |
std::map< int, int > | fMatIdTranslation |
The volumetric elements with Mat Id will spawn SBFemVolume elements with MatId. More... | |
int | fSkeletonMatId |
Material Id associated with the skeleton elements. More... | |
TPZManVector< int64_t > | fElementPartition |
partition to which each element belongs More... | |
TPZManVector< int64_t > | fPartitionCenterNode |
center node id for each partition More... | |
Definition at line 19 of file TPZBuildSBFem.h.
|
inline |
simple constructor
Definition at line 39 of file TPZBuildSBFem.h.
References TPZVec< T >::Fill(), TPZGeoMesh::NElements(), and TPZVec< T >::resize().
void TPZBuildSBFem::AddPartition | ( | TPZVec< int64_t > & | elids, |
int64_t | centernodeindex | ||
) |
add a partition manually
Definition at line 94 of file TPZBuildSBFem.cpp.
References DebugStop, fElementPartition, fGMesh, fPartitionCenterNode, TPZChunkVector< T, EXP >::NElements(), TPZGeoMesh::NodeVec(), TPZVec< T >::resize(), and TPZVec< T >::size().
Referenced by SetMatIdTranslation().
|
private |
create the geometric skeleton elements
Definition at line 177 of file TPZBuildSBFem.cpp.
References TPZGeoEl::CreateBCGeoEl(), TPZGeoMesh::Dimension(), TPZGeoEl::Dimension(), TPZGeoMesh::Element(), TPZGeoElSide::Element(), fElementPartition, fGMesh, fSkeletonMatId, TPZGeoEl::Index(), TPZGeoElSide::Neighbour(), TPZGeoMesh::NElements(), TPZGeoEl::NSides(), and TPZGeoEl::SideDimension().
Referenced by Configure(), SetPartitions(), and StandardConfiguration().
void TPZBuildSBFem::BuildComputationalMeshFromSkeleton | ( | TPZCompMesh & | cmesh | ) |
build the computational elements of the skeleton and build the volume elements directly from the skeleton elements
add the sbfem elements to the computational mesh, the material should exist in cmesh
Definition at line 139 of file TPZBuildSBFem.cpp.
References TPZCompMesh::ApproxSpace(), TPZCompMesh::AutoBuild(), CreateElementGroups(), CreateVolumetricElementsFromSkeleton(), TPZCompMesh::Dimension(), TPZGeoEl::Dimension(), TPZGeoMesh::Element(), TPZGeoEl::MaterialId(), TPZGeoMesh::NElements(), TPZCompMesh::Reference(), and TPZCreateApproximationSpace::SetAllCreateFunctionsContinuous().
Referenced by PYBIND11_MODULE(), and SetPartitions().
void TPZBuildSBFem::BuildComputationMesh | ( | TPZCompMesh & | cmesh | ) |
add the sbfem elements to the computational mesh, the material should exist in cmesh
Definition at line 113 of file TPZBuildSBFem.cpp.
References TPZCompMesh::ApproxSpace(), TPZCompMesh::AutoBuild(), CreateElementGroups(), CreateVolumetricElements(), TPZCompMesh::Dimension(), TPZGeoEl::Dimension(), TPZGeoMesh::Element(), TPZGeoEl::MaterialId(), TPZGeoMesh::NElements(), TPZCompMesh::Reference(), and TPZCreateApproximationSpace::SetAllCreateFunctionsContinuous().
Referenced by SetPartitions().
void TPZBuildSBFem::BuildComputationMesh | ( | TPZCompMesh & | cmesh, |
const std::set< int > & | volmatids, | ||
const std::set< int > & | boundmatids | ||
) |
add the sbfem elements to the computational mesh, the material should exist in cmesh
Definition at line 164 of file TPZBuildSBFem.cpp.
References TPZCompMesh::ApproxSpace(), TPZCompMesh::AutoBuild(), CreateElementGroups(), CreateVolumetricElements(), and TPZCreateApproximationSpace::SetAllCreateFunctionsContinuous().
void TPZBuildSBFem::Configure | ( | TPZVec< int64_t > & | scalingcenters | ) |
build element groups according to the id of the scaling centers
Definition at line 41 of file TPZBuildSBFem.cpp.
References AddSkeletonElements(), DebugStop, TPZGeoMesh::Dimension(), TPZGeoEl::Dimension(), TPZGeoMesh::Element(), fElementPartition, fGMesh, fPartitionCenterNode, TPZGeoMesh::NElements(), TPZVec< T >::resize(), and TPZVec< T >::size().
Referenced by SetMatIdTranslation().
|
private |
create a geometric node at the center of each partition
Definition at line 235 of file TPZBuildSBFem.cpp.
References TPZAdmChunkVector< T, EXP >::AllocateNewElement(), TPZGeoEl::CenterPoint(), DebugStop, TPZGeoMesh::Dimension(), TPZGeoEl::Dimension(), TPZGeoMesh::Element(), fElementPartition, fGMesh, fPartitionCenterNode, TPZGeoMesh::NodeVec(), TPZGeoEl::NSides(), TPZVec< T >::resize(), TPZVec< T >::size(), and TPZGeoEl::X().
Referenced by SetPartitions(), and StandardConfiguration().
|
private |
put the sbfem volumetric elements in element groups
Definition at line 615 of file TPZBuildSBFem.cpp.
References TPZSBFemElementGroup::AddElement(), DebugStop, TPZCompMesh::Dimension(), TPZGeoEl::Dimension(), ECube, TPZGeoElSide::Element(), TPZCompMesh::Element(), EOned, EPrisma, EQuadrilateral, fElementPartition, fPartitionCenterNode, TPZElementGroup::GetElGroup(), TPZCompEl::Index(), TPZGeoEl::Index(), TPZGeoEl::NCornerNodes(), TPZGeoElSide::Neighbour(), TPZCompMesh::NElements(), TPZVec< T >::NElements(), TPZGeoEl::NodeIndex(), pztopology::nsidenodes, TPZGeoEl::NSideNodes(), nsub, TPZCompEl::Reference(), TPZGeoEl::Reference(), TPZSBFemVolume::SetElementGroupIndex(), TPZSBFemVolume::SetSkeleton(), TPZGeoEl::SideNodeIndex(), TPZVec< T >::size(), and TPZGeoEl::Type().
Referenced by BuildComputationalMeshFromSkeleton(), BuildComputationMesh(), and SetPartitions().
|
private |
create geometric volumetric elements
Definition at line 265 of file TPZBuildSBFem.cpp.
References TPZCompMesh::ApproxSpace(), TPZCompMesh::AutoBuild(), TPZGeoMesh::BuildConnectivity(), TPZGeoMesh::CreateGeoElement(), TPZGeoElRefLess< TGeo >::CreateGeoElement(), DebugStop, TPZGeoElSide::Dimension(), TPZGeoMesh::Dimension(), TPZGeoEl::Dimension(), ECube, TPZGeoMesh::Element(), EPrisma, EQuadrilateral, TPZGeoElSide::EqualorHigherCompElementList2(), fElementPartition, TPZCompMesh::FindMaterial(), fMatIdTranslation, fPartitionCenterNode, TPZGeoEl::HasSubElement(), TPZGeoElSide::IsLinearMapping(), TPZCompMesh::LoadReferences(), TPZGeoEl::MaterialId(), TPZGeoMesh::NElements(), TPZVec< T >::NElements(), TPZGeoElSide::NSideNodes(), TPZGeoEl::NSides(), TPZCompMesh::Reference(), TPZGeoEl::Reference(), TPZGeoMesh::ResetReference(), TPZVec< T >::resize(), TPZGeoEl::SideDimension(), TPZGeoElSide::SideNodeIndex(), and TPZVec< T >::size().
Referenced by BuildComputationMesh(), and SetPartitions().
|
private |
create geometric volumetric elements for all elements with the matid
Definition at line 478 of file TPZBuildSBFem.cpp.
References TPZCompMesh::ApproxSpace(), TPZCompMesh::AutoBuild(), TPZGeoMesh::BuildConnectivity(), TPZGeoMesh::CreateGeoElement(), DebugStop, TPZGeoElSide::Dimension(), TPZGeoMesh::Dimension(), TPZGeoEl::Dimension(), ECube, TPZGeoMesh::Element(), ENoType, EOned, EPrisma, EQuadrilateral, TPZGeoElSide::EqualorHigherCompElementList2(), fElementPartition, fMatIdTranslation, fPartitionCenterNode, TPZGeoEl::HasSubElement(), TPZGeoElSide::IsLinearMapping(), TPZCompMesh::LoadReferences(), LOGPZ_DEBUG, TPZGeoEl::MaterialId(), TPZGeoMesh::NElements(), TPZVec< T >::NElements(), TPZGeoElSide::NSideNodes(), TPZGeoEl::NSides(), TPZCompMesh::Reference(), TPZGeoEl::Reference(), TPZGeoMesh::ResetReference(), TPZVec< T >::resize(), TPZGeoEl::SideDimension(), TPZGeoElSide::SideNodeIndex(), and TPZVec< T >::size().
|
private |
create geometric volumetric elements
Definition at line 377 of file TPZBuildSBFem.cpp.
References TPZCompMesh::ApproxSpace(), TPZCompMesh::AutoBuild(), TPZGeoMesh::BuildConnectivity(), TPZGeoMesh::CreateGeoElement(), TPZGeoElRefLess< TGeo >::CreateGeoElement(), DebugStop, TPZGeoMesh::Dimension(), TPZGeoEl::Dimension(), ECube, TPZGeoMesh::Element(), EOned, EPrisma, EQuadrilateral, fElementPartition, TPZCompMesh::FindMaterial(), fMatIdTranslation, fPartitionCenterNode, TPZGeoEl::HasSubElement(), TPZGeoElSide::IsLinearMapping(), TPZCompMesh::LoadReferences(), TPZGeoEl::MaterialId(), TPZGeoMesh::NElements(), TPZGeoElSide::NSideNodes(), TPZGeoEl::NSides(), TPZCompMesh::Reference(), TPZGeoEl::Reference(), TPZGeoMesh::ResetReference(), TPZVec< T >::resize(), TPZGeoElSide::SideNodeIndex(), and TPZVec< T >::size().
Referenced by BuildComputationalMeshFromSkeleton(), and SetPartitions().
void TPZBuildSBFem::DivideSkeleton | ( | int | nref | ) |
Divide the skeleton elements.
Divide de skeleton elements.
Definition at line 738 of file TPZBuildSBFem.cpp.
References TPZGeoMesh::Dimension(), TPZGeoEl::Dimension(), TPZGeoEl::Divide(), TPZGeoMesh::ElementVec(), fElementPartition, fGMesh, TPZGeoEl::HasSubElement(), TPZChunkVector< T, EXP >::NElements(), nsub, TPZManVector< T, NumExtAlloc >::Resize(), and TPZVec< T >::size().
Referenced by SetPartitions().
void TPZBuildSBFem::DivideSkeleton | ( | int | nref, |
const std::set< int > & | volmatids | ||
) |
Divide the skeleton elements - elements of dimension dim-1 which are not in volmatids.
Divide de skeleton elements.
skip the elements which do not have material translation
Definition at line 768 of file TPZBuildSBFem.cpp.
References TPZGeoMesh::Dimension(), TPZGeoEl::Dimension(), TPZGeoEl::Divide(), TPZGeoMesh::ElementVec(), fElementPartition, fGMesh, fMatIdTranslation, TPZGeoEl::HasSubElement(), TPZGeoEl::MaterialId(), TPZChunkVector< T, EXP >::NElements(), nsub, TPZManVector< T, NumExtAlloc >::Resize(), and TPZVec< T >::size().
|
inline |
set the matid translation
Definition at line 46 of file TPZBuildSBFem.h.
References AddPartition(), Configure(), and StandardConfiguration().
|
inline |
define the partition index of each element and the ids of the scaling centers
Definition at line 64 of file TPZBuildSBFem.h.
References AddSkeletonElements(), BuildComputationalMeshFromSkeleton(), BuildComputationMesh(), CreateElementCenterNodes(), CreateElementGroups(), CreateVolumetricElements(), CreateVolumetricElementsFromSkeleton(), DebugStop, DivideSkeleton(), TPZGeoMesh::NElements(), and TPZVec< T >::size().
Referenced by PYBIND11_MODULE().
void TPZBuildSBFem::StandardConfiguration | ( | ) |
standard configuration means each element is a partition and a center node is created
Definition at line 23 of file TPZBuildSBFem.cpp.
References fGMesh, TPZGeoMesh::NElements(), and TPZVec< T >::size().
Referenced by SetMatIdTranslation().
void TPZBuildSBFem::StandardConfiguration | ( | TPZVec< int64_t > & | elementindices | ) |
standard configuration means each element is a partition and a center node is created for the indicated elements
Definition at line 34 of file TPZBuildSBFem.cpp.
References AddSkeletonElements(), and CreateElementCenterNodes().
|
private |
partition to which each element belongs
Definition at line 31 of file TPZBuildSBFem.h.
Referenced by AddPartition(), AddSkeletonElements(), Configure(), CreateElementCenterNodes(), CreateElementGroups(), CreateVolumetricElements(), CreateVolumetricElementsFromSkeleton(), and DivideSkeleton().
|
private |
geometric mesh
Definition at line 22 of file TPZBuildSBFem.h.
Referenced by AddPartition(), AddSkeletonElements(), Configure(), CreateElementCenterNodes(), DivideSkeleton(), and StandardConfiguration().
|
private |
The volumetric elements with Mat Id will spawn SBFemVolume elements with MatId.
Definition at line 25 of file TPZBuildSBFem.h.
Referenced by CreateVolumetricElements(), CreateVolumetricElementsFromSkeleton(), and DivideSkeleton().
|
private |
center node id for each partition
Definition at line 34 of file TPZBuildSBFem.h.
Referenced by AddPartition(), Configure(), CreateElementCenterNodes(), CreateElementGroups(), CreateVolumetricElements(), and CreateVolumetricElementsFromSkeleton().
|
private |
Material Id associated with the skeleton elements.
Definition at line 28 of file TPZBuildSBFem.h.
Referenced by AddSkeletonElements().