← Back to team overview

yade-dev team mailing list archive

[Branch ~yade-pkg/yade/git-trunk] Rev 3791: HydroForceEngine: adapt the averageProfile function for bi-disperse mixtures.

 

------------------------------------------------------------
revno: 3791
committer: Raphael Maurin <raph_maurin@xxxxxxxxxxx>
timestamp: Tue 2016-02-09 18:55:09 +0100
message:
  HydroForceEngine: adapt the averageProfile function for bi-disperse mixtures.
  Evaluate the streamwise, spanwise and wall-normal average particle velocity for the two defined types of particles.
modified:
  pkg/common/ForceEngine.cpp
  pkg/common/ForceEngine.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/common/ForceEngine.cpp'
--- pkg/common/ForceEngine.cpp	2016-02-09 17:45:15 +0000
+++ pkg/common/ForceEngine.cpp	2016-02-09 17:55:09 +0000
@@ -138,8 +138,14 @@
 	vector<Real> dragAverage(nMax,0.0);
 	vector<Real> phiAverage1(nMax,0.0);
 	vector<Real> dragAverage1(nMax,0.0);
+	vector<Real> velAverageX1(nMax,0.0);
+        vector<Real> velAverageY1(nMax,0.0);
+        vector<Real> velAverageZ1(nMax,0.0);
 	vector<Real> phiAverage2(nMax,0.0);
 	vector<Real> dragAverage2(nMax,0.0);
+	vector<Real> velAverageX2(nMax,0.0);
+        vector<Real> velAverageY2(nMax,0.0);
+        vector<Real> velAverageZ2(nMax,0.0);
 
 	//Loop over the particles
 	FOREACH(const shared_ptr<Body>& b, *Omega::instance().getScene()->bodies){
@@ -180,10 +186,16 @@
 					if (s->radius==radiusPart1){
 						phiAverage1[numLayer]+=volPart; 
 						dragAverage1[numLayer]+=volPart*fDrag[0];
+						velAverageX1[numLayer]+=volPart*b->state->vel[0];
+						velAverageY1[numLayer]+=volPart*b->state->vel[1];
+						velAverageZ1[numLayer]+=volPart*b->state->vel[2];
 					}
 					if (s->radius==radiusPart2){
 						phiAverage2[numLayer]+=volPart;
 						dragAverage2[numLayer]+=volPart*fDrag[0];
+						velAverageX2[numLayer]+=volPart*b->state->vel[0];
+						velAverageY2[numLayer]+=volPart*b->state->vel[1];
+						velAverageZ2[numLayer]+=volPart*b->state->vel[2];
 					}
 				}
 			}
@@ -200,10 +212,30 @@
 			//Normalize the concentration after
 			phiAverage[n]/=vCell;
 			if (twoSize==true){
-				if (phiAverage1[n]!=0) dragAverage1[n]/=phiAverage1[n];
-				else dragAverage1[n]=0.0;
-				if (phiAverage2[n]!=0) dragAverage2[n]/=phiAverage2[n];
-				else dragAverage2[n]=0.0;
+				if (phiAverage1[n]!=0){
+					dragAverage1[n]/=phiAverage1[n];
+					velAverageX1[n]/=phiAverage1[n];
+					velAverageY1[n]/=phiAverage1[n];
+					velAverageZ1[n]/=phiAverage1[n];
+				}
+				else {
+					dragAverage1[n]=0.0;
+					velAverageX1[n]=0.0;
+					velAverageY1[n]=0.0;
+					velAverageZ1[n]=0.0;
+				}
+				if (phiAverage2[n]!=0){
+					dragAverage2[n]/=phiAverage2[n];
+					velAverageX2[n]/=phiAverage2[n];
+					velAverageY2[n]/=phiAverage2[n];
+					velAverageZ2[n]/=phiAverage2[n];
+				}
+				else {
+					dragAverage2[n]=0.0;
+					velAverageX2[n]=0.0;
+					velAverageY2[n]=0.0;
+					velAverageZ2[n]=0.0;
+				}
 				phiAverage1[n]/=vCell;
 				phiAverage2[n]/=vCell;
 			 }
