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 ylimit (3,nflow) : (1,:) limiting flag 12*59599516SKenneth E. Jansenc (2,:) lower bound 13*59599516SKenneth E. Jansenc (3,:) upper bound 14*59599516SKenneth E. Jansenc output: 15*59599516SKenneth E. Jansenc y (nshg,nflow) : Adjusted V value(s) corresponding to a 16*59599516SKenneth E. Jansenc constraint d.o.f. 17*59599516SKenneth E. Jansenc 18*59599516SKenneth E. Jansenc 19*59599516SKenneth E. Jansenc Farzin Shakib, Winter 1987. 20*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 21*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 22*59599516SKenneth E. Jansenc 23*59599516SKenneth E. Jansen include "common.h" 24*59599516SKenneth E. Jansenc 25*59599516SKenneth E. Jansen dimension y(nshg,nflow), iBC(nshg), 26*59599516SKenneth E. Jansen & ac(nshg,nflow), BC(nshg,ndofBC) 27*59599516SKenneth E. Jansen 28*59599516SKenneth E. Jansen dimension ilwork(nlwork), iper(nshg) 29*59599516SKenneth E. Jansen 30*59599516SKenneth E. Jansen real*8 tmp(nshg), y1(nshg),q1(nshg) 31*59599516SKenneth E. Jansen dimension rn1(nshg), rmagn1(nshg) 32*59599516SKenneth E. Jansen real*8 limitcount(nflow) 33*59599516SKenneth E. Jansen integer locmax(1),locmin(1) 34*59599516SKenneth E. Jansenc 35*59599516SKenneth E. Jansenc limiting...ugly but sometimes the only way 36*59599516SKenneth E. Jansenc 37*59599516SKenneth E. Jansen limitcount=0 38*59599516SKenneth E. Jansen do i=1,nflow 39*59599516SKenneth E. Jansen if(ylimit(1,i).gt.0) then 40*59599516SKenneth E. Jansen locmax=maxloc(y(:,i)) 41*59599516SKenneth E. Jansen locmin=minloc(y(:,i)) 42*59599516SKenneth E. Jansen ymax=maxval(y(:,i)) 43*59599516SKenneth E. Jansen ymin=minval(y(:,i)) 44*59599516SKenneth E. Jansenc write(33,34)i,ymax,ymin,1.*locmax,1.*locmin 45*59599516SKenneth E. Jansenc call flush(33) 46*59599516SKenneth E. Jansen do j=1,numnp ! only limit linear modes for now 47*59599516SKenneth E. Jansen ypc=y(j,i) 48*59599516SKenneth E. Jansen y(j,i)=min(ylimit(3,i),max(ylimit(2,i),y(j,i))) 49*59599516SKenneth E. Jansen if(ypc.ne.y(j,i) )limitcount(i)=limitcount(i)+one 50*59599516SKenneth E. Jansen enddo 51*59599516SKenneth E. Jansen endif 52*59599516SKenneth E. Jansen enddo 53*59599516SKenneth E. Jansenc if(maxval(limitcount).gt.0) then 54*59599516SKenneth E. Jansenc write(33,34)myrank,(limitcount(j)/numnp,j=1,nflow) 55*59599516SKenneth E. Jansenc call flush(33) 56*59599516SKenneth E. Jansenc endif 57*59599516SKenneth E. Jansen 34 format(i5,5(2x,e14.7)) 58*59599516SKenneth E. Jansenc 59*59599516SKenneth E. Jansenc.... ------------------------> Temperature <------------------------ 60*59599516SKenneth E. Jansenc.... temperature 61*59599516SKenneth E. Jansenc 62*59599516SKenneth E. Jansen where (btest(iBC,1)) 63*59599516SKenneth E. Jansen y(:,5) = BC(:,2) 64*59599516SKenneth E. Jansen endwhere 65*59599516SKenneth E. Jansenc 66*59599516SKenneth E. Jansenc.... -------------------------> Velocity <-------------------------- 67*59599516SKenneth E. Jansenc.... 3D 68*59599516SKenneth E. Jansenc 69*59599516SKenneth E. Jansenc.... x1-velocity, 3D 70*59599516SKenneth E. Jansenc 71*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 1) 72*59599516SKenneth E. Jansenc$$$ rn1(:)=sqrt(one/(one + BC(:,4)**2+BC(:,4)**2)) 73*59599516SKenneth E. Jansenc$$$ rmagn1(:)=rn1(:)**2*(y(:,1)+y(:,2)*BC(:,4) 74*59599516SKenneth E. Jansenc$$$ & +y(:,3)*BC(:,5)-BC(:,3)) 75*59599516SKenneth E. Jansenc$$$ y(:,1) = y(:,1)-rmagn1(:) 76*59599516SKenneth E. Jansenc$$$ y(:,2) = y(:,2)-rmagn1(:)*BC(:,4) 77*59599516SKenneth E. Jansenc$$$ y(:,3) = y(:,3)-rmagn1(:)*BC(:,5) 78*59599516SKenneth E. Jansen 79*59599516SKenneth E. Jansen y(:,1) = BC(:,3) - BC(:,4) * y(:,2) 80*59599516SKenneth E. Jansen & - BC(:,5) * y(:,3) 81*59599516SKenneth E. Jansen endwhere 82*59599516SKenneth E. Jansenc 83*59599516SKenneth E. Jansenc.... x2-velocity, 3D 84*59599516SKenneth E. Jansenc 85*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 2) 86*59599516SKenneth E. Jansen y(:,2) = BC(:,3) - BC(:,4) * y(:,1) 87*59599516SKenneth E. Jansen & - BC(:,5) * y(:,3) 88*59599516SKenneth E. Jansen endwhere 89*59599516SKenneth E. Jansenc 90*59599516SKenneth E. Jansenc.... x1-velocity and x2-velocity, 3D 91*59599516SKenneth E. Jansenc 92*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 3) 93*59599516SKenneth E. Jansen y(:,1) = BC(:,3) - BC(:,4) * y(:,3) 94*59599516SKenneth E. Jansen y(:,2) = BC(:,5) - BC(:,6) * y(:,3) 95*59599516SKenneth E. Jansen endwhere 96*59599516SKenneth E. Jansenc 97*59599516SKenneth E. Jansenc.... x3-velocity, 3D 98*59599516SKenneth E. Jansenc 99*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 4) 100*59599516SKenneth E. Jansen y(:,3) = BC(:,3) - BC(:,4) * y(:,1) 101*59599516SKenneth E. Jansen & - BC(:,5) * y(:,2) 102*59599516SKenneth E. Jansen endwhere 103*59599516SKenneth E. Jansenc 104*59599516SKenneth E. Jansenc.... x1-velocity and x3-velocity, 3D 105*59599516SKenneth E. Jansenc 106*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 5) 107*59599516SKenneth E. Jansen y(:,1) = BC(:,3) - BC(:,4) * y(:,2) 108*59599516SKenneth E. Jansen y(:,3) = BC(:,5) - BC(:,6) * y(:,2) 109*59599516SKenneth E. Jansen endwhere 110*59599516SKenneth E. Jansenc 111*59599516SKenneth E. Jansenc.... x2-velocity and x3-velocity, 3D 112*59599516SKenneth E. Jansenc 113*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 6) 114*59599516SKenneth E. Jansen y(:,2) = BC(:,3) - BC(:,4) * y(:,1) 115*59599516SKenneth E. Jansen y(:,3) = BC(:,5) - BC(:,6) * y(:,1) 116*59599516SKenneth E. Jansen endwhere 117*59599516SKenneth E. Jansenc 118*59599516SKenneth E. Jansenc.... x1-velocity, x2-velocity and x3-velocity, 3D 119*59599516SKenneth E. Jansenc 120*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 7) 121*59599516SKenneth E. Jansen y(:,1) = BC(:,3) 122*59599516SKenneth E. Jansen y(:,2) = BC(:,4) 123*59599516SKenneth E. Jansen y(:,3) = BC(:,5) 124*59599516SKenneth E. Jansen endwhere 125*59599516SKenneth E. Jansenc 126*59599516SKenneth E. Jansenc endif 127*59599516SKenneth E. Jansenc 128*59599516SKenneth E. Jansenc.... end of velocity 129*59599516SKenneth E. Jansenc 130*59599516SKenneth E. Jansenc.... --------------------------> Density <-------------------------- 131*59599516SKenneth E. Jansenc 132*59599516SKenneth E. Jansen if (any(btest(iBC,0))) then 133*59599516SKenneth E. Jansenc 134*59599516SKenneth E. Jansenc.... density 135*59599516SKenneth E. Jansenc 136*59599516SKenneth E. Jansen where (btest(iBC,0)) 137*59599516SKenneth E. Jansen q1 = BC(:,1) ! density 138*59599516SKenneth E. Jansen elsewhere 139*59599516SKenneth E. Jansen q1 = one 140*59599516SKenneth E. Jansen endwhere 141*59599516SKenneth E. Jansenc 142*59599516SKenneth E. Jansenc 143*59599516SKenneth E. Jansenc 144*59599516SKenneth E. Jansen npro = nshg 145*59599516SKenneth E. Jansenc 146*59599516SKenneth E. Jansen ithm = 2 ! get pressure from rho and T 147*59599516SKenneth E. Jansenc...when ithm=2 scalar is not used so tmp is in place 148*59599516SKenneth E. Jansen call getthm (y1, y(:,5), tmp, 149*59599516SKenneth E. Jansen & rk, q1, tmp, 150*59599516SKenneth E. Jansen & tmp, tmp, tmp, 151*59599516SKenneth E. Jansen & tmp, tmp, tmp, 152*59599516SKenneth E. Jansen & tmp, tmp) 153*59599516SKenneth E. Jansenc 154*59599516SKenneth E. Jansen where (btest(iBC,0)) 155*59599516SKenneth E. Jansen y(:,1) = y1 156*59599516SKenneth E. Jansen endwhere 157*59599516SKenneth E. Jansen 158*59599516SKenneth E. Jansenc 159*59599516SKenneth E. Jansen endif 160*59599516SKenneth E. Jansenc 161*59599516SKenneth E. Jansenc.... -------------------------> Pressure <-------------------------- 162*59599516SKenneth E. Jansenc 163*59599516SKenneth E. Jansen if (any(btest(iBC,2))) then 164*59599516SKenneth E. Jansenc 165*59599516SKenneth E. Jansenc.... pressure 166*59599516SKenneth E. Jansenc 167*59599516SKenneth E. Jansen where (btest(iBC,2)) 168*59599516SKenneth E. Jansen y(:,4) = BC(:,1) ! pressure here 169*59599516SKenneth E. Jansen endwhere 170*59599516SKenneth E. Jansenc 171*59599516SKenneth E. Jansen endif 172*59599516SKenneth E. Jansenc 173*59599516SKenneth E. Jansenc.... local periodic (and axisymmetric) boundary conditions (no communications) 174*59599516SKenneth E. Jansenc 175*59599516SKenneth E. Jansen do i = 1,nflow 176*59599516SKenneth E. Jansen y(:,i) = y(iper(:),i) 177*59599516SKenneth E. Jansen if(ires.ne.2) ac(:,i) = ac(iper(:),i) 178*59599516SKenneth E. Jansen enddo 179*59599516SKenneth E. Jansenc 180*59599516SKenneth E. Jansenc.... communications 181*59599516SKenneth E. Jansenc 182*59599516SKenneth E. Jansen if (numpe > 1) then 183*59599516SKenneth E. Jansen call commu (y, ilwork, nflow, 'out') 184*59599516SKenneth E. Jansen if(ires.ne.2) call commu (ac, ilwork, nflow, 'out') 185*59599516SKenneth E. Jansen endif 186*59599516SKenneth E. Jansenc 187*59599516SKenneth E. Jansenc slave has masters value, for abc we need to rotate it 188*59599516SKenneth E. Jansenc 189*59599516SKenneth E. Jansen if(iabc==1) then !are there any axisym bc's 190*59599516SKenneth E. Jansen call rotabc(y, iBC, 'out') 191*59599516SKenneth E. Jansen if(ires.ne.2) call rotabc(ac, iBC, 'out') 192*59599516SKenneth E. Jansen endif 193*59599516SKenneth E. Jansen 194*59599516SKenneth E. Jansenc 195*59599516SKenneth E. Jansenc.... return 196*59599516SKenneth E. Jansenc 197*59599516SKenneth E. Jansen return 198*59599516SKenneth E. Jansen end 199*59599516SKenneth E. Jansen 200*59599516SKenneth E. Jansen 201*59599516SKenneth E. Jansen subroutine itrBCSclr (y, ac, iBC, BC, iper, ilwork) 202*59599516SKenneth E. Jansenc 203*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 204*59599516SKenneth E. Jansenc 205*59599516SKenneth E. Jansenc This routine satisfies the boundary conditions on the isclr 206*59599516SKenneth E. Jansenc 207*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 208*59599516SKenneth E. Jansenc 209*59599516SKenneth E. Jansen include "common.h" 210*59599516SKenneth E. Jansenc 211*59599516SKenneth E. Jansen dimension y(nshg,ndof), iBC(nshg), 212*59599516SKenneth E. Jansen & ac(nshg,ndof), BC(nshg,ndofBC) 213*59599516SKenneth E. Jansen 214*59599516SKenneth E. Jansen dimension ilwork(nlwork), iper(nshg) 215*59599516SKenneth E. Jansen dimension T(nshg) 216*59599516SKenneth E. Jansen 217*59599516SKenneth E. Jansen if(isclr.ne.0) then 218*59599516SKenneth E. Jansen id=5+isclr 219*59599516SKenneth E. Jansen ibb=6+isclr 220*59599516SKenneth E. Jansen ib=4+isclr 221*59599516SKenneth E. Jansen endif 222*59599516SKenneth E. Jansenc 223*59599516SKenneth E. Jansenc limiting...ugly but sometimes the only way 224*59599516SKenneth E. Jansenc 225*59599516SKenneth E. Jansen if(ylimit(1,id).gt.0) 226*59599516SKenneth E. Jansen & y(:,id)=min(ylimit(3,id),max(ylimit(2,id),y(:,id))) 227*59599516SKenneth E. Jansenc 228*59599516SKenneth E. Jansenc.... ------------------------> Scalar <------------------------ 229*59599516SKenneth E. Jansenc 230*59599516SKenneth E. Jansenc 231*59599516SKenneth E. Jansen where (btest(iBC,id)) 232*59599516SKenneth E. Jansen y(:,id) = BC(:,ibb) 233*59599516SKenneth E. Jansen endwhere 234*59599516SKenneth E. Jansenc 235*59599516SKenneth E. Jansenc.... local periodic (and axisymmetric) boundary conditions (no communications) 236*59599516SKenneth E. Jansenc 237*59599516SKenneth E. Jansen do i = 1,nshg 238*59599516SKenneth E. Jansenc if (btest(iBC(i),10)) then 239*59599516SKenneth E. Jansen y(i,id) = y(iper(i),id) 240*59599516SKenneth E. Jansen ac(i,id) = ac(iper(i),id) 241*59599516SKenneth E. Jansenc end if 242*59599516SKenneth E. Jansen enddo 243*59599516SKenneth E. Jansenc 244*59599516SKenneth E. Jansenc.... communications 245*59599516SKenneth E. Jansenc 246*59599516SKenneth E. Jansen if (numpe > 1) then 247*59599516SKenneth E. Jansen T=y(:,id) 248*59599516SKenneth E. Jansen call commu (T, ilwork, 1, 'out') 249*59599516SKenneth E. Jansen y(:,id)=T 250*59599516SKenneth E. Jansen T=ac(:,id) 251*59599516SKenneth E. Jansen call commu (T, ilwork, 1, 'out') 252*59599516SKenneth E. Jansen ac(:,id)=T 253*59599516SKenneth E. Jansen endif 254*59599516SKenneth E. Jansen 255*59599516SKenneth E. Jansen ttim(53) = ttim(53) + tmr() 256*59599516SKenneth E. Jansenc 257*59599516SKenneth E. Jansen return 258*59599516SKenneth E. Jansen end 259*59599516SKenneth E. Jansen 260*59599516SKenneth E. Jansen 261*59599516SKenneth E. Jansen 262