xref: /phasta/phSolver/common/rotabc.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine rotabc (global, iBC, code)
2*59599516SKenneth E. Jansenc---------------------------------------------------------------------
3*59599516SKenneth E. Jansenc
4*59599516SKenneth E. Jansenc This subroutine is responsible for rotating
5*59599516SKenneth E. Jansenc the residual and solution vectors for axisymmetric BC's.
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc input:
8*59599516SKenneth E. Jansenc     global(nshg,n): global vector to be rotated.
9*59599516SKenneth E. Jansenc     code:            = 'in' for rotating with the residual
10*59599516SKenneth E. Jansenc                      = 'out' for rotating the solution
11*59599516SKenneth E. Jansenc
12*59599516SKenneth E. Jansenc  note that the cos and sin of the rotation angles are preprocessed and
13*59599516SKenneth E. Jansenc  stored in acs(1 and 2) respectively.
14*59599516SKenneth E. Jansenc
15*59599516SKenneth E. Jansenc---------------------------------------------------------------------
16*59599516SKenneth E. Jansenc
17*59599516SKenneth E. Jansen      use specialBC  ! gives us acs, contains (:,1)=cos(theta) (:,2)=sin(theta)
18*59599516SKenneth E. Jansen      include "common.h"
19*59599516SKenneth E. Jansen
20*59599516SKenneth E. Jansen      dimension global(nshg,2),             iBC(nshg),
21*59599516SKenneth E. Jansen     &          tmp(nshg)
22*59599516SKenneth E. Jansen
23*59599516SKenneth E. Jansen      character*3 code
24*59599516SKenneth E. Jansen
25*59599516SKenneth E. Jansen      if (code .eq. 'in ') then
26*59599516SKenneth E. Jansen         where( btest(iBC,10))
27*59599516SKenneth E. Jansen            tmp         =  global(:,1)*acs(:,1) - global(:,2)*acs(:,2)
28*59599516SKenneth E. Jansen            global(:,2) =  global(:,1)*acs(:,2) + global(:,2)*acs(:,1)
29*59599516SKenneth E. Jansen            global(:,1) = tmp
30*59599516SKenneth E. Jansen         endwhere
31*59599516SKenneth E. Jansen      else  if (code .eq. 'out') then
32*59599516SKenneth E. Jansen         where( btest(iBC,10))
33*59599516SKenneth E. Jansen            tmp         =  global(:,1)*acs(:,1) + global(:,2)*acs(:,2)
34*59599516SKenneth E. Jansen            global(:,2) = -global(:,1)*acs(:,2) + global(:,2)*acs(:,1)
35*59599516SKenneth E. Jansen            global(:,1) = tmp
36*59599516SKenneth E. Jansen         endwhere
37*59599516SKenneth E. Jansen      else
38*59599516SKenneth E. Jansen         call error ('rotabc  ','code    ',0)
39*59599516SKenneth E. Jansen      endif
40*59599516SKenneth E. Jansen
41*59599516SKenneth E. Jansen      return
42*59599516SKenneth E. Jansen      end
43