void Foam::cfdemCloudIB::calcVelocityCorrection ( volScalarField& p, volVectorField& U, volScalarField& phiIB, volScalarField& voidfraction ) { label cellI=0; vector uParticle(0,0,0); vector rVec(0,0,0); vector velRot(0,0,0); vector angVel(0,0,0); for(int index=0; index< numberOfParticles(); index++) { //if(regionM().inRegion()[index][0]) //{ for(int subCell=0;subCell<voidFractionM().cellsPerParticle()[index][0];subCell++) { //Info << "subCell=" << subCell << endl; cellI = cellIDs()[index][subCell]; if (cellI >= 0) { // calc particle velocity for(int i=0;i<3;i++) rVec[i]=U.mesh().C()[cellI][i]-position(index)[i]; for(int i=0;i<3;i++) angVel[i]=angularVelocities()[index][i]; velRot=angVel^rVec; for(int i=0;i<3;i++) uParticle[i] = velocities()[index][i]+velRot[i]; // impose field velocity U[cellI]=(1-voidfractions_[index][subCell])*uParticle+voidfractions_[index][subCell]*U[cellI]; } } //} } // make field divergence free - set reference value in case it is needed fvScalarMatrix phiIBEqn ( fvm::laplacian(phiIB) == fvc::div(U) + fvc::ddt(voidfraction) ); if(phiIB.needReference()) { phiIBEqn.setReference(pRefCell_, pRefValue_); } phiIBEqn.solve(); U=U-fvc::grad(phiIB); U.correctBoundaryConditions(); // correct the pressure as well p=p+phiIB/U.mesh().time().deltaT(); // do we have to account for rho here? p.correctBoundaryConditions(); }
void Foam::setRefCell ( const volScalarField& field, const volScalarField& fieldRef, const dictionary& dict, label& refCelli, scalar& refValue, const bool forceReference ) { if (fieldRef.needReference() || forceReference) { word refCellName = field.name() + "RefCell"; word refPointName = field.name() + "RefPoint"; word refValueName = field.name() + "RefValue"; if (dict.found(refCellName)) { if (Pstream::master()) { refCelli = readLabel(dict.lookup(refCellName)); if (refCelli < 0 || refCelli >= field.mesh().nCells()) { FatalIOErrorIn ( "void Foam::setRefCell\n" "(\n" " const volScalarField&,\n" " const volScalarField&,\n" " const dictionary&,\n" " label& scalar&,\n" " bool\n" ")", dict ) << "Illegal master cellID " << refCelli << ". Should be 0.." << field.mesh().nCells() << exit(FatalIOError); } } else { refCelli = -1; } } else if (dict.found(refPointName)) { point refPointi(dict.lookup(refPointName)); refCelli = field.mesh().findCell(refPointi); label hasRef = (refCelli >= 0 ? 1 : 0); label sumHasRef = returnReduce<label>(hasRef, sumOp<label>()); if (sumHasRef != 1) { FatalIOErrorIn ( "void Foam::setRefCell\n" "(\n" " const volScalarField&,\n" " const volScalarField&,\n" " const dictionary&,\n" " label& scalar&,\n" " bool\n" ")", dict ) << "Unable to set reference cell for field " << field.name() << nl << " Reference point " << refPointName << " " << refPointi << " found on " << sumHasRef << " domains (should be one)" << nl << exit(FatalIOError); } } else { FatalIOErrorIn ( "void Foam::setRefCell\n" "(\n" " const volScalarField&,\n" " const volScalarField&,\n" " const dictionary&,\n" " label& scalar&,\n" " bool\n" ")", dict ) << "Unable to set reference cell for field " << field.name() << nl << " Please supply either " << refCellName << " or " << refPointName << nl << exit(FatalIOError); } refValue = readScalar(dict.lookup(refValueName)); } }
void Foam::setRefCell ( const volScalarField& field, const volScalarField& fieldRef, const dictionary& dict, label& refCelli, scalar& refValue, const bool forceReference ) { if (fieldRef.needReference() || forceReference) { word refCellName = field.name() + "RefCell"; word refPointName = field.name() + "RefPoint"; word refValueName = field.name() + "RefValue"; if (dict.found(refCellName)) { if (Pstream::master()) { refCelli = readLabel(dict.lookup(refCellName)); if (refCelli < 0 || refCelli >= field.mesh().nCells()) { FatalIOErrorInFunction ( dict ) << "Illegal master cellID " << refCelli << ". Should be 0.." << field.mesh().nCells() << exit(FatalIOError); } } else { refCelli = -1; } } else if (dict.found(refPointName)) { point refPointi(dict.lookup(refPointName)); // Try fast approximate search avoiding octree construction refCelli = field.mesh().findCell(refPointi, polyMesh::FACE_PLANES); label hasRef = (refCelli >= 0 ? 1 : 0); label sumHasRef = returnReduce<label>(hasRef, sumOp<label>()); // If reference cell no found use octree search // with cell tet-decompositoin if (sumHasRef != 1) { refCelli = field.mesh().findCell(refPointi); hasRef = (refCelli >= 0 ? 1 : 0); sumHasRef = returnReduce<label>(hasRef, sumOp<label>()); } if (sumHasRef != 1) { FatalIOErrorInFunction ( dict ) << "Unable to set reference cell for field " << field.name() << nl << " Reference point " << refPointName << " " << refPointi << " found on " << sumHasRef << " domains (should be one)" << nl << exit(FatalIOError); } } else { FatalIOErrorInFunction ( dict ) << "Unable to set reference cell for field " << field.name() << nl << " Please supply either " << refCellName << " or " << refPointName << nl << exit(FatalIOError); } refValue = readScalar(dict.lookup(refValueName)); } }