Skip to content
Snippets Groups Projects
Commit d980421c authored by Giovanni Bussi's avatar Giovanni Bussi
Browse files

Added dlopen constructors to python interface

This allows creating plumed objects with

p=plumed.Plumed(kernel="/path/to/libplumedKernel.so")

Not strictly necessary, but might be useful to allow more
flexibility.
parent feb3fb9c
No related branches found
No related tags found
No related merge requests found
...@@ -38,7 +38,7 @@ plumedversion = subprocess.check_output(['grep','-v','#','../VERSION']).decode(" ...@@ -38,7 +38,7 @@ plumedversion = subprocess.check_output(['grep','-v','#','../VERSION']).decode("
print( "Module name " + plumedname ) print( "Module name " + plumedname )
print( "Version number " + plumedversion ) print( "Version number " + plumedversion )
extra_compile_args=['-D__PLUMED_HAS_DLOPEN','-D__PLUMED_WRAPPER_LINK_RUNTIME=1','-D__PLUMED_WRAPPER_CXX=1','-D__PLUMED_WRAPPER_IMPLEMENTATION=1','-D__PLUMED_WRAPPER_EXTERN=0'] extra_compile_args=['-D__PLUMED_HAS_DLOPEN','-D__PLUMED_WRAPPER_LINK_RUNTIME=1','-D__PLUMED_WRAPPER_CXX=1','-D__PLUMED_WRAPPER_IMPLEMENTATION=1','-D__PLUMED_WRAPPER_EXTERN=0','-D__PLUMED_WRAPPER_CXX_DEFAULT_INVALID=1']
defaultkernel=os.getenv("default_kernel") defaultkernel=os.getenv("default_kernel")
if defaultkernel is not None: if defaultkernel is not None:
......
...@@ -33,3 +33,7 @@ cdef extern from "Plumed.h" namespace "PLMD": ...@@ -33,3 +33,7 @@ cdef extern from "Plumed.h" namespace "PLMD":
void cmd(const char*key, const void*val) except + void cmd(const char*key, const void*val) except +
void cmd(const char*key) except + void cmd(const char*key) except +
bool valid() except + bool valid() except +
@staticmethod
Plumed dlopen(const char*path) except +
@staticmethod
Plumed makeValid() except +
...@@ -30,9 +30,19 @@ cimport numpy as np ...@@ -30,9 +30,19 @@ cimport numpy as np
cdef class Plumed: cdef class Plumed:
cdef cplumed.Plumed c_plumed cdef cplumed.Plumed c_plumed
def __cinit__(self): def __cinit__(self,kernel=None):
if not self.c_plumed.valid(): cdef bytes py_kernel
raise RuntimeError("PLUMED not available, check your PLUMED_KERNEL environment variable") cdef char* ckernel
if kernel is None:
self.c_plumed=cplumed.Plumed.makeValid()
if not self.c_plumed.valid():
raise RuntimeError("PLUMED not available, check your PLUMED_KERNEL environment variable")
else:
py_kernel= kernel.encode()
ckernel = py_kernel
self.c_plumed=cplumed.Plumed.dlopen(ckernel)
if not self.c_plumed.valid():
raise RuntimeError("Error loading PLUMED kernel at path " + kernel)
cdef int pres = 8 cdef int pres = 8
self.c_plumed.cmd( "setRealPrecision", <void*>&pres ) self.c_plumed.cmd( "setRealPrecision", <void*>&pres )
def cmd_ndarray_real(self, ckey, val): def cmd_ndarray_real(self, ckey, val):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment