lammps/lib/atc/ElasticTimeIntegrator.h

210 lines
6.2 KiB
C++

/** ElasticTimeIntegrator : a class to implement various elasticity integrators for FE quantities */
#ifndef ELASTIC_TIME_INTEGRATOR_H
#define ELASTIC_TIME_INTEGRATOR_H
// ATC_Transfer headers
#include "TimeIntegrator.h"
using namespace std;
namespace ATC {
// forward declarations
class ElasticIntegrationMethod;
/**
* @class ElasticTimeIntegrator
* @brief Base class fo various time integrators for elasticity FE quantities
*/
//--------------------------------------------------------
//--------------------------------------------------------
// Class ElasticTimeIntegrator
// Base class for elastic integrators which handles
// parsing and stores basic data structures
//--------------------------------------------------------
//--------------------------------------------------------
class ElasticTimeIntegrator : public TimeIntegrator {
public:
// constructor
ElasticTimeIntegrator(ATC_Transfer * atcTransfer,
TimeIntegrationType timeIntegrationType);
// destructor
virtual ~ElasticTimeIntegrator(){};
/** parser/modifier */
virtual bool modify(int narg, char **arg);
/** pre time integration */
virtual void initialize();
private:
// DO NOT define this
ElasticTimeIntegrator();
};
/**
* @class ElasticIntegrationMethod
* @brief Base class fo various time integration methods for elasticity FE quantities
*/
//--------------------------------------------------------
//--------------------------------------------------------
// Class ElasticIntegrationMethod
// Base class for elastic integration methods which
// update the FE quantities in time
//--------------------------------------------------------
//--------------------------------------------------------
class ElasticIntegrationMethod : public TimeIntegrationMethod {
public:
// constructor
ElasticIntegrationMethod(ElasticTimeIntegrator * elasticTimeIntegrator);
// destructor
virtual ~ElasticIntegrationMethod(){};
protected:
/** time filtering application object */
TimeFilter * timeFilter_;
/** finite element displacement field */
DENS_MAT & displacement_;
/** finite element velocity field */
DENS_MAT & velocity_;
/** finite element acceleration field */
DENS_MAT & acceleration_;
/** atomic nodal displacement field */
DENS_MAT & nodalAtomicDisplacement_;
/** atomic nodal velocity field */
DENS_MAT & nodalAtomicVelocity_;
/** right-hand side of velocity equation */
DENS_MAT & velocityRhs_;
/** force at nodes from atomic quantities */
DENS_MAT & nodalAtomicForce_;
/** filtered power for computation during equilibration */
DENS_MAT & forceFilteringData_;
private:
// DO NOT define this
ElasticIntegrationMethod();
};
/**
* @class ElasticTimeIntegratorVerlet
* @brief Verlet integration for FE elastic quantities
*/
//--------------------------------------------------------
//--------------------------------------------------------
// Class ElasticTimeIntegratorVerlet
// Uses the second order Verlet integration to update
// the finite element velocity and displacement
// fields, i.e. the same integration used for the
// atomic velocities and positions.
//--------------------------------------------------------
//--------------------------------------------------------
class ElasticTimeIntegratorVerlet : public ElasticIntegrationMethod {
public:
// constructor
ElasticTimeIntegratorVerlet(ElasticTimeIntegrator * elasticTimeIntegrator);
// destructor
virtual ~ElasticTimeIntegratorVerlet(){};
// time step methods, corresponding to ATC_Transfer
/** first part of mid_initial_integrate */
virtual void mid_initial_integrate1(double dt);
/** first part of post_initial_integrate */
virtual void post_initial_integrate1(double dt);
/** first part of pre_final_integrate */
virtual void pre_final_integrate1(double dt);
/** first part of post_final_integrate */
virtual void post_final_integrate1(double dt);
/** post processing step before output */
virtual void post_process(double dt);
private:
// DO NOT define this
ElasticTimeIntegratorVerlet();
};
/**
* @class ElasticTimeIntegratorVerlet
* @brief Verlet integration for FE elastic quantities with time filtering
*/
//--------------------------------------------------------
//--------------------------------------------------------
// Class ElasticTimeIntegratorVerletFiltered
//--------------------------------------------------------
//--------------------------------------------------------
class ElasticTimeIntegratorVerletFiltered : public ElasticTimeIntegratorVerlet {
public:
// constructor
ElasticTimeIntegratorVerletFiltered(ElasticTimeIntegrator * elasticTimeIntegrator);
// destructor
virtual ~ElasticTimeIntegratorVerletFiltered(){};
// time step methods, corresponding to ATC_Transfer
/** first part of mid_initial_integrate */
virtual void mid_initial_integrate1(double dt);
/** first part of post_initial_integrate */
virtual void post_initial_integrate1(double dt);
/** first part of pre_final_integrate */
virtual void pre_final_integrate1(double dt);
/** first part of post_final_integrate */
virtual void post_final_integrate1(double dt);
/** post processing step before output */
virtual void post_process(double dt){};
protected:
/** atomic nodal acceleration field */
DENS_MAT & nodalAtomicAcceleration_;
private:
// DO NOT define this
ElasticTimeIntegratorVerletFiltered();
};
};
#endif