1
subroutine smd_lat_init_system()
11
character*32 tag,pname
14
pname = "smd_lat_init_system"
17
call smd_system_get_component(sp_lat,tag,result)
20
> pname//'no component '//tag,0,0)
22
call smd_lat_init(sp_lat,result)
25
call smd_system_unset_component(tag)
32
subroutine smd_lat_init(namespace,result)
36
#include "mafdecls.fh"
41
character*(*) namespace
47
integer i_lc,i_lrc,i_lfc
50
pname = "smd_lat_init"
52
c write(*,*) "in "//pname
54
call smd_rtdb_get_handle(rtdb)
56
c check if there is any lattice in rtdb
57
call smd_lat_rtdb_check(rtdb,result)
60
> pname//'no lattice found in rtdb',0,0)
64
call smd_namespace_create(namespace)
66
c create lattice data structures
67
c ------------------------------
69
call smd_data_create_get(namespace,tag,2,MT_DBL,i_lfc)
71
call smd_data_create_get(namespace,tag,9,MT_DBL,i_lc)
73
call smd_data_create_get(namespace,tag,9,MT_DBL,i_lrc)
75
call smd_lat_rtdb_read(rtdb,dbl_mb(i_lc))
76
call smd_lat_invrt(dbl_mb(i_lc),dbl_mb(i_lrc))
77
call smd_latt_vol(dbl_mb(i_lc),vol)
82
subroutine smd_lat_rtdb_check(rtdb,olatt)
86
#include "mafdecls.fh"
94
double precision latt(3,3)
100
pname = "smd_lat_rtdb_read"
102
c write(*,*) "in "//pname
106
call smd_rtdb_get_dbl(tag,3,a(1),olatt)
107
c if (.not.rtdb_get(rtdb,tag,mt_dbl,3,a(1)))
113
subroutine smd_lat_rtdb_read(rtdb,latt)
115
#include "errquit.fh"
117
#include "mafdecls.fh"
122
double precision latt(3,3)
127
double precision a(3)
131
pname = "smd_lat_rtdb_read"
133
c write(*,*) "in "//pname
136
call smd_rtdb_get_dbl(tag,3,a(1),result)
138
> call errquit(pname//'failed to get'//tag,0,
141
c if (.not.rtdb_get(rtdb,tag,mt_dbl,3,a(1)))
142
c > call errquit(pname//'failed to get'//tag,0,
148
call smd_rtdb_get_dbl(tag,3,a(1),result)
150
> call errquit(pname//'failed to get'//tag,0,
153
c if (.not.rtdb_get(rtdb,tag,mt_dbl,3,a(1)))
154
c > call errquit(pname//'failed to get'//tag,0,
160
call smd_rtdb_get_dbl(tag,3,a(1),result)
162
> call errquit(pname//'failed to get'//tag,0,
165
c if (.not.rtdb_get(rtdb,tag,mt_dbl,3,a(1)))
166
c > call errquit(pname//'failed to get'//tag,0,
174
subroutine smd_lat_invrt(latt,rlatt)
176
double precision latt(3,3),rlatt(3,3)
180
rlatt(1,1)=latt(2,2)*latt(3,3)-latt(3,2)*latt(2,3)
181
rlatt(2,1)=latt(3,1)*latt(2,3)-latt(2,1)*latt(3,3)
182
rlatt(3,1)=latt(2,1)*latt(3,2)-latt(3,1)*latt(2,2)
183
rlatt(1,2)=latt(3,2)*latt(1,3)-latt(1,2)*latt(3,3)
184
rlatt(2,2)=latt(1,1)*latt(3,3)-latt(3,1)*latt(1,3)
185
rlatt(3,2)=latt(3,1)*latt(1,2)-latt(1,1)*latt(3,2)
186
rlatt(1,3)=latt(1,2)*latt(2,3)-latt(2,2)*latt(1,3)
187
rlatt(2,3)=latt(2,1)*latt(1,3)-latt(1,1)*latt(2,3)
188
rlatt(3,3)=latt(1,1)*latt(2,2)-latt(2,1)*latt(1,2)
190
det=latt(1,1)*rlatt(1,1)+latt(1,2)*rlatt(2,1)+latt(1,3)*rlatt(3,1)
191
if(abs(det).gt.0.d0)det=1.d0/det
193
rlatt(1,1)=det*rlatt(1,1)
194
rlatt(2,1)=det*rlatt(2,1)
195
rlatt(3,1)=det*rlatt(3,1)
196
rlatt(1,2)=det*rlatt(1,2)
197
rlatt(2,2)=det*rlatt(2,2)
198
rlatt(3,2)=det*rlatt(3,2)
199
rlatt(1,3)=det*rlatt(1,3)
200
rlatt(2,3)=det*rlatt(2,3)
201
rlatt(3,3)=det*rlatt(3,3)
207
subroutine smd_latt_vol(latt,vol)
209
real*8 x,y,z,latt,vol
213
x=latt(2,2)*latt(3,3)-latt(2,3)*latt(2,3)
214
y=latt(3,2)*latt(1,3)-latt(1,2)*latt(3,3)
215
z=latt(1,2)*latt(2,3)-latt(2,2)*latt(1,3)
217
vol=abs(latt(1,1)*x+latt(2,1)*y+latt(3,1)*z)
223
subroutine smd_latt_get_vol(vol)
225
#include "errquit.fh"
227
#include "mafdecls.fh"
239
pname = "smd_latt_vol"
241
call smd_get_ind(tag,i_fconst,result)
244
> pname//'error getting ntot '//tag,0, RTDB_ERR)
245
vol = dbl_mb(i_fconst)
250
subroutine smd_lat_rebox(n,c)
252
#include "errquit.fh"
254
#include "mafdecls.fh"
260
double precision c(n,3)
262
character*32 sp_lattice
267
integer i_c,i_lrc,i_lc
270
pname = "smd_lat_rebox"
272
c get lattice params if any
273
c -------------------------
274
call smd_system_get_component(sp_lattice,"lattice",result)
277
> pname//'skipping reboxing as there is no lattice ',0,0)
282
call smd_data_get_index(sp_lattice,tag,i_lc,result)
285
> pname//'error getting index for '//tag,0, RTDB_ERR)
288
call smd_data_get_index(sp_lattice,tag,i_lrc,result)
291
> pname//'error getting index for '//tag,0, RTDB_ERR)
293
call smd_util_rebox(n,