1*59599516SKenneth E. Jansen subroutine eqn_plane(x, iBC) 2*59599516SKenneth E. Jansenc 3*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 4*59599516SKenneth E. Jansenc This subroutine finds all nodes that are on the inlet plane and all 5*59599516SKenneth E. Jansenc nodes that are on the recycle plane; it also blocks elements that 6*59599516SKenneth E. Jansenc are on recycle plane; all nodes are also stored with cylindrical 7*59599516SKenneth E. Jansenc coordinates; find all father nodes for recycle plane (i.e. for 8*59599516SKenneth E. Jansenc theta = -theta given) 9*59599516SKenneth E. Jansenc 10*59599516SKenneth E. Jansenc input: 11*59599516SKenneth E. Jansenc x (numnp,nsd) : node coordinates 12*59599516SKenneth E. Jansenc 13*59599516SKenneth E. Jansenc output: 14*59599516SKenneth E. Jansenc xcyl (numnp,nsd) : node cylindrical coordinates 15*59599516SKenneth E. Jansenc ien2D (npro, nshl) : connectivity array for recycle plane 16*59599516SKenneth E. Jansenc assuming tethraheadral elements, i.e. 17*59599516SKenneth E. Jansenc triangular elements on face 18*59599516SKenneth E. Jansenc 19*59599516SKenneth E. Jansenc 20*59599516SKenneth E. Jansenc Elaine Bohr 21*59599516SKenneth E. Jansenc June 2002 22*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 23*59599516SKenneth E. Jansenc 24*59599516SKenneth E. Jansen use spebc 25*59599516SKenneth E. Jansen use pointer_data 26*59599516SKenneth E. Jansen include "common.h" 27*59599516SKenneth E. Jansen include "mpif.h" 28*59599516SKenneth E. Jansen include "auxmpi.h" 29*59599516SKenneth E. Jansenc 30*59599516SKenneth E. Jansen dimension x(numnp,nsd), nrin(numnp), 31*59599516SKenneth E. Jansen & xA(nsd), xB(nsd), xC(nsd), xD(nsd), fourth(nsd), 32*59599516SKenneth E. Jansen & erreur(nshl), iBC(numnp), xtmp(nsd) 33*59599516SKenneth E. Jansen 34*59599516SKenneth E. Jansen integer temp, tempb, etmp 35*59599516SKenneth E. Jansen 36*59599516SKenneth E. Jansen integer, allocatable :: ien(:,:) 37*59599516SKenneth E. Jansen integer, allocatable :: ienb(:,:) 38*59599516SKenneth E. Jansen 39*59599516SKenneth E. Jansen 40*59599516SKenneth E. Jansenc 41*59599516SKenneth E. Jansenc .... find all nodes on inlet plane 42*59599516SKenneth E. Jansenc 43*59599516SKenneth E. Jansen j = 0 44*59599516SKenneth E. Jansen do i=1,numnp 45*59599516SKenneth E. Jansen if(btest(iBC(i),11)) then 46*59599516SKenneth E. Jansen j = j + 1 47*59599516SKenneth E. Jansen nen1(j) = i 48*59599516SKenneth E. Jansen endif 49*59599516SKenneth E. Jansen enddo 50*59599516SKenneth E. Jansen npin = j 51*59599516SKenneth E. Jansen 52*59599516SKenneth E. Jansenc 53*59599516SKenneth E. Jansenc .... find one element and its vertices on inlet plane 54*59599516SKenneth E. Jansenc 55*59599516SKenneth E. Jansen do iblk=1,nelblb 56*59599516SKenneth E. Jansen iel=lcblkb(1,iblk) 57*59599516SKenneth E. Jansen nenl=lcblkb(5,iblk) 58*59599516SKenneth E. Jansen nenlb=lcblkb(6,iblk) 59*59599516SKenneth E. Jansen nshl=lcblkb(9,iblk) 60*59599516SKenneth E. Jansen nshlb=lcblkb(10,iblk) 61*59599516SKenneth E. Jansen npro=lcblkb(1,iblk+1)-iel 62*59599516SKenneth E. Jansen 63*59599516SKenneth E. Jansen 64*59599516SKenneth E. Jansen allocate (ienb(npro,nshl)) 65*59599516SKenneth E. Jansen 66*59599516SKenneth E. Jansen ienb(:,:)=mienb(iblk)%p(:,:) 67*59599516SKenneth E. Jansen do i=1,npro 68*59599516SKenneth E. Jansen inum=i 69*59599516SKenneth E. Jansen tempb=0 70*59599516SKenneth E. Jansen do k=1,nshlb 71*59599516SKenneth E. Jansen do j=1,npin 72*59599516SKenneth E. Jansen if (ienb(i,k).eq.nen1(j)) then 73*59599516SKenneth E. Jansen tempb=tempb+1 74*59599516SKenneth E. Jansen endif 75*59599516SKenneth E. Jansen enddo 76*59599516SKenneth E. Jansen enddo 77*59599516SKenneth E. Jansen if (tempb.eq.3) then 78*59599516SKenneth E. Jansen xA(:) = x(ienb(inum,1),:) 79*59599516SKenneth E. Jansen xB(:) = x(ienb(inum,2),:) 80*59599516SKenneth E. Jansen xC(:) = x(ienb(inum,3),:) 81*59599516SKenneth E. Jansen xD(:) = x(ienb(inum,4),:) 82*59599516SKenneth E. Jansen deallocate (ienb) 83*59599516SKenneth E. Jansen goto 92 84*59599516SKenneth E. Jansen endif 85*59599516SKenneth E. Jansen enddo 86*59599516SKenneth E. Jansen deallocate (ienb) 87*59599516SKenneth E. Jansen enddo 88*59599516SKenneth E. Jansen 92 continue 89*59599516SKenneth E. Jansen 90*59599516SKenneth E. Jansenc 91*59599516SKenneth E. Jansenc .... find normal to inlet plane 92*59599516SKenneth E. Jansenc 93*59599516SKenneth E. Jansen xnrml = (xB(2) - xA(2)) * (xC(3) - xA(3)) 94*59599516SKenneth E. Jansen & - (xB(3) - xA(3)) * (xC(2) - xA(2)) 95*59599516SKenneth E. Jansen 96*59599516SKenneth E. Jansen ynrml = (xB(3) - xA(3)) * (xC(1) - xA(1)) 97*59599516SKenneth E. Jansen & - (xB(1) - xA(1)) * (xC(3) - xA(3)) 98*59599516SKenneth E. Jansen 99*59599516SKenneth E. Jansen znrml = (xB(1) - xA(1)) * (xC(2) - xA(2)) 100*59599516SKenneth E. Jansen & - (xB(2) - xA(2)) * (xC(1) - xA(1)) 101*59599516SKenneth E. Jansen 102*59599516SKenneth E. Jansen tmp = xnrml*xnrml + ynrml*ynrml + znrml*znrml 103*59599516SKenneth E. Jansen tmp = sqrt(tmp) 104*59599516SKenneth E. Jansen 105*59599516SKenneth E. Jansen xnrml = xnrml/tmp 106*59599516SKenneth E. Jansen ynrml = ynrml/tmp 107*59599516SKenneth E. Jansen znrml = znrml/tmp 108*59599516SKenneth E. Jansen 109*59599516SKenneth E. Jansen fourth(:) = xD(:) - xA(:) 110*59599516SKenneth E. Jansen scal = xnrml*fourth(1) + ynrml*fourth(2) + znrml*fourth(3) 111*59599516SKenneth E. Jansen 112*59599516SKenneth E. Jansen if (scal .lt. 0.0) then 113*59599516SKenneth E. Jansen xnrml = -1.0*xnrml 114*59599516SKenneth E. Jansen ynrml = -1.0*ynrml 115*59599516SKenneth E. Jansen znrml = -1.0*znrml 116*59599516SKenneth E. Jansen endif 117*59599516SKenneth E. Jansen 118*59599516SKenneth E. Jansenc 119*59599516SKenneth E. Jansenc .... find the equation of internal plane 120*59599516SKenneth E. Jansenc equation of plane given by: 121*59599516SKenneth E. Jansenc (xn)x + (yn)y + (zn)z = a 122*59599516SKenneth E. Jansenc 123*59599516SKenneth E. Jansen aI = xnrml*xA(1)+ynrml*xA(2)+znrml*xA(3) 124*59599516SKenneth E. Jansenc aR = xnrml*xA(1)+ynrml*xA(2)+znrml*(xA(3)+rcydist) 125*59599516SKenneth E. Jansen aR = aI + plandist 126*59599516SKenneth E. Jansen if (thetag.eq.0.0) then 127*59599516SKenneth E. Jansen sang = 1.0 128*59599516SKenneth E. Jansen else 129*59599516SKenneth E. Jansen angle = atan2(znrml,sqrt(xnrml*xnrml+ynrml*ynrml)) 130*59599516SKenneth E. Jansen sang = sin(angle) 131*59599516SKenneth E. Jansen endif 132*59599516SKenneth E. Jansen 133*59599516SKenneth E. Jansenc 134*59599516SKenneth E. Jansenc .... blocking elements cutting the recycle plane 135*59599516SKenneth E. Jansenc 136*59599516SKenneth E. Jansen itmp = lcblk(1,nelblk+1) 137*59599516SKenneth E. Jansen allocate (ien2D(itmp,4)) 138*59599516SKenneth E. Jansen nelint=0 139*59599516SKenneth E. Jansen do iblk=1,nelblk 140*59599516SKenneth E. Jansen iel=lcblk(1,iblk) 141*59599516SKenneth E. Jansen nenl=lcblk(5,iblk) 142*59599516SKenneth E. Jansen nshl=lcblk(10,iblk) 143*59599516SKenneth E. Jansen npro=lcblk(1,iblk+1)-iel 144*59599516SKenneth E. Jansen 145*59599516SKenneth E. Jansen allocate (ien(npro,nshl)) 146*59599516SKenneth E. Jansen 147*59599516SKenneth E. Jansen ien(:,:)=mien(iblk)%p(:,:) 148*59599516SKenneth E. Jansen 149*59599516SKenneth E. Jansen do i=1,npro 150*59599516SKenneth E. Jansen inum=iel+i-1 151*59599516SKenneth E. Jansen 152*59599516SKenneth E. Jansen temp=0 153*59599516SKenneth E. Jansen do k=1,nshl 154*59599516SKenneth E. Jansen erreur(k) = aR - xnrml*x(ien(i,k),1) 155*59599516SKenneth E. Jansen & - ynrml*x(ien(i,k),2) - znrml*x(ien(i,k),3) 156*59599516SKenneth E. Jansen enddo 157*59599516SKenneth E. Jansen 158*59599516SKenneth E. Jansen do j=1,nshl 159*59599516SKenneth E. Jansen do l=j,nshl 160*59599516SKenneth E. Jansen if (erreur(j)*erreur(l).le. 0.0) then 161*59599516SKenneth E. Jansen nelint=nelint+1 162*59599516SKenneth E. Jansen ien2D(nelint,:) = ien(i,:) 163*59599516SKenneth E. Jansen goto 95 164*59599516SKenneth E. Jansen endif 165*59599516SKenneth E. Jansen enddo 166*59599516SKenneth E. Jansen enddo 167*59599516SKenneth E. Jansen 95 continue 168*59599516SKenneth E. Jansen enddo 169*59599516SKenneth E. Jansen deallocate (ien) 170*59599516SKenneth E. Jansen 171*59599516SKenneth E. Jansen enddo 172*59599516SKenneth E. Jansen 173*59599516SKenneth E. Jansen 174*59599516SKenneth E. Jansenc 175*59599516SKenneth E. Jansenc .... For each node of inlet plane find the corresponding element 176*59599516SKenneth E. Jansenc and local coordinates on recycle plane 177*59599516SKenneth E. Jansenc 178*59599516SKenneth E. Jansen allocate (xintl(nelint,nshl,nsd)) 179*59599516SKenneth E. Jansen do i = 1, nelint 180*59599516SKenneth E. Jansen xintl(i,:,1) = x(ien2D(i,:),1) 181*59599516SKenneth E. Jansen xintl(i,:,2) = x(ien2D(i,:),2) 182*59599516SKenneth E. Jansen xintl(i,:,3) = x(ien2D(i,:),3) 183*59599516SKenneth E. Jansen enddo 184*59599516SKenneth E. Jansen 185*59599516SKenneth E. Jansen if (thetag .eq. 0.0) then 186*59599516SKenneth E. Jansen call renum_cart(x) 187*59599516SKenneth E. Jansen else 188*59599516SKenneth E. Jansen call renum_cyl(x) 189*59599516SKenneth E. Jansen endif 190*59599516SKenneth E. Jansen 191*59599516SKenneth E. Jansen return 192*59599516SKenneth E. Jansen end 193