Stratimikos Version of the Day
Stratimikos_DefaultLinearSolverBuilder.hpp
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_DEFAULT_LINEAR_SOLVER_BUILDING_BASE
43#define STRATIMIKOS_DEFAULT_LINEAR_SOLVER_BUILDING_BASE
44
45#include "Stratimikos_ConfigDefs.hpp"
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
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 */
119 : public Thyra::LinearSolverBuilderBase<double>
120{
121public:
122
125
134 const std::string &paramsXmlFileName = ""
135 ,const std::string &extraParamsXmlString = ""
136 ,const std::string &paramsUsedXmlOutFileName = ""
137 ,const std::string &paramsXmlFileNameOption = "linear-solver-params-file"
138 ,const std::string &extraParamsXmlStringOption = "extra-linear-solver-params"
139 ,const std::string &paramsUsedXmlOutFileNameOption = "linear-solver-params-used-file"
140 );
141
144
148 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,paramsXmlFileName);
149
153 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,extraParamsXmlString);
154
158 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,paramsUsedXmlOutFileName);
159
163 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,paramsXmlFileNameOption);
164
168 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,extraParamsXmlStringOption);
169
173 STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string,paramsUsedXmlOutFileNameOption);
174
177 const RCP<const AbstractFactory<Thyra::LinearOpWithSolveFactoryBase<double> > >
178 &solveStrategyFactory,
179 const std::string &solveStrategyName,
180 const bool makeDefault = false
181 );
182
185 const std::string &solveStrategyName);
186
189 const RCP<const AbstractFactory<Thyra::PreconditionerFactoryBase<double> > >
190 &precStrategyFactory,
191 const std::string &precStrategyName,
192 const bool makeDefault = false
193 );
194
197 const std::string &precStrategyName);
198
215 void setupCLP( Teuchos::CommandLineProcessor *clp );
216
235 void readParameters( std::ostream *out );
236
252 void writeParamsFile(
253 const Thyra::LinearOpWithSolveFactoryBase<double> &lowsFactory,
254 const std::string &outputXmlFileName = ""
255 ) const;
256
260 std::string getLinearSolveStrategyName() const;
261
265 std::string getPreconditionerStrategyName() const;
266
268
271
273 void setParameterList(RCP<ParameterList> const& paramList);
275 RCP<ParameterList> getNonconstParameterList();
277 RCP<ParameterList> unsetParameterList();
279 RCP<const ParameterList> getParameterList() const;
281 RCP<const ParameterList> getValidParameters() const;
282
284
287
289 RCP<Thyra::LinearOpWithSolveFactoryBase<double> >
291 const std::string &linearSolveStrategyName
292 ) const;
294 RCP<Thyra::PreconditionerFactoryBase<double> >
296 const std::string &preconditioningStrategyName
297 ) const;
298
300
301private:
302
303 // //////////////////////////////////////
304 // Private types
305
306 typedef RCP<const AbstractFactory<Thyra::LinearOpWithSolveFactoryBase<double> > >
307 lowsf_fcty_t;
308 typedef RCP<const AbstractFactory<Thyra::PreconditionerFactoryBase<double> > >
309 pf_fcty_t;
310
311 // //////////////////////////////////////
312 // Private data members
313
314 RCP<ParameterList> paramList_;
315 Array<std::string> validLowsfNames_;
316 Array<lowsf_fcty_t> lowsfArray_;
317 std::string defaultLOWSF_;
318 Array<std::string> validPfNames_; // Contains "None" as the 0th entry!
319 Array<pf_fcty_t> pfArray_;
320 std::string defaultPF_;
321 bool enableDelayedSolverConstruction_;
322 mutable RCP<const ParameterList> validParamList_;
323 mutable RCP<const Teuchos::StringToIntegralParameterEntryValidator<int> > lowsfValidator_;
324 mutable RCP<const Teuchos::StringToIntegralParameterEntryValidator<int> > pfValidator_;
325
326 // //////////////////////////////////////
327 // Private member functions
328
329 void initializeDefaults();
330 void justInTimeInitialize() const;
331
332};
333
334
335} // namespace Stratimikos
336
337
338#endif // STRATIMIKOS_DEFAULT_LINEAR_SOLVER_BUILDING_BASE
Concrete subclass of Thyra::LinearSolverBuilderBase for creating LinearOpWithSolveFactoryBase objects...
void setupCLP(Teuchos::CommandLineProcessor *clp)
Setup the command-line processor to read in the needed data to extra the parameters from.
void writeParamsFile(const Thyra::LinearOpWithSolveFactoryBase< double > &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 "").
void setPreconditioningStrategyFactory(const RCP< const AbstractFactory< Thyra::PreconditionerFactoryBase< double > > > &precStrategyFactory, const std::string &precStrategyName, const bool makeDefault=false)
Set a new preconditioner strategy factory object.
RCP< Thyra::LinearOpWithSolveFactoryBase< double > > createLinearSolveStrategy(const std::string &linearSolveStrategyName) const
void setDefaultPreconditioningStrategyFactoryName(const std::string &precStrategyName)
Set the default linear solver factory name.
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::PreconditionerFactoryBase< double > > 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 "").
DefaultLinearSolverBuilder(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")
Construct with default parameters.
std::string getLinearSolveStrategyName() const
Get the name of the linear solver strategy that will be created on the next call to this->createLinea...
STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string, paramsUsedXmlOutFileNameOption)
The name of the option that will be added the the commandline processor that will set paramsUsedXmlOu...
std::string getPreconditionerStrategyName() const
Get the name of the preconditioner strategy that will be created on the next call to this->createPrec...
void setDefaultLinearSolveStrategyFactoryName(const std::string &solveStrategyName)
Set the default linear solver factory name.
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, 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...
void setLinearSolveStrategyFactory(const RCP< const AbstractFactory< Thyra::LinearOpWithSolveFactoryBase< double > > > &solveStrategyFactory, const std::string &solveStrategyName, const bool makeDefault=false)
Set a new linear solver strategy factory object.
void setParameterList(RCP< ParameterList > const &paramList)

Generated on Fri Mar 10 2023 07:13:22 for Stratimikos by doxygen 1.9.4