Dear Peter
I had to modified a little the angle.f in SRC_qtl to have it working correctly 
for triclinic cases.
It seems to work now for oriented PDOS (the only thing I have tested).
Best regards
Florent

-- 
  -------------------------------------------------------------------------
| Florent BOUCHER                    |                                    |
| Institut des Mat?riaux Jean Rouxel | Mailto:Florent.Boucher at cnrs-imn.fr |
| 2, rue de la Houssini?re           | Phone: (33) 2 40 37 39 24          |
| BP 32229                           | Fax:   (33) 2 40 37 39 95          |
| 44322 NANTES CEDEX 3 (FRANCE)      | http://www.cnrs-imn.fr             |
  -------------------------------------------------------------------------

-------------- next part --------------
      SUBROUTINE ANGLE(XMS,THETA,PHI)
        USE param
        USE struct
        USE case
      IMPLICIT REAL*8 (A-H,O-Z)
!*******************************************************************
      LOGICAL          ORTHO
!
      COMMON/ORTH/     ORTHO
      CHARACTER*10     ANA
      DIMENSION XMS(3)

        PI=ACOS(-1.D0)
!---------------------------------------------------------------------
        IF (ORTHO) THEN
        XA=AA*XMS(1)
        XB=BB*XMS(2)
        XC=CC*XMS(3)
        GOTO 200
        END IF

        write(6,*)'LATTICE:',lattic     
      IF(LATTIC(1:1).EQ.'H') THEN
        XA=XMS(1)*AA*SQRT(3.D0)/2.d0
        XB=AA*(XMS(2)-XMS(1)/2.d0)
        XC=CC*XMS(3)

      ELSE IF(LATTIC(1:1).EQ.'R') THEN
        XA=(XMS(1)+XMS(2)-2.d0*XMS(3))*AA/(2.d0*SQRT(3.D0))
        XB=(-XMS(1)+XMS(2))*AA/2.d0
        XC=(XMS(1)+XMS(2)+XMS(3))*CC/3.d0

      ELSE 
        IF 
((ABS(ALPHA(3)-PI/2.d0).GT.1.D-4).and.(ABS(ALPHA(2)-PI/2.d0).LT.1.D-4).and.(ABS(ALPHA(1)-PI/2.d0).LT.1.D-4))
 THEN
        XA=XMS(1)*AA*SIN(ALPHA(3))
        XB=XMS(1)*AA*COS(ALPHA(3))+BB*XMS(2)
        XC=CC*XMS(3)
        ELSE IF 
((ABS(ALPHA(2)-PI/2.d0).GT.1.D-4).and.(ABS(ALPHA(1)-PI/2.d0).LT.1.D-4).and.(ABS(ALPHA(2)-PI/2.d0).LT.1.D-4))
 THEN
        XA=XMS(1)*AA*SIN(ALPHA(2))
        XB=XMS(2)*BB
        XC=XMS(1)*AA*COS(ALPHA(2))+CC*XMS(3)
        ELSE
!       WRITE(6,*)'EXCHANGE THE LATTICE VECTORS, ALPHA(1) MUST BE PI/2'
!        END IF

        TT=ABS((ALPHA(1)-PI/2.d0)*(ALPHA(2)-PI/2.d0)*(ALPHA(3)-PI/2.d0))
!       IF (TT.GT.1.D-3) STOP 'TRICLINIC NOT IMPLEMENTED'
        write(6,*) ' Triclinic implemented, but never tested'
        
cosg1=(cos(ALPHA(3))-cos(alpha(1))*cos(ALPHA(2)))/sin(alpha(1))/sin(alpha(2))
        gamma0=acos(cosg1)
!      from lapw5
!      BR2(1,1)=A(1)*1.0d0*sin(gamma0)*sin(beta)
!      BR2(1,2)=A(1)*1.0d0*cos(gamma0)*sin(beta)
!      BR2(1,3)=A(1)*1.0d0*cos(beta)    
!      BR2(2,1)=0.0d0              
!      BR2(2,2)=A(2)*1.0d0*sin(alpha)
!      BR2(2,3)=A(2)*1.0d0*cos(alpha)
!      BR2(3,1)=0.0d0              
!      BR2(3,2)=0.0d0              
!      BR2(3,3)=A(3)*1.0d0              
        XA=XMS(1)*sin(gamma0)*sin(alpha(2))*AA
        XB=XMS(1)*cos(gamma0)*sin(alpha(2))*AA + XMS(2)*sin(alpha(1))*BB
        XC=XMS(1)*cos(alpha(2))*AA + XMS(2)*cos(alpha(1))*BB + XMS(3)*CC
        END IF

      ENDIF

 200    CONTINUE  
        XX=SQRT(XA**2+XB**2+XC**2)
        THETA=ACOS(XC/XX)
        XX=SQRT(XA**2+XB**2)
        IF (XX.LT.1.D-5) THEN
        PHI=0.D0
        ELSE
        PHI=ACOS(XA/XX)
        IF (ABS(XB).GT.1.D-5) PHI=PHI*XB/ABS(XB)
        END IF

        END 
        



Reply via email to