MeltableParticle Class Reference

#include <MeltableParticle.h>

+ Inheritance diagram for MeltableParticle:

Public Member Functions

 MeltableParticle ()=default
 Basic Particle constructor, creates a particle at (0,0,0) with radius, mass and inertia equal to 1. More...
 
 MeltableParticle (const MeltableParticle &p)=default
 Particle copy constructor, which accepts as input a reference to a Particle. It creates a copy of this Particle and all it's information. Usually it is better to use the copy() function for polymorphism. More...
 
MeltableParticle * copy () const override
 Particle copy method. It calls to copy constructor of this Particle, useful for polymorphism. More...
 
std::string getName () const override
 
Mdouble getParticleProjectedArea ()
 
const MeltableNormalSpecies * getMeltableSpecies () const
 
void actionsBeforeTimeStep () override
 
void actionsAfterTimeStep () override
 
unsigned getNumberOfFieldsVTK () const override
 
std::string getTypeVTK (unsigned i) const override
 
std::string getNameVTK (unsigned i) const override
 
std::vector< Mdouble > getFieldVTK (unsigned i) const override
 
void setSpecies (const ParticleSpecies *species) override
 
void addHeat (double heat)
 
double getMeltRate (double solidRadius) const
 
double getSolidRadius () const
 
double getMoltenLayerThickness () const
 
- Public Member Functions inherited from Thermal< Particle >
 Thermal ()
 Basic Particle constructor, creates a particle at (0,0,0) with radius, mass and inertia equal to 1. More...
 
 Thermal (const Thermal &p)
 Particle copy constructor, which accepts as input a reference to a Particle. It creates a copy of this Particle and all it's information. Usually it is better to use the copy() function for polymorphism. More...
 
 ~Thermal () override=default
 Particle destructor, needs to be implemented and checked if it removes tangential spring information. More...
 
Thermal * copy () const override
 Particle copy method. It calls to copy constructor of this Particle, useful for polymorfism. More...
 
void write (std::ostream &os) const override
 
std::string getName () const override
 
void read (std::istream &is) override
 
Mdouble getTemperature () const
 
void setTemperature (Mdouble temperature)
 
void addTemperature (Mdouble temperature)
 
void setTemperatureDependentDensity (const std::function< double(double)> &temperatureDependentDensity)
 
const std::function< double(double)> & getTemperatureDependentDensity () const
 
const std::function< double(double)> & getTimeDependentTemperature () const
 
void setTimeDependentTemperature (const std::function< double(double)> &timeDependentTemperature)
 
void actionsAfterTimeStep () override
 
bool isSphericalParticle () const override
 

Private Attributes

double heat_ = 0
 
const MeltableNormalSpecies * meltableSpecies_ = nullptr
 

Additional Inherited Members

- Protected Attributes inherited from Thermal< Particle >
Mdouble temperature_
 

Constructor & Destructor Documentation

◆ MeltableParticle() [1/2]

MeltableParticle::MeltableParticle ( )
default

Basic Particle constructor, creates a particle at (0,0,0) with radius, mass and inertia equal to 1.

Referenced by copy().

◆ MeltableParticle() [2/2]

MeltableParticle::MeltableParticle ( const MeltableParticle &  p)
default

Particle copy constructor, which accepts as input a reference to a Particle. It creates a copy of this Particle and all it's information. Usually it is better to use the copy() function for polymorphism.

Member Function Documentation

◆ actionsAfterTimeStep()

void MeltableParticle::actionsAfterTimeStep ( )
override

Compute heat

Todo:
mass not kept!
55 {
56  // apply heat
58  double timeStep = getHandler()->getDPMBase()->getTimeStep();
59  double temperatureStep = heat_*getInvMass()/heatCapacity*timeStep;
60  addTemperature(temperatureStep);
61 
62 // // add bonding radius
63 // for (auto i : getInteractions()) {
64 // if (i->getP()==this) {
65 // auto m = dynamic_cast<MeltableInteraction*>(i);
66 // m->addBondingOverlap()
67 // }
68 // }
69 
70  // thermal expansion
72  {
73  setRadius(getRadius()+meltableSpecies_->getThermalExpansionCoefficient()*getRadius()*temperatureStep);
75  }
76 }
Mdouble getThermalExpansionCoefficient() const
Definition: MeltableNormalSpecies.cc:244
Mdouble getEffectiveHeatCapacity(double temperature) const
Definition: MeltableNormalSpecies.cc:292
const MeltableNormalSpecies * meltableSpecies_
Definition: MeltableParticle.h:77
double heat_
Definition: MeltableParticle.h:76
void addTemperature(Mdouble temperature)
Definition: ThermalParticle.h:91
Mdouble getTemperature() const
Definition: ThermalParticle.h:80

References Thermal< Particle >::addTemperature(), MeltableNormalSpecies::getEffectiveHeatCapacity(), Thermal< Particle >::getTemperature(), MeltableNormalSpecies::getThermalExpansionCoefficient(), heat_, and meltableSpecies_.

◆ actionsBeforeTimeStep()

void MeltableParticle::actionsBeforeTimeStep ( )
override

Compute heat

