RayleighPlesset_HBGL.h (2627B)
1 /* File: RayleighPlesset_HBGL.h */ 2 /* Date: Thu Feb 18 18:23:07 2016 */ 3 /* Author: Fabian Wermelinger */ 4 /* Tag: Rayleigh-Plesset dynamics (Hilgenfeldt, Brenner, Grossmann, Lohse, 1998) */ 5 /* Copyright 2016 ETH Zurich. All Rights Reserved. */ 6 #ifndef RAYLEIGHPLESSET_HBGL_H_EVWDWXSM 7 #define RAYLEIGHPLESSET_HBGL_H_EVWDWXSM 8 9 #include "BubbleBase.h" 10 11 #include <ODETB/GnuplotDump.h> 12 #include <ODETB/TimeStepper/KernelBase.h> 13 14 #include <cassert> 15 #include <cmath> 16 17 template <typename Tinput, typename Trhs=Tinput> 18 class RayleighPlesset_HBGL : public KernelBase<Tinput,Trhs> 19 { 20 const size_t _N; 21 GnuplotDump* m_dumper; 22 23 public: 24 RayleighPlesset_HBGL(const size_t N=0, const int format=GnuplotDump::BIN) : _N(N) { m_dumper = new GnuplotDump("out", format); } 25 virtual ~RayleighPlesset_HBGL() { delete m_dumper;} 26 27 static void IC(Tinput& U, BubbleData const& data) 28 { 29 assert(Tinput::DataType::SIZE == 2); 30 assert(data.Nbubbles == 1); 31 typename Tinput::DataType& IC = U[0]; 32 IC[0] = data.R0[0]; 33 IC[1] = data.Rdot0[0]; 34 } 35 36 virtual void compute(const Tinput& U, Trhs& rhs, Real const t, void const* const data=nullptr) 37 { 38 const BubbleData& bd = *(BubbleData const* const)data; 39 const typename Tinput::DataType& u = U[0]; 40 typename Trhs::DataType& r = rhs[0]; 41 42 assert(Tinput::DataType::SIZE == 2); 43 assert(u[0] > 0.0); 44 assert(u[1] < bd.cl); 45 assert(data != nullptr); 46 assert(bd.Nbubbles == 1); 47 48 r[0] = u[1]; 49 50 const Real dR03 = (bd.R0[0]*bd.R0[0]*bd.R0[0] - bd.h*bd.h*bd.h); 51 const Real dR3 = (u[0]*u[0]*u[0] - bd.h*bd.h*bd.h); 52 r[1] = bd.rInv*(bd.pv - bd.p0 - bd.pext(t)); 53 r[1] += bd.rInv*(bd.p0 - bd.pv + static_cast<Real>(2.0)*bd.sigma/bd.R0[0])*std::pow(dR03/dR3,bd.gamma)*(static_cast<Real>(1.0) - static_cast<Real>(3.0)*bd.gamma*u[0]*u[0]*u[0]*u[1]/(bd.cl*dR3)); 54 r[1] -= static_cast<Real>(1.5)*u[1]*u[1]; 55 r[1] -= static_cast<Real>(4.0)*bd.nuL*u[1]/u[0]; 56 r[1] -= static_cast<Real>(2.0)*bd.sigma*bd.rInv/u[0]; 57 r[1] /= u[0]; 58 59 assert(!isnan(r[0])); 60 assert(!isnan(r[1])); 61 } 62 63 virtual void write(const size_t step, const Real t, const Real dt, const Tinput& U, const void * const data=nullptr) 64 { 65 const BubbleData& bd = *(BubbleData const* const)data; 66 const Real odat[3] = {U[0][0], U[0][1], bd.pext(t)}; 67 m_dumper->write(step, t, dt, &odat[0], 3); 68 // m_dumper->write(step, t, dt, U.data(), Tinput::DataType::SIZE*U.size()); 69 } 70 }; 71 72 #endif /* RAYLEIGHPLESSET_HBGL_H_EVWDWXSM */