Author: eudoxos
Date: 2009-08-12 23:12:21 +0200 (Wed, 12 Aug 2009)
New Revision: 1939

Modified:
   trunk/pkg/dem/DataClass/SpherePack.hpp
   trunk/pkg/dem/PreProcessor/TetraTestGen.cpp
   trunk/pkg/dem/meta/Tetra.cpp
   trunk/pkg/dem/meta/Tetra.hpp
   trunk/py/utils.py
Log:
1. Add #pragma once to SpherePack.hpp (possibly cause of 
https://bugs.launchpad.net/bugs/412442)
2. Fix crash in TetraTestGen (finally, I think), closing 
https://bugs.launchpad.net/bugs/408422
3. Add highlight parameter to utils.{facet,sphere,box}, passed to 
Body::geometricalModel 


Modified: trunk/pkg/dem/DataClass/SpherePack.hpp
===================================================================
--- trunk/pkg/dem/DataClass/SpherePack.hpp      2009-08-12 09:27:41 UTC (rev 
1938)
+++ trunk/pkg/dem/DataClass/SpherePack.hpp      2009-08-12 21:12:21 UTC (rev 
1939)
@@ -1,5 +1,7 @@
 // © 2009 Václav Šmilauer <[email protected]>
 
+#pragma once
+
 #include<vector>
 #include<string>       
 using namespace std; // sorry

Modified: trunk/pkg/dem/PreProcessor/TetraTestGen.cpp
===================================================================
--- trunk/pkg/dem/PreProcessor/TetraTestGen.cpp 2009-08-12 09:27:41 UTC (rev 
1938)
+++ trunk/pkg/dem/PreProcessor/TetraTestGen.cpp 2009-08-12 21:12:21 UTC (rev 
1939)
@@ -2,6 +2,14 @@
 #include<yade/core/MetaBody.hpp>
 #include<yade/pkg-dem/Shop.hpp>
 
+#include<yade/pkg-common/BoundingVolumeMetaEngine.hpp>
+#include<yade/pkg-common/InteractionGeometryMetaEngine.hpp>
+#include<yade/pkg-common/PhysicalActionContainerReseter.hpp>
+#include<yade/pkg-common/InsertionSortCollider.hpp>
+#include<yade/pkg-common/MetaInteractingGeometry2AABB.hpp>
+#include<yade/pkg-common/GravityEngines.hpp>
+#include<yade/pkg-dem/NewtonsDampedLaw.hpp>
+
 #include"TetraTestGen.hpp"
 
 #include<yade/pkg-dem/Tetra.hpp>
@@ -12,7 +20,27 @@
        Shop::setDefault<int>("param_timeStepUpdateInterval",-1);
 
        rootBody=Shop::rootBody();
-       Shop::rootBodyActors(rootBody);
+
+       shared_ptr<BoundingVolumeMetaEngine> boundingVolumeDispatcher   = 
shared_ptr<BoundingVolumeMetaEngine>(new BoundingVolumeMetaEngine);
+       boundingVolumeDispatcher->add(new TetraAABB);
+       boundingVolumeDispatcher->add(new MetaInteractingGeometry2AABB);
+       rootBody->initializers.push_back(boundingVolumeDispatcher);
+       rootBody->engines.clear();
+       rootBody->engines.push_back(shared_ptr<Engine>(new BexResetter));
+       rootBody->engines.push_back(boundingVolumeDispatcher);
+       rootBody->engines.push_back(shared_ptr<Engine>(new 
InsertionSortCollider));
+       shared_ptr<InteractionGeometryMetaEngine> 
interactionGeometryDispatcher(new InteractionGeometryMetaEngine);
+       interactionGeometryDispatcher->add(new Tetra2TetraBang);
+       rootBody->engines.push_back(interactionGeometryDispatcher);
+       // do not add any InteractionPhysicsMetaEngine
+       shared_ptr<TetraLaw> constitutiveLaw(new TetraLaw);
+       rootBody->engines.push_back(constitutiveLaw);
+
+       shared_ptr<GravityEngine> gravityCondition(new GravityEngine);
+       gravityCondition->gravity=Vector3r(0,0,-9.81);
+       rootBody->engines.push_back(gravityCondition);
+       rootBody->engines.push_back(shared_ptr<Engine>(new NewtonsDampedLaw));
+
        rootBody->dt=1e-5;
        
        #if 0

