← Back to team overview

yade-dev team mailing list archive

[Branch ~yade-pkg/yade/git-trunk] Rev 3383: -update boundary attributes

 

------------------------------------------------------------
revno: 3383
committer: Chao Yuan <chaoyuan2012@xxxxxxxxx>
timestamp: Wed 2013-07-31 17:11:24 +0200
message:
  -update boundary attributes
modified:
  pkg/dem/UnsaturatedEngine.cpp
  pkg/dem/UnsaturatedEngine.hpp


--
lp:yade
https://code.launchpad.net/~yade-pkg/yade/git-trunk

Your team Yade developers is subscribed to branch lp:yade.
To unsubscribe from this branch go to https://code.launchpad.net/~yade-pkg/yade/git-trunk/+edit-subscription
=== modified file 'pkg/dem/UnsaturatedEngine.cpp'
--- pkg/dem/UnsaturatedEngine.cpp	2013-07-30 09:46:10 +0000
+++ pkg/dem/UnsaturatedEngine.cpp	2013-07-31 15:11:24 +0000
@@ -148,7 +148,8 @@
     Finite_cells_iterator cell_end = flow->T[flow->currentTes].Triangulation().finite_cells_end();
     for ( Finite_cells_iterator cell = flow->T[flow->currentTes].Triangulation().finite_cells_begin(); cell != cell_end; cell++ ) {
         if (cell->info().isAirReservoir == true)
-            cell->info().p() = Pressure_BOTTOM_Boundary;//FIXME:how to change cell inside pressure to boundary condition.?
+//             cell->info().p() = Pressure_BOTTOM_Boundary;//FIXME:how to change cell inside pressure to boundary condition.?
+            cell->info().p() = bndCondValue[2];//FIXME: x_min_id=wallLeftId=0, x_max_id =wallRightId=1, y_min_id=wallBottomId=2, y_max_id=wallTopId=3, z_min_id=wallBackId=4,z_max_id=wallFrontId=5           
 //             cerr<<"cell index: "<<cell->info().index <<" "<< "pressure: " << cell->info().p()<<endl;
     }
 
@@ -353,32 +354,43 @@
 template<class Solver>
 void UnsaturatedEngine::BoundaryConditions ( Solver& flow )
 {
-        if ( flow->y_min_id>=0 ) {
-                flow->boundary ( flow->y_min_id ).flowCondition=Flow_imposed_BOTTOM_Boundary;
-                flow->boundary ( flow->y_min_id ).value=Pressure_BOTTOM_Boundary;
-        }
-        if ( flow->y_max_id>=0 ) {
-                flow->boundary ( flow->y_max_id ).flowCondition=Flow_imposed_TOP_Boundary;
-                flow->boundary ( flow->y_max_id ).value=Pressure_TOP_Boundary;
-        }
-        if ( flow->x_max_id>=0 ) {
-                flow->boundary ( flow->x_max_id ).flowCondition=Flow_imposed_RIGHT_Boundary;
-                flow->boundary ( flow->x_max_id ).value=Pressure_RIGHT_Boundary;
-        }
-        if ( flow->x_min_id>=0 ) {
-                flow->boundary ( flow->x_min_id ).flowCondition=Flow_imposed_LEFT_Boundary;
-                flow->boundary ( flow->x_min_id ).value=Pressure_LEFT_Boundary;
-        }
-        if ( flow->z_max_id>=0 ) {
-                flow->boundary ( flow->z_max_id ).flowCondition=Flow_imposed_FRONT_Boundary;
-                flow->boundary ( flow->z_max_id ).value=Pressure_FRONT_Boundary;
-        }
-        if ( flow->z_min_id>=0 ) {
-                flow->boundary ( flow->z_min_id ).flowCondition=Flow_imposed_BACK_Boundary;
-                flow->boundary ( flow->z_min_id ).value=Pressure_BACK_Boundary;
-        }
+
+	for (int k=0;k<6;k++)	{
+		flow->boundary (wallIds[k]).flowCondition=!bndCondIsPressure[k];
+                flow->boundary (wallIds[k]).value=bndCondValue[k];
+                flow->boundary (wallIds[k]).velocity = boundaryVelocity[k];//FIXME: needs correct implementation, maybe update the cached pos/vel?
+	}
 }
 
