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