Dear QW supporters,
As I know, it is possible for users to use their own norm conserving pseduopotentials in the calcualtions. And I searched this forum, and find the following way can be used to defined the users' pseduopotentials,
basis_set = [
GGABasis.Hydrogen_DoubleZetaPolarized(element=Hydrogen,filter_mesh_cutoff=200*Rydberg,
pseudopotential = NormConservingPseudoPotential('/xxx/xxx/H.upf')),
GGABasis.Carbon_DoubleZetaPolarized(element=Carbon,filter_mesh_cutoff=200*Rydberg,
pseudopotential = NormConservingPseudoPotential('/xxx/xxx/C.upf')),
GGABasis.Sulfur_DoubleZetaPolarized(element=Sulfur,filter_mesh_cutoff=200*Rydberg,
pseudopotential = NormConservingPseudoPotential('/xxx/xxx/S.upf')),
GGABasis.Silver_SingleZetaPolarized(element=Silver,filter_mesh_cutoff=200*Rydberg,
pseudopotential = NormConservingPseudoPotential('/xxx/xxx/Ag.upf')),
]
However, the atkpython executable can not find my upf pseduopotential. Here the pseduopotentials are give by their absolute path. Must the users' pseduopotentials be put in the directory /xxx/xxx/xxx/share/pseudopotentials? If so, this will need a root privilege since the VNL-ATK is installed by the administrator. Can I put my own pseduopotentials in a directory that can be avaiable to the executable when the job is running, and specify my own pseduopotentials in the basis_set above ?
Thanks so much.
With best regards,
Guangping Zhang
Should be quite easy to use a user-defined pseudopotential without sysadmin privileges. I am attaching an example where a custom Ga potential is used. I simply point to the absolute path of the upf file, and make sure that I have access to it at run-time. Be aware that you may need to adjust settings such as occupations and number of valence electrons to match your pseudopotential.
Dear Jess,
Thanks very much for your reply.
However, problem persists. It reports that:
Traceback (most recent call last):
File "Ag-C6H4S2-Ag-Own-PPs.py", line 335, in <module>
device_configuration.update()
File "./zipdir/NL/CommonConcepts/Configurations/AtomicConfiguration.py", line 1072, in update
File "./zipdir/NL/Calculators/DeviceCalculatorInterface.py", line 325, in _update
Exception: The compact_support_radius, 4.64453 Bohr, is shorter than the longest projector which is 5.72208 Bohr
This time, it seems the executable can find my own PPs, but the basis set seems to be problematic.
Please find the attached py file and my own PPs. By the way, is there a method to define the size of the basis set use a EnergyShift of each basis orbital due to the confinement like in SIESTA.
With best regards,
/Guangping Zhang
The new error is hopefully quite obvious to you.
There is a function in the code to compute the confinement radius from the energy shift - see attached example.
Dear Anders,
Thanks very much for your kind reply.
I did not understand the warning given by ATK, and searched much without any hints.
Traceback (most recent call last):
File "Ag-C6H4S2-Ag-Own-PPs.py", line 335, in <module>
device_configuration.update()
File "./zipdir/NL/CommonConcepts/Configurations/AtomicConfiguration.py", line 1072, in update
File "./zipdir/NL/Calculators/DeviceCalculatorInterface.py", line 325, in _update
Exception: The compact_support_radius, 4.64453 Bohr, is shorter than the longest projector which is 5.72208 Bohr
So, can you please give some instruction information?
Also, I used the script you give to see the confinement radius from the energy shift.
I write in the test.py the following,
from NL.Calculators.DensityFunctionalTheory.LCAOCalculator.BasisSet import confinementRadiusFromEnergyShift
P = NormConservingPseudoPotential('/home/zhanggp/globe/ATK-TranSIESTA/ATK-own-PPs/PPs/H.upf')
P.load()
N = P._valenceCharge()
rc = confinementRadiusFromEnergyShift(P,6,0,0.001*Rydberg,GGA.PBE._radialBackEngine(),0.00)*Units.Bohr
print rc
and execute atkpython like
atkpython test.py > test.out
but I get errors.
Traceback (most recent call last):
File "test.py", line 1, in <module>
from NL.Calculators.DensityFunctionalTheory.LCAOCalculator.BasisSet import confinementRadiusFromEnergyShift
ImportError: No module named DensityFunctionalTheory.LCAOCalculator.BasisSet
Can you please give some instructions? I not faimilar with the behavior of new version of ATK.
Thanks very much.
/Guangping Zhang
To avoid the import error, use from NL.Calculators.LCAOCalculator.BasisSet import confinementRadiusFromEnergyShift
Using custom pseudopotentials and/or basis sets is obviously an expert operation. The exception appear to tell you that there is some mismatch between the pseudopotential and basis set.
Dear Anders and Jess,
Thanks for your reply.
Yes, the script should be like this,
from NL.Calculators.LCAOCalculator.BasisSet import confinementRadiusFromEnergyShift
P = NormConservingPseudoPotential('/home/zhanggp/globe/ATK-TranSIESTA/ATK-own-PPs/PPs/H.upf')
P.load()
N = P._valenceCharge()
rc = confinementRadiusFromEnergyShift(P,6,0,200*Rydberg,GGA.PBE._radialBackEngine(),0.00)*Units.Bohr
nlprint(rc)
It could give me the rc in output file. However, this is not what I want. Because function confinementRadiusFromEnergyShift is not decribed in the manual. Now I want to compare the results from ATK-2015.1 and TranSIESTA.
And for Ag-C6H4S2-Ag junction as attached below, I can set as much parameters as possible the same. At the moment, only pesudopotentials and basis set are maybe largely different. So, I use APE to generate the same pesudopotentials. But the ATK-2015 complains about the basis.
The basis set in TranSIESTA I use is:
PAO.EnergyShift 100 meV or FilterCutoff 200.0 Ry. So, I wonder, whether I can give a very close basis set in ATK.
With best regards,
Guangping Zhang
Dear Anders,
Thanks very much for your reply. It is useful of the "Show default" feature. I was not aware of this.
However, I yet can not make the executable run.
When the code gave errors,
Traceback (most recent call last):
File "Ag-C6H4S2-Ag-Own-PPs.py", line 485, in <module>
device_configuration.update()
File "./zipdir/NL/CommonConcepts/Configurations/AtomicConfiguration.py", line 1072, in update
File "./zipdir/NL/Calculators/DeviceCalculatorInterface.py", line 325, in _update
Exception: The compact_support_radius, 3.942 Bohr, is shorter than the longest projector which is 5.72208 Bohr
I changed the radial_cutoff_radius for Ag 4d orbital to .73 Bohr,
silver_4d = ConfinedOrbital(
principal_quantum_number=4,
angular_momentum=2,
radial_cutoff_radius=5.73*Bohr,
confinement_start_radius=3.71562127585*Bohr,
additional_charge=0,
confinement_strength=21.5307196457*Hartree,
confinement_power=1,
radial_step_size=0.001*Bohr,
)
However. the executable gave error like this
** Back Engine Exception : mesh does not extend sufficiently beyond projectors
** Location of Exception : radialschrodinger.cpp:920
atkpython: line 11: 12293 Aborted $EXEC_DIR/atkpython_exec "$@"
Does this mean the mesh range of my PPs are not sufficient? But they can be used without any problem by TranSIESTA.
With best regards,
Guangping Zhang