00001 /* @HEADER@ */ 00002 // 00003 /* @HEADER@ */ 00004 00005 #ifndef PLAYA_POISSONBOLTZMANNOP_HPP 00006 #define PLAYA_POISSONBOLTZMANNOP_HPP 00007 00008 #include "PlayaDefs.hpp" 00009 #include "PlayaNonlinearOperatorBase.hpp" 00010 #include "PlayaPoissonBoltzmannJacobian.hpp" 00011 #include "PlayaVectorDecl.hpp" 00012 00013 namespace Playa 00014 { 00015 /** */ 00016 class PoissonBoltzmannOp : public NonlinearOperatorBase<double> 00017 { 00018 public: 00019 /** */ 00020 PoissonBoltzmannOp(int nLocal, const VectorType<double>& vecType); 00021 00022 /** */ 00023 Vector<double> getInitialGuess() const ; 00024 00025 /** */ 00026 Vector<double> exactSoln() const ; 00027 00028 00029 00030 /* */ 00031 GET_RCP(NonlinearOperatorBase<double>); 00032 00033 protected: 00034 /** */ 00035 LinearOperator<double> 00036 computeJacobianAndFunction(Vector<double>& functionValue) const ; 00037 00038 private: 00039 00040 mutable PoissonBoltzmannJacobian J_; 00041 00042 RCP<GhostImporter<double> > importer_; 00043 00044 double uLeftBC_; 00045 00046 double uRightBC_; 00047 00048 00049 }; 00050 00051 } 00052 00053 00054 #endif