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