36 {
37  const auto s = meltableSpecies_;
38  heat_ = s->getHeatInput(this);
39  // add thermal convection
40  heat_ += -s->getThermalConvectionCoefficient() * getParticleProjectedArea()
41  * (getTemperature() - s->getAmbientTemperature());
42  // add thermal radiation
43  Mdouble radiationCoefficient = constants::stefanBoltzmanConstant
44  * s->getMaterialEmissivity()
45  * (getTemperature() + s->getAmbientTemperature())
47  + mathsFunc::square(s->getAmbientTemperature()));
48  heat_ += -radiationCoefficient * getParticleProjectedArea() * (getTemperature() - s->getAmbientTemperature());
49 }
Mdouble getParticleProjectedArea()
Definition: MeltableParticle.cc:27
RealScalar s
Definition: level1_cplx_impl.h:130
const Mdouble stefanBoltzmanConstant
Definition: ExtendedMath.h:30
T square(const T val)
squares a number
Definition: ExtendedMath.h:86

References getParticleProjectedArea(), Thermal< Particle >::getTemperature(), heat_, meltableSpecies_, s, mathsFunc::square(), and constants::stefanBoltzmanConstant.

◆ addHeat()

void MeltableParticle::addHeat ( double  heat)
inline
59  {
60  heat_ += heat;
61  }

References heat_.

◆ copy()

MeltableParticle * MeltableParticle::copy ( ) const
override

Particle copy method. It calls to copy constructor of this Particle, useful for polymorphism.

Copy method. Uses copy constructor to create a copy on the heap. Useful for polymorphism.

Returns
pointer to the particle's copy
14 {
15  return new MeltableParticle(*this);
16 }
MeltableParticle()=default
Basic Particle constructor, creates a particle at (0,0,0) with radius, mass and inertia equal to 1.

References MeltableParticle().

◆ getFieldVTK()

std::vector< Mdouble > MeltableParticle::getFieldVTK ( unsigned  i) const
override
89 {
90  double solidRadius = getSolidRadius();
91  double moltenLayerThickness = getRadius() - solidRadius;
92  if (i==0) {
93  return std::vector<Mdouble>(1, moltenLayerThickness);
94  } else if (i==1) {
95  return std::vector<Mdouble>(1, solidRadius);
96  } else {
97  return std::vector<Mdouble>(1, temperature_);
98  }
99 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
double getSolidRadius() const
Definition: MeltableParticle.h:67
Mdouble temperature_
Definition: ThermalParticle.h:120

References getSolidRadius(), i, and Thermal< Particle >::temperature_.

◆ getMeltableSpecies()

const MeltableNormalSpecies* MeltableParticle::getMeltableSpecies ( ) const
inline
38  {
39  return meltableSpecies_;
40  }

References meltableSpecies_.

Referenced by getMeltRate().

◆ getMeltRate()

double MeltableParticle::getMeltRate ( double  solidRadius) const
inline
63  {
64  return heat_/(4.0*constants::pi*solidRadius*solidRadius*getSpecies()->getDensity()*getMeltableSpecies()->getEffectiveLatentHeat());
65  }
Mdouble getEffectiveLatentHeat() const
Definition: MeltableNormalSpecies.cc:302
const MeltableNormalSpecies * getMeltableSpecies() const
Definition: MeltableParticle.h:38
const Mdouble pi
Definition: ExtendedMath.h:23

References MeltableNormalSpecies::getEffectiveLatentHeat(), getMeltableSpecies(), heat_, and constants::pi.

◆ getMoltenLayerThickness()

double MeltableParticle::getMoltenLayerThickness ( ) const
inline
71  {
72  return getRadius() - getSolidRadius();
73  }

References getSolidRadius().

◆ getName()

std::string MeltableParticle::getName ( ) const
override

Returns the name of the object; in this case 'MeltableParticle'.

Returns
The object name.
23 {
24  return "MeltableParticle";
25 }

◆ getNameVTK()

std::string MeltableParticle::getNameVTK ( unsigned  i) const
override
79 {
80  if (i==0)
81  return "MoltenLayerThickness";
82  else if (i==1)
83  return "SolidRadius";
84  else /*i=2*/
85  return "Temperature";
86 }

References i.

◆ getNumberOfFieldsVTK()

unsigned MeltableParticle::getNumberOfFieldsVTK ( ) const
inlineoverride
46 { return 3; }

◆ getParticleProjectedArea()

Mdouble MeltableParticle::getParticleProjectedArea ( )
28 {
29  return constants::pi * getRadius()*getRadius();
30 }

References constants::pi.

Referenced by actionsBeforeTimeStep().

◆ getSolidRadius()

double MeltableParticle::getSolidRadius ( ) const
inline
67  {
69  }
Mdouble getRelativeSolidRadius(double temperature) const
Definition: MeltableNormalSpecies.cc:306

References MeltableNormalSpecies::getRelativeSolidRadius(), meltableSpecies_, and Thermal< Particle >::temperature_.

Referenced by getFieldVTK(), and getMoltenLayerThickness().

◆ getTypeVTK()

std::string MeltableParticle::getTypeVTK ( unsigned  i) const
inlineoverride
48 { return "Float32"; }

◆ setSpecies()

void MeltableParticle::setSpecies ( const ParticleSpecies *  species)
inlineoverride
54  {
55  BaseParticle::setSpecies(species);
56  meltableSpecies_ = dynamic_cast<const MeltableNormalSpecies*>(species);
57  }
virtual void setSpecies(const ParticleSpecies *species)
Definition: BaseParticle.cc:798
Definition: MeltableNormalSpecies.h:13

References meltableSpecies_, and BaseParticle::setSpecies().

Member Data Documentation

◆ heat_

double MeltableParticle::heat_ = 0
private

◆ meltableSpecies_

const MeltableNormalSpecies* MeltableParticle::meltableSpecies_ = nullptr
private

The documentation for this class was generated from the following files: