The five fundamental Playa object types are VectorType, VectorSpace, Vector, LinearOperator, and LinearSolver.
Vectors are rarely constructed directly by the user. Instead, they are usually created by a call to the createMember() method of VectorSpace. Similarly, a VectorSpace is usually constructed indirectly by one of the methods of a VectorType object. The user's choice of VectorType subclass specifies which internal object representation will be used.
VectorType<double> vecType = new EpetraVectorType(); int numPerProc = 10; VectorSpace<double> space = vecType.createEvenlyPartitionedSpace(MPIComm::world(), numPerProc); Vector<double> x = space.createMember();
In addition, certain implicit operations can be specified using overloaded operators:
LinearOperator<double> APlusB = A+B;
LinearOperator<double> aTimesA = a*A;
LinearOperator<double> AB = A*B;
The implicit inverse and transpose operations can also be done through member functions of LinearOperator, for example,
LinearOperator<double> AInv = A.inverse(mySolver); LinearOperator<double> ATrans = A.transpose();
Linear solver algorithms are represented by subtypes of LinearSolver.
The Preconditioner object stores a preconditioner with left and right operators. A preconditioner instance will rarely be created directly by the user; it will be created inside a solver by a user-specified subtype of PreconditionerFactory.
Linear solvers are usually created from Teuchos ParameterList objects.
LinearSolver<double> amesos = LinearSolverBuilder::createSolver("amesos.xml");
LinearSolver<double> solver = LinearSolverBuilder::createSolver(solverParams);
Amesos is a serial sparse direct solver package.
<ParameterList> <ParameterList name="Linear Solver"> <Parameter name="Type" type="string" value="Amesos"/> <Parameter name="Verbosity" type="int" value="0"/> </ParameterList> </ParameterList>
<ParameterList> <ParameterList name="Linear Solver"> <Parameter name="Type" type="string" value="Belos"/> <Parameter name="Maximum Iterations" type="int" value="1000"/> <Parameter name="Method" type="string" value="GMRES"/> <ParameterList name="Preconditioner"> <Parameter name="Type" type="string" value="ML"/> <Parameter name="Problem Type" type="string" value="SA"/> <ParameterList name="ML Settings"> <Parameter name="output" type="int" value="10"/> </ParameterList> </ParameterList> <Parameter name="Convergence Tolerance" type="double" value="1e-12"/> <Parameter name="Output Frequency" type="int" value="0"/> <!-- num blocks is the restart size --> <Parameter name="Num Blocks" type="int" value="200"/> <Parameter name="Block Size" type="int" value="1"/> </ParameterList> </ParameterList>
<ParameterList> <ParameterList name="Linear Solver"> <Parameter name="Type" type="string" value="Belos"/> <Parameter name="Maximum Iterations" type="int" value="500"/> <Parameter name="Method" type="string" value="GMRES"/> <ParameterList name="Preconditioner"> <Parameter name="Type" type="string" value="Ifpack"/> <Parameter name="Prec Type" type="string" value="ILU"/> <Parameter name="Overlap" type="int" value="1"/> <ParameterList name="Ifpack Settings"> <Parameter name="fact: level-of-fill" type="int" value="2"/> </ParameterList> </ParameterList> <Parameter name="Convergence Tolerance" type="double" value="1e-10"/> <Parameter name="Output Frequency" type="int" value="0"/> <!-- num blocks is the restart size --> <Parameter name="Num Blocks" type="int" value="200"/> <Parameter name="Block Size" type="int" value="1"/> <!-- set verbosity to 33 or 41 for useful diagnostics --> <Parameter name="Verbosity" type="int" value="0"/> </ParameterList> </ParameterList>
<ParameterList> <ParameterList name="Linear Solver"> <Parameter name="Max Iterations" type="int" value="500"/> <Parameter name="Method" type="string" value="GMRES"/> <ParameterList name="Preconditioner"> <Parameter name="Type" type="string" value="ML"/> <Parameter name="Problem Type" type="string" value="SA"/> <ParameterList name="ML Settings"> <Parameter name="output" type="int" value="10"/> </ParameterList> </ParameterList> <Parameter name="Tolerance" type="double" value="1e-12"/> <Parameter name="Type" type="string" value="Aztec"/> <Parameter name="Verbosity" type="int" value="0"/> </ParameterList> </ParameterList>