116 lines
2.6 KiB
C++
116 lines
2.6 KiB
C++
/* -*- c++ -*- ----------------------------------------------------------
|
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
|
http://lammps.sandia.gov, Sandia National Laboratories
|
|
Steve Plimpton, sjplimp@sandia.gov
|
|
|
|
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
|
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
|
certain rights in this software. This software is distributed under
|
|
the GNU General Public License.
|
|
|
|
See the README file in the top-level LAMMPS directory.
|
|
------------------------------------------------------------------------- */
|
|
|
|
#ifdef FIX_CLASS
|
|
|
|
FixStyle(pimd,FixPIMD)
|
|
|
|
#else
|
|
|
|
#ifndef FIX_PIMD_H
|
|
#define FIX_PIMD_H
|
|
|
|
#include "fix.h"
|
|
|
|
namespace LAMMPS_NS {
|
|
|
|
class FixPIMD : public Fix {
|
|
public:
|
|
FixPIMD(class LAMMPS *, int, char **);
|
|
|
|
int setmask();
|
|
|
|
void init();
|
|
void setup(int);
|
|
void post_force(int);
|
|
void initial_integrate(int);
|
|
void final_integrate();
|
|
|
|
double memory_usage();
|
|
void grow_arrays(int);
|
|
void copy_arrays(int,int,int);
|
|
int pack_exchange(int,double*);
|
|
int unpack_exchange(int,double*);
|
|
int pack_restart(int,double*);
|
|
void unpack_restart(int,int);
|
|
int maxsize_restart();
|
|
int size_restart(int);
|
|
double compute_vector(int);
|
|
|
|
int pack_forward_comm(int, int*, double *, int, int*);
|
|
void unpack_forward_comm(int, int, double *);
|
|
|
|
int method;
|
|
int np;
|
|
double inverse_np;
|
|
|
|
/* ring-polymer model */
|
|
|
|
double omega_np, fbond, spring_energy, sp;
|
|
int x_last, x_next;
|
|
|
|
void spring_force();
|
|
|
|
/* fictious mass */
|
|
|
|
double fmass, *mass;
|
|
|
|
/* inter-partition communication */
|
|
|
|
int max_nsend;
|
|
int* tag_send;
|
|
double *buf_send;
|
|
|
|
int max_nlocal;
|
|
double *buf_recv, **buf_beads;
|
|
|
|
int size_plan;
|
|
int *plan_send, *plan_recv;
|
|
double **comm_ptr;
|
|
|
|
void comm_init();
|
|
void comm_exec(double **);
|
|
|
|
/* normal-mode operations */
|
|
|
|
double *lam, **M_x2xp, **M_xp2x, **M_f2fp, **M_fp2f;
|
|
int *mode_index;
|
|
|
|
void nmpimd_init();
|
|
void nmpimd_fill(double**);
|
|
void nmpimd_transform(double**, double**, double*);
|
|
|
|
/* Nose-hoover chain integration */
|
|
|
|
int nhc_offset_one_1, nhc_offset_one_2;
|
|
int nhc_size_one_1, nhc_size_one_2;
|
|
int nhc_nchain;
|
|
bool nhc_ready;
|
|
double nhc_temp, dtv, dtf, t_sys;
|
|
|
|
double **nhc_eta; /* coordinates of NH chains for ring-polymer beads */
|
|
double **nhc_eta_dot; /* velocities of NH chains */
|
|
double **nhc_eta_dotdot; /* acceleration of NH chains */
|
|
double **nhc_eta_mass; /* mass of NH chains */
|
|
|
|
void nhc_init();
|
|
void nhc_update_v();
|
|
void nhc_update_x();
|
|
};
|
|
|
|
|
|
}
|
|
|
|
#endif
|
|
#endif
|