32        this->varSamplingDistance()->setRange(0.001, 1);
 
   33        this->varSmoothingLength()->setRange(1, 3);
 
   35        auto callback = std::make_shared<FCallBackFunc>(
 
   37                auto d = this->varSamplingDistance()->getValue();
 
   38                auto h = this->varSmoothingLength()->getValue();
 
   39                this->stateSamplingDistance()->setValue(d);
 
   40                this->stateSmoothingLength()->setValue(d * h);
 
   44        this->varSamplingDistance()->attach(callback);
 
   45        this->varSmoothingLength()->attach(callback);
 
   47        this->varSmoothingLength()->setValue(1.2);
 
   50        auto integrator = std::make_shared<ParticleIntegrator<TDataType>>();
 
   51        this->stateTimeStep()->connect(integrator->inTimeStep());
 
   52        this->statePosition()->connect(integrator->inPosition());
 
   53        this->stateVelocity()->connect(integrator->inVelocity());
 
   56        auto nbrQuery = std::make_shared<NeighborPointQuery<TDataType>>();
 
   57        this->stateSmoothingLength()->connect(nbrQuery->inRadius());
 
   58        this->statePosition()->connect(nbrQuery->inPosition());
 
   61        auto density = std::make_shared<SemiImplicitDensitySolver<TDataType>>();
 
   62        this->stateSamplingDistance()->connect(density->inSamplingDistance());
 
   63        this->stateSmoothingLength()->connect(density->inSmoothingLength());
 
   64        this->stateTimeStep()->connect(density->inTimeStep());
 
   65        this->statePosition()->connect(density->inPosition());
 
   66        this->stateVelocity()->connect(density->inVelocity());
 
   67        nbrQuery->outNeighborIds()->connect(density->inNeighborIds());
 
   70        auto viscosity = std::make_shared<ImplicitViscosity<TDataType>>();
 
   71        viscosity->varViscosity()->setValue(
Real(1.0));
 
   72        this->stateTimeStep()->connect(viscosity->inTimeStep());
 
   73        this->stateSmoothingLength()->connect(viscosity->inSmoothingLength());
 
   74        this->stateSamplingDistance()->connect(viscosity->inSamplingDistance());
 
   75        this->statePosition()->connect(viscosity->inPosition());
 
   76        this->stateVelocity()->connect(viscosity->inVelocity());
 
   77        nbrQuery->outNeighborIds()->connect(viscosity->inNeighborIds());
 
   80        integrator->connect(density->importModules());
 
   81        density->connect(viscosity->importModules());
 
   84        auto calculateNorm = std::make_shared<CalculateNorm<DataType3f>>();
 
   85        this->stateVelocity()->connect(calculateNorm->inVec());
 
   88        auto colorMapper = std::make_shared<ColorMapping<DataType3f>>();
 
   89        colorMapper->varMax()->setValue(5.0f);
 
   90        calculateNorm->outNorm()->connect(colorMapper->inScalar());
 
   93        auto ptRender = std::make_shared<GLPointVisualModule>();
 
   94        ptRender->varPointSize()->setValue(0.0035f);
 
   95        ptRender->setColor(
Color(1, 0, 0));
 
   96        ptRender->setColorMapMode(GLPointVisualModule::PER_VERTEX_SHADER);
 
   98        this->statePointSet()->connect(ptRender->inPointSet());
 
   99        colorMapper->outColor()->connect(ptRender->inColor());
 
 
  115        auto emitters = this->getParticleEmitters();
 
  117        int curNum = this->statePosition()->size();
 
  118        int totalNum = curNum;
 
  119        if (emitters.size() > 0)
 
  121            for (
int i = 0; i < emitters.size(); i++)
 
  123                totalNum += emitters[i]->sizeOfParticles();
 
  126            if (totalNum > curNum)
 
  133                    pBuf.assign(this->statePosition()->getData());
 
  134                    vBuf.assign(this->stateVelocity()->getData());
 
  137                this->statePosition()->resize(totalNum);
 
  138                this->stateVelocity()->resize(totalNum);
 
  146                    new_pos.assign(pBuf, curNum, 0, 0);
 
  147                    new_vel.assign(vBuf, curNum, 0, 0);
 
  155                for (
int i = 0; i < emitters.size(); i++)
 
  157                    int num = emitters[i]->sizeOfParticles();
 
  163                        new_pos.assign(points, num, offset, 0);
 
  164                        new_vel.assign(vels, num, offset, 0);
 
  172        if (this->varReshuffleParticles()->getValue())
 
  174            auto& pos = this->statePosition()->getData();
 
  175            auto& vel = this->stateVelocity()->getData();
 
 
  189        auto initials = this->getInitialStates();
 
  191        if (initials.size() > 0) 
 
  195            for (
int i = 0; i < initials.size(); i++)
 
  197                totalNum += initials[i]->statePosition()->size();
 
  200            this->statePosition()->resize(totalNum);
 
  201            this->stateVelocity()->resize(totalNum);
 
  209                for (
int i = 0; i < initials.size(); i++)
 
  211                    auto inPos = initials[i]->statePosition()->getDataPtr();
 
  212                    auto inVel = initials[i]->stateVelocity()->getDataPtr();
 
  213                    if (!inPos->isEmpty())
 
  215                        uint num = inPos->size();
 
  217                        new_pos.assign(*inPos, num, offset, 0);
 
  218                        new_vel.assign(*inVel, num, offset, 0);
 
  226            this->statePosition()->resize(0);
 
  227            this->stateVelocity()->resize(0);
 
 
void preUpdateStates() override
 
void resetStates() override
 
static void reorderParticles(DArray< Coord > &pos, DArray< Coord > &vel, DArray< OcKey > &morton)
 
static void calculateMortonCode(DArray< OcKey > &morton, DArray< Coord > &pos, Real d)