@@ -231,6 +243,25 @@ class CP2KImplementation(object):
self.atomsengine=parser.atomsengine
self.input_tree=parser.input_tree
defdecode_cp2k_unit(self,unit):
"""Given a CP2K unit name, decode it as Pint unit definition.
"""
map={
# Length
"bohr":ureg.bohr,
"m":ureg.meter,
"pm":ureg.picometer,
"nm":ureg.nanometer,
"angstrom":ureg.angstrom,
}
pint_unit=map.get(unit)
ifpint_unit:
returnpint_unit
else:
logger.error("Unknown CP2K unit definition given.")
def_Q_energy_total(self):
"""Return the total energy from the bottom of the input file"""
result=Result()
...
...
@@ -348,26 +379,13 @@ class CP2KImplementation(object):
force_array[i_conf,:,:]=i_force_array
i_conf+=1
result.value=force_array
result.value_iterable=force_array
returnresult
else:
logger.debug("Looking for forces in separate force file.")
iterator=self.csvengine.iread(self.parser.get_file_handle("forces"),columns=(-3,-2,-1),comments=("#","SUM"),separator=r"\ ATOMIC FORCES in \[a\.u\.\]")
forces=[]
forconfigurationiniterator:
forces.append(configuration)
forces=np.array(forces)
ifforcesisNone:
msg="No force configurations were found when searching an external XYZ force file."
logger.warning(msg)
result.error_message=msg
result.code=ResultCode.fail
returnresult
else:
iflen(forces)!=0:
result.value=forces
returnresult
result.value_iterable=iterator
returnresult
def_Q_particle_number(self):
"""Return the number of particles in the system.
...
...
@@ -413,13 +431,15 @@ class CP2KImplementation(object):
returnresult
def_Q_particle_position(self):
"""Returns the particle positions (trajectory). Currently returns them
as one big object, which is not good because the trajectory can be very
large. When the streaming interface is available the coordinates can be