Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F90056333
ElasticTimeIntegrator.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Oct 28, 22:15
Size
6 KB
Mime Type
text/x-c
Expires
Wed, Oct 30, 22:15 (2 d)
Engine
blob
Format
Raw Data
Handle
21996756
Attached To
rLAMMPS lammps
ElasticTimeIntegrator.h
View Options
/** 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
Event Timeline
Log In to Comment