xref: /phasta/phSolver/incompressible/itrbc.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine itrBC (y,ac, iBC, BC, iper, ilwork)
2*59599516SKenneth E. Jansenc
3*59599516SKenneth E. Jansenc----------------------------------------------------------------------
4*59599516SKenneth E. Jansenc
5*59599516SKenneth E. Jansenc This program satisfies the boundary conditions on the Y-variables.
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc input:
8*59599516SKenneth E. Jansenc  y      (nshg,nflow)   : y variables
9*59599516SKenneth E. Jansenc  iBC    (nshg)        : Boundary Condition Code
10*59599516SKenneth E. Jansenc  BC     (nshg,ndofBC) : boundary condition constraint parameters
11*59599516SKenneth E. Jansenc
12*59599516SKenneth E. Jansenc output:
13*59599516SKenneth E. Jansenc  y      (nshg,nflow)   : Adjusted V value(s) corresponding to a
14*59599516SKenneth E. Jansenc                           constraint d.o.f.
15*59599516SKenneth E. Jansenc
16*59599516SKenneth E. Jansenc
17*59599516SKenneth E. Jansenc Farzin Shakib, Winter 1987.
18*59599516SKenneth E. Jansenc Zdenek Johan,  Winter 1991.  (Fortran 90)
19*59599516SKenneth E. Jansenc----------------------------------------------------------------------
20*59599516SKenneth E. Jansenc
21*59599516SKenneth E. Jansen        include "common.h"
22*59599516SKenneth E. Jansenc
23*59599516SKenneth E. Jansen        dimension y(nshg,nflow),             iBC(nshg),
24*59599516SKenneth E. Jansen     &            ac(nshg,nflow),            BC(nshg,ndofBC)
25*59599516SKenneth E. Jansen
26*59599516SKenneth E. Jansen        dimension ilwork(nlwork),           iper(nshg)
27*59599516SKenneth E. Jansenc
28*59599516SKenneth E. Jansenc  limiting...ugly but sometimes the only way
29*59599516SKenneth E. Jansenc
30*59599516SKenneth E. Jansen        do i=1,nflow
31*59599516SKenneth E. Jansen           if(ylimit(1,i).gt.0)
32*59599516SKenneth E. Jansen     &          y(:,i)=min(ylimit(3,i),max(ylimit(2,i),y(:,i)))
33*59599516SKenneth E. Jansen        enddo
34*59599516SKenneth E. Jansenc
35*59599516SKenneth E. Jansenc.... ------------------------->  Velocity  <--------------------------
36*59599516SKenneth E. Jansenc.... 3D
37*59599516SKenneth E. Jansenc
38*59599516SKenneth E. Jansenc.... x1-velocity, 3D
39*59599516SKenneth E. Jansenc
40*59599516SKenneth E. Jansen          where (ibits(iBC,3,3) .eq. 1)
41*59599516SKenneth E. Jansen            y(:,1) =  BC(:,3)  - BC(:,4) * y(:,2)
42*59599516SKenneth E. Jansen     &                         - BC(:,5) * y(:,3)
43*59599516SKenneth E. Jansen          endwhere
44*59599516SKenneth E. Jansenc
45*59599516SKenneth E. Jansenc.... x2-velocity, 3D
46*59599516SKenneth E. Jansenc
47*59599516SKenneth E. Jansen          where (ibits(iBC,3,3) .eq. 2)
48*59599516SKenneth E. Jansen            y(:,2) = BC(:,3)  - BC(:,4) * y(:,1)
49*59599516SKenneth E. Jansen     &                        - BC(:,5) * y(:,3)
50*59599516SKenneth E. Jansen          endwhere
51*59599516SKenneth E. Jansenc
52*59599516SKenneth E. Jansenc.... x1-velocity and x2-velocity, 3D
53*59599516SKenneth E. Jansenc
54*59599516SKenneth E. Jansen          where (ibits(iBC,3,3) .eq. 3)
55*59599516SKenneth E. Jansen            y(:,1) =  BC(:,3)  - BC(:,4) * y(:,3)
56*59599516SKenneth E. Jansen            y(:,2) =  BC(:,5)  - BC(:,6) * y(:,3)
57*59599516SKenneth E. Jansen          endwhere
58*59599516SKenneth E. Jansenc
59*59599516SKenneth E. Jansenc.... x3-velocity, 3D
60*59599516SKenneth E. Jansenc
61*59599516SKenneth E. Jansen          where (ibits(iBC,3,3) .eq. 4)
62*59599516SKenneth E. Jansen            y(:,3) = BC(:,3) - BC(:,4) * y(:,1)
63*59599516SKenneth E. Jansen     &                       - BC(:,5) * y(:,2)
64*59599516SKenneth E. Jansen          endwhere
65*59599516SKenneth E. Jansenc
66*59599516SKenneth E. Jansenc.... x1-velocity and x3-velocity, 3D
67*59599516SKenneth E. Jansenc
68*59599516SKenneth E. Jansen          where (ibits(iBC,3,3) .eq. 5)
69*59599516SKenneth E. Jansen            y(:,1) = BC(:,3) - BC(:,4) * y(:,2)
70*59599516SKenneth E. Jansen            y(:,3) = BC(:,5) - BC(:,6) * y(:,2)
71*59599516SKenneth E. Jansen          endwhere
72*59599516SKenneth E. Jansenc
73*59599516SKenneth E. Jansenc.... x2-velocity and x3-velocity, 3D
74*59599516SKenneth E. Jansenc
75*59599516SKenneth E. Jansen          where (ibits(iBC,3,3) .eq. 6)
76*59599516SKenneth E. Jansen            y(:,2) = BC(:,3)  - BC(:,4) * y(:,1)
77*59599516SKenneth E. Jansen            y(:,3) = BC(:,5)  - BC(:,6) * y(:,1)
78*59599516SKenneth E. Jansen          endwhere
79*59599516SKenneth E. Jansenc
80*59599516SKenneth E. Jansenc.... x1-velocity, x2-velocity and x3-velocity, 3D
81*59599516SKenneth E. Jansenc
82*59599516SKenneth E. Jansen          where (ibits(iBC,3,3) .eq. 7)
83*59599516SKenneth E. Jansen            y(:,1) =  BC(:,3)
84*59599516SKenneth E. Jansen            y(:,2) =  BC(:,4)
85*59599516SKenneth E. Jansen            y(:,3) =  BC(:,5)
86*59599516SKenneth E. Jansen          endwhere
87*59599516SKenneth E. Jansenc
88*59599516SKenneth E. Jansenc       endif
89*59599516SKenneth E. Jansenc
90*59599516SKenneth E. Jansenc.... end of velocity
91*59599516SKenneth E. Jansenc
92*59599516SKenneth E. Jansenc.... ------------------------->  Pressure  <--------------------------
93*59599516SKenneth E. Jansenc
94*59599516SKenneth E. Jansen        if (any(btest(iBC,2))) then
95*59599516SKenneth E. Jansenc
96*59599516SKenneth E. Jansenc.... pressure
97*59599516SKenneth E. Jansenc
98*59599516SKenneth E. Jansen          where (btest(iBC,2))
99*59599516SKenneth E. Jansen            y(:,4) = BC(:,1)  ! pressure here
100*59599516SKenneth E. Jansen          endwhere
101*59599516SKenneth E. Jansenc
102*59599516SKenneth E. Jansen        endif
103*59599516SKenneth E. Jansenc
104*59599516SKenneth E. Jansenc.... local periodic (and axisymmetric) boundary conditions (no communications)
105*59599516SKenneth E. Jansenc
106*59599516SKenneth E. Jansen	do i = 1,nflow
107*59599516SKenneth E. Jansen           y(:,i) = y(iper(:),i)
108*59599516SKenneth E. Jansen           ac(:,i) = ac(iper(:),i)
109*59599516SKenneth E. Jansen	enddo
110*59599516SKenneth E. Jansenc
111*59599516SKenneth E. Jansenc.... communications
112*59599516SKenneth E. Jansenc
113*59599516SKenneth E. Jansen        if (numpe > 1) then
114*59599516SKenneth E. Jansen           call commu (y, ilwork, nflow, 'out')
115*59599516SKenneth E. Jansen           call commu (ac, ilwork, nflow, 'out')
116*59599516SKenneth E. Jansen        endif
117*59599516SKenneth E. Jansenc
118*59599516SKenneth E. Jansenc       slave has masters value, for abc we need to rotate it
119*59599516SKenneth E. Jansenc
120*59599516SKenneth E. Jansen        if(iabc==1) then        !are there any axisym bc's
121*59599516SKenneth E. Jansen           call rotabc(y, iBC, 'out')
122*59599516SKenneth E. Jansen           call rotabc(ac, iBC, 'out')
123*59599516SKenneth E. Jansen        endif
124*59599516SKenneth E. Jansen
125*59599516SKenneth E. Jansenc
126*59599516SKenneth E. Jansenc.... return
127*59599516SKenneth E. Jansenc
128*59599516SKenneth E. Jansen        return
129*59599516SKenneth E. Jansen        end
130*59599516SKenneth E. Jansen
131*59599516SKenneth E. Jansen
132*59599516SKenneth E. Jansen        subroutine itrBCSclr (y, ac, iBC, BC, iper, ilwork)
133*59599516SKenneth E. Jansenc
134*59599516SKenneth E. Jansenc----------------------------------------------------------------------
135*59599516SKenneth E. Jansenc
136*59599516SKenneth E. Jansenc This routine satisfies the boundary conditions on the isclr
137*59599516SKenneth E. Jansenc
138*59599516SKenneth E. Jansenc----------------------------------------------------------------------
139*59599516SKenneth E. Jansenc
140*59599516SKenneth E. Jansen        include "common.h"
141*59599516SKenneth E. Jansenc
142*59599516SKenneth E. Jansen        dimension y(nshg,ndof),             iBC(nshg),
143*59599516SKenneth E. Jansen     &            ac(nshg,ndof),            BC(nshg,ndofBC)
144*59599516SKenneth E. Jansen
145*59599516SKenneth E. Jansen        dimension ilwork(nlwork),            iper(nshg)
146*59599516SKenneth E. Jansen        dimension T(nshg)
147*59599516SKenneth E. Jansen
148*59599516SKenneth E. Jansen        if(isclr.eq.0) then ! this is temperature
149*59599516SKenneth E. Jansen           ib=1
150*59599516SKenneth E. Jansen           ibb=2
151*59599516SKenneth E. Jansen           id=5
152*59599516SKenneth E. Jansen        else
153*59599516SKenneth E. Jansen           ib=5+isclr
154*59599516SKenneth E. Jansen           ibb=ib+1
155*59599516SKenneth E. Jansen           id=ib
156*59599516SKenneth E. Jansen        endif
157*59599516SKenneth E. Jansenc
158*59599516SKenneth E. Jansenc  limiting...ugly but sometimes the only way
159*59599516SKenneth E. Jansenc
160*59599516SKenneth E. Jansen           if(ylimit(1,id).gt.0)
161*59599516SKenneth E. Jansen     &          y(:,id)=min(ylimit(3,id),max(ylimit(2,id),y(:,id)))
162*59599516SKenneth E. Jansenc
163*59599516SKenneth E. Jansenc
164*59599516SKenneth E. Jansenc.... ------------------------>  Scalar  <------------------------
165*59599516SKenneth E. Jansenc
166*59599516SKenneth E. Jansenc
167*59599516SKenneth E. Jansen        where (btest(iBC,ib))
168*59599516SKenneth E. Jansen          y(:,id) =  BC(:,ibb)
169*59599516SKenneth E. Jansen        endwhere
170*59599516SKenneth E. Jansenc
171*59599516SKenneth E. Jansenc.... local periodic (and axisymmetric) boundary conditions (no communications)
172*59599516SKenneth E. Jansenc
173*59599516SKenneth E. Jansen	do i = 1,nshg
174*59599516SKenneth E. Jansen          y(i,id) = y(iper(i),id)
175*59599516SKenneth E. Jansen          ac(i,id) = ac(iper(i),id)
176*59599516SKenneth E. Jansen	enddo
177*59599516SKenneth E. Jansenc
178*59599516SKenneth E. Jansenc.... communications
179*59599516SKenneth E. Jansenc
180*59599516SKenneth E. Jansen        if (numpe > 1) then
181*59599516SKenneth E. Jansen           T=y(:,id)
182*59599516SKenneth E. Jansen           call commu (T, ilwork, 1, 'out')
183*59599516SKenneth E. Jansen           y(:,id)=T
184*59599516SKenneth E. Jansen           T=ac(:,id)
185*59599516SKenneth E. Jansen           call commu (T, ilwork, 1, 'out')
186*59599516SKenneth E. Jansen           ac(:,id)=T
187*59599516SKenneth E. Jansen        endif
188*59599516SKenneth E. Jansen
189*59599516SKenneth E. Jansen        return
190*59599516SKenneth E. Jansen        end
191*59599516SKenneth E. Jansen
192