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 = "
asl::UValue< double > Param
const double realTime() const
std::shared_ptr< DistanceFunction > SPDistanceFunction
const DV & getSize() const
const double processorTime() const
Numerical method for fluid flow.
const AVec normalize(const AVec< T > &a)
void addVector(std::string name, AbstractData &data)
void initAll(std::vector< T * > &v)
SPDistanceFunction generateDFConvexPolygonPrism(std::vector< AVec< double >> points)
generates infinite prism with convex polygon at its base
double getWRotation(double t)
SPDistanceFunction generateDFCylinderInf(double r, const AVec< double > &l, const AVec< double > &c)
generates infinite cylinder
SPDistanceFunction generateDFPlane(const AVec< double > &n, const AVec< double > &p0)
std::shared_ptr< LBGKUtilities > SPLBGKUtilities
std::shared_ptr< LBGK > SPLBGK
SPFDAdvectionDiffusion generateFDAdvectionDiffusion(SPDataWithGhostNodesACLData c, double diffustionCoeff, SPAbstractDataWithGhostNodes v, const VectorTemplate *vt, bool compressibilityCorrection=false)
acl::VectorOfElements dx(const TemplateVE &a)
differential operator
SPDistanceFunction generateDFConvexPolygonPyramid(std::vector< AVec< double >> points, AVec< double > a)
generates pyramid with convex polygon at its base and apex a
asl::SPDistanceFunction generateBath(asl::Block &bl)
SPNumMethod generateBCVelocityVel(SPLBGK nm, SPPositionFunction v, SPAbstractDataWithGhostNodes map)
void initData(SPAbstractData d, double a)
SPNumMethod generateBCLinearGrowth2(SPAbstractDataWithGhostNodes d, double cEq, double beta, SPAbstractDataWithGhostNodes map, const VectorTemplate *const t)
SPBCond generateBCConstantGradient(SPAbstractDataWithGhostNodes d, double v, const VectorTemplate *const t, const std::vector< SlicesNames > &sl)
Bondary condition that makes fixed gradient.
void executeAll(std::vector< T * > &v)
void addScalars(std::string name, AbstractData &data)
const VectorTemplate & d3q19()
Vector template.
VectorOfElements generateVEConstant(T a)
Generates VectorOfElements with 1 Element acl::Constant with value a.
SPPositionFunction generatePFRotationField(const AVec< double > &axis, const AVec< double > &c)
SPDistanceFunction generateDFCylinder(double r, const AVec< double > &l, const AVec< double > &c)
generates cylinder
int main(int argc, char *argv[])
asl::SPDistanceFunction generatePlatform(asl::Block &bl)
void load(int argc, char *argv[])
const double processorLoad() const
asl::SPDistanceFunction generateCrystal(asl::Block &bl)
SPNumMethod generateBCNoSlipVel(SPLBGK nmU, SPAbstractDataWithGhostNodes map)
for velocity field
contains different kernels for preprocessing and posprocessing of data used by LBGK
SPNumMethod generateBCVelocity(SPLBGK nm, SPPositionFunction v, SPAbstractDataWithGhostNodes map)
SPBCond generateBCNoSlip(SPLBGK nm, const std::vector< SlicesNames > &sl)