Author: eudoxos
Date: 2008-09-24 10:42:04 +0200 (Wed, 24 Sep 2008)
New Revision: 1525

Modified:
   trunk/core/yade.cpp
   trunk/extra/Brefcom.cpp
   trunk/extra/Brefcom.hpp
   trunk/extra/clump/Shop.cpp
   trunk/extra/clump/Shop.hpp
   trunk/gui/py/PythonUI_rc.py
   trunk/gui/py/_utils.cpp
   trunk/pkg/common/DataClass/InteractionPhysics/NormalShearInteractions.hpp
   trunk/pkg/common/Engine/DeusExMachina/GravityEngines.hpp
   trunk/pkg/dem/DataClass/InteractionPhysics/ElasticContactInteraction.hpp
   
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.cpp
   
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.hpp
Log:
1. Add NormalInteraction::normalForce and NormalShearInteraction::normalForce 
(moved up the hierarchy from ElasticContactInteraction) so that unbalancedForce 
can be calculated on any subclassed interaction type.
2. Adapt Brefcom for this.
3. Add Shop::unbalancedForce and utils.unbalancedForce
4. Add workaround for saving ipython history as suggested by 
http://lists.ipython.scipy.org/pipermail/ipython-user/2008-September/005839.html
5. Fix AxialGravityEngine to register parent class attributes.



Modified: trunk/core/yade.cpp
===================================================================
--- trunk/core/yade.cpp 2008-09-23 13:44:55 UTC (rev 1524)
+++ trunk/core/yade.cpp 2008-09-24 08:42:04 UTC (rev 1525)
@@ -253,8 +253,14 @@
        int ok = frontEnd->run(argc,argv);
 
        #ifdef EMBED_PYTHON
+               /* pyFinalize crashes with boost:python<=1.35
+                * http://www.boost.org/libs/python/todo.html#pyfinalize-safety 
has explanation 
+                * once this is fixed, you should remove workaround that saves 
history from ipython session in gui/py/PythonUI_rc.py:63
+                *   import IPython.ipapi
+                *   IPython.ipapi.get().IP.atexit_operations()
+                */
                // LOG_DEBUG("Finalizing Python...");
-               // Py_Finalize(); // FIXME: 
http://www.boost.org/libs/python/todo.html#pyfinalize-safety says this is 
unsafe with boost::python
+               // Py_Finalize();
        #endif
        #ifdef YADE_DEBUG
                signal(SIGABRT,SIG_DFL); signal(SIGHUP,SIG_DFL); // default 
handlers

Modified: trunk/extra/Brefcom.cpp
===================================================================
--- trunk/extra/Brefcom.cpp     2008-09-23 13:44:55 UTC (rev 1524)
+++ trunk/extra/Brefcom.cpp     2008-09-24 08:42:04 UTC (rev 1525)
@@ -173,8 +173,8 @@
                // store Fn (and Fs?), for use with GlobalStiffnessCounter?
                NNAN(sigmaN); NNANV(sigmaT);
                NNAN(crossSection);
-               Fn=sigmaN*crossSection;
-               Fs=sigmaT*crossSection;
+               Fn=sigmaN*crossSection; BC->normalForce=Fn*contGeom->normal;
+               Fs=sigmaT*crossSection; BC->shearForce=Fs;
                applyForce(crossSection*(contGeom->normal*sigmaN + 
sigmaT),I->getId1(),I->getId2()); /* this is the force applied on the _first_ 
body; inverted applied to the second */
        }
 }

Modified: trunk/extra/Brefcom.hpp
===================================================================
--- trunk/extra/Brefcom.hpp     2008-09-23 13:44:55 UTC (rev 1524)
+++ trunk/extra/Brefcom.hpp     2008-09-24 08:42:04 UTC (rev 1525)
@@ -83,6 +83,7 @@
                bool neverDamage;
 
                /*! auxiliary variable for visualization, recalculated in 
BrefcomLaw at every iteration */
+               // FIXME: Fn and Fs are stored as Vector3r normalForce, 
shearForce in NormalShearInteraction 
                Real omega, Fn, sigmaN, epsN; Vector3r epsT, sigmaT, Fs;
 
                BrefcomContact(): NormalShearInteraction(),E(0), G(0), 
