subroutine connect c c loads arrays to do ffts on connected domain, c instead of using extensions c implicit none include 'itg.par' include 'itg.cmn' integer jmax,kmax,jshift,jshift0,l(-nz:nz,0:mz),j,k integer t,m,n integer count,jj,i jmax=(nd-1)/2 kmax=md-1 jshift0=(xp+.0001)/z0*(nd-1) if (jshift0.eq.0) jshift0=nz**2 if((x0.ne.xp) .or. (abs(int((x0+.0001)/pi)*pi-x0).gt. 0.001) . .or. (abs(int((xp+.0001)/pi)*pi-xp).gt. 0.001)) then write(*,*) 'failure in connect.f:' write(*,*) ' for iconnect=3, must have x0=xp=pi * integer' call aborter(6,' ') endif c write(*,*) 'jmax=',jmax,' kmax=',kmax,' jshift(k=1)=',jshift0 c c Calculate how many domains are connected by the BC c do j=-jmax,jmax l(j,0)=1 enddo do k=1,kmax jshift=jshift0*k if (lin.eq.1 .and. layout.eq.'linear') jshift=jshift0 do j=-jmax,jmax l(j,k)=(jmax-j)/jshift+(j+jmax)/jshift+1 if (j+jmax.ge.jshift) l(j,k)=0 c if ((j.lt.0).and.(l(j,k).gt.1)) l(j,k)=0 enddo enddo c write(*,*) 'jshift(k=1): ',jshift0 c 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)) c do j=-jmax,jmax c write(*,100) j,(l(j,k),k=0,kmax) c enddo 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).eq.m) then ncon(ndom)=ncon(ndom)+1 scon(ndom)=m if (m.gt.nconz) write(*,*) . 'nconz too small, must be at least ',m if (ndom.gt.ndomz) write(*,*) . 'ndomz too small, must be at least ',ndom endif enddo enddo t=t+ncon(ndom)*m c if (ncon(ndom).ne.0) write(*,101) m,ncon(ndom) c 101 format ('# of connections with m=',i3,': ',i3) if (ncon(ndom).gt.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.eq.1 .and. layout.eq.'linear') jshift=jshift0 if (k.ne.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).eq.scon(i)) then do jj=1,l(j,k) jshift=jshift0*k if (lin.eq.1 .and. layout.eq.'linear') jshift=jshift0 n=1+j+(jj-1)*jshift if (n.lt.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 c 100 format(i5,17(i3)) do j=-jmax,jmax n=1+j if (n.lt.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 c 100 format(i5,17(i3)) do j=-jmax,jmax n=1+j if (n.lt.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 c 100 format(i5,17(i3)) do j=-jmax,jmax n=1+j if (n.lt.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.eq.mcon(m,n)).and.(k.eq.conpos(m,n)).and. . (scon(j).eq.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 c do j=1,ndom c do k=1,ncon(j)*scon(j) c write(*,103) j,k,mmcon(j,k),nncon(j,k) 103 format(i4,i4,' mmcon: ',i4,' nncon: ',i4) c enddo c enddo return end