← Back to team overview

yade-dev team mailing list archive

[Branch ~yade-dev/yade/trunk] Rev 2611: 1. remove devirt-functors (unused)

 

------------------------------------------------------------
revno: 2611
committer: Václav Šmilauer <eu@xxxxxxxx>
branch nick: yade
timestamp: Mon 2010-12-13 13:11:43 +0100
message:
  1. remove devirt-functors (unused)
  2. rename SubdomainOptimizer to SubdomainBalancer
  3. remove Dem3DofGeom::scaleDisplacementT (unused)
  4. remove Law2_ScGeom_CpmPhys_Cpm (malfunctioning, unused)
  5. remove SConscript-mono (unused)
removed:
  SConscript-mono
renamed:
  pkg/common/SubdomainOptimizer.cpp => pkg/common/SubdomainBalancer.cpp
  pkg/common/SubdomainOptimizer.hpp => pkg/common/SubdomainBalancer.hpp
  scripts/test/subdomain-optimizer.py => scripts/test/subdomain-balancer.py
modified:
  SConstruct
  examples/packs/packs.py
  pkg/common/Cylinder.cpp
  pkg/common/Cylinder.hpp
  pkg/common/Dispatching.cpp
  pkg/common/Dispatching.hpp
  pkg/common/InteractionLoop.cpp
  pkg/dem/ConcretePM.cpp
  pkg/dem/ConcretePM.hpp
  pkg/dem/Dem3DofGeom_FacetSphere.cpp
  pkg/dem/Dem3DofGeom_FacetSphere.hpp
  pkg/dem/Dem3DofGeom_SphereSphere.cpp
  pkg/dem/Dem3DofGeom_SphereSphere.hpp
  pkg/dem/Dem3DofGeom_WallSphere.cpp
  pkg/dem/Dem3DofGeom_WallSphere.hpp
  pkg/dem/DemXDofGeom.hpp
  pkg/dem/ElasticContactLaw.cpp
  pkg/dem/L3Geom.hpp
  py/_eudoxos.cpp
  py/system.py
  scripts/test/clumpPack.py
  scripts/test/law-test.py
  pkg/common/SubdomainBalancer.cpp
  pkg/common/SubdomainBalancer.hpp
  scripts/test/subdomain-balancer.py


--
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
=== removed file 'SConscript-mono'
--- SConscript-mono	2010-10-14 08:18:42 +0000
+++ SConscript-mono	1970-01-01 00:00:00 +0000
@@ -1,101 +0,0 @@
-# vim: syntax=python
-Import('*')
-
-
-srcs=[] # list of single source files that will be compiled in chunks based on chunkSize
-extraSrcs=[] # list of _chunks_ (list/tuple) of sources that will be compiled separately
-pyMods=[] # list of symbolic links that will point to the resulting library; their sources must be specified in srcs/extraSrcs
-libs=[]
-
-### core
-
-pyMain='$PREFIX/bin/yade$SUFFIX'
-env['PLUGINDIR']='$PREFIX/lib/yade$SUFFIX'
-main=env.ScanReplace('core/main/main.py.in')
-batch=env.ScanReplace('core/main/yade-batch.in')
-env.AlwaysBuild(main)
-env.AlwaysBuild(batch)
-env.InstallAs(pyMain,main)
-env.InstallAs(pyMain+'-batch',batch)
-env.AddPostAction(pyMain,Chmod(pyMain,0755))
-env.AddPostAction(pyMain+'-batch',Chmod(pyMain+'-batch',0755))
-
-extraSrcs+=[['core/'+f for f in ['Body.cpp','BodyContainer.cpp','Bound.cpp','Cell.cpp','PartialEngine.cpp','Engine.cpp','FileGenerator.cpp','FrontEnd.cpp','Interaction.cpp','InteractionContainer.cpp','GroupRelationData.cpp','Material.cpp','Scene.cpp','Dispatcher.cpp','Omega.cpp','Shape.cpp','SimulationFlow.cpp','State.cpp','ThreadRunner.cpp','ThreadWorker.cpp','TimeStepper.cpp','corePlugins.cpp','main/pyboot.cpp']]]
-pyMods+=['boot']
-
-# libs
-srcs+=['lib/'+f for f in ['base/Math.cpp','factory/ClassFactory.cpp','factory/DynLibManager.cpp','multimethods/Indexable.cpp','serialization/Serializable.cpp','pyutil/gil.cpp']]
-if 'opengl' in env['features']:
-	srcs+=['lib/opengl/GLUtils.cpp']
-	libs+=['GL','GLU','glut']
-if 'cgal' in env['features']:
-	extraSrcs+=[['lib/'+f for f in Split('triangulation/KinematicLocalisationAnalyser.cpp triangulation/Operations.cpp triangulation/RegularTriangulation.cpp triangulation/Timer.cpp triangulation/basicVTKwritter.cpp triangulation/FlowBoundingSphere.cpp triangulation/Deformation.cpp triangulation/Empilement.cpp triangulation/stdafx.cpp triangulation/Tenseur3.cpp triangulation/Tesselation.cpp triangulation/TriaxialState.cpp')]]
-
-# py
-if 'gts' in env['features']:
-	extraSrcs+=['py/'+f for f in ('3rd-party/pygts-0.3.1/cleanup.c','3rd-party/pygts-0.3.1/edge.c','3rd-party/pygts-0.3.1/face.c','3rd-party/pygts-0.3.1/object.c','3rd-party/pygts-0.3.1/point.c','3rd-party/pygts-0.3.1/pygts.c','3rd-party/pygts-0.3.1/segment.c','3rd-party/pygts-0.3.1/surface.c','3rd-party/pygts-0.3.1/triangle.c','3rd-party/pygts-0.3.1/vertex.c')]
-	pyMods+=['../gts/_gts']
-	env.Install('$PLUGINDIR/py/gts',[env.File('py/3rd-party/pygts-0.3.1/__init__.py'),env.File('py/3rd-party/pygts-0.3.1/pygts.py')])
-
-pyMods+=['../miniEigen','WeightedAverage2d','log','_utils','_packPredicates','_packSpheres','_packObb','wrapper','_customConverters','_eudoxos','_packSpherePadder']
-srcs+=['py/mathWrap/miniEigen.cpp','py/WeightedAverage2d.cpp','py/_eudoxos.cpp','py/log.cpp','py/_utils.cpp','py/pack/_packPredicates.cpp','py/pack/_packSpheres.cpp','py/pack/_packObb.cpp','py/wrapper/yadeWrapper.cpp','py/wrapper/customConverters.cpp']
-extraSrcs+=[ ['py/pack/_packSpherePadder.cpp','py/pack/SpherePadder/SpherePadder.cpp','py/pack/SpherePadder/TetraMesh.cpp','py/pack/SpherePadder/CellPartition.cpp']+(['py/pack/SpherePadder/SpherePackingTriangulation.cpp'] if 'cgal' in env['features'] else []) ]
-
-env.Install('$PLUGINDIR/py/yade',[
-	env.AlwaysBuild(env.ScanReplace('py/__init__.py.in')),
-	env.AlwaysBuild(env.ScanReplace('py/config.py.in'))
-	]
-	+[env.File('py/'+f) for f in  ['utils.py','ymport.py','export.py','eudoxos.py','plot.py','params.py','linterpolation.py','timing.py','pack/pack.py','remote.py','system.py','export.py','post2d.py','runtime.py','manpage.py','_extraDocs.py',]]
-)
-env.Install('$PLUGINDIR/py/yade/tests',[env.File('__init__.py','py/tests'),env.File('wrapper.py','py/tests'),env.File('omega.py','py/tests')
-])
-
-env.Install('$PLUGINDIR/py',[
-	env.File('mtTkinter.py','py/3rd-party/mtTkinter-0.3'),
-])
-
-# gui
-if 'qt4' in env['features']:
-	env.Install('$PLUGINDIR/py/yade/qt',[env.File('gui/'+f) for f in ['qt4/img_rc.py','qt4/ui_controller.py','qt4/SerializableEditor.py','qt4/Inspector.py','qt4/__init__.py',]])
-	env.Command('gui/qt4/img_rc.py','gui/qt4/img.qrc','pyrcc4 -o $buildDir/gui/qt4/img_rc.py gui/qt4/img.qrc')
-	env.Command('gui/qt4/ui_controller.py','gui/qt4/controller.ui','pyuic4 -o $buildDir/gui/qt4/ui_controller.py gui/qt4/controller.ui')
-	srcs+=['gui/qt4/GLViewer.cpp','gui/qt4/_GLViewer.cpp','gui/qt4/OpenGLManager.cpp']
-	pyMods+=['qt/_GLViewer']
-	libs+=[env['QGLVIEWER_LIB']]
-
-# pkg
-pluginsSrcs=[p.src for p in env['buildPlugs'].values()]
-srcs+=pluginsSrcs
-
-# building itself
-env['LIBS']=env['LIBS']+libs
-import os.path
-
-def makeChunk(chunk,srcs,baseDir=None):
-	if not baseDir: baseDir=env['buildDir']
-	chunk2=baseDir+'/'+chunk
-	f=open(chunk2,'w')
-	for s in srcs: f.write('#include<%s>\n'%os.path.abspath(env['topLevelDir']+'/'+s))
-	return chunk2
-	
-
-extraChunks=[(ff if isinstance(ff,str) else makeChunk('chunk%02d.%s'%(i,ff[0].split('.')[-1]),ff)) for i,ff in enumerate(extraSrcs)]
-#import pprint; pprint.pprint(extraSrcs)
-chunkSize=env['chunkSize']
-if chunkSize>1:
-	srcsChunks=[srcs[chunkSize*i:chunkSize*(i+1)] for i in range(0,1+len(srcs)/chunkSize)]
-	env.Install('$PLUGINDIR',env.SharedLibrary('yade',[makeChunk('yade%02d.cpp'%i,chunkSrcs) for i,chunkSrcs in enumerate(srcsChunks)]+extraChunks))
-elif chunkSize==1:
-	env.Install('$PLUGINDIR',env.SharedLibrary('yade',srcs+extraChunks))
-else: # chunkSize<=0
-	env.Install('$PLUGINDIR',env.SharedLibrary('yade',[makeChunk('yade.cpp',srcs)]+extraChunks))
-
-yadeSo=env.subst('$PLUGINDIR/libyade.so')
-import os, os.path
-for m in pyMods:
-	mm=env.subst('$PLUGINDIR/py/yade/'+m+'.so')
-	d=os.path.dirname(mm);
-	if not os.path.exists(d): os.makedirs(d)
-	relpath=os.path.relpath(yadeSo,d)
-	env.Command(mm,yadeSo,'ln -s -f "%s" "%s"'%(relpath,mm))
-

