Merge remote-tracking branch 'origin/nextRelease_philipc' into nextRelease
Conflicts: src/Allwmake
This commit is contained in:
commit
f7ad627f7f
1400 changed files with 225315 additions and 706439 deletions
|
@ -1,9 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
cd ${0%/*} || exit 1 # run from this directory
|
|
||||||
|
|
||||||
set -x
|
|
||||||
|
|
||||||
wmake libso materialModels
|
|
||||||
|
|
||||||
wmake newStressedFoam
|
|
||||||
wmake newContactStressFoam
|
|
|
@ -1,237 +0,0 @@
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 2004-2007 Hrvoje Jasak
|
|
||||||
\\/ 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 2 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, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
Class
|
|
||||||
componentReference
|
|
||||||
|
|
||||||
Description
|
|
||||||
Class contains data for a component reference as used in stress
|
|
||||||
analysis solvers.
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
componentReferenceI.H
|
|
||||||
componentReference.C
|
|
||||||
componentReferenceIO.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef componentReference_H
|
|
||||||
#define componentReference_H
|
|
||||||
|
|
||||||
#include "polyPatchID.H"
|
|
||||||
#include "fvMesh.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Class componentReference Declaration
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
class componentReference
|
|
||||||
{
|
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- Patch ID
|
|
||||||
polyPatchID patchID_;
|
|
||||||
|
|
||||||
//- Face index
|
|
||||||
label faceIndex_;
|
|
||||||
|
|
||||||
//- Direction
|
|
||||||
direction dir_;
|
|
||||||
|
|
||||||
//- Value in direction
|
|
||||||
scalar value_;
|
|
||||||
|
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
//- Create direction given a name
|
|
||||||
direction getDir(const dictionary& dict) const
|
|
||||||
{
|
|
||||||
word dirName(dict.lookup("direction"));
|
|
||||||
|
|
||||||
if (dirName == "x" || dirName == "X")
|
|
||||||
{
|
|
||||||
return vector::X;
|
|
||||||
}
|
|
||||||
else if (dirName == "y" || dirName == "Y")
|
|
||||||
{
|
|
||||||
return vector::Y;
|
|
||||||
}
|
|
||||||
else if (dirName == "z" || dirName == "Z")
|
|
||||||
{
|
|
||||||
return vector::Z;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FatalIOErrorIn
|
|
||||||
(
|
|
||||||
"vector::component componentReference::getComp("
|
|
||||||
"const word& dirName) const",
|
|
||||||
dict
|
|
||||||
) << "Direction " << dirName << " not recognised. Please "
|
|
||||||
<< "use x, y or z" << abort(FatalIOError);
|
|
||||||
|
|
||||||
// Dummy return to keep compiler happy
|
|
||||||
return vector::X;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//- Check if patch face is in range
|
|
||||||
void checkPatchFace(const fvMesh& mesh) const
|
|
||||||
{
|
|
||||||
if
|
|
||||||
(
|
|
||||||
!patchID_.active()
|
|
||||||
|| faceIndex_ >= mesh.boundaryMesh()[patchID_.index()].size()
|
|
||||||
)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"void checkPatchFace(const componentReference::fvMesh&)"
|
|
||||||
"const"
|
|
||||||
) << "Non-existing patch or index out of range."
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
// Public classes
|
|
||||||
|
|
||||||
//- Class used for the read-construction of
|
|
||||||
// PtrLists of componentReference
|
|
||||||
class iNew
|
|
||||||
{
|
|
||||||
const fvMesh& mesh_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
iNew(const fvMesh& mesh)
|
|
||||||
:
|
|
||||||
mesh_(mesh)
|
|
||||||
{}
|
|
||||||
|
|
||||||
autoPtr<componentReference> operator()(Istream& is) const
|
|
||||||
{
|
|
||||||
dictionary crDict(is);
|
|
||||||
|
|
||||||
autoPtr<componentReference> cr
|
|
||||||
(
|
|
||||||
new componentReference(mesh_, crDict)
|
|
||||||
);
|
|
||||||
|
|
||||||
return cr;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
|
||||||
|
|
||||||
//- Construct from components
|
|
||||||
componentReference
|
|
||||||
(
|
|
||||||
const fvMesh& mesh,
|
|
||||||
const word& patchName,
|
|
||||||
const label faceIndex,
|
|
||||||
const direction dir,
|
|
||||||
const scalar value
|
|
||||||
)
|
|
||||||
:
|
|
||||||
patchID_(patchName, mesh.boundaryMesh()),
|
|
||||||
faceIndex_(faceIndex),
|
|
||||||
dir_(dir),
|
|
||||||
value_(value)
|
|
||||||
{
|
|
||||||
checkPatchFace(mesh);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//- Construct from dictionary
|
|
||||||
componentReference
|
|
||||||
(
|
|
||||||
const fvMesh& mesh,
|
|
||||||
const dictionary& dict
|
|
||||||
)
|
|
||||||
:
|
|
||||||
patchID_(dict.lookup("patch"), mesh.boundaryMesh()),
|
|
||||||
faceIndex_(readLabel(dict.lookup("face"))),
|
|
||||||
dir_(getDir(dict)),
|
|
||||||
value_(readScalar(dict.lookup("value")))
|
|
||||||
{
|
|
||||||
checkPatchFace(mesh);
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Clone
|
|
||||||
autoPtr<componentReference> clone() const
|
|
||||||
{
|
|
||||||
return autoPtr<componentReference>(new componentReference(*this));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Destructor - default
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
|
||||||
|
|
||||||
//- Return patch index
|
|
||||||
label patchIndex() const
|
|
||||||
{
|
|
||||||
return patchID_.index();
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Return face index
|
|
||||||
label faceIndex() const
|
|
||||||
{
|
|
||||||
return faceIndex_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Return direction
|
|
||||||
direction dir() const
|
|
||||||
{
|
|
||||||
return dir_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Return value
|
|
||||||
scalar value() const
|
|
||||||
{
|
|
||||||
return value_;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
|
@ -1,265 +0,0 @@
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 2004-2007 Hrvoje Jasak
|
|
||||||
\\/ 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 2 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, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
Description
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "cohesiveLawFvPatchVectorField.H"
|
|
||||||
#include "addToRunTimeSelectionTable.H"
|
|
||||||
#include "volFields.H"
|
|
||||||
#include "rheologyModel.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
cohesiveLawFvPatchVectorField::cohesiveLawFvPatchVectorField
|
|
||||||
(
|
|
||||||
const fvPatch& p,
|
|
||||||
const DimensionedField<vector, volMesh>& iF
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchVectorField(p, iF),
|
|
||||||
cohesiveLawPtr_(NULL),
|
|
||||||
relaxationFactor_(1.0),
|
|
||||||
traction_(p.size(), vector::zero)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
cohesiveLawFvPatchVectorField::cohesiveLawFvPatchVectorField
|
|
||||||
(
|
|
||||||
const fvPatch& p,
|
|
||||||
const DimensionedField<vector, volMesh>& iF,
|
|
||||||
const dictionary& dict
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchVectorField(p, iF),
|
|
||||||
cohesiveLawPtr_
|
|
||||||
(
|
|
||||||
cohesiveLaw::New(dict.lookup("cohesiveLaw"), dict).ptr()
|
|
||||||
),
|
|
||||||
relaxationFactor_(readScalar(dict.lookup("relaxationFactor"))),
|
|
||||||
traction_(p.size(), vector::zero)
|
|
||||||
{
|
|
||||||
fvPatchVectorField::operator=(patchInternalField());
|
|
||||||
gradient() = vector::zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
cohesiveLawFvPatchVectorField::cohesiveLawFvPatchVectorField
|
|
||||||
(
|
|
||||||
const cohesiveLawFvPatchVectorField& cpf
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchVectorField(cpf),
|
|
||||||
cohesiveLawPtr_(cpf.cohesiveLawPtr_->clone().ptr()),
|
|
||||||
relaxationFactor_(cpf.relaxationFactor_),
|
|
||||||
traction_(cpf.traction_)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
cohesiveLawFvPatchVectorField::cohesiveLawFvPatchVectorField
|
|
||||||
(
|
|
||||||
const cohesiveLawFvPatchVectorField& cpf,
|
|
||||||
const fvPatch& p,
|
|
||||||
const DimensionedField<vector, volMesh>& iF,
|
|
||||||
const fvPatchFieldMapper& mapper
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchVectorField(cpf, p, iF, mapper),
|
|
||||||
cohesiveLawPtr_(cpf.cohesiveLawPtr_->clone().ptr()),
|
|
||||||
relaxationFactor_(cpf.relaxationFactor_),
|
|
||||||
traction_(cpf.traction_, mapper)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
cohesiveLawFvPatchVectorField::cohesiveLawFvPatchVectorField
|
|
||||||
(
|
|
||||||
const cohesiveLawFvPatchVectorField& cpf,
|
|
||||||
const DimensionedField<vector, volMesh>& iF
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchVectorField(cpf, iF),
|
|
||||||
cohesiveLawPtr_(cpf.cohesiveLawPtr_->clone().ptr()),
|
|
||||||
relaxationFactor_(cpf.relaxationFactor_),
|
|
||||||
traction_(cpf.traction_)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
const cohesiveLaw& cohesiveLawFvPatchVectorField::law() const
|
|
||||||
{
|
|
||||||
if (!cohesiveLawPtr_)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"const cohesiveLaw& cohesiveLawFvPatchVectorField::law() const"
|
|
||||||
) << "Law pointer not set" << abort(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
return *cohesiveLawPtr_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void cohesiveLawFvPatchVectorField::autoMap
|
|
||||||
(
|
|
||||||
const fvPatchFieldMapper& m
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (cohesiveLawPtr_ == NULL)
|
|
||||||
{
|
|
||||||
FatalErrorIn("cohesiveFvPatchVectorField::autoMap")
|
|
||||||
<< "NULL cohesive law"
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
fixedGradientFvPatchVectorField::autoMap(m);
|
|
||||||
|
|
||||||
traction_.autoMap(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Reverse-map the given fvPatchField onto this fvPatchField
|
|
||||||
void cohesiveLawFvPatchVectorField::rmap
|
|
||||||
(
|
|
||||||
const fvPatchVectorField& ptf,
|
|
||||||
const labelList& addr
|
|
||||||
)
|
|
||||||
{
|
|
||||||
fixedGradientFvPatchVectorField::rmap(ptf, addr);
|
|
||||||
|
|
||||||
const cohesiveLawFvPatchVectorField& dmptf =
|
|
||||||
refCast<const cohesiveLawFvPatchVectorField>(ptf);
|
|
||||||
|
|
||||||
// No need to grab the cohesive zone pointer more than once
|
|
||||||
if (!cohesiveLawPtr_)
|
|
||||||
{
|
|
||||||
cohesiveLawPtr_ = dmptf.cohesiveLawPtr_->clone().ptr();
|
|
||||||
|
|
||||||
relaxationFactor_ = dmptf.relaxationFactor_;
|
|
||||||
}
|
|
||||||
|
|
||||||
traction_.rmap(dmptf.traction_, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Update the coefficients associated with the patch field
|
|
||||||
void cohesiveLawFvPatchVectorField::updateCoeffs()
|
|
||||||
{
|
|
||||||
if (updated())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Looking up rheology
|
|
||||||
|
|
||||||
const fvPatchField<scalar>& mu =
|
|
||||||
lookupPatchField<volScalarField, scalar>("mu");
|
|
||||||
|
|
||||||
const fvPatchField<scalar>& lambda =
|
|
||||||
lookupPatchField<volScalarField, scalar>("lambda");
|
|
||||||
|
|
||||||
vectorField n = patch().nf();
|
|
||||||
|
|
||||||
const fvPatchField<tensor>& gradU =
|
|
||||||
lookupPatchField<volTensorField, tensor>("grad(U)");
|
|
||||||
|
|
||||||
// Patch displacement
|
|
||||||
const vectorField& U = *this;
|
|
||||||
|
|
||||||
// Patch stress
|
|
||||||
tensorField sigma = mu*(gradU + gradU.T()) + I*(lambda*tr(gradU));
|
|
||||||
|
|
||||||
// Normal stress component
|
|
||||||
scalarField sigmaN = (n & (n & sigma));
|
|
||||||
|
|
||||||
scalarField delta = -(n & U);
|
|
||||||
|
|
||||||
label sizeByTwo = patch().size()/2;
|
|
||||||
|
|
||||||
for(label i = 0; i < sizeByTwo; i++)
|
|
||||||
{
|
|
||||||
scalar tmp = delta[i];
|
|
||||||
delta[i] += delta[sizeByTwo + i];
|
|
||||||
delta[sizeByTwo + i] += tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
forAll (traction_, faceI)
|
|
||||||
{
|
|
||||||
if (delta[faceI] < 0)
|
|
||||||
{
|
|
||||||
// Return from traction to symmetryPlane??
|
|
||||||
traction_[faceI] = law().sigmaMax().value()*n[faceI];
|
|
||||||
}
|
|
||||||
else if(delta[faceI] > law().deltaC().value())
|
|
||||||
{
|
|
||||||
// Traction free
|
|
||||||
traction_[faceI] = vector::zero;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Calculate cohesive traction from cohesive zone model
|
|
||||||
traction_[faceI] = law().traction(delta[faceI])*n[faceI];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gradient() =
|
|
||||||
(
|
|
||||||
traction_
|
|
||||||
- (n & (mu*gradU.T() - (mu + lambda)*gradU))
|
|
||||||
- n*lambda*tr(gradU)
|
|
||||||
)/(2.0*mu + lambda);
|
|
||||||
|
|
||||||
fixedGradientFvPatchVectorField::updateCoeffs();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Write
|
|
||||||
void cohesiveLawFvPatchVectorField::write(Ostream& os) const
|
|
||||||
{
|
|
||||||
fvPatchVectorField::write(os);
|
|
||||||
traction_.writeEntry("traction", os);
|
|
||||||
os.writeKeyword("cohesiveLaw") << law().type()
|
|
||||||
<< token::END_STATEMENT << nl;
|
|
||||||
os.writeKeyword("relaxationFactor") << relaxationFactor_
|
|
||||||
<< token::END_STATEMENT << nl;
|
|
||||||
law().writeDict(os);
|
|
||||||
writeEntry("value", os);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
makePatchTypeField(fvPatchVectorField, cohesiveLawFvPatchVectorField);
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
|
@ -1,205 +0,0 @@
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright held by original author
|
|
||||||
\\/ 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 2 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, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "tractionDisplacementFvPatchVectorField.H"
|
|
||||||
#include "addToRunTimeSelectionTable.H"
|
|
||||||
#include "volFields.H"
|
|
||||||
#include "rheologyModel.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
tractionDisplacementFvPatchVectorField::
|
|
||||||
tractionDisplacementFvPatchVectorField
|
|
||||||
(
|
|
||||||
const fvPatch& p,
|
|
||||||
const DimensionedField<vector, volMesh>& iF
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchVectorField(p, iF),
|
|
||||||
UName_("undefined"),
|
|
||||||
rheologyName_("undefined"),
|
|
||||||
traction_(p.size(), vector::zero),
|
|
||||||
pressure_(p.size(), 0.0)
|
|
||||||
{
|
|
||||||
fvPatchVectorField::operator=(patchInternalField());
|
|
||||||
gradient() = vector::zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
tractionDisplacementFvPatchVectorField::
|
|
||||||
tractionDisplacementFvPatchVectorField
|
|
||||||
(
|
|
||||||
const fvPatch& p,
|
|
||||||
const DimensionedField<vector, volMesh>& iF,
|
|
||||||
const dictionary& dict
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchVectorField(p, iF),
|
|
||||||
UName_(dict.lookup("U")),
|
|
||||||
rheologyName_(dict.lookup("rheology")),
|
|
||||||
traction_("traction", dict, p.size()),
|
|
||||||
pressure_("pressure", dict, p.size())
|
|
||||||
{
|
|
||||||
fvPatchVectorField::operator=(patchInternalField());
|
|
||||||
gradient() = vector::zero;
|
|
||||||
Info << "rf: " << rheologyName_ << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
tractionDisplacementFvPatchVectorField::
|
|
||||||
tractionDisplacementFvPatchVectorField
|
|
||||||
(
|
|
||||||
const tractionDisplacementFvPatchVectorField& tdpvf,
|
|
||||||
const fvPatch& p,
|
|
||||||
const DimensionedField<vector, volMesh>& iF,
|
|
||||||
const fvPatchFieldMapper& mapper
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchVectorField(tdpvf, p, iF, mapper),
|
|
||||||
UName_(tdpvf.UName_),
|
|
||||||
rheologyName_(tdpvf.rheologyName_),
|
|
||||||
traction_(tdpvf.traction_, mapper),
|
|
||||||
pressure_(tdpvf.pressure_, mapper)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
tractionDisplacementFvPatchVectorField::
|
|
||||||
tractionDisplacementFvPatchVectorField
|
|
||||||
(
|
|
||||||
const tractionDisplacementFvPatchVectorField& tdpvf
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchVectorField(tdpvf),
|
|
||||||
UName_(tdpvf.UName_),
|
|
||||||
rheologyName_(tdpvf.rheologyName_),
|
|
||||||
traction_(tdpvf.traction_),
|
|
||||||
pressure_(tdpvf.pressure_)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
tractionDisplacementFvPatchVectorField::
|
|
||||||
tractionDisplacementFvPatchVectorField
|
|
||||||
(
|
|
||||||
const tractionDisplacementFvPatchVectorField& tdpvf,
|
|
||||||
const DimensionedField<vector, volMesh>& iF
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchVectorField(tdpvf, iF),
|
|
||||||
UName_(tdpvf.UName_),
|
|
||||||
rheologyName_(tdpvf.rheologyName_),
|
|
||||||
traction_(tdpvf.traction_),
|
|
||||||
pressure_(tdpvf.pressure_)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
void tractionDisplacementFvPatchVectorField::autoMap
|
|
||||||
(
|
|
||||||
const fvPatchFieldMapper& m
|
|
||||||
)
|
|
||||||
{
|
|
||||||
fixedGradientFvPatchVectorField::autoMap(m);
|
|
||||||
traction_.autoMap(m);
|
|
||||||
pressure_.autoMap(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Reverse-map the given fvPatchField onto this fvPatchField
|
|
||||||
void tractionDisplacementFvPatchVectorField::rmap
|
|
||||||
(
|
|
||||||
const fvPatchVectorField& ptf,
|
|
||||||
const labelList& addr
|
|
||||||
)
|
|
||||||
{
|
|
||||||
fixedGradientFvPatchVectorField::rmap(ptf, addr);
|
|
||||||
|
|
||||||
const tractionDisplacementFvPatchVectorField& dmptf =
|
|
||||||
refCast<const tractionDisplacementFvPatchVectorField>(ptf);
|
|
||||||
|
|
||||||
traction_.rmap(dmptf.traction_, addr);
|
|
||||||
pressure_.rmap(dmptf.pressure_, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Update the coefficients associated with the patch field
|
|
||||||
void tractionDisplacementFvPatchVectorField::updateCoeffs()
|
|
||||||
{
|
|
||||||
if (updated())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Looking up rheology
|
|
||||||
const rheologyModel& rheology =
|
|
||||||
this->db().objectRegistry::lookupObject<rheologyModel>(rheologyName_);
|
|
||||||
|
|
||||||
const scalarField mu = rheology.mu()().boundaryField()[patch().index()];
|
|
||||||
const scalarField lambda =
|
|
||||||
rheology.lambda()().boundaryField()[patch().index()];
|
|
||||||
|
|
||||||
vectorField n = patch().nf();
|
|
||||||
|
|
||||||
const fvPatchField<tensor>& gradU =
|
|
||||||
lookupPatchField<volTensorField, tensor>("grad(" +UName_ + ")");
|
|
||||||
|
|
||||||
gradient() =
|
|
||||||
(
|
|
||||||
(traction_ - (pressure_)*n)
|
|
||||||
- (n & (mu*gradU.T() - (mu + lambda)*gradU))
|
|
||||||
- n*lambda*tr(gradU)
|
|
||||||
)/(2.0*mu + lambda);
|
|
||||||
|
|
||||||
fixedGradientFvPatchVectorField::updateCoeffs();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Write
|
|
||||||
void tractionDisplacementFvPatchVectorField::write(Ostream& os) const
|
|
||||||
{
|
|
||||||
fvPatchVectorField::write(os);
|
|
||||||
os.writeKeyword("U") << UName_ << token::END_STATEMENT << nl;
|
|
||||||
os.writeKeyword("rheology") << rheologyName_ << token::END_STATEMENT << nl;
|
|
||||||
traction_.writeEntry("traction", os);
|
|
||||||
pressure_.writeEntry("pressure", os);
|
|
||||||
writeEntry("value", os);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
makePatchTypeField(fvPatchVectorField, tractionDisplacementFvPatchVectorField);
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
|
@ -3,18 +3,21 @@ cd ${0%/*} || exit 1 # run from this directory
|
||||||
|
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
wmake libso solidModels
|
wmake elasticAcpSolidFoam
|
||||||
|
wmake elasticIncrAcpSolidFoam
|
||||||
wmake elasticContactIncrSolidFoam
|
|
||||||
wmake elasticContactNonLinULSolidFoam
|
|
||||||
wmake elasticContactSolidFoam
|
|
||||||
wmake elasticGravitySolidFoam
|
|
||||||
wmake elasticIncrSolidFoam
|
wmake elasticIncrSolidFoam
|
||||||
|
wmake elasticNonLinIncrTLSolidFoam
|
||||||
wmake elasticNonLinTLSolidFoam
|
wmake elasticNonLinTLSolidFoam
|
||||||
wmake elasticNonLinULSolidFoam
|
wmake elasticNonLinULSolidFoam
|
||||||
wmake elasticPlasticNonLinULSolidFoam
|
wmake elasticOrthoAcpSolidFoam
|
||||||
|
wmake elasticOrthoNonLinULSolidFoam
|
||||||
|
wmake elasticOrthoSolidFoam
|
||||||
wmake elasticPlasticSolidFoam
|
wmake elasticPlasticSolidFoam
|
||||||
|
wmake elasticPlasticNonLinTLSolidFoam
|
||||||
|
wmake elasticPlasticNonLinULSolidFoam
|
||||||
wmake elasticSolidFoam
|
wmake elasticSolidFoam
|
||||||
wmake elasticThermalSolidFoam
|
wmake elasticThermalSolidFoam
|
||||||
wmake icoFsiElasticNonLinULSolidFoam
|
wmake icoFsiElasticNonLinULSolidFoam
|
||||||
wmake viscoElasticSolidFoam
|
wmake viscoElasticSolidFoam
|
||||||
|
|
||||||
|
(cd utilities; wmake all)
|
19
applications/solvers/solidMechanics/deprecatedSolvers/Allwmake
Executable file
19
applications/solvers/solidMechanics/deprecatedSolvers/Allwmake
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
cd ${0%/*} || exit 1 # run from this directory
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
wmake libso materialModels
|
||||||
|
|
||||||
|
wmake stressedFoam
|
||||||
|
wmake contactStressFoam
|
||||||
|
|
||||||
|
wmake newStressedFoam
|
||||||
|
wmake newContactStressFoam
|
||||||
|
|
||||||
|
wmake stressFemFoam
|
||||||
|
|
||||||
|
wmake icoFsiFoam
|
||||||
|
|
||||||
|
wmake solidDisplacementFoam
|
||||||
|
wmake solidEquilibriumDisplacementFoam
|
|
@ -23,7 +23,7 @@ License
|
||||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
Description
|
Description
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "error.H"
|
#include "error.H"
|
|
@ -26,7 +26,7 @@ Class
|
||||||
contactPatchPair
|
contactPatchPair
|
||||||
|
|
||||||
Description
|
Description
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
contactPatchPair.C
|
contactPatchPair.C
|
||||||
contactPatchPairSlavePressure.C
|
contactPatchPairSlavePressure.C
|
|
@ -23,7 +23,7 @@ License
|
||||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
Description
|
Description
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "contactPatchPair.H"
|
#include "contactPatchPair.H"
|
|
@ -23,7 +23,7 @@ License
|
||||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
Description
|
Description
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "contactPatchPair.H"
|
#include "contactPatchPair.H"
|
|
@ -26,7 +26,7 @@ Application
|
||||||
stressedFoam
|
stressedFoam
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Transient/steady-state solver of linear-elastic, small-strain deformation
|
Transient/steady-state solver of linear-elastic, small-strain deformation
|
||||||
of solid bodies in contact.
|
of solid bodies in contact.
|
||||||
|
|
||||||
Simple linear elasticity structural analysis code.
|
Simple linear elasticity structural analysis code.
|
|
@ -109,7 +109,7 @@
|
||||||
Info<< "Reading contact patch IDs etc.\n" << endl;
|
Info<< "Reading contact patch IDs etc.\n" << endl;
|
||||||
const dictionary& contactPatchDict
|
const dictionary& contactPatchDict
|
||||||
(
|
(
|
||||||
mesh.solutionDict().subDict("contactPatch")
|
mesh.solutionDict().subDict("contactPatch")
|
||||||
);
|
);
|
||||||
label gradPatch(readLabel(contactPatchDict.lookup("gradPatchID")));
|
label gradPatch(readLabel(contactPatchDict.lookup("gradPatchID")));
|
||||||
label dirPatch(readLabel(contactPatchDict.lookup("dirPatchID")));
|
label dirPatch(readLabel(contactPatchDict.lookup("dirPatchID")));
|
|
@ -1,4 +1,4 @@
|
||||||
tractionDisplacement/tractionDisplacementFvPatchVectorField.C
|
tractionDisplacement/tractionDisplacementFvPatchVectorField.C
|
||||||
icoFsiFoam.C
|
icoFsiFoam.C
|
||||||
|
|
||||||
EXE = $(FOAM_APPBIN)/icoFsiFoam
|
EXE = $(FOAM_APPBIN)/icoFsiFoam
|
|
@ -2,14 +2,15 @@ EXE_INC = \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
-I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \
|
-I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \
|
||||||
-I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \
|
-I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \
|
||||||
|
$(WM_DECOMP_INC) \
|
||||||
-I$(LIB_SRC)/tetFiniteElement/lnInclude \
|
-I$(LIB_SRC)/tetFiniteElement/lnInclude \
|
||||||
-I$(LIB_SRC)/dynamicMesh/meshMotion/tetMotionSolver/lnInclude \
|
-I$(LIB_SRC)/dynamicMesh/meshMotion/tetDecompositionMotionSolver/lnInclude \
|
||||||
|
|
||||||
|
|
||||||
EXE_LIBS = \
|
EXE_LIBS = \
|
||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-ldynamicFvMesh \
|
-ldynamicFvMesh \
|
||||||
-ldynamicMesh \
|
-ldynamicMesh \
|
||||||
-ltetFiniteElement \
|
-ltetFiniteElement \
|
||||||
-ltetMotionSolver \
|
$(WM_DECOMP_LIBS) \
|
||||||
-llduSolvers \
|
-llduSolvers
|
||||||
-L$(MESQUITE_LIB_DIR) -lmesquite
|
|
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
// Setting mesh motion
|
// Setting mesh motion
|
||||||
|
|
||||||
pointVectorField solidPointsDispl =
|
pointVectorField solidPointsDispl =
|
||||||
cpi.interpolate(Usolid - Usolid.oldTime());
|
cpi.interpolate(Usolid - Usolid.oldTime());
|
||||||
|
|
||||||
vectorField newPoints =
|
vectorField newPoints =
|
||||||
stressMesh.points()
|
stressMesh.points()
|
||||||
+ solidPointsDispl.internalField();
|
+ solidPointsDispl.internalField();
|
||||||
|
|
||||||
stressMesh.movePoints(newPoints);
|
stressMesh.movePoints(newPoints);
|
||||||
|
@ -28,8 +28,8 @@
|
||||||
|
|
||||||
# include "volContinuity.H"
|
# include "volContinuity.H"
|
||||||
|
|
||||||
Info << "Motion magnitude: mean = "
|
Info << "Motion magnitude: mean = "
|
||||||
<< average(mag(Usolid.boundaryField()[solidPatchID]))
|
<< average(mag(Usolid.boundaryField()[solidPatchID]))
|
||||||
<< " max = "
|
<< " max = "
|
||||||
<< max(mag(Usolid.boundaryField()[solidPatchID])) << endl;
|
<< max(mag(Usolid.boundaryField()[solidPatchID])) << endl;
|
||||||
}
|
}
|
|
@ -9,7 +9,7 @@
|
||||||
);
|
);
|
||||||
|
|
||||||
solidPatchPressure *= rhoFluid.value();
|
solidPatchPressure *= rhoFluid.value();
|
||||||
|
|
||||||
tForce.pressure() = solidPatchPressure;
|
tForce.pressure() = solidPatchPressure;
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,6 +20,6 @@
|
||||||
mesh.Sf().boundaryField()[fluidPatchID]
|
mesh.Sf().boundaryField()[fluidPatchID]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
Info << "Total pressure force = " << totalPressureForce << endl;
|
Info << "Total pressure force = " << totalPressureForce << endl;
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
// SIMPLE loop
|
// SIMPLE loop
|
||||||
|
|
||||||
for (int corr = 0; corr < nCorr; corr++)
|
for (int corr=0; corr<nCorr; corr++)
|
||||||
{
|
{
|
||||||
fvVectorMatrix UEqn
|
fvVectorMatrix UEqn
|
||||||
(
|
(
|
|
@ -169,7 +169,7 @@ void tractionDisplacementFvPatchVectorField::updateCoeffs()
|
||||||
vectorField n = patch().nf();
|
vectorField n = patch().nf();
|
||||||
|
|
||||||
const fvPatchField<tensor>& gradU =
|
const fvPatchField<tensor>& gradU =
|
||||||
lookupPatchField<volTensorField, tensor>("grad(U)");
|
patch().lookupPatchField<volTensorField, tensor>("grad(U)");
|
||||||
|
|
||||||
gradient() =
|
gradient() =
|
||||||
(
|
(
|
|
@ -16,7 +16,7 @@ $(rheologyLaws)/PronyViscoelastic/PronyViscoelastic.C
|
||||||
thermalModel/thermalModel.C
|
thermalModel/thermalModel.C
|
||||||
thermalLaws = thermalModel/thermalLaws
|
thermalLaws = thermalModel/thermalLaws
|
||||||
|
|
||||||
$(thermalLaws)/thermalLaw/thermalLaw.C
|
$(thermalLaws)/thermalLaw/thermalLaw.C
|
||||||
$(thermalLaws)/thermalLaw/newThermalLaw.C
|
$(thermalLaws)/thermalLaw/newThermalLaw.C
|
||||||
$(thermalLaws)/constantThermal/constantThermal.C
|
$(thermalLaws)/constantThermal/constantThermal.C
|
||||||
$(thermalLaws)/multiMaterialThermal/multiMaterialThermal.C
|
$(thermalLaws)/multiMaterialThermal/multiMaterialThermal.C
|
|
@ -71,7 +71,7 @@ public:
|
||||||
DugdaleCohesiveLaw
|
DugdaleCohesiveLaw
|
||||||
(
|
(
|
||||||
const word& cohesiveLawName,
|
const word& cohesiveLawName,
|
||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct as copy
|
//- Construct as copy
|
|
@ -74,7 +74,7 @@ Foam::autoPtr<Foam::cohesiveLaw> Foam::cohesiveLaw::New
|
||||||
Foam::cohesiveLaw::cohesiveLaw
|
Foam::cohesiveLaw::cohesiveLaw
|
||||||
(
|
(
|
||||||
const word& cohesiveLawName,
|
const word& cohesiveLawName,
|
||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
cohesiveLawCoeffs_(dict.subDict(cohesiveLawName + "Coeffs")),
|
cohesiveLawCoeffs_(dict.subDict(cohesiveLawName + "Coeffs")),
|
|
@ -97,7 +97,7 @@ public:
|
||||||
static autoPtr<cohesiveLaw> New
|
static autoPtr<cohesiveLaw> New
|
||||||
(
|
(
|
||||||
const word& cohesiveLawName,
|
const word& cohesiveLawName,
|
||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ public:
|
||||||
cohesiveLaw
|
cohesiveLaw
|
||||||
(
|
(
|
||||||
const word& cohesiveLawName,
|
const word& cohesiveLawName,
|
||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct as copy
|
//- Construct as copy
|
||||||
|
@ -124,7 +124,7 @@ public:
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return cohesive law coefficients
|
//- Return cohesive law coefficients
|
||||||
const dictionary& cohesiveLawCoeffs() const
|
const dictionary& cohesiveLawCoeffs() const
|
||||||
{
|
{
|
|
@ -71,7 +71,7 @@ public:
|
||||||
linearCohesiveLaw
|
linearCohesiveLaw
|
||||||
(
|
(
|
||||||
const word& cohesiveLawName,
|
const word& cohesiveLawName,
|
||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct as copy
|
//- Construct as copy
|
|
@ -171,7 +171,7 @@ public:
|
||||||
{
|
{
|
||||||
checkPatchFace(mesh);
|
checkPatchFace(mesh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
componentReference
|
componentReference
|
|
@ -245,7 +245,7 @@ void cohesiveLawFvPatchVectorField::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
fvPatchVectorField::write(os);
|
fvPatchVectorField::write(os);
|
||||||
traction_.writeEntry("traction", os);
|
traction_.writeEntry("traction", os);
|
||||||
os.writeKeyword("cohesiveLaw") << law().type()
|
os.writeKeyword("cohesiveLaw") << law().type()
|
||||||
<< token::END_STATEMENT << nl;
|
<< token::END_STATEMENT << nl;
|
||||||
os.writeKeyword("relaxationFactor") << relaxationFactor_
|
os.writeKeyword("relaxationFactor") << relaxationFactor_
|
||||||
<< token::END_STATEMENT << nl;
|
<< token::END_STATEMENT << nl;
|
|
@ -99,7 +99,7 @@ cohesiveZoneFvPatchVectorField::cohesiveZoneFvPatchVectorField
|
||||||
{
|
{
|
||||||
this->refValue() = vector::zero;
|
this->refValue() = vector::zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dict.found("refGradient"))
|
if (dict.found("refGradient"))
|
||||||
{
|
{
|
||||||
this->refGrad() = vectorField("refGradient", dict, p.size());
|
this->refGrad() = vectorField("refGradient", dict, p.size());
|
||||||
|
@ -111,7 +111,7 @@ cohesiveZoneFvPatchVectorField::cohesiveZoneFvPatchVectorField
|
||||||
|
|
||||||
if (dict.found("valueFraction"))
|
if (dict.found("valueFraction"))
|
||||||
{
|
{
|
||||||
this->valueFraction() =
|
this->valueFraction() =
|
||||||
symmTensorField("valueFraction", dict, p.size());
|
symmTensorField("valueFraction", dict, p.size());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -206,14 +206,14 @@ void cohesiveZoneFvPatchVectorField::updateCoeffs()
|
||||||
const rheologyModel& rheology =
|
const rheologyModel& rheology =
|
||||||
this->db().objectRegistry::lookupObject<rheologyModel>(rheologyName_);
|
this->db().objectRegistry::lookupObject<rheologyModel>(rheologyName_);
|
||||||
|
|
||||||
const scalarField mu =
|
const scalarField mu =
|
||||||
rheology.mu()().boundaryField()[patch().index()];
|
rheology.mu()().boundaryField()[patch().index()];
|
||||||
|
|
||||||
const scalarField lambda =
|
const scalarField lambda =
|
||||||
rheology.lambda()().boundaryField()[patch().index()];
|
rheology.lambda()().boundaryField()[patch().index()];
|
||||||
|
|
||||||
const fvPatchField<tensor>& gradU =
|
const fvPatchField<tensor>& gradU =
|
||||||
lookupPatchField<volTensorField, tensor>
|
patch().lookupPatchField<volTensorField, tensor>
|
||||||
(
|
(
|
||||||
"grad(" +UName_ + ")"
|
"grad(" +UName_ + ")"
|
||||||
);
|
);
|
||||||
|
@ -276,17 +276,17 @@ void cohesiveZoneFvPatchVectorField::updateCoeffs()
|
||||||
|
|
||||||
if(magSqr(valueFraction()[faceI]) < SMALL)
|
if(magSqr(valueFraction()[faceI]) < SMALL)
|
||||||
{
|
{
|
||||||
cohesiveTraction =
|
cohesiveTraction =
|
||||||
relaxationFactor_*cohesiveTraction
|
relaxationFactor_*cohesiveTraction
|
||||||
+ (1.0 - relaxationFactor_)*sigmaN[faceI]*n[faceI];
|
+ (1.0 - relaxationFactor_)*sigmaN[faceI]*n[faceI];
|
||||||
|
|
||||||
refGrad()[faceI] =
|
refGrad()[faceI] =
|
||||||
(
|
(
|
||||||
cohesiveTraction
|
cohesiveTraction
|
||||||
- (
|
- (
|
||||||
n[faceI]
|
n[faceI]
|
||||||
& (
|
& (
|
||||||
mu[faceI]*gradU[faceI].T()
|
mu[faceI]*gradU[faceI].T()
|
||||||
- (mu[faceI] + lambda[faceI])*gradU[faceI]
|
- (mu[faceI] + lambda[faceI])*gradU[faceI]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -306,7 +306,7 @@ void cohesiveZoneFvPatchVectorField::write(Ostream& os) const
|
||||||
directionMixedFvPatchVectorField::write(os);
|
directionMixedFvPatchVectorField::write(os);
|
||||||
os.writeKeyword("U") << UName_ << token::END_STATEMENT << nl;
|
os.writeKeyword("U") << UName_ << token::END_STATEMENT << nl;
|
||||||
os.writeKeyword("rheology") << rheologyName_ << token::END_STATEMENT << nl;
|
os.writeKeyword("rheology") << rheologyName_ << token::END_STATEMENT << nl;
|
||||||
os.writeKeyword("cohesiveLaw") << law().type()
|
os.writeKeyword("cohesiveLaw") << law().type()
|
||||||
<< token::END_STATEMENT << nl;
|
<< token::END_STATEMENT << nl;
|
||||||
os.writeKeyword("relaxationFactor") << relaxationFactor_
|
os.writeKeyword("relaxationFactor") << relaxationFactor_
|
||||||
<< token::END_STATEMENT << nl;
|
<< token::END_STATEMENT << nl;
|
|
@ -174,7 +174,7 @@ public:
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
virtual void updateCoeffs();
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
|
||||||
//- Write
|
//- Write
|
||||||
virtual void write(Ostream&) const;
|
virtual void write(Ostream&) const;
|
|
@ -195,7 +195,7 @@ void nusseltFvPatchScalarField::updateCoeffs()
|
||||||
|
|
||||||
// Lookup temperature diffusivity of the patch
|
// Lookup temperature diffusivity of the patch
|
||||||
const fvPatchField<scalar>& DT =
|
const fvPatchField<scalar>& DT =
|
||||||
this->lookupPatchField<volScalarField, scalar>(DTName_);
|
this->patch().lookupPatchField<volScalarField, scalar>(DTName_);
|
||||||
|
|
||||||
// Calculate flux
|
// Calculate flux
|
||||||
scalarField tempFlux = alpha_*(Tinternal - Tinf_);
|
scalarField tempFlux = alpha_*(Tinternal - Tinf_);
|
|
@ -68,7 +68,6 @@ tractionDisplacementFvPatchVectorField
|
||||||
traction_("traction", dict, p.size()),
|
traction_("traction", dict, p.size()),
|
||||||
pressure_("pressure", dict, p.size())
|
pressure_("pressure", dict, p.size())
|
||||||
{
|
{
|
||||||
Info << "creating tractionDisplacement boundary" << endl;
|
|
||||||
fvPatchVectorField::operator=(patchInternalField());
|
fvPatchVectorField::operator=(patchInternalField());
|
||||||
gradient() = vector::zero;
|
gradient() = vector::zero;
|
||||||
Info << "rf: " << rheologyName_ << endl;
|
Info << "rf: " << rheologyName_ << endl;
|
||||||
|
@ -182,6 +181,7 @@ void tractionDisplacementFvPatchVectorField::updateCoeffs()
|
||||||
fixedGradientFvPatchVectorField::updateCoeffs();
|
fixedGradientFvPatchVectorField::updateCoeffs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Write
|
// Write
|
||||||
void tractionDisplacementFvPatchVectorField::write(Ostream& os) const
|
void tractionDisplacementFvPatchVectorField::write(Ostream& os) const
|
||||||
{
|
{
|
|
@ -180,7 +180,7 @@ void tractionDisplacementThermoFvPatchVectorField::updateCoeffs()
|
||||||
vectorField n = patch().nf();
|
vectorField n = patch().nf();
|
||||||
|
|
||||||
const fvPatchField<tensor>& gradU =
|
const fvPatchField<tensor>& gradU =
|
||||||
lookupPatchField<volTensorField, tensor>("grad(" +UName_ + ")");
|
patch().lookupPatchField<volTensorField, tensor>("grad(" +UName_ + ")");
|
||||||
|
|
||||||
// Thermal component
|
// Thermal component
|
||||||
|
|
||||||
|
@ -189,7 +189,7 @@ void tractionDisplacementThermoFvPatchVectorField::updateCoeffs()
|
||||||
this->db().objectRegistry::lookupObject<thermalModel>(thermoName_);
|
this->db().objectRegistry::lookupObject<thermalModel>(thermoName_);
|
||||||
|
|
||||||
const fvPatchField<scalar>& T =
|
const fvPatchField<scalar>& T =
|
||||||
lookupPatchField<volScalarField, scalar>(TName_);
|
patch().lookupPatchField<volScalarField, scalar>(TName_);
|
||||||
|
|
||||||
const scalarField rhoThreeKalpha =
|
const scalarField rhoThreeKalpha =
|
||||||
rheology.rho()().boundaryField()[patch().index()]*
|
rheology.rho()().boundaryField()[patch().index()]*
|
|
@ -107,7 +107,7 @@ Foam::tmp<Foam::volScalarField> Foam::BurgersViscoelastic::E(scalar t) const
|
||||||
+ eta2_.value()/k2_.value();
|
+ eta2_.value()/k2_.value();
|
||||||
|
|
||||||
scalar p2 = eta1_.value()*eta2_.value()/(k1_.value()*k2_.value());
|
scalar p2 = eta1_.value()*eta2_.value()/(k1_.value()*k2_.value());
|
||||||
|
|
||||||
scalar q1 = eta1_.value();
|
scalar q1 = eta1_.value();
|
||||||
|
|
||||||
scalar q2 = eta1_.value()*eta2_.value()/k2_.value();
|
scalar q2 = eta1_.value()*eta2_.value()/k2_.value();
|
||||||
|
@ -120,7 +120,7 @@ Foam::tmp<Foam::volScalarField> Foam::BurgersViscoelastic::E(scalar t) const
|
||||||
|
|
||||||
E = (q1 - q2*r1)*exp(-r1*t)/A - (q1 - q2*r2)*exp(-r2*t)/A;
|
E = (q1 - q2*r1)*exp(-r1*t)/A - (q1 - q2*r2)*exp(-r2*t)/A;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
tmp<volScalarField> tresult
|
tmp<volScalarField> tresult
|
||||||
(
|
(
|
||||||
|
@ -178,7 +178,7 @@ Foam::tmp<Foam::volScalarField> Foam::BurgersViscoelastic::J(scalar t) const
|
||||||
|
|
||||||
if(t >= 0)
|
if(t >= 0)
|
||||||
{
|
{
|
||||||
J = 1.0/k1_.value()
|
J = 1.0/k1_.value()
|
||||||
+ (1 - exp(-k2_.value()*t/eta2_.value()))/k2_.value()
|
+ (1 - exp(-k2_.value()*t/eta2_.value()))/k2_.value()
|
||||||
+ t/eta1_.value();
|
+ t/eta1_.value();
|
||||||
}
|
}
|
|
@ -102,14 +102,14 @@ Foam::tmp<Foam::volScalarField> Foam::KelvinSLSViscoelastic::E(scalar t) const
|
||||||
if(t>=0)
|
if(t>=0)
|
||||||
{
|
{
|
||||||
scalar p1 = eta2_.value()/(k1_.value() + k2_.value());
|
scalar p1 = eta2_.value()/(k1_.value() + k2_.value());
|
||||||
|
|
||||||
scalar q0 = k1_.value()*k2_.value()/(k1_.value() + k2_.value());
|
scalar q0 = k1_.value()*k2_.value()/(k1_.value() + k2_.value());
|
||||||
|
|
||||||
scalar q1 = k1_.value()*eta2_.value()/(k1_.value() + k2_.value());
|
scalar q1 = k1_.value()*eta2_.value()/(k1_.value() + k2_.value());
|
||||||
|
|
||||||
E = q0 + (q1/p1 - q0)*exp(-t/p1);
|
E = q0 + (q1/p1 - q0)*exp(-t/p1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
tmp<volScalarField> tresult
|
tmp<volScalarField> tresult
|
||||||
(
|
(
|
||||||
|
@ -168,7 +168,7 @@ Foam::tmp<Foam::volScalarField> Foam::KelvinSLSViscoelastic::J(scalar t) const
|
||||||
if(t >= 0)
|
if(t >= 0)
|
||||||
{
|
{
|
||||||
scalar p1 = eta2_.value()/(k1_.value() + k2_.value());
|
scalar p1 = eta2_.value()/(k1_.value() + k2_.value());
|
||||||
|
|
||||||
scalar q0 = k1_.value()*k2_.value()/(k1_.value() + k2_.value());
|
scalar q0 = k1_.value()*k2_.value()/(k1_.value() + k2_.value());
|
||||||
|
|
||||||
scalar q1 = k1_.value()*eta2_.value()/(k1_.value() + k2_.value());
|
scalar q1 = k1_.value()*eta2_.value()/(k1_.value() + k2_.value());
|
|
@ -183,8 +183,8 @@ Foam::MaxwellElasticViscoelastic::J(scalar t) const
|
||||||
mesh(),
|
mesh(),
|
||||||
dimensionedScalar
|
dimensionedScalar
|
||||||
(
|
(
|
||||||
"J",
|
"J",
|
||||||
dimless/k_.dimensions(),
|
dimless/k_.dimensions(),
|
||||||
1.0/k_.value() + t/eta_.value()
|
1.0/k_.value() + t/eta_.value()
|
||||||
),
|
),
|
||||||
zeroGradientFvPatchScalarField::typeName
|
zeroGradientFvPatchScalarField::typeName
|
|
@ -101,7 +101,7 @@ Foam::tmp<Foam::volScalarField> Foam::MaxwellSLSViscoelastic::E(scalar t) const
|
||||||
{
|
{
|
||||||
E = k2_.value() + k1_.value()*exp(-k1_.value()*t/eta1_.value());
|
E = k2_.value() + k1_.value()*exp(-k1_.value()*t/eta1_.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
tmp<volScalarField> tresult
|
tmp<volScalarField> tresult
|
||||||
(
|
(
|
|
@ -169,8 +169,8 @@ Foam::tmp<Foam::volScalarField> Foam::MaxwellViscoelastic::J(scalar t) const
|
||||||
mesh(),
|
mesh(),
|
||||||
dimensionedScalar
|
dimensionedScalar
|
||||||
(
|
(
|
||||||
"J",
|
"J",
|
||||||
dimless/k_.dimensions(),
|
dimless/k_.dimensions(),
|
||||||
1.0/k_.value() + t/eta_.value()
|
1.0/k_.value() + t/eta_.value()
|
||||||
),
|
),
|
||||||
zeroGradientFvPatchScalarField::typeName
|
zeroGradientFvPatchScalarField::typeName
|
|
@ -105,7 +105,7 @@ Foam::tmp<Foam::volScalarField> Foam::PronyViscoelastic::E(scalar t) const
|
||||||
{
|
{
|
||||||
E += k_[i]*exp(-t/tau_[i]);
|
E += k_[i]*exp(-t/tau_[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(t < 0)
|
if(t < 0)
|
||||||
{
|
{
|
||||||
E = 0;
|
E = 0;
|
||||||
|
@ -162,7 +162,7 @@ Foam::tmp<Foam::volScalarField> Foam::PronyViscoelastic::nu(scalar t) const
|
||||||
Foam::tmp<Foam::volScalarField> Foam::PronyViscoelastic::J(scalar t) const
|
Foam::tmp<Foam::volScalarField> Foam::PronyViscoelastic::J(scalar t) const
|
||||||
{
|
{
|
||||||
notImplemented(type() + "::J(scalar t)");
|
notImplemented(type() + "::J(scalar t)");
|
||||||
|
|
||||||
return 1.0/E(t);
|
return 1.0/E(t);
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,7 +104,7 @@ Foam::contactPatchPair::contactPatchPair
|
||||||
cp.mesh().boundaryMesh()[slavePatch_.index()], // to patch
|
cp.mesh().boundaryMesh()[slavePatch_.index()], // to patch
|
||||||
intersection::algorithmNames_.read(dict.lookup("projectionAlgo")),
|
intersection::algorithmNames_.read(dict.lookup("projectionAlgo")),
|
||||||
intersection::directionNames_.read(dict.lookup("projectionDir"))
|
intersection::directionNames_.read(dict.lookup("projectionDir"))
|
||||||
|
|
||||||
),
|
),
|
||||||
slaveToMasterInterpolate_
|
slaveToMasterInterpolate_
|
||||||
(
|
(
|
||||||
|
@ -112,7 +112,7 @@ Foam::contactPatchPair::contactPatchPair
|
||||||
cp.mesh().boundaryMesh()[masterPatch_.index()], // to patch
|
cp.mesh().boundaryMesh()[masterPatch_.index()], // to patch
|
||||||
intersection::algorithmNames_.read(dict.lookup("projectionAlgo")),
|
intersection::algorithmNames_.read(dict.lookup("projectionAlgo")),
|
||||||
intersection::directionNames_.read(dict.lookup("projectionDir"))
|
intersection::directionNames_.read(dict.lookup("projectionDir"))
|
||||||
|
|
||||||
)
|
)
|
||||||
{}
|
{}
|
||||||
|
|
|
@ -27,7 +27,7 @@ Class
|
||||||
|
|
||||||
Description
|
Description
|
||||||
A pair of surfaces in contact.
|
A pair of surfaces in contact.
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
contactPatchPair.C
|
contactPatchPair.C
|
||||||
|
|
|
@ -241,7 +241,7 @@ void contactProblem::correct()
|
||||||
(
|
(
|
||||||
lambdaPatches[patchI]*tr(gradUpatches[patchI])
|
lambdaPatches[patchI]*tr(gradUpatches[patchI])
|
||||||
)
|
)
|
||||||
|
|
||||||
)/(2.0*muPatches[patchI] + lambdaPatches[patchI]);
|
)/(2.0*muPatches[patchI] + lambdaPatches[patchI]);
|
||||||
|
|
||||||
// Set the value fractions
|
// Set the value fractions
|
Some files were not shown because too many files have changed in this diff Show more
Reference in a new issue