[ase-users] [ase-developers] ASE calculator interface proposal

Jens Jørgen Mortensen jensj at fysik.dtu.dk
Mon Feb 4 07:54:04 CET 2013


Den 01-02-2013 15:50, Ask Hjorth Larsen skrev:
> Hi
>
> Sorry for not following the discussion so well.  I find the read/write
> stuff a bit confusing.  Below are some comments.

Thanks for your comments.

> I think read_atoms is a misleading name for something which reads the
> results of an entire calculation.  It sounds as if it reads only an
> Atoms object and does nothing else.  read() is much better as it
> claims nothing about what it reads, implying that it changes the
> calculator.

It's spelled

   atoms = ABC.read_atoms('bla-bla.abc')

and it will read the atoms from 'bla-bla.abc' with an ABC calculator 
attached to it (note that ABC is not an instance - it's a class).  I 
don't think that's very misleading, but other suggestions or ideas are 
welcome.

> While I slightly prefer performing a calculation first and then
> calling (or not) a write() function, like one presently does in GPAW,
> I guess it is not completely silly to specify the filename in the
> calculator constructor since many calculators need to create files
> anyway.  So that's probably fine.  However I hope it won't be a
> mandatory argument.

Each calculator can decide what to do and I guess GPAW will default to 
not automatically writing gpaw files as always.

> I have some trouble understanding if the filename 'si.abc' in the
> examples results in a read or a (delayed) write.  I think generally
> it's "read if the file exists, write if/when a calculation is done"
> although I would probably prefer for that to be entirely obvious e.g
> from keywords like output='si.abc'.  Also: What if one wants to read
> from one file and write to another?

Yes, I think we should have an output keyword also.  It could default to 
'__same_as_input__' or some other special value - it would be nice to 
reserve output=None for no output.

I have updated the proposal:

https://wiki.fysik.dtu.dk/ase/development/proposals/calculators.html

Jens Jørgen

>
> I'm not sure about this example:
>
>>>> atoms = ...
>>>> calc = ABC('si.abc', atoms, xc='LDA')
>>>> atoms.get_potential_energy()
> -1.2
>
> What is the purpose of specifying an Atoms object to the calculator if
> a new Atoms object is read from the file?
>
> Perhaps the purpose will be more clear if examples with structure
> optimization and MD/NEB are added.
>
> Regards
> Ask
>
> 2013/2/1 Jens Jørgen Mortensen <jensj at fysik.dtu.dk>:
>> Den 01-02-2013 12:20, Max Hoffmann skrev:
>>> Dear All,
>>>
>>> I have a question regarding [1], where is says "The read_atoms()
>>> method is equivalent to:"
>>> Can you clarify, where this 'read_atoms' is precisely located? More
>>> specifically, what is 'ABC'  in :
>>>
>>>>>> atoms = ABC.read_atoms('si.abc')
>>> Because: Following the text above 'ABC' would be the uninstantiated
>>> calculator class.
>> Yes, that is correct ABC is the uninstantiated class.  read_atoms is a
>> so-called class-method.  You can see the implementation here:
>>
>> https://trac.fysik.dtu.dk/projects/ase/browser/branches/aep1/ase/calculators/calculator.py#L198
>>     http://docs.python.org/2/library/functions.html#classmethod
>>
>> Jens Jørgen
>>
>>> Though I think such a constructor is uncommon in python. As a python user
>>> I would expect to either have a read_atoms function as  in
>>> ase.io.ABC.read_atoms('...') or
>>> alternatively use the constructor like
>>> ase.calculators.abc.ABC(read_atoms='si.abc').
>>>
>>> Best,
>>> Max.
>>>
>>>
>>> [1] https://wiki.fysik.dtu.dk/ase/development/proposals/calculators.html
>>>
>>>
>>> 2013/1/28 John Kitchin <jkitchin at andrew.cmu.edu>:
>>>>> * Restart
>>>>>>> There is another use mode worth discussing. In the following example:
>>>>>>>
>>>>>>> myatoms = Atoms(..., ideal positions)
>>>>>>>
>>>>>>> calc = MyCalculator(arg1, atoms=myatoms, kwargs)
>>>>>>> # I greatly prefer this to myatoms.set_calculator(calc)
>>>>>>> atoms.get_potential_energy()
>>>>>> I like that way of attaching the calculator to the atoms.  I'll put that
>>>>>> idea in the proposal.
>>>>>>> 1. The first time you run this, a calculation get run.
>>>>> As a personal preference :-), I do not like that heavy calculations get
>>>>> run when one creates an object (even though some GPAW functionality behaves
>>>>> this way), but that user has to explicitly request calculation by calling a
>>>>> function.
>>>> Maybe something above was unclear. No calculation is done until
>>>> atoms.get_potential_energy() is called.
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> ase-users mailing list
>>>> ase-users at listserv.fysik.dtu.dk
>>>> https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users
>>>
>> _______________________________________________
>> ase-users mailing list
>> ase-users at listserv.fysik.dtu.dk
>> https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users




More information about the ase-users mailing list