本文整理汇总了C++中MultiBlockLattice3D::incrementTime方法的典型用法代码示例。如果您正苦于以下问题:C++ MultiBlockLattice3D::incrementTime方法的具体用法?C++ MultiBlockLattice3D::incrementTime怎么用?C++ MultiBlockLattice3D::incrementTime使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MultiBlockLattice3D
的用法示例。
在下文中一共展示了MultiBlockLattice3D::incrementTime方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: runProgram
//.........这里部分代码省略.........
std::vector<MultiBlock3D*> particleArg;
particleArg.push_back(particles);
std::vector<MultiBlock3D*> particleFluidArg;
particleFluidArg.push_back(particles);
particleFluidArg.push_back(lattice);
// Functional that advances the particles to their new position at each predefined time step.
integrateProcessingFunctional (
new AdvanceParticlesEveryWhereFunctional3D<T,DESCRIPTOR>(param.cutOffSpeedSqr),
lattice->getBoundingBox(), particleArg, 0);
// Functional that assigns the particle velocity according to the particle's position in the fluid.
integrateProcessingFunctional (
new FluidToParticleCoupling3D<T,DESCRIPTOR>((T) param.particleTimeFactor),
lattice->getBoundingBox(), particleFluidArg, 1 );
// Definition of a domain from which particles will be injected in the flow field.
Box3D injectionDomain(0, 0, centerLB[1]-0.25*param.ny, centerLB[1]+0.25*param.ny,
centerLB[2]-0.25*param.nz, centerLB[2]+0.25*param.nz);
// Definition of simple mass-less particles.
Particle3D<T,DESCRIPTOR>* particleTemplate=0;
particleTemplate = new PointParticle3D<T,DESCRIPTOR>(0, Array<T,3>(0.,0.,0.), Array<T,3>(0.,0.,0.));
// Functional which injects particles with predefined probability from the specified injection domain.
std::vector<MultiBlock3D*> particleInjectionArg;
particleInjectionArg.push_back(particles);
integrateProcessingFunctional (
new InjectRandomParticlesFunctional3D<T,DESCRIPTOR>(particleTemplate, param.particleProbabilityPerCell),
injectionDomain, particleInjectionArg, 0 );
// Definition of an absorbtion domain for the particles.
Box3D absorbtionDomain(param.outlet);
// Functional which absorbs the particles which reach the specified absorbtion domain.
integrateProcessingFunctional (
new AbsorbParticlesFunctional3D<T,DESCRIPTOR>, absorbtionDomain, particleArg, 0 );
particles->executeInternalProcessors();
}
/*
* Starting the simulation.
*/
plb_ofstream energyFile((outputDir+"average_energy.dat").c_str());
pcout << std::endl;
pcout << "Starting simulation." << std::endl;
for (plint i = 0; i < param.maxIter; ++i) {
if (i <= param.initialIter) {
Array<T,3> uBoundary(param.getInletVelocity(i), 0.0, 0.0);
setBoundaryVelocity(*lattice, param.inlet, uBoundary);
}
if (i % param.statIter == 0) {
pcout << "At iteration " << i << ", t = " << i*param.dt << std::endl;
Array<T,3> force(boundaryCondition->getForceOnObject());
T factor = util::sqr(util::sqr(param.dx)) / util::sqr(param.dt);
pcout << "Force on object over fluid density: F[x] = " << force[0]*factor << ", F[y] = "
<< force[1]*factor << ", F[z] = " << force[2]*factor << std::endl;
T avEnergy = boundaryCondition->computeAverageEnergy() * util::sqr(param.dx) / util::sqr(param.dt);
pcout << "Average kinetic energy over fluid density: E = " << avEnergy << std::endl;
energyFile << i*param.dt << " " << avEnergy << std::endl;
pcout << std::endl;
}
if (i % param.vtkIter == 0) {
pcout << "Writing VTK at time t = " << i*param.dt << endl;
writeVTK(*boundaryCondition, i);
if (param.useParticles) {
writeParticleVtk<T,DESCRIPTOR> (
*particles, createFileName(outputDir+"particles_", i, PADDING) + ".vtk",
param.maxNumParticlesToWrite );
}
}
if (i % param.imageIter == 0) {
pcout << "Writing PPM image at time t = " << i*param.dt << endl;
writePPM(*boundaryCondition, i);
}
lattice->executeInternalProcessors();
lattice->incrementTime();
if (param.useParticles && i % param.particleTimeFactor == 0) {
particles->executeInternalProcessors();
}
}
energyFile.close();
delete outerBoundaryCondition;
delete boundaryCondition;
if (param.useParticles) {
delete particles;
}
delete j;
delete rhoBar;
delete lattice;
}