29 #include <utilities/aslParametersManager.h>
30 #include <math/aslTemplates.h>
31 #include <aslGeomInc.h>
32 #include <math/aslPositionFunction.h>
33 #include <aslDataInc.h>
34 #include <acl/aclGenerators.h>
35 #include <acl/aclMath/aclVectorOfElements.h>
36 #include <writers/aslVTKFormatWriters.h>
37 #include <num/aslLBGK.h>
38 #include <num/aslLBGKBC.h>
39 #include <num/aslBasicBC.h>
40 #include <num/aslCrystalGrowthBC.h>
41 #include <num/aslFDAdvectionDiffusion.h>
42 #include <utilities/aslTimer.h>
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 = "