Rename fix python/move to move/python

This commit is contained in:
Richard Berger 2017-12-05 23:33:24 -05:00
parent f8891a4451
commit 4d915dba08
5 changed files with 47 additions and 50 deletions

View File

@ -1,16 +1,16 @@
This folder contains several LAMMPS input scripts and a python module
file py_nve.py to demonstrate the use of the fix style python/move
file py_nve.py to demonstrate the use of the fix style move/python
to reimplement NVE using Python.
in.fix_python_nve_melt:
in.fix_move_python_nve_melt:
This is a version of the melt example which replaces the default NVE integrator
with a Python implementation. Fix python/move is used to create an
with a Python implementation. Fix move/python is used to create an
instance of the py_nve.NVE class which implements the required interface.
It demonstrates how to access LAMMPS data as numpy arrays. This gives direct
access to memory owned by the C++ code, allows easy manipulation through numpy
operations and avoids unnecessary copies.
in.fix_python_nve_melt_opt:
in.fix_move_python_nve_melt_opt:
This version of melt example uses NVE_Opt instead of NVE. While this Python
implementation is still much slower than the native version, it shows that
simple code transformations can lead to speedups.

View File

@ -17,7 +17,7 @@ pair_coeff 1 1 1.0 1.0 2.5
neighbor 0.3 bin
neigh_modify every 20 delay 0 check no
fix 1 all python/move py_nve.NVE
fix 1 all move/python py_nve.NVE
thermo 50
run 250

View File

@ -17,7 +17,7 @@ pair_coeff 1 1 1.0 1.0 2.5
neighbor 0.3 bin
neigh_modify every 20 delay 0 check no
fix 1 all python/move py_nve.NVE_Opt
fix 1 all move/python py_nve.NVE_Opt
thermo 50
run 250

View File

