Author Topic: ATKError: inverse(DZMatrix const &) : Could not LU factorize!  (Read 3927 times)

0 Members and 1 Guest are viewing this topic.

Offline yqxie

  • Regular QuantumATK user
  • **
  • Posts: 15
  • Country: cn
  • Reputation: 0
    • View Profile
 Dear all,
         I got a problem, when the Equivalent Bulk calculation finished, it gives the following information:

File "Scf_NiCoCo.py", line 118, in ?
    twoprobe_method
ATKError: inverse(DZMatrix const &) : Could not LU factorize!

As has been discussed, this may be related to the configuration of the system, but I cannot find the error with the configuration. I post the script below for help.
         Here is a "two-probe" system. The left and reight Electrodes are of the same FCC(111) Cobalt buck of 3 layers, the  Scattering regeion is 2-layer FCC(111) Cobalt surface + 1 Co adatom+ 36-atoms Nickel pyramidical tip+  1 Co adatom + 2-layer FCC(111) Cobalt surface".
        The script for the configuration, and the SCF calucation is given below.
 
File1, for construct the two-probe system


from ATK.TwoProbe import *
from numpy import *
path = '.'

# Li chain lattice constant
a = 3.52
d0 = a/1.414213562
b = 3.52
GRID_X = 2.44948974278*a/4.0
GRID_Y = 1.414213562373095*a/2.00
GRID_Z = 1.732050807568877*a/3.00


N_left=48
N_right=48
N_scatt=102
N_tip=36

# Construct the electrode unit cell
unit_cell = [ [4*GRID_X, 0.0, 0.0 ],
    [0.0, 4*GRID_Y, 0.0 ],
    [0.0, 0.0, 3*GRID_Z ] ] * Angstrom
unit_cell2 = [ [4*GRID_X, 0.0, 0.0 ],
    [0.0, 4*GRID_Y, 0.0 ],
    [0.0, 0.0, 3*GRID_Z ] ] * Angstrom
   
   
# Define the left electrode, the FCC Co(111) surf
 
electrode_left=array([
   [  2.8741,  1.2445,  0.0000],
   [  2.8741,  3.7335,  0.0000],
   [  2.8741,  6.2225,  0.0000],
   [  2.8741,  8.7116,  0.0000],
   [  5.0296,  0.0000,  0.0000],
   [  5.0296,  2.4890,  0.0000],
   [  5.0296,  4.9780,  0.0000],
   [  5.0296,  7.4670,  0.0000],
   [  7.1852,  1.2445,  0.0000],
   [  7.1852,  3.7335,  0.0000],
   [  7.1852,  6.2225,  0.0000],
   [  7.1852,  8.7116,  0.0000],
   [  0.7185,  0.0000,  0.0000],
   [  0.7185,  2.4890,  0.0000],
   [  0.7185,  4.9780,  0.0000],
   [  0.7185,  7.4670,  0.0000],
   [  0.0000,  1.2445,  2.0323],
   [  0.0000,  3.7335,  2.0323],
   [  0.0000,  6.2225,  2.0323],
   [  0.0000,  8.7116,  2.0323],
   [  2.1556,  0.0000,  2.0323],
   [  2.1556,  2.4890,  2.0323],
   [  2.1556,  4.9780,  2.0323],
   [  2.1556,  7.4670,  2.0323],
   [  4.3111,  1.2445,  2.0323],
   [  4.3111,  3.7335,  2.0323],
   [  4.3111,  6.2225,  2.0323],
   [  4.3111,  8.7116,  2.0323],
   [  6.4667,  0.0000,  2.0323],
   [  6.4667,  2.4890,  2.0323],
   [  6.4667,  4.9780,  2.0323],
   [  6.4667,  7.4670,  2.0323],
   [  1.4370,  1.2445,  4.0645],
   [  1.4370,  3.7335,  4.0645],
   [  1.4370,  6.2225,  4.0645],
   [  1.4370,  8.7116,  4.0645],
   [  3.5926,  0.0000,  4.0645],
   [  3.5926,  2.4890,  4.0645],
   [  3.5926,  4.9780,  4.0645],
   [  3.5926,  7.4670,  4.0645],
   [  5.7481,  1.2445,  4.0645],
   [  5.7481,  3.7335,  4.0645],
   [  5.7481,  6.2225,  4.0645],
   [  5.7481,  8.7116,  4.0645],
   [  7.9037,  0.0000,  4.0645],
   [  7.9037,  2.4890,  4.0645],
   [  7.9037,  4.9780,  4.0645],
   [  7.9037,  7.4670,  4.0645],
   ]
   )
   
 
