static char help[]="eps"; #include #include #include <../src/mat/impls/sbaij/seq/sbaij.h> #include #include #include #include #include #include "../src/tao/pde_constrained/impls/lcl/lcl.h" #include #include "mpi.h" extern PetscErrorCode CkEigenSolutions(PetscInt*,Mat*,PetscReal*,Vec*,PetscInt*,PetscInt*,PetscReal*); extern PetscErrorCode FormElementStiffness_idx0(PetscScalar,PetscScalar,PetscScalar,PetscScalar,PetscScalar*); extern PetscErrorCode FormElementStiffness(PetscScalar,PetscScalar,PetscScalar,PetscScalar,PetscScalar*); extern PetscErrorCode FormElementMass_idx0(PetscScalar, PetscScalar, PetscScalar, PetscScalar, PetscScalar*); extern PetscErrorCode FormElementMass(PetscScalar, PetscScalar, PetscScalar, PetscScalar, PetscScalar*); extern PetscErrorCode FormRandomElementStiffness(PetscScalar, PetscScalar, PetscScalar, PetscScalar, PetscScalar*); #undef __FUNCT__ #define __FUNCT__ "main" int main(int argc,char **args) { Mat K,M,DM,DK,ME,KE,Phi,TPhi,P,disp,vel,acc,f,invM,Kcap,a,b,invKcap,U,mmtop,kktop,a2DM; Vec Iv,*Cv,xr,xi,delpe; Vec random,P0,P1,P2,Pans,dKcap,delp,delu,delv,dela,v1,v1a3,acc1a5,v2,*av1,bacc1,v1a4,acc1a6,a1delu,a2delu,disp1,disp2,acc1,acc2/*(intial condition vector of acceleration)*/; char file1[PETSC_MAX_PATH_LEN],file2[PETSC_MAX_PATH_LEN]; /* input file name */ PetscBool flg,flgB=PETSC_FALSE; PetscErrorCode ierr; PetscRandom rnd; PetscBool preload=PETSC_TRUE,isSymmetric,evecs,isHermitian,isGeneralized,isPositive,*aK; PetscScalar *arrayK,*arrayM,*evecs_array,kr,ki,re,im,*axr; PetscMPIInt size,rank; PetscInt i,j,z,k,nev,il,iu,r,trial=1,change; PetscInt maxit,its,lits,nconv,nini=1,ncon=0,S=100000,Dim=100000; PetscLogStage stages[2]; PetscReal vl,vu,abstol=1.e-8; PetscScalar Matlab_E,freq[Dim],total[Dim],average[Dim],REV[trial],Xr[Dim]; PetscInt t,/*n=5,m=2*/id[1],idx[6],IDX[3],index[1],idxmcsn[Dim],idxmcsm[1],idxrandom[trial],idx1[Dim],idxnt[1000],rows[Dim],one[1],istart,iend,nrows; /*S = (n+1)*(m);*/ ST st; EPS eps; EPSType type; PetscScalar Ke[16], Me[16],K0[4],M0[4]; PetscScalar width = 25.65/1000; /*25.65 mm */ PetscScalar depth = 3.25/1000; /* 3.25 mm */ PetscScalar Area = width*depth, rho = 2662; /*2662 kg/m3*/ PetscScalar Tlel =.31; /*length of the beam*/ PetscScalar lel = Tlel/5; /*length of each element*/ PetscScalar I = width*depth*depth*depth/12; /*moment of inertia*/ PetscScalar E = 50000000000,En; /*Modulus of elasticity*/ PetscViewer fd1,fd2,fd3,viewer; PetscReal tol; /*parameters used in Newmarks method*/ PetscScalar value[1000],*aP0,*aDM,*aDK,*aa,*ab,*aKcap,*aav1,*abacc1,*aP2,*adelp,*adelu,*av1a3,*av1a4,*aacc1a5,*aacc1a6,*adelv,*adela,*aa1delu,*aa2delu,*adisp1,*adisp2,*arv1,*arv2,*aacc1,*aacc2; PetscScalar ainvKcap[S],*adKcap; PetscScalar gaama=1/2,beta=1/4,dt=.01,tt=1000,a1=200,a2= 40000,a3=400,a4= 2,a5= 2,a6=0; SlepcInitialize(&argc,&args,(char*)0,help); ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRQ(ierr); ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); /*Setting up socket connection for Petsc-Matlab interfacing*/ /*fd1 = PETSC_VIEWER_SOCKET_WORLD; /*fd2 = PETSC_VIEWER_SOCKET_2; /*fd3 = PETSC_VIEWER_SOCKET_3; PetscViewerSocketOpen(PETSC_COMM_WORLD,"NULL",PETSC_DEFAULT,&fd1);*/ /*PetscViewerSocketOpen(PETSC_COMM_WORLD,"NULL",PETSC_DEFAULT,&fd3); /*if matrices are to be read from the file*/ /*ierr = PetscOptionsGetString(NULL,"-file1",file1,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD," Reading Real 'Mass' matrix from a binary file...\n");CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,file1,FILE_MODE_READ,&viewer);CHKERRQ(ierr);*/ /*ierr = MatCreate(PETSC_COMM_WORLD,&mmtop);CHKERRQ(ierr); ierr = MatLoad(mmtop,fd1);CHKERRQ(ierr); /*ierr = MatView(mmtop,fd1);CHKERRQ(ierr); /*ierr = MatSetFromOptions(Mfile);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr);*/ /*ierr = PetscOptionsGetString(NULL,"-file2",file2,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD," Reading Real 'Stiffness' matrix from a binary file...\n");CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,file2,FILE_MODE_READ,&fd);CHKERRQ(ierr);*/ /*PetscViewerSocketOpen(PETSC_COMM_WORLD,"NULL",PETSC_DEFAULT,&fd2); */ /*ierr = MatCreate(PETSC_COMM_WORLD,&kktop);CHKERRQ(ierr); ierr = MatLoad(kktop,fd1);CHKERRQ(ierr); /*ierr = MatView(kktop,fd1);CHKERRQ(ierr); /*ierr = MatSetFromOptions(Kfile);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr);*/ PetscRandomCreate(PETSC_COMM_WORLD,&rnd); PetscRandomSetType(rnd,PETSCRAND48); PetscRandomSetFromOptions(rnd); for(i=0;i