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

Reply via email to