@@ -216,6 +248,12 @@
 			if (twoSize==true){
 				dragAverage1[n] = 0.0;
 				dragAverage2[n] = 0.0;
+				velAverageX1[n]=0.0;
+				velAverageY1[n]=0.0;
+				velAverageZ1[n]=0.0;
+				velAverageX2[n]=0.0;
+				velAverageY2[n]=0.0;
+				velAverageZ2[n]=0.0;
 			}
 		}
 	}
@@ -229,6 +267,12 @@
 	phiPart2 = phiAverage2;
 	averageDrag1 = dragAverage1;
 	averageDrag2 = dragAverage2;
+	vxPart1 = velAverageX1;
+	vyPart1 = velAverageY1;
+	vzPart1 = velAverageZ1;
+	vxPart2 = velAverageX2;
+	vyPart2 = velAverageY2;
+	vzPart2 = velAverageZ2;
 
 	//desactivate the average to avoid calculating at each step, only when asked by the user
 	activateAverage=false; 

=== modified file 'pkg/common/ForceEngine.hpp'
--- pkg/common/ForceEngine.hpp	2016-02-09 17:45:15 +0000
+++ pkg/common/ForceEngine.hpp	2016-02-09 17:55:09 +0000
@@ -101,6 +101,12 @@
 		((vector<Real>,phiPart2,,,"Discretized solid volume fraction depth profile of particles of type 2. Evaluated when :yref:`twoSize<HydroForceEngine.twoSize>` is set to True."))
 		((vector<Real>,averageDrag1,,,"Discretized average drag depth profile of particles of type 1. Evaluated when :yref:`twoSize<HydroForceEngine.twoSize>` is set to True."))
 		((vector<Real>,averageDrag2,,,"Discretized average drag depth profile of particles of type 2. Evaluated when :yref:`twoSize<HydroForceEngine.twoSize>` is set to True."))
+		((vector<Real>,vxPart1,,,"Discretized solid streamwise velocity depth profile of particles of type 1. Evaluated when :yref:`twoSize<HydroForceEngine.twoSize>` is set to True."))
+		((vector<Real>,vxPart2,,,"Discretized solid streamwise velocity depth profile of particles of type 2. Evaluated when :yref:`twoSize<HydroForceEngine.twoSize>` is set to True."))
+		((vector<Real>,vyPart1,,,"Discretized solid spanwise velocity depth profile of particles of type 1. Evaluated when :yref:`twoSize<HydroForceEngine.twoSize>` is set to True."))
+		((vector<Real>,vyPart2,,,"Discretized solid spanwise velocity depth profile of particles of type 2. Evaluated when :yref:`twoSize<HydroForceEngine.twoSize>` is set to True."))
+		((vector<Real>,vzPart1,,,"Discretized solid wall-normal velocity depth profile of particles of type 1. Evaluated when :yref:`twoSize<HydroForceEngine.twoSize>` is set to True."))
+		((vector<Real>,vzPart2,,,"Discretized solid wall-normal velocity depth profile of particles of type 2. Evaluated when :yref:`twoSize<HydroForceEngine.twoSize>` is set to True."))
 		((bool,activateAverage,false,,"If true, activate the calculation of the average depth profiles of drag, solid volume fraction, and solid velocity for the application of the force (phiPart in hindrance function) and to use in python for the coupling with the fluid."))
 		((bool,velFluct,false,,"If true, activate the determination of turbulent fluid velocity fluctuation for the next time step only at the position of each particle, using a simple discrete random walk (DRW) model based on the Reynolds stresses profile (:yref:`simplifiedReynoldStresses<HydroForceEngine.simplifiedReynoldStresses>`)"))
 		((vector<Real>,vFluctX,,,"Vector associating a streamwise fluid velocity fluctuation to each particle. Fluctuation calculated in the C++ code from the discrete random walk model"))