******* ANTOINE/NOCORE ********** this code is an adaptation of the standart ANTOINE code (M scheme) It has been modified to allow the possibility to take a nocore space including all the shells from N=0 until N=11 corresponding for p shell nuclei at a full 10 hw space . The basic idea of the shell model code ANTOINE ( notice now A.) is the GLASGOW method . The fundamental improvement is the separation of the Slater Determinant in proton and neutron . Precalculations based on Glasgow are done in separate spaces , allowing after that the generation of the non-zero of the matrix with 3 integer additions . For more details see : ** Zacopane School ; ** Phys. Rev. C An other specificity is that diagonalization (lanczos) is done starting with a state with good J**2 (T**2) . This is achieved in before doing a Lanczos calculation with the operator J**2 (T**2). It allows a strong diminution of needed converged states but produces a specific difficulty (see below) The main difficulty to solve with respect to the standart A. was related at the huge number of nljm individual state ( 728 ). Now the fundamental limitation is , like A., the dimension of the matrix : -- 2 vectors (dimension of the matrix) + some length calculated in option 3 must be both in memory -- for standart Lanczos method all the Lanczos vectors must be kept on disks. 3 new possibilties have been included : ** do the diagonalization with simple precision. ** A modified Lanczos in which only 3 vectors are to be kept. ** instead of the Lanczos method use the Davidson one. These 2 last possibilities can be used if we need only 1 eigenvector. COMMENTS : it looks that, except for J**2 , simple precision is enough . In Davidson method, starting from an approximate solution, a delta vector is calculated . In "Davidson 2 vectors" this delta V. is added at the initial and it restarts. In "D. 3 vectors" H is diagonalized between the inital and the delta V. . It is beeter but need a third vector. The advantage of D. is that it avoids the storage of many vectors (lanczos). However in D. appears H**(-1) which is usually approximate by its diagoanal part. Here (M scheme) H(i,i) is not invariant with respect to rotation and translation . Comments from experts in D. are welcome .... In the present stay we will prefer the "Lanczos 3 vectors" : starting from psi(1), with 2 successive application of H we calculate psi(2) and psi(3) . We can diagonlize H in psi(1) and psi(2), get a new psi(1) and psi(2) and continue . Some tests have shown that if the convergence is not so good as standart Lanczos, it is not so bad. SIZE of the code . In the main program ( aaa9.f ) a parameter TOTAL must be fixed giving the size of the common /BIG/ F(TOTAL),G(TOTAL) (F and G are defined integers) . In this common are stored everything and especially the 2 vectors and working quantities) . If this common is too small the code stops with some message or breaks ... FILES . 3 types of files : ** 2-body matrix elements ** Vectors These files are defined with a number ( given in the data) numbers 1,2,3,4 are excluded , these numbers being kept for the ** Scratch files written in a directory called /tmp/ ( see in the fortran the OPEN and CLOSE files). There are a lot of these files (1 for each Lanczos vector, storage of precalculated quantities ...) LIBRARY: The code uses NAG libry for : generator of random numbers diagonalization of tridiagonal matrices. Like in A. the code can do successively different tasks , for example calculate states, change the space, calculate the new states then the transitions .... All the possibilities are explained below and are found in "achoi.f". Other can be added if request . Tthe first data is always a) CAS Notice that all the data are in a free format. All the quantities defined with a word beginning by a letter A-U are integer X-Z floating. CAS= numero of the option (see below) If CAS=0 or = a numero wich does not exist the code stops. *************** * CAS = 1 dimension of the matrix * 2 description of the basis * 3 number of terms to store and * number of non-zero to calculate H * 4 idem 3 for J**2 *************** For these 4 options the data are exactly the same : 1 6 7 6 4 0 0 b) b) JUMP,NTMAX,(NPA(k),k=1,2),MPRO,PARI JUMP = number max of hw excitations If JUMP is negative, it is transformed in the absolute value, but for the calculation a very large positive energy is added at state with t.ne.jump : it allows for example the calculation of pure intruder states. NTMAX= principal quantum number of the higher shell for p shell nuclei to have an exact center of mass elimination we must take NTMAX=JUMP+1 present limitation NTMAX=11 JUMP=10 NPA= number of particles proton and neutron or neutron-proton. The most efficient is to take NPA(1) .ge. NPA(2) , the specificity p-n or n-p will be defined after. MPRO = 2*Jz if MPRO=0 time reversal symetry (TRS) is taken in account. (for a "deep" reason for even-even nuclei, TRS is not fully taken in account). In option 1 what is called the "effective dimension" is the effective dimension that we have to diagonalize with Jz=0 and this TRS . If we take MPRO=1 for an even A nucleus ( Jz=1/2 !) it is transformed in MPRO=0 but TRS is suppressed, allowing for ex. the simultaneous calculation of J even and odd states . Notice that in the printing if J is not explicitly known the output will be J=-1 ! PARI = parity =0 for NORMAL parity states (excitation even hw) =1 NON-NORMAL parity states (excitation odd hw) Notice that the option 3 calculates the length maximum that we need to do the calcualtion . Added at the length of 2 vectors it gives the memeory (parameter fixed in the main program) minimum. *************** CAS=5 Forget it !! *************** *************** CAS= 10 Center of Mass Hamiltonian. *************** 10 0 8 90 c) c) JUMP,FLNUC we read 2-body nuclear matrix elements on file FLNUC and calculate the equivalent Hcm m.e. We store only V(k),k=1,number of 2-body (in binary). Be careful after that to take the same type of file for the TBME. ( the code will check that the number of terms in the files of TBME and CDM are identical) file of storage : /tmp/CDM x x=JUMP definition of Hcm is so that a pure 1 hw center of mass state has a mean value = A (number of particles) ******************************************************** For option with CAS >10 we have to read or (and) to write on files We will have NF=1 read OR write NF=2 read AND write the 2 first data will be : CAS a1) (FIL(k),k=1,nf), (NLEC(k),k=1,nf), STOR a2) FIL(k) = numero of the file if Nf=2 FIL(1)= file on which we WRITE FIL(2)= file on which we READ if FIL(k) is negative , this number is transformed in positive but the file is not rewinded at the end of the option . NLEC(k) = number of vectors that we read at the beginning and which are forgotten (initialization of the files). STOR = different possible meaning following the option **************************************************** **************************************************** * OPTION WITH 10 < CAS < 31 DOUBLE PRECISION * * CAS=CAS+20 idem CAS with SIMPLE PRECISION * **************************************************** **************************************************** an optio see below 73 ) allows to change the precision and for example to calculate in double precision in the spaces 2,4 and 6 hw and after go in 8 hw with simple precision . *************** CAS=11 choice of a pivot . *************** 11 A1) 40 0 2 a2) 0 1 6 4 0 0 11111 1 1 c) 11111 -1 1 c) a2) FLWRI,NLEC,STOR STOR=max (1,STOR) number of pivot states to calculate c) loop on STOR KPVT, RVT, RVI Pivot state is generated randomly KPVT = generator of random numbers If MPRO has been defined =0 we must define a positive or negative time reversal symetry RVT=1 positive J even =-1 negative J odd =0 MPRO.ne.0 RVT =time reversal symetry : 0 Jz.ne.0 -1 Jz=0 J odd 1 Jz=0 J even It is also possible to have a pivot with good isospin T=Tz (with the exception of odd-odd nucleus with N=Z and MPRO=0) for that take RVI =1 , if not take RVI=0 If the pivot is T=Tz , it will keep that in memory, print it at the end even if there is a coulomb H . In A. there is the possibilty to have with the state(s) with minimal diagonal energy . It was not included here . We have advantage at each step nhw to satr with the states calculated at (n-2)hw , so to define the pivot in the space 0hw with the advantage to have a pivot without spurious component. *************** CAS=12 projection on J**2. *************** 12 41 40 0 0 2 a2) 6 7 6 4 0 0 3 0 4 8 c) 2 2 6 c) This is an important specifity of A. compared to standart GLASGOW method : Lanczos is done on states with good J**2 ( T**2). the fundamental advantage is that we need always few converged states . It produce however a tough difficulty ( see later) b) we write on file 41 and read on 40 like for the creation of the pivot we loop on STOR=max(1,STOR) c) NKEEP, (JCAL(k),k=1,NKEEP) JCAL= 2*J state to keep *************** CAS=13,14 Lanczos calculations *************** 13 a1) 40 42 0 0 0 a2) 2 3 6 4 0 0 90 1 10. c) 5 1 2 1 1 1 d) 30 0.0005 0 0 e) a2) STOR is now the number of states precently calculated and stored . the difference between for example 40 42 2 0 0 and 40 42 0 0 2 is that in the first these 2 states are read and ignored ; in the second these states will appeared in the spectrum and eventually for orthogonalization ( see below) c) FLNUC, COUL, ZCM FLNUC file of the 2-body matrix elements. COUL =1,2 proton are in space 1 or 2 (following definition in b) ) =0 no coulomb =-1 no nuclear H, but only center of mass (this last possibility can be useful to check the spuriousity of states in doing 1 Lanczos iteration). ZHCM coefficient for center of mass H . It will take the file /tmp/CDM x with x=JUMP ************ Comment for Petr N. the file of TBME can become very big for 8 or 10 hw space . It is perhaps interesting to do the following : Instead to write with a format : i1,i2,i3,i4,J,T (E(k),k=1,QL) QL=4 or 6 and that on 1 line , write in binary : (epp(k),enn(k),epn(k),k=1,nmat) each k being related at i1,i2,i3,i4,J which will be generated identically in the 2 codes (TBME and A.) *********************** d) NCAL, (NCON(k),k=1,NCAL) NCON= number of states to converge the difference between option 13 and 14 is the following : in option 13 we read ONE vector pivot independently with the number of converged states . in option 14 we read NCON vectors to generate the pivot . note : to accelerate the convergence ( decrease the number of Lanczos iterations) it is interesting to start with the eigenvector calculated in a smaller space : to calculate in 8 hw space, start with the solution in 6 hw space . If we need more then 1 converged states we have 2 possiblities : start with a linear combination of states calculated in the smaller space or do Lanczos separatly for each state and during Lanczos orthogonalize at all the precedent calculated states. e) ITMA, ZFIT, IORTH, NLANZ ITMA = number maximum of Lanczos iterations for each calculation. ZFIT = all the 3 iterations ,energies are calculated and the calculation stops if all the energy of all the states NCON(k) have a variation < ZFIT (usual value 0.001 or 0.0005 ) IORTH =0 usual =1 orthogonalization to all the states precedently calculated In Lanczos method a numerical problem appears : because rounding errors it is necessary to orthogonalize each new Lanczos vectors at all the precedent. If not lowest eigenvalues will appear many times . Furthermore in our method in which we start with J**2 eigenstates, other states , lowest in energy, with different J value can appear if we do many Lanczos iterations . To avoid this, it is possible to orthogonalize each new vector at all the states precedently calculated . NLANZ : the Lanczos vectors are stored on files . It means that it is possible to prolongate a calculation which has been interrupted. note : if ZFIT < 0. we calculate a strength function : we calculate all the ITMA iterations and instead to claculate each STEP (=3) the convergence we calculate the sharing of the pivot state . STEP is now read ; example : 13 0 42 0 0 0 4 5 6 4 0 0 90 1 10. 1 0 200 -0.0005 0 0 e) 50 *************** CAS=15,16 Lanczos 3 vectors. *************** 15 40 42 0 0 0 6 7 6 4 0 0 90 1 10. 5 30 0.0005 1 0 d,e) See explanation of the method before. At the beginning we read psi(1), calculate psi(2) and loop after calculating H*psi(2), giving new psi(1) and psi(2). In option 15 the 3 vectors can be both in memory . In option 16 only 2 vectors can be both in memory , one is always on a disk. In the 2 possibilities, data are identical and similar at Lanczos the 2 last lines of Lanczos are now concentrated in 1 line : d,e) NCAL, ITMA, ZFIT, IORTH, KEEP Same meaning Lanczos except KEEP=0 nothing KEEP.ne.0 at each iteration psi(1) and psi(2) are kept on a disk. allowing to restart with these vectors if KEEP > 0 In each diagonalization we converge only 1 state (NCON(k)=1 with k=1,NCAL). for k>1 KEEP is put =0 . *************** CAS=17,18,19 Davidson method for diagonalization *************** 17 40 42 0 0 0 5 6 6 4 0 0 90 1 10. 5 30 0.0005 1 0 d,e) Same data Lanczos 3 vectors . In CAS=17 we only add the 2 vectors . Notice that here the new vector can be higher in energy . In that case diagonalization stops and the precedent vector is kept. In CAS=16,17 we diagonalize H between the 2 vectors . 16 : 3 vectors both in memory 17 : 2 vectors both in memory , one on disk. *************** CAS=21 occupation of shells *************** 21 41 0 0 6 7 6 4 0 0 We print the occupation of each shell (order of shells / N increasing, j increasing : 0s1 0p1 0p3 1s1 0d3 0d5 1p1 .....) the occupations at each truncation level . The overlap between all the states. *************** CAS=22 change truncation *************** 22 42 41 0 0 0 6 7 6 4 0 0 b) b) define the new basis Be careful: change truncation is not change the basis . *************** CAS=23 transitions (without change of the parity) *************** 23 41 0 4 a2) 6 7 6 4 0 0 2 0 15. 0.5 1.5 c) a2) NLEC(1) must be =0 c) LB, PI, ZHW , (ZCOEF(k,pn),k=1,x),pn=1,2) elec x=1 magn x=2 (sigma,l) here we must take PI=0 LB= lambda (maxi=4) ZHW determines the oscillator length b=dsqrt(41.47:hw) *************** CAS=24 Change Jz value *************** 24 42 41 0 0 0 a2) 6 7 6 4 2 0 b) This option has 2 utilities : ** check the J value of states ** calculate transitions when the Clebsh is = 0 a2) STOR=0 means that all the vectors will be read and changed . We can suppress the writing in taking FLWRI=0 b) We have here the final value of Jz . different initial values are possible. This option can be used to check the J value of the calclated states. *************** CAS=25 Change Tz value *************** 25 42 41 0 0 0 a2) 6 7 5 5 0 0 6 4 0 0 b) a2) idem change Jz . b) We have first the final nucleus and after the initial one . In this example states of Be10 ( C10) stored on file 41 will be transformed in B10 and stored . If we need only to check the isospin of the starting state we can take FIL(1)=0 *************** CAS=26 Gamow-Teller *************** 26 42 41 0 0 0 6 7 5 5 0 0 6 4 0 0 exactly the same data that the change of Tz IF the initial state is J=0 . If J.ne.0 we project (option 12) . example 26 42 41 0 0 0 6 7 4 4 2 0 5 3 2 0 c1) 6 7 4 4 2 0 c2) 3 2 4 6 c3) c) suppose that we have calculated the GS J=2+ of Li8 . We calculate GT to Be8 c1) we take 2*Jz=2 to avoid the CG =0 c2) we redefine the final basis c3) we define the final projected vectors that we need . *************** CAS=71 List vectors on files *************** 71 2 42 41 c) c) NFIL, (FIL(k),k=1,NFIL) list of all the vectors of all the files FIL(k) *************** CAS=72 Copy vectors on a file on an otehr one. *************** 72 42 41 0 0 0 c) c) (FIL(k),k=1,NFIL), (NLEC(k),k=1,2), NCOP NLEC = initialization copy NCOP vectors from FIL(2) on FIL(1) if NCOP=0 NCOP= all *************** CAS=73 Copy vectors on a file on an otehr one with *************** change of the precision 73 42 41 0 0 1 same data precedent option . If vectors read are in double precision, they are written in simple and opposite . *************** CAS=74 Overlap between all the vectors of all the files *************** 74 3 40 41 42 0 0 0 0 0 0 c) c) NFIL, (FIL(k),k=1,NFIL), (NLEC(k),k=1,NFIL), (STOR(k),k=1,NFIL) NLEC = initialization STOR = nb of vectors ilike always if STOR=0 STOR=all be careful : all the vectors are both in memory . *************** CAS=75 Overlap vectors of 2 different files *************** 75 40 41 0 0 0 0 same data like before . in memery we have all the vectors of FIL(1) and 1 vector of FIL(2) *************** CAS=76 Overlap one by one of vectors of many files *************** 76 3 40 41 42 0 0 0 5 here we read at each step 1 state on each file and calculate the overlaps. *************** CAS=77 Linear combination of vectors *************** 77 40 41 0 0 3 1.0 0.5 0.5 c) (FIL(k),k=1,2), (NLEC(k),k=1,2), NVEC, (ZCOEF(k),k=1,NVEC) we read NVEC vectors on FIL(2) ,add them with coef ZCOEF(k) and write the resulting vector on FIL(1). *************** CAS=78 Orthogonalization of vectors *************** 77 40 41 42 0 0 0 3 5 c) c) (FIL(k),k=1,3), (NLEC(k),k=1,3), STOR, NORT we read first STOR vectors on FIL(2) ,the the NORT vectors of FIL(3) are orhogonalize at the STOR vectors and write on FIL(1). *************** CAS=79 Spectrum *************** 79 2 40 41 0 0 0 0 c) c) NFIL, (FIL(k),k=1,NFIL), (NLEC(k),k=1,NFIL), (STOR(k),k=1,NFIL) calculate the spectrum with all teh states of all the files *************** CAS=80 Ordering of vectors *************** 80 40 41 0 0 10 c) c) (FIL(k),k=1,2), (NLEC(k),k=1,2), STOR the STOR vectors read on FIL(2) are ordered following the energy and written on FIL(1) This is useful to after that calculate the states in this oder and that in a larger space with orthogonalization.