← Back to team overview

yade-dev team mailing list archive

[Branch ~yade-dev/yade/trunk] Rev 2248: - Register TTWater correctly.

 

------------------------------------------------------------
revno: 2248
committer: Bruno Chareyre <bchareyre@r1arduina>
branch nick: trunk
timestamp: Mon 2010-05-24 17:50:25 +0200
message:
  - Register TTWater correctly.
  - Update documentation of some classes, reformat a little, and fix (again) some email adresses.
modified:
  pkg/dem/DataClass/InteractionPhysics/CohFrictPhys.cpp
  pkg/dem/DataClass/InteractionPhysics/CohFrictPhys.hpp
  pkg/dem/Engine/GlobalEngine/CohesiveFrictionalContactLaw.hpp
  pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.cpp
  pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.hpp
  pkg/dem/PreProcessor/TriaxialTestWater.cpp
  pkg/dem/PreProcessor/TriaxialTestWater.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/DataClass/InteractionPhysics/CohFrictPhys.cpp'
--- pkg/dem/DataClass/InteractionPhysics/CohFrictPhys.cpp	2010-04-19 13:08:27 +0000
+++ pkg/dem/DataClass/InteractionPhysics/CohFrictPhys.cpp	2010-05-24 15:50:25 +0000
@@ -1,5 +1,5 @@
 /*************************************************************************
-*  Copyright (C) 2007 by Bruno Chareyre <bruno.chareyre@xxxxxxx>         *
+*  Copyright (C) 2007 by Bruno Chareyre <bruno.chareyre@xxxxxxxxxxx>     *
 *  Copyright (C) 2008 by Janek Kozicki <cosurgi@xxxxxxxxxx>              *
 *                                                                        *
 *  This program is free software; it is licensed under the terms of the  *

=== modified file 'pkg/dem/DataClass/InteractionPhysics/CohFrictPhys.hpp'
--- pkg/dem/DataClass/InteractionPhysics/CohFrictPhys.hpp	2010-04-19 13:08:27 +0000
+++ pkg/dem/DataClass/InteractionPhysics/CohFrictPhys.hpp	2010-05-24 15:50:25 +0000
@@ -1,5 +1,5 @@
 /*************************************************************************
-*  Copyright (C) 2007 by Bruno Chareyre <bruno.chareyre@xxxxxxx>         *
+*  Copyright (C) 2007 by Bruno Chareyre <bruno.chareyre@xxxxxxxxxxx>     *
 *  Copyright (C) 2008 by Janek Kozicki <cosurgi@xxxxxxxxxx>              *
 *                                                                        *
 *  This program is free software; it is licensed under the terms of the  *

=== modified file 'pkg/dem/Engine/GlobalEngine/CohesiveFrictionalContactLaw.hpp'
--- pkg/dem/Engine/GlobalEngine/CohesiveFrictionalContactLaw.hpp	2010-05-18 10:28:02 +0000
+++ pkg/dem/Engine/GlobalEngine/CohesiveFrictionalContactLaw.hpp	2010-05-24 15:50:25 +0000
@@ -1,5 +1,5 @@
 /*************************************************************************
-*  Copyright (C) 2007 by Bruno Chareyre <bruno.chareyre@xxxxxxx>         *
+*  Copyright (C) 2007 by Bruno Chareyre <bruno.chareyre@xxxxxxxxxxx>     *
 *  Copyright (C) 2008 by Janek Kozicki <cosurgi@xxxxxxxxxx>              *
 *                                                                        *
 *  This program is free software; it is licensed under the terms of the  *

=== modified file 'pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.cpp'
--- pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.cpp	2010-05-18 10:28:02 +0000
+++ pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.cpp	2010-05-24 15:50:25 +0000
@@ -83,7 +83,7 @@
         //compteur1 = 0;
         //compteur2 = 0;
         //cerr << "Law2_ScGeom_CapillaryPhys_Capillarity::action" << endl;
-
+	if (!scene) cerr << "scene not defined!";
         shared_ptr<BodyContainer>& bodies = scene->bodies;
 
         if (fusionDetection) {

=== modified file 'pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.hpp'
--- pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.hpp	2010-05-18 10:28:02 +0000
+++ pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.hpp	2010-05-24 15:50:25 +0000
@@ -93,11 +93,11 @@
 		void action();
 		virtual void postProcessAttributes(bool deserializing);
 		
-	YADE_CLASS_BASE_DOC_ATTRS(Law2_ScGeom_CapillaryPhys_Capillarity,GlobalEngine,".. note::\n\t This engine is deprecated → needs some work to be conform with the new formalism.\n\n This law allows to take into account capillary forces/effects between spheres coming from the presence of interparticular liquid bridges (menisci).\n\n refs:\n\n#. in french [Scholtes2009]_ (lot of documentation) \n#. in english [Scholtes2009b]_ (less documentation), pg. 64-75.\n\nThe law needs ascii files M(r=i) with i=R1/R2 to work (see https://yade-dem.org/index.php/CapillaryTriaxialTest). These ASCII files contain a set of results from the resolution of the Laplace-Young equation for different configurations of the interacting geometry.\n\nThe control parameter is the capillary pressure (or suction) Uc = ugas - Uliquid. Liquid bridges properties (volume V, extent over interacting grains delta1 and delta2) are computed as a result of the defined capillary pressure and of the interacting geometry (spheres radii and interparticular distance).",
-				  ((Real,CapillaryPressure,0.,"Value of the capillary pressure Uc defines as Uc=Ugas-Uliquid"))
-				  ((bool,fusionDetection,false,"If true potential menisci overlaps are checked"))
-				  ((bool,binaryFusion,true,"If true, capillary forces are set to zero as soon as, at least, 1 overlap (menisci fusion) is detected"))
-				  );
+	YADE_CLASS_BASE_DOC_ATTRS(Law2_ScGeom_CapillaryPhys_Capillarity,GlobalEngine,"This law allows to take into account capillary forces/effects between spheres coming from the presence of interparticular liquid bridges (menisci).\n\n refs:\n\n#. in french [Scholtes2009]_ (lot of documentation) \n#. in english [Scholtes2009b]_ (less documentation), pg. 64-75.\n\nThe law needs ascii files M(r=i) with i=R1/R2 to work (see https://yade-dem.org/index.php/CapillaryTriaxialTest). These ASCII files contain a set of results from the resolution of the Laplace-Young equation for different configurations of the interacting geometry.\n\nThe control parameter is the capillary pressure (or suction) Uc = ugas - Uliquid. Liquid bridges properties (volume V, extent over interacting grains delta1 and delta2) are computed as a result of the defined capillary pressure and of the interacting geometry (spheres radii and interparticular distance).",
+	((Real,CapillaryPressure,0.,"Value of the capillary pressure Uc defines as Uc=Ugas-Uliquid"))
+	((bool,fusionDetection,false,"If true potential menisci overlaps are checked"))
+	((bool,binaryFusion,true,"If true, capillary forces are set to zero as soon as, at least, 1 overlap (menisci fusion) is detected"))
+	 );
 };
 
 

=== modified file 'pkg/dem/PreProcessor/TriaxialTestWater.cpp'
--- pkg/dem/PreProcessor/TriaxialTestWater.cpp	2010-05-18 10:28:02 +0000
+++ pkg/dem/PreProcessor/TriaxialTestWater.cpp	2010-05-24 15:50:25 +0000
@@ -64,83 +64,83 @@
 string GenerateCloud_water(vector<BasicSphere>& sphere_list, Vector3r lowerCorner, Vector3r upperCorner, long number, Real rad_std_dev, Real porosity);
 
 
-TriaxialTestWater::TriaxialTestWater () : FileGenerator()
-{
-	lowerCorner 		= Vector3r(0,0,0);
-	upperCorner 		= Vector3r(0.001,0.001,0.001);
-	thickness 		= 0.00001;
-	importFilename 		= ""; // "./small.sdec.xyz";
-	Key			="";
-	outputFileName 		= "./TriaxialTestWater"+Key+".xml";
-	//nlayers = 1;
-	wall_top 		= true;
-	wall_bottom 		= true;
-	wall_1			= true;
-	wall_2			= true;
-	wall_3			= true;
-	wall_4			= true;
-	wall_top_wire 		= true;
-	wall_bottom_wire	= true;
-	wall_1_wire		= true;
-	wall_2_wire		= true;
-	wall_3_wire		= true;
-	wall_4_wire		= true;
-	spheresColor		= Vector3r(0.8,0.3,0.3);
-	spheresRandomColor	= false;
-	recordIntervalIter	= 20;
-	WallStressRecordFile = "./WallStresses"+Key;
-	capillaryStressRecordFile	= "./CapillaryStresses"+Key;
-
-	rotationBlocked = false;
-	//	boxWalls 		= false;
-	boxWalls 		= true;
-	internalCompaction	=false;
-	
-	dampingForce = 0.2;
-	dampingMomentum = 0.2;
-	defaultDt = 0.0001;
-	
-	timeStepUpdateInterval = 50;
-	timeStepOutputInterval = 50;
-	wallStiffnessUpdateInterval = 10;
-	radiusControlInterval = 10;
-	numberOfGrains = 400;
-	Rdispersion = 0.667;
-	strainRate = 10;
-	maxWallVelocity=0.1;
-	StabilityCriterion = 0.01;
-	autoCompressionActivation = true;
-	maxMultiplier = 1.01;
-	finalMaxMultiplier = 1.001;
-	
-	sphereYoungModulus  = 5000000.0;
-	sphereKsDivKn  = 0.5;	
-	sphereFrictionDeg = 30.0;
-	compactionFrictionDeg   = sphereFrictionDeg;
-	density			= 2600;
-	
-	boxYoungModulus   = 5000000.0;
-	boxKsDivKn  = 0.2;
-	boxFrictionDeg   = 0.f;
-	gravity 	= Vector3r(0,-9.81,0);
-	
-	sigmaIsoCompaction = 5000;
-	sigmaLateralConfinement=sigmaIsoCompaction;
-
-	water = true;
-	CapillaryPressure = 0;
- 	fusionDetection = 1;
-	binaryFusion = 1;
-
-	wallOversizeFactor=1.3;
-	
-//	wall_top_id =0;
-// 	wall_bottom_id =0;
-// 	wall_left_id =0;
-// 	all_right_id =0;
-// 	wall_front_id =0;
-// 	wall_back_id =0;
-}
+// TriaxialTestWater::TriaxialTestWater () : FileGenerator()
+// {
+// 	lowerCorner 		= Vector3r(0,0,0);
+// 	upperCorner 		= Vector3r(0.001,0.001,0.001);
+// 	thickness 		= 0.00001;
+// 	importFilename 		= ""; // "./small.sdec.xyz";
+// 	Key			="";
+// 	outputFileName 		= "./TriaxialTestWater"+Key+".xml";
+// 	//nlayers = 1;
+// 	wall_top 		= true;
+// 	wall_bottom 		= true;
+// 	wall_1			= true;
+// 	wall_2			= true;
+// 	wall_3			= true;
+// 	wall_4			= true;
+// 	wall_top_wire 		= true;
+// 	wall_bottom_wire	= true;
+// 	wall_1_wire		= true;
+// 	wall_2_wire		= true;
+// 	wall_3_wire		= true;
+// 	wall_4_wire		= true;
+// 	spheresColor		= Vector3r(0.8,0.3,0.3);
+// 	spheresRandomColor	= false;
+// 	recordIntervalIter	= 20;
+// 	WallStressRecordFile = "./WallStresses"+Key;
+// 	capillaryStressRecordFile	= "./CapillaryStresses"+Key;
+// 
+// 	rotationBlocked = false;
+// 	//	boxWalls 		= false;
+// 	boxWalls 		= true;
+// 	internalCompaction	=false;
+// 	
+// 	dampingForce = 0.2;
+// 	dampingMomentum = 0.2;
+// 	defaultDt = 0.0001;
+// 	
+// 	timeStepUpdateInterval = 50;
+// 	timeStepOutputInterval = 50;
+// 	wallStiffnessUpdateInterval = 10;
+// 	radiusControlInterval = 10;
+// 	numberOfGrains = 400;
+// 	Rdispersion = 0.667;
+// 	strainRate = 10;
+// 	maxWallVelocity=0.1;
+// 	StabilityCriterion = 0.01;
+// 	autoCompressionActivation = true;
+// 	maxMultiplier = 1.01;
+// 	finalMaxMultiplier = 1.001;
+// 	
+// 	sphereYoungModulus  = 5000000.0;
+// 	sphereKsDivKn  = 0.5;	
+// 	sphereFrictionDeg = 30.0;
+// 	compactionFrictionDeg   = sphereFrictionDeg;
+// 	density			= 2600;
+// 	
+// 	boxYoungModulus   = 5000000.0;
+// 	boxKsDivKn  = 0.2;
+// 	boxFrictionDeg   = 0.f;
+// 	gravity 	= Vector3r(0,-9.81,0);
+// 	
+// 	sigmaIsoCompaction = 5000;
+// 	sigmaLateralConfinement=sigmaIsoCompaction;
+// 
+// 	water = true;
+// 	CapillaryPressure = 0;
+//  	fusionDetection = 1;
+// 	binaryFusion = 1;
+// 
+// 	wallOversizeFactor=1.3;
+// 	
+// //	wall_top_id =0;
+// // 	wall_bottom_id =0;
+// // 	wall_left_id =0;
+// // 	all_right_id =0;
+// // 	wall_front_id =0;
+// // 	wall_back_id =0;
+// }
 
 
 TriaxialTestWater::~TriaxialTestWater ()
@@ -153,17 +153,11 @@
 bool TriaxialTestWater::generate()
 {
 //	unsigned int startId=boost::numeric::bounds<unsigned int>::highest(), endId=0; // record forces from group 2
-	message="";
-	
+	message="";	
 	rootBody = shared_ptr<Scene>(new Scene);
 	createActors(rootBody);
 	positionRootBody(rootBody);
-
-
 	shared_ptr<Body> body;
-	
-	
-	
 	if(boxWalls)
 	{
 	// bottom box
@@ -281,7 +275,6 @@
 		rootBody->bodies->insert(body);
 	}	
 	
-	
 	return true;
 //  	return "Generated a sample inside box of dimensions: (" 
 //  		+ lexical_cast<string>(lowerCorner[0]) + "," 
@@ -545,14 +538,11 @@
 			bool overlap=false;
 			for (long j=0; (j<i && !overlap); j++)
 				if ( pow(sphere_list[j].second+s.second, 2) > (sphere_list[j].first-s.first).squaredNorm()) overlap=true;
-			if (!overlap)
-			{
+			if (!overlap){
 				sphere_list.push_back(s);
-				break;
-			}	
-		Rmin = std::min(Rmin,s.second);
-		Rmax = std::max(Rmax,s.second);
-
+				Rmin = std::min(Rmin,s.second);
+				Rmax = std::max(Rmax,s.second);
+				break;}
 		}
 		if (t==tries) return "More than " + lexical_cast<string>(tries) +
 					" tries while generating sphere number " +

=== modified file 'pkg/dem/PreProcessor/TriaxialTestWater.hpp'
--- pkg/dem/PreProcessor/TriaxialTestWater.hpp	2010-04-25 15:46:26 +0000
+++ pkg/dem/PreProcessor/TriaxialTestWater.hpp	2010-05-24 15:50:25 +0000
@@ -20,60 +20,20 @@
 class TriaxialCompressionEngine;
 class TriaxialStateRecorder;
 class CapillaryStressRecorder;
-
-/*! \brief Isotropic compression + triaxial compression test
-
-	This preprocessor is designed to :
-	1/ generate random loose packings and compress them under isotropic confining stress, either squeezing the packing between moving rigid boxes or expanding the particles while boxes are fixed (depending on flag "InternalCompaction").
-	2/ simulate all sorts triaxial loading path (there is however a default loading path corresponding to constant lateral stress in 2 directions and constant strain rate on the third direction - this loading path is used when the flag AutoCompressionActivation = true, otherwise the simulation stops after isotropic compression)
-	
-	
-	Essential engines :
-	
-	1/ The TrixialCompressionEngine is used for controlling the state of the sample and simulating loading paths. TrixialCompressionEngine inherits from TriaxialStressController, which can compute stress- strain-like quantities in the packing and maintain a constant level of stress at each boundary. TriaxialCompressionEngine has few more members in order to impose constant strain rate and control the transition between isotropic compression and triaxial test.
-		
-	2/ The class TriaxialStateRecorder is used to write to a file the history of stresses and strains.
-	
-	3/ TriaxialTestWater is currently using GlobalStiffnessTimeStepper to compute an appropriate dt for the numerical scheme. The TriaxialTestWater is the only preprocessor using these classes in Yade because they have been developped AFTER most of preprocessor examples, BUT they can be used in principle in any situation and they have nothing specifically related to the triaxial test.
-	
-	@note TriaxialStressController::ComputeUnbalancedForce(...) returns a value that can be usefull for evaluating the stability of the packing. It is defined as (mean force on particles)/(mean contact force), so that it tends to 0 in a stable packing. This parameter is checked by TriaxialCompressionEngine to switch from one stage of the simulation to the next one (e.g. stop isotropic confinment and start axial loading)
+class GlobalStiffnessTimeStepper;
+
+/*! \brief Triaxial test on unsaturated sphere packings
+
+	This preprocessor is a variant of TriaxialTest, including the model of capillary forces developped as part of the PhD of Luc Scholtès. See the documentation of Law2_ScGeom_CapillaryPhys_Capillarity or the main page https://yade-dem.org/wiki/CapillaryTriaxialTest, for more details.
+	Results obtained with this preprocessor were reported for instance in "Scholtes et al. Micromechanics of granular materials with capillary effects. International Journal of Engineering Science 2009,(47)1, 64-75."
 	
  */
 
 class TriaxialTestWater : public FileGenerator
 {
 	private	:
-		Vector3r	 gravity
-				,lowerCorner
-				,upperCorner;
-
+		Vector3r	 gravity;
 		Vector3r	 spheresColor;
-
-		Real		 thickness
-				,sphereYoungModulus
-				,sphereKsDivKn
-				,sphereFrictionDeg
-				//! If a different value of friction is to be used during the compaction phase
-				,compactionFrictionDeg
-				,Rdispersion
-				,boxYoungModulus
-				,boxKsDivKn
-				,boxFrictionDeg
-				,density
-				,dampingForce
-				,dampingMomentum
-				,defaultDt
-				
-				,sigmaIsoCompaction
-				,CapillaryPressure
-				,sigmaLateralConfinement
-				,strainRate
-				,maxWallVelocity
-				,StabilityCriterion
-				,maxMultiplier ///max multiplier of diameters during internal compaction
-				,finalMaxMultiplier
-				,wallOversizeFactor; // make walls bigger (/smaller) than necessary by this factor
-
 		bool		 wall_top
 				,wall_bottom
 				,wall_1
@@ -86,132 +46,278 @@
 				,wall_2_wire
 				,wall_3_wire
 				,wall_4_wire
-				//! do we just want to generate a stable packing under isotropic pressure (false) or do we want the triaxial loading to start automatically right after compaction stage (true)?
-				,autoCompressionActivation
-			
-				,rotationBlocked
-				,spheresRandomColor
-				,boxWalls
-				//! flag for choosing between moving boundaries or increasing particles sizes during the compaction stage.
-				,internalCompaction
-				,water
-				,fusionDetection
-				,binaryFusion;
-
-		int		 recordIntervalIter
-				,timeStepUpdateInterval
-				,timeStepOutputInterval
-				,wallStiffnessUpdateInterval
-				,radiusControlInterval
-				,numberOfGrains;
-				/*,wall_top_id
-				,wall_bottom_id
-				,wall_left_id
-				,all_right_id
-				,wall_front_id
-				,wall_back_id;*/
-		
-		string		importFilename
-				,WallStressRecordFile
-				,capillaryStressRecordFile
-				,contactStressRecordFile
-				,Key;//A code that is added to output filenames
+				,spheresRandomColor;
 	
 		shared_ptr<TriaxialCompressionEngine> triaxialcompressionEngine;
 		shared_ptr<TriaxialStressController> triaxialstressController;
 		shared_ptr<TriaxialStateRecorder> triaxialStateRecorder;
 		shared_ptr<CapillaryStressRecorder> capillaryStressRecorder;
+		shared_ptr<GlobalStiffnessTimeStepper> globalStiffnessTimeStepper;
 			
 		void createBox(shared_ptr<Body>& body, Vector3r position, Vector3r extents,bool wire);
 		void createSphere(shared_ptr<Body>& body, Vector3r position, Real radius,bool big,bool dynamic);
 		void createActors(shared_ptr<Scene>& rootBody);
 		void positionRootBody(shared_ptr<Scene>& rootBody);
-	
+		typedef pair<Vector3r, Real> BasicSphere;	
 	public : 
-		TriaxialTestWater ();
 		~TriaxialTestWater ();
 		bool generate();
-	
-	REGISTER_ATTRIBUTES(FileGenerator,
-		(lowerCorner)
-		(upperCorner)
-		(thickness)
-		(importFilename)
-		(outputFileName)
-		//(nlayers)
-		//(boxWalls)
-		(internalCompaction)
-		(maxMultiplier)
-		(finalMaxMultiplier)
-
-		(sphereYoungModulus)
-		(sphereKsDivKn)
-		(sphereFrictionDeg)
-		(compactionFrictionDeg)
-		(boxYoungModulus)
-		(boxKsDivKn)
-		(boxFrictionDeg)
-
-		(density)
-		(defaultDt)
-		(dampingForce)
-		(dampingMomentum)
-		(rotationBlocked)
-		(timeStepUpdateInterval)
-		(timeStepOutputInterval)
-		(wallStiffnessUpdateInterval)
-		(radiusControlInterval)
-		(numberOfGrains)
-		(Rdispersion)
-		(strainRate)
-		(maxWallVelocity)
-		(StabilityCriterion)
-		(autoCompressionActivation)
-	//	(wall_top)
-	//	(wall_bottom)
-	//	(wall_1)
-	//	(wall_2)
-	//	(wall_3)
-	//	(wall_4)
-	//	(wall_top_wire)
-	//	(wall_bottom_wire)
-	//	(wall_1_wire)
-	//	(wall_2_wire)
-	//	(wall_3_wire)
-	//	(wall_4_wire)
-	//	(spheresColor)
-	//	(spheresRandomColor)
-		(recordIntervalIter)
-		(WallStressRecordFile)
-	// 	(capillaryStressRecordFile)
-		(contactStressRecordFile)
-
-		(wallOversizeFactor)
-
-	//	(gravity)
-		
-		//(bigBall)
-		//(bigBallRadius)
-		//(bigBallDensity)
-		//(bigBallDropTimeSeconds)
-		//(bigBallFrictDeg)
-		//(bigBallYoungModulus)
-		//(bigBallPoissonRatio)
-		//(bigBallDropHeight)
-		//(sigma_iso)
-		(sigmaIsoCompaction)
-		(sigmaLateralConfinement)
-		(Key)
-		
-		(water)
-		(CapillaryPressure)
-		(fusionDetection)
-		(binaryFusion)
-	);
-	REGISTER_CLASS_NAME(TriaxialTestWater);
-	REGISTER_BASE_CLASS_NAME(FileGenerator);
+		
+		YADE_CLASS_BASE_DOC_ATTRS_INIT_CTOR_PY(
+		TriaxialTestWater,FileGenerator,"This preprocessor is a variant of TriaxialTest, including the model of capillary forces developped as part of the PhD of Luc Scholtès. See the documentation of Law2_ScGeom_CapillaryPhys_Capillarity or the main page https://yade-dem.org/wiki/CapillaryTriaxialTest, for more details.\n\n Results obtained with this preprocessor were reported for instance in 'Scholtes et al. Micromechanics of granular materials with capillary effects. International Journal of Engineering Science 2009,(47)1, 64-75.'"
+		,
+   		((Vector3r,lowerCorner,Vector3r(0,0,0),"Lower corner of the box."))
+		((Vector3r,upperCorner,Vector3r(1,1,1),"Upper corner of the box."))
+		((string,importFilename,"","File with positions and sizes of spheres."))
+		((string,Key,"","A code that is added to output filenames."))
+		((string,fixedBoxDims,"","string that contains some subset (max. 2) of {'x','y','z'} ; containes axes will have box dimension hardcoded, even if box is scaled as mean_radius is prescribed: scaling will be applied on the rest."))
+		((Real,CapillaryPressure,0,"Define succion in the packing [Pa]. This is the value used in the capillary model."))
+		((bool,water,true,"activate capillary model"))
+		((bool,fusionDetection,false,"test overlaps between liquid bridges on modify forces if overlaps exist"))
+		((bool,binaryFusion,true,"Defines how overlapping bridges affect the capillary forces (see :yref:`TriaxialTestWater::fusionDetection`). If binary=true, the force is null as soon as there is an overlap detected, if not, the force is divided by the number of overlaps."))
+		((string,WallStressRecordFile,"./WallStressesWater"+Key,""))
+		((string,capillaryStressRecordFile,"./capStresses"+Key,""))
+		((string,contactStressRecordFile,"./contStresses"+Key,""))
+		((bool,internalCompaction,false,"flag for choosing between moving boundaries or increasing particles sizes during the compaction stage."))
+		((bool,biaxial2dTest,false,"FIXME : what is that?"))
+		((bool,fixedPoroCompaction,false,"flag to choose an isotropic compaction until a fixed porosity choosing a same translation speed for the six walls"))
+		((bool,autoCompressionActivation,true,"Do we just want to generate a stable packing under isotropic pressure (false) or do we want the triaxial loading to start automatically right after compaction stage (true)?"))
+		((bool,autoUnload,true,"auto adjust the isotropic stress state from :yref:`TriaxialTest::sigmaIsoCompaction` to :yref:`TriaxialTest::sigmaLateralConfinement` if they have different values. See docs for :yref:`TriaxialCompressionEngine::autoUnload`"))
+		((bool,autoStopSimulation,false,"freeze the simulation when conditions are reached (don't activate this if you want to be able to run/stop from Qt GUI)"))
+		((bool,noFiles,false,"Do not create any files during run (.xml, .spheres, wall stress records)"))
+		((bool,facetWalls,false,"Use facets for boundaries (not tested)"))
+		((bool,wallWalls,false,"Use walls for boundaries (not tested)"))
+		((bool,boxWalls,true,"Use boxes for boundaries (recommended)."))		
+		((Real,fixedPorosity,1,"FIXME : what is that?"))
+		((Real,thickness,0.001,"thickness of boundaries. It is arbitrary and should have no effect"))
+		((Real,maxMultiplier,1.01,"max multiplier of diameters during internal compaction (initial fast increase)"))
+		((Real,finalMaxMultiplier,1.001,"max multiplier of diameters during internal compaction (secondary precise adjustment)"))
+		((Real,Rdispersion,0.3,"Normalized standard deviation of generated sizes."))
+		((Real,radiusMean,-1,"Mean radius. If negative (default), autocomputed to as a function of box size and :yref:`TriaxialTest::numberOfGrains`"))
+		((Real,sphereYoungModulus,15000000.0,"Stiffness of spheres."))
+		((Real,sphereKsDivKn,0.5,"Ratio of shear vs. normal contact stiffness for spheres."))
+		((Real,sphereFrictionDeg,18.0,"Friction angle [°] of spheres assigned just before triaxial testing."))
+		((Real,compactionFrictionDeg,sphereFrictionDeg,"Friction angle [°] of spheres during compaction (different values result in different porosities)]. This value is overriden by :yref:`TriaxialTest::sphereFrictionDeg` before triaxial testing."))
+		((Real,boxYoungModulus,15000000.0,"Stiffness of boxes."))
+		((Real,maxWallVelocity,10,"max velocity of boundaries. Usually useless, but can help stabilizing the system in some cases."))
+		((Real,boxKsDivKn,0.5,"Ratio of shear vs. normal contact stiffness for boxes."))
+		((Real,boxFrictionDeg,0.0,"Friction angle [°] of boundaries contacts."))
+		((Real,density,2600,"density of spheres"))
+		((Real,strainRate,1,"Strain rate in triaxial loading."))
+		((Real,defaultDt,0.0001,"Max time-step. Used as initial value if defined. Latter adjusted by the time stepper."))
+		((Real,dampingForce,0.2,"Coefficient of Cundal-Non-Viscous damping (applied on on the 3 components of forces)"))
+		((Real,dampingMomentum,0.2,"Coefficient of Cundal-Non-Viscous damping (applied on on the 3 components of torques)"))
+		((Real,StabilityCriterion,0.01,"Value of unbalanced force for which the system is considered stable. Used in conditionals to switch between loading stages."))
+		((Real,wallOversizeFactor,1.3,"Make boundaries larger than the packing to make sure spheres don't go out during deformation."))
+		((Real,sigmaIsoCompaction,50000,"Confining stress during isotropic compaction."))
+		((Real,sigmaLateralConfinement,50000,"Lateral stress during triaxial loading. An isotropic unloading is performed if the value is not equal to :yref:`TriaxialTestWater::SigmaIsoCompaction`."))
+		
+		((int,timeStepUpdateInterval,50,"interval for :yref:`GlobalStiffnessTimeStepper`"))
+		((int,timeStepOutputInterval,50,"interval for outputing general informations on the simulation (stress,unbalanced force,...)"))
+		((int,wallStiffnessUpdateInterval,10,"interval for updating the stiffness of sample/boundaries contacts"))
+		((int,radiusControlInterval,10,"interval between size changes when growing spheres."))
+		((int,numberOfGrains,400,"Number of generated spheres."))
+		((int,recordIntervalIter,20,"interval between file outputs"))
+		,
+		/* init */
+		,
+		/* constructor */
+  		outputFileName = "./TriaxialTestWater"+Key+".xml";
+		wall_top 		= true;
+		wall_bottom 		= true;
+		wall_1			= true;
+		wall_2			= true;
+		wall_3			= true;
+		wall_4			= true;
+		wall_top_wire 		= true;
+		wall_bottom_wire	= true;
+		wall_1_wire		= true;
+		wall_2_wire		= true;
+		wall_3_wire		= true;
+		wall_4_wire		= true;
+		spheresColor		= Vector3r(0.8,0.3,0.3);
+		spheresRandomColor	= false;
+		WallStressRecordFile = "./WallStresses"+Key;	
+		gravity 		= Vector3r(0,-9.81,0);
+		,
+		//.def("setContactProperties",&TriaxialCompressionEngine::setContactProperties,"Assign a new friction angle (degrees) to dynamic bodies and relative interactions")
+		 );
+// 	DECLARE_LOGGER;
 };
 
