Electrowetting on dielectric
/export/home/gkanscha/ANS/submissions/Salgado/include/Charge.h
Go to the documentation of this file.
00001 #ifndef _CHARGE_H_
00002 #define _CHARGE_H_
00003 
00004 #include "Problem.h"
00005 
00020 template<int dim> class Charge: public Problem<dim>{
00021   public:
00033     Charge( const Triangulation<dim> &tria, Material_Parameters &params, const unsigned deg,
00034             const unsigned u_prec, const double ee, const double thres, const unsigned sweeps );
00038     virtual ~Charge();
00039   protected:
00040     const material_function &conductivity; 
00041     const double lambda; 
00042     TrilinosWrappers::PreconditionAMG::AdditionalData prec_data; 
00043     TrilinosWrappers::PreconditionAMG prec; 
00044 
00054     typedef IteratorGroup<4,typename hp::DoFHandler<dim>::active_cell_iterator> Iterator;
00063     struct ScratchData{
00064       hp::QCollection<dim> quad; 
00065       UpdateFlags flags; 
00066       hp::FEValues<dim> fe_val; 
00067       AsFunction<dim> voltage, 
00068                       phase, 
00069                       velocity; 
00070       std::vector<double> loc_charge, loc_phase, loc_div_vel;
00071       std::vector< Tensor<1, dim> > loc_vel, loc_grad_volt;
00072       ScratchData( const hp::FECollection<dim> &fe, std::vector<AsFunction<dim> *> &data,
00073                    const hp::QCollection<dim> &q, const UpdateFlags u_flags ) :
00074           quad(q), flags( u_flags ), fe_val( fe, quad, flags ),
00075           voltage( *( data[0] ) ), phase( *( data[1] ) ), velocity( *( data[2] ) ),
00076           loc_charge( quad.max_n_quadrature_points() ), loc_phase( quad.max_n_quadrature_points() ),
00077           loc_div_vel( quad.max_n_quadrature_points() ), loc_vel( quad.max_n_quadrature_points() ),
00078           loc_grad_volt( quad.max_n_quadrature_points() ) {}
00079       ScratchData( const ScratchData &scratch ) :
00080           quad( scratch.quad ), flags( scratch.flags ), fe_val( scratch.fe_val.get_fe_collection(), quad, flags ),
00081           voltage( scratch.voltage ), phase( scratch.phase ), velocity( scratch.velocity ),
00082           loc_charge( quad.max_n_quadrature_points() ), loc_phase( quad.max_n_quadrature_points() ),
00083           loc_div_vel( quad.max_n_quadrature_points() ), loc_vel( quad.max_n_quadrature_points() ),
00084           loc_grad_volt( quad.max_n_quadrature_points() )  {}
00085     };
00099     virtual void AssembleSystem( std::vector< AsFunction<dim> *> &data, const double time,
00100                                  const bool m_threaded = true );
00107     void AssembleCell( const Iterator Its, ScratchData &scratch,
00108                        typename Problem<dim>::PerTaskData &data );
00112     virtual void ReinitPrec();
00117     virtual void DoSolve( SolverControl &control );
00121     virtual void SetInitialData();
00126     virtual void PreRefinementPreffix();
00131     virtual void PostRefinementSuffix( const std::vector<TrilinosWrappers::Vector> &sol_tmp );
00132   public:
00133     AsFunction<dim> get_charge; 
00134 };
00135 
00136 #endif //_CHARGE_H_
00137