129 lines
3.8 KiB
C++
129 lines
3.8 KiB
C++
/* -*- c++ -*- ----------------------------------------------------------
|
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
|
www.cs.sandia.gov/~sjplimp/lammps.html
|
|
Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
|
|
|
|
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.
|
|
|
|
Contributing Author: David Nicholson (MIT)
|
|
------------------------------------------------------------------------- */
|
|
|
|
|
|
#ifndef LMP_FIX_NH_UEF_H
|
|
#define LMP_FIX_NH_UEF_H
|
|
|
|
#include "fix_nh.h"
|
|
|
|
namespace LAMMPS_NS {
|
|
// forward declaration
|
|
namespace UEF_utils {
|
|
class UEFBox;
|
|
}
|
|
|
|
class FixNHUef : public FixNH {
|
|
public:
|
|
FixNHUef(class LAMMPS *, int, char **);
|
|
virtual ~FixNHUef();
|
|
virtual int setmask();
|
|
virtual void init();
|
|
virtual void setup(int);
|
|
virtual void pre_exchange();
|
|
virtual int pack_restart_data(double*);
|
|
virtual void restart(char *);
|
|
virtual void end_of_step();
|
|
virtual void initial_integrate(int);
|
|
virtual void final_integrate();
|
|
virtual void initial_integrate_respa(int, int, int);
|
|
virtual void final_integrate_respa(int, int);
|
|
virtual void post_run();
|
|
void get_rot(double[3][3]);
|
|
void get_ext_flags(bool*);
|
|
void get_box(double[3][3]);
|
|
|
|
protected:
|
|
virtual void remap();
|
|
virtual int size_restart_global();
|
|
virtual void nve_x();
|
|
virtual void nve_v();
|
|
void rotate_x(double [3][3]);
|
|
void inv_rotate_x(double[3][3]);
|
|
void rotate_v(double[3][3]);
|
|
void inv_rotate_v(double[3][3]);
|
|
void rotate_f(double[3][3]);
|
|
void inv_rotate_f(double[3][3]);
|
|
double strain[2],erate[2]; // strain/strain rate : [e_x, e_y]
|
|
// always assume traceless e_z = -e_x-e_y
|
|
|
|
int rem; //this is for the narg kluge
|
|
|
|
UEF_utils::UEFBox *uefbox; // interface for the special simulation box
|
|
|
|
double rot[3][3]; // rotation matrix
|
|
bool ext_flags[3]; // flags for external "free surfaces"
|
|
bool nearly_equal(double,double,double);
|
|
//bool rotate_output; // experimental feature. Too many issues for now
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
/* ERROR/WARNING messages:
|
|
|
|
This is a base class for FixNH so it will inherit most of its error/warning messages along with the following:
|
|
|
|
E: Illegal fix nvt/npt/uef command
|
|
|
|
Self-explanatory
|
|
|
|
E: Keyword erate must be set for fix nvt/npt/uef command
|
|
|
|
Self-explanatory.
|
|
|
|
E: Simulation box must be triclinic for fix/nvt/npt/uef
|
|
|
|
Self-explanatory.
|
|
|
|
E: Only normal stresses can be controlled with fix/nvt/npt/uef
|
|
|
|
The keywords xy xz and yz cannot be used for pressure control
|
|
|
|
E: The ext keyword may only be used with iso pressure control
|
|
|
|
Self-explanatory
|
|
|
|
E: All controlled stresses must have the same value in fix/nvt/npt/uef
|
|
|
|
Stress control is only possible when the stress specified for each dimension is the same
|
|
|
|
E: Dimensions with controlled stresses must have same strain rate in fix/nvt/npt/uef
|
|
|
|
Stress-controlled dimensions with the same strain rate must have the same target stress.
|
|
|
|
E: Can't use another fix which changes box shape with fix/nvt/npt/uef
|
|
|
|
The fix npt/nvt/uef command must have full control over the box shape. You cannot use a simultaneous fix deform command, for example.
|
|
|
|
E: Pressure ID for fix/nvt/uef doesn't exist
|
|
|
|
The compute pressure introduced via fix_modify does not exist
|
|
|
|
E: Using fix nvt/npt/uef without a compute pressure/uef
|
|
|
|
Self-explanatory.
|
|
|
|
E: Using fix nvt/npt/uef without a compute temp/uef
|
|
|
|
Self-explanatory.
|
|
|
|
E: Initial box is not close enough to the expected uef box
|
|
|
|
The initial box does not correspond to the shape required by the value of the strain keyword. If the default strain value of zero was used, the initial box is not cubic.
|
|
|
|
*/
|