Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PfemFluid] CutFEM element #11868

Merged
merged 64 commits into from
Mar 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
ef6d992
1st cut-fem
AFranci Mar 14, 2023
2ef691d
nodal integrated missing override
AFranci Mar 14, 2023
623565c
CutFem prepared
AFranci Mar 14, 2023
9366629
Missing boundary terms
AFranci Mar 14, 2023
46cfdcb
Merge branch 'master' into PfemFluid/cut_fem_element
AFranci Apr 12, 2023
396428e
Merge branch 'master' into PfemFluid/cut_fem_element
AFranci Apr 12, 2023
1929984
Advances (p boundary term and penalty working)
AFranci Apr 12, 2023
d5f468b
fixed displacements
AFranci Apr 12, 2023
9bec632
remove unused value g
AFranci Apr 18, 2023
a15645f
viscous contribution in boundary term
AFranci Apr 18, 2023
bbc1e0e
Merge branch 'master' into PfemFluid/cut_fem_element
AFranci Apr 18, 2023
881f7ba
Nitsche advances (not compiling)
AFranci Apr 25, 2023
5cfef5c
Merge branch 'master' into PfemFluid/cut_fem_element
rubenzorrilla Apr 25, 2023
29601c6
Nitsche viscous component
rubenzorrilla Apr 25, 2023
1f8cc98
Consistent penalty factor
rubenzorrilla Apr 25, 2023
42ab295
constitutive matrix size error
AFranci May 3, 2023
61b4b71
add todo
AFranci May 3, 2023
ea29cab
unused term
AFranci May 3, 2023
63c9011
Pfem remeshing functions duplicated for cutpfem
AFranci May 3, 2023
27dd7e4
distance tolerance in remeshing options of pfemcut
AFranci May 4, 2023
83c8fee
minor
AFranci May 4, 2023
4026038
small changes
AFranci May 4, 2023
d009b8e
Merge branch 'master' into PfemFluid/cut_fem_element
rubenzorrilla May 10, 2023
951b140
Merge branch 'PfemFluid/cut_fem_element' of https://github.com/Kratos…
rubenzorrilla May 10, 2023
62968ee
API update PFEM elements
rubenzorrilla May 11, 2023
de814d3
Corrections in CutFEM element
rubenzorrilla May 11, 2023
350e146
changes in pfem remeshing. These are ad hoc for cutpfem
AFranci Jul 27, 2023
8444e37
Restore master version
AFranci Jul 27, 2023
80467e1
Restore master version
AFranci Jul 27, 2023
bff26ea
Penalty variable
AFranci Jul 27, 2023
2f97676
Merge branch 'master' into PfemFluid/cut_fem_element
AFranci Jul 27, 2023
3a64f34
Merge conflicts, theta and new penalty factor
AFranci Jul 28, 2023
9faeab4
Merge branch 'master' into PfemFluid/cut_fem_element
rubenzorrilla Jul 28, 2023
964543e
Slip BC
rubenzorrilla Jul 28, 2023
e092a0a
Slip BC corrections
rubenzorrilla Jul 28, 2023
14be639
small change
AFranci Aug 30, 2023
9ea3ce7
Merge branch 'master' into PfemFluid/cut_fem_element
rubenzorrilla Oct 30, 2023
70ab4a9
Remeshing settings as in ZorrillaFranci2023
AFranci Oct 30, 2023
9e79306
Merge branch 'PfemFluid/cut_fem_element' of https://github.com/Kratos…
rubenzorrilla Oct 30, 2023
5787306
Merge branch 'PfemFluid/cut_fem_element' of https://github.com/Kratos…
rubenzorrilla Oct 30, 2023
29e557f
Merge branch 'PfemFluid/cut_fem_element' of https://github.com/Kratos…
AFranci Nov 13, 2023
5bd6b90
Merge branch 'master' into PfemFluid/cut_fem_element
AFranci Nov 13, 2023
587173b
CutPFEM meshing strategy
AFranci Nov 13, 2023
6aae721
Merge branch 'master' into PfemFluid/cut_fem_element
rubenzorrilla Nov 27, 2023
65d1701
Cut-PFEM test
rubenzorrilla Dec 1, 2023
dce285f
Merge branch 'master' into PfemFluid/cut_fem_element
rubenzorrilla Dec 1, 2023
a904ab3
First clean up
rubenzorrilla Dec 4, 2023
ee4bcd6
Some minors (mpConstitutiveLaw pending)
rubenzorrilla Dec 5, 2023
f605243
Revert undersired changes
rubenzorrilla Dec 8, 2023
6aa9d4a
Temporary fix for pointer issue
rubenzorrilla Dec 8, 2023
7372c45
Test leftover
rubenzorrilla Dec 8, 2023
afb2824
Merge branch 'master' into PfemFluid/cut_fem_element
AFranci Jan 24, 2024
d2b4f27
Merge branch 'master' into PfemFluid/cut_fem_element
AFranci Feb 19, 2024
bb20161
set echo_level 0 in tests
AFranci Mar 4, 2024
209819d
Reducing duplicated code
AFranci Mar 4, 2024
01bebf1
reduce verbosity
AFranci Mar 4, 2024
70fab6f
change name
AFranci Mar 4, 2024
f4ad7f5
reducing code duplication in remove nodes function
AFranci Mar 5, 2024
6e98d58
first cleaning of generating nodes functions
AFranci Mar 5, 2024
20f08f0
avoid duplication in generate_new_nodes
AFranci Mar 6, 2024
6f20402
Merge branch 'master' into PfemFluid/cut_fem_element
AFranci Mar 6, 2024
2f65813
addressing codacy
AFranci Mar 6, 2024
a53f401
Merge branch 'master' into PfemFluid/cut_fem_element
rubenzorrilla Mar 7, 2024
a7b445e
Cut-FEM element pointer issue
rubenzorrilla Mar 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions applications/PfemFluidDynamicsApplication/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ set( KRATOS_PFEM_FLUID_DYNAMICS_APPLICATION_CORE
${CMAKE_CURRENT_SOURCE_DIR}/custom_elements/updated_lagrangian_V_implicit_solid_element.cpp
${CMAKE_CURRENT_SOURCE_DIR}/custom_elements/two_step_updated_lagrangian_V_P_implicit_fluid_element.cpp
${CMAKE_CURRENT_SOURCE_DIR}/custom_elements/two_step_updated_lagrangian_V_P_implicit_fluid_FIC_element.cpp
${CMAKE_CURRENT_SOURCE_DIR}/custom_elements/two_step_updated_lagrangian_V_P_implicit_fluid_FIC_cut_fem_element.cpp
${CMAKE_CURRENT_SOURCE_DIR}/custom_elements/two_step_updated_lagrangian_V_P_implicit_fluid_PSPG_element.cpp
${CMAKE_CURRENT_SOURCE_DIR}/custom_elements/two_step_updated_lagrangian_V_P_implicit_fluid_DEM_coupling_element.cpp
${CMAKE_CURRENT_SOURCE_DIR}/custom_processes/assign_scalar_variable_to_pfem_entities_process.cpp
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,383 @@
// | / |
// ' / __| _` | __| _ \ __|
// . \ | ( | | ( |\__ `
// _|\_\_| \__,_|\__|\___/ ____/
// Multi-Physics
//
// License: BSD License
// Kratos default license: kratos/license.txt
//
// Main authors: Alessandro Franci
// Ruben Zorrilla
//

#pragma once

// System includes
#include <string>
#include <iostream>

// External includes

// Project includes
#include "containers/array_1d.h"
#include "includes/constitutive_law.h"
#include "includes/define.h"
#include "includes/serializer.h"
#include "geometries/geometry.h"
#include "modified_shape_functions/modified_shape_functions.h"
#include "utilities/math_utils.h"

// Application includes
#include "custom_elements/two_step_updated_lagrangian_V_P_implicit_fluid_FIC_element.h"

namespace Kratos
{

///@addtogroup PfemFluidDynamicsApplication
///@{

///@name Kratos Globals
///@{

///@}
///@name Type Definitions
///@{

///@}
///@name Enum's
///@{

///@}
///@name Functions
///@{

///@}
///@name Kratos Classes
///@{

/**
* @brief A FIC-stabilized CutPFEM element for the weakly-compressible Navier-Stokes equations
*
* @tparam TDim Number of dimensions
*/
template <unsigned int TDim>
class TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement : public TwoStepUpdatedLagrangianVPImplicitFluidFicElement<TDim>
{

public:
///@name Type Definitions
///@{

/// Pointer definition of TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement
KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement);

///base type:
using BaseType = TwoStepUpdatedLagrangianVPImplicitFluidFicElement<TDim>;

/// Node type
using NodeType = Node;

/// Geometry type (using with given NodeType)
using GeometryType = Geometry<NodeType>;

/// Definition of nodes container type, redefined from GeometryType
using NodesArrayType = Geometry<NodeType>::PointsArrayType;

/// Vector type for local contributions to the linear system
using VectorType = Vector;

/// Matrix type for local contributions to the linear system
using MatrixType = Matrix;

using IndexType = ::size_t;

using SizeType = std::size_t;

using EquationIdVectorType = std::vector<std::size_t>;

using DofsVectorType = std::vector<Dof<double>::Pointer>;

using DofsArrayType = PointerVectorSet<Dof<double>, IndexedObject>;

/// Type for shape function values container
using ShapeFunctionsType = Kratos::Vector;

/// Type for a matrix containing the shape function gradients
using ShapeFunctionDerivativesType = Kratos::Matrix;

/// Type for an array of shape function gradient matrices
using ShapeFunctionDerivativesArrayType = GeometryType::ShapeFunctionsGradientsType;

using PropertiesType = typename BaseType::PropertiesType;

using pPropertiesType = typename BaseType::PropertiesType::Pointer;

using ElementalVariables = typename BaseType::ElementalVariables;

using NodeWeakPtrVectorType = GlobalPointersVector<NodeType>;

/// Reference type definition for constitutive laws
using ConstitutiveLawType = ConstitutiveLaw;

///Pointer type for constitutive laws
using ConstitutiveLawPointerType = ConstitutiveLawType::Pointer;

/// Number of nodes
static constexpr SizeType NumNodes = TDim + 1;

/// Voigt size
static constexpr SizeType StrainSize = TDim == 2 ? 3 : 6;

///@}
///@name Life Cycle
///@{

/// Default constuctor.
TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement(IndexType NewId = 0)
: BaseType(NewId)
{
}

/// Constructor using an array of nodes.
TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement(
IndexType NewId,
const NodesArrayType &ThisNodes)
: BaseType(NewId, ThisNodes)
{
}

/// Constructor using a geometry object.
TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement(
IndexType NewId,
GeometryType::Pointer pGeometry)
: BaseType(NewId, pGeometry)
{
}

/// Constuctor using geometry and properties.
TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement(
IndexType NewId,
GeometryType::Pointer pGeometry,
pPropertiesType pProperties)
: BaseType(NewId, pGeometry, pProperties)
{
}

/// copy constructor
TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement(TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement const &rOther) : BaseType(rOther)
{
}

/// Destructor
virtual ~TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement() = default;

///@}
///@name Operators
///@{

/// Assignment operator.
TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement &operator=(TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement const &rOther) = delete;

///@}
///@name Operations
///@{

Element::Pointer Create(
IndexType NewId,
NodesArrayType const &ThisNodes,
pPropertiesType pProperties) const override
{
return Kratos::make_intrusive<TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement>(NewId, BaseType::GetGeometry().Create(ThisNodes), pProperties);
}

Element::Pointer Clone(
IndexType NewId,
NodesArrayType const &ThisNodes) const override;

///@}
///@name Access
///@{

///@}
///@name Elemental Data
///@{

int Check(const ProcessInfo &rCurrentProcessInfo) const override;

///@}
///@name Inquiry
///@{

///@}
///@name Input and output
///@{

/// Turn back information as a string.
std::string Info() const override
{
std::stringstream buffer;
buffer << "TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement #" << BaseType::Id();
return buffer.str();
}

/// Print information about this object.
void PrintInfo(std::ostream &rOStream) const override
{
rOStream << "TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement" << TDim << "D";
}

///@}
///@name Friends
///@{

///@}
protected:
///@name Protected static Member Variables
///@{

///@}
///@name Protected member Variables
///@{

///@}
///@name Protected Operators
///@{

///@}
///@name Protected Operations
///@{

void CalculateLocalMomentumEquations(
MatrixType &rLeftHandSideMatrix,
VectorType &rRightHandSideVector,
const ProcessInfo &rCurrentProcessInfo) override;

void CalculateGeometryData(
ShapeFunctionDerivativesArrayType &rDN_DX,
Matrix &rNContainer,
Vector &rGaussWeights) override;

void CalculateGeometryData(Vector &rGaussWeights) override;

///@}
///@name Protected Access
///@{

///@}
///@name Protected Inquiry
///@{

///@}
///@name Protected LifeCycle
///@{

///@}
private:
///@name Static Member Variables
///@{

///@}
///@name Member Variables
///@{

///@}
///@name Serialization
///@{

friend class Serializer;

void save(Serializer &rSerializer) const override
{
KRATOS_SERIALIZE_SAVE_BASE_CLASS(rSerializer, Element);
}

void load(Serializer &rSerializer) override
{
KRATOS_SERIALIZE_LOAD_BASE_CLASS(rSerializer, Element);
}

///@}
///@name Private Operators
///@{

///@}
///@name Private Operations
///@{

bool IsCut() const;

bool IsPositive() const;

void CalculateCutGeometryData(
ShapeFunctionDerivativesArrayType &rDNDX,
Matrix &rN,
Vector &rGaussWeights);

void CalculateIntersectionGeometryData(
ShapeFunctionDerivativesArrayType &rInterfaceDNDX,
Matrix &rInterfaceN,
Vector &rInterfaceGaussWeights,
ModifiedShapeFunctions::AreaNormalsContainerType& rInterfaceUnitNormals);

void CalculateCutGeometryData(Vector &rGaussWeights);

void VoigtStressNormalProjection(
const Vector& rVoigtStress,
const array_1d<double,3>& rUnitNormal,
array_1d<double,TDim>& rProjectedStress);

void CalculateBMatrix(
const Matrix& rDNDX,
BoundedMatrix<double,StrainSize, TDim*NumNodes>& rB);

void VoigtTransformForProduct(
const array_1d<double,3>& rVector,
BoundedMatrix<double, TDim, StrainSize>& rVoigtMatrix);

///@}
///@name Private Access
///@{

///@}
///@name Private Inquiry
///@{

///@}
///@name Un accessible methods
///@{

///@}
}; // Class TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement
///@}

///@name Type Definitions
///@{

///@}
///@name Input and output
///@{

/// input stream function
template <unsigned int TDim>
inline std::istream &operator>>(
std::istream &rIStream,
TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement<TDim> &rThis)
{
return rIStream;
}

/// output stream function
template <unsigned int TDim>
inline std::ostream &operator<<(
std::ostream &rOStream,
const TwoStepUpdatedLagrangianVPImplicitFluidFicCutFemElement<TDim> &rThis)
{
rThis.PrintInfo(rOStream);
rOStream << std::endl;
rThis.PrintData(rOStream);

return rOStream;
}

} // namespace Kratos.
Loading
Loading