OpenMCTDHB v2.3
|
00001 C######################################################################## 00002 C # 00003 C SCHMIDTORTHO # 00004 C # 00005 C Library module making Schmidt-orthogonalization. # 00006 C # 00007 C Contains: # 00008 C schmidtortho: Schmidt-orthogonalizes a set of complex vectors # 00009 C in column form. # 00010 C # 00011 C V7.0 MB # 00012 C######################################################################## 00013 00014 00015 C----------------------------------------------------------------------- 00016 C SCHMIDTORTHO 00017 C 00018 C Schmidt-orthogonalizes a set of complex vectors, 00019 C (e.g. single-particle functions). 00020 C The vectors are the column-vectors of psi(gdim,dim) 00021 C----------------------------------------------------------------------- 00022 00025 subroutine schmidtortho (psi,gdim,dim,ierr) 00026 00027 implicit none 00028 00029 integer gdim,dim,e,e1,ierr 00030 complex*16 psi(gdim,dim),overlap 00031 real*8 norm 00032 00033 C----------------------------------------------------------------------- 00034 C Schmidt-orthogonalize the set of functions. 00035 C The orthonormalization is made twice to remove numerical inaccuracies. 00036 C----------------------------------------------------------------------- 00037 ierr = 0 00038 do e=1,dim 00039 do e1=1,e-1 00040 call vvaxzz(psi(1,e1),psi(1,e),overlap,gdim) 00041 call xvxxzzs(overlap,psi(1,e1),psi(1,e),gdim) 00042 enddo 00043 call normvxz(psi(1,e),norm,gdim) 00044 if (norm .le. 1.0d-99 ) norm = 1.0d99 00045 call xvixdzo(norm,psi(1,e),gdim) 00046 enddo 00047 00048 do e=1,dim 00049 do e1=1,e-1 00050 call vvaxzz(psi(1,e1),psi(1,e),overlap,gdim) 00051 call xvxxzzs(overlap,psi(1,e1),psi(1,e),gdim) 00052 enddo 00053 call normvxz(psi(1,e),norm,gdim) 00054 if( norm .le. 0.8d0 ) then 00055 ierr = e 00056 return 00057 end if 00058 call xvixdzo(norm,psi(1,e),gdim) 00059 enddo 00060 00061 return 00062 end 00063 00064 00065 C----------------------------------------------------------------------- 00066 C SCHMIDTORTHOD 00067 C 00068 C Schmidt-orthogonalizes (row-orthogonalization) a real quadratic 00069 C matrix psi(dim,dim). 00070 C 00071 C SS 11/98 00072 C----------------------------------------------------------------------- 00073 00076 subroutine schmidtorthod (psi,dim) 00077 00078 implicit none 00079 00080 integer dim,e,e1,i 00081 real*8 psi(dim,dim),overlap,norm 00082 call tranqxd(psi,dim) 00083 00084 C----------------------------------------------------------------------- 00085 C Schmidt-orthogonalize the matrix. 00086 C The orthonormalization is made twice to remove numerical inaccuracies. 00087 C----------------------------------------------------------------------- 00088 do i=1,2 00089 do e=1,dim 00090 do e1=1,e-1 00091 call vvtxdd(psi(1,e1),psi(1,e),overlap,dim) 00092 call xvxxdds(overlap,psi(1,e1),psi(1,e),dim) 00093 enddo 00094 call normvxd(psi(1,e),norm,dim) 00095 call xvixddo(norm,psi(1,e),dim) 00096 enddo 00097 enddo 00098 00099 call tranqxd(psi,dim) 00100 00101 return 00102 end 00103 00104 00105 C#######################################################################