xref: /phasta/phSolver/common/renum.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
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