support that cmdargs is used multiple times and may be bytearrays directly

This commit is contained in:
Axel Kohlmeyer
2024-05-20 16:00:19 -04:00
parent 411574a39c
commit a6979e5489

View File

@ -374,12 +374,16 @@ class lammps(object):
narg = 0 narg = 0
cargs = None cargs = None
if cmdargs is not None: if cmdargs is not None:
cmdargs.insert(0,"lammps") myargs = ["lammps".encode()]
narg = len(cmdargs) narg = len(cmdargs) + 1
for i in range(narg): for arg in cmdargs:
if type(cmdargs[i]) is str: if type(arg) is str:
cmdargs[i] = cmdargs[i].encode() myargs.append(arg.encode())
cargs = (c_char_p*(narg+1))(*cmdargs) elif type(arg) is bytes:
myargs.append(arg)
else:
raise TypeError('Unsupported cmdargs type ', type(arg))
cargs = (c_char_p*(narg+1))(*myargs)
cargs[narg] = None cargs[narg] = None
self.lib.lammps_open.argtypes = [c_int, c_char_p*(narg+1), MPI_Comm, c_void_p] self.lib.lammps_open.argtypes = [c_int, c_char_p*(narg+1), MPI_Comm, c_void_p]
else: else:
@ -395,12 +399,16 @@ class lammps(object):
self.comm = self.MPI.COMM_WORLD self.comm = self.MPI.COMM_WORLD
self.opened = 1 self.opened = 1
if cmdargs is not None: if cmdargs is not None:
cmdargs.insert(0,"lammps") myargs = ["lammps".encode()]
narg = len(cmdargs) narg = len(cmdargs) + 1
for i in range(narg): for arg in cmdargs:
if type(cmdargs[i]) is str: if type(arg) is str:
cmdargs[i] = cmdargs[i].encode() myargs.append(arg.encode())
cargs = (c_char_p*(narg+1))(*cmdargs) elif type(arg) is bytes:
myargs.append(arg)
else:
raise TypeError('Unsupported cmdargs type ', type(arg))
cargs = (c_char_p*(narg+1))(*myargs)
cargs[narg] = None cargs[narg] = None
self.lib.lammps_open_no_mpi.argtypes = [c_int, c_char_p*(narg+1), c_void_p] self.lib.lammps_open_no_mpi.argtypes = [c_int, c_char_p*(narg+1), c_void_p]
self.lmp = c_void_p(self.lib.lammps_open_no_mpi(narg,cargs,None)) self.lmp = c_void_p(self.lib.lammps_open_no_mpi(narg,cargs,None))