lammps/lib/atc/BodyForce.h

69 lines
1.8 KiB
C++

#ifndef BODY_FORCE_H
#define BODY_FORCE_H
#include <map>
#include <string>
#include "ATC_TypeDefs.h"
#include "Function.h"
namespace ATC {
/**
* @class BodyForce
* @brief Base class for models of body forces in the momentum eqn
*/
class BodyForce
{
public:
BodyForce() {};
virtual ~BodyForce() {};
virtual bool body_force(const FIELD_MATS &fields,
DENS_MAT &flux) const { return false; };
};
/**
* @class BodyForceViscous
* @brief viscous body forces
*/
class BodyForceViscous : public BodyForce
{
public:
BodyForceViscous(std::fstream &matfile,std::map<std::string,double> & parameters);
virtual ~BodyForceViscous() {};
virtual bool body_force(const FIELD_MATS &fields,
DENS_MAT &flux) const
{
FIELD_MATS::const_iterator v_field = fields.find(VELOCITY);
const DENS_MAT & v = v_field->second;
flux = -gamma_*v;
return true;
}
protected:
double gamma_;
};
/**
* @class BodyForceElectricField
* @brief electric field body forces
*/
class BodyForceElectricField : public BodyForce
{
public:
BodyForceElectricField(std::fstream &matfile,std::map<std::string,double> & parameters)
{ throw ATC_Error("unimplemented due to issues with accessing electric field"); }
virtual ~BodyForceElectricField() {};
virtual bool body_force(const FIELD_MATS &fields,
DENS_MAT &flux) const
{
FIELD_MATS::const_iterator v_field = fields.find(VELOCITY);
const DENS_MAT & v = v_field->second;
int nNodes = v.nRows();
flux.reset(nNodes,1);
return true;
}
};
}
#endif