Ways to assign basis sets ######################### Similar to the other part of the input file in BAGH, the basis set assignment is case and space-insensitive (as long as different keywords are separated) unless mentioned otherwise. There are 3 ways basis sets are assigned to different atoms in BAGH (arranged according to the priorities): 1. Atom-specific basis set 2. Custom basis set 3. Universal basis set The highest priority is given to the atom-specific basis sets, and the lowest goes to the universal basis set assignment. If no basis set is assigned to an atom at all, by default, STO-3G is assigned to it. A sample input file is shown below: Example 1: .. code-block:: shell ! CCSD pos3 pos4 pos5 %cc incore 5 end %basis pos2 end *xyz 0 1 H 0.0000 -0.9377 -0.3816 pos1 H 0.8121 0.4689 -0.3816 H -0.8121 0.4689 -0.3816 N 0.0000 0.0000 0.0000 All 3 positions are shown in the above example. ``pos1``, ``pos2`` and ``pos3`` refer to the positions of atom-specific basis, custom basis and universal basis, respectively. A basis set can be assigned to an atom in either of these 3 ways. In the above example, one of the ``H`` atoms is being assigned a basis set from the atom-specific basis (``pos1``). The rest of the two ``H`` atoms and the ``N`` atom can either be assigned by the custom basis (``pos2``) or the universal basis (``pos3``) only if any atom is left unassigned in the custom basis. Let's say custom basis only contains basis functions for ``N`` atom, then rest of the two ``H`` atoms will be assigned from the universal basis in ``pos3``. The positions ``pos4`` and ``pos5`` refer to the position of JK and RI basis positions, respectively (if any). .. note:: - One can assign a JK auxiliary basis even if there is no universal main basis. - One can assign a RI auxiliary basis even if there is no universal main basis or JK auxiliary basis or both. - JK and RI auxiliary basis sets are only assigned in the RHF (spin-summed MO) interface of the code. *********************** Atom-specific basis set *********************** Atom-specific basis sets are written within the coordinate block ``*xyz`` in the 5th column as in ``pos1`` in Example 1. The basis set is assigned only to that particular atom (eg. first ``H`` atom in Example 1). The rest of the atoms remain unassigned. A sample input file is shown where all of the atoms are assigned using atom-specific basis set. Example 2: .. code-block:: shell ! CCSD spinor %cc incore 5 end *xyz 0 1 H 0.0000 -0.9377 -0.3816 ccpvdz H 0.8121 0.4689 -0.3816 ccpvdz H -0.8121 0.4689 -0.3816 ccpvdz N 0.0000 0.0000 0.0000 augccpvdz Here all 3 ``H`` atoms are assigned ``cc-pVDZ`` basis set, while ``N`` atom is assigned to ``aug-cc-pVDZ`` basis set. One can also assign different basis sets for different atoms of the same element as in the following example. Example 3: .. code-block:: shell ! CCSD spinor %cc incore 5 end *xyz 0 1 H 0.0000 -0.9377 -0.3816 ccpvdz H 0.8121 0.4689 -0.3816 631g H -0.8121 0.4689 -0.3816 ccpvtz N 0.0000 0.0000 0.0000 augccpvdz **************** Custom basis set **************** If an atom remains unassigned to any basis set in an atom-specific way, the flow of code searches for that atom in the custom basis set. The custom basis set is provided within ``%basis`` block of the input file and it ends with a single ``end`` at the end. There should not be any other text in the middle as they may interfere with the proper running of the code, especially another ``end`` in the middle. Only one ``end`` keyword will be used for the entire ``%basis`` block. The custom basis has to be in the ``NWCHEM`` format. .. caution:: **Space-sensitivity in the custom basis:** Basis function type eg. ``S``, ``P``, ``D``, ``F``... has to start from the 6th column of the input file. A sample input file is provided containing only custom basis assignment to each atom. Example 4: .. code-block:: shell ! CCSD spinor %cc incore 5 end %basis H S 1.301000E+01 1.968500E-02 0.000000E+00 1.962000E+00 1.379770E-01 0.000000E+00 4.446000E-01 4.781480E-01 0.000000E+00 1.220000E-01 5.012400E-01 1.000000E+00 H P 7.270000E-01 1.0000000 N S 9.046000E+03 7.000000E-04 -1.530000E-04 0.000000E+00 1.357000E+03 5.389000E-03 -1.208000E-03 0.000000E+00 3.093000E+02 2.740600E-02 -5.992000E-03 0.000000E+00 8.773000E+01 1.032070E-01 -2.454400E-02 0.000000E+00 2.856000E+01 2.787230E-01 -6.745900E-02 0.000000E+00 1.021000E+01 4.485400E-01 -1.580780E-01 0.000000E+00 3.838000E+00 2.782380E-01 -1.218310E-01 0.000000E+00 7.466000E-01 1.544000E-02 5.490030E-01 0.000000E+00 2.248000E-01 -2.864000E-03 5.788150E-01 1.000000E+00 N P 1.355000E+01 3.991900E-02 0.000000E+00 2.917000E+00 2.171690E-01 0.000000E+00 7.973000E-01 5.103190E-01 0.000000E+00 2.185000E-01 4.622140E-01 1.000000E+00 N D 8.170000E-01 1.0000000 end *xyz 0 1 H 0.0000 -0.9377 -0.3816 H 0.8121 0.4689 -0.3816 H -0.8121 0.4689 -0.3816 N 0.0000 0.0000 0.0000 If one wants to assign different basis sets to different atoms of the same element, eg. ``aug-cc-pVDZ`` basis set need to be assigned to one of the ``H`` atom and for all other atoms ``cc-pVDZ`` need to be assigned, one can do that using custom basis but in that case one has to number the atoms (Here ``H`` atoms). Example 5: .. code-block:: shell ! CCSD spinor %cc incore 5 end %basis H S 1.301000E+01 1.968500E-02 0.000000E+00 1.962000E+00 1.379770E-01 0.000000E+00 4.446000E-01 4.781480E-01 0.000000E+00 1.220000E-01 5.012400E-01 1.000000E+00 H P 7.270000E-01 1.0000000 H1 S 1.301000E+01 1.968500E-02 0.000000E+00 1.962000E+00 1.379770E-01 0.000000E+00 4.446000E-01 4.781480E-01 0.000000E+00 1.220000E-01 5.012400E-01 1.000000E+00 H1 S 0.0297400 1.0000000 H1 P 7.270000E-01 1.0000000 H1 P 0.1410000 1.0000000 N S 9.046000E+03 7.000000E-04 -1.530000E-04 0.000000E+00 1.357000E+03 5.389000E-03 -1.208000E-03 0.000000E+00 3.093000E+02 2.740600E-02 -5.992000E-03 0.000000E+00 8.773000E+01 1.032070E-01 -2.454400E-02 0.000000E+00 2.856000E+01 2.787230E-01 -6.745900E-02 0.000000E+00 1.021000E+01 4.485400E-01 -1.580780E-01 0.000000E+00 3.838000E+00 2.782380E-01 -1.218310E-01 0.000000E+00 7.466000E-01 1.544000E-02 5.490030E-01 0.000000E+00 2.248000E-01 -2.864000E-03 5.788150E-01 1.000000E+00 N P 1.355000E+01 3.991900E-02 0.000000E+00 2.917000E+00 2.171690E-01 0.000000E+00 7.973000E-01 5.103190E-01 0.000000E+00 2.185000E-01 4.622140E-01 1.000000E+00 N D 8.170000E-01 1.0000000 end *xyz 0 1 H 0.0000 -0.9377 -0.3816 H 0.8121 0.4689 -0.3816 H -0.8121 0.4689 -0.3816 N 0.0000 0.0000 0.0000 In the above example, ``H1`` (first hydrogen atom) is assigned to the custom basis set of ``aug-cc-pVDZ``, while all other ``H`` atoms and ``N`` are assigned to ``cc-pVDZ`` basis set. In the ``%basis`` block, only the element (eg. ``H`` here) written in the left side (the place of atom) assigns it to all unassigned atoms of the same element. The numbered atom (eg. ``H1`` in this case) takes the priority to be assigned differently. .. note:: Numbered atoms are prioritized over unnumbered atoms in the ``%basis`` block. .. caution:: - Numbered atoms' basis sets have to be written after the basis set for the unnumbered atom (if any) of the same elemnt in the ``%basis`` block. - If numbered atoms are present in the custom basis set, a warning pops up saying *"Custom basis provided for specified elements will be overwritten."*. That can be ignored in such cases. ******************* Universal basis set ******************* If no basis set is assigned to an atom, it gets assigned using the universal basis set as in ``pos3`` in Example 1. Universal basis set is a single basis set that gets assigned to all atoms yet unassigned. Let's see an example: Example 6: .. code-block:: shell ! CCSD spinor ccpvdz %cc incore 5 end *xyz 0 1 H 0.0000 -0.9377 -0.3816 H 0.8121 0.4689 -0.3816 H -0.8121 0.4689 -0.3816 N 0.0000 0.0000 0.0000 Here, in Example 6, all atoms are assigned to ``cc-pVDZ`` basis set. Now, let's discuss a complicated basis assignment (see following): Example 7: .. code-block:: shell ! CCSD spinor def2qzvp %cc incore 5 end %basis H S 1.301000E+01 1.968500E-02 0.000000E+00 1.962000E+00 1.379770E-01 0.000000E+00 4.446000E-01 4.781480E-01 0.000000E+00 1.220000E-01 5.012400E-01 1.000000E+00 H P 7.270000E-01 1.0000000 H1 S 1.301000E+01 1.968500E-02 0.000000E+00 1.962000E+00 1.379770E-01 0.000000E+00 4.446000E-01 4.781480E-01 0.000000E+00 1.220000E-01 5.012400E-01 1.000000E+00 H1 S 0.0297400 1.0000000 H1 P 7.270000E-01 1.0000000 H1 P 0.1410000 1.0000000 end *xyz 0 1 H 0.0000 -0.9377 -0.3816 H 0.8121 0.4689 -0.3816 H -0.8121 0.4689 -0.3816 631g N 0.0000 0.0000 0.0000 Here, ``H1`` is assigned to the custom basis of ``aug-cc-pVDZ`` as a numbered atom, ``H2`` is assigned to the custom basis of ``cc-pVDZ`` as an unnumbered atom, ``H3`` is assigned to ``6-31G`` basis set as atom-specific assignment and ``N`` atom is assigned to the ``def2-QZVP`` basis set as an universal basis set of this input file. If an atom still remains unassigned (as follows), it by default, gets assigned to ``STO-3G`` basis set. Example 8: .. code-block:: shell ! CCSD spinor %cc incore 5 end %basis H S 1.301000E+01 1.968500E-02 0.000000E+00 1.962000E+00 1.379770E-01 0.000000E+00 4.446000E-01 4.781480E-01 0.000000E+00 1.220000E-01 5.012400E-01 1.000000E+00 H P 7.270000E-01 1.0000000 H1 S 1.301000E+01 1.968500E-02 0.000000E+00 1.962000E+00 1.379770E-01 0.000000E+00 4.446000E-01 4.781480E-01 0.000000E+00 1.220000E-01 5.012400E-01 1.000000E+00 H1 S 0.0297400 1.0000000 H1 P 7.270000E-01 1.0000000 H1 P 0.1410000 1.0000000 end *xyz 0 1 H 0.0000 -0.9377 -0.3816 H 0.8121 0.4689 -0.3816 H -0.8121 0.4689 -0.3816 631g N 0.0000 0.0000 0.0000 Here, in Example 8, ``N`` atom is not assigned to any basis in any way. So, it takes ``STO-3G`` basis set. Basis set assignment to ghost atoms ################################### Ghost atoms are defined as ``X`` atom in BAGH. Basis sets to ghost atoms are assigned in the same way as other atoms. In the Example 8, if first two ``H`` atoms are replaced by ghost atoms, the input structure looks like the following. Example 9: .. code-block:: shell ! CCSD spinor %cc incore 5 end %basis X S 1.301000E+01 1.968500E-02 0.000000E+00 1.962000E+00 1.379770E-01 0.000000E+00 4.446000E-01 4.781480E-01 0.000000E+00 1.220000E-01 5.012400E-01 1.000000E+00 X P 7.270000E-01 1.0000000 X1 S 1.301000E+01 1.968500E-02 0.000000E+00 1.962000E+00 1.379770E-01 0.000000E+00 4.446000E-01 4.781480E-01 0.000000E+00 1.220000E-01 5.012400E-01 1.000000E+00 X1 S 0.0297400 1.0000000 X1 P 7.270000E-01 1.0000000 X1 P 0.1410000 1.0000000 end *xyz 0 1 X 0.0000 -0.9377 -0.3816 X 0.8121 0.4689 -0.3816 H -0.8121 0.4689 -0.3816 631g N 0.0000 0.0000 0.0000 Basis set assignments in BAGH can be checked from the ouput file whether they are assigned correctly. Available basis sets #################### ************** Main basis set ************** There are several basis sets that are currently available in BAGH as a keyword. Basis sets keywords are usually slightly different than their respective names but they are simple and comprehensible eg. ``aug-cc-pVDZ`` basis set is called as ``augccpvdz`` etc. Following is the list of exact keywords of all currently available basis sets in BAGH. .. raw:: html There are additional dyall basis sets, for which a separate discussion is done in the section ``Additional information on Dyall basis sets``. ********************** JK auxiliary basis set ********************** Following is the list of exact keywords of all currently available JK auxiliary basis sets in BAGH. JK basis can only be assigned using universal basis assignment (as in ``pos4`` in Example 1). .. raw:: html ********************** RI auxiliary basis set ********************** Following is the list of exact keywords of all currently available RI auxiliary basis sets in BAGH. RI basis can only be assigned using universal basis assignment (as in ``pos5`` in Example 1). .. raw:: html .. raw:: html .. raw:: html Uncontraction of the basis sets ############################### The atom-specific and universal basis sets can be uncontracted by adding a prefix ``unc-`` to the name of the basis set. eg. for an uncontracted version of the ``aug-cc-pVDZ`` basis set, one has to write ``unc-augccpvdz`` in the place of the basis set. See the following example: Example 10: .. code-block:: shell ! CCSD spinor unc-augccpvdz %cc incore 5 end *xyz 0 1 H 0.0000 -0.9377 -0.3816 H 0.8121 0.4689 -0.3816 H -0.8121 0.4689 -0.3816 unc-631g N 0.0000 0.0000 0.0000 In the custom basis, one can uncontract beforehand if they need it. Additional information on Dyall basis sets ##########################################