subroutine connect ! ! loads arrays to do ffts on connected domain, ! instead of using extensions ! use itg_data implicit none integer :: jmax,kmax,jshift,jshift0 integer, allocatable, dimension(:,:) :: l integer :: t, m, n, count, jj, i, j, k, ncon_tmp allocate (l(-nd:nd,0:md)) allocate (conpos(md, nd), mcon(md, nd), icon(md, nd)) jmax=(nd-1)/2 kmax=md-1 jshift0=(xp+.0001)/z0*(nd-1) ! if (jshift0 == 0) jshift0=nz**2 if (jshift0 == 0) jshift0=nd**2 if((x0 /= xp) .or. (abs(int((x0+.0001)/pi)*pi-x0) > 0.001) & .or. (abs(int((xp+.0001)/pi)*pi-xp) > 0.001)) then write(*,*) 'failure in connect.f:' write(*,*) ' for iconnect=3, must have x0=xp=pi * integer' call aborter(6,' ') endif ! write(*,*) 'jmax=',jmax,' kmax=',kmax,' jshift(k=1)=',jshift0 ! ! Calculate how many domains are connected by the BC ! do j=-jmax,jmax l(j,0)=1 enddo do k=1,kmax jshift=jshift0*k if (lin == 1 .and. layout == 'linear') jshift=jshift0 do j=-jmax,jmax l(j,k)=(jmax-j)/jshift+(j+jmax)/jshift+1 if (j+jmax >= jshift) l(j,k)=0 ! if ((j < 0).and.(l(j,k) > 1)) l(j,k)=0 enddo enddo ! write(*,*) 'jshift(k=1): ',jshift0 ! write(*,100) 0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 100 format(i5,17(i3)) ! do j=-jmax,jmax ! write(*,100) j,(l(j,k),k=0,kmax) ! enddo nconz = 1 ndomz = 1 ndom=1 do m=1,jmax*2+1 ncon_tmp=0 do k=0,kmax do j=-jmax,jmax if (l(j,k) == m) then ncon_tmp=ncon_tmp+1 nconz = max(nconz, m) ndomz = max(ndomz, ndom) endif enddo enddo if (ncon_tmp > 0) ndom=ndom+1 enddo allocate (nncon(ndomz, md*nd), mmcon(ndomz, md*nd)) allocate (ncon(ndomz), scon(ndomz)) t=0 ndom=1 do m=1,jmax*2+1 ncon(ndom)=0 do k=0,kmax do j=-jmax,jmax if (l(j,k) == m) then ncon(ndom)=ncon(ndom)+1 scon(ndom)=m if (m > nconz) write(*,*) 'nconz too small, must be at least ',m if (ndom > ndomz) write(*,*) 'ndomz too small, must be at least ',ndom endif enddo enddo t=t+ncon(ndom)*m ! if (ncon(ndom) /= 0) write(*,101) m,ncon(ndom) ! 101 format ('# of connections with m=',i3,': ',i3) if (ncon(ndom) > 0) ndom=ndom+1 enddo ndom=ndom-1 write(*,*) 'total # of domains: ',ndom write(*,102) t,(2*jmax+1)*(kmax+1) 102 format('Total modes accounted for: ',i4,'=(2*jmax+1)*(kmax+1)=',i4) do n=1,nd do m=1,md j=nrr(n) k=mrr(m,n) mcon(m,n)=0 jshift=jshift0*k if (lin == 1 .and. layout == 'linear') jshift=jshift0 if (k /= 0) then icon(m,n)=(jmax-j)/jshift+(j+jmax)/jshift+1 conpos(m,n)=1+(jmax-j)/jshift else icon(m,n)=1 conpos(m,n)=1 endif enddo enddo do i=1,ndom count=1 do k=0,md-1 do j=-jmax,jmax if (l(j,k) == scon(i)) then do jj=1,l(j,k) jshift=jshift0*k if (lin == 1 .and. layout == 'linear') jshift=jshift0 n=1+j+(jj-1)*jshift if (n < 1) n=n+nd mcon(k+1,n)=count enddo count=count+1 endif enddo enddo enddo goto 7 write(*,*) 'conpos(m,n)' write(*,100) 0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ! 100 format(i5,17(i3)) do j=-jmax,jmax n=1+j if (n < 1) n=n+nd write(*,100) j,(conpos(m,n),m=1,md) enddo write(*,*) 'icon(m,n)' write(*,100) 0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ! 100 format(i5,17(i3)) do j=-jmax,jmax n=1+j if (n < 1) n=n+nd write(*,100) j,(icon(m,n),m=1,md) enddo write(*,*) 'mcon(m,n)' write(*,100) 0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ! 100 format(i5,17(i3)) do j=-jmax,jmax n=1+j if (n < 1) n=n+nd write(*,100) j,(mcon(m,n),m=1,md) enddo write(*,*) 'ndom=',ndom do j=1,ndom write(*,*) j,' ncon(j)=',ncon(j),' scon(j)=',scon(j) enddo 7 continue do j=1,ndom do i=1,ncon(j) do k=1,scon(j) do m=1,md do n=1,nd if ((i == mcon(m,n)).and.(k == conpos(m,n)).and. & (scon(j) == icon(m,n))) then mmcon(j,k+(i-1)*scon(j))=m nncon(j,k+(i-1)*scon(j))=n endif enddo enddo enddo enddo enddo ! do j=1,ndom ! do k=1,ncon(j)*scon(j) ! write(*,103) j,k,mmcon(j,k),nncon(j,k) !103 format(i4,i4,' mmcon: ',i4,' nncon: ',i4) ! enddo ! enddo deallocate (l) end subroutine connect