1+ from util import *
2+ import torch
3+ import numpy as np
4+
5+ def random_C_init (info ):
6+ """ C[it][il][ie,iu] <jY|\phi> """
7+ C = dict ()
8+ for it in info .Nt_all :
9+ C [it ] = ND_list (info .Nl [it ])
10+ for il in range (info .Nl [it ]):
11+ C [it ][il ] = torch .tensor (np .random .uniform (- 1 ,1 , (info .Ne [it ], info .Nu [it ][il ])), dtype = torch .float64 , requires_grad = True )
12+ return C
13+
14+
15+
16+ def read_C_init (file_name ,info ):
17+ """ C[it][il][ie,iu] <jY|\phi> """
18+ C = random_C_init (info )
19+
20+ with open (file_name ,"r" ) as file :
21+
22+ for line in file :
23+ if line .strip () == "<Coefficient>" :
24+ line = None
25+ break
26+ ignore_line (file ,1 )
27+
28+ C_read_index = set ()
29+ while True :
30+ line = file .readline ().strip ()
31+ if line .startswith ("Type" ):
32+ it ,il ,iu = list (map (int ,file .readline ().split ()));
33+ it = info .Nt_all [it - 1 ]; iu -= 1
34+ C_read_index .add ((it ,il ,iu ))
35+ line = file .readline ().split ()
36+ for ie in range (info .Ne [it ]):
37+ if not line : line = file .readline ().split ()
38+ C [it ][il ].data [ie ,iu ] = float (line .pop (0 ))
39+ elif line .startswith ("</Coefficient>" ):
40+ break ;
41+ else :
42+ raise IOError ("unknown line in read_C_init " + file_name + "\n " + line )
43+ return C , C_read_index
44+
45+
46+
47+ def copy_C (C ,info ):
48+ C_copy = dict ()
49+ for it in info .Nt_all :
50+ C_copy [it ] = ND_list (info .Nl [it ])
51+ for il in range (info .Nl [it ]):
52+ C_copy [it ][il ] = C [it ][il ].clone ()
53+ return C_copy
54+
55+
56+
57+ def write_C (file_name ,info ,C ):
58+ with open (file_name ,"w" ) as file :
59+ print ("<Coefficient>" , file = file )
60+ print ("\t Total number of radial orbitals." , file = file )
61+ for it ,C_t in C .items ():
62+ for il ,C_tl in enumerate (C_t ):
63+ for iu in range (C_tl .size ()[1 ]):
64+ print ("\t Type\t L\t Zeta-Orbital" , file = file )
65+ print (f"\t { info .Nt_all .index (it )+ 1 } \t { il } \t { iu + 1 } " , file = file )
66+ for ie in range (C_tl .size ()[0 ]):
67+ print ("\t " , C_tl [ie ,iu ].item (), file = file )
68+ print ("</Coefficient>" , file = file )
69+
70+
71+ #def init_C(info):
72+ # """ C[it][il][ie,iu] """
73+ # C = ND_list(max(info.Nt))
74+ # for it in range(len(C)):
75+ # C[it] = ND_list(info.Nl[it])
76+ # for il in range(info.Nl[it]):
77+ # C[it][il] = torch.autograd.Variable( torch.Tensor( info.Ne, info.Nu[it][il] ), requires_grad = True )
78+ #
79+ # with open("C_init.dat","r") as file:
80+ # line = []
81+ # for it in range(len(C)):
82+ # for il in range(info.Nl[it]):
83+ # for i_n in range(info.Nu[it][il]):
84+ # for ie in range(info.Ne[it]):
85+ # if not line: line=file.readline().split()
86+ # C[it][il].data[ie,i_n] = float(line.pop(0))
87+ # return C
0 commit comments