subroutine Global_system(BcinvAc,Ks,ncolFg,ncolBg,ncolAg) integer i,j,k,l,m,n,ncolFg,ncolBg,ncolAg,nlines,lin,col,lda,ldb, 1 ldc,nzeros,ndof double precision, allocatable :: Bc(:,:),Ac(:,:),Matrix(:,:) double precision alpha,betta,sparsity1,sparsity2 double precision BcinvAc(ncolFg+ncolAg,ncolBg),Ks(ncolBg,ncolBg) !double precision Global(ncolFg+ncolBg+ncolAg,ncolFg+ncolBg+ncolAg) character(len=255) :: cwd,Svdegchar,Uvdegchar,Usdegchar, 1 dirname,benchchar,filename double precision Mg(ncolBg,ncolBg) ! double precision Fg(ncolFg,ncolFg),Bg(ncolFg,ncolBg), ! 1 Mg(ncolBg,ncolBg),Ag(ncolFg,ncolAg), ! 1 Agt(ncolAg,ncolFg),Ac(ncolFg+ncolAg,ncolBg), ! 1 Bc(ncolFg+ncolAg,ncolFg+ncolAg), ! 1 Bcinv(ncolFg+ncolAg,ncolFg+ncolAg), ! 1 Act(ncolBg,ncolFg+ncolAg), ! 1 ActBcinv(ncolBg,ncolFg+ncolAg), ! 1 Ks(ncolBg,ncolBg) nlines=100000000 !ndof=ncolFg+ncolAg+ncolBg !allocate(Matrix(ndof,ndof)) !do i=1,ndof ! do j=1,ndof ! Matrix(i,j)=0.0 ! enddo !enddo !open(unit=100,file='Matrix.dat') !do i=1,nlines ! read(100,'(2i8,e14.6)',END=101,ERR=101) lin,col,Matrix(lin,col) !enddo ! 101 !close(100) !do i=1,ndof ! do j=1,ndof ! if(i.gt.j) then ! Matrix(i,j)=Matrix(j,i) ! endif ! enddo !enddo !nzeros=0 !do i=1,ndof ! do j=1,ndof ! if(abs(Matrix(i,j)).lt.1.0e-12) then ! nzeros=nzeros+1 ! endif ! enddo !enddo !write(*,*) nzeros !write(*,*) ndof**2 !sparsity1=nzeros/(1.0*ndof**2) !write(*,*) sparsity1 !deallocate(Matrix) ! defining the Matrix [Bc] = |Fg -Ag| ! |-Ag^T 0 | allocate(Bc(ncolFg+ncolAg,ncolFg+ncolAg)) do i=1,ncolFg+ncolAg do j=1,ncolFg+ncolAg Bc(i,j)=0.0 enddo enddo open(unit=100,file='Bc.dat') do i=1,nlines read(100,'(2i8,e14.6)',END=102,ERR=102) lin,col,Bc(lin,col) enddo 102 close(100) do i=1,ncolFg+ncolAg do j=1,ncolFg+ncolAg if(i.gt.j) then Bc(i,j)=Bc(j,i) endif enddo enddo ! Inverse of Bc !pause call Matrix_inverse(Bc,ncolFg+ncolAg,ncolFg+ncolAg) !pause !allocate(Bcinv(ncolFg+ncolAg,ncolFg+ncolAg)) !Bcinv=Bc allocate(Ac(ncolFg+ncolAg,ncolBg)) ! defining the Matrix [Ac] = |Bg| ! |0 | do i=1,ncolFg+ncolAg do j=1,ncolBg Ac(i,j)=0.0 enddo enddo open(unit=100,file='Ac.dat') do i=1,nlines read(100,'(2i8,e14.6)',END=103,ERR=103) lin,col,Ac(lin,col) enddo 103 close(100) do i=1,ncolFg+ncolAg do j=1,ncolBg BcinvAc(i,j)=0.0 enddo enddo m=ncolFg+ncolAg n=ncolBg k=m lda=m ldb=m ldc=m alpha=1.0 betta=0.0 !pause call dgemm('N','N',m,n,k,alpha,Bc,lda,Ac,ldb,betta,BcinvAc,ldc) !pause !BcinvAc=matmul(Bc,Ac) !open(unit=100,file='BcinvAc.dat') !do i=1,ncolFg+ncolAg ! write(100,*) (BcinvAc(i,j),j=1,ncolBg) !enddo !close(100) !pause !deallocate(Bcinv) !allocate(Act(ncolBg,ncolFg+ncolAg)) !Act=transpose(Ac) deallocate(Bc) m=ncolBg n=ncolBg k=ncolFg+ncolAg lda=k ldb=k ldc=m alpha=1.0 betta=0.0 call dgemm('T','N',m,n,k,alpha,Ac,lda,BcinvAc,ldb,betta,Ks,ldc) !nzeros=0 !do i=1,ncolBg ! do j=1,ncolBg ! if(abs(Ks(i,j)).lt.1.0e-15) then ! nzeros=nzeros+1 ! endif ! enddo !enddo !sparsity2=nzeros/(1.0*ncolBg*ncolBg) !write(*,*) sparsity2 return end