@ -19,7 +19,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fix_python_move.h"
#include "fix_move_python.h"
#include "atom.h"
#include "comm.h"
#include "force.h"
@ -34,7 +34,7 @@ using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixPythonMove::FixPythonMove(LAMMPS *lmp, int narg, char **arg) :
FixMovePython::FixMovePython(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
dynamic_group_allow = 1;
@ -42,7 +42,7 @@ FixPythonMove::FixPythonMove(LAMMPS *lmp, int narg, char **arg) :
python->init();
py_integrator = NULL;
py_move = NULL;
PyGILState_STATE gstate = PyGILState_Ensure();
@ -51,12 +51,12 @@ FixPythonMove::FixPythonMove(LAMMPS *lmp, int narg, char **arg) :
PyList_Append(py_path, PY_STRING_FROM_STRING("."));
// create integrator instance
// create move instance
char * full_cls_name = arg[3];
char * lastpos = strrchr(full_cls_name, '.');
if (lastpos == NULL) {
error->all(FLERR,"Fix python/integrate requires fully qualified class name");
error->all(FLERR,"Fix move/python requires fully qualified class name");
}
size_t module_name_length = strlen(full_cls_name) - strlen(lastpos);
@ -74,18 +74,15 @@ FixPythonMove::FixPythonMove(LAMMPS *lmp, int narg, char **arg) :
PyErr_Print();
PyErr_Clear();
PyGILState_Release(gstate);
error->all(FLERR,"Loading python integrator module failure");
error->all(FLERR,"Loading python move module failure");
}
// create LAMMPS atom type to potential file type mapping in python class
// by calling 'lammps_pair_style.map_coeff(name,type)'
PyObject *py_integrator_type = PyObject_GetAttrString(pModule, cls_name);
if (!py_integrator_type) {
PyObject *py_move_type = PyObject_GetAttrString(pModule, cls_name);
if (!py_move_type) {
PyErr_Print();
PyErr_Clear();
PyGILState_Release(gstate);
error->all(FLERR,"Could not find integrator class in module'");
error->all(FLERR,"Could not find move class in module'");
}
delete [] module_name;
@ -93,34 +90,34 @@ FixPythonMove::FixPythonMove(LAMMPS *lmp, int narg, char **arg) :
PyObject * ptr = PY_VOID_POINTER(lmp);
PyObject * arglist = Py_BuildValue("(O)", ptr);
PyObject * py_integrator_obj = PyObject_CallObject(py_integrator_type, arglist);
PyObject * py_move_obj = PyObject_CallObject(py_move_type, arglist);
Py_DECREF(arglist);
if (!py_integrator_obj) {
if (!py_move_obj) {
PyErr_Print();
PyErr_Clear();
PyGILState_Release(gstate);
error->all(FLERR,"Could not instantiate instance of integrator class'");
error->all(FLERR,"Could not instantiate instance of move class'");
}
// check object interface
py_integrator = (void *) py_integrator_obj;
py_move = (void *) py_move_obj;
PyGILState_Release(gstate);
}
/* ---------------------------------------------------------------------- */
FixPythonMove::~FixPythonMove()
FixMovePython::~FixMovePython()
{
PyGILState_STATE gstate = PyGILState_Ensure();
if(py_integrator) Py_DECREF((PyObject*) py_integrator);
if(py_move) Py_DECREF((PyObject*) py_move);
PyGILState_Release(gstate);
}
/* ---------------------------------------------------------------------- */
int FixPythonMove::setmask()
int FixMovePython::setmask()
{
int mask = 0;
mask |= INITIAL_INTEGRATE;
@ -132,11 +129,11 @@ int FixPythonMove::setmask()
/* ---------------------------------------------------------------------- */
void FixPythonMove::init()
void FixMovePython::init()
{
PyGILState_STATE gstate = PyGILState_Ensure();
PyObject *py_integrator_obj = (PyObject *) py_integrator;
PyObject *py_init = PyObject_GetAttrString(py_integrator_obj,"init");
PyObject *py_move_obj = (PyObject *) py_move;
PyObject *py_init = PyObject_GetAttrString(py_move_obj,"init");
if (!py_init) {
PyErr_Print();
PyErr_Clear();
@ -149,11 +146,11 @@ void FixPythonMove::init()
/* ---------------------------------------------------------------------- */
void FixPythonMove::initial_integrate(int vflag)
void FixMovePython::initial_integrate(int vflag)
{
PyGILState_STATE gstate = PyGILState_Ensure();
PyObject *py_integrator_obj = (PyObject *) py_integrator;
PyObject *py_initial_integrate = PyObject_GetAttrString(py_integrator_obj,"initial_integrate");
PyObject *py_move_obj = (PyObject *) py_move;
PyObject *py_initial_integrate = PyObject_GetAttrString(py_move_obj,"initial_integrate");
if (!py_initial_integrate) {
PyErr_Print();
PyErr_Clear();
@ -168,11 +165,11 @@ void FixPythonMove::initial_integrate(int vflag)
/* ---------------------------------------------------------------------- */
void FixPythonMove::final_integrate()
void FixMovePython::final_integrate()
{
PyGILState_STATE gstate = PyGILState_Ensure();
PyObject *py_integrator_obj = (PyObject *) py_integrator;
PyObject *py_final_integrate = PyObject_GetAttrString(py_integrator_obj,"final_integrate");
PyObject *py_move_obj = (PyObject *) py_move;
PyObject *py_final_integrate = PyObject_GetAttrString(py_move_obj,"final_integrate");
if (!py_final_integrate) {
PyErr_Print();
PyErr_Clear();
@ -185,11 +182,11 @@ void FixPythonMove::final_integrate()
/* ---------------------------------------------------------------------- */
void FixPythonMove::initial_integrate_respa(int vflag, int ilevel, int iloop)
void FixMovePython::initial_integrate_respa(int vflag, int ilevel, int iloop)
{
PyGILState_STATE gstate = PyGILState_Ensure();
PyObject *py_integrator_obj = (PyObject *) py_integrator;
PyObject *py_initial_integrate_respa = PyObject_GetAttrString(py_integrator_obj,"initial_integrate_respa");
PyObject *py_move_obj = (PyObject *) py_move;
PyObject *py_initial_integrate_respa = PyObject_GetAttrString(py_move_obj,"initial_integrate_respa");
if (!py_initial_integrate_respa) {
PyErr_Print();
PyErr_Clear();
@ -204,11 +201,11 @@ void FixPythonMove::initial_integrate_respa(int vflag, int ilevel, int iloop)
/* ---------------------------------------------------------------------- */
void FixPythonMove::final_integrate_respa(int ilevel, int iloop)
void FixMovePython::final_integrate_respa(int ilevel, int iloop)
{
PyGILState_STATE gstate = PyGILState_Ensure();
PyObject *py_integrator_obj = (PyObject *) py_integrator;
PyObject *py_final_integrate_respa = PyObject_GetAttrString(py_integrator_obj,"final_integrate_respa");
PyObject *py_move_obj = (PyObject *) py_move;
PyObject *py_final_integrate_respa = PyObject_GetAttrString(py_move_obj,"final_integrate_respa");
if (!py_final_integrate_respa) {
PyErr_Print();
PyErr_Clear();
@ -223,11 +220,11 @@ void FixPythonMove::final_integrate_respa(int ilevel, int iloop)
/* ---------------------------------------------------------------------- */
void FixPythonMove::reset_dt()
void FixMovePython::reset_dt()
{
PyGILState_STATE gstate = PyGILState_Ensure();
PyObject *py_integrator_obj = (PyObject *) py_integrator;
PyObject *py_reset_dt = PyObject_GetAttrString(py_integrator_obj,"reset_dt");
PyObject *py_move_obj = (PyObject *) py_move;
PyObject *py_reset_dt = PyObject_GetAttrString(py_move_obj,"reset_dt");
if (!py_reset_dt) {
PyErr_Print();
PyErr_Clear();

View File

@ -23,21 +23,21 @@
#ifdef FIX_CLASS
FixStyle(python/move,FixPythonMove)
FixStyle(move/python,FixMovePython)
#else
#ifndef LMP_FIX_PYTHON_MOVE_H
#define LMP_FIX_PYTHON_MOVE_H
#ifndef LMP_FIX_MOVE_PYTHON_H
#define LMP_FIX_MOVE_PYTHON_H
#include "fix.h"
namespace LAMMPS_NS {
class FixPythonMove : public Fix {
class FixMovePython : public Fix {
public:
FixPythonMove(LAMMPS *lmp, int narg, char **arg);
virtual ~FixPythonMove();
FixMovePython(LAMMPS *lmp, int narg, char **arg);
virtual ~FixMovePython();
int setmask();
virtual void init();
@ -48,7 +48,7 @@ class FixPythonMove : public Fix {
virtual void reset_dt();
protected:
void * py_integrator;
void * py_move;
};
}