MaMiCo 1.2
Loading...
Searching...
No Matches
CouetteSolver.h
1// Copyright (C) 2015 Technische Universitaet Muenchen
2// This file is part of the Mamico project. For conditions of distribution
3// and use, please see the copyright notice in Mamico's main folder, or at
4// www5.in.tum.de/mamico
5#ifndef _MOLECULARDYNAMICS_COUPLING_SOLVERS_COUETTESOLVER_H_
6#define _MOLECULARDYNAMICS_COUPLING_SOLVERS_COUETTESOLVER_H_
7
8#include "tarch/la/Vector.h"
9#include <cmath>
10
11namespace coupling {
14namespace solvers {
19template <unsigned int dim> class AbstractCouetteSolver {
20public:
26 virtual void advance(double dt) = 0;
33 virtual void setWallVelocity(const tarch::la::Vector<dim, double> wallVelocity) = 0;
34};
35
36template <unsigned int dim> class CouetteSolver;
37} // namespace solvers
38} // namespace coupling
39
46template <unsigned int dim> class coupling::solvers::CouetteSolver : public coupling::solvers::AbstractCouetteSolver<dim> {
47public:
53 CouetteSolver(const double& channelheight, const double& wallVelocity, const double kinVisc)
54 : AbstractCouetteSolver<dim>(), _channelheight(channelheight), _wallVelocity(wallVelocity), _kinVisc(kinVisc), _time(0.0) {}
55
57 virtual ~CouetteSolver() {}
58
61 virtual void advance(double dt) { _time += dt; }
62
71 v[0] = _wallVelocity * (1.0 - pos[dim - 1] / _channelheight);
72 const double pi = 3.141592653589793238;
73 double sum = 0.0;
74 for (int k = 1; k < 30; k++) {
75 sum += 1.0 / k * sin(k * pi * pos[dim - 1] / _channelheight) * exp(-k * k * pi * pi / (_channelheight * _channelheight) * _kinVisc * _time);
76 }
77 v[0] = v[0] - 2.0 * _wallVelocity / pi * sum;
78 return v;
79 }
80
83 virtual void setWallVelocity(const tarch::la::Vector<dim, double> wallVelocity) { _wallVelocity = wallVelocity[0]; }
84
85private:
87 const double _channelheight;
91 const double _kinVisc;
93 double _time;
94};
95
96#endif // _MOLECULARDYNAMICS_COUPLING_SOLVERS_COUETTESOLVER_H_
interface for continuum/macro fluid solvers for the Couette scenario
Definition CouetteSolver.h:19
virtual void setWallVelocity(const tarch::la::Vector< dim, double > wallVelocity)=0
changes the velocity at the moving for, refers to Couette scenario
virtual ~AbstractCouetteSolver()
a dummy destructor
Definition CouetteSolver.h:23
virtual tarch::la::Vector< dim, double > getVelocity(tarch::la::Vector< dim, double > pos) const =0
returns the current velocity at the given position
virtual void advance(double dt)=0
advances the solver in time
implements an analytic Couette flow solver.
Definition CouetteSolver.h:46
virtual tarch::la::Vector< dim, double > getVelocity(tarch::la::Vector< dim, double > pos) const
returns the velocity vector at a certain channel position
Definition CouetteSolver.h:69
virtual void advance(double dt)
advances one time step dt in time
Definition CouetteSolver.h:61
double _wallVelocity
velocity of moving wall
Definition CouetteSolver.h:89
virtual void setWallVelocity(const tarch::la::Vector< dim, double > wallVelocity)
changes the velocity at the moving for, refers to Couette scenario
Definition CouetteSolver.h:83
virtual ~CouetteSolver()
a dummy destructor
Definition CouetteSolver.h:57
CouetteSolver(const double &channelheight, const double &wallVelocity, const double kinVisc)
a simple constructor
Definition CouetteSolver.h:53
double _time
current time
Definition CouetteSolver.h:93
const double _kinVisc
kinematic viscosity
Definition CouetteSolver.h:91
const double _channelheight
height of couette channel
Definition CouetteSolver.h:87
Definition Vector.h:24
all numerical solvers are defined in the namespace, and their interfaces
Definition CouetteSolver.h:14
everything necessary for coupling operations, is defined in here
Definition AdditiveMomentumInsertion.h:15