83 vector<asl::AVec<>> pillar1{
makeAVec(wPillar*.5, dPillar*.5,0.),
84 makeAVec(-wPillar*.5, dPillar*.5,0.),
85 makeAVec(-wPillar*.5, -dPillar*.5,0.),
86 makeAVec(wPillar*.5, -dPillar*.5,0.)};
88 vector<asl::AVec<>> pillar2{
makeAVec(dPillar*.5, wPillar*.5,0.),
89 makeAVec(-dPillar*.5, wPillar*.5,0.),
90 makeAVec(-dPillar*.5, -wPillar*.5,0.),
91 makeAVec(dPillar*.5, -wPillar*.5,0.)};
93 vector<asl::AVec<>> pillarC{
makeAVec(center[0]+rDisk-dPillar*.5, center[1], 0.),
94 makeAVec(center[0]-rDisk+dPillar*.5, center[1], 0.),
95 makeAVec(center[0], center[1]+rDisk-dPillar*.5,0.),
96 makeAVec(center[0], center[1]-rDisk+dPillar*.5,0.)};
97 vector<vector<asl::AVec<>>> pillarsPoints(4);
98 for(
unsigned int i(0); i<4; ++i)
99 pillarsPoints[i].resize(4);
101 for(
unsigned int i(0); i<4; ++i)
103 pillarsPoints[0][i] = pillar2[i] + pillarC[0];
104 pillarsPoints[1][i] = pillar2[i] + pillarC[1];
105 pillarsPoints[2][i] = pillar1[i] + pillarC[2];
106 pillarsPoints[3][i] = pillar1[i] + pillarC[3];
112 makeAVec(center[0], center[1], .5*hDisk)));
115 makeAVec(center[0], center[1], -.5*hDisk - hAxis +
dx*size[2])));
118 makeAVec(center[0], center[1], - .5*hAxis - hDisk*.25 +
dx*size[2])));
123 auto dfPillars((dfPillar1 | dfPillar2 | dfPillar3 | dfPillar4) &
127 return normalize(diskBottom | diskTop | axis | dfPillars,
dx);
134 double hCrystalBase(.5);
135 double hCrystalPyramid(.5);
144 center+
makeAVec(-aCrystal, aCrystal,0.),
145 center+
makeAVec(-aCrystal, -aCrystal,0.),
146 center+
makeAVec( aCrystal, -aCrystal,0.)}) &
149 auto cCrPyrBase(
makeAVec(center[0],center[1],hDisk+hCrystalBase-.01));
151 cCrPyrBase+
makeAVec(-aCrystal, aCrystal,0.),
152 cCrPyrBase+
makeAVec(-aCrystal, -aCrystal,0.),
153 cCrPyrBase+
makeAVec( aCrystal, -aCrystal,0.)},
154 cCrPyrBase+
makeAVec(0.,0.,hCrystalPyramid)));
162 double wMax(6.*3.14*2./60.);
163 double tPlato(tPeriod * .25);
164 double tAcceleration(tPeriod * .1);
165 double tStop(tPeriod * .05);
168 double tRel(modf(t/tPeriod, &intPart));
170 if(tRel<=tAcceleration)
171 x = tRel / tAcceleration;
172 if(tRel>tAcceleration && tRel<=tAcceleration+tPlato)
174 if(tRel>tAcceleration+tPlato && tRel<=2.*tAcceleration+tPlato)
175 x = (2.*tAcceleration + tPlato - tRel) / tAcceleration;
176 if(tRel>2.*tAcceleration+tPlato && tRel<=2.*tAcceleration+tPlato+tStop)
178 if(tRel>2.*tAcceleration+tPlato+tStop && tRel<=3.*tAcceleration+tPlato+tStop)
179 x = -(tRel-2.*tAcceleration-tPlato-tStop) / tAcceleration;
180 if(tRel>3.*tAcceleration+tPlato+tStop && tRel<=3.*tAcceleration+2.*tPlato+tStop)
182 if(tRel>3.*tAcceleration+2.*tPlato+tStop && tRel<=4.*tAcceleration+2.*tPlato+tStop)
183 x = -(4.*tAcceleration+2.*tPlato+tStop-tRel)/tAcceleration;
184 if(tRel>4.*tAcceleration+2.*tPlato+tStop)
200 int main(
int argc,
char* argv[])
206 appParamsManager.
load(argc, argv);
211 Param difC(1e-2/300.);
214 Param w(6.*3.14*2./60.);
228 std::cout <<
"Data initialization...";
233 auto bathMap(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
235 auto platformCrysMap(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
237 auto bathPlatformMap(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
239 auto bathPlatformCrystalMap(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
241 auto crystalMap(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
244 auto cField(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
247 std::cout <<
"Finished" << endl;
249 std::cout <<
"Numerics initialization...";
267 std::vector<asl::SPNumMethod> bc;
268 std::vector<asl::SPNumMethod> bcV;
269 std::vector<asl::SPNumMethod> bcDif;
282 bathPlatformCrystalMap,
285 -9.32e-6/difC.
v()*
dx.v(),
287 bathPlatformCrystalMap,
294 std::cout <<
"Finished" << endl;
295 std::cout <<
"Computing...";
301 writer.
addScalars(
"mapPlatformCrys", *platformCrysMap);
302 writer.
addScalars(
"mapBathPlatformCrystal", *bathPlatformCrystalMap);
306 writer.
addVector(
"v", *lbgk->getVelocity());
316 for (
unsigned int i(0); i <= 8001 ; ++i)
337 cout <<
"Finished" << endl;
339 cout <<
"Computation statistic:" << endl;
340 cout <<
"Real Time = " << timer.
realTime() <<
"; Processor Time = "
const AVec normalize(const AVec< T > &a)
void load(int argc, char *argv[])
const DV & getSize() const
Numerical method for fluid flow.
contains different kernels for preprocessing and posprocessing of data used by LBGK
const double realTime() const
const double processorTime() const
const double processorLoad() const
void addVector(std::string name, AbstractData &data)
void addScalars(std::string name, AbstractData &data)
int main(int argc, char *argv[])
asl::SPDistanceFunction generateCrystal(asl::Block &bl)
asl::SPDistanceFunction generateBath(asl::Block &bl)
asl::UValue< double > Param
double getWRotation(double t)
asl::SPDistanceFunction generatePlatform(asl::Block &bl)
acl::VectorOfElements dx(const TemplateVE &a)
differential operator
SPBCond generateBCConstantGradient(SPAbstractDataWithGhostNodes d, double v, const VectorTemplate *const t, const std::vector< SlicesNames > &sl)
Bondary condition that makes fixed gradient <>
SPDistanceFunction generateDFConvexPolygonPrism(std::vector< AVec< double >> points)
generates infinite prism with convex polygon at its base
SPDistanceFunction generateDFConvexPolygonPyramid(std::vector< AVec< double >> points, AVec< double > a)
generates pyramid with convex polygon at its base and apex a
SPDistanceFunction generateDFCylinder(double r, const AVec< double > &l, const AVec< double > &c)
generates cylinder
SPDistanceFunction generateDFPlane(const AVec< double > &n, const AVec< double > &p0)
SPDistanceFunction generateDFCylinderInf(double r, const AVec< double > &l, const AVec< double > &c)
generates infinite cylinder
std::shared_ptr< DistanceFunction > SPDistanceFunction
SPFDAdvectionDiffusion generateFDAdvectionDiffusion(SPDataWithGhostNodesACLData c, double diffustionCoeff, SPAbstractDataWithGhostNodes v, const VectorTemplate *vt, bool compressibilityCorrection=false)
SPPositionFunction generatePFRotationField(const AVec< double > &axis, const AVec< double > &c)
const VectorTemplate & d3q19()
Vector template.
SPNumMethod generateBCVelocityVel(SPLBGK nm, SPPositionFunction v, SPAbstractDataWithGhostNodes map)
SPNumMethod generateBCNoSlipVel(SPLBGK nmU, SPAbstractDataWithGhostNodes map)
SPNumMethod generateBCVelocity(SPLBGK nm, SPPositionFunction v, SPAbstractDataWithGhostNodes map)
SPBCond generateBCNoSlip(SPLBGK nm, const std::vector< SlicesNames > &sl)
VectorOfElements generateVEConstant(T a)
Generates VectorOfElements with 1 Element acl::Constant with value a.
std::shared_ptr< LBGKUtilities > SPLBGKUtilities
SPNumMethod generateBCLinearGrowth2(SPAbstractDataWithGhostNodes d, double cEq, double beta, SPAbstractDataWithGhostNodes map, const VectorTemplate *const t)
void initAll(std::vector< T * > &v)
std::shared_ptr< LBGK > SPLBGK
void initData(SPAbstractData d, double a)
void executeAll(std::vector< T * > &v)