Source code for aiida_gromacs.calculations.solvate
"""
Calculations provided by aiida_gromacs.
This calculation configures the ability to use the 'gmx solvate' executable.
"""
from aiida.common import CalcInfo, CodeInfo
from aiida.engine import CalcJob
from aiida.orm import SinglefileData
from aiida.plugins import DataFactory
SolvateParameters = DataFactory("gromacs.solvate")
[docs]
class SolvateCalculation(CalcJob):
"""
AiiDA calculation plugin wrapping the 'gmx solvate' executable.
AiiDA plugin wrapper for solvating a molecular system.
"""
[docs]
@classmethod
def define(cls, spec):
"""Define inputs and outputs of the calculation."""
# yapf: disable
super().define(spec)
# set default values for AiiDA options
# TODO: something changed about withmpi in aiida-2.4.0, needs investigation.
spec.inputs['metadata']['options']['withmpi'].default = False
spec.inputs['metadata']['options']['resources'].default = {
'num_machines': 1,
'num_mpiprocs_per_machine': 1,
}
spec.inputs['metadata']['options']['parser_name'].default = 'gromacs.solvate'
spec.input('metadata.options.output_filename', valid_type=str, default='solvate.out')
spec.input('grofile', valid_type=SinglefileData, help='Input structure')
spec.input('topfile', valid_type=SinglefileData, help='Input topology')
spec.input('parameters', valid_type=SolvateParameters, help='Command line parameters for gmx solvate.')
spec.output('stdout', valid_type=SinglefileData, help='stdout')
spec.output('grofile', valid_type=SinglefileData, help='Output solvated gro file.')
spec.output('topfile', valid_type=SinglefileData, help='Output topology file.')
spec.exit_code(300, 'ERROR_MISSING_OUTPUT_FILES', message='Calculation did not produce all expected output files.')
[docs]
def prepare_for_submission(self, folder):
"""
Create input files.
:param folder: an `aiida.common.folders.Folder` where the plugin should temporarily place all files
needed by the calculation.
:return: `aiida.common.datastructures.CalcInfo` instance
"""
codeinfo = CodeInfo()
codeinfo.cmdline_params = self.inputs.parameters.cmdline_params(
grofile=self.inputs.grofile.filename, topfile=self.inputs.topfile.filename
)
codeinfo.code_uuid = self.inputs.code.uuid
codeinfo.stdout_name = self.metadata.options.output_filename
codeinfo.withmpi = self.inputs.metadata.options.withmpi
# Prepare a `CalcInfo` to be returned to the engine
calcinfo = CalcInfo()
calcinfo.codes_info = [codeinfo]
calcinfo.local_copy_list = [
(
self.inputs.grofile.uuid,
self.inputs.grofile.filename,
self.inputs.grofile.filename,
),
(
self.inputs.topfile.uuid,
self.inputs.topfile.filename,
self.inputs.topfile.filename,
),
]
calcinfo.retrieve_list = [
self.metadata.options.output_filename,
self.inputs.parameters["o"],
self.inputs.topfile.filename,
]
return calcinfo