1*59599516SKenneth E. Jansen subroutine renum_cyl(x) 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. Jansenc 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), nula(numnp), 31*59599516SKenneth E. Jansen & erreur(nshl), xtmp(nsd) 32*59599516SKenneth E. Jansen 33*59599516SKenneth E. Jansen integer temp, etmp, s 34*59599516SKenneth E. Jansen 35*59599516SKenneth E. Jansen 36*59599516SKenneth E. Jansen real*8, allocatable :: xrtmp(:) 37*59599516SKenneth E. Jansen 38*59599516SKenneth E. Jansen 39*59599516SKenneth E. Jansenc thetag = thetag/180.0*pi 40*59599516SKenneth E. Jansen 41*59599516SKenneth E. Jansen 42*59599516SKenneth E. Jansenc 43*59599516SKenneth E. Jansenc .... changing to cylindrical coordinate system for nodal point 44*59599516SKenneth E. Jansenc 45*59599516SKenneth E. Jansen 46*59599516SKenneth E. Jansen xcyl(:,1) = sqrt(x(:,1)*x(:,1) + x(:,2)*x(:,2)) 47*59599516SKenneth E. Jansen 48*59599516SKenneth E. Jansen j = 0 49*59599516SKenneth E. Jansen do i=1,numnp 50*59599516SKenneth E. Jansen if ((x(i,1).eq.0).and.(x(i,2).eq.0)) then 51*59599516SKenneth E. Jansen j = j+1 52*59599516SKenneth E. Jansen nula(j) = i 53*59599516SKenneth E. Jansen else 54*59599516SKenneth E. Jansen xcyl(i,2) = atan2(x(i,2),x(i,1)) 55*59599516SKenneth E. Jansen endif 56*59599516SKenneth E. Jansen enddo 57*59599516SKenneth E. Jansen xcyl(:,3) = x(:,3) 58*59599516SKenneth E. Jansen 59*59599516SKenneth E. Jansen 60*59599516SKenneth E. Jansenc 61*59599516SKenneth E. Jansenc .... finding the minimum and maximum angles 62*59599516SKenneth E. Jansenc 63*59599516SKenneth E. Jansen 64*59599516SKenneth E. Jansen thmin = xcyl(nen1(1),2) 65*59599516SKenneth E. Jansen thmax = xcyl(nen1(1),2) 66*59599516SKenneth E. Jansen do i=2,npin 67*59599516SKenneth E. Jansen if((x(nen1(i),1).eq.0).and.(x(nen1(i),2).eq.0)) then 68*59599516SKenneth E. Jansen goto 10 69*59599516SKenneth E. Jansen else 70*59599516SKenneth E. Jansen if(thmin.gt.xcyl(nen1(i),2)) thmin = xcyl(nen1(i),2) 71*59599516SKenneth E. Jansen if(thmax.lt.xcyl(nen1(i),2)) thmax = xcyl(nen1(i),2) 72*59599516SKenneth E. Jansen endif 73*59599516SKenneth E. Jansen 10 continue 74*59599516SKenneth E. Jansen enddo 75*59599516SKenneth E. Jansen 76*59599516SKenneth E. Jansen do i=1,j 77*59599516SKenneth E. Jansen xcyl(nula(i),2) = thmin 78*59599516SKenneth E. Jansen enddo 79*59599516SKenneth E. Jansen 80*59599516SKenneth E. Jansen 81*59599516SKenneth E. Jansenc 82*59599516SKenneth E. Jansenc .... Finding nodes from inlet plane with same theta given 83*59599516SKenneth E. Jansenc 84*59599516SKenneth E. Jansen 85*59599516SKenneth E. Jansen j = 0 86*59599516SKenneth E. Jansen do i=1,npin 87*59599516SKenneth E. Jansen error1 = abs(xcyl(nen1(i),2) - thmin) 88*59599516SKenneth E. Jansen if(error1.le.0.00001) then 89*59599516SKenneth E. Jansen j = j + 1 90*59599516SKenneth E. Jansen nrin(j)=nen1(i) 91*59599516SKenneth E. Jansen endif 92*59599516SKenneth E. Jansen enddo 93*59599516SKenneth E. Jansen nfin = j 94*59599516SKenneth E. Jansen allocate(xrtmp(nfin)) 95*59599516SKenneth E. Jansen do i=1,nfin 96*59599516SKenneth E. Jansen xrtmp(i) = xcyl(nrin(i),1) 97*59599516SKenneth E. Jansen enddo 98*59599516SKenneth E. Jansen 99*59599516SKenneth E. Jansenc 100*59599516SKenneth E. Jansenc .... Ordering nrin by decreasing radius 101*59599516SKenneth E. Jansenc 102*59599516SKenneth E. Jansen j = 0 103*59599516SKenneth E. Jansen allocate (nrint(nfin)) 104*59599516SKenneth E. Jansen 105*59599516SKenneth E. Jansen radinl = xcyl(nrin(1),1) 106*59599516SKenneth E. Jansen do i=1,nfin 107*59599516SKenneth E. Jansen if (radinl.lt.xcyl(nrin(i),1)) radinl = xcyl(nrin(i),1) 108*59599516SKenneth E. Jansen rmaxtemp=xrtmp(1) 109*59599516SKenneth E. Jansen itmp = 1 110*59599516SKenneth E. Jansen do k=2,nfin 111*59599516SKenneth E. Jansen if (rmaxtemp.le.xrtmp(k)) then 112*59599516SKenneth E. Jansen rmaxtemp = xrtmp(k) 113*59599516SKenneth E. Jansen itmp = k 114*59599516SKenneth E. Jansen endif 115*59599516SKenneth E. Jansen enddo 116*59599516SKenneth E. Jansen if (radcyl.ge.xrtmp(itmp)) then 117*59599516SKenneth E. Jansen j = j + 1 118*59599516SKenneth E. Jansen nrint(j)=nrin(itmp) 119*59599516SKenneth E. Jansen endif 120*59599516SKenneth E. Jansen xrtmp(itmp) = -1 121*59599516SKenneth E. Jansen enddo 122*59599516SKenneth E. Jansen nfint = j 123*59599516SKenneth E. Jansen 124*59599516SKenneth E. Jansen deallocate(xrtmp) 125*59599516SKenneth E. Jansen 126*59599516SKenneth E. Jansenc 127*59599516SKenneth E. Jansenc .... off wall coordinate for the inlet plane 128*59599516SKenneth E. Jansenc 129*59599516SKenneth E. Jansen do i=1,npin 130*59599516SKenneth E. Jansen xynin(i) = (radinl - xcyl(nen1(i),1))/sang 131*59599516SKenneth E. Jansen enddo 132*59599516SKenneth E. Jansen 133*59599516SKenneth E. Jansenc 134*59599516SKenneth E. Jansenc .... off wall coordinate for the virtual points on recycle plane 135*59599516SKenneth E. Jansenc 136*59599516SKenneth E. Jansen 137*59599516SKenneth E. Jansen do i=1,nfint 138*59599516SKenneth E. Jansen xyn(i) = (radcyl - xcyl(nrint(i),1))/sang 139*59599516SKenneth E. Jansen enddo 140*59599516SKenneth E. Jansen 141*59599516SKenneth E. Jansenc 142*59599516SKenneth E. Jansenc .... Finding corresponding elements and local coordinates 143*59599516SKenneth E. Jansenc on recycle plane for every arc with radius from nrint 144*59599516SKenneth E. Jansenc 145*59599516SKenneth E. Jansen s = (thmax-thmin)*radcyl/ds 146*59599516SKenneth E. Jansen allocate (xsinfin(nfint,s+1,nsd)) 147*59599516SKenneth E. Jansen allocate (elcnfin(nfint,s+1)) 148*59599516SKenneth E. Jansen allocate (imax(nfint)) 149*59599516SKenneth E. Jansen 150*59599516SKenneth E. Jansen do jj = 1, nfint 151*59599516SKenneth E. Jansen 152*59599516SKenneth E. Jansen xts1 = x(nrint(jj),1) !*cos(xcyl(nrint(jj),2)+tolerence) 153*59599516SKenneth E. Jansen xts2 = x(nrint(jj),2) !*sin(xcyl(nrint(jj),2)+tolerence) 154*59599516SKenneth E. Jansen xts3 = x(nrint(jj),3) + plandist 155*59599516SKenneth E. Jansen call elem_search(xintl, xts1, xts2, xts3, 156*59599516SKenneth E. Jansen & xtmp(:), etmp, 1) 157*59599516SKenneth E. Jansen xsinfin(jj,1,:) = xtmp(:) 158*59599516SKenneth E. Jansen elcnfin(jj,1) = etmp 159*59599516SKenneth E. Jansen imax(jj) = (thmax-thmin)*xcyl(nrint(jj),1)/ds 160*59599516SKenneth E. Jansen do i=1,imax(jj) 161*59599516SKenneth E. Jansen if ( xcyl(nrint(jj),1) .eq. radcyl) then 162*59599516SKenneth E. Jansen xts1 = (xcyl(nrint(jj),1)-tolerence) 163*59599516SKenneth E. Jansen & *cos(1.0*i/imax(jj)*(thmax-thmin)+thmin) 164*59599516SKenneth E. Jansen xts2 = (xcyl(nrint(jj),1)-tolerence) 165*59599516SKenneth E. Jansen & *sin(1.0*i/imax(jj)*(thmax-thmin)+thmin) 166*59599516SKenneth E. Jansen else 167*59599516SKenneth E. Jansenc reel=i*ds/xcyl(nrint(jj),1) 168*59599516SKenneth E. Jansen xts1 = xcyl(nrint(jj),1) 169*59599516SKenneth E. Jansen & *cos(1.0*i/imax(jj)*(thmax-thmin)+thmin) 170*59599516SKenneth E. Jansen xts2 = xcyl(nrint(jj),1) 171*59599516SKenneth E. Jansen & *sin(1.0*i/imax(jj)*(thmax-thmin)+thmin) 172*59599516SKenneth E. Jansen endif 173*59599516SKenneth E. Jansen xts3 = x(nrint(jj),3) + plandist 174*59599516SKenneth E. Jansen call elem_search(xintl, xts1, xts2, xts3, 175*59599516SKenneth E. Jansen & xtmp(:), etmp, 1) 176*59599516SKenneth E. Jansen xsinfin(jj,1+i,:) = xtmp(:) 177*59599516SKenneth E. Jansen elcnfin(jj,1+i) = etmp 178*59599516SKenneth E. Jansen enddo 179*59599516SKenneth E. Jansen enddo 180*59599516SKenneth E. Jansen 181*59599516SKenneth E. Jansen return 182*59599516SKenneth E. Jansen end 183*59599516SKenneth E. Jansen 184*59599516SKenneth E. Jansen 185*59599516SKenneth E. Jansen subroutine renum_cart(x) 186*59599516SKenneth E. Jansenc 187*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 188*59599516SKenneth E. Jansenc This subroutine finds all nodes that are on the inlet plane and all 189*59599516SKenneth E. Jansenc nodes that are on the recycle plane; it also blocks elements that 190*59599516SKenneth E. Jansenc are on recycle plane; all nodes are also stored with cylindrical 191*59599516SKenneth E. Jansenc coordinates; find all father nodes for recycle plane (i.e. for 192*59599516SKenneth E. Jansenc theta = -theta given) 193*59599516SKenneth E. Jansenc 194*59599516SKenneth E. Jansenc input: 195*59599516SKenneth E. Jansenc x (numnp,nsd) : node coordinates 196*59599516SKenneth E. Jansenc 197*59599516SKenneth E. Jansenc output: 198*59599516SKenneth E. Jansenc xcyl (numnp,nsd) : node cylindrical coordinates 199*59599516SKenneth E. Jansenc ien2D (npro, nshl) : connectivity array for recycle plane 200*59599516SKenneth E. Jansenc assuming tethraheadral elements, i.e. 201*59599516SKenneth E. Jansenc triangular elements on face 202*59599516SKenneth E. Jansenc 203*59599516SKenneth E. Jansenc 204*59599516SKenneth E. Jansenc Elaine Bohr 205*59599516SKenneth E. Jansenc July 2002 206*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 207*59599516SKenneth E. Jansenc 208*59599516SKenneth E. Jansen use spebc 209*59599516SKenneth E. Jansenc use pointer_data 210*59599516SKenneth E. Jansen include "common.h" 211*59599516SKenneth E. Jansen include "mpif.h" 212*59599516SKenneth E. Jansen include "auxmpi.h" 213*59599516SKenneth E. Jansenc 214*59599516SKenneth E. Jansen dimension x(numnp,nsd), nyin(numnp), 215*59599516SKenneth E. Jansen & erreur(nshl), xtmp(nsd), yrtmp(numnp) 216*59599516SKenneth E. Jansen 217*59599516SKenneth E. Jansen integer temp, etmp, s 218*59599516SKenneth E. Jansen 219*59599516SKenneth E. Jansenc 220*59599516SKenneth E. Jansenc .... Finding nodes from inlet plane with minimal z value 221*59599516SKenneth E. Jansenc 222*59599516SKenneth E. Jansen j = 0 223*59599516SKenneth E. Jansen zmin = x(nen1(1),3) 224*59599516SKenneth E. Jansen zmax = x(nen1(1),3) 225*59599516SKenneth E. Jansen do i=2,npin 226*59599516SKenneth E. Jansen if(x(nen1(i),3).lt.zmin) zmin = x(nen1(i),3) 227*59599516SKenneth E. Jansen if(x(nen1(i),3).gt.zmax) zmax = x(nen1(i),3) 228*59599516SKenneth E. Jansen enddo 229*59599516SKenneth E. Jansen 230*59599516SKenneth E. Jansen do i=1,npin 231*59599516SKenneth E. Jansen if (x(nen1(i),3).eq.zmin) then 232*59599516SKenneth E. Jansen j = j + 1 233*59599516SKenneth E. Jansen nyin(j) = nen1(i) 234*59599516SKenneth E. Jansen endif 235*59599516SKenneth E. Jansen enddo 236*59599516SKenneth E. Jansen nfin = j 237*59599516SKenneth E. Jansen do i=1,nfin 238*59599516SKenneth E. Jansen yrtmp(i) = x(nyin(i),2) 239*59599516SKenneth E. Jansen enddo 240*59599516SKenneth E. Jansen 241*59599516SKenneth E. Jansenc 242*59599516SKenneth E. Jansenc .... Ordering nyin by increasing y 243*59599516SKenneth E. Jansenc 244*59599516SKenneth E. Jansen j = 0 245*59599516SKenneth E. Jansen allocate (nrint(nfin)) 246*59599516SKenneth E. Jansen 247*59599516SKenneth E. Jansen do i=1,nfin 248*59599516SKenneth E. Jansen rmintemp=yrtmp(1) 249*59599516SKenneth E. Jansen itmp = 1 250*59599516SKenneth E. Jansen do k=2,nfin 251*59599516SKenneth E. Jansen if (rmintemp.ge.yrtmp(k)) then 252*59599516SKenneth E. Jansen rmintemp = yrtmp(k) 253*59599516SKenneth E. Jansen itmp = k 254*59599516SKenneth E. Jansen endif 255*59599516SKenneth E. Jansen enddo 256*59599516SKenneth E. Jansen j = j + 1 257*59599516SKenneth E. Jansen nrint(j)=nyin(itmp) 258*59599516SKenneth E. Jansen yrtmp(itmp) = 10000000 259*59599516SKenneth E. Jansen enddo 260*59599516SKenneth E. Jansen nfint = j 261*59599516SKenneth E. Jansen 262*59599516SKenneth E. Jansenc 263*59599516SKenneth E. Jansenc .... y coordinate for the inlet plane 264*59599516SKenneth E. Jansenc 265*59599516SKenneth E. Jansen do i=1,npin 266*59599516SKenneth E. Jansen xynin(i) = x(nen1(i),2) 267*59599516SKenneth E. Jansen enddo 268*59599516SKenneth E. Jansen 269*59599516SKenneth E. Jansenc 270*59599516SKenneth E. Jansenc .... y coordinate for the virtual points on recycle plane 271*59599516SKenneth E. Jansenc 272*59599516SKenneth E. Jansen 273*59599516SKenneth E. Jansen do i=1,nfint 274*59599516SKenneth E. Jansen xyn(i) = x(nrint(i),2) 275*59599516SKenneth E. Jansen enddo 276*59599516SKenneth E. Jansen 277*59599516SKenneth E. Jansenc 278*59599516SKenneth E. Jansenc .... Finding corresponding elements and local coordinates 279*59599516SKenneth E. Jansenc on recycle plane for every arc with radius from nrint 280*59599516SKenneth E. Jansenc 281*59599516SKenneth E. Jansen s = (zmax - zmin) / ds 282*59599516SKenneth E. Jansen allocate (xsinfin(nfint,s+1,nsd)) 283*59599516SKenneth E. Jansen allocate (elcnfin(nfint,s+1)) 284*59599516SKenneth E. Jansen allocate (imax(nfint)) 285*59599516SKenneth E. Jansen 286*59599516SKenneth E. Jansen do jj = 1, nfint 287*59599516SKenneth E. Jansen 288*59599516SKenneth E. Jansen xts1 = x(nrint(jj),1) + plandist 289*59599516SKenneth E. Jansen xts2 = x(nrint(jj),2) 290*59599516SKenneth E. Jansen xts3 = x(nrint(jj),3) 291*59599516SKenneth E. Jansen call elem_search(xintl, xts1, xts2, xts3, 292*59599516SKenneth E. Jansen & xtmp(:), etmp, 1) 293*59599516SKenneth E. Jansen xsinfin(jj,1,:) = xtmp(:) 294*59599516SKenneth E. Jansen elcnfin(jj,1) = etmp 295*59599516SKenneth E. Jansen imax(jj) = s 296*59599516SKenneth E. Jansen do i=1,imax(jj) 297*59599516SKenneth E. Jansen xts1 = x(nrint(jj),1) + plandist 298*59599516SKenneth E. Jansen xts2 = x(nrint(jj),2) 299*59599516SKenneth E. Jansen xts3 = x(nrint(jj),3) + i*ds 300*59599516SKenneth E. Jansen call elem_search(xintl, xts1, xts2, xts3, 301*59599516SKenneth E. Jansen & xtmp(:), etmp, 1) 302*59599516SKenneth E. Jansen xsinfin(jj,1+i,:) = xtmp(:) 303*59599516SKenneth E. Jansen elcnfin(jj,1+i) = etmp 304*59599516SKenneth E. Jansen enddo 305*59599516SKenneth E. Jansen enddo 306*59599516SKenneth E. Jansen 307*59599516SKenneth E. Jansen return 308*59599516SKenneth E. Jansen end 309