1!
2! Copyright (C) 2008 Simon Binnie
3! This file is distributed under the terms of the
4! GNU General Public License. See the file 'License'
5! in the root directory of the present distribution,
6! or http://www.gnu.org/copyleft/gpl.txt .
7!
8!
9!---------------------------------------------------------------------
10PROGRAM casino2upf
11  !---------------------------------------------------------------------
12  !
13  !     Convert a pseudopotential written in CASINO tabulated
14  !     format to unified pseudopotential format
15
16  USE casino_pp
17  USE write_upf_module, ONLY :  write_upf
18  USE pseudo_types, ONLY : nullify_pseudo_upf, deallocate_pseudo_upf, pseudo_upf
19  !
20  IMPLICIT NONE
21  !
22  CHARACTER(len=256) :: pp_data
23  CHARACTER(len=256) :: upf_file
24  CHARACTER(len=256), ALLOCATABLE:: wavefile(:)
25  INTEGER, ALLOCATABLE :: waveunit(:)
26  INTEGER nofiles, i, ios, pp_unit
27  TYPE(pseudo_upf)      :: upf_out
28
29  NAMELIST / inputpp / &
30       pp_data,        &         !CASINO pp filename
31       upf_file,        &         !output file
32       tn_grid,        &         !.true. if Trail and Needs grid is used
33       tn_prefac,      &
34       xmin,           &         !xmin for standard QE grid
35       dx                        !dx for Trail and Needs and standard QE
36                                 !grid
37   pp_data= 'pp.data'
38   upf_file= 'out.UPF'
39
40   CALL nullify_pseudo_upf( upf_out )
41
42   WRITE(0,*) 'CASINO2UPF Converter'
43
44   READ(*,inputpp,iostat=ios)
45   READ(*,*,iostat=ios) nofiles
46
47   ALLOCATE(wavefile(nofiles), waveunit(nofiles))
48
49   !Now read in the awfn file names and open the files
50
51   DO i=1,nofiles
52      READ(*,*,iostat=ios) wavefile(:)
53      OPEN(newunit=waveunit(i),file=trim(wavefile(i)),&
54           status='old',form='formatted', iostat=ios)
55      IF (ios /= 0 ) THEN
56         CALL upf_error ('casino2upf', 'cannot read file', trim(wavefile(i)))
57      ENDIF
58   ENDDO
59
60   OPEN(newunit=pp_unit,file=trim(pp_data),status='old',form='formatted', iostat=ios)
61   IF (ios /= 0 ) THEN
62      CALL upf_error ('casino2upf', 'cannot read file', trim(wavefile(i)))
63   ENDIF
64
65   CALL read_casino(pp_unit,nofiles, waveunit)
66
67   CLOSE (unit=pp_unit)
68   DO i=1,nofiles
69      CLOSE (waveunit(i))
70   ENDDO
71
72   DEALLOCATE( wavefile, waveunit )
73
74   ! convert variables read from CASINO format into those needed
75   ! by the upf format - add missing quantities
76
77   CALL convert_casino(upf_out)
78
79   PRINT '(''Output PP file in UPF format :  '',a)', upf_file
80   CALL write_upf(filename = TRIM(upf_file), UPF = upf_out, SCHEMA = 'V2')
81   CALL  deallocate_pseudo_upf( upf_out )
82
83   STOP
84
85END PROGRAM casino2upf
86