Skip to content
Permalink
Browse files

hydrostaticDisplacementFvPatchVectorField: New experimental traction …

…boundary condition for solidDisplacementFoam

Description
    Fixed traction boundary condition for the standard linear elastic, fixed
    coefficient displacement equation in which the traction is caused by
    the hydrostatic pressure of an external liquid reservoir.
  • Loading branch information...
Henry Weller
Henry Weller committed Sep 21, 2018
1 parent 82d8784 commit a098cdb710a242364186e4ffa02330d0525239a4
@@ -1,4 +1,5 @@
tractionDisplacement/tractionDisplacementFvPatchVectorField.C
derivedFvPatchFields/tractionDisplacement/tractionDisplacementFvPatchVectorField.C
derivedFvPatchFields/hydrostaticDisplacement/hydrostaticDisplacementFvPatchVectorField.C
solidDisplacementFoam.C

EXE = $(FOAM_APPBIN)/solidDisplacementFoam
@@ -1,6 +1,6 @@
EXE_INC = \
-I. \
-ItractionDisplacement \
-IderivedFvPatchFields/tractionDisplacement \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude

@@ -0,0 +1,149 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2018 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/

#include "hydrostaticDisplacementFvPatchVectorField.H"
#include "uniformDimensionedFields.H"
#include "addToRunTimeSelectionTable.H"

// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

Foam::hydrostaticDisplacementFvPatchVectorField::
hydrostaticDisplacementFvPatchVectorField
(
const fvPatch& p,
const DimensionedField<vector, volMesh>& iF
)
:
tractionDisplacementFvPatchVectorField(p, iF),
rhoLiquid_(0.0),
liquidSurfacePressure_(0.0),
liquidSurfacePoint_(Zero)
{}


Foam::hydrostaticDisplacementFvPatchVectorField::
hydrostaticDisplacementFvPatchVectorField
(
const fvPatch& p,
const DimensionedField<vector, volMesh>& iF,
const dictionary& dict
)
:
tractionDisplacementFvPatchVectorField(p, iF),
rhoLiquid_(readScalar(dict.lookup("rhoLiquid"))),
liquidSurfacePressure_(readScalar(dict.lookup("liquidSurfacePressure"))),
liquidSurfacePoint_(dict.lookup("liquidSurfacePoint"))
{}


Foam::hydrostaticDisplacementFvPatchVectorField::
hydrostaticDisplacementFvPatchVectorField
(
const hydrostaticDisplacementFvPatchVectorField& tdpvf,
const fvPatch& p,
const DimensionedField<vector, volMesh>& iF,
const fvPatchFieldMapper& mapper
)
:
tractionDisplacementFvPatchVectorField(tdpvf, p, iF, mapper),
rhoLiquid_(tdpvf.rhoLiquid_),
liquidSurfacePressure_(tdpvf.liquidSurfacePressure_),
liquidSurfacePoint_(tdpvf.liquidSurfacePoint_)
{}


Foam::hydrostaticDisplacementFvPatchVectorField::
hydrostaticDisplacementFvPatchVectorField
(
const hydrostaticDisplacementFvPatchVectorField& tdpvf
)
:
tractionDisplacementFvPatchVectorField(tdpvf),
rhoLiquid_(tdpvf.rhoLiquid_),
liquidSurfacePressure_(tdpvf.liquidSurfacePressure_),
liquidSurfacePoint_(tdpvf.liquidSurfacePoint_)
{}


Foam::hydrostaticDisplacementFvPatchVectorField::
hydrostaticDisplacementFvPatchVectorField
(
const hydrostaticDisplacementFvPatchVectorField& tdpvf,
const DimensionedField<vector, volMesh>& iF
)
:
tractionDisplacementFvPatchVectorField(tdpvf, iF),
rhoLiquid_(tdpvf.rhoLiquid_),
liquidSurfacePressure_(tdpvf.liquidSurfacePressure_),
liquidSurfacePoint_(tdpvf.liquidSurfacePoint_)
{}


// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //

