Author: jduriez
Date: 2008-10-23 19:35:34 +0200 (Thu, 23 Oct 2008)
New Revision: 1551
Modified:
trunk/pkg/dem/Engine/StandAloneEngine/ContactLaw1.cpp
trunk/pkg/dem/Engine/StandAloneEngine/ContactLaw1.hpp
trunk/pkg/dem/PreProcessor/SimpleShear.cpp
trunk/pkg/dem/PreProcessor/SimpleShear.hpp
Log:
-ContactLaw1 : correction of prototype of action() : it needed a body, whereas
now action methods of Engines need a Metabody. This led the simulation to crash
and is
now fixed
- SimpleShear : now all is normaly done so that this preprocessor could be used
(with success) with this ContactLaw. Moreover it is now linked to the
GlobalStifnessTimeStepper (instead of the ElasticOne)
Modified: trunk/pkg/dem/Engine/StandAloneEngine/ContactLaw1.cpp
===================================================================
--- trunk/pkg/dem/Engine/StandAloneEngine/ContactLaw1.cpp 2008-10-23
13:36:45 UTC (rev 1550)
+++ trunk/pkg/dem/Engine/StandAloneEngine/ContactLaw1.cpp 2008-10-23
17:35:34 UTC (rev 1551)
@@ -9,7 +9,6 @@
#include "ContactLaw1.hpp"
#include<yade/pkg-dem/CohesiveFrictionalBodyParameters.hpp>
#include<yade/pkg-dem/SpheresContactGeometry.hpp>
-#include<yade/pkg-dem/SDECLinkGeometry.hpp>
#include<yade/pkg-dem/ContactLaw1Interaction.hpp>
#include<yade/pkg-dem/SDECLinkPhysics.hpp>
#include<yade/core/Omega.hpp>
@@ -42,9 +41,8 @@
}
-void ContactLaw1::action(Body* body)
+void ContactLaw1::action(MetaBody* ncb)
{
- MetaBody * ncb = YADE_CAST<MetaBody*>(body);
shared_ptr<BodyContainer>& bodies = ncb->bodies;
Real dt = Omega::instance().getTimeStep();
Modified: trunk/pkg/dem/Engine/StandAloneEngine/ContactLaw1.hpp
===================================================================
--- trunk/pkg/dem/Engine/StandAloneEngine/ContactLaw1.hpp 2008-10-23
13:36:45 UTC (rev 1550)
+++ trunk/pkg/dem/Engine/StandAloneEngine/ContactLaw1.hpp 2008-10-23
17:35:34 UTC (rev 1551)
@@ -19,10 +19,12 @@
This contact Law is inspired by CohesiveFrictionalContactLaw (inspired itselve
directly from the work of Plassiard & Belheine, see the corresponding articles
in "Annual Report 2006" in
http://geo.hmg.inpg.fr/frederic/Discrete_Element_Group_FVD.html for example).
It allows so to set moments, cohesion, tension limit and (that's the
difference) inelastic unloadings in compression between bodies.
All that concerned brokenBodies (this flag and the erosionactivated one) and
the useless "iter" has been suppressed.
-The Relationsships corresponding are Relationships_1, where the rigidities,
the friction angles (with their tan()), and the orientations of the
interactions are calculated. No more cohesion and tension limits are computed
for all the interactions
+The Relationsships corresponding are CL1Relationships, where the rigidities,
the friction angles (with their tan()), and the orientations of the
interactions are calculated. No more cohesion and tension limits are computed
for all the interactions
To use it you should also use :
-- CohesiveFrictionalBodyParameters for the bodies, with "isCohesive" = 1
+- CohesiveFrictionalBodyParameters for the bodies, with "isCohesive" = 1 (A
verifier ce dernier point)
- CL1Relationships (=> which involves interactions of "ContactLaw1Interaction"
type)
+
+MODIF / SVN : ContactLaw1::action recevait un body, il faut un MetaBody
*/
@@ -42,7 +44,7 @@
bool momentAlwaysElastic; // if true the value of the
momentum (computed only if momentRotationLaw !!) is not limited by a plastic
threshold
ContactLaw1();
- void action(Body* body);
+ void action(MetaBody*);
protected :
void registerAttributes();
Modified: trunk/pkg/dem/PreProcessor/SimpleShear.cpp
===================================================================
--- trunk/pkg/dem/PreProcessor/SimpleShear.cpp 2008-10-23 13:36:45 UTC (rev
1550)
+++ trunk/pkg/dem/PreProcessor/SimpleShear.cpp 2008-10-23 17:35:34 UTC (rev
1551)
@@ -15,11 +15,11 @@
#include <yade/lib-miniWm3/Wm3Math.h>
-#include <yade/pkg-dem/BodyMacroParameters.hpp>
-#include <yade/pkg-dem/ElasticContactLaw.hpp>
-#include <yade/pkg-dem/MacroMicroElasticRelationships.hpp>
-#include <yade/pkg-dem/SimpleElasticRelationships.hpp>
-#include <yade/pkg-dem/ElasticCriterionTimeStepper.hpp>
+#include <yade/pkg-dem/CohesiveFrictionalBodyParameters.hpp>
+#include <yade/pkg-dem/ContactLaw1.hpp>
+#include <yade/pkg-dem/CL1Relationships.hpp>
+#include<yade/pkg-dem/GlobalStiffnessCounter.hpp>
+#include<yade/pkg-dem/GlobalStiffnessTimeStepper.hpp>
#include <yade/pkg-dem/PositionOrientationRecorder.hpp>
#include <yade/pkg-dem/PositionRecorder.hpp>
@@ -42,11 +42,7 @@
#include<yade/pkg-common/PhysicalActionContainerReseter.hpp>
#include<yade/pkg-common/PhysicalActionContainerInitializer.hpp>
-#include<yade/pkg-common/PhysicalActionDamper.hpp>
-#include<yade/pkg-common/PhysicalActionApplier.hpp>
-
-#include<yade/pkg-common/CundallNonViscousDamping.hpp>
-#include<yade/pkg-common/CundallNonViscousDamping.hpp>
+#include<yade/pkg-dem/NewtonsDampedLaw.hpp>
#include<yade/pkg-common/GravityEngines.hpp>
#include<yade/pkg-common/CinemDNCEngine.hpp>
@@ -73,7 +69,7 @@
gravity = Vector3r(0,-9.81,0);
// Fichier contenant la liste des positions des centres et des rayons des
spheres qui vont generer l'echantillon :
- filename = "../data/porosite0_55.txt";
+ filename = "../porosite0_44.txt";
// Deux parametres necessaires si on veut utiliser au contraire la methode de
TriaxialTest pour generer l'echantillon de spheres :
// porosite=0.75;
// nBilles=8000;
@@ -83,18 +79,15 @@
profondeur=0.04;
density=2600;
- sphereYoungModulus=10000000; // 10 MPa
- spherePoissonRatio=0.2;
+ sphereYoungModulus=2.0e9; // 2 GPa, nécessaire apparemment si on veut
reproduire un joint rocheux
+ spherePoissonRatio=0.04; // Venant de "Calibration procedure...."
(Plassiard et al)
sphereFrictionDeg=26;
- boxYoungModulus=10000000; // 10 MPa
- boxPoissonRatio=0.2;
+ boxYoungModulus=2.0e9; // 2 GPa, nécessaire apparemment si on veut
reproduire un joint rocheux
+ boxPoissonRatio=0.04;
shearSpeed=0.1;
- dampingForce = 0.3;
- dampingMomentum = 0.3;
-
timeStepUpdateInterval = 50;
gravApplied = true;
@@ -135,8 +128,6 @@
REGISTER_ATTRIBUTE(shearSpeed);
REGISTER_ATTRIBUTE(gravApplied);
REGISTER_ATTRIBUTE(shearApplied);
- REGISTER_ATTRIBUTE(dampingForce);
- REGISTER_ATTRIBUTE(dampingMomentum );
REGISTER_ATTRIBUTE(timeStepUpdateInterval );
}
@@ -162,7 +153,7 @@
shared_ptr<Body> w2; // The lower one :
createBox(w2,Vector3r(width/2.0,-thickness/2.0,0),Vector3r(width/2.0,thickness/2.0,profondeur/2.0));
-
YADE_CAST<BodyMacroParameters*>(w2->physicalParameters.get())->frictionAngle =
sphereFrictionDeg; // so that we have phi(spheres-inferior
wall)=phi(sphere-sphere)
+
YADE_CAST<CohesiveFrictionalBodyParameters*>(w2->physicalParameters.get())->frictionAngle
= sphereFrictionDeg * Mathr::PI/180.0;; // so that we have
phi(spheres-inferior wall)=phi(sphere-sphere)
rootBody->bodies->insert(w2);
shared_ptr<Body> w3; // The right one
@@ -171,7 +162,7 @@
shared_ptr<Body> w4; // The upper one
createBox(w4,Vector3r(width/2.0,height+thickness/2.0,0),Vector3r(width/2.0,thickness/2.0,profondeur/2.0));
-
YADE_CAST<BodyMacroParameters*>(w4->physicalParameters.get())->frictionAngle =
sphereFrictionDeg; // so that we have phi(spheres-superior
wall)=phi(sphere-sphere)
+
YADE_CAST<CohesiveFrictionalBodyParameters*>(w4->physicalParameters.get())->frictionAngle
= sphereFrictionDeg * Mathr::PI/180.0;; // so that we have
phi(spheres-superior wall)=phi(sphere-sphere)
rootBody->bodies->insert(w4);
// To close the front and the bottom of the box
@@ -211,7 +202,7 @@
void SimpleShear::createSphere(shared_ptr<Body>& body, Vector3r position, Real
radius)
{
body = shared_ptr<Body>(new Body(0,1));
- shared_ptr<BodyMacroParameters> physics(new BodyMacroParameters);
+ shared_ptr<CohesiveFrictionalBodyParameters> physics(new
CohesiveFrictionalBodyParameters);
shared_ptr<AABB> aabb(new AABB);
shared_ptr<Sphere> gSphere(new Sphere);
shared_ptr<InteractingSphere> iSphere(new InteractingSphere);
@@ -229,6 +220,7 @@
physics->young = sphereYoungModulus;
physics->poisson = spherePoissonRatio;
physics->frictionAngle = sphereFrictionDeg * Mathr::PI/180.0;
+ physics->isCohesive = 1;
aabb->diffuseColor = Vector3r(0,1,0);
@@ -253,7 +245,7 @@
void SimpleShear::createBox(shared_ptr<Body>& body, Vector3r position,
Vector3r extents)
{
body = shared_ptr<Body>(new Body(0,1));
- shared_ptr<BodyMacroParameters> physics(new BodyMacroParameters);
+ shared_ptr<CohesiveFrictionalBodyParameters> physics(new
CohesiveFrictionalBodyParameters);
shared_ptr<AABB> aabb(new AABB);
shared_ptr<Box> gBox(new Box);
shared_ptr<InteractingBox> iBox(new InteractingBox);
@@ -278,6 +270,7 @@
physics->young = boxYoungModulus;
physics->poisson = boxPoissonRatio;
physics->frictionAngle = 0.0; //default value, modified after
for w2 and w4 to have good values of phi(sphere-walls)
+ physics->isCohesive = 1;
aabb->diffuseColor = Vector3r(1,0,0);
@@ -318,14 +311,15 @@
shared_ptr<PhysicalActionContainerInitializer>
physicalActionInitializer(new PhysicalActionContainerInitializer);
physicalActionInitializer->physicalActionNames.push_back("Force");
physicalActionInitializer->physicalActionNames.push_back("Momentum");
+
physicalActionInitializer->physicalActionNames.push_back("GlobalStiffness");
shared_ptr<InteractionGeometryMetaEngine>
interactionGeometryDispatcher(new InteractionGeometryMetaEngine);
interactionGeometryDispatcher->add("InteractingSphere2InteractingSphere4SpheresContactGeometry");
interactionGeometryDispatcher->add("InteractingBox2InteractingSphere4SpheresContactGeometry");
shared_ptr<InteractionPhysicsMetaEngine>
interactionPhysicsDispatcher(new InteractionPhysicsMetaEngine);
- shared_ptr<InteractionPhysicsEngineUnit> ss(new
SimpleElasticRelationships);
- interactionPhysicsDispatcher->add(ss);
+ shared_ptr<InteractionPhysicsEngineUnit> CL1Rel(new CL1Relationships);
+ interactionPhysicsDispatcher->add(CL1Rel);
shared_ptr<BoundingVolumeMetaEngine> boundingVolumeDispatcher =
shared_ptr<BoundingVolumeMetaEngine>(new BoundingVolumeMetaEngine);
boundingVolumeDispatcher->add("InteractingSphere2AABB");
@@ -335,47 +329,27 @@
shared_ptr<GravityEngine> gravityCondition(new GravityEngine);
gravityCondition->gravity = gravity;
- shared_ptr<CundallNonViscousForceDamping> actionForceDamping(new
CundallNonViscousForceDamping);
- actionForceDamping->damping = dampingForce;
- shared_ptr<CundallNonViscousMomentumDamping> actionMomentumDamping(new
CundallNonViscousMomentumDamping);
- actionMomentumDamping->damping = dampingMomentum;
- shared_ptr<PhysicalActionDamper> actionDampingDispatcher(new
PhysicalActionDamper);
- actionDampingDispatcher->add(actionForceDamping);
- actionDampingDispatcher->add(actionMomentumDamping);
-
- shared_ptr<PhysicalActionApplier> applyActionDispatcher(new
PhysicalActionApplier);
- applyActionDispatcher->add("NewtonsForceLaw");
- applyActionDispatcher->add("NewtonsMomentumLaw");
-
- shared_ptr<PhysicalParametersMetaEngine> positionIntegrator(new
PhysicalParametersMetaEngine);
- positionIntegrator->add("LeapFrogPositionIntegrator");
- shared_ptr<PhysicalParametersMetaEngine> orientationIntegrator(new
PhysicalParametersMetaEngine);
- orientationIntegrator->add("LeapFrogOrientationIntegrator");
-
- shared_ptr<ElasticCriterionTimeStepper> sdecTimeStepper(new
ElasticCriterionTimeStepper);
- sdecTimeStepper->sdecGroupMask = 1;
- sdecTimeStepper->timeStepUpdateInterval = timeStepUpdateInterval;
+ shared_ptr<GlobalStiffnessTimeStepper> globalStiffnessTimeStepper(new
GlobalStiffnessTimeStepper);
+ globalStiffnessTimeStepper->sdecGroupMask = 1;
+ globalStiffnessTimeStepper->timeStepUpdateInterval =
timeStepUpdateInterval;
rootBody->engines.clear();
rootBody->engines.push_back(shared_ptr<Engine>(new
PhysicalActionContainerReseter));
- rootBody->engines.push_back(sdecTimeStepper);
+ rootBody->engines.push_back(globalStiffnessTimeStepper);
rootBody->engines.push_back(boundingVolumeDispatcher);
rootBody->engines.push_back(shared_ptr<Engine>(new
PersistentSAPCollider));
rootBody->engines.push_back(interactionGeometryDispatcher);
rootBody->engines.push_back(interactionPhysicsDispatcher);
- rootBody->engines.push_back(shared_ptr<Engine>(new ElasticContactLaw));
+ rootBody->engines.push_back(shared_ptr<Engine>(new ContactLaw1));
if(gravApplied)
rootBody->engines.push_back(gravityCondition);
if(shearApplied)
rootBody->engines.push_back(kinematic);
- rootBody->engines.push_back(actionDampingDispatcher);
- rootBody->engines.push_back(applyActionDispatcher);
- rootBody->engines.push_back(positionIntegrator);
- rootBody->engines.push_back(orientationIntegrator);
- rootBody->engines.push_back(possnap);
- rootBody->engines.push_back(forcesnap);
+ rootBody->engines.push_back(shared_ptr<Engine> (new NewtonsDampedLaw));
+// rootBody->engines.push_back(possnap);
+// rootBody->engines.push_back(forcesnap);
rootBody->initializers.clear();
rootBody->initializers.push_back(physicalActionInitializer);
rootBody->initializers.push_back(boundingVolumeDispatcher);
Modified: trunk/pkg/dem/PreProcessor/SimpleShear.hpp
===================================================================
--- trunk/pkg/dem/PreProcessor/SimpleShear.hpp 2008-10-23 13:36:45 UTC (rev
1550)
+++ trunk/pkg/dem/PreProcessor/SimpleShear.hpp 2008-10-23 17:35:34 UTC (rev
1551)
@@ -18,6 +18,11 @@
The sample could be generated via the same method used in TriaxialTest
Preprocesor (=> see GenerateCloud) or by reading a text file containing
positions and radii of a sample (=> see ImportCloud). This last one is the one
by default used by this PreProcessor as it is written here => you need to have
such a file.
Thanks to the Engines (in pkg/common/Engine/DeusExMachina) CinemDNCEngine,
CinemKNCEngine and CinemCNCEngine, respectively constant normal displacement,
constant normal rigidity and constant normal stress are possible to execute
over such samples
NB : in this PreProcessor only CinemDNCEngine appears, if you want to use
other engines the best is maybe to modify directly .xml files
+
+Chgts depuis derniers svn
+- utilisation de ContactLaw1 => Changer les parameters en Cohe...Parameters
+- de globalstifness... pour calcul de dt
+- correction que le phi des boites etaient en la valeurs en deg (alors qu'il
faut des rad)
*/
@@ -50,8 +55,6 @@
;
Real displacement
,shearSpeed;
- Real dampingForce
- ,dampingMomentum;
int recordIntervalIter
,timeStepUpdateInterval;
_______________________________________________
Mailing list: https://launchpad.net/~yade-dev
Post to : [email protected]
Unsubscribe : https://launchpad.net/~yade-dev
More help : https://help.launchpad.net/ListHelp