electrode_CoSub = PeriodicAtomConfiguration(
    super_cell_vectors=unit_cell,
    elements=N_left*[Cobalt],
    cartesian_coordinates=electrode_left*Angstrom
    )
# define the Co(001) sub-------------
eles=electrode_CoSub.elements()
print '\n','='*10, eles[1]
print '\n','='*10, eles[2]

# Electrode right, the Co(111) surf with a Co adatom Body Bulk---------
electrode_right=array([
   [  2.8741,  1.2445,  0.0000],
   [  2.8741,  3.7335,  0.0000],
   [  2.8741,  6.2225,  0.0000],
   [  2.8741,  8.7116,  0.0000],
   [  5.0296,  0.0000,  0.0000],
   [  5.0296,  2.4890,  0.0000],
   [  5.0296,  4.9780,  0.0000],
   [  5.0296,  7.4670,  0.0000],
   [  7.1852,  1.2445,  0.0000],
   [  7.1852,  3.7335,  0.0000],
   [  7.1852,  6.2225,  0.0000],
   [  7.1852,  8.7116,  0.0000],
   [  0.7185,  0.0000,  0.0000],
   [  0.7185,  2.4890,  0.0000],
   [  0.7185,  4.9780,  0.0000],
   [  0.7185,  7.4670,  0.0000],
   [  0.0000,  1.2445,  2.0323],
   [  0.0000,  3.7335,  2.0323],
   [  0.0000,  6.2225,  2.0323],
   [  0.0000,  8.7116,  2.0323],
   [  2.1556,  0.0000,  2.0323],
   [  2.1556,  2.4890,  2.0323],
   [  2.1556,  4.9780,  2.0323],
   [  2.1556,  7.4670,  2.0323],
   [  4.3111,  1.2445,  2.0323],
   [  4.3111,  3.7335,  2.0323],
   [  4.3111,  6.2225,  2.0323],
   [  4.3111,  8.7116,  2.0323],
   [  6.4667,  0.0000,  2.0323],
   [  6.4667,  2.4890,  2.0323],
   [  6.4667,  4.9780,  2.0323],
   [  6.4667,  7.4670,  2.0323],
   [  1.4370,  1.2445,  4.0645],
   [  1.4370,  3.7335,  4.0645],
   [  1.4370,  6.2225,  4.0645],
   [  1.4370,  8.7116,  4.0645],
   [  3.5926,  0.0000,  4.0645],
   [  3.5926,  2.4890,  4.0645],
   [  3.5926,  4.9780,  4.0645],
   [  3.5926,  7.4670,  4.0645],
   [  5.7481,  1.2445,  4.0645],
   [  5.7481,  3.7335,  4.0645],
   [  5.7481,  6.2225,  4.0645],
   [  5.7481,  8.7116,  4.0645],
   [  7.9037,  0.0000,  4.0645],
   [  7.9037,  2.4890,  4.0645],
   [  7.9037,  4.9780,  4.0645],
   [  7.9037,  7.4670,  4.0645],
   ]
   )     

#displace the Z coordinate of the electrode
 
electrode_right = electrode_right+[0,0,0]
 
electrode_NiBulk = PeriodicAtomConfiguration(
    super_cell_vectors=unit_cell2,
    elements=N_right*[Cobalt],
    cartesian_coordinates=electrode_right*Angstrom
    )

# Setup the two-probe scattering region
# The atoms in the central region

elements = 33*[Cobalt]+N_tip*[Nickel]+33*[Cobalt]

