[Pw_forum] Coordinate transorms: Crystal to Cartesian and back

Gabriele Sclauzero sclauzer at sissa.it
Fri May 22 12:06:26 CEST 2009



Kostyantyn Borysenko wrote:
> Hi everyone,
> 
> I'm having problems with the math behind some subroutines. I am talking 
> about PH/trntnsc.f90 and PW/cryst_to_car.f90.
> 
> These subroutines are supposed to convert vectors (cryst_to_car.f90) or 
> matrices (trntnsc.f90) from crystal coordinates to Cartesian (flag=1) or 
> vice versa (flag=-1). And it seems like a very straightforward task 
> - just a little bit of vector algebra. But when I derive these 
> transformations myself they don't check out. Here is what I've got.
> 
>  
> 
> By definition of reciprocal vectors we have the following property for 
> dot-product:
> 
> (a(i),b(j))= 2*pi*delta(i,j),                (1a)
> 
> where a(i) - lattice vectors, b(j) - reciprocal lattice vectors. In QE 
> these vectors are stored in matrices at(i,j) and bg(i,j) respectively. 
> Matrix elements of at are in units a_0 and matrix elements of bg are in 
> units (2*pi/a_0). So the condition (1a) can be rewritten as follows:
> 
>  SUM(k){at(k,i)*bg(k,j)} = delta(i,j).                (1b)
> 
> In matrix form it can be represented as
> 
> B' * A = I, or B' = inv(A),                    (2)
> 
> where B' is a transposed matrix B and inv(A) is an inversed matrix A, 
> and I is the identity matrix. I checked these matrices for the case of 
> graphene and property (2) indeed holds true.
> 
>  
> 
> Next, it's easy to show that transformation of an arbitrary vector 
> v from crystal to Cartesian coordinates is described by the matrix equation:
> 
> v_cart = A*v_cryst,                (3a)
> 
> where A is a matrix at(i,j) mentioned above, which contains lattice 
> vector components. If you multiply equation (3a) from the left by inv(A) 
> and use the property inv(A)=B' (see eq. (2)) you will get the reverse 
> transformation:
> 
> v_cryst = B' * v_cart                (4a)
> 
>  
> 
> Obviously, for an arbitrary matrix W the transformation equations will be
> 
> W_cart = A' *W_cryst * A                (3b)
> 
> W_cryst = B * W_cart * B'                (4b)

Are you sure? If I understand correctly the meaning of "matrix in cartesian/crystal 
coordinates" (which for me means that v_cart'*W_cart*v_cart = v_crys'*W_crys*v_crys),
then, following your notation
    v_cart = A*v_cryst
so that
    v_cart' = v_cryst' * A'

It follows

v_cart' * W_cart * v_cart = v_crys' * A' * W_cart * A* v_crys

Then

W_crys =  A' * W_cart * A

I suppose that also (4b) is not correct...


GS

> 
>  
> 
> But that's not what I see in the code. In case of subroutine trntnsc.f90 
> matrices A and B switch places in (3b) and (4b). And in cryst_to_car.f90 
> everything seems fine but only if you use at(i,j) as a transformation 
> matrix when flag=1 and bg(i,j) if flag=-1. However, when it's called in 
> subroutine lint.f90 it looks like this:
> 
>  
> 
> call cryst_to_cart (nkh,xp,at,-1)
> 
>  
> 
> Like I said, I think the correct result can be obtained only in two cases:
> 
> call lint(nkh,xp,at,+1)   - Crystal -> Cartesian
> 
> call lint(nkh,xp,bg,-1)   - Cartesian -> Crystal
> 
>  
> 
> Maybe I missed something but this seems like a pretty simple problem 
> from vector algebra. Any ideas?
> 
>  
> 
>  
> 
> Best regards,
> 
>  
> 
> Kostyantyn Borysenko
> 
> Department of Electrical and Computer Engineering 
> 
> North Carolina State University
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Pw_forum mailing list
> Pw_forum at pwscf.org
> http://www.democritos.it/mailman/listinfo/pw_forum

-- 


o ------------------------------------------------ o
| Gabriele Sclauzero, PhD Student                  |
| c/o:   SISSA & CNR-INFM Democritos,              |
|        via Beirut 2-4, 34014 Trieste (Italy)     |
| email: sclauzer at sissa.it                         |
| phone: +39 040 3787 511                          |
| skype: gurlonotturno                             |
o ------------------------------------------------ o



More information about the users mailing list