Recent site activity

How-to guides‎ > ‎

Symmetrize a set of SPOs

Given degenerate orbitals in DFT we must rotate them to belong to a specific symmetry for some calculations. This tool allows you to perform these rotations.

Sample Code

  • "orbitalutility" is this tool.
  • "projection" is the determination of the symmetries of the orbitals.
  • "rotate" produces the rotation matrix.
  • "symmetryclass" provides the symmetry group and symmetry operators. This illustration is D2V with the y-axis as principle axis.
    1. "charactertable" is orgainized by classes. should have as many elements as there are symmetry operators.
    2. "symmetries" provides the symmetry operators. class refers to which class in the charactertable its characters belong to.
  • "projectedorbitals" designates the orbitals to classify and rotate between. They are numbered according to their energy eigenvalues. Rotate one group of degenerate orbitals at a time.
  • "representations" designates which representations to rotate between. Your orbitals should belong to these representations to begin with.
  • "grid" grid to evaluate the projectors.
<qmc method="test">
<parameter name="orbitalutility">yes</parameter>
<parameter name="projection">yes</parameter>
<parameter name="rotate">yes</parameter>
<symmetryclass classes="4" symmetries="4">
  <charactertable>
  <class> 1  1  1  1 </class>
  <class> 1  1 -1 -1 </class>
  <class> 1 -1  1 -1 </class>
  <class> 1 -1 -1  1 </class>
  </charactertable>
  <symmetries>
  <operator class="1">
  1 0 0
  0 1 0
  0 0 1
  </operator>
  <operator class="2">
  -1 0 0
  0 1 0
  0 0 -1
  </operator>
  <operator class="3">
  0 0 1
  0 1 0
  1 0 0
  </operator>
  <operator class="4">
  0 0 -1
  0 1 0
  -1 0 0
  </operator>
  </symmetries>
</symmetryclass>
<orbitals>254 255 256</orbitals>
<representations>1 3 4</representations>
<grid> 15 15 15</grid>
</qmc>

Sample Output

Projection Matrix is the result of the projector: rows are orbitals, columns are representations. Coefficient matrix is the trial wave function coefficients expanded in your basis. Rotation Matrix provides the rotations necessary to build the pure basis out of the mixed ones.

 Total of 1 orbitals.
 Projected orbitals: 254 255 256
Printing Projection Matrix
0.4606738632 0.0000000000 0.2294112354 0.3099148948
0.0001347631 0.0000000000 0.5639315049 0.4359337407
0.5391911215 0.0000000000 0.2066553569 0.2541535172

Printing Coefficient Matrix
0.6787295951 0.0000000000 0.4789689295 0.5567000043
0.0116087528 0.0000000000 0.7509537302 0.6602527854
0.7342963445 0.0000000000 0.4545936173 0.5041364073

Printing Rotation Matrix
-0.5566989385 -0.6602522971 0.5041360888
0.4789701344 -0.7509542012 -0.4545936626
0.6787296238 -0.0116056792 0.7342965382

Performing rotation in qmcpack

Add the rotationmatrix and rotatedorbitals lines in the determinantset. After running it once remove the lines. The block permanently overwrites the wave function file. In this case the new "SmallRot.pwscf.h5" will have the rotated orbitals.

<determinantset type="bspline" href="SmallRot.pwscf.h5" sort="1" tilematrix="4 0 0 0 4 0 0 0 4" version="0.10" source="ion0">
<basisset ecut="7.000000000000000E+001">
<grid dir="0" npts="45" closed="no"/>
<grid dir="1" npts="45" closed="no"/>
<grid dir="2" npts="45" closed="no"/>
</basisset>
<rotationmatrix>
-0.5566989385 -0.6602522971 0.5041360888
0.4789701344 -0.7509542012 -0.4545936626
0.6787296238 -0.0116056792 0.7342965382
</rotationmatrix>
<rotatedorbitals>
254 255 256
</rotatedorbitals>
<h5tag name="twistIndex">
0
</h5tag>
<h5tag name="twistAngle">
0.000000000000000 0.000000000000000 0.000000000000000
</h5tag>
<slaterdeterminant>
<determinant id="updet" size="256">
<!-- <occupation mode="excited" spindataset="0">
-256 +257
</occupation>-->
<occupation mode="ground" spindataset="0">
</occupation>
</determinant>
<determinant id="downdet" size="256">
<occupation mode="ground" spindataset="0">
</occupation>
</determinant>
</slaterdeterminant>
</determinantset>

Results

A backup of the original wave function h5 file is made if a similarly named file doesn't exist. It is named {original}_bkup If the rotation worked correctly then you should get a result such as the following:

 Rotating between: 254 255 256                                                                                                                                                      
 
Using the following rotation                                                                                                                                                      
-0.5566989385 -0.6602522971 0.5041360888                                                                                                                                            
0.4789701344 -0.7509542012 -0.4545936626                                                                                                                                            
0.6787296238 -0.0116056792 0.7342965382                                                                                                                                            
 destination file already exists
, backup completed                                                                                                                                  
 
Rotating state:  ti=  0  bi=  1 energy= 0.35534 k=( 0.0000,  0.0000,  0.0000) rank=0                                                                                              
 
Rotating state:  ti=  0  bi=  2 energy= 0.35534 k=( 0.0000,  0.0000,  0.0000) rank=0                                                                                              
 
Rotating state:  ti=  0  bi=  3 energy= 0.35534 k=( 0.0000,  0.0000,  0.0000) rank=0

then

 Total of 1 orbitals.
 Projected orbitals: 254 255 256
Printing Projection Matrix
0.0000000000 0.0000000000 0.0000000000 1.0000000045
0.0000000000 0.0000000000 0.9999999977 0.0000000000
0.9999999974 0.0000000000 0.0000000000 0.0000000000

Printing Coefficient Matrix
0.0000000000 0.0000000000 0.0000000000 1.0000000022
0.0000000000 0.0000000000 0.9999999988 0.0000000000
0.9999999987 0.0000000000 0.0000000000 0.0000000000

Printing Rotation Matrix
-0.9999999990 -0.0000415132 0.0000156967
0.0000415130 -0.9999999990 -0.0000169926
0.0000156974 -0.0000169919 0.9999999997
Comments