FleurinpModifier¶
Description¶
The FleurinpModifier
class has
to be used if you want to change anything in a stored
FleurinpData
.
It will store and validate all the changes you wish to do and produce a new
FleurinpData
node
after you are done making changes and apply them.
FleurinpModifier
provides a
user with methods to change the Fleur input.
In principle a user can do everything, since he could prepare a FLEUR input himself and create a
FleurinpData
object from that input.
Note
In the open provenance model nodes stored in the database
cannot be changed (except extras and comments). Therefore, to modify something in a stored
inp.xml file one has to create a new FleurinpData
which is not stored, modify it and store it
again. However, this node would pop into existence unlinked in the database and this would mean
we loose the origin from what data it comes from and what was done to it. This is the task of
FleurinpModifier
.
Usage¶
To modify an existing FleurinpData
, a
FleurinpModifier
instance
has to be initialised staring from the
FleurinpData
instance.
After that, a user should register
certain modifications which will be cached and can be previewed. They will be applied on
a new FleurinpData
object when the freeze method is executed. A code example:
from aiida_fleur.data.fleurinpmodifier import FleurinpModifier
F = FleurinpData(files=['inp.xml'])
fm = FleurinpModifier(F) # Initialise FleurinpModifier class
fm.set_inpchanges({'dos' : True, 'Kmax': 3.9 }) # Add changes
fm.show() # Preview
new_fleurinpdata = fm.freeze() # Apply
The figure below illustrates the work of the
FleurinpModifier
class.
User Methods¶
General methods¶
validate()
: Tests if the changes in the given list are validated.freeze()
: Applies all the changes in the list, callsmodify_fleurinpdata()
and returns a newFleurinpData
object.changes()
: Displays the current list of changes.show()
: Applies the modifications and displays/prints the resultinginp.xml
file. Does not generate a newFleurinpData
object.
Modification registration methods¶
The registration methods can be separated into two groups. First of all,
there are XML methods that require deeper knowledge about the structure of an inp.xml
file.
All of them require an xpath input:
xml_set_attribv_occ()
: Set an attribute of a specific occurrence of xml elementsxml_set_first_attribv()
: Set an attribute of first occurrence of xml elementxml_set_all_attribv()
: Set attributes of all occurrences of the xml elementxml_set_text()
: Set the text of first occurrence of xml elementxml_set_text_occ()
: Set an attribute of a specific occurrence of xml elementsxml_set_all_text()
: Set the text of all occurrences of the xml elementcreate_tag()
: Insert an xml element in the xml tree.delete_att()
: Delete an attribute for xml elements from the xpath evaluation.delete_tag()
: Delete an xml element.replace_tag()
: Replace an xml element.add_num_to_att()
: Adds a value or multiplies on it given attribute.
On the other hand, there are shortcut methods that already know some paths:
set_species()
: Specific user-friendly method to change species parameters.set_atomgr_att()
: Specific method to change atom group parameters.set_species_label()
: Specific user-friendly method to change a specie of an atom with a certain label.set_atomgr_att_label()
: Specific method to change atom group parameters of an atom with a certain label.set_inpchanges()
: Specific user-friendly method for easy changes of attribute key value type.shift_value()
: Specific user-friendly method to shift value of an attribute.shift_value_species_label()
: Specific user-friendly method to shift value of an attribute of an atom with a certain label.set_nkpts()
: Specific method to set the number of kpoints.
The figure below shows a comparison between the use of XML and shortcut methods.