+// template<class Solver>
+// void UnsaturatedEngine::BoundaryConditions ( Solver& flow )
+// {
+//         if ( flow->y_min_id>=0 ) {
+//                 flow->boundary ( flow->y_min_id ).flowCondition=Flow_imposed_BOTTOM_Boundary;
+//                 flow->boundary ( flow->y_min_id ).value=Pressure_BOTTOM_Boundary;
+//         }
+//         if ( flow->y_max_id>=0 ) {
+//                 flow->boundary ( flow->y_max_id ).flowCondition=Flow_imposed_TOP_Boundary;
+//                 flow->boundary ( flow->y_max_id ).value=Pressure_TOP_Boundary;
+//         }
+//         if ( flow->x_max_id>=0 ) {
+//                 flow->boundary ( flow->x_max_id ).flowCondition=Flow_imposed_RIGHT_Boundary;
+//                 flow->boundary ( flow->x_max_id ).value=Pressure_RIGHT_Boundary;
+//         }
+//         if ( flow->x_min_id>=0 ) {
+//                 flow->boundary ( flow->x_min_id ).flowCondition=Flow_imposed_LEFT_Boundary;
+//                 flow->boundary ( flow->x_min_id ).value=Pressure_LEFT_Boundary;
+//         }
+//         if ( flow->z_max_id>=0 ) {
+//                 flow->boundary ( flow->z_max_id ).flowCondition=Flow_imposed_FRONT_Boundary;
+//                 flow->boundary ( flow->z_max_id ).value=Pressure_FRONT_Boundary;
+//         }
+//         if ( flow->z_min_id>=0 ) {
+//                 flow->boundary ( flow->z_min_id ).flowCondition=Flow_imposed_BACK_Boundary;
+//                 flow->boundary ( flow->z_min_id ).value=Pressure_BACK_Boundary;
+//         }
+// }
+
 template<class Solver>
 void UnsaturatedEngine::initSolver ( Solver& flow )
 {
@@ -469,19 +481,12 @@
         flow->id_offset = id_offset;
         flow->SectionArea = ( flow->x_max - flow->x_min ) * ( flow->z_max-flow->z_min );
         flow->Vtotale = ( flow->x_max-flow->x_min ) * ( flow->y_max-flow->y_min ) * ( flow->z_max-flow->z_min );
-        flow->y_min_id=wallBottomId;
-        flow->y_max_id=wallTopId;
-        flow->x_max_id=wallRightId;
-        flow->x_min_id=wallLeftId;
-        flow->z_min_id=wallBackId;
-        flow->z_max_id=wallFrontId;
-
-        if ( flow->y_min_id>=0 ) flow->boundary ( flow->y_min_id ).useMaxMin = BOTTOM_Boundary_MaxMin;
-        if ( flow->y_max_id>=0 ) flow->boundary ( flow->y_max_id ).useMaxMin = TOP_Boundary_MaxMin;
-        if ( flow->x_max_id>=0 ) flow->boundary ( flow->x_max_id ).useMaxMin = RIGHT_Boundary_MaxMin;
-        if ( flow->x_min_id>=0 ) flow->boundary ( flow->x_min_id ).useMaxMin = LEFT_Boundary_MaxMin;
-        if ( flow->z_max_id>=0 ) flow->boundary ( flow->z_max_id ).useMaxMin = FRONT_Boundary_MaxMin;
-        if ( flow->z_min_id>=0 ) flow->boundary ( flow->z_min_id ).useMaxMin = BACK_Boundary_MaxMin;
+        flow->y_min_id=wallIds[ymin];
+        flow->y_max_id=wallIds[ymax];
+        flow->x_max_id=wallIds[xmax];
+        flow->x_min_id=wallIds[xmin];
+        flow->z_min_id=wallIds[zmin];
+        flow->z_max_id=wallIds[zmax];
 
         //FIXME: Id's order in boundsIds is done according to the enumeration of boundaries from TXStressController.hpp, line 31. DON'T CHANGE IT!
         flow->boundsIds[0]= &flow->x_min_id;
@@ -491,20 +496,18 @@
         flow->boundsIds[4]= &flow->z_min_id;
         flow->boundsIds[5]= &flow->z_max_id;
 
+	for (int k=0;k<6;k++) flow->boundary ( *flow->boundsIds[k] ).useMaxMin = boundaryUseMaxMin[k];
+
+//         if ( flow->y_min_id>=0 ) flow->boundary ( flow->y_min_id ).useMaxMin = boundaryUseMaxMin[ymin];
+//         if ( flow->y_max_id>=0 ) flow->boundary ( flow->y_max_id ).useMaxMin = boundaryUseMaxMin[ymax];
+//         if ( flow->x_max_id>=0 ) flow->boundary ( flow->x_max_id ).useMaxMin = boundaryUseMaxMin[xmax];
+//         if ( flow->x_min_id>=0 ) flow->boundary ( flow->x_min_id ).useMaxMin = boundaryUseMaxMin[xmin];
+//         if ( flow->z_max_id>=0 ) flow->boundary ( flow->z_max_id ).useMaxMin = boundaryUseMaxMin[zmax];
+//         if ( flow->z_min_id>=0 ) flow->boundary ( flow->z_min_id ).useMaxMin = boundaryUseMaxMin[zmin];
+
         flow->Corner_min = CGT::Point ( flow->x_min, flow->y_min, flow->z_min );
         flow->Corner_max = CGT::Point ( flow->x_max, flow->y_max, flow->z_max );
-
-        if ( Debug ) {
-                cout << "Section area = " << flow->SectionArea << endl;
-                cout << "Vtotale = " << flow->Vtotale << endl;
-                cout << "x_min = " << flow->x_min << endl;
-                cout << "x_max = " << flow->x_max << endl;
-                cout << "y_max = " << flow->y_max << endl;
-                cout << "y_min = " << flow->y_min << endl;
-                cout << "z_min = " << flow->z_min << endl;
-                cout << "z_max = " << flow->z_max << endl;
-                cout << endl << "Adding Boundary------" << endl;
-        }
+ 
         //assign BCs types and values
         BoundaryConditions ( flow );
 
@@ -512,14 +515,91 @@
         for ( int i=0; i<6; i++ ) {
                 if ( *flow->boundsIds[i]<0 ) continue;
                 CGT::Vecteur Normal ( normal[i].x(), normal[i].y(), normal[i].z() );
-                if ( flow->boundary ( *flow->boundsIds[i] ).useMaxMin ) flow->AddBoundingPlane ( true, Normal, *flow->boundsIds[i],5000.0 );
+                if ( flow->boundary ( *flow->boundsIds[i] ).useMaxMin ) flow->AddBoundingPlane(Normal, *flow->boundsIds[i] );
                 else {
 			for ( int h=0;h<3;h++ ) center[h] = buffer[*flow->boundsIds[i]].pos[h];
-                        flow->AddBoundingPlane ( center, wall_thickness, Normal,*flow->boundsIds[i],5000.0 );
+// 			cerr << "id="<<*flow->boundsIds[i] <<" center="<<center[0]<<","<<center[1]<<","<<center[2]<<endl;
+                        flow->AddBoundingPlane ( center, wall_thickness, Normal,*flow->boundsIds[i] );
                 }
         }
 }
 