tanFrictionAngle(0), undamagedCohesion(0), crossSection(0), xiShear(0), tau(0), 
expDmgRate(0) { createIndex(); epsT=Vector3r::ZERO; kappaD=0; isCohesive=false; 
neverDamage=false; omega=0; Fn=0; Fs=Vector3r::ZERO; }

Modified: trunk/extra/clump/Shop.cpp
===================================================================
--- trunk/extra/clump/Shop.cpp  2008-09-23 13:44:55 UTC (rev 1524)
+++ trunk/extra/clump/Shop.cpp  2008-09-24 08:42:04 UTC (rev 1525)
@@ -105,6 +105,31 @@
 #undef __BEX_ACCESS
 
 
+
+Real Shop::unbalancedForce(bool useMaxForce, MetaBody* _rb){
+       MetaBody* rb=_rb ? _rb : Omega::instance().getRootBody().get();
+
+       // 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){
+               if(!b->isDynamic) continue;
+               currF=Shop::Bex::force(b->id,rb).Length(); 
maxF=max(currF,maxF); sumF+=currF;
+       }
+       Real meanF=sumF/rb->bodies->size(); 
+       // get max force on contacts
+       Real maxContactF=0;
+       FOREACH(const shared_ptr<Interaction>& I, *rb->transientInteractions){
+               if(!I->isReal) continue;
+               shared_ptr<NormalShearInteraction> 
nsi=YADE_PTR_CAST<NormalShearInteraction>(I->interactionPhysics); assert(nsi);
+               
maxContactF=max(maxContactF,(nsi->normalForce+nsi->shearForce).Length());
+       }
+       return (useMaxForce?maxF:meanF)/maxContactF;
+}
+
+
+
+
+
 template <typename valType> valType Shop::getDefault(const string& key) {
        ensureInit();
        try{return boost::any_cast<valType>(defaults[key]);}

Modified: trunk/extra/clump/Shop.hpp
===================================================================
--- trunk/extra/clump/Shop.hpp  2008-09-23 13:44:55 UTC (rev 1524)
+++ trunk/extra/clump/Shop.hpp  2008-09-24 08:42:04 UTC (rev 1525)
@@ -99,4 +99,7 @@
 
                //! Calculate inscribed circle center of trianlge
                static Vector3r inscribedCircleCenter(const Vector3r& v0, const 
Vector3r& v1, const Vector3r& v2);
+
+               //! Get unbalanced force of the whole simulation
+               static Real unbalancedForce(bool useMaxForce=false, MetaBody* 
_rb=NULL);
 };

Modified: trunk/gui/py/PythonUI_rc.py
===================================================================
--- trunk/gui/py/PythonUI_rc.py 2008-09-23 13:44:55 UTC (rev 1524)
+++ trunk/gui/py/PythonUI_rc.py 2008-09-24 08:42:04 UTC (rev 1525)
@@ -58,6 +58,10 @@
        
,rc_override={'execfile':[runtime.prefix+'/lib/yade'+runtime.suffix+'/gui/yade/ipython.py']})
 
        ipshell()
+       # save history -- a workaround for atexit handlers not being run (why?)
+       # 
http://lists.ipython.scipy.org/pipermail/ipython-user/2008-September/005839.html
+       import IPython.ipapi
+       IPython.ipapi.get().IP.atexit_operations()
        try:
                import yade.qt
                yade.qt.close()

Modified: trunk/gui/py/_utils.cpp
===================================================================
--- trunk/gui/py/_utils.cpp     2008-09-23 13:44:55 UTC (rev 1524)
+++ trunk/gui/py/_utils.cpp     2008-09-24 08:42:04 UTC (rev 1525)
@@ -159,6 +159,7 @@
        return 
