ZimmermanGroup / pyGSM

Thermal and photochemical reaction path optimization and discovery
MIT License
50 stars 26 forks source link

addtr #48

Open maartensandbox opened 1 year ago

maartensandbox commented 1 year ago

What is the use of addTr? I'd guess it is a possible translation in internal coordinates, but when should I use it?

I'm also writing an interface to pyscf and our own internal code (if pyscf works well I'll contribute a pull request), what is ad_idx for? Is the interface supposed to support multiple molecules at the same time, and does ad_idx label the geometries?

maartensandbox commented 1 year ago
The double ended growing string method also seems to be have rather weird. I've tried to follow examples from the code, but the initial call to add_nodes(2) in go_gsm() errors. Yet, if I start out by adding an extra product node first, then it runs just fine. 

Attached is a short notebook that wraps pyscf to perform hartree fock, and demonstrates the error when using double ended growing string.

[pyscf_lot.ipynb.zip](https://github.com/ZimmermanGroup/pyGSM/files/11452735/pyscf_lot.ipynb.zip)

The reason was that the product node needs to have its ID to the number of nodes that will be used in the growing string. Would it make sense to let the constructor do this manually? Or should the user use a different method to initialize the growing string object?

If the ID is set to 1 or 0 (I used copy_from_options, which made the ID for reactant/product equal), then the tangent code will default to using the driving coordinate when calculating the tangent between those two nodes - but the driving coordinate was never specified (and shouldn't be necessary). Another option would be to change the tangent code to not check the node_id:

if node2 is not None and node1.node_id != node2.node_id:
            print(" getting tangent from between %i %i pointing towards %i" % (node2.node_id, node1.node_id, node2.node_id))
            assert node2 != None, 'node n2 is None'

=>

if node2 is not None:
            print(" getting tangent from between %i %i pointing towards %i" % (node2.node_id, node1.node_id, node2.node_id))
joshkamm commented 1 year ago

I'm not sure how much I'll be able to help but trying to help with what I can.

My understanding is that addtr is an option for adding translation-rotation-internal coordinates (TRIC) based on what is described here.

It seems like ad_idx is set based on the adiabatic_index command line argument which I believe is referring to whether you want the ground state, 1st excited state, 2nd excited state, etc. of a given spin multiplicity.