Merge remote-tracking branch 'origin/nextRelease_philipc' into nextRelease

Conflicts:
	src/Allwmake
This commit is contained in:
Hrvoje Jasak 2013-10-29 10:20:25 +00:00
commit f7ad627f7f
1400 changed files with 225315 additions and 706439 deletions

View file

@ -1,9 +0,0 @@
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
set -x
wmake libso materialModels
wmake newStressedFoam
wmake newContactStressFoam

View file

@ -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
// ************************************************************************* //

View file

@ -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
// ************************************************************************* //

View file

@ -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
// ************************************************************************* //

View file

@ -3,18 +3,21 @@ cd ${0%/*} || exit 1 # run from this directory
set -x
wmake libso solidModels
wmake elasticContactIncrSolidFoam
wmake elasticContactNonLinULSolidFoam
wmake elasticContactSolidFoam
wmake elasticGravitySolidFoam
wmake elasticAcpSolidFoam
wmake elasticIncrAcpSolidFoam
wmake elasticIncrSolidFoam
wmake elasticNonLinIncrTLSolidFoam
wmake elasticNonLinTLSolidFoam
wmake elasticNonLinULSolidFoam
wmake elasticPlasticNonLinULSolidFoam
wmake elasticOrthoAcpSolidFoam
wmake elasticOrthoNonLinULSolidFoam
wmake elasticOrthoSolidFoam
wmake elasticPlasticSolidFoam
wmake elasticPlasticNonLinTLSolidFoam
wmake elasticPlasticNonLinULSolidFoam
wmake elasticSolidFoam
wmake elasticThermalSolidFoam
wmake icoFsiElasticNonLinULSolidFoam
wmake viscoElasticSolidFoam
(cd utilities; wmake all)

View 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

View file

@ -2,14 +2,15 @@ EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \
$(WM_DECOMP_INC) \
-I$(LIB_SRC)/tetFiniteElement/lnInclude \
-I$(LIB_SRC)/dynamicMesh/meshMotion/tetMotionSolver/lnInclude \
-I$(LIB_SRC)/dynamicMesh/meshMotion/tetDecompositionMotionSolver/lnInclude \
EXE_LIBS = \
-lfiniteVolume \
-ldynamicFvMesh \
-ldynamicMesh \
-ltetFiniteElement \
-ltetMotionSolver \
-llduSolvers \
-L$(MESQUITE_LIB_DIR) -lmesquite
$(WM_DECOMP_LIBS) \
-llduSolvers

View file

@ -169,7 +169,7 @@ void tractionDisplacementFvPatchVectorField::updateCoeffs()
vectorField n = patch().nf();
const fvPatchField<tensor>& gradU =
lookupPatchField<volTensorField, tensor>("grad(U)");
patch().lookupPatchField<volTensorField, tensor>("grad(U)");
gradient() =
(

View file

@ -213,7 +213,7 @@ void cohesiveZoneFvPatchVectorField::updateCoeffs()
rheology.lambda()().boundaryField()[patch().index()];
const fvPatchField<tensor>& gradU =
lookupPatchField<volTensorField, tensor>
patch().lookupPatchField<volTensorField, tensor>
(
"grad(" +UName_ + ")"
);

View file

@ -195,7 +195,7 @@ void nusseltFvPatchScalarField::updateCoeffs()
// Lookup temperature diffusivity of the patch
const fvPatchField<scalar>& DT =
this->lookupPatchField<volScalarField, scalar>(DTName_);
this->patch().lookupPatchField<volScalarField, scalar>(DTName_);
// Calculate flux
scalarField tempFlux = alpha_*(Tinternal - Tinf_);

View file

@ -68,7 +68,6 @@ tractionDisplacementFvPatchVectorField
traction_("traction", dict, p.size()),
pressure_("pressure", dict, p.size())
{
Info << "creating tractionDisplacement boundary" << endl;
fvPatchVectorField::operator=(patchInternalField());
gradient() = vector::zero;
Info << "rf: " << rheologyName_ << endl;
@ -182,6 +181,7 @@ void tractionDisplacementFvPatchVectorField::updateCoeffs()
fixedGradientFvPatchVectorField::updateCoeffs();
}
// Write
void tractionDisplacementFvPatchVectorField::write(Ostream& os) const
{

View file

@ -180,7 +180,7 @@ void tractionDisplacementThermoFvPatchVectorField::updateCoeffs()
vectorField n = patch().nf();
const fvPatchField<tensor>& gradU =
lookupPatchField<volTensorField, tensor>("grad(" +UName_ + ")");
patch().lookupPatchField<volTensorField, tensor>("grad(" +UName_ + ")");
// Thermal component
@ -189,7 +189,7 @@ void tractionDisplacementThermoFvPatchVectorField::updateCoeffs()
this->db().objectRegistry::lookupObject<thermalModel>(thermoName_);
const fvPatchField<scalar>& T =
lookupPatchField<volScalarField, scalar>(TName_);
patch().lookupPatchField<volScalarField, scalar>(TName_);
const scalarField rhoThreeKalpha =
rheology.rho()().boundaryField()[patch().index()]*

Some files were not shown because too many files have changed in this diff Show more