void Solver::initialize() { for (int id = 0; id < blockManager.getNumBlock(); ++id) { BlockBase* block = blockManager.getBlock(id); Scalar3D<double>* s = dynamic_cast<Scalar3D<double>*>(block->getDataClass(id_s)); double* sData = s->getData(); Index3DS sIndex = s->getIndex(); Vector3D<double>* v = dynamic_cast<Vector3D<double>*>(block->getDataClass(id_v)); double* vData = v->getData(); Index3DV vIndex = v->getIndex(); const Vec3d& orig = block->getOrigin(); const Vec3d& pitch = block->getCellSize(); for (int k = -vc; k < nz+vc; k++) { for (int j = -vc; j < ny+vc; j++) { for (int i = -vc; i < nx+vc; i++) { double x = orig.x + (i + 0.5) * pitch.x; double y = orig.y + (j + 0.5) * pitch.y; double z = orig.z + (k + 0.5) * pitch.z; sData[sIndex(i,j,k)] = sqrt(x*x + y*y + z*z); vData[vIndex(i,j,k)+0] = x; vData[vIndex(i,j,k)+1] = y; vData[vIndex(i,j,k)+2] = z; } } } } }