yade-dev team mailing list archive
-
yade-dev team
-
Mailing list archive
-
Message #06888
[Branch ~yade-dev/yade/trunk] Rev 2696: - Move older or redundant interface between #ifdef CELL_BACKW_COMPAT guards.
------------------------------------------------------------
revno: 2696
committer: Bruno Chareyre <bruno.chareyre@xxxxxxxxxxx>
branch nick: yade
timestamp: Sun 2011-01-30 20:03:48 +0100
message:
- Move older or redundant interface between #ifdef CELL_BACKW_COMPAT guards.
- Replace refSize by current size in PeriTriax
- forget adding the "s" in "cell.sizes", since existing scripts are already using "cell.size" -> fix sphinx doc about this.
modified:
core/Cell.hpp
doc/sphinx/formulation.rst
pkg/dem/PeriIsoCompressor.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 'core/Cell.hpp'
--- core/Cell.hpp 2011-01-30 18:15:40 +0000
+++ core/Cell.hpp 2011-01-30 19:03:48 +0000
@@ -17,6 +17,8 @@
#include<yade/lib/serialization/Serializable.hpp>
#include<yade/lib/base/Math.hpp>
+#define CELL_BACKW_COMPAT
+
class Cell: public Serializable{
public:
//! Get current size
@@ -92,16 +94,13 @@
Vector3r intrShiftVel(const Vector3i& cellDist) const { if(homoDeform==HOMO_VEL || homoDeform==HOMO_VEL_2ND) return velGrad*hSize*cellDist.cast<Real>(); return Vector3r::Zero(); }
// return body velocity while taking away mean field velocity (coming from velGrad) if the mean field velocity is applied on velocity
Vector3r bodyFluctuationVel(const Vector3r& pos, const Vector3r& vel) const { if(homoDeform==HOMO_VEL || homoDeform==HOMO_VEL_2ND) return (vel-velGrad*pos); return vel; }
-
-
-
-
// get/set mechanically undeformed shape; setting resets trsf to identity
Matrix3r getHSize() const { return hSize; }
- void setHSize(const Matrix3r& m){ hSize=refHSize=m; trsf=Matrix3r::Identity(); postLoad(*this); }
+ void setHSize(const Matrix3r& m){ hSize=refHSize=m; trsf=Matrix3r::Identity(); postLoad(*this); }
// set current transformation; has no influence on current configuration (hSize); sets display refHSize as side-effect
Matrix3r getTrsf() const { return trsf; }
void setTrsf(const Matrix3r& m){ refHSize=hSize; trsf=m; postLoad(*this); }
+#ifdef CELL_BACKW_COMPAT
// get undeformed shape
Matrix3r getHSize0() const { return _invTrsf*hSize; }
// edge lengths of the undeformed shape
@@ -116,7 +115,7 @@
// set box shape of the cell
void setBox(const Vector3r& size){ setHSize(size.asDiagonal()); postLoad(*this); }
void setBox3(const Real& s0, const Real& s1, const Real& s2){ setBox(Vector3r(s0,s1,s2)); }
-
+#endif
// return current cell volume
Real getVolume() const {return hSize.determinant();}
void postLoad(Cell&){ integrateAndUpdate(0); }
@@ -141,15 +140,16 @@
/*py*/
// override some attributes above
.add_property("hSize",&Cell::getHSize,&Cell::setHSize,"Base cell vectors (columns of the matrix), updated at every step from :yref:`velGrad<Cell.velGrad>` (:yref:`trsf<Cell.trsf>` accumulates applied :yref:`velGrad<Cell.velGrad>` transformations). Setting *hSize* directly results in :yref:`trsf<Cell.trsf>` being set to identity.")
+#ifdef CELL_BACKW_COMPAT
.add_property("refSize",&Cell::getRefSize,&Cell::setRefSize,"Reference size of the cell (lengths of initial cell vectors, i.e. column norms of :yref:`hSize<Cell.hSize>`).\n\n.. note:: Modifying this value is deprecated, use :yref:`setBox<Cell.setBox>` instead.\n\n")
- .add_property("trsf",&Cell::getTrsf,&Cell::setTrsf,"Current transformation matrix of the cell with regards to the initial configuration.")
- // useful properties
.add_property("hSize0",&Cell::getHSize0,"Value of untransformed hSize, with respect to current :yref:`trsf<Cell.trsf>` (computed as :yref:`invTrsf<Cell.invTrsf>` Ã :yref:`hSize<Cell.hSize>`.")
- .add_property("sizes",&Cell::getSize_copy,&Cell::setSize,"Current size of the cell, i.e. lengths of the 3 cell lateral vectors contained in :yref:`Cell.hSize` columns. Updated automatically at every step.")
- .add_property("volume",&Cell::getVolume,"Current volume of the cell.")
- // functions
.def("setBox",&Cell::setBox,"Set :yref:`Cell` shape to be rectangular, with dimensions along axes specified by given argument. Shorthand for assigning diagonal matrix with respective entries to :yref:`hSize<Cell.hSize>`.")
.def("setBox",&Cell::setBox3,"Set :yref:`Cell` shape to be rectangular, with dimensions along $x$, $y$, $z$ specified by arguments. Shorthand for assigning diagonal matrix with the respective entries to :yref:`hSize<Cell.hSize>`.")
+#endif
+ .add_property("trsf",&Cell::getTrsf,&Cell::setTrsf,"Current transformation matrix of the cell with regards to the initial configuration.")
+ // useful properties
+ .add_property("size",&Cell::getSize_copy,&Cell::setSize,"Current size of the cell, i.e. lengths of the 3 cell lateral vectors contained in :yref:`Cell.hSize` columns. Updated automatically at every step.")
+ .add_property("volume",&Cell::getVolume,"Current volume of the cell.")
// debugging only
.def("wrap",&Cell::wrapShearedPt_py,"Transform an arbitrary point into a point in the reference cell")
.def("unshearPt",&Cell::unshearPt,"Apply inverse shear on the point (removes skew+rot of the cell)")
=== modified file 'doc/sphinx/formulation.rst'
--- doc/sphinx/formulation.rst 2011-01-30 18:03:29 +0000
+++ doc/sphinx/formulation.rst 2011-01-30 19:03:48 +0000
@@ -837,7 +837,7 @@
============================
While most DEM simulations happen in $R^3$ space, it is frequently useful to avoid boundary effects by using periodic space instead. In order to satisfy periodicity conditions, periodic space is created by repetition of parallelepiped-shaped cell. In Yade, periodic space is implemented in the :yref:`Cell` class. The geometry of the cell in the reference coordinates system is defined by three edges of the parallepiped. The corresponding base vectors are stored in the columns of matrix :yref:`Cell.hSize`.
-The initial :yref:`Cell.hSize` can be explicitely defined as a 3x3 matrix at the begining of the simulation. There are no restricitions on the possible shapes: any parallelepiped is accepted as the initial undeformed period. If the base vectors are axis-aligned, defining the sizes of the cell along each axis can be more conveninent than defining the full hSize matrix; in that case one can simply define the vector :yref:`Cell.sizes`, reprensenting the lenghts of base vectors.
+The initial :yref:`Cell.hSize` can be explicitely defined as a 3x3 matrix at the begining of the simulation. There are no restricitions on the possible shapes: any parallelepiped is accepted as the initial undeformed period. If the base vectors are axis-aligned, defining the sizes of the cell along each axis can be more conveninent than defining the full hSize matrix; in that case one can simply define the vector :yref:`Cell.size`, reprensenting the lenghts of base vectors.
The deformation of the cell over time is defined via a matrix representing the gradient of an homogeneous velocity field $\nabla \vec{v}$ (:yref:`Cell.velGrad`). This gradient represents arbitrary combinations of rotations and stretches. It can be imposed externaly or updated by engines (see :yref:`PeriTriaxController` or :yref:`Peri3dController`) in order to reach target strain values or to maintain some prescribed stress.
The velocity gradient is integrated automatically over time, and the cumulated transformation is reflected in the transformation matrix $\mat{F}$ (:yref:`Cell.trsf`). :yref:`Cell.hSize` will also be updated. The update reads (it is similar for hSize), with $I$ the identity matrix:
=== modified file 'pkg/dem/PeriIsoCompressor.cpp'
--- pkg/dem/PeriIsoCompressor.cpp 2011-01-30 15:43:18 +0000
+++ pkg/dem/PeriIsoCompressor.cpp 2011-01-30 19:03:48 +0000
@@ -144,7 +144,11 @@
//FIXME : this is wrong I think (almost sure, B.)
Vector3r cellArea=Vector3r(cellSize[1]*cellSize[2],cellSize[0]*cellSize[2],cellSize[0]*cellSize[1]);
// initial updates
+#ifdef CELL_BACKW_COMPAT
const Vector3r refSize=scene->cell->getRefSize();
+#else
+ const Vector3r refSize=cellSize;
+#endif
if (maxBodySpan[0]<=0){
FOREACH(const shared_ptr<Body>& b,*scene->bodies){
if(!b || !b->bound) continue;