position2 = array([
   [  2.8741,  1.2445,  6.0968],
   [  2.8741,  3.7335,  6.0968],
   [  2.8741,  6.2225,  6.0968],
   [  2.8741,  8.7116,  6.0968],
   [  5.0296,  0.0000,  6.0968],
   [  5.0296,  2.4890,  6.0968],
   [  5.0296,  4.9780,  6.0968],
   [  5.0296,  7.4670,  6.0968],
   [  7.1852,  1.2445,  6.0968],
   [  7.1852,  3.7335,  6.0968],
   [  7.1852,  6.2225,  6.0968],
   [  7.1852,  8.7116,  6.0968],
   [  0.7185,  0.0000,  6.0968],
   [  0.7185,  2.4890,  6.0968],
   [  0.7185,  4.9780,  6.0968],
   [  0.7185,  7.4670,  6.0968],
   [  0.0000,  1.2445,  8.1291],
   [  0.0000,  3.7335,  8.1291],
   [  0.0000,  6.2225,  8.1291],
   [  0.0000,  8.7116,  8.1291],
   [  2.1556,  0.0000,  8.1291],
   [  2.1556,  2.4890,  8.1291],
   [  2.1556,  4.9780,  8.1291],
   [  2.1556,  7.4670,  8.1291],
   [  4.3111,  1.2445,  8.1291],
   [  4.3111,  3.7335,  8.1291],
   [  4.3111,  6.2225,  8.1291],
   [  4.3111,  8.7116,  8.1291],
   [  6.4667,  0.0000,  8.1291],
   [  6.4667,  2.4890,  8.1291],
   [  6.4667,  4.9780,  8.1291],
   [  6.4667,  7.4670,  8.1291],
   [  3.5926,  4.9780, 10.1614],
   [  3.5926,  4.9780, 16.1614],
   [  2.8741,  3.7335, 18.1936],
   [  2.8741,  6.2225, 18.1936],
   [  5.0296,  4.9780, 18.1936],
   [  2.1556,  2.4890, 20.2259],
   [  2.1556,  4.9780, 20.2259],
   [  2.1556,  7.4670, 20.2259],
   [  4.3111,  3.7335, 20.2259],
   [  4.3111,  6.2225, 20.2259],
   [  6.4667,  4.9780, 20.2259],
   [  1.4370,  1.2445, 22.2582],
   [  1.4370,  3.7335, 22.2582],
   [  1.4370,  6.2225, 22.2582],
   [  3.5926,  2.4890, 22.2582],
   [  3.5926,  4.9780, 22.2582],
   [  3.5926,  7.4670, 22.2582],
   [  5.7481,  3.7335, 22.2582],
   [  5.7481,  6.2225, 22.2582],
   [  0.7185,  2.4890, 24.2905],
   [  0.7185,  4.9780, 24.2905],
   [  2.8741,  1.2445, 24.2905],
   [  2.8741,  3.7335, 24.2905],
   [  2.8741,  6.2225, 24.2905],
   [  5.0296,  2.4890, 24.2905],
   [  5.0296,  4.9780, 24.2905],
   [  5.0296,  7.4670, 24.2905],
   [  0.0000,  3.7335, 26.3227],
   [  2.1556,  2.4890, 26.3227],
   [  2.1556,  4.9780, 26.3227],
   [  4.3111,  1.2445, 26.3227],
   [  4.3111,  3.7335, 26.3227],
   [  4.3111,  6.2225, 26.3227],
   [  1.4370,  3.7335, 28.3550],
   [  3.5926,  2.4890, 28.3550],
   [  3.5926,  4.9780, 28.3550],
   [  2.8741,  3.7335, 30.3873],
   [  2.8741,  3.7335, 36.3873],
   [  0.0000,  1.2445, 38.4195],
   [  0.0000,  3.7335, 38.4195],
   [  0.0000,  6.2225, 38.4195],
   [  0.0000,  8.7116, 38.4195],
   [  2.1556,  0.0000, 38.4195],
   [  2.1556,  2.4890, 38.4195],
   [  2.1556,  4.9780, 38.4195],
   [  2.1556,  7.4670, 38.4195],
   [  4.3111,  1.2445, 38.4195],
   [  4.3111,  3.7335, 38.4195],
   [  4.3111,  6.2225, 38.4195],
   [  4.3111,  8.7116, 38.4195],
   [  6.4667,  0.0000, 38.4195],
   [  6.4667,  2.4890, 38.4195],
   [  6.4667,  4.9780, 38.4195],
   [  6.4667,  7.4670, 38.4195],
   [  1.4370,  1.2445, 40.4518],
   [  1.4370,  3.7335, 40.4518],
   [  1.4370,  6.2225, 40.4518],
   [  1.4370,  8.7116, 40.4518],
   [  3.5926,  0.0000, 40.4518],
   [  3.5926,  2.4890, 40.4518],
   [  3.5926,  4.9780, 40.4518],
   [  3.5926,  7.4670, 40.4518],
   [  5.7481,  1.2445, 40.4518],
   [  5.7481,  3.7335, 40.4518],
   [  5.7481,  6.2225, 40.4518],
   [  5.7481,  8.7116, 40.4518],
   [  7.9037,  0.0000, 40.4518],
   [  7.9037,  2.4890, 40.4518],
   [  7.9037,  4.9780, 40.4518],
   [  7.9037,  7.4670, 40.4518],
   ] 
   )
