8
c This program converts pseudopotential netCDF files to "VPS"
12
integer nrp_id, n_up_id, n_down_id
13
integer r_id, v_up_id, v_down_id, l_up_id, l_down_id
14
integer core_id, val_id
17
double precision a, b, zion
18
character*2 nameat, corr
21
character*10 ray(6), title(7)
23
character*70 title_str
26
integer i, j, lo, nrp, npotd, npotu
27
double precision, allocatable :: v(:)
30
character*70 cdf_file, binary_file
32
c Let's get the files from the command line:
35
if (nargs .ne. 2) then
36
write(0,*) 'Usage: cdf2vps netCDF_file vps_file'
40
call getarg(1,cdf_file)
41
call getarg(2,binary_file)
45
iret = nf90_open(cdf_file,NF90_NOWRITE,ncid)
46
open(unit=2,file=binary_file,form='unformatted',status='replace')
50
iret = nf90_get_att(ncid,nf90_global,'Element',nameat)
51
iret = nf90_get_att(ncid,nf90_global,'Title',ray_str)
52
iret = nf90_get_att(ncid,nf90_global,'Config',title_str)
53
iret = nf90_get_att(ncid,nf90_global,'Correlation',corr)
54
iret = nf90_get_att(ncid,nf90_global,'Relativistic',rel)
55
iret = nf90_get_att(ncid,nf90_global,'Core',core)
56
iret = nf90_get_att(ncid,nf90_global,'Valence_charge',zion)
57
iret = nf90_get_att(ncid,nf90_global,'a_parameter',a)
58
iret = nf90_get_att(ncid,nf90_global,'b_parameter',b)
62
title(i) = title_str(ptr:ptr+9)
66
ray(i) = ray_str(ptr:ptr+9)
69
iret = nf90_inq_dimid(ncid,'nrp',nrp_id)
70
iret = nf90_inquire_dimension(ncid,nrp_id,len=nrp)
72
iret = nf90_inq_dimid(ncid,'n_down',n_down_id)
73
iret = nf90_inquire_dimension(ncid,n_down_id,len=npotd)
75
iret = nf90_inq_dimid(ncid,'n_up',n_up_id)
76
if (iret .ne. nf90_noerr) then
77
write(0,'(a)') 'No up potentials'
80
iret = nf90_inquire_dimension(ncid,n_up_id,len=npotu)
83
write(2) nameat, corr, rel, core, (ray(j),j=1,6),
84
& (title(j),j=1,7), npotd, npotu, nrp, a, b, zion
88
iret = nf90_inq_varid(ncid,'l_down',l_down_id)
89
iret = nf90_inq_varid(ncid,'v_down',v_down_id)
90
if (npotu .ne. 0) then
91
iret = nf90_inq_varid(ncid,'l_up',l_up_id)
92
iret = nf90_inq_varid(ncid,'v_up',v_up_id)
95
iret = nf90_inq_varid(ncid,'r',r_id)
96
iret = nf90_inq_varid(ncid,'core_charge',core_id)
97
iret = nf90_inq_varid(ncid,'val_charge',val_id)
99
iret = nf90_get_var(ncid,r_id,v(1:nrp))
100
write(2) (v(j),j=1,nrp)
105
iret = nf90_get_var(ncid,l_down_id,lo,start=(/i/))
106
iret = nf90_get_var(ncid,v_down_id,v(1:nrp),start=(/i,1/),
108
write(2) lo, (v(j),j=1,nrp)
114
iret = nf90_get_var(ncid,l_up_id,lo,start=(/i/))
115
iret = nf90_get_var(ncid,v_up_id,v(1:nrp),start=(/i,1/),
117
write(2) lo, (v(j),j=1,nrp)
120
c Core and valence charge
122
iret = nf90_get_var(ncid,core_id,v(1:nrp))
123
write(2) (v(j),j=1,nrp)
124
iret = nf90_get_var(ncid,val_id,v(1:nrp))
125
write(2) (v(j),j=1,nrp)
127
iret= nf90_close(ncid)
131
subroutine check(status)
133
integer, intent(in):: status
134
if (status .ne. nf90_noerr) then
135
print *, trim(nf90_strerror(status))