=== modified file 'SConstruct'
--- SConstruct	2010-11-30 15:41:55 +0000
+++ SConstruct	2010-12-13 12:11:43 +0000
@@ -92,7 +92,7 @@
 	BoolVariable('gprof','Enable profiling information for gprof',0),
 	('optimize','Turn on optimizations (-1, 0 or 1); negative value sets optimization based on debugging: not optimize with debugging and vice versa.',-1,None,int),
 	EnumVariable('PGO','Whether to "gen"erate or "use" Profile-Guided Optimization','',['','gen','use'],{'no':'','0':'','false':''},1),
-	ListVariable('features','Optional features that are turned on','log4cxx,opengl,gts,openmp,vtk,qt4',names=['opengl','log4cxx','cgal','openmp','gts','vtk','gl2ps','devirt-functors','qt4','never_use_this_one','subdomains']),
+	ListVariable('features','Optional features that are turned on','log4cxx,opengl,gts,openmp,vtk,qt4',names=['opengl','log4cxx','cgal','openmp','gts','vtk','gl2ps','qt4','never_use_this_one','subdomains']),
 	('jobs','Number of jobs to run at the same time (same as -j, but saved)',2,None,int),
 	#('extraModules', 'Extra directories with their own SConscript files (must be in-tree) (whitespace separated)',None,None,Split),
 	('buildPrefix','Where to create build-[version][variant] directory for intermediary files','..'),

=== modified file 'examples/packs/packs.py'
--- examples/packs/packs.py	2010-12-01 11:09:53 +0000
+++ examples/packs/packs.py	2010-12-13 12:11:43 +0000
@@ -91,10 +91,10 @@
 	qt.View()
 except ImportError: pass
 
