← Back to team overview

yade-dev team mailing list archive

[Branch ~yade-dev/yade/trunk] Rev 2618: - Doc : give precise references for triaxial algorithms.

 

------------------------------------------------------------
revno: 2618
committer: Bruno Chareyre <bruno.chareyre@xxxxxxxxxxx>
branch nick: yade
timestamp: Wed 2010-12-15 17:51:20 +0100
message:
  - Doc : give precise references for triaxial algorithms.
modified:
  pkg/dem/TriaxialCompressionEngine.hpp
  pkg/dem/TriaxialStressController.hpp


--
lp:yade
https://code.launchpad.net/~yade-dev/yade/trunk

Your team Yade developers is subscribed to branch lp:yade.
To unsubscribe from this branch go to https://code.launchpad.net/~yade-dev/yade/trunk/+edit-subscription
=== modified file 'pkg/dem/TriaxialCompressionEngine.hpp'
--- pkg/dem/TriaxialCompressionEngine.hpp	2010-11-07 11:46:20 +0000
+++ pkg/dem/TriaxialCompressionEngine.hpp	2010-12-15 16:51:20 +0000
@@ -13,9 +13,10 @@
 #include<yade/pkg/dem/TriaxialStressController.hpp>
 #include<string>
 
-/** \brief Class for controlling optional initial isotropic compaction and subsequent triaxial test with constant lateral stress and constant axial strain rate.
+/** \brief Class for controlling optional initial isotropic compaction and subsequent triaxial test with constant lateral stress and constant axial strain rate. The algorithms used have been developed initialy for simulations reported in [Chareyre2002a] and [Chareyre2005]. They have been ported to Yade in a second step and used in e.g. [Kozicki2008],[Scholtes2009b],[Jerier2010b].
  *
- * The engine is a state machine with the following states; transitions my be automatic, see below.
+ * The engine is a state machine with the following states; transitions may be automatic, see below.
+ The algorithms used have been developed initialy for simulations reported in [Chareyre2002a]_ and [Chareyre2005]_. They have been ported to Yade in a second step and used in e.g. [Kozicki2008]_,[Scholtes2009b]_,[Jerier2010b].
  *
  * 1. STATE_ISO_COMPACTION: isotropic compaction (compression) until
  *    the prescribed mean pressue sigmaIsoCompaction is reached and the packing is stable.
@@ -29,7 +30,7 @@
  * 	top and bottom walls load the packing in their axis (by straining), until the value of epsilonMax
  * 	(deformation along the loading axis) is reached. At this point, the simulation is stopped.
  * 4. STATE_FIXED_POROSITY_COMPACTION: isotropic compaction (compression) until
- *    a chosen porosity value (parameter:fixedPorosity). The six walls move with a chosen translation speed 
+ *    a chosen porosity value (parameter:fixedPorosity). The six walls move with a chosen translation speed
  *    (parameter StrainRate).
  * 5. STATE_TRIAX_LIMBO: currently unused, since simulation is hard-stopped in the previous state.
  *
@@ -37,8 +38,8 @@
  * Transition from (UNLOADING to LOADING) or from (COMPACTION to LOADING: if UNLOADING is skipped) is
  *   done automatically if autoCompressionActivation=true;
  * Both autoUnload and autoCompressionActivation are true by default.
- * 
- * NOTE: This engine handles many different manipulations, including some save/reload with attributes modified manually in between. Please don't modify the algorithms, even if they look strange (especially test sequences) without notifying me and getting explicit approval. A typical situation is somebody generates a sample with !autoCompressionActivation and run : he wants a saved simulation at the end. He then reload the saved state, modify some parameters, set autoCompressionActivation=true, and run. He should get the compression test 
+ *
+ * NOTE: This engine handles many different manipulations, including some save/reload with attributes modified manually in between. Please don't modify the algorithms, even if they look strange (especially test sequences) without notifying me and getting explicit approval. A typical situation is somebody generates a sample with !autoCompressionActivation and run : he wants a saved simulation at the end. He then reload the saved state, modify some parameters, set autoCompressionActivation=true, and run. He should get the compression test done.
  *
  */
 