Modified: trunk/pkg/dem/meta/Tetra.cpp
===================================================================
--- trunk/pkg/dem/meta/Tetra.cpp        2009-08-12 09:27:41 UTC (rev 1938)
+++ trunk/pkg/dem/meta/Tetra.cpp        2009-08-12 21:12:21 UTC (rev 1939)
@@ -373,16 +373,17 @@
 
 /*! Apply forces on tetrahedra in collision based on geometric configuration 
provided by Tetra2TetraBang.
  *
+ * DO NOT USE, probably doesn't work.
  * Comments on functionality limitations are in the code. It has not been 
tested at all!!! */
 void TetraLaw::action(MetaBody* rootBody)
 {
-
-       for(InteractionContainer::iterator 
contactI=rootBody->transientInteractions->begin(); 
contactI!=rootBody->transientInteractions->end(); ++contactI){
-               if (!(*contactI)->isReal()) continue; // Tetra2TetraBang::go 
returned false for this interaction, skip it
-               const shared_ptr<TetraBang>& 
contactGeom(dynamic_pointer_cast<TetraBang>((*contactI)->interactionGeometry));
+       FOREACH(const shared_ptr<Interaction>& I, *rootBody->interactions){
+               // normally, we would test isReal(), but TetraLaw doesn't use 
interactionPhysics at all
+               if (!I->interactionGeometry) continue; // Tetra2TetraBang::go 
returned false for this interaction, skip it
+               const shared_ptr<TetraBang>& 
contactGeom(dynamic_pointer_cast<TetraBang>(I->interactionGeometry));
                if(!contactGeom) continue;
 
-               const body_id_t idA=(*contactI)->getId1(), 
idB=(*contactI)->getId2();
+               const body_id_t idA=I->getId1(), idB=I->getId2();
                const shared_ptr<Body>& A=Body::byId(idA), B=Body::byId(idB);
                        
                if(!(A->getGroupMask()&B->getGroupMask()&sdecGroupMask)) 
continue; // no bits overlap in masks, skip this one

Modified: trunk/pkg/dem/meta/Tetra.hpp
===================================================================
--- trunk/pkg/dem/meta/Tetra.hpp        2009-08-12 09:27:41 UTC (rev 1938)
+++ trunk/pkg/dem/meta/Tetra.hpp        2009-08-12 21:12:21 UTC (rev 1939)
@@ -161,7 +161,6 @@
 
 REGISTER_SERIALIZABLE(Tetra2TetraBang);
 
-
 // Miscillaneous functions
 //! Tetrahedron's volume.
 /// http://en.wikipedia.org/wiki/Tetrahedron#Surface_area_and_volume

Modified: trunk/py/utils.py
===================================================================
--- trunk/py/utils.py   2009-08-12 09:27:41 UTC (rev 1938)
+++ trunk/py/utils.py   2009-08-12 21:12:21 UTC (rev 1939)
@@ -67,12 +67,12 @@
 
 bodiesPhysDefaults={'young':30e9,'poisson':.3,'frictionAngle':.5236}
 
-def 
sphere(center,radius,dynamic=True,wire=False,color=None,density=1,physParamsClass='BodyMacroParameters',**physParamsAttr):
+def 
sphere(center,radius,dynamic=True,wire=False,color=None,density=1,highlight=False,physParamsClass='BodyMacroParameters',**physParamsAttr):
        """Create default sphere, with given parameters. Physical properties 
such as mass and inertia are calculated automatically."""
        s=Body()
        if not color: color=randomColor()
        pp=bodiesPhysDefaults.copy(); pp.update(physParamsAttr);
-       
s.shape=GeometricalModel('Sphere',radius=radius,diffuseColor=color,wire=wire)
+       
s.shape=GeometricalModel('Sphere',radius=radius,diffuseColor=color,wire=wire,highlight=highlight)
        
s.mold=InteractingGeometry('InteractingSphere',radius=radius,diffuseColor=color)
        V=(4./3)*math.pi*radius**3
        inert=(2./5.)*V*density*radius**2
@@ -83,12 +83,12 @@
        s['isDynamic']=dynamic
        return s
 
-def 
box(center,extents,orientation=[1,0,0,0],dynamic=True,wire=False,color=None,density=1,physParamsClass='BodyMacroParameters',**physParamsAttr):
+def 
box(center,extents,orientation=[1,0,0,0],dynamic=True,wire=False,color=None,density=1,highlight=False,physParamsClass='BodyMacroParameters',**physParamsAttr):
        """Create default box (cuboid), with given parameters. Physical 
properties such as mass and inertia are calculated automatically."""
        b=Body()
        if not color: color=randomColor()
        pp=bodiesPhysDefaults.copy(); pp.update(physParamsAttr);
-       
b.shape=GeometricalModel('Box',extents=extents,diffuseColor=color,wire=wire)
+       
b.shape=GeometricalModel('Box',extents=extents,diffuseColor=color,wire=wire,highlight=highlight)
        
b.mold=InteractingGeometry('InteractingBox',extents=extents,diffuseColor=color)
        mass=8*extents[0]*extents[1]*extents[2]*density
        V=extents[0]*extents[1]*extents[2]
@@ -99,12 +99,12 @@
        b['isDynamic']=dynamic
        return b
 
-def 
facet(vertices,dynamic=False,wire=True,color=None,density=1,physParamsClass='BodyMacroParameters',**physParamsAttr):
+def 
facet(vertices,dynamic=False,wire=True,color=None,density=1,highlight=False,physParamsClass='BodyMacroParameters',**physParamsAttr):
        """Create default facet with given parameters. Vertices are given as 
sequence of 3 3-tuple and they, all in global coordinates."""
        b=Body()
        if not color: color=randomColor()
        pp=bodiesPhysDefaults.copy(); pp.update(physParamsAttr);
-       b.shape=GeometricalModel('Facet',diffuseColor=color,wire=wire)
+       
b.shape=GeometricalModel('Facet',diffuseColor=color,wire=wire,highlight=highlight)
        b.mold=InteractingGeometry('InteractingFacet',diffuseColor=color)
        center=inscribedCircleCenter(vertices[0],vertices[1],vertices[2])
        
vertices=Vector3(vertices[0])-center,Vector3(vertices[1])-center,Vector3(vertices[2])-center


_______________________________________________
Mailing list: https://launchpad.net/~yade-dev
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp
_______________________________________________
yade-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/yade-dev

Reply via email to