Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #ifndef QCAD_COUPLEDPOISSONSCHRODINGER_H
00008 #define QCAD_COUPLEDPOISSONSCHRODINGER_H
00009
00010 #include <iostream>
00011
00012 #include "LOCA.H"
00013 #include "LOCA_Epetra.H"
00014 #include "Epetra_Vector.h"
00015 #include "Epetra_LocalMap.h"
00016 #include "LOCA_Epetra_ModelEvaluatorInterface.H"
00017 #include <NOX_Epetra_MultiVector.H>
00018
00019 #include "Albany_ModelEvaluator.hpp"
00020 #include "Albany_AbstractDiscretization.hpp"
00021 #include "Albany_Utils.hpp"
00022 #include "Piro_Epetra_StokhosNOXObserver.hpp"
00023
00024 #include "QCAD_MaterialDatabase.hpp"
00025
00026
00027 namespace QCAD {
00028 std::string strdim(const std::string s, const int dim);
00029 }
00030
00031
00032 namespace QCAD {
00033
00038 class CoupledPoissonSchrodinger : public EpetraExt::ModelEvaluator {
00039 public:
00040
00043
00044 CoupledPoissonSchrodinger(const Teuchos::RCP<Teuchos::ParameterList>& appParams,
00045 const Teuchos::RCP<const Epetra_Comm>& comm,
00046 const Teuchos::RCP<const Epetra_Vector>& initial_guess);
00048
00049 ~CoupledPoissonSchrodinger();
00050
00051 Teuchos::RCP<const Epetra_Map> get_x_map() const;
00052 Teuchos::RCP<const Epetra_Map> get_f_map() const;
00053 Teuchos::RCP<const Epetra_Map> get_p_map(int l) const;
00054 Teuchos::RCP<const Epetra_Map> get_g_map(int j) const;
00055
00056 Teuchos::RCP<const Teuchos::Array<std::string> > get_p_names(int l) const;
00057
00058 Teuchos::RCP<const Epetra_Vector> get_x_init() const;
00059 Teuchos::RCP<const Epetra_Vector> get_x_dot_init() const;
00060 Teuchos::RCP<const Epetra_Vector> get_p_init(int l) const;
00061
00062 Teuchos::RCP<Epetra_Operator> create_W() const;
00063 Teuchos::RCP<EpetraExt::ModelEvaluator::Preconditioner> create_WPrec() const;
00064
00065 Teuchos::RCP<Epetra_Operator> create_DgDx_op(int j) const;
00066 Teuchos::RCP<Epetra_Operator> create_DgDx_dot_op(int j) const;
00067
00068 EpetraExt::ModelEvaluator::InArgs createInArgs() const;
00069 EpetraExt::ModelEvaluator::OutArgs createOutArgs() const;
00070
00071 void evalModel( const InArgs& inArgs, const OutArgs& outArgs ) const;
00072
00073 Teuchos::RCP<Albany::Application> getPoissonApp() const;
00074 Teuchos::RCP<Albany::Application> getSchrodingerApp() const;
00075
00076 Teuchos::RCP<Albany::AbstractDiscretization> getDiscretization() const { return disc; }
00077
00078 public:
00079 void separateCombinedVector(const Teuchos::RCP<Epetra_Vector>& combinedVector,
00080 Teuchos::RCP<Epetra_Vector>& poisson_part,
00081 Teuchos::RCP<Epetra_MultiVector>& schrodinger_part) const;
00082
00083 void separateCombinedVector(const Teuchos::RCP<Epetra_Vector>& combinedVector,
00084 Teuchos::RCP<Epetra_Vector>& poisson_part,
00085 Teuchos::RCP<Epetra_MultiVector>& schrodinger_part,
00086 Teuchos::RCP<Epetra_Vector>& eigenvalue_part) const;
00087
00088 void separateCombinedVector(const Teuchos::RCP<const Epetra_Vector>& combinedVector,
00089 Teuchos::RCP<const Epetra_Vector>& poisson_part,
00090 Teuchos::RCP<const Epetra_MultiVector>& schrodinger_part) const;
00091
00092 void separateCombinedVector(const Teuchos::RCP<const Epetra_Vector>& combinedVector,
00093 Teuchos::RCP<const Epetra_Vector>& poisson_part,
00094 Teuchos::RCP<const Epetra_MultiVector>& schrodinger_part,
00095 Teuchos::RCP<const Epetra_Vector>& eigenvalue_part) const;
00096
00097
00098 private:
00099 Teuchos::RCP<const Teuchos::ParameterList> getValidAppParameters() const;
00100 Teuchos::RCP<const Teuchos::ParameterList> getValidProblemParameters() const;
00101
00102
00103
00104
00105
00106
00107
00108
00109 private:
00110 Teuchos::RCP<const Epetra_Map> disc_map, disc_overlap_map;
00111 Teuchos::RCP<Epetra_Map> combined_SP_map;
00112 Teuchos::RCP<const Epetra_Vector> saved_initial_guess;
00113
00114 Teuchos::RCP<Albany::Application> poissonApp, schrodingerApp;
00115 Teuchos::RCP<EpetraExt::ModelEvaluator> poissonModel, schrodingerModel;
00116
00117 Teuchos::RCP<const Epetra_Comm> myComm;
00118
00119 int nEigenvals;
00120 int num_param_vecs, num_response_vecs;
00121 int num_poisson_param_vecs, num_schrodinger_param_vecs;
00122
00123 double offset_to_CB;
00124
00126 Teuchos::RCP<QCAD::MaterialDatabase> materialDB;
00127
00129 int numDims;
00130 double temperature;
00131 double length_unit_in_m;
00132 double energy_unit_in_eV;
00133
00135 mutable Teuchos::Array<ParamVec> poisson_sacado_param_vec, schrodinger_sacado_param_vec;
00136
00138 Teuchos::RCP<Albany::AbstractDiscretization> disc;
00139
00140 bool bVerbose;
00141 };
00142 }
00143 #endif