vec2tuple(Shop::inscribedCircleCenter(Vector3r(python::extract<double>(v0[0]),python::extract<double>(v0[1]),python::extract<double>(v0[2])),
 
Vector3r(python::extract<double>(v1[0]),python::extract<double>(v1[1]),python::extract<double>(v1[2])),
 
Vector3r(python::extract<double>(v2[0]),python::extract<double>(v2[1]),python::extract<double>(v2[2]))));
 }
 
+BOOST_PYTHON_FUNCTION_OVERLOADS(unbalancedForce_overloads,Shop::unbalancedForce,0,1);
 
 BOOST_PYTHON_MODULE(_utils){
        def("PWaveTimeStep",PWaveTimeStep);
@@ -170,6 +171,7 @@
        
def("bodyNumInteractionsHistogram",bodyNumInteractionsHistogram,bodyNumInteractionsHistogram_overloads(args("aabb")));
        def("elasticEnergy",elasticEnergyInAABB);
        def("inscribedCircleCenter",inscribedCircleCenter);
+       
def("unbalancedForce",&Shop::unbalancedForce,unbalancedForce_overloads(args("useMaxForce")));
 }
 
 

Modified: 
trunk/pkg/common/DataClass/InteractionPhysics/NormalShearInteractions.hpp
===================================================================
--- trunk/pkg/common/DataClass/InteractionPhysics/NormalShearInteractions.hpp   
2008-09-23 13:44:55 UTC (rev 1524)
+++ trunk/pkg/common/DataClass/InteractionPhysics/NormalShearInteractions.hpp   
2008-09-24 08:42:04 UTC (rev 1525)
@@ -9,11 +9,14 @@
        public:
                //! normal stiffness
                Real kn;
+               //! normal force
+               Vector3r normalForce;
                NormalInteraction(){createIndex(); }
                virtual ~NormalInteraction();
        protected:
                virtual void registerAttributes(){
                        REGISTER_ATTRIBUTE(kn);
+                       REGISTER_ATTRIBUTE(normalForce);
                }
        REGISTER_CLASS_NAME(NormalInteraction);
        REGISTER_BASE_CLASS_NAME(InteractionPhysics);
@@ -28,12 +31,15 @@
        public:
                //! shear stiffness
                Real ks;
+               //! shear force
+               Vector3r shearForce;
                NormalShearInteraction(){ createIndex(); }
                virtual ~NormalShearInteraction();
        protected:
                virtual void registerAttributes(){      
                        NormalInteraction::registerAttributes();
                        REGISTER_ATTRIBUTE(ks);
+                       REGISTER_ATTRIBUTE(shearForce);
                }
        REGISTER_CLASS_NAME(NormalShearInteraction);
        REGISTER_BASE_CLASS_NAME(NormalInteraction);

Modified: trunk/pkg/common/Engine/DeusExMachina/GravityEngines.hpp
===================================================================
--- trunk/pkg/common/Engine/DeusExMachina/GravityEngines.hpp    2008-09-23 
13:44:55 UTC (rev 1524)
+++ trunk/pkg/common/Engine/DeusExMachina/GravityEngines.hpp    2008-09-24 
08:42:04 UTC (rev 1525)
@@ -43,7 +43,7 @@
                virtual ~CentralGravityEngine(){};
                virtual void applyCondition(MetaBody*);
        protected:
-               virtual void 
registerAttributes(){REGISTER_ATTRIBUTE(centralBody); 
REGISTER_ATTRIBUTE(accel); REGISTER_ATTRIBUTE(reciprocal); }
+               virtual void 
registerAttributes(){DeusExMachina::registerAttributes(); 
REGISTER_ATTRIBUTE(centralBody); REGISTER_ATTRIBUTE(accel); 
REGISTER_ATTRIBUTE(reciprocal); }
                NEEDS_BEX("Force");
                REGISTER_CLASS_NAME(CentralGravityEngine);
                REGISTER_BASE_CLASS_NAME(DeusExMachina);