@@ -46,16 +47,16 @@
 {
 	private :
 		std::string Phase1End;//used to name output files based on current state
-				
+
 	public :
 		//TriaxialCompressionEngine();
 		virtual ~TriaxialCompressionEngine();
-		
+
 		// FIXME: current serializer doesn't handle named enum types, this is workaround.
 		#define stateNum int
 		// should be "enum stateNum {...}" once this is fixed
 		enum {STATE_UNINITIALIZED, STATE_ISO_COMPACTION, STATE_ISO_UNLOADING, STATE_TRIAX_LOADING,  STATE_FIXED_POROSITY_COMPACTION, STATE_LIMBO};
-		
+
 		void doStateTransition(stateNum nextState);
 		#define _STATE_CASE(ST) case ST: return #ST
 		string stateName(stateNum st){switch(st){ _STATE_CASE(STATE_UNINITIALIZED);_STATE_CASE(STATE_ISO_COMPACTION);_STATE_CASE(STATE_ISO_UNLOADING);_STATE_CASE(STATE_TRIAX_LOADING);_STATE_CASE(STATE_FIXED_POROSITY_COMPACTION);_STATE_CASE(STATE_LIMBO); default: return "<unknown state>"; } }
@@ -68,13 +69,13 @@
 		//! is this the beginning of the simulation, after reading the scene?
 		bool firstRun;
 		int FinalIterationPhase1, Iteration/*, testEquilibriumInterval*/;//FIXME : what is that?
-		
+
 		virtual void action();
 		void updateParameters();
-		
+
 		///Change physical properties of interactions and/or bodies in the middle of a simulation (change only friction for the moment, complete this function to set cohesion and others before compression test)
 		void setContactProperties(Real frictionDegree);
-		
+
 		YADE_CLASS_BASE_DOC_ATTRS_CTOR_PY(
 		TriaxialCompressionEngine,TriaxialStressController,
 		"The engine is a state machine with the following states; transitions my be automatic, see below.\n\n"
@@ -84,7 +85,7 @@
 		"#. STATE_FIXED_POROSITY_COMPACTION: isotropic compaction (compression) until a chosen porosity value (parameter:fixedPorosity). The six walls move with a chosen translation speed (parameter StrainRate).\n"
 		"#.  STATE_TRIAX_LIMBO: currently unused, since simulation is hard-stopped in the previous state.\n\n"
 		"Transition from COMPACTION to UNLOADING is done automatically if autoUnload==true;\n\n Transition from (UNLOADING to LOADING) or from (COMPACTION to LOADING: if UNLOADING is skipped) is done automatically if autoCompressionActivation=true; Both autoUnload and autoCompressionActivation are true by default.\n\n"
-		"\n\n.. note::\n\t This engine handles many different manipulations, including some save/reload with attributes modified manually in between. Please don't modify the algorithms, even if they look strange (especially test sequences) without notifying me and getting explicit approval. A typical situation is somebody generates a sample with !autoCompressionActivation and run : he wants a saved simulation at the end. He then reload the saved state, modify some parameters, set autoCompressionActivation=true, and run. He should get the compression test done."
+		"\n\n.. note::\n\t Most of the algorithms used have been developed initialy for simulations reported in [Chareyre2002a]_ and [Chareyre2005]_. They have been ported to Yade in a second step and used in e.g. [Kozicki2008]_,[Scholtes2009b]_,[Jerier2010b]."
 		,
 		((Real,strainRate,0,,"target strain rate (./s)"))
 		((Real,currentStrainRate,0,,"current strain rate - converging to :yref:`TriaxialCompressionEngine::strainRate` (./s)"))

=== modified file 'pkg/dem/TriaxialStressController.hpp'
--- pkg/dem/TriaxialStressController.hpp	2010-11-07 11:46:20 +0000
+++ pkg/dem/TriaxialStressController.hpp	2010-12-15 16:51:20 +0000
@@ -18,7 +18,7 @@
 class State;
 
 
-/*! \brief Controls the stress on the boundaries of a box and compute strain-like and stress-like quantities for the packing
+/*! \brief Controls the stress on the boundaries of a box and compute strain-like and stress-like quantities for the packing. The algorithms used have been developed initialy for simulations reported in [Chareyre2002a] and [Chareyre2005]. They have been ported to Yade in a second step and used in e.g. [Kozicki2008],[Scholtes2009b],[Jerier2010b].
 */
 
 class TriaxialStressController : public BoundaryController
@@ -33,20 +33,20 @@
 		int wall_id [6];
 		//! Stores the value of the translation at the previous time step, stiffness, and normal
 		boost::array<Vector3r,6> previousTranslation;
-		//! The value of stiffness (updated according to stiffnessUpdateInterval) 
+		//! The value of stiffness (updated according to stiffnessUpdateInterval)
 		vector<Real>	stiffness;
 		Vector3r	strain;
 		Vector3r	normal [6];
-		//! The values of stresses 
+		//! The values of stresses
 		Vector3r	stress [6];
 		Vector3r	force [6];
 		//! Value of spheres volume (solid volume)
 		Real spheresVolume;
-		//! Value of box volume 
+		//! Value of box volume
 		Real boxVolume;
 		//! Sample porosity
 		Real porosity;
-		
+
 		Real max_vel1;
 		Real max_vel2;
 		Real max_vel3;
@@ -58,7 +58,7 @@
 		Real position_back;
 
 		virtual ~TriaxialStressController();
-	
+
 		virtual void action();
 		//! Regulate the stress applied on walls with flag wall_XXX_activated = true
 		void controlExternalStress(int wall, Vector3r resultantForce, State* p, Real wall_max_vel);
@@ -72,9 +72,10 @@
     		Real ComputeUnbalancedForce(bool maxUnbalanced=false);
 		///! Getter for stress in python
 		Vector3r getStress(int boundId);
-				
+
 		YADE_CLASS_BASE_DOC_ATTRS_INIT_CTOR_PY(
-		TriaxialStressController,BoundaryController,"An engine maintaining constant stresses on some boundaries of a parallepipedic packing."
+		TriaxialStressController,BoundaryController,"An engine maintaining constant stresses on some boundaries of a parallepipedic packing. See also :yref:`TriaxialCompressionEngine`"
+		"\n\n.. note::\n\t The algorithms used have been developed initialy for simulations reported in [Chareyre2002a]_ and [Chareyre2005]_. They have been ported to Yade in a second step and used in e.g. [Kozicki2008]_,[Scholtes2009b]_,[Jerier2010b]."
 		,
    		((unsigned int,stiffnessUpdateInterval,10,,"target strain rate (./s)"))
    		((unsigned int,radiusControlInterval,10,,""))
@@ -92,20 +93,20 @@
 		((bool,wall_left_activated,true,,""))
 		((bool,wall_right_activated,true,,""))
 		((bool,wall_front_activated,true,,""))
-		((bool,wall_back_activated,true,,""))		
+		((bool,wall_back_activated,true,,""))
 		((Real,height,0,,""))
 		((Real,width,0,,""))
 		((Real,depth,0,,""))
 		((Real,height0,0,,""))
 		((Real,width0,0,,""))
-		((Real,depth0,0,,""))		
+		((Real,depth0,0,,""))
 		((Real,sigma_iso,0,,"prescribed confining stress (see :yref:`TriaxialStressController::isAxisymetric`)"))
 		((Real,sigma1,0,,"prescribed stress on axis 1 (see :yref:`TriaxialStressController::isAxisymetric`)"))
 		((Real,sigma2,0,,"prescribed stress on axis 2 (see :yref:`TriaxialStressController::isAxisymetric`)"))
 		((Real,sigma3,0,,"prescribed stress on axis 3 (see :yref:`TriaxialStressController::isAxisymetric`)"))
 		((bool,isAxisymetric,true,,"if true, sigma_iso is assigned to sigma1, 2 and 3 (applies at each iteration and overrides user-set values of s1,2,3)"))
 		((Real,maxMultiplier,1.001,,"max multiplier of diameters during internal compaction (initial fast increase - :yref:`TriaxialStressController::finalMaxMultiplier` is used in a second stage)"))
-		((Real,finalMaxMultiplier,1.00001,,"max multiplier of diameters during internal compaction (secondary precise adjustment - :yref:`TriaxialStressController::maxMultiplier` is used in the initial stage)"))	
+		((Real,finalMaxMultiplier,1.00001,,"max multiplier of diameters during internal compaction (secondary precise adjustment - :yref:`TriaxialStressController::maxMultiplier` is used in the initial stage)"))
 		((Real,max_vel,0.001,,"Maximum allowed walls velocity [m/s]. This value superseeds the one assigned by the stress controller if the later is higher. max_vel can be set to infinity in many cases, but sometimes helps stabilizing packings. Based on this value, different maxima are computed for each axis based on the dimensions of the sample, so that if each boundary moves at its maximum velocity, the strain rate will be isotropic (see e.g. :yref:`TriaxialStressController::max_vel1`)."))
 		((Real,previousStress,0,,""))
 		((Real,previousMultiplier,1,,""))
@@ -126,7 +127,7 @@
 		normal[wall_left].x()=1;
 		normal[wall_right].x()=-1;
 		normal[wall_front].z()=-1;
-		normal[wall_back].z()=1;	
+		normal[wall_back].z()=1;
 		porosity=1;
 		,
 		.def_readonly("strain",&TriaxialStressController::strain,"Current strain (logarithmic).")
@@ -138,6 +139,6 @@
 		.def_readonly("max_vel3",&TriaxialStressController::max_vel3,"see :yref:`TriaxialStressController::max_vel` |ycomp|")
 		.def("stress",&TriaxialStressController::getStress,(python::arg("id")),"Return the mean stress vector acting on boundary 'id', with 'id' between 0 and 5.")
 		)
-		DECLARE_LOGGER;	
+		DECLARE_LOGGER;
 };
 REGISTER_SERIALIZABLE(TriaxialStressController);