• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

Albany_SolverFactory.hpp

Go to the documentation of this file.
00001 //*****************************************************************//
00002 //    Albany 2.0:  Copyright 2012 Sandia Corporation               //
00003 //    This Software is released under the BSD license detailed     //
00004 //    in the file "license.txt" in the top-level Albany directory  //
00005 //*****************************************************************//
00006 
00007 #ifndef ALBANY_SOLVERFACTORY_HPP
00008 #define ALBANY_SOLVERFACTORY_HPP
00009 
00010 #include "Albany_Utils.hpp"
00011 #include "Albany_Application.hpp"
00012 
00013 #include "Thyra_ModelEvaluator.hpp"
00014 #include "Thyra_VectorBase.hpp"
00015 
00016 #include "EpetraExt_ModelEvaluator.h"
00017 #include "Epetra_Vector.h"
00018 
00019 #include "Stokhos_EpetraVectorOrthogPoly.hpp"
00020 
00021 #include "Teuchos_SerialDenseVector.hpp"
00022 #include "Teuchos_RCP.hpp"
00023 #include "Teuchos_ParameterList.hpp"
00024 
00025 #include "AAdapt_AdaptiveModelFactory.hpp"
00026 
00027 
00029 namespace Albany {
00030 
00034   class SolverFactory {
00035   public:
00036 
00038     SolverFactory(const std::string& inputfile,
00039       const Albany_MPI_Comm& mcomm);
00040 
00041     SolverFactory(const Teuchos::RCP<Teuchos::ParameterList>& input_appParams,
00042       const Albany_MPI_Comm& mcomm);
00043 
00044 
00046     virtual ~SolverFactory();
00047 
00049     virtual Teuchos::RCP<EpetraExt::ModelEvaluator> create(
00050       const Teuchos::RCP<const Epetra_Comm>& appComm,
00051       const Teuchos::RCP<const Epetra_Comm>& solverComm,
00052       const Teuchos::RCP<const Epetra_Vector>& initial_guess = Teuchos::null);
00053 
00054     Teuchos::RCP<EpetraExt::ModelEvaluator> createAndGetAlbanyApp(
00055       Teuchos::RCP<Application>& albanyApp,
00056       const Teuchos::RCP<const Epetra_Comm>& appComm,
00057       const Teuchos::RCP<const Epetra_Comm>& solverComm,
00058       const Teuchos::RCP<const Epetra_Vector>& initial_guess  = Teuchos::null);
00059 
00060     Teuchos::RCP<Thyra::ModelEvaluator<double> > createThyraSolverAndGetAlbanyApp(
00061       Teuchos::RCP<Application>& albanyApp,
00062       const Teuchos::RCP<const Epetra_Comm>& appComm,
00063       const Teuchos::RCP<const Epetra_Comm>& solverComm,
00064       const Teuchos::RCP<const Epetra_Vector>& initial_guess  = Teuchos::null);
00065 
00066     Teuchos::RCP<EpetraExt::ModelEvaluator> createAlbanyAppAndModel(
00067       Teuchos::RCP<Application>& albanyApp,
00068       const Teuchos::RCP<const Epetra_Comm>& appComm,
00069       const Teuchos::RCP<const Epetra_Vector>& initial_guess  = Teuchos::null);
00070 
00071     Teuchos::ParameterList& getAnalysisParameters() const
00072       { return appParams->sublist("Piro").sublist("Analysis"); }
00073 
00074     Teuchos::ParameterList& getParameters() const
00075       { return *appParams; }
00076 
00077 
00078   public:
00079     
00080     // Functions to generate reference parameter lists for validation
00081     //  EGN 9/2013: made these three functions public, as they pertain to valid 
00082     //    parameter lists for Albany::Application objects, which may get created
00083     //    apart from Albany::SolverFactory.  It may be better to relocate these 
00084     //    to the Application class, or as functions "related to" Albany::Application.
00085     Teuchos::RCP<const Teuchos::ParameterList>
00086       getValidAppParameters() const;
00087     Teuchos::RCP<const Teuchos::ParameterList>
00088       getValidParameterParameters() const;
00089     Teuchos::RCP<const Teuchos::ParameterList>
00090       getValidResponseParameters() const;
00091 
00092  
00093   private:
00094 
00095     // Private functions to set default parameter values
00096     void setSolverParamDefaults(Teuchos::ParameterList* appParams, int myRank);
00097 
00098     Teuchos::RCP<const Teuchos::ParameterList>
00099       getValidRegressionResultsParameters() const;
00100 
00102     SolverFactory(const SolverFactory&);
00103 
00105     SolverFactory& operator=(const SolverFactory&);
00106 
00107   public:
00109     int checkSolveTestResults(
00110       int response_index,
00111       int parameter_index,
00112       const Epetra_Vector* g,
00113       const Epetra_MultiVector* dgdp) const;
00114 
00116     int checkDakotaTestResults(
00117       int response_index,
00118       const Teuchos::SerialDenseVector<int,double>* drdv) const;
00119 
00121     int checkAnalysisTestResults(
00122       int response_index,
00123       const Teuchos::RCP<Thyra::VectorBase<double> >& tvec) const;
00124 
00126     int checkSGTestResults(
00127       int response_index,
00128       const Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly>& g_sg,
00129       const Epetra_Vector* g_mean = NULL,
00130       const Epetra_Vector* g_std_dev = NULL) const;
00131 
00132   private:
00134     int scaledCompare(double x1, double x2, double relTol, double absTol) const;
00135 
00136     Teuchos::ParameterList *getTestParameters(int response_index) const;
00137 
00138     void storeTestResults(
00139         Teuchos::ParameterList* testParams,
00140         int failures,
00141         int comparisons) const;
00142 
00143   protected:
00145     Teuchos::RCP<Teuchos::ParameterList> appParams;
00146 
00147     Teuchos::RCP<Teuchos::FancyOStream> out;
00148 
00149     Teuchos::RCP<AAdapt::AdaptiveModelFactory> thyraModelFactory;
00150   };
00151 
00152 }
00153 
00154 #endif

Generated on Wed Mar 26 2014 18:36:36 for Albany: a Trilinos-based PDE code by  doxygen 1.7.1