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

QCAD_PoissonNeumann.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 QCAD_POISSONNEUMANN_HPP
00008 #define QCAD_POISSONNEUMANN_HPP
00009 
00010 #include "Phalanx_ConfigDefs.hpp"
00011 #include "Phalanx_Evaluator_WithBaseImpl.hpp"
00012 #include "Phalanx_Evaluator_Derived.hpp"
00013 #include "Phalanx_MDField.hpp"
00014 
00015 #include "Teuchos_ParameterList.hpp"
00016 #include "Epetra_Vector.h"
00017 
00018 #include "Sacado_ParameterAccessor.hpp"
00019 #include "PHAL_AlbanyTraits.hpp"
00020 #include "PHAL_Neumann.hpp"
00021 
00022 #include "QCAD_MaterialDatabase.hpp"
00023 
00024 namespace QCAD {
00025 
00029 template<typename EvalT, typename Traits>
00030 class PoissonNeumann
00031   : public PHAL::Neumann<EvalT, Traits> {
00032 
00033 public:
00034   typedef typename EvalT::ScalarT ScalarT;
00035 
00036   PoissonNeumann(Teuchos::ParameterList& p);
00037   void evaluateFields(typename Traits::EvalData d);
00038   virtual ScalarT& getValue(const std::string &n);
00039 
00040 protected:
00041 
00043   ScalarT inverseFDIntOneHalf(const ScalarT x);
00044 
00046   ScalarT potentialForMBComplIon(const ScalarT &Nc, const ScalarT &Nv, 
00047          const ScalarT &Eg, const double &Chi,
00048          const std::string &dopType, const double &dopingConc);
00049 
00051   ScalarT potentialForMBIncomplIon(const ScalarT &Nc, const ScalarT &Nv, 
00052            const ScalarT &Eg, const double &Chi, 
00053            const std::string &dopType, const double &dopingConc, const double &dopantActE);
00054 
00056   ScalarT potentialForFDComplIon(const ScalarT &Nc, const ScalarT &Nv, 
00057          const ScalarT &Eg, const double &Chi, 
00058          const std::string &dopType, const double &dopingConc);
00059 
00061   ScalarT potentialForZeroKFDComplIon(const ScalarT &Nc, const ScalarT &Nv, 
00062               const ScalarT &Eg, const double &Chi, 
00063               const std::string &dopType, const double &dopingConc);
00064 
00065 
00066 private:
00067   ScalarT user_value;    // value entered by user, distinguished from actual DBC value
00068 
00069   std::string material;
00070   std::string ebName;
00071   std::string carrierStatistics;
00072   std::string incompIonization;
00073   
00074   double dopingDonor;   // in [cm-3]
00075   double dopingAcceptor;
00076   double donorActE;     // (Ec-Ed) where Ed = donor energy level, [eV]
00077   double acceptorActE;  // (Ea-Ev) where Ea = acceptor energy level, [eV]
00078 
00079   ScalarT temperature;  // [K]
00080   
00081   // Since kbT, V0, and qPhiRef are used in all member functions, define them as member variables
00082   ScalarT kbT;  // [eV]
00083   ScalarT V0;   // [V]
00084   ScalarT qPhiRef; 
00085 
00086   double energy_unit_in_eV; // to convert eV -> unit of solution (Phi)
00087   
00089   Teuchos::RCP<QCAD::MaterialDatabase> materialDB;
00090 };
00091 
00092 }
00093 
00094 #endif

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