Stratimikos Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
Stratimikos_LinearSolverBuilder_decl.hpp
Go to the documentation of this file.
1// @HEADER
2// ***********************************************************************
3//
4// Stratimikos: Thyra-based strategies for linear solvers
5// Copyright (2006) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov)
38//
39// ***********************************************************************
40// @HEADER
41
42#ifndef STRATIMIKOS_LINEAR_SOLVER_BUILDING_BASE
43#define STRATIMIKOS_LINEAR_SOLVER_BUILDING_BASE
44
46#include "Thyra_LinearSolverBuilderBase.hpp"
47#include "Teuchos_AbstractFactory.hpp"
48#include "Teuchos_StandardMemberCompositionMacros.hpp"
49#include "Teuchos_StandardParameterEntryValidators.hpp"
50
51// Include these to make all of the helpful decls appear
52#ifdef HAVE_STRATIMIKOS_THYRAEPETRAADAPTERS
53#include "Thyra_EpetraThyraWrappers.hpp"
54#include "Thyra_EpetraLinearOp.hpp"
55#endif
56#include "Thyra_LinearOpWithSolveFactoryHelpers.hpp"
57#include "Thyra_LinearOpWithSolveBase.hpp"
58#include "Thyra_PreconditionerFactoryHelpers.hpp"
59#include "Thyra_DefaultScaledAdjointLinearOp.hpp"
60#include "Thyra_DefaultPreconditioner.hpp"
61#include "Thyra_MultiVectorStdOps.hpp"
62#include "Thyra_VectorStdOps.hpp"
63#include "Thyra_VectorBase.hpp"
64
65
66namespace Teuchos { class CommandLineProcessor; }
67
68
69namespace Stratimikos {
70
71
73using Teuchos::RCP;
75using Teuchos::Array;
77using Teuchos::AbstractFactory;
79using Teuchos::ParameterList;
80
81
97
98/* (Old comments removed from Doxygen)
99 *
100 * The parameters this class accepts are shown below in different format:
101 * <ul>
102 * <li> \ref HumanReadableWithDocumentation "Human readable format (with documentation) for valid parameters accepted by this class"
103 * <li> \ref HumanReadableWithoutDocumentation "Human readable format (without documentation) for valid parameters accepted by this class"
104 * <li> \ref XmlFormat "XML format for valid parameters accepted by this class"
105 * </ul>
106 *
107 * <b>\anchor HumanReadableWithDocumentation Human readable format (with documentation) for valid parameters accepted by this class</b>
108 *
109 * <b>\anchor HumanReadableWithoutDocumentation Human readable format (without documentation) for valid parameters accepted by this class</b>
110 *
111 * \verbinclude simple_stratimikos_example.options.readable.out
112 *
113 * <b>\anchor XmlFormat XML format for valid parameters accepted by this class</b>
114 *
115 * \verbinclude simple_stratimikos_example.options.xml.out
116 *
117 */
118template <class Scalar = double>
120 : public Thyra::LinearSolverBuilderBase<Scalar>
121{
122public:
123
126
135 const std::string &paramsXmlFileName = "",
136 const std::string &extraParamsXmlString = "",
137 const std::string &paramsUsedXmlOutFileName = "",
138 const std::string &paramsXmlFileNameOption = "linear-solver-params-file",
139 const std::string &extraParamsXmlStringOption = "extra-linear-solver-params",
140 const std::string &paramsUsedXmlOutFileNameOption = "linear-solver-params-used-file",
141 const bool &replaceDuplicateFactories = true
142 );
143
146
150 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,paramsXmlFileName);
151
155 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,extraParamsXmlString);
156
160 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,paramsUsedXmlOutFileName);
161
165 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,paramsXmlFileNameOption);
166
170 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,extraParamsXmlStringOption);
171
175 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,paramsUsedXmlOutFileNameOption);
176
180 STANDARD_MEMBER_COMPOSITION_MEMBERS(bool,replaceDuplicateFactories);
181
184 const RCP<const AbstractFactory<Thyra::LinearOpWithSolveFactoryBase<Scalar> > >
185 &solveStrategyFactory,
186 const std::string &solveStrategyName,
187 const bool makeDefault = false
188 );
189
192 const std::string &solveStrategyName);
193
196 const RCP<const AbstractFactory<Thyra::PreconditionerFactoryBase<Scalar> > >
197 &precStrategyFactory,
198 const std::string &precStrategyName,
199 const bool makeDefault = false
200 );
201
204 const std::string &precStrategyName);
205
222 void setupCLP( Teuchos::CommandLineProcessor *clp );
223
242 void readParameters( std::ostream *out );
243
260 const Thyra::LinearOpWithSolveFactoryBase<Scalar> &lowsFactory,
261 const std::string &outputXmlFileName = ""
262 ) const;
263
267 std::string getLinearSolveStrategyName() const;
268
272 std::string getPreconditionerStrategyName() const;
273
275
278
280 void setParameterList(RCP<ParameterList> const& paramList);
282 RCP<ParameterList> getNonconstParameterList();
284 RCP<ParameterList> unsetParameterList();
286 RCP<const ParameterList> getParameterList() const;
288 RCP<const ParameterList> getValidParameters() const;
289
291
294
296 RCP<Thyra::LinearOpWithSolveFactoryBase<Scalar> >
298 const std::string &linearSolveStrategyName
299 ) const;
301 RCP<Thyra::PreconditionerFactoryBase<Scalar> >
303 const std::string &preconditioningStrategyName
304 ) const;
305
307
308private:
309
310 // //////////////////////////////////////
311 // Private types
312
313 typedef RCP<const AbstractFactory<Thyra::LinearOpWithSolveFactoryBase<Scalar> > >
315 typedef RCP<const AbstractFactory<Thyra::PreconditionerFactoryBase<Scalar> > >
317
318 // //////////////////////////////////////
319 // Private data members
320
321 RCP<ParameterList> paramList_;
322 Array<std::string> validLowsfNames_;
323 Array<lowsf_fcty_t> lowsfArray_;
324 std::string defaultLOWSF_;
325 Array<std::string> validPfNames_; // Contains "None" as the 0th entry!
326 Array<pf_fcty_t> pfArray_;
327 std::string defaultPF_;
329 mutable RCP<const ParameterList> validParamList_;
330 mutable RCP<const Teuchos::StringToIntegralParameterEntryValidator<int> > lowsfValidator_;
331 mutable RCP<const Teuchos::StringToIntegralParameterEntryValidator<int> > pfValidator_;
332
333 // //////////////////////////////////////
334 // Private member functions
335
338
339 int getAndAssertExistingFactoryNameIdx(const std::string &setFunctionName,
340 const Teuchos::ArrayView<std::string> namesArray, const std::string &name) const;
341
342};
343
344
346
347
356 const Teuchos::ArrayView<std::string> namesArray, const std::string &name);
357
358
359} // namespace LinearSolverBuilderHelpers
360
361
362} // namespace Stratimikos
363
364
365#endif // STRATIMIKOS_LINEAR_SOLVER_BUILDING_BASE
void setLinearSolveStrategyFactory(const RCP< const AbstractFactory< Thyra::LinearOpWithSolveFactoryBase< Scalar > > > &solveStrategyFactory, const std::string &solveStrategyName, const bool makeDefault=false)
Set a new linear solver strategy factory object.
RCP< Thyra::PreconditionerFactoryBase< Scalar > > createPreconditioningStrategy(const std::string &preconditioningStrategyName) const
STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string, extraParamsXmlString)
An XML string that will be used to update the parameters (if not "").
RCP< const Teuchos::StringToIntegralParameterEntryValidator< int > > lowsfValidator_
RCP< const ParameterList > getParameterList() const
RCP< const AbstractFactory< Thyra::LinearOpWithSolveFactoryBase< double > > > lowsf_fcty_t
std::string getLinearSolveStrategyName() const
Get the name of the linear solver strategy that will be created on the next call to this->createLinea...
void setDefaultPreconditioningStrategyFactoryName(const std::string &precStrategyName)
Set the default linear solver factory name.
STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string, extraParamsXmlStringOption)
The name of the option that will be added the the commandline processor that will set extraParamsXmlS...
STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string, paramsXmlFileNameOption)
The name of the option that will be added the the commandline processor that will set paramsXmlFileNa...
RCP< const ParameterList > getValidParameters() const
RCP< const AbstractFactory< Thyra::PreconditionerFactoryBase< double > > > pf_fcty_t
int getAndAssertExistingFactoryNameIdx(const std::string &setFunctionName, const Teuchos::ArrayView< std::string > namesArray, const std::string &name) const
LinearSolverBuilder(const std::string &paramsXmlFileName="", const std::string &extraParamsXmlString="", const std::string &paramsUsedXmlOutFileName="", const std::string &paramsXmlFileNameOption="linear-solver-params-file", const std::string &extraParamsXmlStringOption="extra-linear-solver-params", const std::string &paramsUsedXmlOutFileNameOption="linear-solver-params-used-file", const bool &replaceDuplicateFactories=true)
Construct with default parameters.
STANDARD_MEMBER_COMPOSITION_MEMBERS(bool, replaceDuplicateFactories)
Determines if duplicate registered factories are replaced or if an exception is thrown.
STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string, paramsUsedXmlOutFileName)
The name of an XML file that will be written (if not "") for the parameters actually used.
RCP< Thyra::LinearOpWithSolveFactoryBase< Scalar > > createLinearSolveStrategy(const std::string &linearSolveStrategyName) const
std::string getPreconditionerStrategyName() const
Get the name of the preconditioner strategy that will be created on the next call to this->createPrec...
void setParameterList(RCP< ParameterList > const &paramList)
void setDefaultLinearSolveStrategyFactoryName(const std::string &solveStrategyName)
Set the default linear solver factory name.
void setupCLP(Teuchos::CommandLineProcessor *clp)
Setup the command-line processor to read in the needed data to extra the parameters from.
void readParameters(std::ostream *out)
Force the parameters to be read from a file and/or an extra XML string.
STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string, paramsUsedXmlOutFileNameOption)
The name of the option that will be added the the commandline processor that will set paramsUsedXmlOu...
void setPreconditioningStrategyFactory(const RCP< const AbstractFactory< Thyra::PreconditionerFactoryBase< Scalar > > > &precStrategyFactory, const std::string &precStrategyName, const bool makeDefault=false)
Set a new preconditioner strategy factory object.
void writeParamsFile(const Thyra::LinearOpWithSolveFactoryBase< Scalar > &lowsFactory, const std::string &outputXmlFileName="") const
Write the parameters list for a LinearOpWithSolveFactoryBase object to a file after the parameters ar...
STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string, paramsXmlFileName)
The name an XML file that will be read to get XML parameters (if not "").
RCP< const Teuchos::StringToIntegralParameterEntryValidator< int > > pfValidator_
int existingNameIndex(const Teuchos::ArrayView< std::string > namesArray, const std::string &name)
Return the index of a name in an array of names.