# Combine electrode and scattering region
# into a two-probe system
#displace the Z coordinate of the electrode
   
two_probe = TwoProbeConfiguration(
    electrodes = (electrode_CoSub,electrode_NiBulk),
    scattering_region_elements = elements,
    scattering_region_cartesian_coordinates = position2* Angstrom,
    equivalent_atoms= [(0,0),(19,74)]
    )
   
print
   
## Export the two-probe system to VNL file.
#vnl_file = VNLFile("F:\data\ATK\NiCoCoCu(111)\Scf\4.8\NiCoCo.vnl")
#vnl_file.addToSample(two_probe, "F:\data\ATK\NiCoCoCu(111)\Scf\4.8\NiCoCo")
   
   
vnl_file = VNLFile("./NiCoCo.vnl")
vnl_file.addToSample(two_probe, "./NiCoCo")

=====================================

file2 for SCF calculation

from ATK.TwoProbe import *                                             

# -- Parameters --------------------------------                       
NumCoLeft=3*4*4
NumCo1Cent=4*4*2+1
NumCo2Cent=4*4*2+1
NumNiCent=36
NumNiRight=3*4*4
parallel_spin = True                                                   
# ----------------------------------------------                       
scf_kpoints = (3,3,100)                                                 
mesh_cutoff = 150.*Rydberg                                             
xc = GGA.PBE                                                           
temperature = 1000.*Kelvin                                             
tolerance = 1e-5                                                       
basis_set_parameters = [                                               
#    basisSetParameters(SingleZetaPolarized,element = Copper),                 
    basisSetParameters(SingleZetaPolarized,element = Cobalt),                 
    basisSetParameters(SingleZetaPolarized,element = Nickel)           
    ]                                                               
           
# ----------------------------------------------                       
diagonal_mixing_parameter = 0.05                                       
history_steps = 10                                                     
max_steps = 400                                                         
integral_lower_bound = 3.*Rydberg                                     
circle_points = 30 
real_axis_point_density = 0.005*electronVolt
                                                   
# ----------------------------------------------                       
path = '.' # For parallel, set to absolute path, like '/home/user/FeMgO'
vnl_filename = "NiCoCo.vnl"                                           
verbosity = 10                                                         
checkpoint_filename = "NiCoCoCheck.nc"                                         
# ----------------------------------------------                       

vnl_file = VNLFile(path+'/'+vnl_filename)   
NiCoSys = vnl_file.readAtomicConfigurations()   
twoprobe_configuration = NiCoSys[NiCoSys.keys()[0]]