@@ -68,7 +68,7 @@
                virtual ~AxialGravityEngine(){};
                virtual void applyCondition(MetaBody*);
        protected:
-               virtual void 
registerAttributes(){REGISTER_ATTRIBUTE(axisPoint); 
REGISTER_ATTRIBUTE(axisDirection); REGISTER_ATTRIBUTE(acceleration); }
+               virtual void 
registerAttributes(){DeusExMachina::registerAttributes(); 
REGISTER_ATTRIBUTE(axisPoint); REGISTER_ATTRIBUTE(axisDirection); 
REGISTER_ATTRIBUTE(acceleration); }
                NEEDS_BEX("Force");
                REGISTER_CLASS_NAME(AxialGravityEngine);
                REGISTER_BASE_CLASS_NAME(DeusExMachina);

Modified: 
trunk/pkg/dem/DataClass/InteractionPhysics/ElasticContactInteraction.hpp
===================================================================
--- trunk/pkg/dem/DataClass/InteractionPhysics/ElasticContactInteraction.hpp    
2008-09-23 13:44:55 UTC (rev 1524)
+++ trunk/pkg/dem/DataClass/InteractionPhysics/ElasticContactInteraction.hpp    
2008-09-24 08:42:04 UTC (rev 1525)
@@ -14,9 +14,7 @@
                                ,frictionAngle                  // angle of 
friction, according to Coulumb criterion
                                ,tangensOfFrictionAngle;
        
-               Vector3r        prevNormal                      // unit normal 
of the contact plane.
-                               ,normalForce                    // normal force 
applied on a DE
-                               ,shearForce;                    // shear force 
applied on a DE
+               Vector3r        prevNormal;                     // unit normal 
of the contact plane.
 
                ElasticContactInteraction(){createIndex();};
                virtual ~ElasticContactInteraction(){};
@@ -24,7 +22,6 @@
                virtual void registerAttributes(){
                        NormalShearInteraction::registerAttributes();
                        REGISTER_ATTRIBUTE(prevNormal);
-                       REGISTER_ATTRIBUTE(shearForce);
                        REGISTER_ATTRIBUTE(initialKn);
                        REGISTER_ATTRIBUTE(initialKs);
                        REGISTER_ATTRIBUTE(tangensOfFrictionAngle);

Modified: 
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.cpp
===================================================================
--- 
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.cpp
       2008-09-23 13:44:55 UTC (rev 1524)
+++ 
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.cpp
       2008-09-24 08:42:04 UTC (rev 1525)
@@ -13,6 +13,7 @@
 
 #include<yade/lib-base/yadeWm3Extra.hpp>
 
+CREATE_LOGGER(InteractingFacet2InteractingSphere4SpheresContactGeometry);
 
 
InteractingFacet2InteractingSphere4SpheresContactGeometry::InteractingFacet2InteractingSphere4SpheresContactGeometry()
 
 {

Modified: 
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.hpp
===================================================================
--- 
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.hpp
       2008-09-23 13:44:55 UTC (rev 1524)
+++ 
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.hpp
       2008-09-24 08:42:04 UTC (rev 1525)
@@ -31,6 +31,8 @@
        
REGISTER_CLASS_NAME(InteractingFacet2InteractingSphere4SpheresContactGeometry);
        REGISTER_BASE_CLASS_NAME(InteractionGeometryEngineUnit);
 
+       DECLARE_LOGGER;
+
        FUNCTOR2D(InteractingFacet,InteractingSphere);
 
        DEFINE_FUNCTOR_ORDER_2D(InteractingFacet,InteractingSphere);


_______________________________________________
Mailing list: https://launchpad.net/~yade-dev
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to