void peano::applications::latticeboltzmann::blocklatticeboltzmann::tests:: FluctuatingCollisionModelTest::run(){ peano::applications::latticeboltzmann::blocklatticeboltzmann::RegularGridBlockState state; tarch::la::Vector<LB_CURRENT_DIR,double> gamma(1.0); for (int d = 0; d < DIMENSIONS+1; d++){ gamma(d) = 0.0; } state.setMu(1.0); state.setGamma(gamma); peano::applications::latticeboltzmann::blocklatticeboltzmann:: collisionmodels::BlockFluctuatingCollisionModel collisionModel(state); #if ((LB_CURRENT_MODEL==LB_D2Q9) || (LB_CURRENT_MODEL==LB_D3Q19) ) for (int i = 0; i < LB_CURRENT_DIR; i++){ for (int j = 0; j < LB_CURRENT_DIR; j++){ double multi = 0.0; for (int k = 0; k < LB_CURRENT_DIR; k++){ multi += collisionModel._M(j,k)*collisionModel._MTranspose(k,i); } multi = multi - (double)(i==j); std::cout << i << "," << j << ": " << multi << std::endl; validate( fabs(multi) < 1.0e-15); } } #endif }
//----------------------------------------------------------------------- CollisionModelPtr CollisionModelManager::getCollisionModel(const Ogre::MeshPtr& mesh) { // Find in the cache CacheItemMap::iterator it = mCacheItemMap.find(mesh.get()); if (it == mCacheItemMap.end()) { // Free out-of-date collision models first _checkMemoryUsage(); // Create new collision model CollisionModelPtr collisionModel(new CollisionModel); collisionModel->addMesh(mesh); collisionModel->build(false); // Add to cache _add(mesh, collisionModel); return collisionModel; } else { CacheItem* item = &it->second; // Update LRU queue _moveToFront(item); return item->collisionModel; } }