Stratimikos  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Stratimikos_LinearSolverBuilder_decl.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_LINEAR_SOLVER_BUILDING_BASE
43 #define STRATIMIKOS_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  */
118 template <class Scalar = double>
120  : public Thyra::LinearSolverBuilderBase<Scalar>
121 {
122 public:
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 
185  &solveStrategyFactory,
186  const std::string &solveStrategyName,
187  const bool makeDefault = false
188  );
189 
192  const std::string &solveStrategyName);
193 
197  &precStrategyFactory,
198  const std::string &precStrategyName,
199  const bool makeDefault = false
200  );
201 
204  const std::string &precStrategyName);
205 
223 
242  void readParameters( std::ostream *out );
243 
259  void writeParamsFile(
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);
289 
291 
294 
298  const std::string &linearSolveStrategyName
299  ) const;
303  const std::string &preconditioningStrategyName
304  ) const;
305 
307 
308 private:
309 
310  // //////////////////////////////////////
311  // Private types
312 
314  lowsf_fcty_t;
316  pf_fcty_t;
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_;
328  bool enableDelayedSolverConstruction_;
329  mutable RCP<const ParameterList> validParamList_;
332 
333  // //////////////////////////////////////
334  // Private member functions
335 
336  void initializeDefaults();
337  void justInTimeInitialize() const;
338 
339  int getAndAssertExistingFactoryNameIdx(const std::string &setFunctionName,
340  const Teuchos::ArrayView<std::string> namesArray, const std::string &name) const;
341 
342 };
343 
344 
345 namespace LinearSolverBuilderHelpers {
346 
347 
355 int existingNameIndex(
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
RCP< const ParameterList > getParameterList() const
STANDARD_MEMBER_COMPOSITION_MEMBERS(std::string, paramsXmlFileName)
The name an XML file that will be read to get XML parameters (if not &quot;&quot;).
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.
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.
void setDefaultLinearSolveStrategyFactoryName(const std::string &solveStrategyName)
Set the default linear solver factory name.
RCP< Thyra::PreconditionerFactoryBase< Scalar > > createPreconditioningStrategy(const std::string &preconditioningStrategyName) const
std::string getPreconditionerStrategyName() const
Get the name of the preconditioner strategy that will be created on the next call to this-&gt;createPrec...
void readParameters(std::ostream *out)
Force the parameters to be read from a file and/or an extra XML string.
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 setParameterList(RCP< ParameterList > const &paramList)
std::string getLinearSolveStrategyName() const
Get the name of the linear solver strategy that will be created on the next call to this-&gt;createLinea...
RCP< Thyra::LinearOpWithSolveFactoryBase< Scalar > > createLinearSolveStrategy(const std::string &linearSolveStrategyName) const
Concrete subclass of Thyra::LinearSolverBuilderBase for creating Thyra::LinearOpWithSolveFactoryBase ...
void setDefaultPreconditioningStrategyFactoryName(const std::string &precStrategyName)
Set the default linear solver factory name.
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...
void setupCLP(Teuchos::CommandLineProcessor *clp)
Setup the command-line processor to read in the needed data to extra the parameters from...
RCP< const ParameterList > getValidParameters() const

Generated on Fri Apr 19 2024 09:22:25 for Stratimikos by doxygen 1.8.5