Author: eudoxos
Date: 2009-07-08 11:24:58 +0200 (Wed, 08 Jul 2009)
New Revision: 1848

Added:
   trunk/examples/triax-perf/mkTextTable.sh
   trunk/examples/triax-perf/triax-perf.ods
Modified:
   trunk/examples/triax-perf/triax-perf.py
   trunk/pkg/common/DataClass/InteractingGeometry/InteractingFacet.cpp
   trunk/pkg/common/DataClass/InteractingGeometry/InteractingFacet.hpp
   trunk/pkg/dem/ConcretePM.cpp
   trunk/pkg/dem/PreProcessor/TriaxialTest.cpp
   trunk/py/pack.py
Log:
1. Dump XML in ConcretePM in case of problems (nan's)
2. InteractingFacet::postProcessAttributes gives FATAL message if there are 
coincident vertices
3. Update triax-perf, add script and openoffice sheet to make table
4. InsertionSortCollider is used in TriaxialTest always (not only with fast) 
now.


Added: trunk/examples/triax-perf/mkTextTable.sh
===================================================================
--- trunk/examples/triax-perf/mkTextTable.sh    2009-07-08 08:41:42 UTC (rev 
1847)
+++ trunk/examples/triax-perf/mkTextTable.sh    2009-07-08 09:24:58 UTC (rev 
1848)
@@ -0,0 +1,10 @@
+#!/bin/sh
+# run this to get nice text to paste into the openoffice sheet
+TMPS=/tmp/a$$ /tmp/b$$ /tmp/c$$ /tmp/d$$
+ls *.ser?.log
+awk '/TOTAL/ { print $2}' *.ser?.log > /tmp/a$$
+awk '/Collider/ { print $4}' *.ser?.log > /tmp/b$$
+awk '/TOTAL/ { print $2}' *.par?.log > /tmp/c$$
+awk '/Collider/ { print $4}' *.par?.log > /tmp/d$$
+paste /tmp/a$$ /tmp/b$$ /tmp/c$$ /tmp/d$$ | sed 's/us//g' | sed 's/%//g' | sed 
's/\./,/g'
+rm -rf $TMPS

Added: trunk/examples/triax-perf/triax-perf.ods
===================================================================
(Binary files differ)


Property changes on: trunk/examples/triax-perf/triax-perf.ods
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/examples/triax-perf/triax-perf.py
===================================================================
--- trunk/examples/triax-perf/triax-perf.py     2009-07-08 08:41:42 UTC (rev 
1847)
+++ trunk/examples/triax-perf/triax-perf.py     2009-07-08 09:24:58 UTC (rev 
1848)
@@ -10,13 +10,14 @@
 # The -j1 ensures that only 1 job will run at time
 # (even if other cores are free, access to memory is limiting if running 
multiple jobs at time)
 #
-# You have to collect the results by hand from log files.
+# You have to collect the results by hand from log files, or run sh 
mkTextTable.sh and use
+# triax-perf.ods to get comparison
 #
 utils.readParamsFromTable(fast=False,noTableOk=True)
-p=Preprocessor('TriaxialTest',{'numberOfGrains':8000,'fast':fast}).load()
+TriaxialTest(numberOfGrains=50000,fast=fast,noFiles=True).load()
 O.run(10,True) # filter out initialization
 O.timingEnabled=True
-O.run(1000,True)
+O.run(200,True)
 from yade import timing
 timing.stats()
 print 'BexContainer synced %d times'%(O.bexSyncCount)

Modified: trunk/pkg/common/DataClass/InteractingGeometry/InteractingFacet.cpp
===================================================================
--- trunk/pkg/common/DataClass/InteractingGeometry/InteractingFacet.cpp 
2009-07-08 08:41:42 UTC (rev 1847)
+++ trunk/pkg/common/DataClass/InteractingGeometry/InteractingFacet.cpp 
2009-07-08 09:24:58 UTC (rev 1848)
@@ -7,6 +7,8 @@
 *************************************************************************/
 #include "InteractingFacet.hpp"
 
