LCOV - code coverage report
Current view: top level - wannier - wann_plot.F (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 149 0.0 %
Date: 2019-09-08 04:53:50 Functions: 0 1 0.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------
       2             : ! Copyright (c) 2016 Peter Grünberg Institut, Forschungszentrum Jülich, Germany
       3             : ! This file is part of FLEUR and available as free software under the conditions
       4             : ! of the MIT license as expressed in the LICENSE file in more detail.
       5             : !--------------------------------------------------------------------------------
       6             : 
       7             :       MODULE m_wann_plot
       8             :       use m_juDFT
       9             : !     +++++++++++++++++++++++++++++++++++++++++++++++++
      10             : !     plots the periodic part of the wavefunction at the given k-point
      11             : !       and specified bands. Needed for real-space
      12             : !       visualization of the Wannier Functions
      13             : !     
      14             : !     if twodim = .false. a 3-D plot with nplot layers in z-direction
      15             : !     is constructed; the 3x3 matrix gives the 3 vectors of the cell ..
      16             : !     .gustav
      17             : !
      18             : !    Changed the input/output for easier use. 
      19             : !    This subroutine uses the file plot_inp for input. 
      20             : !       based on the routine by:  Juelich, 21.1.06 D.Wortmann
      21             : !            Y.Mokrousov 16.8.6 Hamburg
      22             : !
      23             : !    First of all, if xsf then the files are written in the following
      24             : !       format: k.bnd.real.jsp.xsf and k.bnd.imag.jsp.xsf
      25             : !               for reading with XCrysDen,where 
      26             : !               k is the kpoint, bnd is the band index
      27             : !               imag/real stand for the real and imaginary parts of wavefn
      28             : !               jsp stands for spin, for all the k-points and bands
      29             : !    If the xsf is false, than the files are written in the
      30             : !       format suitable for the Vanderbilt's code:
      31             : !       UNK0000k.jsp, having all the bands in this file, real and imag
      32             : !
      33             : !    Then, if xsf=true, then:
      34             : ! 
      35             : !    If slice=T, the kk specifies the k-point and the nnne
      36             : !       specifies the number of the band, the wavefunction is
      37             : !       written to the file kk.nnne.real.jsp.xsf and kk.nnne.imag.jsp.xsf
      38             : !     +++++++++++++++++++++++++++++++++++++++++++++++++
      39             :       CONTAINS
      40           0 :       SUBROUTINE wann_plot(
      41             :      >     DIMENSION,oneD,vacuum,stars,cell,atoms,
      42             :      >     nv2d,jspin,odi,ods,n3d,nmzxyd,n2d,ntypsd,
      43           0 :      >     ntype,lmaxd,jmtd,ntypd,natd,nmzd,neq,nq3,nvac,
      44             :      >     nmz,nmzxy,nq2,nop,nop2,volint,film,slice,symor,
      45           0 :      >     invs,invs2,z1,delz,ngopr,ntypsy,jri,pos,zatom,
      46           0 :      >     lmax,mrot,tau,rmsh,invtab,amat,bmat,bbmat,ikpt,nnne,kk,
      47           0 :      >     nvd,nlod,llod,nv,lmd,bkpt,omtil,nlo,llo,k1,k2,k3,evac,vz,
      48           0 :      >     nslibd,nbasfcn,neigd,ff,gg,flo,acof,bcof,ccof,zMat,
      49           0 :      >     k1d,k2d,k3d,ig,ig2,sk2,phi2,l_noco,l_ss,qss,addnoco,
      50             :      >     index_kq,l_sgwf)
      51             : !    *****************************************************
      52             :       USE m_constants
      53             :       USE m_types
      54             :       USE m_wann_real
      55             :       USE m_xsf_io
      56             :       USE m_wann_plot_vac
      57             :       USE m_wann_2dvacabcof
      58             :       USE m_wann_plot_od_vac
      59             :       USE m_wann_1dvacabcof
      60             : 
      61             :       IMPLICIT NONE
      62             : 
      63             :       TYPE(t_dimension),INTENT(IN)   :: DIMENSION
      64             :       TYPE(t_oneD),INTENT(IN)        :: oneD
      65             :       TYPE(t_vacuum),INTENT(IN)      :: vacuum
      66             :       TYPE(t_stars),INTENT(IN)       :: stars
      67             :       TYPE(t_cell),INTENT(IN)        :: cell
      68             :       TYPE(t_atoms),INTENT(IN)       :: atoms
      69             :       TYPE(t_mat),INTENT(IN)         :: zMat
      70             : 
      71             : !     .. Scalar Arguments ..
      72             :       INTEGER, INTENT (IN) :: n3d,nmzxyd,n2d,ntypsd,ikpt,jspin,nv2d
      73             :       INTEGER, INTENT (IN) :: lmaxd,jmtd,ntypd,natd,nmzd
      74             :       INTEGER, INTENT (IN) :: nq3,nvac,nmz,nmzxy,nq2,nop,nop2,ntype
      75             :       INTEGER, INTENT (IN) :: nvd,nv,lmd,llod,nlod
      76             :       INTEGER, INTENT (IN) :: nslibd,nbasfcn,neigd
      77             :       INTEGER, INTENT (IN) :: nnne,kk,addnoco,index_kq
      78             :       LOGICAL, INTENT (IN) :: symor,invs,slice,invs2,film
      79             :       LOGICAL, INTENT (IN) :: l_noco,l_ss,l_sgwf
      80             :       REAL,    INTENT (IN) :: z1,delz,volint,omtil
      81             :       REAL,    INTENT (IN) :: qss(3)
      82             :       real,    intent (in) :: vz(nmzd,2)
      83             : !     ..
      84             : !     .. Array Arguments ..
      85             :       INTEGER, INTENT (IN) :: ngopr(natd),ntypsy(natd),lmax(ntypd)
      86             :       INTEGER, INTENT (IN) :: jri(ntypd),neq(ntypd),mrot(3,3,nop)
      87             :       INTEGER, INTENT (IN) :: invtab(nop),nlo(ntypd),llo(nlod,ntypd)
      88             :       INTEGER, INTENT (IN) :: k1(nvd),k2(nvd),k3(nvd)
      89             :       REAL,    INTENT (IN) :: zatom(:),amat(3,3),bmat(3,3),pos(3,natd)
      90             :       REAL,    INTENT (IN) :: rmsh(jmtd,ntypd),tau(3,nop),bkpt(3)
      91             :       REAL,    INTENT (IN) :: ff(ntypd,jmtd,2,0:lmaxd),bbmat(3,3)
      92             :       REAL,    INTENT (IN) :: gg(ntypd,jmtd,2,0:lmaxd),evac(2)
      93             :       REAL,    INTENT (IN) :: flo(ntypd,jmtd,2,nlod)
      94             :       COMPLEX, INTENT (IN) :: ccof(-llod:llod,nslibd,nlod,natd)
      95             :       COMPLEX, INTENT (IN) :: acof(nslibd,0:lmd,natd)
      96             :       COMPLEX, INTENT (IN) :: bcof(nslibd,0:lmd,natd)
      97             :       integer, intent (in) :: k1d,k2d,k3d,ig2(n3d)
      98             :       integer, intent (in) :: ig(-k1d:k1d,-k2d:k2d,-k3d:k3d)
      99             :       real,    intent (in) :: sk2(n2d),phi2(n2d)
     100             :       TYPE (od_inp), INTENT (IN) :: odi
     101             :       TYPE (od_sym), INTENT (IN) :: ods
     102             : 
     103             : !     ..
     104             : !     .. Local Scalars ..
     105             :       integer n2,k,j,l
     106             :       REAL          :: s
     107             :       COMPLEX       :: xdnout
     108             :       INTEGER       :: i,i1,i2,i3,ii3,ix,iy,iz,na,nplo,nbn
     109             :       INTEGER       :: nbmin,nbmax,n
     110             :       INTEGER       :: nplot,nq,nt,jm,iter,ii1,ii2
     111             :       CHARACTER*8   :: dop,iop
     112             :       LOGICAL       :: twodim
     113             : !     ..
     114             : !     .. Local Arrays ..
     115             :       REAL    :: pt(3),vec1(3),vec2(3),vec3(3),zero(3)
     116             :       INTEGER :: grid(3)
     117             :       LOGICAL :: cartesian,xsf
     118             :       REAL    :: rhocc(jmtd)
     119             :       REAL    :: point(3),post(3,natd)
     120             :       CHARACTER(len=30):: filename
     121             :       CHARACTER(len=20):: name1,name2,name3
     122             :       CHARACTER(len=10):: vandername
     123             :       CHARACTER*8      :: name(10)
     124             : c     ..basis wavefunctions in the vacuum
     125           0 :       complex, allocatable :: ac(:,:,:),bc(:,:,:)
     126           0 :       complex, allocatable :: ac_1(:,:,:),bc_1(:,:,:)
     127           0 :       real,    allocatable :: u(:,:,:),ue(:,:,:)
     128           0 :       real,    allocatable :: u_1(:,:,:),ue_1(:,:,:)
     129             : 
     130             :       integer ik,nv2,ivac,jvac
     131             :       complex factor
     132             :       real fas
     133             : 
     134             : 
     135             :       NAMELIST /plot/twodim,cartesian,vec1,vec2,vec3,grid,zero,filename
     136             :       
     137             :       intrinsic real,aimag,conjg
     138             : c      external dotirp
     139             : c      real dotirp  !module now
     140           0 :       IF (slice) THEN
     141           0 :         nbmin = nnne
     142           0 :         nbmax = nnne
     143             :       ELSE
     144             :         nbmin = 1
     145             :         nbmax = nslibd
     146             :       ENDIF
     147             : 
     148             :       !write(*,*)'in wann_plot'
     149             :       !write(*,*)'jspin:',jspin
     150             :       !write(*,*)'addnoco:',addnoco
     151             :       !write(*,*)'l_noco,l_ss: ',l_noco,l_ss
     152             :       !write(*,*)'qss:',qss
     153             : 
     154           0 :       INQUIRE(file ="plot_inp",exist= twodim)
     155           0 :       IF (.NOT.twodim) THEN !no input file exists, create a template and
     156             :                             !exit
     157           0 :          OPEN(20,file ="plot_inp")
     158           0 :          WRITE(20,'(i2,a5,l1)') 1,",xsf=",.false.
     159             : c         WRITE(20,*) "&PLOT twodim=t,cartesian=t"
     160             : c         WRITE(20,*) "  vec1(1)=10.0 vec2(2)=10.0"
     161             : c         WRITE(20,*) "  filename='plot1' /"
     162           0 :          WRITE(20,*) "&PLOT twodim=f,cartesian=f"
     163           0 :          WRITE(20,*) "  vec1(1)=1.0 vec1(2)=0.0 vec1(3)=0.0 "
     164           0 :          WRITE(20,*) "  vec2(1)=0.0 vec2(2)=1.0 vec2(3)=0.0 "
     165           0 :          WRITE(20,*) "  vec3(1)=0.0 vec3(2)=0.0 vec3(3)=1.0 "
     166           0 :          WRITE(20,*) "  grid(1)=30  grid(2)=30  grid(3)=30  "
     167           0 :          WRITE(20,*) "  zero(1)=0.0 zero(2)=0.0 zero(3)=0.0 "
     168           0 :          WRITE(20,*) "  filename ='plot2' /"
     169           0 :          CLOSE(20)
     170           0 :          WRITE(*,*) "No plot_inp file found. Created a template"
     171             :          CALL juDFT_error("Missing input for plot; modify plot_inp"
     172           0 :      +        ,calledby ="wann_plot")
     173             :       ENDIF
     174             : 
     175             : c make preparations for plotting in vacuum
     176             : 
     177           0 :       if(film.and..not.odi%d1)then
     178             :          allocate ( ac(nv2d,nslibd,2),bc(nv2d,nslibd,2),
     179           0 :      +         u(nmzd,nv2d,nvac),ue(nmzd,nv2d,nvac))
     180             :          call wann_2dvacabcof(
     181             :      >         nv2d,nslibd,nvac,nmzd,nmz,omtil,vz,nv,bkpt,z1,
     182             :      >         nvd,k1,k2,k3,evac,bbmat,delz,bmat,nbasfcn,neigd,zMat,
     183           0 :      <         ac,bc,u,ue,addnoco,l_ss,qss,jspin)
     184             :       endif
     185             : 
     186           0 :       if (odi%d1)then
     187             :          allocate ( ac_1(nv2d,-odi%mb:odi%mb,nslibd),
     188             :      &              bc_1(nv2d,-odi%mb:odi%mb,nslibd),
     189             :      &              u_1(nmzd,nv2d,-odi%mb:odi%mb),
     190           0 :      &              ue_1(nmzd,nv2d,-odi%mb:odi%mb) )
     191             :          call wann_1dvacabcof(
     192             :      >         DIMENSION,oneD,vacuum,stars,cell,
     193             :      >         nv2d,nslibd,nmzd,nmz,omtil,vz(:,:),
     194             :      >         nv,bkpt,z1,odi,ods,
     195             :      >         nvd,k1,k2,k3,evac,
     196             :      >         bbmat,delz,bmat,nbasfcn,neigd,zMat,
     197             :      >         n2d,n3d,ig,nmzxy,nmzxyd,ig2,sk2,phi2,k1d,k2d,k3d,
     198           0 :      <         ac_1,bc_1,u_1,ue_1,addnoco,l_ss,qss,jspin)
     199             :       endif !preparations for vacuum   
     200             : 
     201             : 
     202             : 
     203             :       !<-- Open the plot_inp file for input
     204           0 :       OPEN (18,file='plot_inp')
     205           0 :       READ(18,'(i2,5x,l1)') nplot,xsf
     206             :       ! If xsf is specified we create an input file for xcrysden
     207           0 :       IF (nplot.ge.2) 
     208             :      &     CALL juDFT_error
     209             :      +     ("plots one by one, please, this is not charge density"
     210           0 :      +     ,calledby="wann_plot")
     211             :       !<-- Loop over all plots
     212           0 :       DO nplo=1,nplot
     213             :          ! the defaults
     214           0 :          twodim = .TRUE.;cartesian=.TRUE.;grid=(/100,100,100/)
     215           0 :          vec1 = (/0.,0.,0./);vec2=(/0.,0.,0./);vec3=(/0.,0.,0./)
     216           0 :          zero = (/0.,0.,0./);filename="default"
     217           0 :          READ(18,plot)
     218           0 :          IF (twodim.AND.ANY(grid(1:2)<1)) 
     219             :      +        CALL juDFT_error("Illegal grid size in plot",calledby
     220           0 :      +        ="wann_plot")
     221           0 :          IF (.NOT.twodim.AND.ANY(grid<1)) 
     222             :      +        CALL juDFT_error("Illegal grid size in plot",calledby
     223           0 :      +        ="wann_plot")
     224           0 :          IF (twodim) grid(3) = 1
     225             :          !calculate cartesian coordinates if needed
     226           0 :          IF (.NOT.cartesian) THEN
     227           0 :             vec1=matmul(amat,vec1)
     228           0 :             vec2=matmul(amat,vec2)
     229           0 :             vec3=matmul(amat,vec3)
     230           0 :             zero=matmul(amat,zero)
     231             :          ENDIF
     232             :          !Open the file
     233           0 :          IF (filename =="default") WRITE(filename,'(a,i2)') "plot",nplo
     234             : c..loop by the bands
     235           0 :          bands:DO nbn = nbmin,nbmax
     236             : 
     237           0 :          IF (xsf) THEN
     238           0 :             write (name1,22) ikpt,nbn,jspin
     239             :    22       format (i5.5,'.',i3.3,'.real.',i1,'.xsf')
     240           0 :             write (name2,23) ikpt,nbn,jspin
     241             :    23       format (i5.5,'.',i3.3,'.imag.',i1,'.xsf')
     242           0 :             write (name3,24) ikpt,nbn,jspin
     243             :    24       format (i5.5,'.',i3.3,'.absv.',i1,'.xsf')
     244           0 :             OPEN(55,file=name1)
     245           0 :             CALL xsf_WRITE_atoms(55,atoms,film,odi%d1,amat)
     246           0 :             OPEN(56,file=name2)
     247           0 :             CALL xsf_WRITE_atoms(56,atoms,film,odi%d1,amat)
     248           0 :             OPEN(57,file=name3)
     249           0 :             CALL xsf_WRITE_atoms(57,atoms,film,odi%d1,amat)
     250             :             CALL xsf_WRITE_header(55,twodim,filename,(vec1),
     251             :      &       (vec2),(vec3),zero
     252           0 :      $           ,grid)
     253             :             CALL xsf_WRITE_header(56,twodim,filename,(vec1),
     254             :      &       (vec2),(vec3),zero
     255           0 :      $           ,grid)
     256             :             CALL xsf_WRITE_header(57,twodim,filename,(vec1),
     257             :      &       (vec2),(vec3),zero
     258           0 :      $           ,grid)
     259             :          ELSE
     260           0 :             IF (nbn.EQ.nbmin) THEN
     261           0 :                WRITE (vandername,201) ikpt,jspin
     262           0 :                IF(l_noco) WRITE(vandername,202)ikpt,jspin
     263           0 :                IF(l_sgwf) WRITE(vandername,202)index_kq,jspin
     264             :   201          FORMAT ('UNK',i5.5,'.',i1)
     265             :   202          FORMAT ('RNK',i5.5,'.',i1)
     266           0 :                OPEN(55,file=vandername)
     267           0 :                IF(.NOT.l_sgwf) THEN
     268           0 :                   WRITE(55,7) grid(1),grid(2),grid(3),ikpt,nslibd
     269             :                ELSE
     270           0 :                   WRITE(55,7) grid(1),grid(2),grid(3),index_kq,nslibd
     271             :                ENDIF
     272             :     7          FORMAT (5i4)
     273             :             ENDIF
     274             :          ENDIF
     275             : 
     276           0 :          if(film.and..not.odi%d1)then
     277           0 :            fas=-bkpt(3)*bmat(3,3)*z1
     278           0 :            factor=cmplx(cos(fas),sin(fas))
     279             :          else
     280             :            factor=cmplx(1.0,0.0)
     281             :          endif   
     282             : 
     283           0 :          DO iz = 0,grid(3)-1
     284           0 :           DO iy = 0,grid(2)-1
     285           0 :            xloop:DO ix = 0,grid(1)-1
     286             :             point = zero+vec1*REAL(ix)/grid(1)+vec2*REAL(iy)
     287           0 :      $                 /grid(2)
     288           0 :             IF (.NOT.twodim) point = point+vec3*REAL(iz)/grid(3)
     289             : !Check if the point is in MT-sphere
     290             : 
     291           0 :              ii1 = 3
     292           0 :              ii2 = 3
     293           0 :              ii3 = 3
     294           0 :              IF (film .AND. .NOT.odi%d1) ii3 = 0
     295           0 :              IF (odi%d1) THEN
     296           0 :                 ii1 = 0 ; ii2 = 0
     297             :              END IF
     298           0 :              DO  i1 = -ii1,ii1
     299           0 :               DO  i2 = -ii2,ii2
     300           0 :                DO  i3 = -ii3,ii3
     301           0 :                 pt = point+MATMUL(amat,(/i1,i2,i3/))
     302           0 :                 na = 0
     303           0 :                 DO nt = 1,ntype
     304           0 :                  DO nq = 1,neq(nt)
     305           0 :                   na   = na + 1
     306           0 :                   s  = SQRT(dot_PRODUCT(pos(:,na)-pt,pos(:,na)-pt))
     307           0 :                   IF (s<rmsh(jri(nt),nt)) THEN
     308             :                     CALL wann_real(
     309             :      >                   pt,nt,na,0,1,bkpt,nbn,
     310             :      >                   n3d,nmzxyd,n2d,ntypsd,lmaxd,jmtd,
     311             :      >                   natd,ntypd,nmzd,nop,nop2,mrot,tau,invtab,
     312             :      >                   nq3,nvac,invs,z1,delz,nmz,nmzxy,nq2,
     313             :      >                   lmax,rmsh,jri,pos,ngopr,ntypsy,nvd,
     314             :      >                   omtil,amat,bmat,odi,ods,nlod,llod,nlo,llo,
     315             :      >                   ff,gg,flo,acof(nbn,:,:),bcof(nbn,:,:),
     316             :      >                   ccof(:,nbn,:,:),zMat,
     317             :      >                   nv,k1,k2,k3,lmd,nbasfcn,l_ss,qss,jspin,addnoco,
     318           0 :      <                   xdnout)
     319           0 :                     xdnout=xdnout*factor
     320           0 :                    IF (xsf) THEN
     321           0 :                       WRITE(55,*) real(xdnout)
     322           0 :                       WRITE(56,*) aimag(xdnout)
     323           0 :                       WRITE(57,*) real(xdnout*conjg(xdnout))
     324             :                    ELSE
     325           0 :                       WRITE(55,8) real(xdnout),aimag(xdnout)
     326             :                    ENDIF
     327             :                    CYCLE xloop
     328             :                   ENDIF
     329             :                  ENDDO
     330             :                 ENDDO !nt
     331             :                ENDDO
     332             :               ENDDO
     333             :              ENDDO !i1
     334             : !Check for point in vacuum
     335           0 :              IF (film.AND..NOT.odi%d1.AND.ABS(point(3))>=z1) THEN
     336           0 :                 ivac=1
     337           0 :                 if (point(3).lt. 0.0)ivac=2
     338           0 :                 jvac=ivac
     339           0 :                 if(nvac==1)jvac=1
     340             :                 call wann_plot_vac(point,z1,nmzd,nv2d,n3d,nvac,
     341             :      >            nmz,delz,bmat,bbmat,evac,bkpt,vz,jspin,k1,k2,k3,nvd, 
     342             :      >            nbasfcn,neigd,nv,omtil,nslibd,ac(:,nbn,ivac),
     343             :      &             bc(:,nbn,ivac),
     344           0 :      &            u(:,:,jvac),ue(:,:,jvac),xdnout)
     345           0 :                 xdnout=xdnout*factor
     346             :                 if(real(xdnout).gt.9.0 .or.real(xdnout).lt.-9.0
     347           0 :      &        .or.aimag(xdnout).gt.9.0 .or. aimag(xdnout).lt.-9.0)then
     348           0 :                 xdnout=cmplx(0.0,0.0)
     349           0 :                 print*,"vac-problem at z=",point(3)
     350             :                 endif
     351             : c               CALL wann_real(
     352             : c     >              point,0,0,1,0,bkpt,
     353             : c     >              n3d,nmzxyd,n2d,ntypsd,lmaxd,jmtd,
     354             : c     >              natd,ntypd,nmzd,nop,nop2,mrot,tau,invtab,
     355             : c     >              nq3,nvac,invs,z1,delz,nmz,nmzxy,nq2,
     356             : c     >              lmax,rmsh,jri,pos,ngopr,ntypsy,nvd,
     357             : c     >              omtil,amat,bmat,odi,ods,nlod,llod,nlo,llo,
     358             : c     >              ff,gg,flo,acof(nbn,:,:),bcof(nbn,:,:),
     359             : c     >              ccof(:,nbn,:,:),z(:,nbn),
     360             : c     >              nv,k1,k2,k3,lmd,nbasfcn,
     361             : c     <              xdnout)
     362           0 :               IF (xsf) THEN
     363           0 :                  WRITE(55,*) real(xdnout)
     364           0 :                  WRITE(56,*) aimag(xdnout)
     365           0 :                  WRITE(57,*) real(xdnout*conjg(xdnout))
     366             :               ELSE
     367           0 :                  WRITE(55,8) real(xdnout),aimag(xdnout)
     368             :               ENDIF
     369             :               CYCLE xloop
     370             :              END IF
     371             :             
     372           0 :              IF (odi%d1) THEN
     373           0 :               IF (SQRT((pt(1))**2 + (pt(2))**2)>=z1) THEN
     374             :                call wann_plot_od_vac(point,z1,nmzd,nv2d,odi,
     375             :      >            nmz,delz,bmat,bkpt,nvd,nv,omtil,k3,
     376             :      >            ac_1(:,:,nbn),bc_1(:,:,nbn),u_1,ue_1,
     377           0 :      <            xdnout)
     378           0 :                 xdnout=xdnout*factor
     379           0 :                IF (xsf) THEN
     380           0 :                   WRITE(55,*) real(xdnout)
     381           0 :                   WRITE(56,*) aimag(xdnout)
     382           0 :                   WRITE(57,*) real(xdnout*conjg(xdnout))
     383             :                ELSE
     384           0 :                   WRITE (55,8) real(xdnout),aimag(xdnout)
     385             :                ENDIF
     386             :                CYCLE xloop
     387             :               END IF
     388             :              END IF
     389             :              CALL wann_real(
     390             :      >             point,0,0,0,2,bkpt,nbn,
     391             :      >             n3d,nmzxyd,n2d,ntypsd,lmaxd,jmtd,
     392             :      >             natd,ntypd,nmzd,nop,nop2,mrot,tau,invtab,
     393             :      >             nq3,nvac,invs,z1,delz,nmz,nmzxy,nq2,
     394             :      >             lmax,rmsh,jri,pos,ngopr,ntypsy,nvd,
     395             :      >             omtil,amat,bmat,odi,ods,nlod,llod,nlo,llo,
     396             :      >             ff,gg,flo,acof(nbn,:,:),bcof(nbn,:,:),
     397             :      >             ccof(:,nbn,:,:),zMat,
     398             :      >             nv,k1,k2,k3,lmd,nbasfcn,l_ss,qss,jspin,addnoco,
     399           0 :      <             xdnout)
     400           0 :              xdnout=xdnout*factor
     401           0 :              IF (xsf) THEN
     402           0 :                 WRITE(55,*) real(xdnout)
     403           0 :                 WRITE(56,*) aimag(xdnout)
     404           0 :                 WRITE(57,*) real(xdnout*conjg(xdnout))
     405             :              ELSE
     406           0 :                 WRITE(55,8) real(xdnout),aimag(xdnout)
     407             :              ENDIF
     408             :             ENDDO xloop
     409             :            ENDDO
     410             :           ENDDO !z-loop
     411             : 
     412           0 :           IF (xsf) THEN
     413           0 :               CALL xsf_WRITE_endblock(55,twodim)
     414           0 :               CALL xsf_WRITE_endblock(56,twodim)
     415           0 :               CALL xsf_WRITE_endblock(57,twodim)
     416           0 :               CLOSE (55) ; CLOSE (56) ; CLOSE (57)
     417             :           ENDIF
     418             : c..end of the loop by the bands
     419             :           ENDDO bands   
     420             :       ENDDO   !nplot      
     421           0 :       CLOSE(18)
     422           0 :       IF (.not.xsf) CLOSE(55)
     423             :     8 FORMAT (f20.12,1x,f20.12)
     424           0 :       if (film.and..not.odi%d1) then
     425           0 :       deallocate ( ac,bc,u,ue)
     426             :       endif
     427             : 
     428           0 :       RETURN
     429           0 :       END SUBROUTINE wann_plot
     430             : !------------------------------------------
     431             :       
     432             :       END MODULE m_wann_plot

Generated by: LCOV version 1.13