void Foam::hydrostaticDisplacementFvPatchVectorField::updateCoeffs()
{
if (updated())
{
return;
}

const uniformDimensionedVectorField& g =
db().lookupObject<uniformDimensionedVectorField>("g");

pressure() =
liquidSurfacePressure_
+ rhoLiquid_
*max(g.value() & (patch().Cf() - liquidSurfacePoint_), scalar(0));

tractionDisplacementFvPatchVectorField::updateCoeffs();
}


void Foam::hydrostaticDisplacementFvPatchVectorField::write(Ostream& os) const
{
fvPatchVectorField::write(os);
os.writeKeyword("rhoLiquid") << rhoLiquid_ << token::END_STATEMENT << nl;
os.writeKeyword("liquidSurfacePressure")
<< liquidSurfacePressure_ << token::END_STATEMENT << nl;
os.writeKeyword("liquidSurfacePoint")
<< liquidSurfacePoint_ << token::END_STATEMENT << nl;
writeEntry("value", os);
}


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

namespace Foam
{
makePatchTypeField
(
fvPatchVectorField,
hydrostaticDisplacementFvPatchVectorField
);
}


// ************************************************************************* //
@@ -0,0 +1,153 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2018 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::hydrostaticDisplacementFvPatchVectorField
Description
Fixed traction boundary condition for the standard linear elastic, fixed
coefficient displacement equation in which the traction is caused by
the hydrostatic pressure of an external liquid reservoir.
SourceFiles
hydrostaticDisplacementFvPatchVectorField.C
\*---------------------------------------------------------------------------*/

#ifndef hydrostaticDisplacementFvPatchVectorField_H
#define hydrostaticDisplacementFvPatchVectorField_H

#include "tractionDisplacementFvPatchVectorField.H"

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

namespace Foam
{

/*---------------------------------------------------------------------------*\
Class hydrostaticDisplacementFvPatch Declaration
\*---------------------------------------------------------------------------*/

class hydrostaticDisplacementFvPatchVectorField
:
public tractionDisplacementFvPatchVectorField
{
// Private Data

//- Density of surrounding liquid
scalar rhoLiquid_;

//- Pressure above the liquid
scalar liquidSurfacePressure_;

//- Point on liquid surface
vector liquidSurfacePoint_;


public:

//- Runtime type information
TypeName("hydrostaticDisplacement");


// Constructors

//- Construct from patch and internal field
hydrostaticDisplacementFvPatchVectorField
(
const fvPatch&,
const DimensionedField<vector, volMesh>&
);

//- Construct from patch, internal field and dictionary
hydrostaticDisplacementFvPatchVectorField
(
const fvPatch&,
const DimensionedField<vector, volMesh>&,
const dictionary&
);

//- Construct by mapping given
// hydrostaticDisplacementFvPatchVectorField onto a new patch
hydrostaticDisplacementFvPatchVectorField
(
const hydrostaticDisplacementFvPatchVectorField&,
const fvPatch&,
const DimensionedField<vector, volMesh>&,
const fvPatchFieldMapper&
);

//- Construct as copy
hydrostaticDisplacementFvPatchVectorField
(
const hydrostaticDisplacementFvPatchVectorField&
);

//- Construct and return a clone
virtual tmp<fvPatchVectorField> clone() const
{
return tmp<fvPatchVectorField>
(
new hydrostaticDisplacementFvPatchVectorField(*this)
);
}

//- Construct as copy setting internal field reference
hydrostaticDisplacementFvPatchVectorField
(
const hydrostaticDisplacementFvPatchVectorField&,
const DimensionedField<vector, volMesh>&
);

//- Construct and return a clone setting internal field reference
virtual tmp<fvPatchVectorField> clone
(
const DimensionedField<vector, volMesh>& iF
) const
{
return tmp<fvPatchVectorField>
(
new hydrostaticDisplacementFvPatchVectorField(*this, iF)
);
}


// Member functions

//- Update the coefficients associated with the patch field
virtual void updateCoeffs();

//- Write
virtual void write(Ostream&) const;
};


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

} // End namespace Foam

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

#endif

// ************************************************************************* //

0 comments on commit a098cdb

Please sign in to comment.
You can’t perform that action at this time.