Author: eudoxos
Date: 2009-05-24 12:53:29 +0200 (Sun, 24 May 2009)
New Revision: 1777
Modified:
trunk/extra/Brefcom.cpp
trunk/extra/Brefcom.hpp
trunk/extra/BrefcomTestGen.cpp
trunk/extra/usct/UniaxialStrainControlledTest.cpp
trunk/gui/py/PythonUI_rc.py
trunk/gui/py/_eudoxos.cpp
Log:
Getting rid of the Brefcom name, classes renamed as follows (moving files
around will follow)
BrefcomMakeContact Ip2_CpmMat_CpmMat_CpmPhys
BrefcomContact CpmPhys
BrefcomPhysParams CpmMat
ef2_Spheres_Brefcom_BrefcomLaw Law2_Dem3DofGeom_CpmPhys_Cpm
GLDrawBrefcomContact GLDrawCpmPhys
BrefcomDamageColorizer CpmPhysDamageColorizer
BrefcomGlobalCharacteristics CpmGlobalCharacteristics
Modified: trunk/extra/Brefcom.cpp
===================================================================
--- trunk/extra/Brefcom.cpp 2009-05-24 10:34:22 UTC (rev 1776)
+++ trunk/extra/Brefcom.cpp 2009-05-24 10:53:29 UTC (rev 1777)
@@ -7,20 +7,18 @@
#include<yade/lib-opengl/GLUtils.hpp>
#include<yade/pkg-dem/DemXDofGeom.hpp>
+YADE_PLUGIN("Ip2_CpmMat_CpmMat_CpmPhys","CpmPhys","GLDrawCpmPhys","CpmPhysDamageColorizer",
"CpmMat", "CpmGlobalCharacteristics", "Law2_Dem3DofGeom_CpmPhys_Cpm");
+CREATE_LOGGER(CpmGlobalCharacteristics);
-YADE_PLUGIN("BrefcomMakeContact","BrefcomContact"/*,"BrefcomLaw"*/,"GLDrawBrefcomContact","BrefcomDamageColorizer",
"BrefcomPhysParams", "BrefcomGlobalCharacteristics",
"ef2_Spheres_Brefcom_BrefcomLaw" /* ,"BrefcomStiffnessComputer"*/ );
-
-CREATE_LOGGER(BrefcomGlobalCharacteristics);
-
-void BrefcomGlobalCharacteristics::compute(MetaBody* rb, bool useMaxForce){
+void CpmGlobalCharacteristics::compute(MetaBody* rb, bool useMaxForce){
rb->bex.sync();
// 1. reset volumetric strain (cummulative in the next loop)
// 2. get maximum force on a body and sum of all forces (for averaging)
Real sumF=0,maxF=0,currF;
FOREACH(const shared_ptr<Body>& b, *rb->bodies){
- BrefcomPhysParams*
bpp(YADE_CAST<BrefcomPhysParams*>(b->physicalParameters.get()));
+ CpmMat* bpp(YADE_CAST<CpmMat*>(b->physicalParameters.get()));
bpp->epsVolumetric=0;
bpp->numContacts=0;
currF=rb->bex.getForce(b->id).Length(); maxF=max(currF,maxF);
sumF+=currF;
@@ -32,10 +30,10 @@
Real maxContactF=0;
FOREACH(const shared_ptr<Interaction>& I, *rb->interactions){
if(!I->isReal) continue;
- shared_ptr<BrefcomContact>
BC=YADE_PTR_CAST<BrefcomContact>(I->interactionPhysics); assert(BC);
+ shared_ptr<CpmPhys>
BC=YADE_PTR_CAST<CpmPhys>(I->interactionPhysics); assert(BC);
maxContactF=max(maxContactF,max(BC->Fn,BC->Fs.Length()));
- BrefcomPhysParams*
bpp1(YADE_CAST<BrefcomPhysParams*>(Body::byId(I->getId1())->physicalParameters.get()));
- BrefcomPhysParams*
bpp2(YADE_CAST<BrefcomPhysParams*>(Body::byId(I->getId2())->physicalParameters.get()));
+ CpmMat*
bpp1(YADE_CAST<CpmMat*>(Body::byId(I->getId1())->physicalParameters.get()));
+ CpmMat*
bpp2(YADE_CAST<CpmMat*>(Body::byId(I->getId2())->physicalParameters.get()));
bpp1->epsVolumetric+=BC->epsN; bpp1->numContacts+=1;
bpp2->epsVolumetric+=BC->epsN; bpp2->numContacts+=1;
}
@@ -43,9 +41,9 @@
FOREACH(const shared_ptr<Interaction>& I, *rb->interactions){
if(!I->isReal) continue;
- shared_ptr<BrefcomContact>
BC=YADE_PTR_CAST<BrefcomContact>(I->interactionPhysics); assert(BC);
- BrefcomPhysParams*
bpp1(YADE_CAST<BrefcomPhysParams*>(Body::byId(I->getId1())->physicalParameters.get()));
- BrefcomPhysParams*
bpp2(YADE_CAST<BrefcomPhysParams*>(Body::byId(I->getId2())->physicalParameters.get()));
+ shared_ptr<CpmPhys>
BC=YADE_PTR_CAST<CpmPhys>(I->interactionPhysics); assert(BC);
+ CpmMat*
bpp1(YADE_CAST<CpmMat*>(Body::byId(I->getId1())->physicalParameters.get()));
+ CpmMat*
bpp2(YADE_CAST<CpmMat*>(Body::byId(I->getId2())->physicalParameters.get()));
Real
epsVolAvg=.5*((3./bpp1->numContacts)*bpp1->epsVolumetric+(3./bpp2->numContacts)*bpp2->epsVolumetric);
BC->epsTrans=(epsVolAvg-BC->epsN)/2.;
//TRVAR5(I->getId1(),I->getId2(),BC->epsTrans,(3./bpp1->numContacts)*bpp1->epsVolumetric,(3./bpp2->numContacts)*bpp2->epsVolumetric);
@@ -53,7 +51,7 @@
}
#if 0
FOREACH(const shared_ptr<Body>& b, *rb->bodies){
- BrefcomPhysParams*
bpp(YADE_PTR_CAST<BrefcomPhysParams>(b->physicalParameters.get()));
+ CpmMat*
bpp(YADE_PTR_CAST<CpmMat>(b->physicalParameters.get()));
bpp->epsVolumeric*=3/bpp->numContacts;
}
#endif
@@ -62,11 +60,11 @@
}
-/********************** BrefcomMakeContact ****************************/
-CREATE_LOGGER(BrefcomMakeContact);
+/********************** Ip2_CpmMat_CpmMat_CpmPhys ****************************/
+CREATE_LOGGER(Ip2_CpmMat_CpmMat_CpmPhys);
-void BrefcomMakeContact::go(const shared_ptr<PhysicalParameters>& pp1, const
shared_ptr<PhysicalParameters>& pp2, const shared_ptr<Interaction>&
interaction){
+void Ip2_CpmMat_CpmMat_CpmPhys::go(const shared_ptr<PhysicalParameters>& pp1,
const shared_ptr<PhysicalParameters>& pp2, const shared_ptr<Interaction>&
interaction){
Dem3DofGeom*
contGeom=YADE_CAST<Dem3DofGeom*>(interaction->interactionGeometry.get());
assert(contGeom); // for now, don't handle anything other than
SpheresContactGeometry and Dem3DofGeom
@@ -87,7 +85,7 @@
if(!neverDamage) { assert(!isnan(sigmaT)); }
- shared_ptr<BrefcomContact> contPhys(new BrefcomContact());
+ shared_ptr<CpmPhys> contPhys(new CpmPhys());
contPhys->E=E12;
contPhys->G=E12*G_over_E;
@@ -117,17 +115,17 @@
-/********************** BrefcomContact ****************************/
-CREATE_LOGGER(BrefcomContact);
+/********************** CpmPhys ****************************/
+CREATE_LOGGER(CpmPhys);
// !! at least one virtual function in the .cpp file
-BrefcomContact::~BrefcomContact(){};
+CpmPhys::~CpmPhys(){};
-CREATE_LOGGER(ef2_Spheres_Brefcom_BrefcomLaw);
+CREATE_LOGGER(Law2_Dem3DofGeom_CpmPhys_Cpm);
-long BrefcomContact::cummBetaIter=0, BrefcomContact::cummBetaCount=0;
+long CpmPhys::cummBetaIter=0, CpmPhys::cummBetaCount=0;
-Real BrefcomContact::solveBeta(const Real c, const Real N){
+Real CpmPhys::solveBeta(const Real c, const Real N){
#ifdef YADE_DEBUG
cummBetaCount++;
#endif
@@ -145,10 +143,10 @@
ret-=f/df;
}
LOG_FATAL("No convergence after "<<maxIter<<" iters; c="<<c<<",
N="<<N<<", ret="<<ret<<", f="<<f);
- throw runtime_error("ef2_Spheres_Brefcom_BrefcomLaw::solveBeta failed
to converge.");
+ throw runtime_error("Law2_Dem3DofGeom_CpmPhys_Cpm::solveBeta failed to
converge.");
}
-Real BrefcomContact::computeDmgOverstress(Real dt){
+Real CpmPhys::computeDmgOverstress(Real dt){
if(dmgStrain>=epsN*omega){ // unloading, no viscous stress
dmgStrain=epsN*omega;
LOG_TRACE("Elastic/unloading, no viscous overstress");
@@ -163,7 +161,7 @@
return (epsN*omega-dmgStrain)*E;
}
-Real BrefcomContact::computeViscoplScalingFactor(Real sigmaTNorm, Real
sigmaTYield,Real dt){
+Real CpmPhys::computeViscoplScalingFactor(Real sigmaTNorm, Real
sigmaTYield,Real dt){
if(sigmaTNorm<sigmaTYield) return 1.;
Real
c=undamagedCohesion*pow(plTau/(G*dt),plRateExp)*pow(sigmaTNorm-sigmaTYield,plRateExp-1.);
Real beta=solveBeta(c,plRateExp);
@@ -171,16 +169,16 @@
return 1.-exp(beta)*(1-sigmaTYield/sigmaTNorm);
}
-Real ef2_Spheres_Brefcom_BrefcomLaw::minStrain_moveBody2=1.; /* deactivated if
> 0 */
-Real ef2_Spheres_Brefcom_BrefcomLaw::yieldLogSpeed=1.;
-Real ef2_Spheres_Brefcom_BrefcomLaw::yieldEllipseShift=0.;
+Real Law2_Dem3DofGeom_CpmPhys_Cpm::minStrain_moveBody2=1.; /* deactivated if >
0 */
+Real Law2_Dem3DofGeom_CpmPhys_Cpm::yieldLogSpeed=1.;
+Real Law2_Dem3DofGeom_CpmPhys_Cpm::yieldEllipseShift=0.;
-void ef2_Spheres_Brefcom_BrefcomLaw::go(shared_ptr<InteractionGeometry>&
_geom, shared_ptr<InteractionPhysics>& _phys, Interaction* I, MetaBody*
rootBody){
+void Law2_Dem3DofGeom_CpmPhys_Cpm::go(shared_ptr<InteractionGeometry>& _geom,
shared_ptr<InteractionPhysics>& _phys, Interaction* I, MetaBody* rootBody){
//timingDeltas->start();
Dem3DofGeom* contGeom=static_cast<Dem3DofGeom*>(_geom.get());
- BrefcomContact* BC=static_cast<BrefcomContact*>(_phys.get());
+ CpmPhys* BC=static_cast<CpmPhys*>(_phys.get());
- /* kept fully damaged contacts; note that normally the contact is
deleted _after_ the BREFCOM_MATERIAL_MODEL,
+ /* kept fully damaged contacts; note that normally the contact is
deleted _after_ the CPM_MATERIAL_MODEL,
* i.e. if it is 1.0 here, omegaThreshold is >= 1.0 for sure.
* &&'ing that just to make sure anyway ...
*/
@@ -190,8 +188,8 @@
Real& epsN(BC->epsN); Vector3r& epsT(BC->epsT); Real&
kappaD(BC->kappaD); Real& epsPlSum(BC->epsPlSum); const Real& E(BC->E); const
Real& undamagedCohesion(BC->undamagedCohesion); const Real&
tanFrictionAngle(BC->tanFrictionAngle); const Real& G(BC->G); const Real&
crossSection(BC->crossSection); const Real& omegaThreshold(BC->omegaThreshold);
const Real& epsCrackOnset(BC->epsCrackOnset); Real&
relResidualStrength(BC->relResidualStrength); const Real&
dt=Omega::instance().getTimeStep(); const Real& epsFracture(BC->epsFracture);
const bool& neverDamage(BC->neverDamage); const Real& dmgTau(BC->dmgTau); const
Real& plTau(BC->plTau); const bool& isCohesive(BC->isCohesive);
/* const Real& transStrainCoeff(BC->transStrainCoeff); const Real&
epsTrans(BC->epsTrans); const Real& xiShear(BC->xiShear); */
Real& omega(BC->omega); Real& sigmaN(BC->sigmaN); Vector3r&
sigmaT(BC->sigmaT); Real& Fn(BC->Fn); Vector3r& Fs(BC->Fs); // for python access
- const Real&
yieldLogSpeed(ef2_Spheres_Brefcom_BrefcomLaw::yieldLogSpeed); const int&
yieldSurfType(ef2_Spheres_Brefcom_BrefcomLaw::yieldSurfType);
- const Real&
yieldEllipseShift(ef2_Spheres_Brefcom_BrefcomLaw::yieldEllipseShift);
+ const Real& yieldLogSpeed(Law2_Dem3DofGeom_CpmPhys_Cpm::yieldLogSpeed);
const int& yieldSurfType(Law2_Dem3DofGeom_CpmPhys_Cpm::yieldSurfType);
+ const Real&
yieldEllipseShift(Law2_Dem3DofGeom_CpmPhys_Cpm::yieldEllipseShift);
#define YADE_VERIFY(condition) if(!(condition)){LOG_FATAL("Verification
`"<<#condition<<"' failed!"); throw;}
@@ -201,11 +199,13 @@
//timingDeltas->checkpoint("setup");
// if(contGeom->refR1<0) contGeom->refLength=contGeom->refR2; // make
facet-sphere contact always at equilibrium when touching exactly (and not the
initial distance)
epsN=contGeom->strainN(); epsT=contGeom->strainT();
- if(isnan(epsN)){
- LOG_FATAL("refLength="<<contGeom->refLength<<";
pos1="<<contGeom->se31.position<<"; pos2="<<contGeom->se32.position<<";
displacementN="<<contGeom->displacementN());
- throw runtime_error("!! epsN==NaN !!");
- }
- NNAN(epsN); NNANV(epsT);
+ #ifdef YADE_DEBUG
+ if(isnan(epsN)){
+ LOG_FATAL("refLength="<<contGeom->refLength<<";
pos1="<<contGeom->se31.position<<"; pos2="<<contGeom->se32.position<<";
displacementN="<<contGeom->displacementN());
+ throw runtime_error("!! epsN==NaN !!");
+ }
+ NNAN(epsN); NNANV(epsT);
+ #endif
// already in SpheresContactGeometry:
// contGeom->relocateContactPoints(); // allow very large mutual
rotations
if(logStrain && epsN<0){
@@ -217,17 +217,17 @@
epsN+=BC->isoPrestress/E;
//TRVAR1(epsN);
- #ifdef BREFCOM_MATERIAL_MODEL
- BREFCOM_MATERIAL_MODEL
+ #ifdef CPM_MATERIAL_MODEL
+ CPM_MATERIAL_MODEL
#else
sigmaN=E*epsN;
sigmaT=G*epsT;
#endif
sigmaN-=BC->isoPrestress;
- if(contGeom->refR1<0 &&
ef2_Spheres_Brefcom_BrefcomLaw::minStrain_moveBody2<=0 &&
epsN<ef2_Spheres_Brefcom_BrefcomLaw::minStrain_moveBody2){
+ if(contGeom->refR1<0 &&
Law2_Dem3DofGeom_CpmPhys_Cpm::minStrain_moveBody2<=0 &&
epsN<Law2_Dem3DofGeom_CpmPhys_Cpm::minStrain_moveBody2){
/* move Body2 (the sphere) so that minStrain is satisfied */
-
rootBody->bex.addMove(I->getId2(),contGeom->normal*(ef2_Spheres_Brefcom_BrefcomLaw::minStrain_moveBody2-epsN)*contGeom->refLength);
- LOG_TRACE("Moving by
"<<contGeom->normal*(ef2_Spheres_Brefcom_BrefcomLaw::minStrain_moveBody2-epsN)*contGeom->refLength);
+
rootBody->bex.addMove(I->getId2(),contGeom->normal*(Law2_Dem3DofGeom_CpmPhys_Cpm::minStrain_moveBody2-epsN)*contGeom->refLength);
+ LOG_TRACE("Moving by
"<<contGeom->normal*(Law2_Dem3DofGeom_CpmPhys_Cpm::minStrain_moveBody2-epsN)*contGeom->refLength);
}
NNAN(kappaD); NNAN(epsCrackOnset); NNAN(epsFracture); NNAN(omega);
NNAN(sigmaN); NNANV(sigmaT); NNAN(crossSection);
@@ -240,7 +240,7 @@
rootBody->interactions->requestErase(I->getId1(),I->getId2());
if(isCohesive){
const shared_ptr<Body>&
body1=Body::byId(I->getId1(),rootBody), body2=Body::byId(I->getId2(),rootBody);
assert(body1); assert(body2);
- const shared_ptr<BrefcomPhysParams>&
rbp1=YADE_PTR_CAST<BrefcomPhysParams>(body1->physicalParameters),
rbp2=YADE_PTR_CAST<BrefcomPhysParams>(body2->physicalParameters);
+ const shared_ptr<CpmMat>&
rbp1=YADE_PTR_CAST<CpmMat>(body1->physicalParameters),
rbp2=YADE_PTR_CAST<CpmMat>(body2->physicalParameters);
if(BC->isCohesive){rbp1->numBrokenCohesive+=1;
rbp2->numBrokenCohesive+=1; rbp1->epsPlBroken+=epsPlSum;
rbp2->epsPlBroken+=epsPlSum;}
LOG_DEBUG("Contact
#"<<I->getId1()<<"=#"<<I->getId2()<<" is damaged over thershold
("<<omega<<">"<<omegaThreshold<<") and will be deleted.");
}
@@ -255,24 +255,24 @@
}
-/********************** GLDrawBrefcomContact ****************************/
+/********************** GLDrawCpmPhys ****************************/
#include<yade/lib-opengl/OpenGLWrapper.hpp>
-CREATE_LOGGER(GLDrawBrefcomContact);
+CREATE_LOGGER(GLDrawCpmPhys);
-bool GLDrawBrefcomContact::contactLine=true;
-bool GLDrawBrefcomContact::dmgLabel=true;
-bool GLDrawBrefcomContact::dmgPlane=false;
-bool GLDrawBrefcomContact::epsNLabel=true;
-bool GLDrawBrefcomContact::epsT=false;
-bool GLDrawBrefcomContact::epsTAxes=false;
-bool GLDrawBrefcomContact::normal=false;
-bool GLDrawBrefcomContact::colorStrain=false;
+bool GLDrawCpmPhys::contactLine=true;
+bool GLDrawCpmPhys::dmgLabel=true;
+bool GLDrawCpmPhys::dmgPlane=false;
+bool GLDrawCpmPhys::epsNLabel=true;
+bool GLDrawCpmPhys::epsT=false;
+bool GLDrawCpmPhys::epsTAxes=false;
+bool GLDrawCpmPhys::normal=false;
+bool GLDrawCpmPhys::colorStrain=false;
-void GLDrawBrefcomContact::go(const shared_ptr<InteractionPhysics>& ip, const
shared_ptr<Interaction>& i, const shared_ptr<Body>& b1, const shared_ptr<Body>&
b2, bool wireFrame){
- const shared_ptr<BrefcomContact>&
BC=static_pointer_cast<BrefcomContact>(ip);
+void GLDrawCpmPhys::go(const shared_ptr<InteractionPhysics>& ip, const
shared_ptr<Interaction>& i, const shared_ptr<Body>& b1, const shared_ptr<Body>&
b2, bool wireFrame){
+ const shared_ptr<CpmPhys>& BC=static_pointer_cast<CpmPhys>(ip);
const shared_ptr<Dem3DofGeom>&
geom=YADE_PTR_CAST<Dem3DofGeom>(i->interactionGeometry);
//Vector3r lineColor(BC->omega,1-BC->omega,0.0); /* damaged links red,
undamaged green */
@@ -328,14 +328,14 @@
struct BodyStats{ short nCohLinks; Real dmgSum; Real epsPlSum; BodyStats():
nCohLinks(0), dmgSum(0), epsPlSum(0.){} };
-/********************** BrefcomDamageColorizer ****************************/
-void BrefcomDamageColorizer::action(MetaBody* rootBody){
+/********************** CpmPhysDamageColorizer ****************************/
+void CpmPhysDamageColorizer::action(MetaBody* rootBody){
//vector<pair<short,Real> > bodyDamage; /* number of cohesive
interactions per body; cummulative damage of interactions */
//vector<pair<short,
vector<BodyStats> bodyStats; bodyStats.resize(rootBody->bodies->size());
assert(bodyStats[0].nCohLinks==0); // should be initialized by dfault
ctor
FOREACH(const shared_ptr<Interaction>& I, *rootBody->interactions){
- shared_ptr<BrefcomContact>
BC=dynamic_pointer_cast<BrefcomContact>(I->interactionPhysics);
+ shared_ptr<CpmPhys>
BC=dynamic_pointer_cast<CpmPhys>(I->interactionPhysics);
if(!BC || !BC->isCohesive) continue;
const body_id_t id1=I->getId1(), id2=I->getId2();
bodyStats[id1].nCohLinks++;
bodyStats[id1].dmgSum+=(1-BC->relResidualStrength);
bodyStats[id1].epsPlSum+=BC->epsPlSum;
@@ -347,7 +347,7 @@
FOREACH(shared_ptr<Body> B, *rootBody->bodies){
body_id_t id=B->getId();
// add damaged contacts that have already been deleted
- BrefcomPhysParams*
bpp=dynamic_cast<BrefcomPhysParams*>(B->physicalParameters.get());
+ CpmMat* bpp=dynamic_cast<CpmMat*>(B->physicalParameters.get());
if(!bpp) continue;
short
cohLinksWhenever=bodyStats[id].nCohLinks+bpp->numBrokenCohesive;
if(cohLinksWhenever>0){
Modified: trunk/extra/Brefcom.hpp
===================================================================
--- trunk/extra/Brefcom.hpp 2009-05-24 10:34:22 UTC (rev 1776)
+++ trunk/extra/Brefcom.hpp 2009-05-24 10:53:29 UTC (rev 1777)
@@ -21,29 +21,29 @@
*
* May be extended in the future to compute global stiffness etc as well.
*/
-class BrefcomGlobalCharacteristics: public PeriodicEngine{
+class CpmGlobalCharacteristics: public PeriodicEngine{
public:
bool useMaxForce; // use maximum unbalanced force instead of
mean unbalanced force
Real unbalancedForce;
void compute(MetaBody* rb, bool useMax=false);
virtual void action(MetaBody* rb){compute(rb,useMaxForce);}
- BrefcomGlobalCharacteristics(){};
+ CpmGlobalCharacteristics(){};
REGISTER_ATTRIBUTES(PeriodicEngine,
(unbalancedForce)
(useMaxForce)
);
DECLARE_LOGGER;
- REGISTER_CLASS_AND_BASE(BrefcomGlobalCharacteristics,PeriodicEngine);
+ REGISTER_CLASS_AND_BASE(CpmGlobalCharacteristics,PeriodicEngine);
};
-REGISTER_SERIALIZABLE(BrefcomGlobalCharacteristics);
+REGISTER_SERIALIZABLE(CpmGlobalCharacteristics);
-/*! @brief representation of a single interaction of the brefcom type: storage
for relevant parameters.
+/*! @brief representation of a single interaction of the CPM type: storage for
relevant parameters.
*
- * Evolution of the contact is governed by BrefcomLaw:
- * that includes damage effects and chages of parameters inside BrefcomContact.
+ * Evolution of the contact is governed by Law2_Dem3DofGeom_CpmPhys_Cpm:
+ * that includes damage effects and chages of parameters inside CpmPhys.
*
*/
-class BrefcomContact: public NormalShearInteraction {
+class CpmPhys: public NormalShearInteraction {
private:
public:
/*! Fundamental parameters (constants) */
@@ -95,7 +95,7 @@
//! debugging, to see convergence rate
static long cummBetaIter, cummBetaCount;
- /*! auxiliary variable for visualization, recalculated in
BrefcomLaw at every iteration */
+ /*! auxiliary variable for visualization, recalculated in
Law2_Dem3DofGeom_CpmPhys_Cpm at every iteration */
// FIXME: Fn and Fs are stored as Vector3r normalForce,
shearForce in NormalShearInteraction
Real omega, Fn, sigmaN, epsN, relResidualStrength; Vector3r
epsT, sigmaT, Fs;
@@ -106,8 +106,8 @@
- BrefcomContact(): NormalShearInteraction(),E(0), G(0),
tanFrictionAngle(0), undamagedCohesion(0), crossSection(0), xiShear(0),
dmgTau(-1), dmgRateExp(0), dmgStrain(0), plTau(-1), plRateExp(0),
isoPrestress(0.), kappaD(0.), epsTrans(0.), epsPlSum(0.) { createIndex();
epsT=Vector3r::ZERO; isCohesive=false; neverDamage=false; omega=0; Fn=0;
Fs=Vector3r::ZERO; epsPlSum=0; dmgOverstress=0; }
- virtual ~BrefcomContact();
+ CpmPhys(): NormalShearInteraction(),E(0), G(0),
tanFrictionAngle(0), undamagedCohesion(0), crossSection(0), xiShear(0),
dmgTau(-1), dmgRateExp(0), dmgStrain(0), plTau(-1), plRateExp(0),
isoPrestress(0.), kappaD(0.), epsTrans(0.), epsPlSum(0.) { createIndex();
epsT=Vector3r::ZERO; isCohesive=false; neverDamage=false; omega=0; Fn=0;
Fs=Vector3r::ZERO; epsPlSum=0; dmgOverstress=0; }
+ virtual ~CpmPhys();
REGISTER_ATTRIBUTES(NormalShearInteraction,
(E)
@@ -147,13 +147,13 @@
(sigmaT)
(relResidualStrength)
);
- REGISTER_CLASS_AND_BASE(BrefcomContact,NormalShearInteraction);
+ REGISTER_CLASS_AND_BASE(CpmPhys,NormalShearInteraction);
DECLARE_LOGGER;
};
-REGISTER_SERIALIZABLE(BrefcomContact);
+REGISTER_SERIALIZABLE(CpmPhys);
/* This class holds information associated with each body */
-class BrefcomPhysParams: public BodyMacroParameters {
+class CpmMat: public BodyMacroParameters {
public:
//! volumetric strain around this body
Real epsVolumetric;
@@ -167,13 +167,13 @@
Real epsPlBroken;
//! sum of plastic strains normalized by number of contacts
Real normEpsPl;
- BrefcomPhysParams(): epsVolumetric(0.), numBrokenCohesive(0),
numContacts(0), normDmg(0.), epsPlBroken(0.), normEpsPl(0.) {createIndex();};
+ CpmMat(): epsVolumetric(0.), numBrokenCohesive(0),
numContacts(0), normDmg(0.), epsPlBroken(0.), normEpsPl(0.) {createIndex();};
REGISTER_ATTRIBUTES(BodyMacroParameters, (epsVolumetric)
(numBrokenCohesive) (numContacts) (normDmg) (epsPlBroken) (normEpsPl));
- REGISTER_CLASS_AND_BASE(BrefcomPhysParams,BodyMacroParameters);
+ REGISTER_CLASS_AND_BASE(CpmMat,BodyMacroParameters);
};
-REGISTER_SERIALIZABLE(BrefcomPhysParams);
+REGISTER_SERIALIZABLE(CpmMat);
-class ef2_Spheres_Brefcom_BrefcomLaw: public ConstitutiveLaw{
+class Law2_Dem3DofGeom_CpmPhys_Cpm: public ConstitutiveLaw{
public:
/*! Damage evolution law */
static Real funcG(const Real& kappaD, const Real& epsCrackOnset, const
Real& epsFracture, const bool& neverDamage) {
@@ -188,43 +188,19 @@
static Real yieldEllipseShift;
//! HACK: limit strain on some contacts by moving body #2 in
the contact; only if refR1<0 (facet); deactivated if > 0
static Real minStrain_moveBody2;
- ef2_Spheres_Brefcom_BrefcomLaw(): logStrain(false),
yieldSurfType(0) { /*timingDeltas=shared_ptr<TimingDeltas>(new TimingDeltas);*/
}
+ Law2_Dem3DofGeom_CpmPhys_Cpm(): logStrain(false),
yieldSurfType(0) { /*timingDeltas=shared_ptr<TimingDeltas>(new TimingDeltas);*/
}
void go(shared_ptr<InteractionGeometry>& _geom,
shared_ptr<InteractionPhysics>& _phys, Interaction* I, MetaBody* rootBody);
- FUNCTOR2D(Dem3DofGeom,BrefcomContact);
- REGISTER_CLASS_AND_BASE(ef2_Spheres_Brefcom_BrefcomLaw,ConstitutiveLaw);
+ FUNCTOR2D(Dem3DofGeom,CpmPhys);
+ REGISTER_CLASS_AND_BASE(Law2_Dem3DofGeom_CpmPhys_Cpm,ConstitutiveLaw);
REGISTER_ATTRIBUTES(ConstitutiveLaw,(logStrain)(yieldSurfType)(yieldLogSpeed)(yieldEllipseShift)(minStrain_moveBody2));
DECLARE_LOGGER;
};
-REGISTER_SERIALIZABLE(ef2_Spheres_Brefcom_BrefcomLaw);
+REGISTER_SERIALIZABLE(Law2_Dem3DofGeom_CpmPhys_Cpm);
-// obsolete
-#if 0
-class BrefcomLaw: public InteractionSolver{
- private:
- shared_ptr<ef2_Spheres_Brefcom_BrefcomLaw> functor;
- shared_ptr<BrefcomContact> BC;
- shared_ptr<SpheresContactGeometry> contGeom;
- MetaBody* rootBody;
- //! aplly calculated force on both particles (applied in the
inverse sense on B)
- void applyForce(const Vector3r&, const body_id_t&, const
body_id_t&);
- /*! Damage evolution law */
- Real funcG(const Real& kappaD, const Real& epsCrackOnset, const
Real& epsFracture, const bool& neverDamage) const{ return
ef2_Spheres_Brefcom_BrefcomLaw::funcG(kappaD,epsCrackOnset,epsFracture,neverDamage);
}
-
- public:
- bool logStrain;
- BrefcomLaw(): logStrain(false) { };
- void action(MetaBody*);
- protected:
- REGISTER_CLASS_AND_BASE(BrefcomLaw,InteractionSolver);
- REGISTER_ATTRIBUTES(InteractionSolver,(logStrain));
- DECLARE_LOGGER;
-};
-REGISTER_SERIALIZABLE(BrefcomLaw);
-#endif
-/*! @brief Convert macroscopic properties to BrefcomContact with corresponding
parameters.
+/*! @brief Convert macroscopic properties to CpmPhys with corresponding
parameters.
*
* */
-class BrefcomMakeContact: public InteractionPhysicsEngineUnit{
+class Ip2_CpmMat_CpmMat_CpmPhys: public InteractionPhysicsEngineUnit{
private:
public:
/* nonelastic material parameters */
@@ -237,10 +213,10 @@
Real sigmaT, epsCrackOnset, relDuctility, G_over_E, tau,
expDmgRate, omegaThreshold, dmgTau, dmgRateExp, plTau, plRateExp, isoPrestress;
//! Should new contacts be cohesive? They will before this
iter#, they will not be afterwards. If 0, they will never be. If negative, they
will always be created as cohesive.
long cohesiveThresholdIter;
- //! Create contacts that don't receive any damage
(BrefcomContact::neverDamage=true); defaults to false
+ //! Create contacts that don't receive any damage
(CpmPhys::neverDamage=true); defaults to false
bool neverDamage;
- BrefcomMakeContact(){
+ Ip2_CpmMat_CpmMat_CpmPhys(){
// init to signaling_NaN to force crash if not
initialized (better than unknowingly using garbage values)
sigmaT=epsCrackOnset=relDuctility=G_over_E=std::numeric_limits<Real>::signaling_NaN();
neverDamage=false;
@@ -266,31 +242,31 @@
(isoPrestress)
);
- FUNCTOR2D(BrefcomPhysParams,BrefcomPhysParams);
-
REGISTER_CLASS_AND_BASE(BrefcomMakeContact,InteractionPhysicsEngineUnit);
+ FUNCTOR2D(CpmMat,CpmMat);
+
REGISTER_CLASS_AND_BASE(Ip2_CpmMat_CpmMat_CpmPhys,InteractionPhysicsEngineUnit);
DECLARE_LOGGER;
};
-REGISTER_SERIALIZABLE(BrefcomMakeContact);
+REGISTER_SERIALIZABLE(Ip2_CpmMat_CpmMat_CpmPhys);
-class GLDrawBrefcomContact: public GLDrawInteractionPhysicsFunctor {
+class GLDrawCpmPhys: public GLDrawInteractionPhysicsFunctor {
public: virtual void go(const shared_ptr<InteractionPhysics>&,const
shared_ptr<Interaction>&,const shared_ptr<Body>&,const shared_ptr<Body>&,bool
wireFrame);
- virtual ~GLDrawBrefcomContact() {};
+ virtual ~GLDrawCpmPhys() {};
REGISTER_ATTRIBUTES(/*no
base*/,(contactLine)(dmgLabel)(dmgPlane)(epsT)(epsTAxes)(normal)(colorStrain)(epsNLabel));
- RENDERS(BrefcomContact);
-
REGISTER_CLASS_AND_BASE(GLDrawBrefcomContact,GLDrawInteractionPhysicsFunctor);
+ RENDERS(CpmPhys);
+ REGISTER_CLASS_AND_BASE(GLDrawCpmPhys,GLDrawInteractionPhysicsFunctor);
DECLARE_LOGGER;
static bool
contactLine,dmgLabel,dmgPlane,epsT,epsTAxes,normal,colorStrain,epsNLabel;
};
-REGISTER_SERIALIZABLE(GLDrawBrefcomContact);
+REGISTER_SERIALIZABLE(GLDrawCpmPhys);
-class BrefcomDamageColorizer: public PeriodicEngine {
+class CpmPhysDamageColorizer: public PeriodicEngine {
public:
//! maximum damage over all contacts
Real maxOmega;
- BrefcomDamageColorizer(){maxOmega=0; /* run at the very
beginning */ initRun=true;}
+ CpmPhysDamageColorizer(){maxOmega=0; /* run at the very
beginning */ initRun=true;}
virtual void action(MetaBody*);
REGISTER_ATTRIBUTES(PeriodicEngine,(maxOmega));
- REGISTER_CLASS_AND_BASE(BrefcomDamageColorizer,PeriodicEngine);
+ REGISTER_CLASS_AND_BASE(CpmPhysDamageColorizer,PeriodicEngine);
};
-REGISTER_SERIALIZABLE(BrefcomDamageColorizer);
+REGISTER_SERIALIZABLE(CpmPhysDamageColorizer);
Modified: trunk/extra/BrefcomTestGen.cpp
===================================================================
--- trunk/extra/BrefcomTestGen.cpp 2009-05-24 10:34:22 UTC (rev 1776)
+++ trunk/extra/BrefcomTestGen.cpp 2009-05-24 10:53:29 UTC (rev 1777)
@@ -56,14 +56,14 @@
rootBody->engines.push_back(igeomDispatcher);
shared_ptr<InteractionPhysicsMetaEngine> iphysDispatcher(new
InteractionPhysicsMetaEngine);
- shared_ptr<BrefcomMakeContact> bmc(new BrefcomMakeContact);
+ shared_ptr<Ip2_CpmMat_CpmMat_CpmPhys> bmc(new
Ip2_CpmMat_CpmMat_CpmPhys);
bmc->cohesiveThresholdIter=-1; bmc->G_over_E=1;
bmc->sigmaT=3e9; bmc->neverDamage=true; bmc->epsCrackOnset=1e-4;
bmc->relDuctility=5;
//bmc->calibratedEpsFracture=.5; /* arbitrary, but large enough
*/
iphysDispatcher->add(bmc);
rootBody->engines.push_back(iphysDispatcher);
shared_ptr<ConstitutiveLawDispatcher> clDisp(new
ConstitutiveLawDispatcher);
- clDisp->add(shared_ptr<ConstitutiveLaw>(new
ef2_Spheres_Brefcom_BrefcomLaw));
+ clDisp->add(shared_ptr<ConstitutiveLaw>(new
Law2_Dem3DofGeom_CpmPhys_Cpm));
rootBody->engines.push_back(clDisp);
shared_ptr<PhysicalActionApplier> applyActionDispatcher(new
PhysicalActionApplier);
@@ -79,7 +79,7 @@
orientationIntegrator->add(new LeapFrogOrientationIntegrator);
rootBody->engines.push_back(orientationIntegrator);
- shared_ptr<BrefcomDamageColorizer> dmg(new BrefcomDamageColorizer);
+ shared_ptr<CpmPhysDamageColorizer> dmg(new CpmPhysDamageColorizer);
rootBody->engines.push_back(dmg);
#if 0
Modified: trunk/extra/usct/UniaxialStrainControlledTest.cpp
===================================================================
--- trunk/extra/usct/UniaxialStrainControlledTest.cpp 2009-05-24 10:34:22 UTC
(rev 1776)
+++ trunk/extra/usct/UniaxialStrainControlledTest.cpp 2009-05-24 10:53:29 UTC
(rev 1777)
@@ -198,9 +198,9 @@
Real r=I->second;
shared_ptr<Body> S=Shop::sphere(C,r);
- // replace BodyMacroParameters by BrefcomPhysParams
+ // replace BodyMacroParameters by CpmMat
shared_ptr<BodyMacroParameters>
bmp=YADE_PTR_CAST<BodyMacroParameters>(S->physicalParameters);
- shared_ptr<BrefcomPhysParams> bpp(new BrefcomPhysParams);
+ shared_ptr<CpmMat> bpp(new CpmMat);
#define _CP(attr) bpp->attr=bmp->attr;
_CP(acceleration); _CP(angularVelocity); _CP(blockedDOFs);
_CP(frictionAngle); _CP(inertia); _CP(mass); _CP(poisson); _CP(refSe3);
_CP(se3); _CP(young); _CP(velocity);
#undef _CP
@@ -278,14 +278,14 @@
rootBody->engines.push_back(igeomDispatcher);
shared_ptr<InteractionPhysicsMetaEngine> iphysDispatcher(new
InteractionPhysicsMetaEngine);
- shared_ptr<BrefcomMakeContact> bmc(new BrefcomMakeContact);
+ shared_ptr<Ip2_CpmMat_CpmMat_CpmPhys> bmc(new
Ip2_CpmMat_CpmMat_CpmPhys);
bmc->cohesiveThresholdIter=cohesiveThresholdIter;
bmc->cohesiveThresholdIter=-1; bmc->G_over_E=1;bmc->sigmaT=3e9;
bmc->neverDamage=true; bmc->epsCrackOnset=1e-4; bmc->relDuctility=5;
iphysDispatcher->add(bmc);
rootBody->engines.push_back(iphysDispatcher);
shared_ptr<ConstitutiveLawDispatcher> clDisp(new
ConstitutiveLawDispatcher);
- clDisp->add(shared_ptr<ConstitutiveLaw>(new
ef2_Spheres_Brefcom_BrefcomLaw));
+ clDisp->add(shared_ptr<ConstitutiveLaw>(new
Law2_Dem3DofGeom_CpmPhys_Cpm));
rootBody->engines.push_back(clDisp);
@@ -313,7 +313,7 @@
orientationIntegrator->add(new LeapFrogOrientationIntegrator);
rootBody->engines.push_back(orientationIntegrator);
- rootBody->engines.push_back(shared_ptr<BrefcomDamageColorizer>(new
BrefcomDamageColorizer));
+ rootBody->engines.push_back(shared_ptr<CpmPhysDamageColorizer>(new
CpmPhysDamageColorizer));
}
Modified: trunk/gui/py/PythonUI_rc.py
===================================================================
--- trunk/gui/py/PythonUI_rc.py 2009-05-24 10:34:22 UTC (rev 1776)
+++ trunk/gui/py/PythonUI_rc.py 2009-05-24 10:53:29 UTC (rev 1777)
@@ -40,13 +40,22 @@
### end wrappers
#### HANDLE RENAMED CLASSES ####
-renamed={'ef2_Spheres_Brefcom_BrefcomLaw':'ef2_Dem3Dof_Cpm_Cpm'}
+renamed={
+ 'BrefcomMakeContact':'Ip2_CpmMat_CpmMat_CpmPhys',
+ 'BrefcomContact':'CpmPhys',
+ 'BrefcomPhysParams':'CpmMat',
+ 'ef2_Spheres_Brefcom_BrefcomLaw':'Law2_Dem3DofGeom_CpmPhys_Cpm',
+ 'GLDrawBrefcomContact':'GLDrawCpmPhys',
+ 'BrefcomDamageColorizer':'CpmPhysDamageColorizer',
+ 'BrefcomGlobalCharacteristics':'CpmGlobalCharacteristics'
+}
+
for oldName in renamed:
class warnWrap:
def __init__(self,_old,_new): self.old,self.new=_old,_new
- def __call__(self,*args):
+ def __call__(self,*args,**kw):
import warnings; warnings.warn("Class `%s' was renamed
to `%s', update your
code!"%(self.old,self.new),DeprecationWarning,stacklevel=2);
- return _dd[self.new](*args)
+ return _dd[self.new](*args,**kw)
_dd[oldName]=warnWrap(oldName,renamed[oldName])
Modified: trunk/gui/py/_eudoxos.cpp
===================================================================
--- trunk/gui/py/_eudoxos.cpp 2009-05-24 10:34:22 UTC (rev 1776)
+++ trunk/gui/py/_eudoxos.cpp 2009-05-24 10:53:29 UTC (rev 1777)
@@ -14,7 +14,7 @@
Real E=0;
FOREACH(const shared_ptr<Interaction>&i, *rb->transientInteractions){
if(!i->interactionPhysics) continue;
- shared_ptr<BrefcomContact>
bc=dynamic_pointer_cast<BrefcomContact>(i->interactionPhysics); if(!bc)
continue;
+ shared_ptr<CpmPhys>
bc=dynamic_pointer_cast<CpmPhys>(i->interactionPhysics); if(!bc) continue;
const shared_ptr<Body>& b1=Body::byId(i->getId1(),rb),
b2=Body::byId(i->getId2(),rb);
bool
isIn1=isInBB(b1->physicalParameters->se3.position,bbMin,bbMax),
isIn2=isInBB(b2->physicalParameters->se3.position,bbMin,bbMax);
if(!isIn1 && !isIn2) continue;
@@ -32,9 +32,9 @@
}
#endif
-/* yield surface for the brefcom concrete model; this is used only to make
yield surface plot from python, for debugging */
+/* yield surface for the CPM model; this is used only to make yield surface
plot from python, for debugging */
Real yieldSigmaTMagnitude(Real sigmaN, int yieldSurfType=0){
- #ifdef BREFCOM_YIELD_SIGMA_T_MAGNITUDE
+ #ifdef CPM_YIELD_SIGMA_T_MAGNITUDE
/* find first suitable interaction */
MetaBody* rootBody=Omega::instance().getRootBody().get();
shared_ptr<Interaction> I;
@@ -43,14 +43,14 @@
}
Real nan=std::numeric_limits<Real>::quiet_NaN();
if(!I->isReal) {LOG_ERROR("No real interaction found, returning
NaN!"); return nan; }
- BrefcomContact*
BC=dynamic_cast<BrefcomContact*>(I->interactionPhysics.get());
- if(!BC) {LOG_ERROR("Interaction physics is not BrefcomContact
instance, returning NaN!"); return nan;}
+ CpmPhys* BC=dynamic_cast<CpmPhys*>(I->interactionPhysics.get());
+ if(!BC) {LOG_ERROR("Interaction physics is not CpmPhys
instance, returning NaN!"); return nan;}
const Real &omega(BC->omega); const Real&
undamagedCohesion(BC->undamagedCohesion); const Real&
tanFrictionAngle(BC->tanFrictionAngle);
- const Real&
yieldLogSpeed(ef2_Spheres_Brefcom_BrefcomLaw::yieldLogSpeed); // const int&
yieldSurfType(ef2_Spheres_Brefcom_BrefcomLaw::yieldSurfType);
- const Real&
yieldEllipseShift(ef2_Spheres_Brefcom_BrefcomLaw::yieldEllipseShift);
- return BREFCOM_YIELD_SIGMA_T_MAGNITUDE(sigmaN);
+ const Real&
yieldLogSpeed(Law2_Dem3DofGeom_CpmPhys_Cpm::yieldLogSpeed); // const int&
yieldSurfType(Law2_Dem3DofGeom_CpmPhys_Cpm::yieldSurfType);
+ const Real&
yieldEllipseShift(Law2_Dem3DofGeom_CpmPhys_Cpm::yieldEllipseShift);
+ return CPM_YIELD_SIGMA_T_MAGNITUDE(sigmaN);
#else
- LOG_FATAL("Brefcom model not available in this build.");
+ LOG_FATAL("CPM model not available in this build.");
throw;
#endif
}
_______________________________________________
Mailing list: https://launchpad.net/~yade-dev
Post to : [email protected]
Unsubscribe : https://launchpad.net/~yade-dev
More help : https://help.launchpad.net/ListHelp
_______________________________________________
yade-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/yade-dev