#include #include #include "read2.h" #include "stimsyr.h" #include "get_s2.h" #include "get_ntot.h" #undef __FUNCT__ #define __FUNCT__ "main" void solvequad(double *a, double *b, double *c, double *res){ *res = -*b/(2.0*(*a)) + sqrt((*b)*(*b) - 4.0*(*a)*(*c))/(2.0*(*a)); } int main(int argc,char **argv) { Mat A; /* problem matrix */ EPS eps; /* eigenproblem solver context */ EPSType type; PetscReal error,tol,re,im; PetscReal norm=0.0; PetscReal norm2=0.0; PetscReal norm3=0.0; PetscReal norm4=0.0; PetscReal normfin=0.0; PetscReal normfin2=0.0; PetscReal normfin3=0.0; PetscReal normfin4=0.0; const int natomax=900; PetscScalar kr,ki,value[natomax]; Vec xr,xi; PetscInt i,Istart,Iend,col[natomax],maxit,its,nconv,countcol; PetscInt nev, ncv, mpd; PetscLogDouble t1,t2,tt1,tt2; PetscErrorCode ierr; int mpiid; char const* const fileName = argv[1]; FILE* file = fopen(fileName, "r"); Data getdata; PetscInt nlocal; /* gather the input data */ Data_new(file, &getdata); getdata.n = get_ntot(getdata.FAM1, getdata.natom, getdata.isz, getdata.ntrou, getdata.fix_trou1, getdata.fix_trou2); nlocal = getdata.n/getdata.npar; PetscScalar *valxr; PetscInt indxr[nlocal]; char filename[PETSC_MAX_PATH_LEN]="FIL666"; PetscViewer viewer; PetscBool ishermitian; PetscInt kk,ll,mm,nn,iii2,iiii; PetscInt ii; long int iii; long int tcountcol2,tcol[natomax],tcountcol[getdata.nnz]; double val[natomax]; PetscReal xymat=0.0; PetscReal xymat2=0.0; PetscReal xymat3=0.0; PetscReal xymat4=0.0; PetscReal xymatfin=0.0; PetscReal xymatfin2=0.0; PetscReal xymatfin3=0.0; PetscReal xymatfin4=0.0; PetscReal weight3fin = 0.0; PetscReal XS = 0.0; PetscReal XS2 = 0.0; PetscReal XS3 = 0.0; PetscReal XS4 = 0.0; PetscReal W3 = 0.0; PetscReal weight3 = 0.0; PetscReal trace1rdm=0.0; PetscReal trace1rdmfin=0.0; PetscReal trace2rdm=0.0; PetscReal trace2rdmfin=0.0; IS from, to; /* index sets that define the scatter */ PetscInt idx_to[nlocal], idx_from[nlocal]; PetscScalar *values; int ndim=(getdata.natom/2)*((getdata.natom/2)-1)/2; double a, b, c; double gamma_p = 0.0, gamma_m = 0.0; double gamma_pfin = 0.0, gamma_mfin = 0.0; double nel, s2dens; double nelfin, s2densfin; double densmat2[getdata.natom][getdata.natom][getdata.natom][getdata.natom]; memset(densmat2, 0, sizeof(densmat2)); SlepcInitialize(&argc,&argv,(char*)0,NULL); ierr = PetscPrintf(PETSC_COMM_WORLD,"\n1-D t-J Eigenproblem, n=%D\n\n",getdata.n);CHKERRQ(ierr); ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); ierr = MatCreateAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,getdata.n,getdata.n,10*getdata.natom,NULL,10*getdata.natom,NULL,&A);CHKERRQ(ierr); ierr = MatMPIAIJSetPreallocation(A,10*getdata.natom,NULL,10*getdata.natom,NULL);CHKERRQ(ierr); MPI_Comm_rank(MPI_COMM_WORLD,&mpiid); ierr = MatGetOwnershipRange(A,&Istart,&Iend);CHKERRQ(ierr); ierr = PetscTime(&tt1);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD," start: %d end: %d \n",Istart, Iend);CHKERRQ(ierr); for (i=Istart; i0) { ierr = PetscPrintf(PETSC_COMM_WORLD, " k ||Ax-kx||/||kx|| \n" " ----------------- ----------------- ------------------\n");CHKERRQ(ierr); for(i=0;i