+
+// class TriaxialTestWater : public FileGenerator
+// {
+// 	private	:
+// 		Vector3r	 gravity
+// 				,lowerCorner
+// 				,upperCorner;
+// 
+// 		Vector3r	 spheresColor;
+// 
+// 		Real		 thickness
+// 				,sphereYoungModulus
+// 				,sphereKsDivKn
+// 				,sphereFrictionDeg
+// 				//! If a different value of friction is to be used during the compaction phase
+// 				,compactionFrictionDeg
+// 				,Rdispersion
+// 				,boxYoungModulus
+// 				,boxKsDivKn
+// 				,boxFrictionDeg
+// 				,density
+// 				,dampingForce
+// 				,dampingMomentum
+// 				,defaultDt
+// 				
+// 				,sigmaIsoCompaction
+// 				,CapillaryPressure
+// 				,sigmaLateralConfinement
+// 				,strainRate
+// 				,maxWallVelocity
+// 				,StabilityCriterion
+// 				,maxMultiplier ///max multiplier of diameters during internal compaction
+// 				,finalMaxMultiplier
+// 				,wallOversizeFactor; // make walls bigger (/smaller) than necessary by this factor
+// 
+// 		bool		 wall_top
+// 				,wall_bottom
+// 				,wall_1
+// 				,wall_2
+// 				,wall_3
+// 				,wall_4
+// 				,wall_top_wire
+// 				,wall_bottom_wire
+// 				,wall_1_wire
+// 				,wall_2_wire
+// 				,wall_3_wire
+// 				,wall_4_wire
+// 				//! do we just want to generate a stable packing under isotropic pressure (false) or do we want the triaxial loading to start automatically right after compaction stage (true)?
+// 				,autoCompressionActivation
+// 			
+// 				,rotationBlocked
+// 				,spheresRandomColor
+// 				,boxWalls
+// 				//! flag for choosing between moving boundaries or increasing particles sizes during the compaction stage.
+// 				,internalCompaction
+// 				,water
+// 				,fusionDetection
+// 				,binaryFusion;
+// 
+// 		int		 recordIntervalIter
+// 				,timeStepUpdateInterval
+// 				,timeStepOutputInterval
+// 				,wallStiffnessUpdateInterval
+// 				,radiusControlInterval
+// 				,numberOfGrains;
+// 				/*,wall_top_id
+// 				,wall_bottom_id
+// 				,wall_left_id
+// 				,all_right_id
+// 				,wall_front_id
+// 				,wall_back_id;*/
+// 		
+// 		string		importFilename
+// 				,WallStressRecordFile
+// 				,capillaryStressRecordFile
+// 				,contactStressRecordFile
+// 				,Key;//A code that is added to output filenames
+// 	
+// 		shared_ptr<TriaxialCompressionEngine> triaxialcompressionEngine;
+// 		shared_ptr<TriaxialStressController> triaxialstressController;
+// 		shared_ptr<TriaxialStateRecorder> triaxialStateRecorder;
+// 		shared_ptr<CapillaryStressRecorder> capillaryStressRecorder;
+// 			
+// 		void createBox(shared_ptr<Body>& body, Vector3r position, Vector3r extents,bool wire);
+// 		void createSphere(shared_ptr<Body>& body, Vector3r position, Real radius,bool big,bool dynamic);
+// 		void createActors(shared_ptr<Scene>& rootBody);
+// 		void positionRootBody(shared_ptr<Scene>& rootBody);
+// 	
+// 	public : 
+// 		TriaxialTestWater ();
+// 		~TriaxialTestWater ();
+// 		bool generate();
+// 	
+// 	REGISTER_ATTRIBUTES(FileGenerator,
+// 		(lowerCorner)
+// 		(upperCorner)
+// 		(thickness)
+// 		(importFilename)
+// 		(outputFileName)
+// 		//(nlayers)
+// 		//(boxWalls)
+// 		(internalCompaction)
+// 		(maxMultiplier)
+// 		(finalMaxMultiplier)
+// 
+// 		(sphereYoungModulus)
+// 		(sphereKsDivKn)
+// 		(sphereFrictionDeg)
+// 		(compactionFrictionDeg)
+// 		(boxYoungModulus)
+// 		(boxKsDivKn)
+// 		(boxFrictionDeg)
+// 
+// 		(density)
+// 		(defaultDt)
+// 		(dampingForce)
+// 		(dampingMomentum)
+// 		(rotationBlocked)
+// 		(timeStepUpdateInterval)
+// 		(timeStepOutputInterval)
+// 		(wallStiffnessUpdateInterval)
+// 		(radiusControlInterval)
+// 		(numberOfGrains)
+// 		(Rdispersion)
+// 		(strainRate)
+// 		(maxWallVelocity)
+// 		(StabilityCriterion)
+// 		(autoCompressionActivation)
+// 	//	(wall_top)
+// 	//	(wall_bottom)
+// 	//	(wall_1)
+// 	//	(wall_2)
+// 	//	(wall_3)
+// 	//	(wall_4)
+// 	//	(wall_top_wire)
+// 	//	(wall_bottom_wire)
+// 	//	(wall_1_wire)
+// 	//	(wall_2_wire)
+// 	//	(wall_3_wire)
+// 	//	(wall_4_wire)
+// 	//	(spheresColor)
+// 	//	(spheresRandomColor)
+// 		(recordIntervalIter)
+// 		(WallStressRecordFile)
+// 	// 	(capillaryStressRecordFile)
+// 		(contactStressRecordFile)
+// 
+// 		(wallOversizeFactor)
+// 
+// 	//	(gravity)
+// 		
+// 		//(bigBall)
+// 		//(bigBallRadius)
+// 		//(bigBallDensity)
+// 		//(bigBallDropTimeSeconds)
+// 		//(bigBallFrictDeg)
+// 		//(bigBallYoungModulus)
+// 		//(bigBallPoissonRatio)
+// 		//(bigBallDropHeight)
+// 		//(sigma_iso)
+// 		(sigmaIsoCompaction)
+// 		(sigmaLateralConfinement)
+// 		(Key)
+// 		
+// 		(water)
+// 		(CapillaryPressure)
+// 		(fusionDetection)
+// 		(binaryFusion)
+// 	);
+// 	REGISTER_CLASS_NAME(TriaxialTestWater);
+// 	REGISTER_BASE_CLASS_NAME(FileGenerator);
+// };
+
 REGISTER_SERIALIZABLE(TriaxialTestWater);