+// template<class Solver>
+// void UnsaturatedEngine::AddBoundary ( Solver& flow )
+// {
+// 	vector<posData>& buffer = positionBufferCurrent;
+//         solver->x_min = Mathr::MAX_REAL, solver->x_max = -Mathr::MAX_REAL, solver->y_min = Mathr::MAX_REAL, solver->y_max = -Mathr::MAX_REAL, solver->z_min = Mathr::MAX_REAL, solver->z_max = -Mathr::MAX_REAL;
+//         FOREACH ( const posData& b, buffer ) {
+//                 if ( !b.exists ) continue;
+//                 if ( b.isSphere ) {
+//                         const Real& rad = b.radius;
+//                         const Real& x = b.pos[0];
+//                         const Real& y = b.pos[1];
+//                         const Real& z = b.pos[2];
+//                         flow->x_min = min ( flow->x_min, x-rad );
+//                         flow->x_max = max ( flow->x_max, x+rad );
+//                         flow->y_min = min ( flow->y_min, y-rad );
+//                         flow->y_max = max ( flow->y_max, y+rad );
+//                         flow->z_min = min ( flow->z_min, z-rad );
+//                         flow->z_max = max ( flow->z_max, z+rad );
+//                 }
+//         }
+// 	//FIXME id_offset must be set correctly, not the case here (always 0), then we need walls first or it will fail
+//         id_offset = flow->T[flow->currentTes].max_id+1;
+//         flow->id_offset = id_offset;
+//         flow->SectionArea = ( flow->x_max - flow->x_min ) * ( flow->z_max-flow->z_min );
+//         flow->Vtotale = ( flow->x_max-flow->x_min ) * ( flow->y_max-flow->y_min ) * ( flow->z_max-flow->z_min );
+//         flow->y_min_id=wallBottomId;
+//         flow->y_max_id=wallTopId;
+//         flow->x_max_id=wallRightId;
+//         flow->x_min_id=wallLeftId;
+//         flow->z_min_id=wallBackId;
+//         flow->z_max_id=wallFrontId;
+// 
+//         if ( flow->y_min_id>=0 ) flow->boundary ( flow->y_min_id ).useMaxMin = BOTTOM_Boundary_MaxMin;
+//         if ( flow->y_max_id>=0 ) flow->boundary ( flow->y_max_id ).useMaxMin = TOP_Boundary_MaxMin;
+//         if ( flow->x_max_id>=0 ) flow->boundary ( flow->x_max_id ).useMaxMin = RIGHT_Boundary_MaxMin;
+//         if ( flow->x_min_id>=0 ) flow->boundary ( flow->x_min_id ).useMaxMin = LEFT_Boundary_MaxMin;
+//         if ( flow->z_max_id>=0 ) flow->boundary ( flow->z_max_id ).useMaxMin = FRONT_Boundary_MaxMin;
+//         if ( flow->z_min_id>=0 ) flow->boundary ( flow->z_min_id ).useMaxMin = BACK_Boundary_MaxMin;
+// 
+//         //FIXME: Id's order in boundsIds is done according to the enumeration of boundaries from TXStressController.hpp, line 31. DON'T CHANGE IT!
+//         flow->boundsIds[0]= &flow->x_min_id;
+//         flow->boundsIds[1]= &flow->x_max_id;
+//         flow->boundsIds[2]= &flow->y_min_id;
+//         flow->boundsIds[3]= &flow->y_max_id;
+//         flow->boundsIds[4]= &flow->z_min_id;
+//         flow->boundsIds[5]= &flow->z_max_id;
+// 
+//         flow->Corner_min = CGT::Point ( flow->x_min, flow->y_min, flow->z_min );
+//         flow->Corner_max = CGT::Point ( flow->x_max, flow->y_max, flow->z_max );
+// 
+//         if ( Debug ) {
+//                 cout << "Section area = " << flow->SectionArea << endl;
+//                 cout << "Vtotale = " << flow->Vtotale << endl;
+//                 cout << "x_min = " << flow->x_min << endl;
+//                 cout << "x_max = " << flow->x_max << endl;
+//                 cout << "y_max = " << flow->y_max << endl;
+//                 cout << "y_min = " << flow->y_min << endl;
+//                 cout << "z_min = " << flow->z_min << endl;
+//                 cout << "z_max = " << flow->z_max << endl;
+//                 cout << endl << "Adding Boundary------" << endl;
+//         }
+//         //assign BCs types and values
+//         BoundaryConditions ( flow );
+// 
+//         double center[3];
+//         for ( int i=0; i<6; i++ ) {
+//                 if ( *flow->boundsIds[i]<0 ) continue;
+//                 CGT::Vecteur Normal ( normal[i].x(), normal[i].y(), normal[i].z() );
+//                 if ( flow->boundary ( *flow->boundsIds[i] ).useMaxMin ) flow->AddBoundingPlane ( true, Normal, *flow->boundsIds[i],5000.0 );
+//                 else {
+// 			for ( int h=0;h<3;h++ ) center[h] = buffer[*flow->boundsIds[i]].pos[h];
+//                         flow->AddBoundingPlane ( center, wall_thickness, Normal,*flow->boundsIds[i],5000.0 );
+//                 }
+//         }
+// }
+
 template<class Solver>
 void UnsaturatedEngine::Triangulate ( Solver& flow )
 {

=== modified file 'pkg/dem/UnsaturatedEngine.hpp'
--- pkg/dem/UnsaturatedEngine.hpp	2013-07-30 09:46:10 +0000
+++ pkg/dem/UnsaturatedEngine.hpp	2013-07-31 15:11:24 +0000
@@ -44,7 +44,8 @@
 		Real testFunction();
 
 	public :
-		enum {wall_left=0, wall_right, wall_bottom, wall_top, wall_back, wall_front};
+// 		enum {wall_left=0, wall_right, wall_bottom, wall_top, wall_back, wall_front};
+		enum {wall_xmin, wall_xmax, wall_ymin, wall_ymax, wall_zmin, wall_zmax};		
 		Vector3r normal [6];
 		bool currentTes;
 		int id_offset;
@@ -107,7 +108,7 @@
 		python::list getConstrictions() {
 			vector<Real> csd=solver->getConstrictions(); python::list pycsd;
 			for (unsigned int k=0;k<csd.size();k++) pycsd.append(csd[k]); return pycsd;}
-		double MeasurePorePressure(Vector3r pos){return solver->MeasurePorePressure(pos[0], pos[1], pos[2]);}
+		double getPorePressure(Vector3r pos){return solver->getPorePressure(pos[0], pos[1], pos[2]);}
 		TPL int getCell(double posX, double posY, double posZ, Solver& flow){return flow->getCell(posX, posY, posZ);}
 
 		void emulateAction(){
@@ -139,40 +140,59 @@
 					((bool,first,true,,"Controls the initialization/update phases"))
 					((bool, Debug, false,,"Activate debug messages"))
 					((double, wall_thickness,0.001,,"Walls thickness"))
-					((double,P_zero,0,,"Initial internal pressure"))
+					((double,P_zero,0,,"The value used for initializing pore pressure. It is useless for incompressible fluid, but important for compressible model."))
 					((double,gasPressure,0,,"Invasion pressure"))
 					((double,surfaceTension,0.0728,,"Surface Tension in contact with air at 20 Degrees Celsius is: 0.0728(N/m)"))
 					((double, porosity, 0,,"Porosity computed at each retriangulation"))
-					((bool, Flow_imposed_TOP_Boundary, true,, "if false involve pressure imposed condition"))
-					((bool, Flow_imposed_BOTTOM_Boundary, true,, "if false involve pressure imposed condition"))
-					((bool, Flow_imposed_FRONT_Boundary, true,, "if false involve pressure imposed condition"))
-					((bool, Flow_imposed_BACK_Boundary, true,, "if false involve pressure imposed condition"))
-					((bool, Flow_imposed_LEFT_Boundary, true,, "if false involve pressure imposed condition"))
-					((bool, Flow_imposed_RIGHT_Boundary, true,,"if false involve pressure imposed condition"))
-					((double, Pressure_TOP_Boundary, 0,, "Pressure imposed on top boundary"))
-					((double, Pressure_BOTTOM_Boundary,  0,, "Pressure imposed on bottom boundary"))
-					((double, Pressure_FRONT_Boundary,  0,, "Pressure imposed on front boundary"))
-					((double, Pressure_BACK_Boundary,  0,,"Pressure imposed on back boundary"))
-					((double, Pressure_LEFT_Boundary,  0,, "Pressure imposed on left boundary"))
-					((double, Pressure_RIGHT_Boundary,  0,, "Pressure imposed on right boundary"))
-					((int, wallTopId,3,,"Id of top boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
-					((int, wallBottomId,2,,"Id of bottom boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
-					((int, wallFrontId,5,,"Id of front boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
-					((int, wallBackId,4,,"Id of back boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
-					((int, wallLeftId,0,,"Id of left boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
-					((int, wallRightId,1,,"Id of right boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
-					((bool, BOTTOM_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
-					((bool, TOP_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
-					((bool, RIGHT_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
-					((bool, LEFT_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
-					((bool, FRONT_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
-					((bool, BACK_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
+// 					((bool, Flow_imposed_TOP_Boundary, true,, "if false involve pressure imposed condition"))
+// 					((bool, Flow_imposed_BOTTOM_Boundary, true,, "if false involve pressure imposed condition"))
+// 					((bool, Flow_imposed_FRONT_Boundary, true,, "if false involve pressure imposed condition"))
+// 					((bool, Flow_imposed_BACK_Boundary, true,, "if false involve pressure imposed condition"))
+// 					((bool, Flow_imposed_LEFT_Boundary, true,, "if false involve pressure imposed condition"))
+// 					((bool, Flow_imposed_RIGHT_Boundary, true,,"if false involve pressure imposed condition"))
+// 					((double, Pressure_TOP_Boundary, 0,, "Pressure imposed on top boundary"))
+// 					((double, Pressure_BOTTOM_Boundary,  0,, "Pressure imposed on bottom boundary"))
+// 					((double, Pressure_FRONT_Boundary,  0,, "Pressure imposed on front boundary"))
+// 					((double, Pressure_BACK_Boundary,  0,,"Pressure imposed on back boundary"))
+// 					((double, Pressure_LEFT_Boundary,  0,, "Pressure imposed on left boundary"))
+// 					((double, Pressure_RIGHT_Boundary,  0,, "Pressure imposed on right boundary"))
+// 					((int, wallTopId,3,,"Id of top boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
+// 					((int, wallBottomId,2,,"Id of bottom boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
+// 					((int, wallFrontId,5,,"Id of front boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
+// 					((int, wallBackId,4,,"Id of back boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
+// 					((int, wallLeftId,0,,"Id of left boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
+// 					((int, wallRightId,1,,"Id of right boundary (default value is ok if aabbWalls are appended BEFORE spheres.)"))
+// 					((bool, BOTTOM_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
+// 					((bool, TOP_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
+// 					((bool, RIGHT_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
+// 					((bool, LEFT_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
+// 					((bool, FRONT_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
+// 					((bool, BACK_Boundary_MaxMin, 1,,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))
+					((int, xmin,0,(Attr::readonly),"Index of the boundary $x_{min}$. This index is not equal the the id of the corresponding body in general, it may be used to access the corresponding attributes (e.g. flow.bndCondValue[flow.xmin], flow.wallId[flow.xmin],...)."))
+					((int, xmax,1,(Attr::readonly),"See :yref:`FlowEngine::xmin`."))
+					((int, ymin,2,(Attr::readonly),"See :yref:`FlowEngine::xmin`."))
+					((int, ymax,3,(Attr::readonly),"See :yref:`FlowEngine::xmin`."))
+					((int, zmin,4,(Attr::readonly),"See :yref:`FlowEngine::xmin`."))
+					((int, zmax,5,(Attr::readonly),"See :yref:`FlowEngine::xmin`."))
+
+					((vector<bool>, bndCondIsPressure, vector<bool>(6,false),,"defines the type of boundary condition for each side. True if pressure is imposed, False for no-flux. Indexes can be retrieved with :yref:`FlowEngine::xmin` and friends."))
+					((vector<double>, bndCondValue, vector<double>(6,0),,"Imposed value of a boundary condition. Only applies if the boundary condition is imposed pressure, else the imposed flux is always zero presently (may be generalized to non-zero imposed fluxes in the future)."))
+					//FIXME: to be implemented:
+
+					((vector<Vector3r>, boundaryVelocity, vector<Vector3r>(6,Vector3r::Zero()),, "velocity on top boundary, only change it using :yref:`FlowEngine::setBoundaryVel`"))
+					((vector<int>, wallIds,vector<int>(6),,"body ids of the boundaries (default values are ok only if aabbWalls are appended before spheres, i.e. numbered 0,...,5)"))
+					((vector<bool>, boundaryUseMaxMin, vector<bool>(6,true),,"If true (default value) bounding sphere is added as function of max/min sphere coord, if false as function of yade wall position"))					
 					,
 					/*deprec*/
 					,,
-					for (int i=0; i<6; ++i){normal[i]=Vector3r::Zero();}
-					normal[wall_bottom].y()=normal[wall_left].x()=normal[wall_back].z()=1;
-					normal[wall_top].y()=normal[wall_right].x()=normal[wall_front].z()=-1;
+// 					for (int i=0; i<6; ++i){normal[i]=Vector3r::Zero();}
+// 					normal[wall_bottom].y()=normal[wall_left].x()=normal[wall_back].z()=1;
+// 					normal[wall_top].y()=normal[wall_right].x()=normal[wall_front].z()=-1;
+// 					solver = shared_ptr<FlowSolver> (new FlowSolver);
+// 					first=true;
+					for (int i=0; i<6; ++i){normal[i]=Vector3r::Zero(); wallIds[i]=i;}
+					normal[wall_ymin].y()=normal[wall_xmin].x()=normal[wall_zmin].z()=1;
+					normal[wall_ymax].y()=normal[wall_xmax].x()=normal[wall_zmax].z()=-1;
 					solver = shared_ptr<FlowSolver> (new FlowSolver);
 					first=true;
 					,
@@ -181,7 +201,7 @@
 					.def("clearImposedPressure",&UnsaturatedEngine::_clearImposedPressure,"Clear the list of points with pressure imposed.")
 					.def("getConstrictions",&UnsaturatedEngine::getConstrictions,"Get the list of constrictions (inscribed circle) for all finite facets.")
 					.def("saveVtk",&UnsaturatedEngine::saveVtk,"Save pressure field in vtk format.")
-					.def("MeasurePorePressure",&UnsaturatedEngine::MeasurePorePressure,(python::arg("pos")),"Measure pore pressure in position pos[0],pos[1],pos[2]")
+					.def("getPorePressure",&UnsaturatedEngine::getPorePressure,(python::arg("pos")),"Measure pore pressure in position pos[0],pos[1],pos[2]")
 					.def("emulateAction",&UnsaturatedEngine::emulateAction,"get scene and run action (may be used to manipulate engine outside the main loop).")
 					.def("getCell",&UnsaturatedEngine::_getCell,(python::arg("pos")),"get id of the cell containing (X,Y,Z).")
 					.def("testFunction",&UnsaturatedEngine::testFunction,"The playground for Chao's experiments.")