void Foam::cfdemCloud::setForces()
{
    resetArray(fluidVel_,numberOfParticles(),3);
    resetArray(impForces_,numberOfParticles(),3);
    resetArray(expForces_,numberOfParticles(),3);
    resetArray(DEMForces_,numberOfParticles(),3);
    resetArray(Cds_,numberOfParticles(),1);
    for (int i=0;i<cfdemCloud::nrForceModels();i++) cfdemCloud::forceM(i).setForce();
}
Ejemplo n.º 2
0
bool Foam::cfdemCloudIB::evolve()
{
    numberOfParticlesChanged_ = false;
    arraysReallocated_=false;
    bool doCouple=false;

    if (dataExchangeM().couple())
    {
        Info << "\n timeStepFraction() = " << dataExchangeM().timeStepFraction() << endl;
        doCouple=true;

        if(verbose_) Info << "- getDEMdata()" << endl;
        getDEMdata();
        Info << "nr particles = " << numberOfParticles() << endl;

        // search cellID of particles
        if(verbose_) Info << "- findCell()" << endl;
        locateM().findCell(NULL,positions_,cellIDs_,numberOfParticles());
        if(verbose_) Info << "findCell done." << endl;

        // set void fraction field
        if(verbose_) Info << "- setvoidFraction()" << endl;
        voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_);
        if(verbose_) Info << "setvoidFraction done." << endl;

        // set particles forces
        if(verbose_) Info << "- setForce(forces_)" << endl;
        for(int index = 0;index <  numberOfParticles_; ++index){
            for(int i=0;i<3;i++){
                impForces_[index][i] = 0;
                expForces_[index][i] = 0;
                DEMForces_[index][i] = 0;
            }
        }
        for (int i=0;i<nrForceModels();i++) forceM(i).setForce();
        if(verbose_) Info << "setForce done." << endl;

        // write DEM data
        if(verbose_) Info << " -giveDEMdata()" << endl;
        giveDEMdata();
    }
    Info << "evolve done." << endl;

    //if(verbose_)    #include "debugInfo.H";

    // do particle IO
    IOM().dumpDEMdata();

    return doCouple;
}
Ejemplo n.º 3
0
void Foam::cfdemCloud::setForces()
{
    resetArray(fluidVel_,numberOfParticles(),3);
    resetArray(impForces_,numberOfParticles(),3);
    resetArray(expForces_,numberOfParticles(),3);
    resetArray(DEMForces_,numberOfParticles(),3);
    resetArray(Cds_,numberOfParticles(),1);

    //=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    //reset all USER-defined particle fields
    zeroizeParticleDatFieldsUserCFDEMToExt();
    //=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

    for (int i=0;i<cfdemCloud::nrForceModels();i++) cfdemCloud::forceM(i).setForce();
}
Ejemplo n.º 4
0
ofxMSAPhysics* ofxMSAPhysics::addToCollision(ofxMSAParticle* p) {
	for(int i=0; i< numberOfParticles(); i++) {
		ofxMSAParticle *target = getParticle(i);
		if(target->hasCollision()) makeCollision(target, p);
	}
	return this;
}
void Foam::cfdemCloud::setNumberOfParticles(int nP)
{
    if(nP != numberOfParticles())
    {
        numberOfParticlesChanged_ = true;
        numberOfParticles_ = nP;
    }
}
Ejemplo n.º 6
0
void Foam::cfdemCloud::writeScalarFieldToTerminal(double**& array)
{
    // init double array
    for (int i=0; i<numberOfParticles(); i++)
    {
        Info << array[i][0] << endl;
    }
}
void Foam::cfdemCloud::setPos(double**& pos)
{
    for(int index = 0;index <  numberOfParticles(); ++index)
    {
        for(int i=0;i<3;i++){
            positions_[index][i] = pos[index][i];
        }
    }
}
Ejemplo n.º 8
0
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();
}
Ejemplo n.º 9
0
void Foam::cfdemCloud::writeVectorFieldToTerminal(double**& array)
{
    // init double array
    for (int i=0; i<numberOfParticles(); i++)
    {
        for (int j=0; j<3; j++) Info << array[i][j] << "\t";
        Info << endl;
    }
}
Ejemplo n.º 10
0
void SphSystemData2::updateDensities() {
    auto p = positions();
    auto d = densities();
    const double m = mass();

    parallelFor(
        kZeroSize,
        numberOfParticles(),
        [&] (size_t i) {
            double sum = sumOfKernelNearby(p[i]);
            d[i] = m * sum;
        });
}
Ejemplo n.º 11
0
ofxMSAParticle* ofxMSAPhysics::addParticle(ofxMSAParticle *p) {
	p->verbose = verbose;
	_particles.push_back(p);
	p->setInstanceName(string("particle ") + ofToString(_particles.size(), 0));
	p->_params = &params;
	p->_physics = this;

#ifdef MSAPHYSICS_USE_RECORDER
	if(_replayMode == OFX_MSA_DATA_SAVE)
		_recorder.setSize(numberOfParticles());
#endif
	p->retain();
	return p;		// so you can configure the particle or use for creating constraints
}
Ejemplo n.º 12
0
void Foam::cfdemCloud::CheckExistanceAndReadDEMData()
{
    int nmr_of_part=IOM().LookForDEMdata(); //IOM().getNumberOfParticles("positions_nh");
    //if these files are not empty
    if(nmr_of_part>0)
    {
        Pout <<"Found "<< nmr_of_part<<" particles."<< endl;

        if(nmr_of_part>numberOfParticles())
        {
            FatalError<< "Amount of memory for "<<nmr_of_part<<" particles from prev. simulation exceeds already allocated memory for "<<numberOfParticles()<<" particle. \nIncrease maxNumberOfParticles in coupllingProperties file." << abort(FatalError);
        }

        reAllocArrays();
        setNumberOfParticles(nmr_of_part);

        Info << "- Starting to upload it."<< endl;
        //fetching data from files into DEM arrays
        IOM().getExistingDEMData("positions_nh","vector-atom",positions_);
        IOM().getExistingDEMData("r_nh","scalar-atom",radii_);
        IOM().getExistingDEMData("m_nh","scalar-atom",mass_);
        IOM().getExistingDEMData("v_nh","vector-atom",velocities_);
        IOM().getExistingDEMData("DEMForces_nh","vector-atom",DEMForces_);


        IOM().getExistingDEMData("tTurbs_nh","scalar-atom",tTurb_);
        IOM().getExistingDEMData("tTurbInts_nh","scalar-atom",tTurbInt_);
        IOM().getExistingDEMData("fluidTurbVels_nh","vector-atom",fluidTurbVel_);


        //pushing data to DEM code
        dataExchangeM().giveDataFromPreviosSimulation(nmr_of_part, positions_, velocities_, radii_, mass_,DEMForces_,tTurb_,tTurbInt_,fluidTurbVel_);
        //Info << "All data is loaded."<< endl<< endl;
    }
    else
    {
        //Info << "************** FILES PRESENT BUT EMPTY. ************************************"<< endl<< endl;
    }
}
void Foam::cfdemCloud::findCells()
{
    locateM().findCell(NULL,positions_,cellIDs_,numberOfParticles());
}
Ejemplo n.º 14
0
ofxMSAParticle*		ofxMSAPhysics::getParticle(uint i) {
	return i < numberOfParticles() ? _particles[i] : NULL;
}