本文整理汇总了C++中MultiBlockLattice3D::getBoundingBox方法的典型用法代码示例。如果您正苦于以下问题:C++ MultiBlockLattice3D::getBoundingBox方法的具体用法?C++ MultiBlockLattice3D::getBoundingBox怎么用?C++ MultiBlockLattice3D::getBoundingBox使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MultiBlockLattice3D
的用法示例。
在下文中一共展示了MultiBlockLattice3D::getBoundingBox方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: iniLattice
void iniLattice( MultiBlockLattice3D<T,DESCRIPTOR>& lattice,
VoxelizedDomain3D<T>& voxelizedDomain )
{
// Switch all remaining outer cells to no-dynamics, except the outer
// boundary layer, and keep the rest as BGKdynamics.
defineDynamics(lattice, voxelizedDomain.getVoxelMatrix(), lattice.getBoundingBox(),
new NoDynamics<T,DESCRIPTOR>, voxelFlag::outside);
initializeAtEquilibrium(lattice, lattice.getBoundingBox(), (T) 1., Array<T,3>((T)0.,(T)0.,(T)0.));
lattice.initialize();
}
示例2: cavitySetup
void cavitySetup( MultiBlockLattice3D<T,DESCRIPTOR>& lattice,
IncomprFlowParam<T> const& parameters,
OnLatticeBoundaryCondition3D<T,DESCRIPTOR>& boundaryCondition )
{
const plint nx = parameters.getNx();
const plint ny = parameters.getNy();
const plint nz = parameters.getNz();
Box3D topLid = Box3D(0, nx-1, ny-1, ny-1, 0, nz-1);
Box3D bottomLid = Box3D(0, nx-1, 0, 0, 0, nz-1);
Box3D everythingButTopLid = Box3D(0, nx-1, 0, ny-2, 0, nz-1);
/*
instantiateOuterNLDboundary(lattice, lattice.getBoundingBox());
setOuterNLDboundaryDynamics(lattice, lattice.getBackgroundDynamics().clone(),
lattice.getBoundingBox(), boundary::dirichlet);
setOuterNLDboundaryDynamics(lattice, lattice.getBackgroundDynamics().clone(), bottomLid, boundary::neumann);
defineDynamics(lattice, bottomLid, lattice.getBackgroundDynamics().clone());
*/
boundaryCondition.setVelocityConditionOnBlockBoundaries(lattice, lattice.getBoundingBox(), boundary::dirichlet);
T u = sqrt((T)2)/(T)2 * parameters.getLatticeU();
initializeAtEquilibrium(lattice, everythingButTopLid, (T) 1., Array<T,3>(0.,0.,0.) );
initializeAtEquilibrium(lattice, topLid, (T) 1., Array<T,3>(u,0.,u) );
setBoundaryVelocity(lattice, topLid, Array<T,3>(u,0.,u) );
lattice.initialize();
}
示例3: writeVTK
void writeVTK(MultiBlockLattice3D<T,DESCRIPTOR>& lattice,
IncomprFlowParam<T> const& parameters,
PhysUnits3D<T> const& units, plint iter)
{
T p_fact = units.getPhysForce(1)/pow(units.getPhysLength(1),2)/3.;
std::string fname(createFileName("vtk", iter, 6));
VtkImageOutput3D<T> vtkOut(fname, units.getPhysLength(1));
vtkOut.writeData<3,float>(*computeVelocity(lattice), "velocity", units.getPhysVel(1));
vtkOut.writeData<float>(*computeDensity(lattice), "density",units.getPhysDensity(1));
MultiScalarField3D<T> p(*computeDensity(lattice));
subtractInPlace(p,1.);
vtkOut.writeData<float>(p,"pressure",p_fact );
IBscalarQuantity sf = SolidFraction;
applyProcessingFunctional(new GetScalarQuantityFromDynamicsFunctional<T,DESCRIPTOR,T>(sf),
lattice.getBoundingBox(),lattice,p);
vtkOut.writeData<float>(p,"solidfraction",1. );
pcout << "wrote " << fname << std::endl;
}
示例4: channelSetup
void channelSetup( MultiBlockLattice3D<T,DESCRIPTOR>& lattice,
IncomprFlowParam<T> const& parameters,
OnLatticeBoundaryCondition3D<T,DESCRIPTOR>& boundaryCondition )
{
// Create Velocity boundary conditions
boundaryCondition.setVelocityConditionOnBlockBoundaries(lattice);
setBoundaryVelocity (
lattice, lattice.getBoundingBox(),
PoiseuilleVelocity<T>(parameters) );
lattice.initialize();
}
示例5: main
int main(int argc, char* argv[]) {
plbInit(&argc, &argv);
//defaultMultiBlockPolicy3D().toggleBlockingCommunication(true);
plint N;
try {
global::argv(1).read(N);
}
catch(...)
{
pcout << "Wrong parameters. The syntax is " << std::endl;
pcout << argv[0] << " N" << std::endl;
pcout << "where N is the resolution. The benchmark cases published " << std::endl;
pcout << "on the Palabos Wiki use N=100, N=400, N=1000, or N=4000." << std::endl;
exit(1);
}
pcout << "Starting benchmark with " << N+1 << "x" << N+1 << "x" << N+1 << " grid points "
<< "(approx. 2 minutes on modern processors)." << std::endl;
IncomprFlowParam<T> parameters(
(T) 1e-2, // uMax
(T) 1., // Re
N, // N
1., // lx
1., // ly
1. // lz
);
MultiBlockLattice3D<T, DESCRIPTOR> lattice (
parameters.getNx(), parameters.getNy(), parameters.getNz(),
new BGKdynamics<T,DESCRIPTOR>(parameters.getOmega()) );
plint numCores = global::mpi().getSize();
pcout << "Number of MPI threads: " << numCores << std::endl;
// Current cores run approximately at 5 Mega Sus.
T estimateSus= 5.e6*numCores;
// The benchmark should run for approximately two minutes
// (2*60 seconds).
T wishNumSeconds = 60.;
plint numCells = lattice.getBoundingBox().nCells();
// Run at least three iterations.
plint numIter = std::max( (plint)3,
(plint)(estimateSus*wishNumSeconds/numCells+0.5));
OnLatticeBoundaryCondition3D<T,DESCRIPTOR>* boundaryCondition
= createLocalBoundaryCondition3D<T,DESCRIPTOR>();
cavitySetup(lattice, parameters, *boundaryCondition);
// Run the benchmark once "to warm up the machine".
for (plint iT=0; iT<numIter; ++iT) {
lattice.collideAndStream();
}
// Run the benchmark for good.
global::timer("benchmark").start();
global::profiler().turnOn();
for (plint iT=0; iT<numIter; ++iT) {
lattice.collideAndStream();
}
pcout << "After " << numIter << " iterations: "
<< (T) (numCells*numIter) /
global::timer("benchmark").getTime() / 1.e6
<< " Mega site updates per second." << std::endl << std::endl;
global::profiler().writeReport();
delete boundaryCondition;
}
示例6: main
int main(int argc, char* argv[]) {
plbInit(&argc, &argv);
global::directories().setOutputDir("./tmp/");
IncomprFlowParam<T> parameters(
(T) 1e-2, // uMax
(T) 10., // Re
30, // N
1., // lx
1., // ly
1. // lz
);
const T logT = (T)1/(T)100;
const T imSave = (T)1/(T)10;
const T vtkSave = (T)1;
const T maxT = (T)10.1;
pcout << "omega= " << parameters.getOmega() << std::endl;
writeLogFile(parameters, "3D diagonal cavity");
T omega = parameters.getOmega();
#ifdef USE_MRT
plint mrtId = 0;
mrtParam<T,DESCRIPTOR>().set(mrtId,MRTparam<T,DESCRIPTOR>(omega));
#endif
MultiBlockLattice3D<T, DESCRIPTOR> lattice (
parameters.getNx(), parameters.getNy(), parameters.getNz(), DYNAMICS );
#ifdef USE_ASINARI
integrateProcessingFunctional(new AsinariPostCollide3D<T,DESCRIPTOR>, lattice.getBoundingBox(), lattice, 0);
#endif
OnLatticeBoundaryCondition3D<T,DESCRIPTOR>* boundaryCondition
//= createInterpBoundaryCondition3D<T,DESCRIPTOR>();
= createLocalBoundaryCondition3D<T,DESCRIPTOR>();
cavitySetup(lattice, parameters, *boundaryCondition);
T previousIterationTime = T();
// Loop over main time iteration.
for (plint iT=0; iT<parameters.nStep(maxT); ++iT) {
global::timer("mainLoop").restart();
if (iT%parameters.nStep(imSave)==0) {
pcout << "Writing Gif ..." << endl;
writeGifs(lattice, parameters, iT);
}
if (iT%parameters.nStep(vtkSave)==0 && iT>0) {
pcout << "Saving VTK file ..." << endl;
writeVTK(lattice, parameters, iT);
}
if (iT%parameters.nStep(logT)==0) {
pcout << "step " << iT
<< "; t=" << iT*parameters.getDeltaT();
}
// Execute a time iteration.
lattice.collideAndStream();
// Access averages from internal statistics ( their value is defined
// only after the call to lattice.collideAndStream() )
if (iT%parameters.nStep(logT)==0) {
pcout << "; av energy="
<< setprecision(10) << getStoredAverageEnergy<T>(lattice)
<< "; av rho="
<< setprecision(10) << getStoredAverageDensity<T>(lattice) << endl;
pcout << "Time spent during previous iteration: "
<< previousIterationTime << endl;
}
previousIterationTime = global::timer("mainLoop").stop();
}
delete boundaryCondition;
}
示例7: writeVTK
void writeVTK(MultiBlockLattice3D<T,DESCRIPTOR>& lattice, plint iter){
VtkImageOutput3D<T> vtkOut(createFileName("vtk", iter, 6), 1.);
vtkOut.writeData<float>(*computeDensity(lattice), "density", 1.);
std::auto_ptr<MultiScalarField3D<T> > velocity(plb::computeVelocityComponent(lattice, lattice.getBoundingBox(), 2));
vtkOut.writeData<T>(*velocity, "velocity", 1.);
}
示例8: main
int main(int argc, char* argv[]) {
plbInit(&argc, &argv);
T uMax;
plint N;
T nu_f,d_part,v_frac, v_inf;
std::string outDir;
try {
global::argv(1).read(d_part);
global::argv(2).read(N);
global::argv(3).read(v_frac);
global::argv(4).read(nu_f);
global::argv(5).read(v_inf);
global::argv(6).read(uMax);
global::argv(7).read(outDir);
} catch(PlbIOException& exception) {
pcout << exception.what() << endl;
pcout << "Command line arguments:\n";
pcout << "1 : d_part\n";
pcout << "2 : N per particle diameter\n";
pcout << "3 : particle volume fraction\n";
pcout << "4 : nu_fluid\n";
pcout << "5 : estimated v_inf\n";
pcout << "6 : uMax\n";
pcout << "7 : outDir\n";
exit(1);
}
std::string lbOutDir(outDir), demOutDir(outDir);
lbOutDir.append("tmp/");
demOutDir.append("post/");
global::directories().setOutputDir(lbOutDir);
const T rho_f = 1000;
LiggghtsCouplingWrapper wrapper(argv,global::mpi().getGlobalCommunicator());
// particle size and volume fraction are handed over to LIGGGHTS
// as variables (see LIGGGHTS docu for details)
wrapper.setVariable("r_part",d_part/2);
wrapper.setVariable("v_frac",v_frac);
wrapper.execFile("in.lbdem");
T g = 9.81;
const T lx = 1., ly = 1., lz = 2.;
T r_ = d_part/2.;
T rho_s = 1100.;
T m = r_*r_*r_*4./3.*3.14*rho_s;
PhysUnits3D<T> units(2.*r_,v_inf,nu_f,lx,ly,lz,N,uMax,rho_f);
IncomprFlowParam<T> parameters(units.getLbParam());
plint nx = parameters.getNx(), ny = parameters.getNy(), nz = parameters.getNz();
// get lattice decomposition from LIGGGHTS and create lattice according to parallelization
// given in the LIGGGHTS input script
LatticeDecomposition lDec(parameters.getNx(),parameters.getNy(),parameters.getNz(),
wrapper.lmp);
SparseBlockStructure3D blockStructure = lDec.getBlockDistribution();
ExplicitThreadAttribution* threadAttribution = lDec.getThreadAttribution();
plint envelopeWidth = 1;
MultiBlockLattice3D<T, DESCRIPTOR>
lattice (MultiBlockManagement3D (blockStructure, threadAttribution, envelopeWidth ),
defaultMultiBlockPolicy3D().getBlockCommunicator(),
defaultMultiBlockPolicy3D().getCombinedStatistics(),
defaultMultiBlockPolicy3D().getMultiCellAccess<T,DESCRIPTOR>(),
new DYNAMICS );
defineDynamics(lattice,lattice.getBoundingBox(),new DYNAMICS);
const T maxT = ceil(3.*lz/v_inf);
const T vtkT = 0.1;
const T logT = 0.0000001;
const plint maxSteps = units.getLbSteps(maxT);
const plint vtkSteps = max<plint>(units.getLbSteps(vtkT),1);
const plint logSteps = max<plint>(units.getLbSteps(logT),1);
writeLogFile(parameters, "sedimenting spheres benchmark");
lattice.initialize();
T dt_phys = units.getPhysTime(1);
plint demSubsteps = 10;
T dt_dem = dt_phys/(T)demSubsteps;
//.........这里部分代码省略.........
示例9: runProgram
void runProgram()
{
/*
* Read the obstacle geometry.
*/
pcout << std::endl << "Reading STL data for the obstacle geometry." << std::endl;
Array<T,3> center(param.cx, param.cy, param.cz);
Array<T,3> centerLB(param.cxLB, param.cyLB, param.czLB);
// The triangle-set defines the surface of the geometry.
TriangleSet<T> triangleSet(param.geometry_fname, DBL);
// Place the obstacle in the correct place in the simulation domain.
// Here the "geometric center" of the obstacle is computed manually,
// by computing first its bounding cuboid. In cases that the STL
// file with the geometry of the obstacle contains its center as
// the point, say (0, 0, 0), then the following variable
// "obstacleCenter" must be set to (0, 0, 0) manually.
Cuboid<T> bCuboid = triangleSet.getBoundingCuboid();
Array<T,3> obstacleCenter = 0.5 * (bCuboid.lowerLeftCorner + bCuboid.upperRightCorner);
triangleSet.translate(-obstacleCenter);
triangleSet.scale(1.0/param.dx); // In lattice units from now on...
triangleSet.translate(centerLB);
triangleSet.writeBinarySTL(outputDir+"obstacle_LB.stl");
// The DEFscaledMesh, and the triangle-boundary are more sophisticated data
// structures used internally by Palabos to treat the boundary.
plint xDirection = 0;
plint borderWidth = 1; // Because Guo acts in a one-cell layer.
// Requirement: margin>=borderWidth.
plint margin = 1; // Extra margin of allocated cells around the obstacle, for the case of moving walls.
plint blockSize = 0; // Size of blocks in the sparse/parallel representation.
// Zero means: don't use sparse representation.
DEFscaledMesh<T> defMesh(triangleSet, 0, xDirection, margin, Dot3D(0, 0, 0));
TriangleBoundary3D<T> boundary(defMesh);
//boundary.getMesh().inflate();
pcout << "tau = " << 1.0/param.omega << std::endl;
pcout << "dx = " << param.dx << std::endl;
pcout << "dt = " << param.dt << std::endl;
pcout << "Number of iterations in an integral time scale: " << (plint) (1.0/param.dt) << std::endl;
/*
* Voxelize the domain.
*/
// Voxelize the domain means: decide which lattice nodes are inside the obstacle and which are outside.
pcout << std::endl << "Voxelizing the domain." << std::endl;
plint extendedEnvelopeWidth = 2; // Extrapolated off-lattice BCs.
const int flowType = voxelFlag::outside;
VoxelizedDomain3D<T> voxelizedDomain (
boundary, flowType, param.boundingBox(), borderWidth, extendedEnvelopeWidth, blockSize );
pcout << getMultiBlockInfo(voxelizedDomain.getVoxelMatrix()) << std::endl;
/*
* Generate the lattice, the density and momentum blocks.
*/
pcout << "Generating the lattice, the rhoBar and j fields." << std::endl;
MultiBlockLattice3D<T,DESCRIPTOR> *lattice = new MultiBlockLattice3D<T,DESCRIPTOR>(voxelizedDomain.getVoxelMatrix());
if (param.useSmago) {
defineDynamics(*lattice, lattice->getBoundingBox(),
new SmagorinskyBGKdynamics<T,DESCRIPTOR>(param.omega, param.cSmago));
pcout << "Using Smagorinsky BGK dynamics." << std::endl;
} else {
defineDynamics(*lattice, lattice->getBoundingBox(),
new BGKdynamics<T,DESCRIPTOR>(param.omega));
pcout << "Using BGK dynamics." << std::endl;
}
bool velIsJ = false;
defineDynamics(*lattice, voxelizedDomain.getVoxelMatrix(), lattice->getBoundingBox(),
new NoDynamics<T,DESCRIPTOR>(), voxelFlag::inside);
lattice->toggleInternalStatistics(false);
MultiBlockManagement3D sparseBlockManagement(lattice->getMultiBlockManagement());
// The rhoBar and j fields are used at both the collision and at the implementation of the
// outflow boundary condition.
plint envelopeWidth = 1;
MultiScalarField3D<T> *rhoBar = new MultiScalarField3D<T> (
MultiBlockManagement3D (
sparseBlockManagement.getSparseBlockStructure(),
sparseBlockManagement.getThreadAttribution().clone(),
envelopeWidth ),
defaultMultiBlockPolicy3D().getBlockCommunicator(),
defaultMultiBlockPolicy3D().getCombinedStatistics(),
defaultMultiBlockPolicy3D().getMultiScalarAccess<T>() );
rhoBar->toggleInternalStatistics(false);
MultiTensorField3D<T,3> *j = new MultiTensorField3D<T,3> (
MultiBlockManagement3D (
sparseBlockManagement.getSparseBlockStructure(),
sparseBlockManagement.getThreadAttribution().clone(),
envelopeWidth ),
defaultMultiBlockPolicy3D().getBlockCommunicator(),
defaultMultiBlockPolicy3D().getCombinedStatistics(),
defaultMultiBlockPolicy3D().getMultiTensorAccess<T,3>() );
j->toggleInternalStatistics(false);
std::vector<MultiBlock3D*> lattice_rho_bar_j_arg;
//.........这里部分代码省略.........