# Initial spins                                               
left_electrode_initial_scaled_spin = [ 0.52,]*NumCoLeft
central_region_initial_scaled_spin =[ 0.52,]*NumCo1Cent+[ 0.32,]*NumNiCent+[ 0.52,]*NumCo2Cent
right_electrode_initial_scaled_spin = [0.32,]*NumNiRight

# Define electrode parameters
left_electrode_parameters = ElectrodeParameters(
   brillouin_zone_integration_parameters = brillouinZoneIntegrationParameters(scf_kpoints),
   electron_density_parameters = electronDensityParameters(
      mesh_cutoff = mesh_cutoff,
      initial_scaled_spin = left_electrode_initial_scaled_spin
      ),
   iteration_mixing_parameters = iterationMixingParameters(
      diagonal_mixing_parameter = diagonal_mixing_parameter,
      history_steps = history_steps
      ),
   iteration_control_parameters = iterationControlParameters(
      tolerance = tolerance,
      max_steps = max_steps
      ),
   eigenstate_occupation_parameters = eigenstateOccupationParameters(
      temperature = temperature
      )
   )
   
right_electrode_parameters = ElectrodeParameters(                                         
   brillouin_zone_integration_parameters = brillouinZoneIntegrationParameters(scf_kpoints),
   electron_density_parameters = electronDensityParameters(                               
      mesh_cutoff = mesh_cutoff,                                                             
      initial_scaled_spin = right_electrode_initial_scaled_spin                               
      ),                                                                                     
   iteration_mixing_parameters = iterationMixingParameters(                               
      diagonal_mixing_parameter = diagonal_mixing_parameter,                                 
      history_steps = history_steps                                                           
      ),                                                                                     
   iteration_control_parameters = iterationControlParameters(                             
      tolerance = tolerance,                                                                 
      max_steps = max_steps                                                                   
      ),                                                                                     
   eigenstate_occupation_parameters = eigenstateOccupationParameters(                     
      temperature = temperature                                                               
   )                                                                                       
)

# Define two-probe method                                                                                                                                           
twoprobe_method = TwoProbeMethod(                                             
   electrode_parameters = (left_electrode_parameters,right_electrode_parameters),
   exchange_correlation_type = xc,                                               
   basis_set_parameters = basis_set_parameters,                                 
   electron_density_parameters = electronDensityParameters(                     
      mesh_cutoff = mesh_cutoff,                                                   
      initial_scaled_spin = central_region_initial_scaled_spin                     
      ),                                                                           
   iteration_mixing_parameters = iterationMixingParameters(                     
      diagonal_mixing_parameter = diagonal_mixing_parameter,                       
      history_steps = history_steps                                                 
      ),                                                                           
   iteration_control_parameters = iterationControlParameters(                   
      tolerance = tolerance,                                                       
      max_steps = max_steps                                                         
      ),                                                                           
   energy_contour_integral_parameters = energyContourIntegralParameters(         
      integral_lower_bound = integral_lower_bound,                                 
      circle_points = circle_points, 
      real_axis_point_density = real_axis_point_density
      ),                                                                           
   algorithm_parameters = twoProbeAlgorithmParameters(                           
#      initial_density_type = InitialDensityType.NeutralAtom                         
      )   
   ) 
   
import ATK                                                                                                                                   
ATK.setVerbosityLevel(verbosity)                               
ATK.setCheckpointFilename(checkpoint_filename)                 
self_consistent_calculation = executeSelfConsistentCalculation(
   twoprobe_configuration,                                       
   twoprobe_method                                               
   )                                                             

Thanks for any suggestions!


Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5575
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
If you look at the system in the Nanoscope, there is a huge 6 Å gap between the Ni and the Co. Probably not what you want?

Offline yqxie

  • Regular QuantumATK user
  • **
  • Posts: 15
  • Country: cn
  • Reputation: 0
    • View Profile
Yes, I set a gap between the Ni and Co, because I want to calculate the Transmission for different gaps between the Ni and Co.  Thanks

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5575
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
Try a smaller one. At 6 Å you will for sure have zero transmission.