yade-dev team mailing list archive
-
yade-dev team
-
Mailing list archive
-
Message #08189
[Branch ~yade-dev/yade/trunk] Rev 2989: DomainLimiter:
------------------------------------------------------------
revno: 2989
committer: Anton Gladky <gladky.anton@xxxxxxxxx>
branch nick: yade
timestamp: Tue 2012-01-10 10:39:47 +0100
message:
DomainLimiter:
* Delete spheres only
* Add mass calculation
* Add volume calculation
* Add mask-parameter
SpheresFactory:
* Add color parameter
modified:
pkg/dem/DomainLimiter.cpp
pkg/dem/DomainLimiter.hpp
pkg/dem/SpheresFactory.cpp
pkg/dem/SpheresFactory.hpp
--
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 'pkg/dem/DomainLimiter.cpp'
--- pkg/dem/DomainLimiter.cpp 2011-03-24 21:38:33 +0000
+++ pkg/dem/DomainLimiter.cpp 2012-01-10 09:39:47 +0000
@@ -10,13 +10,20 @@
void DomainLimiter::action(){
std::list<Body::id_t> out;
FOREACH(const shared_ptr<Body>& b, *scene->bodies){
- if(!b) continue;
- const Vector3r& p(b->state->pos);
- if(p[0]<lo[0] || p[0]>hi[0] || p[1]<lo[1] || p[1]>hi[1] || p[2]<lo[2] || p[2]>hi[2]) out.push_back(b->id);
+ if((!b) or ((mask>0) and ((b->groupMask & mask)==0))) continue;
+ const Sphere* sphere = dynamic_cast<Sphere*>(b->shape.get());
+ if (sphere){ //Delete only spheres
+ const Vector3r& p(b->state->pos);
+ if(p[0]<lo[0] || p[0]>hi[0] || p[1]<lo[1] || p[1]>hi[1] || p[2]<lo[2] || p[2]>hi[2]) {
+ out.push_back(b->id);
+ nDeleted++;
+ mDeleted+=b->state->mass;
+ Real r = sphere->radius; vDeleted+=(4/3.)*Mathr::PI*pow(r,3);
+ }
+ }
}
FOREACH(Body::id_t id, out){
scene->bodies->erase(id);
- nDeleted++;
}
}
=== modified file 'pkg/dem/DomainLimiter.hpp'
--- pkg/dem/DomainLimiter.hpp 2010-12-12 13:55:12 +0000
+++ pkg/dem/DomainLimiter.hpp 2012-01-10 09:39:47 +0000
@@ -1,6 +1,7 @@
#include<yade/pkg/common/PeriodicEngines.hpp>
#include<yade/core/PartialEngine.hpp>
+#include<yade/pkg/common/Sphere.hpp>
class DomainLimiter: public PeriodicEngine{
public:
@@ -9,6 +10,9 @@
((Vector3r,lo,Vector3r(0,0,0),,"Lower corner of the domain."))
((Vector3r,hi,Vector3r(0,0,0),,"Upper corner of the domain."))
((long,nDeleted,0,Attr::readonly,"Cummulative number of particles deleted."))
+ ((Real,mDeleted,0,,"Mass of deleted particles."))
+ ((Real,vDeleted,0,,"Volume of deleted particles."))
+ ((int,mask,-1,,"If mask is defined, only particles with corresponding groupMask will be deleted."))
);
};
REGISTER_SERIALIZABLE(DomainLimiter);
=== modified file 'pkg/dem/SpheresFactory.cpp'
--- pkg/dem/SpheresFactory.cpp 2011-12-09 13:20:09 +0000
+++ pkg/dem/SpheresFactory.cpp 2012-01-10 09:39:47 +0000
@@ -150,6 +150,9 @@
shared_ptr<State> state(material->newAssocState());
sphere->radius=r;
state->pos=state->refPos=c;
+ if (color[0]>=0 and color[1]>=0 and color[2]>=0){
+ sphere->color = color;
+ }
state->vel=initVel;
Real vol=(4/3.)*Mathr::PI*pow(r,3);
=== modified file 'pkg/dem/SpheresFactory.hpp'
--- pkg/dem/SpheresFactory.hpp 2011-12-09 13:29:16 +0000
+++ pkg/dem/SpheresFactory.hpp 2012-01-10 09:39:47 +0000
@@ -26,6 +26,7 @@
((Vector3r,normal,Vector3r(NaN,NaN,NaN),,"Spitting direction (and orientation of the region's geometry)."))
((int,materialId,-1,,"Shared material id to use for newly created spheres (can be negative to count from the end)"))
((int,mask,-1,,"groupMask to apply for newly created spheres "))
+ ((Vector3r,color,Vector3r(-1,-1,-1),,"Use the color for newly created particles, if specified"))
((vector<int>,ids,,,"ids of created bodies"))
((Real,totalMass,0,,"Mass of spheres that was produced so far. |yupdate|"))
((Real,totalVolume,0,,"Volume of spheres that was produced so far. |yupdate|"))
@@ -39,8 +40,8 @@
((vector<Real>,PSDsizes,,,"PSD-dispersion, sizes of cells, Diameter [m]"))
((vector<Real>,PSDcum,,,"PSD-dispersion, cumulative procent meanings [-]"))
((bool,PSDcalculateMass,true,,"PSD-Input is in mass (true), otherwise the number of particles will be considered."))
- ((bool,stopIfFailed,true,,"If true, the SpheresFactory stops (sets massFlowRate=0), when maximal number of attempts to insert particle exceed."))
- ((bool,exactDiam,true,,"If true, the particles only with the defined in PSDsizes diameters will be created. Otherwise the diameter will be randomly chosen in the range [PSDsizes[i-1]:PSDsizes[i]], in this case the length of PSDsizes should be more on 1, than the length of PSDcum.")),
+ ((bool,stopIfFailed,true,,"If true, the SpheresFactory stops (sets massFlowRate=0), when maximal number of attempts to insert particle exceed."))
+ ((bool,exactDiam,true,,"If true, the particles only with the defined in PSDsizes diameters will be created. Otherwise the diameter will be randomly chosen in the range [PSDsizes[i-1]:PSDsizes[i]], in this case the length of PSDsizes should be more on 1, than the length of PSDcum.")),
PSDuse=false;
);
};