Electrowetting on dielectric
|
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 ¶ms, 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