1#include "GranularModule.h"
3#include "ParticleSystem/Module/SummationDensity.h"
7 IMPLEMENT_TCLASS(GranularModule, TDataType)
9 template<typename TDataType>
10 GranularModule<TDataType>::GranularModule()
11 : ElastoplasticityModule<TDataType>()
15 __device__ Real Hardening(Real rho, Real restRho)
19 float ratio = rho / restRho;
20 //ratio = ratio > 1.1f ? 1.1f : ratio;
21 return pow(Real(M_E), Real(ratio - 1.0f));
29 template <typename Real>
30 __global__ void PM_ComputeStiffness(
31 DArray<Real> stiffiness,
34 int i = threadIdx.x + (blockIdx.x * blockDim.x);
35 if (i >= stiffiness.size()) return;
37 stiffiness[i] = Hardening(density[i], Real(1000));
40 template<typename TDataType>
41 void GranularModule<TDataType>::computeMaterialStiffness()
43 int num = this->inY()->size();
44 uint pDims = cudaGridSize(num, BLOCK_SIZE);
46 m_densitySum->compute();
48 PM_ComputeStiffness << <pDims, BLOCK_SIZE >> > (
50 m_densitySum->outDensity()->getData());
54 DEFINE_CLASS(GranularModule);