← Back to team overview

yade-dev team mailing list archive

[Branch ~yade-dev/yade/trunk] Rev 2123: -updates for capillary files (doc in Law2_..._Capillarity and changes in CapillaryStressRecorder)...

 

------------------------------------------------------------
revno: 2123
committer: Luc Scholtes <sch50p@fluent-ph>
branch nick: trunk
timestamp: Thu 2010-04-01 16:17:19 +1000
message:
  -updates for capillary files (doc in Law2_..._Capillarity and changes in CapillaryStressRecorder)\n\n -add a feature to CohesiveFrictionalPM (creation of CFpmState to stock number of broken bonds)
modified:
  pkg/dem/Engine/GlobalEngine/CohesiveFrictionalPM.cpp
  pkg/dem/Engine/GlobalEngine/CohesiveFrictionalPM.hpp
  pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.hpp
  pkg/dem/Engine/PartialEngine/CapillaryStressRecorder.cpp


--
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/Engine/GlobalEngine/CohesiveFrictionalPM.cpp'
--- pkg/dem/Engine/GlobalEngine/CohesiveFrictionalPM.cpp	2010-03-12 07:16:16 +0000
+++ pkg/dem/Engine/GlobalEngine/CohesiveFrictionalPM.cpp	2010-04-01 06:17:19 +0000
@@ -5,7 +5,7 @@
 #include<yade/pkg-dem/ScGeom.hpp>
 #include<yade/core/Omega.hpp>
 
-YADE_PLUGIN((Law2_ScGeom_CFpmPhys_CohesiveFrictionalPM)(Ip2_CFpmMat_CFpmMat_CFpmPhys)(CFpmPhys)(CFpmMat));
+YADE_PLUGIN((CFpmMat)(CFpmState)(CFpmPhys)(Ip2_CFpmMat_CFpmMat_CFpmPhys)(Law2_ScGeom_CFpmPhys_CohesiveFrictionalPM));
 
 /********************** Law2_ScGeom_CFpmPhys_CohesiveFrictionalPM ****************************/
 CREATE_LOGGER(Law2_ScGeom_CFpmPhys_CohesiveFrictionalPM);
@@ -35,6 +35,22 @@
 	  if (!phys->isCohesive){ rootBody->interactions->requestErase(contact->getId1(),contact->getId2()); return; } // destroy the interaction before calculation
 	  if ((phys->isCohesive) && (abs(D) > (Dtensile + Dsoftening))) { // spheres are bonded and the interacting distance is greater than the one allowed ny the defined cohesion
 	    phys->isCohesive=false; 
+	    /// update body state with the number of broken bonds
+	    // as in ConcretePM but needs CpmStateUpdater
+// 	    const shared_ptr<Body>& body1=Body::byId(contact->getId1(),scene), body2=Body::byId(contact->getId2(),scene); assert(body1); assert(body2);
+// 	    const shared_ptr<CFpmState>& st1=YADE_PTR_CAST<CFpmState>(body1->state), st2=YADE_PTR_CAST<CFpmState>(body2->state);
+// 	    { boost::mutex::scoped_lock lock(st1->updateMutex); st1->numBrokenCohesive+=1;}
+// 	    { boost::mutex::scoped_lock lock(st2->updateMutex); st2->numBrokenCohesive+=1;}
+	    // luc test
+	    CFpmState* st1=dynamic_cast<CFpmState*>(b1->state.get());
+	    CFpmState* st2=dynamic_cast<CFpmState*>(b2->state.get());
+	    //// autre solution
+// 	    State* st1 = Body::byId(id1,rootBody)->state.get();
+// 	    State* st2 = Body::byId(id2,rootBody)->state.get();
+	    st1->numBrokenCohesive+=1;
+	    st2->numBrokenCohesive+=1;
+
+	    /// end of update
 	    rootBody->interactions->requestErase(contact->getId1(),contact->getId2()); return;
 	  }
 	}	  

=== modified file 'pkg/dem/Engine/GlobalEngine/CohesiveFrictionalPM.hpp'
--- pkg/dem/Engine/GlobalEngine/CohesiveFrictionalPM.hpp	2010-03-09 23:55:21 +0000
+++ pkg/dem/Engine/GlobalEngine/CohesiveFrictionalPM.hpp	2010-04-01 06:17:19 +0000
@@ -25,8 +25,20 @@
 	  - It has not been tested for sphere/facet or sphere/wall interactions and could be updated to be used by DemXDofGeom
 */
 
