Electrowetting on dielectric
/export/home/gkanscha/ANS/submissions/Salgado/include/Voltage.h
Go to the documentation of this file.
00001 #ifndef _VOLTAGE_H_
00002 #define _VOLTAGE_H_
00003 
00004 #include "Problem.h"
00005 
00006 using namespace dealii;
00007 
00011 template<int dim> class Vbc: public Function<dim>{
00012   public:
00023     Vbc( const TestCase testcase, const double t = 0. );
00027     virtual ~Vbc();
00033     virtual double value( const Point<dim> &p, unsigned component = 0 ) const;
00034   protected:
00038     const TestCase tc;
00039 };
00040 
00062 template<int dim> class Voltage: public Problem<dim>{
00063   public:
00076     Voltage( const Triangulation<dim> &tria, Material_Parameters &params, const unsigned deg,
00077              const unsigned u_prec, const double ee, const double thres, const unsigned sweeps,
00078              const TestCase testcase );
00082     virtual ~Voltage();
00083   protected:
00084     const material_function &epsilon; 
00085     const double epsilon_plate; 
00086     Vbc<dim> volt; 
00087     typename FunctionMap<dim>::type BCs; 
00088     TrilinosWrappers::PreconditionAMG prec; 
00089     TrilinosWrappers::PreconditionAMG::AdditionalData prec_data; 
00090 
00099     typedef IteratorGroup<3, typename hp::DoFHandler<dim>::active_cell_iterator> Iterator;
00108     struct ScratchData{
00109       hp::QCollection<dim> quad; 
00110       UpdateFlags flags; 
00111       hp::FEValues<dim> fe_val; 
00112       AsFunction<dim> charge, 
00113                       phase; 
00114       std::vector<double> loc_charge, loc_phase;
00115       ScratchData( const hp::FECollection<dim> &fe, const std::vector<AsFunction<dim> *> &data,
00116                    const hp::QCollection<dim> &q, const UpdateFlags u_flags ) :
00117           quad(q), flags( u_flags ), fe_val( fe, quad, flags ),
00118           charge( *( data[0] ) ), phase( *( data[1] ) ),
00119           loc_charge( quad.max_n_quadrature_points() ), loc_phase( quad.max_n_quadrature_points() ) {}
00120       ScratchData( const ScratchData &scratch ) :
00121           quad( scratch.quad ), flags( scratch.flags ),
00122           fe_val( scratch.fe_val.get_fe_collection(), quad, flags ),
00123           charge( scratch.charge ), phase( scratch.phase ),
00124           loc_charge( quad.max_n_quadrature_points() ), loc_phase( quad.max_n_quadrature_points() ) {}
00125     };
00138     virtual void AssembleSystem( std::vector< AsFunction<dim> * > &data, 
00139                                  const double time, const bool m_threaded = true );
00146     void AssembleCell( const Iterator Its, ScratchData &scratch,
00147                        typename Problem<dim>::PerTaskData &data );
00151     virtual void SetupDoFsSuffix();
00155     virtual void ReinitPrec();
00160     virtual void DoSolve( SolverControl &control );
00164     virtual void SetInitialData();
00168     virtual void PreRefinementPreffix();
00172     virtual void PostRefinementSuffix( const std::vector<TrilinosWrappers::Vector> &sol_tmp );
00173   public:
00177     AsFunction<dim> get_voltage;
00178 };
00179 
00180 #endif //_VOLTAGE_H_
00181