@@ -184,12 +184,38 @@ function read_scf(scf_name::AbstractString)
184
184
185
185
f = open (scf_name," r" )
186
186
atomnum = read (f,Int32)
187
- SpinP_switch = read (f,Int32)
187
+ # SpinP_switch = read(f,Int32)
188
+ version_info = read (f,Int32)
189
+
190
+ version = Int32 (round (version_info / 4 ))
191
+ SpinP_switch = rem (version_info, 4 )
192
+
193
+ openmxVersion = " notset" ;
194
+ if (version== 0 )
195
+ openmxVersion= " 3.7, 3.8 or an older distribution" ;
196
+ elseif (version== 1 )
197
+ openmxVersion= " 3.7.x (for development of HWC)" ;
198
+ elseif (version== 2 )
199
+ openmxVersion= " 3.7.x (for development of HWF)" ;
200
+ elseif (version== 3 )
201
+ openmxVersion= " 3.9" ;
202
+ end
203
+ print (" version: " ,version," SpinP_switch:" , SpinP_switch, " " , openmxVersion )
204
+ # Endian conversion
205
+
188
206
Catomnum = read (f,Int32)
189
207
Latomnum = read (f,Int32)
190
208
Ratomnum = read (f,Int32)
191
209
TCpyCell = read (f,Int32)
192
210
211
+
212
+ # Added in OpenMX3.9
213
+ order_max = 1
214
+ if (0 < version)
215
+ order_max = read (f,Int32)
216
+ @assert (1 == order_max) # if not 1 check the code
217
+ end
218
+
193
219
# atv
194
220
atv = zeros (Float64,TCpyCell+ 1 ,3 )
195
221
for Rn= 1 : TCpyCell+ 1
@@ -325,6 +351,9 @@ function read_scf(scf_name::AbstractString)
325
351
OLPpoz = Array{Array{Array{Array{Float64}}}}(undef,atomnum);
326
352
DM = Array{Array{Array{Array{Array{Float64}}}}}(undef,SpinP_switch+ 1 )
327
353
354
+ iDM = Array{Array{Array{Array{Array{Float64}}}}}(undef,2 ) # OpenMx 3.9
355
+
356
+
328
357
for spin = 1 : SpinP_switch+ 1
329
358
Hks[spin] = Array{Array{Array{Array{Float64}}}}(undef,atomnum)
330
359
init_Hamil! (Hks, spin, atomnum, Total_NumOrbs, FNAN, natn)
@@ -355,6 +384,22 @@ function read_scf(scf_name::AbstractString)
355
384
read_OLPmat! (f, OLPpoy, atomnum, Total_NumOrbs, FNAN, natn)
356
385
read_OLPmat! (f, OLPpoz, atomnum, Total_NumOrbs, FNAN, natn)
357
386
387
+ # Added OpenMX 3.9 OLPmo
388
+ OLPmox = Array{Array{Array{Array{Float64}}}}(undef,atomnum);
389
+ OLPmoy = Array{Array{Array{Array{Float64}}}}(undef,atomnum);
390
+ OLPmoz = Array{Array{Array{Array{Float64}}}}(undef,atomnum);
391
+
392
+ if 0 < version # OpenMx 3.9 or above
393
+ init_OLPmat! (OLPmox, atomnum, Total_NumOrbs, FNAN, natn)
394
+ init_OLPmat! (OLPmoy, atomnum, Total_NumOrbs, FNAN, natn)
395
+ init_OLPmat! (OLPmoz, atomnum, Total_NumOrbs, FNAN, natn)
396
+
397
+
398
+ read_OLPmat! (f, OLPmox, atomnum, Total_NumOrbs, FNAN, natn)
399
+ read_OLPmat! (f, OLPmoy, atomnum, Total_NumOrbs, FNAN, natn)
400
+ read_OLPmat! (f, OLPmoz, atomnum, Total_NumOrbs, FNAN, natn)
401
+
402
+ end
358
403
# for spin = 1:3
359
404
# iHks[spin] = Array(Array{Array{Array{Float64,},},},atomnum)
360
405
# init_Hamil!(iHks,spin)
@@ -367,6 +412,16 @@ function read_scf(scf_name::AbstractString)
367
412
for spin = 1 : SpinP_switch+ 1
368
413
read_Hamil (f, DM, spin, atomnum, Total_NumOrbs, FNAN, natn, 1.0 )
369
414
end
415
+
416
+ if 0 < version # OpenMx 3.9 or above
417
+ for spin = 1 : 2
418
+ iDM[spin] = Array{Array{Array{Array{Float64}}}}(undef,atomnum)
419
+ init_Hamil! (iDM, spin, atomnum, Total_NumOrbs,FNAN, natn)
420
+ end
421
+ for spin = 1 : 2
422
+ read_Hamil (f, iDM, spin, atomnum, Total_NumOrbs, FNAN, natn, 1.0 )
423
+ end
424
+ end
370
425
# ############
371
426
# Solver
372
427
# ############
@@ -388,6 +443,7 @@ function read_scf(scf_name::AbstractString)
388
443
Total_SpinS = d_vec[10 ];
389
444
390
445
446
+ print (" ChemP " ,ChemP, " E_temp:" ,E_Temp)
391
447
#
392
448
# #######################
393
449
# input file
0 commit comments