Go to the documentation of this file.00001
00002
00003
00004
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
00081
00082
00083
00084
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
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