+/** This class holds information associated with each body state*/
+class CFpmState: public State {
+	YADE_CLASS_BASE_DOC_ATTRS(CFpmState,State,"CFpm state information about each body.\n\nNone of that is used for computation (at least not now), only for post-processing.",
+		((int,numBrokenCohesive,0,"Number of (cohesive) contacts that damaged completely"))
+	);
+};
+REGISTER_SERIALIZABLE(CFpmState);
+
 /** This class holds information associated with each body */
 class CFpmMat: public FrictMat {
+	public:
+		virtual shared_ptr<State> newAssocState() const { return shared_ptr<State>(new CFpmState); }
+		virtual bool stateTypeOk(State* s) const { return (bool)dynamic_cast<CFpmState*>(s); }
+		
 	YADE_CLASS_BASE_DOC_ATTRS_CTOR(CFpmMat,FrictMat,"cohesive frictional material, for use with other CFpm classes",
 	  ((int,type,0,"Type of the particle. If particles of two different types interact, it will be with friction only (no cohesion).[-]")),
 	  createIndex();
@@ -54,8 +66,8 @@
 		  ((Vector3r,prevNormal,Vector3r::ZERO,"Normal to the contact at previous time step."))
 		  ((Vector3r,moment_twist,Vector3r::ZERO," [N.m]"))
 		  ((Vector3r,moment_bending,Vector3r::ZERO," [N.m]"))
-		  ((Quaternionr,initialOrientation1,Quaternionr(1.0,0.0,0.0,0.0),"Use for moment computation."))
-		  ((Quaternionr,initialOrientation2,Quaternionr(1.0,0.0,0.0,0.0),"Use for moment computation."))
+		  ((Quaternionr,initialOrientation1,Quaternionr(1.0,0.0,0.0,0.0),"Used for moment computation."))
+		  ((Quaternionr,initialOrientation2,Quaternionr(1.0,0.0,0.0,0.0),"Used for moment computation."))
 		  ,
 		  createIndex();
 		  ,

=== modified file 'pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.hpp'
--- pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.hpp	2010-03-31 00:06:48 +0000
+++ pkg/dem/Engine/GlobalEngine/Law2_ScGeom_CapillaryPhys_Capillarity.hpp	2010-04-01 06:17:19 +0000
@@ -93,7 +93,7 @@
 		void action();
 		virtual void postProcessAttributes(bool deserializing);
 		
-	YADE_CLASS_BASE_DOC_ATTRS(Law2_ScGeom_CapillaryPhys_Capillarity,GlobalEngine,"Rk: this engine is deprecated -> needs some work to be conform with the new formalism! This law allows to take into account capillary forces/effects between spheres coming from the presence of interparticular liquid bridges (menisci). refs: 1- infrench, (lot of documentation) L. Scholtes, PhD thesis -> http://tel.archives-ouvertes.fr/tel-00363961/en/ - 2 in english (less documentation) L. Scholtes et al. Micromechanics of granular materials with capillary effects. International Journal of Engineering Science 2009,(47)1, 64-75. The law needs ascii files M(r=i) with i=R1/R2 to work (see in yade/extra/capillaryFiles). These ASCII files contain a set of results from the resolution of the Laplace-Young equation for different configurations of the interacting geometry. The control parameter is the capillary pressure (or suction) Uc = Cgas - 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).",
+	YADE_CLASS_BASE_DOC_ATTRS(Law2_ScGeom_CapillaryPhys_Capillarity,GlobalEngine,"Rk: 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 1- infrench, (lot of documentation) L. Scholtes, PhD thesis -> http://tel.archives-ouvertes.fr/tel-00363961/en/\n\n - 2 in english (less documentation) L. Scholtes et al. Micromechanics of granular materials with capillary effects. International Journal of Engineering Science 2009,(47)1, 64-75.\n\n The 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\n The 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).",
 				  ((int,sdecGroupMask,1,"? the interaction only considers particles with same mask ?"))
 				  ((Real,CapillaryPressure,0.,"Value of the capillary pressure Uc defines as Uc=Ugas-Uliquid"))
 				  ((bool,fusionDetection,false,"If true potential menisci overlaps are checked"))

=== modified file 'pkg/dem/Engine/PartialEngine/CapillaryStressRecorder.cpp'
--- pkg/dem/Engine/PartialEngine/CapillaryStressRecorder.cpp	2010-03-31 00:06:48 +0000
+++ pkg/dem/Engine/PartialEngine/CapillaryStressRecorder.cpp	2010-04-01 06:17:19 +0000
@@ -26,7 +26,7 @@
   
 	// at the beginning of the file; write column titles
 	if(out.tellp()==0){
-		out<<"iteration s11 s22 s33 e11 e22 e33 unb_force porosity kineticE"<<endl;
+		out<<"iteration Scap11 Scap22 Scap33 Scap12 Scap13 Scap23 Uc Sr w"<<endl;
 	}
 	if ( !triaxialCompressionEngine )
 	{


Follow ups