hi everyone,
i am having some trouble using the targeted eigensolver function in
mpb. it works fine for calculating defect states in 2D crystals, and
for finding the normal bands of bulk 3D crystals.
however when i try finding a defect state in a 3D crystal the
algorithm does not converge. (for example, i'll paste in what i'm
trying to do - find propagating modes along a linear defect in an FCC
inverse opal - trying a 3x3x1 supercell with a missing sphere in the
middle, which if i have my geometry right, should be a line defect
along one of the gamma-K directions.)
also, i have the same nonconverging behavior when i try to calculate
defect states in a 2D crystal, but use the (run) command instead of
(run-te) or (run-tm).
i recognize that the targeted eigensolver should take more iterations
but this seems like i must be doing something wrong. there is some
brief mention in the MPB manual about finding a preconditioner matrix
to improve the convergence, but i don't know how to go about doing this.
any suggestions?
thanks-
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
nate lipkowitz
416 823 8057
[EMAIL PROTECTED]
(set! num-bands 2)
(set! target-freq 0.73)
(set! default-material (make dielectric (epsilon 15)))
(set! geometry-lattice
(make lattice
(basis1 0 1 1)
(basis2 1 0 1)
(basis3 1 1 0)
(basis-size (sqrt 0.5) (sqrt 0.5) (sqrt 0.5))
(size 3 1 3)
)
)
(set! geometry
(list
(make sphere
(center 0 0 0)
(radius (/ (sqrt 0.5) 2))
(material
(make dielectric
(epsilon 1.0)
)
)
)
)
)
(set! geometry (geometric-objects-lattice-duplicates geometry))
(set! geometry
(append geometry
(list
(make sphere
(center 0 0 0)
(radius (/ (sqrt 0.5) 2))
(material
(make dielectric
(epsilon 15)
)
)
)
)
)
)
; brillouin zone points
(set! k-points
(list
; (vector3 0 0.5 0.5) ; X
; (vector3 0 0.625 0.375) ; U
; (vector3 0 0.5 0) ; L
(vector3 0 0 0) ; gamma
; (vector3 0 0.5 0.5) ; X
; (vector3 0.25 0.75 0.5) ; W
(vector3 0.375 0.75 0.375) ; K
)
)
(set! k-points
(interpolate 9 k-points)
)
(set! resolution 8)
(set! mesh-size 5)
(run)
-------
output:
init-params: initializing eigensolver data
Computing 2 bands with 1.000000e-07 tolerance.
Target frequency is 0.73
Working in 3 dimensions.
Grid size is 24 x 8 x 24.
Solving for 2 bands at a time.
Creating Maxwell data...
Allocating fields...
Mesh size is 5.
Lattice vectors:
(0, 1.5, 1.5)
(0.5, 0, 0.5)
(1.5, 1.5, 0)
Cell volume = 2.25
Reciprocal lattice vectors (/ 2 pi):
(-0.333333, 0.333333, 0.333333)
(1, -1, 1)
(0.333333, 0.333333, -0.333333)
Geometric objects:
sphere, center = (1,0,1)
radius 0.353553
dielectric constant epsilon = 1
sphere, center = (0,0,1)
radius 0.353553
dielectric constant epsilon = 1
sphere, center = (-1,0,1)
radius 0.353553
dielectric constant epsilon = 1
sphere, center = (1,0,0)
radius 0.353553
dielectric constant epsilon = 1
sphere, center = (0,0,0)
radius 0.353553
dielectric constant epsilon = 1
sphere, center = (-1,0,0)
radius 0.353553
dielectric constant epsilon = 1
sphere, center = (1,0,-1)
radius 0.353553
dielectric constant epsilon = 1
sphere, center = (0,0,-1)
radius 0.353553
dielectric constant epsilon = 1
sphere, center = (-1,0,-1)
radius 0.353553
dielectric constant epsilon = 1
sphere, center = (0,0,0)
radius 0.353553
dielectric constant epsilon = 15
Geometric object tree has depth 6 and 272 object nodes (vs. 10 actual objects)
Initializing dielectric function...
11 k-points:
(0,0,0)
(0.0375,0.075,0.0375)
(0.075,0.15,0.075)
(0.1125,0.225,0.1125)
(0.15,0.3,0.15)
(0.1875,0.375,0.1875)
(0.225,0.45,0.225)
(0.2625,0.525,0.2625)
(0.3,0.6,0.3)
(0.3375,0.675,0.3375)
(0.375,0.75,0.375)
Solving for band polarization: .
Initializing fields to random numbers...
elapsed time for initialization: 4 seconds.
epsilon: 1-15, mean 5.74632, harm. mean 2.02253, 67.1875% > 1, 33.9023% "fill"
Outputting epsilon...
solve_kpoint (0,0,0):
freqs:, k index, k1, k2, k3, kmag/2pi, band 1, band 2
Solving for bands 1 to 2...
iteration 28: trace = 0.1548795384385591 (3.86079% change)
iteration 57: trace = 0.05883645424232664 (2.46873% change)
iteration 85: trace = 0.03441915784573256 (2.03187% change)
iteration 113: trace = 0.02150854117270316 (1.92668% change)
iteration 141: trace = 0.01345916885342008 (0.622871% change)
iteration 170: trace = 0.009201346628497069 (1.46198% change)
iteration 199: trace = 0.005522995675489399 (2.58212% change)
iteration 228: trace = 0.004269816119553795 (0.881665% change)
iteration 256: trace = 0.003591165796916016 (0.614271% change)
iteration 284: trace = 0.002900156474400155 (0.756668% change)
iteration 312: trace = 0.002448776265459649 (0.461103% change)
iteration 341: trace = 0.002001421145366178 (1.45979% change)
iteration 370: trace = 0.001590125132486873 (1.34993% change)
iteration 399: trace = 0.001394052735480295 (0.469443% change)
iteration 428: trace = 0.001230792183431093 (0.627224% change)
iteration 457: trace = 0.001121632797849241 (0.276931% change)
iteration 486: trace = 0.0010071795380814 (0.386491% change)
iteration 515: trace = 0.0008838793662232222 (0.392718% change)
iteration 544: trace = 0.0008302484393287368 (0.364576% change)
iteration 573: trace = 0.0007716825355627262 (0.279634% change)
...
iteration 9782: trace = 4.691998231178338e-05 (0.00256374% change)
iteration 9811: trace = 4.687245768656516e-05 (0.00193734% change)
iteration 9841: trace = 4.682087616548339e-05 (0.00256911% change)
iteration 9870: trace = 4.675975766325623e-05 (0.00151176% change)
iteration 9899: trace = 4.669423304276687e-05 (0.00961676% change)
iteration 9929: trace = 4.664621970394373e-05 (0.0033039% change)
iteration 9958: trace = 4.659813350390165e-05 (0.00299823% change)
iteration 9987: trace = 4.654072589083436e-05 (0.00864756% change)
CHECK failure on line 627 of eigensolver.c: failure to converge after
10000 iterations
_______________________________________________
mpb-discuss mailing list
[email protected]
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/mpb-discuss