+CREATE_LOGGER(InteractingFacet);
+
 InteractingFacet::InteractingFacet() : InteractingGeometry()
 {
        createIndex();
@@ -35,6 +37,9 @@
     if (deserializing)
     {
                Vector3r e[3] = {vertices[1]-vertices[0] 
,vertices[2]-vertices[1] ,vertices[0]-vertices[2]};
+               #define CHECK_EDGE(i) 
if(e[i].SquaredLength()==0){LOG_FATAL("InteractingFacet has coincident vertices 
"<<i<<" ("<<vertices[i]<<") and "<<(i+1)%3<<" ("<<vertices[(i+1)%3]<<")!");}
+                       CHECK_EDGE(0); CHECK_EDGE(1);CHECK_EDGE(2);
+               #undef CHECK_EDGE
                nf = e[0].UnitCross(e[1]);
                for(int i=0; i<3; ++i) 
                {

Modified: trunk/pkg/common/DataClass/InteractingGeometry/InteractingFacet.hpp
===================================================================
--- trunk/pkg/common/DataClass/InteractingGeometry/InteractingFacet.hpp 
2009-07-08 08:41:42 UTC (rev 1847)
+++ trunk/pkg/common/DataClass/InteractingGeometry/InteractingFacet.hpp 
2009-07-08 09:24:58 UTC (rev 1848)
@@ -45,6 +45,8 @@
                vector<Real> edgeAdjHalfAngle;
        #endif
 
+       DECLARE_LOGGER;
+
        protected:
 
        void registerAttributes(); void postProcessAttributes(bool 
deserializing);

Modified: trunk/pkg/dem/ConcretePM.cpp
===================================================================
--- trunk/pkg/dem/ConcretePM.cpp        2009-07-08 08:41:42 UTC (rev 1847)
+++ trunk/pkg/dem/ConcretePM.cpp        2009-07-08 09:24:58 UTC (rev 1848)
@@ -147,7 +147,8 @@
        epsN=contGeom->strainN(); epsT=contGeom->strainT();
        
        // debugging
-               #define YADE_VERIFY(condition) 
if(!(condition)){LOG_FATAL("Verification `"<<#condition<<"' failed!"); throw;}
+               #define YADE_VERIFY(condition) 
if(!(condition)){LOG_FATAL("Verification `"<<#condition<<"' failed!"); 
LOG_FATAL("in interaction #"<<I->getId1()<<"+#"<<I->getId2()); 
Omega::instance().saveSimulation("/tmp/verificationFailed.xml"); throw;}
+
                #define NNAN(a) YADE_VERIFY(!isnan(a));
                #define NNANV(v) YADE_VERIFY(!isnan(v[0])); 
assert(!isnan(v[1])); assert(!isnan(v[2]));
                #ifdef YADE_DEBUG

Modified: trunk/pkg/dem/PreProcessor/TriaxialTest.cpp
===================================================================
--- trunk/pkg/dem/PreProcessor/TriaxialTest.cpp 2009-07-08 08:41:42 UTC (rev 
1847)
+++ trunk/pkg/dem/PreProcessor/TriaxialTest.cpp 2009-07-08 09:24:58 UTC (rev 
1848)
@@ -630,8 +630,7 @@
        rootBody->engines.clear();
        rootBody->engines.push_back(shared_ptr<Engine>(new 
PhysicalActionContainerReseter));
        rootBody->engines.push_back(boundingVolumeDispatcher);
-       if(!fast) rootBody->engines.push_back(shared_ptr<Engine>(new 
PersistentSAPCollider));
-       else rootBody->engines.push_back(shared_ptr<Engine>(new 
InsertionSortCollider));
+       rootBody->engines.push_back(shared_ptr<Engine>(new 
InsertionSortCollider));
        if(fast){
                shared_ptr<InteractionDispatchers> ids(new 
InteractionDispatchers);
                        ids->geomDispatcher=interactionGeometryDispatcher;

Modified: trunk/py/pack.py
===================================================================
--- trunk/py/pack.py    2009-07-08 08:41:42 UTC (rev 1847)
+++ trunk/py/pack.py    2009-07-08 09:24:58 UTC (rev 1848)
@@ -15,6 +15,8 @@
 # import SpherePack
 from _packSpheres import *
 
+from miniWm3Wrap import *
+
 class inGtsSurface_py(Predicate):
        """This class was re-implemented in c++, but should stay here to serve 
as reference for implementing
        Predicates in pure python code. C++ allows us to play dirty tricks in 
GTS which are not accessible
@@ -73,9 +75,17 @@
 
 def sweptPolylines2gtsSurface(pts,threshold=0,capStart=False,capEnd=False):
        """Create swept suface (as GTS triangulation) given same-length 
sequences of points (as 3-tuples).
-       If threshold is given (>0), gts.Surface().cleanup(threshold) will be 
called before returning, which
-       removes vertices mutually closer than threshold. Can be used to create 
closed swept surface (revolved), as
-       we don't check for coincident vertices otherwise.
+
+       If threshold is given (>0), then
+
+       * degenerate faces (with edges shorter than threshold) will not be 
created
+       * gts.Surface().cleanup(threshold) will be called before returning, 
which merges vertices mutually
+               closer than threshold. In case your pts are closed (last point 
concident with the first one)
+               this will the surface strip of triangles. If you additionally 
have capStart==True and capEnd==True,
+               the surface will be closed.
+
+       Note: capStart and capEnd make the most naive polygon triangulation 
(diagonals) and will perhaps fail
+       for non-convex sections.
        """
        if not len(set([len(pts1) for pts1 in pts]))==1: raise 
RuntimeError("Polylines must be all of the same length!")
        vtxs=[[gts.Vertex(x,y,z) for x,y,z in pts1] for pts1 in pts]
@@ -85,12 +95,19 @@
                for j in range(0,len(vtxs[i])):
                        
interSectEdges[i].append(gts.Edge(vtxs[i][j],vtxs[i+1][j]))
                        if j<len(vtxs[i])-1: 
interSectEdges[i].append(gts.Edge(vtxs[i][j],vtxs[i+1][j+1]))
+       if threshold>0: # replace edges of zero length with None; their faces 
will be skipped
+               def fixEdges(edges):
+                       for i,e in enumerate(edges):
+                               if 
(Vector3(e.v1.x,e.v1.y,e.v1.z)-Vector3(e.v2.x,e.v2.y,e.v2.z)).Length()<threshold:
 edges[i]=None
+               for ee in sectEdges: fixEdges(ee)
+               for ee in interSectEdges: fixEdges(ee)
        surf=gts.Surface()
        for i in range(0,len(vtxs)-1):
                for j in range(0,len(vtxs[i])-1):
-                       
newFaces=gts.Face(interSectEdges[i][2*j+1],sectEdges[i+1][j],interSectEdges[i][2*j]),gts.Face(sectEdges[i][j],interSectEdges[i][2*j+2],interSectEdges[i][2*j+1])
-                       for face in newFaces:
-                               if face.is_ok: surf.add(face)
+                       
ee1=interSectEdges[i][2*j+1],sectEdges[i+1][j],interSectEdges[i][2*j]
+                       
ee2=sectEdges[i][j],interSectEdges[i][2*j+2],interSectEdges[i][2*j+1]
+                       if None not in ee1: 
surf.add(gts.Face(interSectEdges[i][2*j+1],sectEdges[i+1][j],interSectEdges[i][2*j]))
+                       if None not in ee2: 
surf.add(gts.Face(sectEdges[i][j],interSectEdges[i][2*j+2],interSectEdges[i][2*j+1]))
        def doCap(vtx,edg,start):
                ret=[]
                eFan=[edg[0]]+[gts.Edge(vtx[i],vtx[0]) for i in 
range(2,len(vtx))]


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

Reply via email to