Stratimikos  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
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
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 
66 namespace Teuchos { class CommandLineProcessor; }
67 
68 
69 namespace Stratimikos {
70 
71 
73 using Teuchos::RCP;
75 using Teuchos::Array;
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 {
121 public:
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 
178  &solveStrategyFactory,
179  const std::string &solveStrategyName,
180  const bool makeDefault = false
181  );
182 
185  const std::string &solveStrategyName);
186 
190  &precStrategyFactory,
191  const std::string &precStrategyName,
192  const bool makeDefault = false
193  );
194 
197  const std::string &precStrategyName);
198 
216 
235  void readParameters( std::ostream *out );
236 
252  void writeParamsFile(
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);
282 
284 
287 
291  const std::string &linearSolveStrategyName
292  ) const;
296  const std::string &preconditioningStrategyName
297  ) const;
298 
300 
301 private:
302 
303  // //////////////////////////////////////
304  // Private types
305 
307  lowsf_fcty_t;
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_;
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
std::string getPreconditionerStrategyName() const
Get the name of the preconditioner strategy that will be created on the next call to this-&gt;createPrec...
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.
STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string, paramsXmlFileName)
The name an XML file that will be read to get XML parameters (if not &quot;&quot;).
void setupCLP(Teuchos::CommandLineProcessor *clp)
Setup the command-line processor to read in the needed data to extra the parameters from...
void setDefaultLinearSolveStrategyFactoryName(const std::string &solveStrategyName)
Set the default linear solver factory name.
void setParameterList(RCP< ParameterList > const &paramList)
void readParameters(std::ostream *out)
Force the parameters to be read from a file and/or an extra XML string.
RCP< Thyra::LinearOpWithSolveFactoryBase< double > > createLinearSolveStrategy(const std::string &linearSolveStrategyName) const
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...
std::string getLinearSolveStrategyName() const
Get the name of the linear solver strategy that will be created on the next call to this-&gt;createLinea...
Concrete subclass of Thyra::LinearSolverBuilderBase for creating LinearOpWithSolveFactoryBase objects...
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.
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 setDefaultPreconditioningStrategyFactoryName(const std::string &precStrategyName)
Set the default linear solver factory name.
RCP< Thyra::PreconditionerFactoryBase< double > > createPreconditioningStrategy(const std::string &preconditioningStrategyName) const

Generated on Fri Jun 5 2020 10:13:28 for Stratimikos by doxygen 1.8.5