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