#ifndef LMP_FIX_H
#define LMP_FIX_H
#include "pointers.h"
namespace LAMMPS_NS {
class Fix : protected Pointers {
public:
static int instance_total;
char *id,*style;
int igroup,groupbit;
int restart_global; int restart_peratom; int restart_file; int force_reneighbor;
int box_change_size; int box_change_shape; int box_change_domain;
bigint next_reneighbor; int thermo_energy; int thermo_virial; int nevery; int rigid_flag; int peatom_flag; int virial_flag; int no_change_box; int time_integrate; int time_depend; int create_attribute; int restart_pbc; int wd_header; int wd_section; int dynamic_group_allow; int dof_flag; int special_alter_flag; int enforce2d_flag; int respa_level_support; int respa_level; int maxexchange; int maxexchange_dynamic;
int scalar_flag; int vector_flag; int array_flag; int size_vector; int size_array_rows; int size_array_cols; int size_vector_variable; int size_array_rows_variable; int global_freq;
int peratom_flag; int size_peratom_cols; int peratom_freq;
int local_flag; int size_local_rows; int size_local_cols; int local_freq;
int extscalar; int extvector; int *extlist; int extarray;
double *vector_atom; double **array_atom; double *vector_local; double **array_local;
int comm_forward; int comm_reverse; int comm_border;
double virial[6]; double *eatom,**vatom;
int restart_reset;
int kokkosable; ExecutionSpace execution_space;
unsigned int datamask_read,datamask_modify;
Fix(class LAMMPS *, int, char **);
virtual ~Fix();
void modify_params(int, char **);
virtual int setmask() = 0;
virtual void post_constructor() {}
virtual void init() {}
virtual void init_list(int, class NeighList *) {}
virtual void setup(int) {}
virtual void setup_pre_exchange() {}
virtual void setup_pre_neighbor() {}
virtual void setup_post_neighbor() {}
virtual void setup_pre_force(int) {}
virtual void setup_pre_reverse(int, int) {}
virtual void min_setup(int) {}
virtual void initial_integrate(int) {}
virtual void post_integrate() {}
virtual void pre_exchange() {}
virtual void pre_neighbor() {}
virtual void post_neighbor() {}
virtual void pre_force(int) {}
virtual void pre_reverse(int,int) {}
virtual void post_force(int) {}
virtual void final_integrate() {}
virtual void end_of_step() {}
virtual void post_run() {}
virtual void write_restart(FILE *) {}
virtual void write_restart_file(char *) {}
virtual void restart(char *) {}
virtual void grow_arrays(int) {}
virtual void copy_arrays(int, int, int) {}
virtual void set_arrays(int) {}
virtual void update_arrays(int, int) {}
virtual void set_molecule(int, tagint, int, double *, double *, double *) {}
virtual void clear_bonus() {}
virtual int pack_border(int, int *, double *) {return 0;}
virtual int unpack_border(int, int, double *) {return 0;}
virtual int pack_exchange(int, double *) {return 0;}
virtual int unpack_exchange(int, double *) {return 0;}
virtual int pack_restart(int, double *) {return 0;}
virtual void unpack_restart(int, int) {}
virtual int size_restart(int) {return 0;}
virtual int maxsize_restart() {return 0;}
virtual void setup_pre_force_respa(int, int) {}
virtual void initial_integrate_respa(int, int, int) {}
virtual void post_integrate_respa(int, int) {}
virtual void pre_force_respa(int, int, int) {}
virtual void post_force_respa(int, int, int) {}
virtual void final_integrate_respa(int, int) {}
virtual void min_pre_exchange() {}
virtual void min_pre_neighbor() {}
virtual void min_post_neighbor() {}
virtual void min_pre_force(int) {}
virtual void min_pre_reverse(int,int) {}
virtual void min_post_force(int) {}
virtual double min_energy(double *) {return 0.0;}
virtual void min_store() {}
virtual void min_clearstore() {}
virtual void min_pushstore() {}
virtual void min_popstore() {}
virtual int min_reset_ref() {return 0;}
virtual void min_step(double, double *) {}
virtual double max_alpha(double *) {return 0.0;}
virtual int min_dof() {return 0;}
virtual int pack_forward_comm(int, int *, double *, int, int *) {return 0;}
virtual void unpack_forward_comm(int, int, double *) {}
virtual int pack_reverse_comm_size(int, int) {return 0;}
virtual int pack_reverse_comm(int, int, double *) {return 0;}
virtual void unpack_reverse_comm(int, int *, double *) {}
virtual double compute_scalar() {return 0.0;}
virtual double compute_vector(int) {return 0.0;}
virtual double compute_array(int,int) {return 0.0;}
virtual int dof(int) {return 0;}
virtual void deform(int) {}
virtual void reset_target(double) {}
virtual void reset_dt() {}
virtual void enforce2d() {}
virtual void read_data_header(char *) {}
virtual void read_data_section(char *, int, char *, tagint) {}
virtual bigint read_data_skip_lines(char *) {return 0;}
virtual void write_data_header(FILE *, int) {}
virtual void write_data_section_size(int, int &, int &) {}
virtual void write_data_section_pack(int, double **) {}
virtual void write_data_section_keyword(int, FILE *) {}
virtual void write_data_section(int, FILE *, int, double **, int) {}
virtual void zero_momentum() {}
virtual void zero_rotation() {}
virtual void rebuild_special() {}
virtual int image(int *&, double **&) {return 0;}
virtual int modify_param(int, char **) {return 0;}
virtual void *extract(const char *, int &) {return NULL;}
virtual double memory_usage() {return 0.0;}
protected:
int instance_me;
int evflag;
int eflag_either,eflag_global,eflag_atom;
int vflag_either,vflag_global,vflag_atom;
int maxeatom,maxvatom;
int copymode;
int dynamic;
void ev_init(int eflag, int vflag) {
if (eflag||vflag) ev_setup(eflag, vflag);
else evflag = eflag_either = eflag_global = eflag_atom = vflag_either = vflag_global = vflag_atom = 0;
}
void ev_setup(int, int);
void ev_tally(int, int *, double, double, double *);
void v_setup(int);
void v_tally(int, int *, double, double *);
void v_tally(int, double *);
void v_tally(int, int, double);
union ubuf {
double d;
int64_t i;
ubuf(double arg) : d(arg) {}
ubuf(int64_t arg) : i(arg) {}
ubuf(int arg) : i(arg) {}
};
};
namespace FixConst {
static const int INITIAL_INTEGRATE = 1<<0;
static const int POST_INTEGRATE = 1<<1;
static const int PRE_EXCHANGE = 1<<2;
static const int PRE_NEIGHBOR = 1<<3;
static const int POST_NEIGHBOR = 1<<4;
static const int PRE_FORCE = 1<<5;
static const int PRE_REVERSE = 1<<6;
static const int POST_FORCE = 1<<7;
static const int FINAL_INTEGRATE = 1<<8;
static const int END_OF_STEP = 1<<9;
static const int POST_RUN = 1<<10;
static const int THERMO_ENERGY = 1<<11;
static const int INITIAL_INTEGRATE_RESPA = 1<<12;
static const int POST_INTEGRATE_RESPA = 1<<13;
static const int PRE_FORCE_RESPA = 1<<14;
static const int POST_FORCE_RESPA = 1<<15;
static const int FINAL_INTEGRATE_RESPA = 1<<16;
static const int MIN_PRE_EXCHANGE = 1<<17;
static const int MIN_PRE_NEIGHBOR = 1<<18;
static const int MIN_POST_NEIGHBOR = 1<<19;
static const int MIN_PRE_FORCE = 1<<20;
static const int MIN_PRE_REVERSE = 1<<21;
static const int MIN_POST_FORCE = 1<<22;
static const int MIN_ENERGY = 1<<23;
static const int FIX_CONST_LAST = 1<<24;
}
}
#endif