-log.setLevel('SubdomainOptimizer',log.TRACE)
+log.setLevel('SubdomainBalancer',log.TRACE)
 
 O.engines=[
-	SubdomainOptimizer(colorize=True,initRun=True,iterPeriod=100),
+	SubdomainBalancer(colorize=True,initRun=True,iterPeriod=100),
 	ForceResetter(),
 	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb(),Bo1_Wall_Aabb()],label='collider'),
 	InteractionLoop(

=== modified file 'pkg/common/Cylinder.cpp'
--- pkg/common/Cylinder.cpp	2010-12-10 20:20:16 +0000
+++ pkg/common/Cylinder.cpp	2010-12-13 12:11:43 +0000
@@ -28,18 +28,11 @@
 
 
 //!Sphere-cylinder or cylinder-cylinder not implemented yet, see Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D and test/chained-cylinder-spring.py
-#ifdef YADE_DEVIRT_FUNCTORS
-bool Ig2_Sphere_ChainedCylinder_CylScGeom::go(const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& state2, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c){ throw runtime_error("Do not call Ig2_Sphere_ChainedCylinder_CylScGeom::go, use getStaticFunctorPtr and call that function instead."); }
-bool Ig2_Sphere_ChainedCylinder_CylScGeom::goStatic(IGeomFunctor* _self, const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& state2, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c){
-	const Ig2_Sphere_ChainedCylinder_CylScGeom* self=static_cast<Ig2_Sphere_ChainedCylinder_CylScGeom*>(_self);
-	const Real& interactionDetectionFactor=self->interactionDetectionFactor;
-#else
 bool Ig2_Sphere_ChainedCylinder_CylScGeom::go(	const shared_ptr<Shape>& cm1,
 							const shared_ptr<Shape>& cm2,
 							const State& state1, const State& state2, const Vector3r& shift2, const bool& force,
 							const shared_ptr<Interaction>& c)
 {
-#endif
 // 	cerr<<"Ig2_Sphere_ChainedCylinder_CylScGeom::go"<<endl;
 	const State* sphereSt=YADE_CAST<const State*>(&state1);
 	const ChainedState* cylinderSt=YADE_CAST<const ChainedState*>(&state2);
@@ -141,18 +134,11 @@
 }
 
 
-#ifdef YADE_DEVIRT_FUNCTORS
-bool Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D::go(const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& state2, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c){ throw runtime_error("Do not call Ig2_Sphere_ChainedCylinder_CylScGeom::go, use getStaticFunctorPtr and call that function instead."); }
-bool Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D::goStatic(IGeomFunctor* _self, const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& state2, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c){
-	const Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D* self=static_cast<Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D*>(_self);
-	const Real& interactionDetectionFactor=self->interactionDetectionFactor;
-#else
 bool Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D::go(	const shared_ptr<Shape>& cm1,
 							const shared_ptr<Shape>& cm2,
 							const State& state1, const State& state2, const Vector3r& shift2, const bool& force,
 							const shared_ptr<Interaction>& c)
 {
-#endif
 	const ChainedState *pChain1, *pChain2;
 	pChain1=YADE_CAST<const ChainedState*>(&state1);
 	pChain2=YADE_CAST<const ChainedState*>(&state2);

=== modified file 'pkg/common/Cylinder.hpp'
--- pkg/common/Cylinder.hpp	2010-12-06 19:24:20 +0000
+++ pkg/common/Cylinder.hpp	2010-12-13 12:11:43 +0000
@@ -113,10 +113,6 @@
 // 		virtual ~Ig2_Sphere_ChainedCylinder_CylScGeom ();
 		virtual bool go(const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& state2, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c);
 		virtual bool goReverse(	const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& state2, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c);
-	#ifdef YADE_DEVIRT_FUNCTORS
-		void* getStaticFuncPtr(){ return (void*)&Ig2_Sphere_ChainedCylinder_CylScGeom::goStatic; }
-		static bool goStatic(IGeomFunctor* self, const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& se32, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c);
-	#endif
 	YADE_CLASS_BASE_DOC_ATTRS(Ig2_Sphere_ChainedCylinder_CylScGeom,IGeomFunctor,"Create/update a :yref:`ScGeom` instance representing intersection of two :yref:`Spheres<Sphere>`.",
 		((Real,interactionDetectionFactor,1,,"Enlarge both radii by this factor (if >1), to permit creation of distant interactions."))
 	);
@@ -130,10 +126,6 @@
 // 		virtual ~Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D ()  {};
 		virtual bool go(const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& state2, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c);
 		virtual bool goReverse(	const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& state2, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c);
-	#ifdef YADE_DEVIRT_FUNCTORS
-		void* getStaticFuncPtr(){ return (void*)&Ig2_Sphere_ChainedCylinder_CylScGeom::goStatic; }
-		static bool goStatic(IGeomFunctor* self, const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& se32, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c);
-	#endif
 	YADE_CLASS_BASE_DOC_ATTRS(Ig2_ChainedCylinder_ChainedCylinder_ScGeom6D,IGeomFunctor,"Create/update a :yref:`ScGeom` instance representing connexion between :yref:`chained cylinders<ChainedCylinder>`.",
 		((Real,interactionDetectionFactor,1,,"Enlarge both radii by this factor (if >1), to permit creation of distant interactions."))
 	);

=== modified file 'pkg/common/Dispatching.cpp'
--- pkg/common/Dispatching.cpp	2010-11-07 11:46:20 +0000
+++ pkg/common/Dispatching.cpp	2010-12-13 12:11:43 +0000
@@ -68,9 +68,6 @@
 	Vector3r shift2=scene->cell->Hsize*cellDist.cast<Real>();
 	updateScenePtr();
 	if(force){
-		#ifdef YADE_DEVIRT_FUNCTORS
-			throw logic_error("IGeomDispatcher::explicitAction not supported with the devirt-functors feature (yet)");
-		#endif
 		assert(b1->shape && b2->shape);
 		shared_ptr<Interaction> I(new Interaction(b1->getId(),b2->getId()));
 		I->cellDist=cellDist;

=== modified file 'pkg/common/Dispatching.hpp'
--- pkg/common/Dispatching.hpp	2010-11-07 11:46:20 +0000
+++ pkg/common/Dispatching.hpp	2010-12-13 12:11:43 +0000
@@ -34,12 +34,6 @@
 	/*argument types*/ TYPELIST_7(const shared_ptr<Shape>&, const shared_ptr<Shape>&, const State&, const State&, const Vector3r&, const bool&, const shared_ptr<Interaction>&) 
 >{
 	public: virtual ~IGeomFunctor();
-	#ifdef YADE_DEVIRT_FUNCTORS
-		// type of the pointer to devirtualized functor (static method taking the functor instance as the first argument)
-		typedef bool(*StaticFuncPtr)(IGeomFunctor*, const shared_ptr<Shape>&, const shared_ptr<Shape>&, const State&, const State&, const Vector3r&, const bool&, const shared_ptr<Interaction>&);
-		// return devirtualized functor (static method); must be overridden in derived classes
-		virtual void* getStaticFuncPtr(){ throw runtime_error(("IGeomFunctor::getStaticFuncPtr() not overridden in class "+getClassName()+".").c_str()); }
-	#endif
 	YADE_CLASS_BASE_DOC(IGeomFunctor,Functor,"Functor for creating/updating :yref:`Interaction::geom` objects.");
 };
 REGISTER_SERIALIZABLE(IGeomFunctor);

=== modified file 'pkg/common/InteractionLoop.cpp'
--- pkg/common/InteractionLoop.cpp	2010-11-30 13:51:41 +0000
+++ pkg/common/InteractionLoop.cpp	2010-12-13 12:11:43 +0000
@@ -92,14 +92,9 @@
 		// IGeomDispatcher
 		if(unlikely(!I->functorCache.geom || !I->functorCache.phys)){
 			I->functorCache.geom=geomDispatcher->getFunctor2D(b1_->shape,b2_->shape,swap);
-			#ifdef YADE_DEVIRT_FUNCTORS
-				if(I->functorCache.geom){ I->functorCache.geomPtr=I->functorCache.geom->getStaticFuncPtr(); /* cerr<<"["<<I->functorCache.geomPtr<<"]"; */ }
-				else
-			#else
-				if(!I->functorCache.geom)
-			#endif
-					// returns NULL ptr if no functor exists; remember that and shortcut
-					{I->functorCache.geomExists=false; continue; }
+			// returns NULL ptr if no functor exists; remember that and shortcut
+			if(!I->functorCache.geom) {I->functorCache.geomExists=false; continue; }
+					
 		}
 		// arguments for the geom functor are in the reverse order (dispatcher would normally call goReverse).
 		// we don't remember the fact that is reverse, so we swap bodies within the interaction
@@ -113,21 +108,11 @@
 		bool wasReal=I->isReal();
 		bool geomCreated;
 		if(!scene->isPeriodic){
-			#ifdef YADE_DEVIRT_FUNCTORS
-				geomCreated=(*((IGeomFunctor::StaticFuncPtr)I->functorCache.geomPtr))(I->functorCache.geom.get(),b1->shape,b2->shape, *b1->state, *b2->state, Vector3r::Zero(), /*force*/false, I);
-			#else
-				geomCreated=I->functorCache.geom->go(b1->shape,b2->shape, *b1->state, *b2->state, Vector3r::Zero(), /*force*/false, I);
-			#endif
+			geomCreated=I->functorCache.geom->go(b1->shape,b2->shape, *b1->state, *b2->state, Vector3r::Zero(), /*force*/false, I);
 		} else { // handle periodicity
 			Vector3r shift2=cellHsize*I->cellDist.cast<Real>();
 			// in sheared cell, apply shear on the mutual position as well
-			//shift2=scene->cell->shearPt(shift2);
-			#ifdef YADE_DEVIRT_FUNCTORS
-				// cast back from void* first
-				geomCreated=(*((IGeomFunctor::StaticFuncPtr)I->functorCache.geomPtr))(I->functorCache.geom.get(),b1->shape,b2->shape,*b1->state,*b2->state,shift2,/*force*/false,I);
-			#else
-				geomCreated=I->functorCache.geom->go(b1->shape,b2->shape,*b1->state,*b2->state,shift2,/*force*/false,I);
-			#endif
+			geomCreated=I->functorCache.geom->go(b1->shape,b2->shape,*b1->state,*b2->state,shift2,/*force*/false,I);
 		}
 		if(unlikely(!geomCreated)){
 			if(wasReal) LOG_WARN("IGeomFunctor returned false on existing interaction!");

=== renamed file 'pkg/common/SubdomainOptimizer.cpp' => 'pkg/common/SubdomainBalancer.cpp'
--- pkg/common/SubdomainOptimizer.cpp	2010-12-01 11:09:53 +0000
+++ pkg/common/SubdomainBalancer.cpp	2010-12-13 12:11:43 +0000
@@ -1,15 +1,15 @@
 // © 2010 Václav Šmilauer <eu@xxxxxxxx>
 #ifdef YADE_SUBDOMAINS
 
-#include<yade/pkg/common/SubdomainOptimizer.hpp>
+#include<yade/pkg/common/SubdomainBalancer.hpp>
 #include<yade/pkg/dem/Clump.hpp>
 
-YADE_PLUGIN((SubdomainOptimizer));
-CREATE_LOGGER(SubdomainOptimizer);
+YADE_PLUGIN((SubdomainBalancer));
+CREATE_LOGGER(SubdomainBalancer);
 
 #ifdef YADE_OPENMP
 
-void SubdomainOptimizer::updateSceneBbox(){
+void SubdomainBalancer::updateSceneBbox(){
 	Real inf=std::numeric_limits<Real>::infinity();
 	mn=Vector3r(inf,inf,inf); mx=Vector3r(-inf,-inf,-inf);
 	nParticles=0;
@@ -17,7 +17,7 @@
 	else { mn=Vector3r::Zero(); mx=scene->cell->getSize(); }
 }
 
-void SubdomainOptimizer::initializeSplitPlanes(){
+void SubdomainBalancer::initializeSplitPlanes(){
 	// split planes for subdomains...
 	int nSubdom(scene->bodies->maxSubdomains);
 	assert(nSubdom>1); // the case ==1 should have been caught in ::action already
@@ -30,7 +30,7 @@
 		case 7: div="aaaaaa"; break;
 		case 8: div="abc"; break;
 		default:
-			throw std::runtime_error(("SubdomainOptimizer: unsupported number of subdomains ("+lexical_cast<string>(nSubdom)+"), currently only 1…8 is possible.").c_str());
+			throw std::runtime_error(("SubdomainBalancer: unsupported number of subdomains ("+lexical_cast<string>(nSubdom)+"), currently only 1…8 is possible.").c_str());
 	}
 	Vector3r axesExtents(mx-mn);
 	string axesBySizeStr;
@@ -43,7 +43,7 @@
 		for(size_t i=0; i<3; i++){ axesBySizeStr.push_back(axesBySize[i]==0 ? 'x' : (axesBySize[i]==1 ? 'y' : 'z')); }
 	} else {
 		if(axesOrder.size()!=3 || axesOrder.find('x')==string::npos || axesOrder.find('y')==string::npos || axesOrder.find('z')==string::npos){
-			throw std::invalid_argument(("SubdomainOptimizer: axesOrder must be a combination of 'x', 'y', 'z' characters (not '"+axesOrder+"')").c_str());
+			throw std::invalid_argument(("SubdomainBalancer: axesOrder must be a combination of 'x', 'y', 'z' characters (not '"+axesOrder+"')").c_str());
 		}
 		axesBySizeStr=axesOrder;
 	}
@@ -73,7 +73,7 @@
 	LOG_INFO("Established "<<nSubdom<<" subdomains, with split specification "<<div<<"="<<divXYZ<<".");
 }
 
-void SubdomainOptimizer::adjustSplitPlanes(){
+void SubdomainBalancer::adjustSplitPlanes(){
 	assert(nParticles>0);
 	FOREACH(SplitPlane& sp, splits){
 		assert(sp.aboveSplit>=0);
@@ -92,7 +92,7 @@
 	}
 }
 
-void SubdomainOptimizer::action(){
+void SubdomainBalancer::action(){
 	// check before we run that we are not useless
 	const int nSubdom(scene->bodies->maxSubdomains);
 	if(nSubdom==1){
@@ -156,7 +156,7 @@
 }
 
 #else
-void SubdomainOptimizer::action(){
+void SubdomainBalancer::action(){
 	LOG_INFO("Compiled without OpenMP support, no subdomains will be created; killing myself.");
 	dead=true;
 }

=== renamed file 'pkg/common/SubdomainOptimizer.hpp' => 'pkg/common/SubdomainBalancer.hpp'
--- pkg/common/SubdomainOptimizer.hpp	2010-11-30 13:51:41 +0000
+++ pkg/common/SubdomainBalancer.hpp	2010-12-13 12:11:43 +0000
@@ -7,7 +7,7 @@
 #include<yade/core/BodyContainer.hpp>
 #include<yade/pkg/common/PeriodicEngines.hpp>
 
-class SubdomainOptimizer: public PeriodicEngine{
+class SubdomainBalancer: public PeriodicEngine{
 	struct SplitPlane{
 		int ax;   // axis number
 		Real lim; // limit coordinate on axis ax 
@@ -28,7 +28,7 @@
 	void adjustSplitPlanes();
 public:
 	virtual void action();
-	YADE_CLASS_BASE_DOC_ATTRS_CTOR(SubdomainOptimizer,PeriodicEngine,"Assigns :yref:`bodies <Omega.bodies>` to spatially-defined subdomains, which increase performance with OpenMP builds -- each OpenMP thread is responsible for processing one subdomain (if the respective loop is parallelized). Using subdomains is not mandatory, though without them, OpenMP-enabled builds are not parallelized.\n\nIn the first run, subdomains are created by finding planes splitting the simulation domain the desired number of subdomains (2…8). Later, due to particle motion, particles within one subdomain might not be spatially close, and subdomains assignments should be renewed; the interval at which this engine should be run terefore depends on the nature of simulation.\n\n.. note:: Constructor changes default values of :yref:`initRun <PeriodicEngine::initRun>` to ``True`` and :yref:`iterPeriod <PeriodicEngine.iterPeriod>` to 500, to make it suitable for running without setting further arguments.",
+	YADE_CLASS_BASE_DOC_ATTRS_CTOR(SubdomainBalancer,PeriodicEngine,"Assigns :yref:`bodies <Omega.bodies>` to spatially-defined subdomains, which increase performance with OpenMP builds -- each OpenMP thread is responsible for processing one subdomain (if the respective loop is parallelized). Using subdomains is not mandatory, though without them, OpenMP-enabled builds are not parallelized.\n\nIn the first run, subdomains are created by finding planes splitting the simulation domain the desired number of subdomains (2…8). Later, due to particle motion, particles within one subdomain might not be spatially close, and subdomains assignments should be renewed; the interval at which this engine should be run terefore depends on the nature of simulation.\n\n.. note:: Constructor changes default values of :yref:`initRun <PeriodicEngine::initRun>` to ``True`` and :yref:`iterPeriod <PeriodicEngine.iterPeriod>` to 500, to make it suitable for running without setting further arguments.",
 		((bool,colorize,true,,"Change :yref:`colors <Shape.color>` of particles to show subdomain assignment visually."))
 		((string,axesOrder,"",,"Order of axes that determine intial splitting planes orientation; if not set, they are determined from total extents of the simulation (from the longest to the shortest one). Must be combination of *x*, *y*, *z*."))
 		// ((string,div,"",,"Initial division string; "))
@@ -37,6 +37,6 @@
 	);
 	DECLARE_LOGGER;
 };
-REGISTER_SERIALIZABLE(SubdomainOptimizer);
+REGISTER_SERIALIZABLE(SubdomainBalancer);
 
 #endif /* YADE_SUBDOMAINS */

=== modified file 'pkg/dem/ConcretePM.cpp'
--- pkg/dem/ConcretePM.cpp	2010-11-07 11:46:20 +0000
+++ pkg/dem/ConcretePM.cpp	2010-12-13 12:11:43 +0000
@@ -4,7 +4,7 @@
 #include<yade/pkg/dem/DemXDofGeom.hpp>
 #include<yade/pkg/dem/Shop.hpp>
 
-YADE_PLUGIN((CpmState)(CpmMat)(Ip2_CpmMat_CpmMat_CpmPhys)(CpmPhys)(Law2_Dem3DofGeom_CpmPhys_Cpm)(Law2_ScGeom_CpmPhys_Cpm)
+YADE_PLUGIN((CpmState)(CpmMat)(Ip2_CpmMat_CpmMat_CpmPhys)(CpmPhys)(Law2_Dem3DofGeom_CpmPhys_Cpm)
 	#ifdef YADE_OPENGL
 		(Gl1_CpmPhys)
 	#endif	
@@ -235,7 +235,7 @@
 #endif
 }
 
-
+#if 0
 CREATE_LOGGER(Law2_ScGeom_CpmPhys_Cpm);
 void Law2_ScGeom_CpmPhys_Cpm::go(shared_ptr<IGeom>& _geom, shared_ptr<IPhys>& _phys, Interaction* I){
 	ScGeom* geom=static_cast<ScGeom*>(_geom.get());
@@ -303,7 +303,7 @@
 
 	applyForceAtContactPoint(BC->normalForce+BC->shearForce,geom->contactPoint,I->getId1(),pos1,I->getId2(),pos2);
 }
-
+#endif
 
 #ifdef YADE_OPENGL
 	/********************** Gl1_CpmPhys ****************************/

=== modified file 'pkg/dem/ConcretePM.hpp'
--- pkg/dem/ConcretePM.hpp	2010-11-07 11:46:20 +0000
+++ pkg/dem/ConcretePM.hpp	2010-12-13 12:11:43 +0000
@@ -48,7 +48,6 @@
 
 #include<yade/pkg/common/ElastMat.hpp>
 #include<yade/pkg/common/Dispatching.hpp>
-#include<yade/pkg/dem/ScGeom.hpp>
 #include<yade/pkg/common/PeriodicEngines.hpp>
 #include<yade/pkg/common/NormShearPhys.hpp>
 
@@ -200,6 +199,7 @@
 };
 REGISTER_SERIALIZABLE(Law2_Dem3DofGeom_CpmPhys_Cpm);
 
+#if 0
 class Law2_ScGeom_CpmPhys_Cpm: public LawFunctor{
 	public:
 	void go(shared_ptr<IGeom>& _geom, shared_ptr<IPhys>& _phys, Interaction* I);
@@ -210,7 +210,7 @@
 	DECLARE_LOGGER;
 };
 REGISTER_SERIALIZABLE(Law2_ScGeom_CpmPhys_Cpm);
-		
+#endif	
 
 
 

=== modified file 'pkg/dem/Dem3DofGeom_FacetSphere.cpp'
--- pkg/dem/Dem3DofGeom_FacetSphere.cpp	2010-11-07 11:46:20 +0000
+++ pkg/dem/Dem3DofGeom_FacetSphere.cpp	2010-12-13 12:11:43 +0000
@@ -38,15 +38,6 @@
 	return (displacementTMax/scale)*(1-scale);
 }
 
-Vector3r Dem3DofGeom_FacetSphere::scaleDisplacementT(Real multiplier){
-	assert(multiplier>=0 && multiplier<=1);
-	Vector3r p1=contPtInTgPlane1(), p2=contPtInTgPlane2();
-	Vector3r diff=.5*(multiplier-1)*(p2-p1);
-	setTgPlanePts(p1-diff,p2+diff);
-	return diff*2.0;
-}
-
-
 CREATE_LOGGER(Ig2_Facet_Sphere_Dem3DofGeom);
 bool Ig2_Facet_Sphere_Dem3DofGeom::go(const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& state2, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c){
 	Facet* facet=static_cast<Facet*>(cm1.get());

=== modified file 'pkg/dem/Dem3DofGeom_FacetSphere.hpp'
--- pkg/dem/Dem3DofGeom_FacetSphere.hpp	2010-11-07 11:46:20 +0000
+++ pkg/dem/Dem3DofGeom_FacetSphere.hpp	2010-12-13 12:11:43 +0000
@@ -16,7 +16,6 @@
 		virtual Real displacementN(){ return (se32.position-contactPoint).norm()-refLength;}
 		virtual Vector3r displacementT(){ relocateContactPoints(); return contPtInTgPlane2()-contPtInTgPlane1(); }
 		virtual Real slipToDisplacementTMax(Real displacementTMax);
-		virtual Vector3r scaleDisplacementT(Real multiplier);
 		/***** end API ******/
 
 		void setTgPlanePts(const Vector3r&, const Vector3r&);

=== modified file 'pkg/dem/Dem3DofGeom_SphereSphere.cpp'
--- pkg/dem/Dem3DofGeom_SphereSphere.cpp	2010-11-07 11:46:20 +0000
+++ pkg/dem/Dem3DofGeom_SphereSphere.cpp	2010-12-13 12:11:43 +0000
@@ -78,17 +78,6 @@
 	return 2*diff.norm();
 }
 
-/*! As above : perform slip of the projected contact points. Here, we directly give the multiplier applied on the distance for faster results.
- * The plastic displacement (vector) is returned.
- */
-Vector3r Dem3DofGeom_SphereSphere::scaleDisplacementT(Real multiplier){
-	assert(multiplier>=0 && multiplier<=1);
-	Vector3r p1=contPtInTgPlane1(), p2=contPtInTgPlane2();
-	Vector3r diff=.5*(multiplier-1)*(p2-p1);
-	setTgPlanePts(p1-diff,p2+diff);
-	return diff*2.0;
-}
-
 
 /* Move contact point on both spheres in such way that their relative position (displacementT) is the same;
  * this should be done regularly to ensure that the angle doesn't go over π, since then quaternion would

=== modified file 'pkg/dem/Dem3DofGeom_SphereSphere.hpp'
--- pkg/dem/Dem3DofGeom_SphereSphere.hpp	2010-11-07 11:46:20 +0000
+++ pkg/dem/Dem3DofGeom_SphereSphere.hpp	2010-12-13 12:11:43 +0000
@@ -28,7 +28,6 @@
 			#endif
 		}
 		virtual Real slipToDisplacementTMax(Real displacementTMax);
-		virtual Vector3r scaleDisplacementT(Real multiplier);
 		/********* end API ***********/
 
 	YADE_CLASS_BASE_DOC_ATTRS_INIT_CTOR_PY(Dem3DofGeom_SphereSphere,Dem3DofGeom,"Class representing 2 spheres in contact which computes 3 degrees of freedom (normal and shear deformation).",

=== modified file 'pkg/dem/Dem3DofGeom_WallSphere.cpp'
--- pkg/dem/Dem3DofGeom_WallSphere.cpp	2010-11-07 11:46:20 +0000
+++ pkg/dem/Dem3DofGeom_WallSphere.cpp	2010-12-13 12:11:43 +0000
@@ -38,14 +38,6 @@
 	return (displacementTMax/scale)*(1-scale);
 }
 
-Vector3r Dem3DofGeom_WallSphere::scaleDisplacementT(Real multiplier){
-	assert(multiplier>=0 && multiplier<=1);
-	Vector3r p1=contPtInTgPlane1(), p2=contPtInTgPlane2();
-	Vector3r diff=.5*(multiplier-1)*(p2-p1);
-	setTgPlanePts(p1-diff,p2+diff);
-	return diff*2.0;
-}
-
 CREATE_LOGGER(Ig2_Wall_Sphere_Dem3DofGeom);
 bool Ig2_Wall_Sphere_Dem3DofGeom::go(const shared_ptr<Shape>& cm1, const shared_ptr<Shape>& cm2, const State& state1, const State& state2, const Vector3r& shift2, const bool& force, const shared_ptr<Interaction>& c){
 	Wall* wall=static_cast<Wall*>(cm1.get());

=== modified file 'pkg/dem/Dem3DofGeom_WallSphere.hpp'
--- pkg/dem/Dem3DofGeom_WallSphere.hpp	2010-11-07 11:46:20 +0000
+++ pkg/dem/Dem3DofGeom_WallSphere.hpp	2010-12-13 12:11:43 +0000
@@ -14,7 +14,6 @@
 		virtual Real displacementN(){ return (se32.position-contactPoint).norm()-refLength;}
 		virtual Vector3r displacementT(){ relocateContactPoints(); return contPtInTgPlane2()-contPtInTgPlane1(); }
 		virtual Real slipToDisplacementTMax(Real displacementTMax);
-		virtual Vector3r scaleDisplacementT(Real multiplier);
 		/***** end API ******/
 
 		void setTgPlanePts(const Vector3r&, const Vector3r&);

=== modified file 'pkg/dem/DemXDofGeom.hpp'
--- pkg/dem/DemXDofGeom.hpp	2010-10-13 16:23:08 +0000
+++ pkg/dem/DemXDofGeom.hpp	2010-12-13 12:11:43 +0000
@@ -31,7 +31,6 @@
 		virtual Real displacementN();
 		virtual Vector3r displacementT(){throw;}
 		virtual Real slipToDisplacementTMax(Real displacementTMax){throw;}; // plasticity
-		virtual Vector3r scaleDisplacementT(Real multiplier){throw;}; // plasticity (variant using multiplier dispMax/disp)
 		// reference radii, for contact stiffness computation; set to negative for nonsense values
 		// end API
 

=== modified file 'pkg/dem/ElasticContactLaw.cpp'
--- pkg/dem/ElasticContactLaw.cpp	2010-12-06 19:24:20 +0000
+++ pkg/dem/ElasticContactLaw.cpp	2010-12-13 12:11:43 +0000
@@ -106,15 +106,7 @@
 	phys->normalForce=phys->kn*displN*geom->normal;
 	Real maxFsSq=phys->normalForce.squaredNorm()*pow(phys->tangensOfFrictionAngle,2);
 	Vector3r trialFs=phys->ks*geom->displacementT();
-
-//	FIXME : This is generating bug https://bugs.launchpad.net/bugs/585898
-//  	Real trialFsSq = trialFs.squaredNorm();
-//	if(trialFsSq>maxFsSq){
-// 		Real multiplier=sqrt(maxFsSq/trialFsSq);
-// 		geom->scaleDisplacementT(multiplier); trialFs*=multiplier;}
-	//Workaround start
 	if(trialFs.squaredNorm()>maxFsSq){ geom->slipToDisplacementTMax(sqrt(maxFsSq)/phys->ks); trialFs*=sqrt(maxFsSq/(trialFs.squaredNorm()));}
-	//Workaround end
 	phys->shearForce=trialFs;
 	applyForceAtContactPoint(phys->normalForce+trialFs,geom->contactPoint,contact->getId1(),geom->se31.position,contact->getId2(),geom->se32.position);
 }

=== modified file 'pkg/dem/L3Geom.hpp'
--- pkg/dem/L3Geom.hpp	2010-12-12 13:55:12 +0000
+++ pkg/dem/L3Geom.hpp	2010-12-13 12:11:43 +0000
@@ -88,7 +88,7 @@
 	enum { APPROX_NO_RENORM_TRSF=1, APPROX_NO_MID_TRSF=2, APPROX_NO_MID_NORMAL=4, APPROX_NO_RENORM_MID_NORMAL=8 };
 
 	YADE_CLASS_BASE_DOC_ATTRS(Ig2_Sphere_Sphere_L3Geom_Inc,IGeomFunctor,"Incrementally compute :yref:`L3Geom` for contact of 2 spheres. Detailed documentation in py/_extraDocs.py",
-		((bool,noRatch,true,,"See :yref:`ScGeom.avoidGranularRatcheting`."))
+		((bool,noRatch,true,,"See :yref:`Ig2_Sphere_Sphere_ScGeom.avoidGranularRatcheting`."))
 		((Real,distFactor,1,,"Create interaction if spheres are not futher than distFactor*(r1+r2)."))
 		((int,approxMask,0,,"Selectively enable geometrical approximations (bitmask); add the values for approximations to be enabled.\n\n"
 		"== ===============================================================\n"

=== modified file 'py/_eudoxos.cpp'
--- py/_eudoxos.cpp	2010-11-07 11:46:20 +0000
+++ py/_eudoxos.cpp	2010-12-13 12:11:43 +0000
@@ -6,6 +6,7 @@
 #include<boost/python.hpp>
 #include<yade/extra/boost_python_len.hpp>
 #include<yade/pkg/dem/Shop.hpp>
+#include<yade/pkg/dem/DemXDofGeom.hpp>
 
 #ifdef YADE_VTK
 	#pragma GCC diagnostic ignored "-Wdeprecated"

=== modified file 'py/system.py'
--- py/system.py	2010-11-15 09:59:10 +0000
+++ py/system.py	2010-12-13 12:11:43 +0000
@@ -28,65 +28,6 @@
 # if old class name is used, the new object is constructed and a warning is issued about old name being used
 # keep chronologically ordered, oldest first; script/rename-class.py appends at the end
 _deprecated={
-	'CpmPhysDamageColorizer':'CpmStateUpdater', # renamed 10.10.2009
-	'GLDraw_Dem3DofGeom_FacetSphere':'Gl1_Dem3DofGeom_FacetSphere', # renamed 15.11.2009
-	'PeriodicInsertionSortCollider':'InsertionSortCollider',	# integrated 25.11.2009
-	'BoundingVolumeMetaEngine':'BoundDispatcher', # Tue Dec  1 14:28:29 2009, vaclav@flux  ## was BoundingVolumeDispatcher, generating double warning
-	'BoundingVolumeEngineUnit':'BoundFunctor', # Tue Dec  1 14:39:53 2009, vaclav@flux ## was BoundingVolumeFunctor, generating double warning
-	'InteractionGeometryMetaEngine':'InteractionGeometryDispatcher', # Tue Dec  1 14:40:36 2009, vaclav@flux
-	'InteractionPhysicsMetaEngine':'InteractionPhysicsDispatcher', # Tue Dec  1 14:40:53 2009, vaclav@flux
-	'InteractionPhysicsEngineUnit':'InteractionPhysicsFunctor', # Tue Dec  1 14:41:19 2009, vaclav@flux
-	'InteractionGeometryEngineUnit':'InteractionGeometryFunctor', # Tue Dec  1 14:41:56 2009, vaclav@flux
-	'BoundingVolume':'Bound', # Fri Dec  4 23:44:14 2009, vaclav@flux
-	'BoundingVolumeDispatcher':'BoundDispatcher', # Fri Dec  4 23:44:27 2009, vaclav@flux
-	'BoundingVolumeFunctor':'BoundFunctor', # Fri Dec  4 23:44:34 2009, vaclav@flux
-	'InteractingGeometry':'Shape', # Fri Dec  4 23:48:13 2009, vaclav@flux
-	'ConstitutiveLaw':'LawFunctor', # Fri Dec  4 23:57:51 2009, vaclav@flux
-	'ConstitutiveLawDispatcher':'LawDispatcher', # Fri Dec  4 23:57:59 2009, vaclav@flux
-	'ef2_Sphere_Sphere_Dem3DofGeom':'Ig2_Sphere_Sphere_Dem3DofGeom', # Sat Dec  5 00:02:03 2009, vaclav@flux
-	'ef2_Facet_Sphere_Dem3DofGeom':'Ig2_Facet_Sphere_Dem3DofGeom', # Sat Dec  5 00:02:13 2009, vaclav@flux
-	'ef2_Wall_Sphere_Dem3DofGeom':'Ig2_Wall_Sphere_Dem3DofGeom', # Sat Dec  5 00:02:22 2009, vaclav@flux
-	'NewtonsDampedLaw':'NewtonIntegrator', # Wed Dec  9 17:44:15 2009, vaclav@flux
-	'StandAloneEngine':'GlobalEngine', # Wed Dec  9 17:46:12 2009, vaclav@flux
-	'DeusExMachina':'PartialEngine', # Wed Dec  9 17:53:06 2009, vaclav@flux
-	## 'Sphere':'SphereModel', # 11/12/2009, vaclav@flux   ### comment out to prevent loop, since InteractingSphere was renamed to Sphere later
-	## 'Facet':'FacetModel', # Fri Dec 11 15:27:41 2009, vaclav@flux   ### dtto
-	## 'Box':'BoxModel', # Fri Dec 11 15:39:44 2009, vaclav@flux       ### dtto
-	'GLDrawSphere':'GLDrawSphereModel', # Fri Dec 11 15:43:31 2009, vaclav@flux
-	'GLDrawBox':'GLDrawBoxModel', # Fri Dec 11 15:43:50 2009, vaclav@flux
-	'GLDrawFacet':'GLDrawFacetModel', # Fri Dec 11 15:44:04 2009, vaclav@flux
-	'GLDrawInteractingGeometryFunctor':'GlShapeFunctor', # Fri Dec 11 16:08:16 2009, vaclav@flux
-	'GLDrawGeometricalModelFunctor':'GlGeometricalModelFunctor', # Fri Dec 11 16:08:40 2009, vaclav@flux
-	'GLDrawBoundingVolumeFunctor':'GlBoundFunctor', # Fri Dec 11 16:09:16 2009, vaclav@flux
-	'GLDrawInteractionGeometryFunctor':'GlInteractionGeometryFunctor', # Fri Dec 11 16:09:48 2009, vaclav@flux
-	'GLDrawInteractionPhysicsFunctor':'GlInteractionPhysicsFunctor', # Fri Dec 11 16:10:02 2009, vaclav@flux
-	'GLDrawStateFunctor':'GlStateFunctor', # Fri Dec 11 16:10:29 2009, vaclav@flux
-	'GLDrawInteractingSphere':'Gl1_Sphere', # Fri Dec 11 16:20:51 2009, vaclav@flux
-	'GLDrawInteractingFacet':'Gl1_Facet', # Fri Dec 11 16:21:06 2009, vaclav@flux
-	'GLDrawInteractingBox':'Gl1_Box', # Fri Dec 11 16:21:17 2009, vaclav@flux
-	'TetraDraw':'Gl1_Tetra', # Fri Dec 11 16:22:18 2009, vaclav@flux
-	'MetaInteractingGeometry':'SceneShape', # Fri Dec 11 16:56:06 2009, vaclav@flux
-	'GLDrawMetaInteractingGeometry':'Gl1_SceneShape', # Fri Dec 11 17:00:00 2009, vaclav@flux
-	'GLDrawMetaInteractingGeometry':'Gl1_SceneShape', # Fri Dec 11 17:10:17 2009, vaclav@flux
-	'SpheresContactGeometry':'ScGeom', # Sun Dec 13 20:59:09 2009, vaclav@flux
-	'InteractingSphere2InteractingSphere4SpheresContactGeometry':'Ig2_Sphere_Sphere_ScGeom', # Sun Dec 13 21:02:31 2009, vaclav@flux
-	'InteractingFacet2InteractingSphere4SpheresContactGeometry':'Ig2_Facet_Sphere_ScGeom', # Sun Dec 13 21:02:57 2009, vaclav@flux
-	'InteractingBox2InteractingSphere4SpheresContactGeometry':'Ig2_Box_Sphere_ScGeom', # Sun Dec 13 21:03:10 2009, vaclav@flux
-	'InteractingSphere':'Sphere', # Sun Dec 13 21:13:40 2009, vaclav@flux
-	'InteractingFacet':'Facet', # Sun Dec 13 21:15:07 2009, vaclav@flux
-	'InteractingBox':'Box', # Sun Dec 13 21:15:16 2009, vaclav@flux
-	'MetaInteractingGeometry2AABB':'DontUseClass_MetaInteractingGeometry2AABB__youCanRemoveItSafelyFromYourSimulation_itWillBeRemovedInTheFutureCompletely', # Mon Dec 14 09:33:20 2009, vaclav@flux
-	'InteractingSphere2AABB':'Bo1_Sphere_Aabb', # Thu Dec 17 08:59:29 2009, vaclav@falx
-	'InteractingFacet2AABB':'Bo1_Facet_Aabb', # Thu Dec 17 08:59:56 2009, vaclav@falx
-	'InteractingBox2AABB':'Bo1_Box_Aabb', # Thu Dec 17 09:00:14 2009, vaclav@falx
-	'Wall2AABB':'Bo1_Wall_Aabb', # Thu Dec 17 09:01:07 2009, vaclav@falx
-	'AABB':'Aabb', # Thu Dec 17 09:01:35 2009, vaclav@falx
-	'GLDrawAABB':'Gl1_Aabb', # Thu Dec 17 09:07:58 2009, vaclav@falx
-	'GLDraw_Dem3DofGeom_SphereSphere':'Gl1_Dem3DofGeom_SphereSphere', # Fri Dec 18 23:01:39 2009, vaclav@flux
-	'BexContainer':'ForceContainer', # Fri Dec 25 11:43:44 2009, vaclav@flux
-	'BexResetter':'ForceResetter', # Fri Dec 25 11:44:01 2009, vaclav@flux
-	'PhysicalActionContainerResetter':'ForceResetter', # Fri Dec 25 11:45:32 2009, vaclav@flux
-	'PhysicalActionContainerReseter':'ForceResetter', # Fri Dec 25 11:45:51 2009, vaclav@flux
 	'GranularMat':'FrictMat', # Sun Jan 10 09:26:45 2010, vaclav@flux
 	'SimpleElasticRelationships':'Ip2_FrictMat_FrictMat_NormShearPhys', # Sun Jan 10 09:28:17 2010, vaclav@flux
 	'NormalInteraction':'NormPhys', # Sun Jan 10 09:28:56 2010, vaclav@flux

=== modified file 'scripts/test/clumpPack.py'
--- scripts/test/clumpPack.py	2010-12-10 14:52:22 +0000
+++ scripts/test/clumpPack.py	2010-12-13 12:11:43 +0000
@@ -9,7 +9,7 @@
 O.bodies.append(utils.wall(position=0,axis=2))
 
 O.engines=[
-	SubdomainOptimizer(),
+	SubdomainBalancer(),
 	ForceResetter(),
 	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Wall_Aabb()]),
 	InteractionLoop(

=== modified file 'scripts/test/law-test.py'
--- scripts/test/law-test.py	2010-12-06 22:58:31 +0000
+++ scripts/test/law-test.py	2010-12-13 12:11:43 +0000
@@ -38,7 +38,7 @@
 		#[Ig2_Sphere_Sphere_L3Geom_Inc(approxMask=63)],[Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_L3Geom_FrictPhys_ElPerfPl(noBreak=True,noSlip=False)] # L3Geom
 		[Ig2_Sphere_Sphere_L6Geom_Inc(approxMask=63)],[Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_L6Geom_FrictPhys_Linear(charLen=1)] # L6Geom
 	),
-	LawTester(ids=[0,1],path=[(0,0,0)]*7+[(-1e-5,0,0),(-1e-5,.1,.1)],rotPath=[(0,.2,0),(0,0,0),(0,0,.2),(0,0,0),(.2,0,0),(-.2,0,0),(0,0,0)],pathSteps=[10],doneHook='tester.dead=True; O.pause();',label='tester',rotWeight=0),
+	LawTester(ids=[0,1],disPath=[(0,0,0)]*7+[(-1e-5,0,0),(-1e-5,.1,.1)],rotPath=[(0,.2,0),(0,0,0),(0,0,.2),(0,0,0),(.2,0,0),(-.2,0,0),(0,0,0)],pathSteps=[10],doneHook='tester.dead=True; O.pause();',label='tester',rotWeight=0),
 	#LawTester(ids=[0,1],path=[
 	#	(-1e-5,0,0),(-.1,0,0),(-.1,.1,0),(-1e-5,.1,0), # towards, shear, back to intial normal distance
 	#	(-.02,.1,.1),(-.02,-.1,.1),(-.02,-.1,-.1),(-.02,.1,-.1),(-.02,.1,.1), # go in square in the shear plane without changing normal deformation
@@ -50,10 +50,10 @@
 def addPlotData():
 	i=O.interactions[0,1]
 	plot.addData(
-		un=tester.ptOurs[0],us1=tester.ptOurs[1],us2=tester.ptOurs[2],
-		ung=tester.ptGeom[0],us1g=tester.ptGeom[1],us2g=tester.ptGeom[2],
-		phiX=tester.rotOurs[0],phiY=tester.rotOurs[1],phiZ=tester.rotOurs[2],
-		phiXg=tester.rotGeom[0],phiYg=tester.rotGeom[1],phiZg=tester.rotGeom[2],
+		un=tester.uTest[0],us1=tester.uTest[1],us2=tester.uTest[2],
+		ung=tester.uGeom[0],us1g=tester.uGeom[1],us2g=tester.uGeom[2],
+		phiX=tester.uTest[3],phiY=tester.uTest[4],phiZ=tester.uTest[5],
+		phiXg=tester.uGeom[3],phiYg=tester.uGeom[4],phiZg=tester.uGeom[5],
 		i=O.iter,Fs=i.phys.shearForce.norm(),Fn=i.phys.normalForce.norm(),Tx=O.forces.t(0)[0],Tyz=sqrt(O.forces.t(0)[1]**2+O.forces.t(0)[2]**2)
 	)
 plot.plots={'us1':('us2',),'Fn':('Fs',),'i':('un','us1','us2'),' i':('Fs','Fn','Tx','Tyz'),'  i':('ung','us1g','us2g'),'i  ':('phiX','phiXg','phiY','phiYg','phiZ','phiZg')}  #'ung','us1g','us2g'

=== renamed file 'scripts/test/subdomain-optimizer.py' => 'scripts/test/subdomain-balancer.py'
--- scripts/test/subdomain-optimizer.py	2010-11-30 13:51:41 +0000
+++ scripts/test/subdomain-balancer.py	2010-12-13 12:11:43 +0000
@@ -1,5 +1,5 @@
 from yade import pack,log,timing,utils
-log.setLevel("SubdomainOptimizer",log.INFO)
+log.setLevel("SubdomainBalancer",log.INFO)
 #log.setLevel("BodyContainer",log.TRACE)
 utils.readParamsFromTable(noTableOk=True,num=12000)
 import yade.params.table
@@ -11,7 +11,7 @@
 #O.bodies.append(utils.wall((0,0,0),axis=0))
 #O.bodies.append(utils.wall((0,2,0),axis=1))
 #O.bodies.append(utils.wall((2,0,0),axis=0))
-O.engines=([SubdomainOptimizer(axesOrder='xyz',colorize=True)] if 'SubdomainOptimizer' in dir() else [])+[
+O.engines=([SubdomainBalancer(axesOrder='xyz',colorize=True)] if 'SubdomainBalancer' in dir() else [])+[
 	ForceResetter(),
 	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Wall_Aabb()],sweepLength=.05*.05),
 	InteractionLoop([Ig2_Sphere_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom()],[Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_ScGeom_FrictPhys_CundallStrack()]),


Follow ups