LinearSpaceSource::LinearSpaceSource( const CartesianMesh<OneD>& M, const std::vector<unsigned long>& seed ) : _Space(0), _PDF(M.numZones()), _CDF(M.numZones()), FissionSource(seed) { std::vector<LinearSpace> Spaces; Spaces.reserve( M.numZones() ); CartesianMesh<OneD>::const_ZoneIterator zMIter = M.zoneBegin(); double xmin, xmax; for( ; zMIter != M.zoneEnd(); ++zMIter ){ xmin = zMIter->getLeftNode().x(); xmax = zMIter->getRightNode().x(); // LinearSpace with zero slope and intercept Spaces.push_back(LinearSpace(xmin, xmax) ); } _Space = new field_t(M, Spaces); }
int main(int argc, char *argv[]) { #ifdef HAVE_MPI MPI_Init(&argc,&argv); Tpetra::MpiComm<OrdinalType, ScalarType> Comm(MPI_COMM_WORLD); #else Tpetra::SerialComm<OrdinalType, ScalarType> Comm; #endif // Get zero and one for the OrdinalType OrdinalType const OrdinalZero = Teuchos::ScalarTraits<OrdinalType>::zero(); OrdinalType const OrdinalOne = Teuchos::ScalarTraits<OrdinalType>::one(); // Get zero and one for the ScalarType ScalarType const ScalarZero = Teuchos::ScalarTraits<ScalarType>::zero(); ScalarType const ScalarOne = Teuchos::ScalarTraits<ScalarType>::one(); // Creates a vector of size `length', then set the elements values. OrdinalType length = OrdinalOne * 2 * Comm.getNumImages(); OrdinalType indexBase = OrdinalZero; // 1) Creation of a platform #ifdef HAVE_MPI const Tpetra::MpiPlatform <OrdinalType, OrdinalType> platformE(MPI_COMM_WORLD); const Tpetra::MpiPlatform <OrdinalType, ScalarType> platformV(MPI_COMM_WORLD); #else const Tpetra::SerialPlatform <OrdinalType, OrdinalType> platformE; const Tpetra::SerialPlatform <OrdinalType, ScalarType> platformV; #endif // linearly distributed space Tpetra::ElementSpace<OrdinalType> LinearSpace(length, indexBase, platformE); Tpetra::VectorSpace<OrdinalType, ScalarType> VectorLinearSpace(LinearSpace, platformV); // all elements on processor 0 OrdinalType NumMyElements = (Comm.getMyImageID() == 0)?length:0; Tpetra::ElementSpace<OrdinalType> ZeroSpace(-1, NumMyElements, indexBase, platformE); Tpetra::VectorSpace<OrdinalType, ScalarType> VectorZeroSpace(ZeroSpace, platformV); Tpetra::Vector<OrdinalType, ScalarType> LinearV(VectorLinearSpace); Tpetra::Vector<OrdinalType, ScalarType> ZeroV(VectorZeroSpace); LinearV.setAllToScalar(Comm.getMyImageID()); cout << LinearV; Tpetra::Import<OrdinalType> Importer(LinearSpace, ZeroSpace); ZeroV.doImport(LinearV, Importer, Tpetra::Insert); cout << ZeroV; #ifdef HAVE_MPI MPI_Finalize() ; #endif return(EXIT_SUCCESS); }