Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F87782194
LammpsInterface.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 14, 22:32
Size
7 KB
Mime Type
text/x-c
Expires
Wed, Oct 16, 22:32 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
21584291
Attached To
rLAMMPS lammps
LammpsInterface.h
View Options
#ifndef LAMMPS_INTERFACE_H
#define LAMMPS_INTERFACE_H
#include <iostream>
#include <stdlib.h>
#include "mpi.h"
#include "../../src/lammps.h"
#include "ATC_TypeDefs.h"
// Forward class declarations for LAMMPS_NS namespace
namespace LAMMPS_NS {
class LAMMPS;
class NeighList;
class Compute;
}
namespace ATC {
/**
* @class LammpsInterface
* @brief Singleton class that handles all interfacing with the lammps code
*/
class LammpsInterface {
public:
// Enumeration for lattice type. this MUST match the enum in src/lattice.cpp
enum LatticeType {
NONE=0,
SC,
BCC,
FCC,
HCP,
DIAMOND,
SQ,
SQ2,
HEX,
CUSTOM
};
// Enumeration for units type. this is internal to ATC
enum UnitsType {
UNKNOWN=0,
LJ,
REAL,
METAL
};
/** Static instance of this class */
static LammpsInterface * instance();
/** Set lammps pointer */
void set_lammps(LAMMPS_NS::LAMMPS * lammps)
{
lammps_ = lammps;
MPI_Comm_rank(lammps_->world, & commRank_);
}
/** \name Methods that interface with Lammps base class */
/*@{*/
MPI_Comm world();
void allsum(double * send_buf, double * rec_buf, int count = 1)
{
MPI_Allreduce(send_buf, rec_buf, count, MPI_DOUBLE, MPI_SUM,
lammps_->world);
MPI_Barrier(lammps_->world);
}
void int_allsum(int * send_buf, int * rec_buf, int count = 1)
{
MPI_Allreduce(send_buf, rec_buf, count, MPI_INT, MPI_SUM,
lammps_->world);
MPI_Barrier(lammps_->world);
}
void allmax(double * send_buf, double * rec_buf, int count = 1)
{
MPI_Allreduce(send_buf, rec_buf, count, MPI_DOUBLE, MPI_MAX,
lammps_->world);
MPI_Barrier(lammps_->world);
}
void int_allmax(int * send_buf, int * rec_buf, int count = 1)
{
MPI_Allreduce(send_buf, rec_buf, count, MPI_INT, MPI_MAX,
lammps_->world);
MPI_Barrier(lammps_->world);
}
void logical_or(int * send_buf, int * rec_buf, int count = 1)
{
MPI_Allreduce(send_buf, rec_buf, count, MPI_INT, MPI_LOR,
lammps_->world);
MPI_Barrier(lammps_->world);
}
int comm_rank(void) { return commRank_;}
/*@}*/
/** \name Methods that interface with Atom class */
/*@{*/
int nlocal();
int nghost();
int nmax();
double natoms();
double ** xatom();
int ntypes();
const double ** xatom() const;
double ** vatom();
double ** fatom();
int * atom_mask();
int * atom_type();
int * atom_tag();
double * atom_mass();
double atom_mass(int iType);
double * atom_rmass();
double * atom_charge();
void unwrap_coordinates(int iatom, double* xatom);
/*@}*/
/** \name Methods that interface with Domain class */
/*@{*/
int dimension();
int nregion();
void get_box_bounds(double & boxxlo, double & boxxhi,
double & boxylo, double & boxyhi,
double & boxzlo, double &boxzhi);
int xperiodic();
int yperiodic();
int zperiodic();
int nperiodic();
void get_box_periodicity(int & xperiodic,
int & yperiodic,
int & zperiodic);
int get_region_id(const char * regionName);
double domain_xprd();
double domain_yprd();
double domain_zprd();
double domain_xy();
double domain_xz();
double domain_yz();
int domain_triclinic();
/*@}*/
/** \name Methods that interface with Update class */
UnitsType units_style();
/*@}*/
/** \name Methods that interface with Lattice class */
/*@{*/
double xlattice();
double ylattice();
double zlattice();
LatticeType lattice_style();
int get_n_basis();
void get_basis(double **basis);
void get_unit_cell(double *a1, double *a2, double *a3);
/** these functions are more than just simple pass throughs */
int num_atoms_per_cell(void);
double volume_per_atom(void);
void get_lattice(MATRIX &N, MATRIX &B);
/*@}*/
/** \name Methods that interface with Force class */
/*@{*/
double boltz();
double mvv2e();
double ftm2v();
double nktv2p();
double qqr2e();
double qe2f();
double dielectric();
double qqrd2e();
double pair_force(int i, int j, double rsq, double& fmag_over_rmag);
double pair_cutoff();
int single_enable();
/** these functions are more than just simple pass throughs */
/** Boltzmann's constant in M,L,T,t units */
double kBoltzmann(void);
/** Dulong-Petit heat capacity per volume in M,L,T,t units */
double heat_capacity(void);
/** mass per volume in reference configuraturation in M,L units */
double mass_density(void);
/** ratio of permittivity of free space over elemental charge in V, L units */
double epsilon0(void) {return 0.00552635; } // [V A]^-1
// NOTE this won't work for LJ/SI/CGS units where [L] != A
/*@}*/
/** \name Methods that interface with Group class */
/*@{*/
int ngroup();
int group_bit(int iGroup);
int find_group(const char * c);
int group_inverse_mask(int iGroup);
char * group_name(int iGroup);
void group_bounds(int iGroup, double * b);
/*@}*/
/** \name Methods that interface with Memory class */
/*@{*/
double * create_1d_double_array(int nlo, int nhi, const char *name);
void destroy_1d_double_array(double * d, int i);
double ** create_2d_double_array(int n1, int n2, const char *name);
void destroy_2d_double_array(double **d);
double **grow_2d_double_array(double **array, int n1, int n2, const char *name);
int ** create_2d_int_array(int n1, int n2, const char *name);
void destroy_2d_int_array(int **i);
int ** grow_2d_int_array(int **array, int n1, int n2, const char *name);
/*@}*/
/** \name Methods that interface with Update class */
/*@{*/
double dt();
int ntimestep();
int nsteps();
/*@}*/
/** \name Methods that interface with neighbor list */
/*@{*/
void init_list(int id, LAMMPS_NS::NeighList *ptr);
int neighbor_list_inum();
int * neighbor_list_numneigh();
int * neighbor_list_ilist();
int ** neighbor_list_firstneigh();
int neighbor_ago();
/*@}*/
/** \name Methods that interface with Region class */
/*@{*/
char * region_name(int iRegion);
char * region_style(int iRegion);
double region_xlo(int iRegion);
double region_xhi(int iRegion);
double region_ylo(int iRegion);
double region_yhi(int iRegion);
double region_zlo(int iRegion);
double region_zhi(int iRegion);
double region_xscale(int iRegion);
double region_yscale(int iRegion);
double region_zscale(int iRegion);
int region_match(int iRegion, double x, double y, double z);
/*@}*/
/** \name Methods that interface with compute class */
enum COMPUTE_INVOKED
{DUMMY0,INVOKED_SCALAR,INVOKED_VECTOR,DUMMMY3,INVOKED_PERATOM};
int find_compute(const char* tag);
LAMMPS_NS::Compute* get_compute(const char* tag);
double* compute_scalar_data(const char* tag);
double** compute_vector_data(const char* tag);
int compute_ncols(const char* tag);
/*@}*/
/** \name Methods that interface with compute pe/atom class */
/*@{*/
int atomPE_create(void);
void atomPE_init(void);
void atomPE_addstep(int step);
double * atomPE_compute(void);
/*@}*/
/** Return lammps pointer -- only as a last resort! */
LAMMPS_NS::LAMMPS * get_lammps_ptr();
protected:
LAMMPS_NS::LAMMPS * lammps_;
/** access to neighbor list */
LAMMPS_NS::NeighList *list_;
/** constructor */
LammpsInterface();
/** comm rank */
int commRank_;
/** compute pe/atom */
LAMMPS_NS::Compute * atomPE_;
private:
static LammpsInterface * myInstance_;
};
} // end namespace ATC
#endif
Event Timeline
Log In to Comment