xref: /phasta/phSolver/compressible/itrres.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
1*59599516SKenneth E. Jansen        subroutine ItrRes (yp,        yc,        x,
2*59599516SKenneth E. Jansen     &                     shp,       shgl,
3*59599516SKenneth E. Jansen     &                     iBC,       BC,        shpb,
4*59599516SKenneth E. Jansen     &                     shglb,     rmes,      iper,
5*59599516SKenneth E. Jansen     &                     ilwork,    ac)
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc----------------------------------------------------------------------
8*59599516SKenneth E. Jansenc
9*59599516SKenneth E. Jansenc This routine calculates the modified residual vector.
10*59599516SKenneth E. Jansenc
11*59599516SKenneth E. Jansenc
12*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
13*59599516SKenneth E. Jansenc----------------------------------------------------------------------
14*59599516SKenneth E. Jansenc
15*59599516SKenneth E. Jansen        use pointer_data
16*59599516SKenneth E. Jansenc
17*59599516SKenneth E. Jansen        include "common.h"
18*59599516SKenneth E. Jansen        include "mpif.h"
19*59599516SKenneth E. Jansen        include "auxmpi.h"
20*59599516SKenneth E. Jansenc
21*59599516SKenneth E. Jansen        dimension yp(nshg,nflow),             yc(nshg,ndof),
22*59599516SKenneth E. Jansen     &            x(numnp,nsd),             ac(nshg,ndof),
23*59599516SKenneth E. Jansen     &            iBC(nshg),                BC(nshg,ndofBC),
24*59599516SKenneth E. Jansen     &            rmes(nshg,nflow),          ilwork(nlwork),
25*59599516SKenneth E. Jansen     &            iper(nshg)
26*59599516SKenneth E. Jansenc
27*59599516SKenneth E. Jansen        dimension shp(MAXTOP,maxsh,MAXQPT),
28*59599516SKenneth E. Jansen     &            shgl(MAXTOP,nsd,maxsh,MAXQPT),
29*59599516SKenneth E. Jansen     &            shpb(MAXTOP,maxsh,MAXQPT),
30*59599516SKenneth E. Jansen     &            shglb(MAXTOP,nsd,maxsh,MAXQPT)
31*59599516SKenneth E. Jansen
32*59599516SKenneth E. Jansen        real*8, allocatable :: tmpshp(:,:), tmpshgl(:,:,:)
33*59599516SKenneth E. Jansen        real*8, allocatable :: tmpshpb(:,:), tmpshglb(:,:,:)
34*59599516SKenneth E. Jansen
35*59599516SKenneth E. Jansen        ttim(81) = ttim(81) - secs(0.0)
36*59599516SKenneth E. Jansen
37*59599516SKenneth E. Jansenc
38*59599516SKenneth E. Jansenc.... -------------------->   interior elements   <--------------------
39*59599516SKenneth E. Jansenc
40*59599516SKenneth E. Jansen        jump  = 0
41*59599516SKenneth E. Jansen        ires  = 2
42*59599516SKenneth E. Jansen        iprec = 0
43*59599516SKenneth E. Jansenc
44*59599516SKenneth E. Jansenc.... loop over the element-blocks
45*59599516SKenneth E. Jansenc
46*59599516SKenneth E. Jansen        do iblk = 1, nelblk
47*59599516SKenneth E. Jansenc
48*59599516SKenneth E. Jansenc.... set up the parameters
49*59599516SKenneth E. Jansenc$$$c
50*59599516SKenneth E. Jansenc$$$          iel    = lcblk(1,iblk)
51*59599516SKenneth E. Jansenc$$$          nenl   = lcblk(5,iblk)
52*59599516SKenneth E. Jansenc$$$          mattyp = lcblk(7,iblk)
53*59599516SKenneth E. Jansenc$$$          ndofl  = lcblk(8,iblk)
54*59599516SKenneth E. Jansenc$$$          npro   = lcblk(1,iblk+1) - iel
55*59599516SKenneth E. Jansenc
56*59599516SKenneth E. Jansen          nenl   = lcblk(5,iblk)   ! no. of vertices per element
57*59599516SKenneth E. Jansen          iel    = lcblk(1,iblk)
58*59599516SKenneth E. Jansen          lelCat = lcblk(2,iblk)
59*59599516SKenneth E. Jansen          lcsyst = lcblk(3,iblk)
60*59599516SKenneth E. Jansen          iorder = lcblk(4,iblk)
61*59599516SKenneth E. Jansen          nenl   = lcblk(5,iblk)   ! no. of vertices per element
62*59599516SKenneth E. Jansen          nshl   = lcblk(10,iblk)
63*59599516SKenneth E. Jansen          mattyp = lcblk(7,iblk)
64*59599516SKenneth E. Jansen          ndofl  = lcblk(8,iblk)
65*59599516SKenneth E. Jansen          nsymdl = lcblk(9,iblk)
66*59599516SKenneth E. Jansen          npro   = lcblk(1,iblk+1) - iel
67*59599516SKenneth E. Jansen          ngauss = nint(lcsyst)
68*59599516SKenneth E. Jansenc
69*59599516SKenneth E. Jansenc
70*59599516SKenneth E. Jansenc.... compute and assemble the residuals and the preconditioner
71*59599516SKenneth E. Jansenc
72*59599516SKenneth E. Jansen          allocate (tmpshp(nshl, MAXQPT))
73*59599516SKenneth E. Jansen          allocate (tmpshgl(nsd,nshl,MAXQPT))
74*59599516SKenneth E. Jansen
75*59599516SKenneth E. Jansen          tmpshp(1:nshl,:) = shp(lcsyst,1:nshl,:)
76*59599516SKenneth E. Jansen          tmpshgl(:,1:nshl,:) = shgl(lcsyst,:,1:nshl,:)
77*59599516SKenneth E. Jansen
78*59599516SKenneth E. Jansen          call AsIRes (yp,                      yc,
79*59599516SKenneth E. Jansen     &                 x,                       mxmudmi(iblk)%p,
80*59599516SKenneth E. Jansen     &                 tmpshp,                  tmpshgl,
81*59599516SKenneth E. Jansen     &                 mien(iblk)%p,            mmat(iblk)%p,
82*59599516SKenneth E. Jansen     &                 rmes,                    ac)
83*59599516SKenneth E. Jansen
84*59599516SKenneth E. Jansen          deallocate (tmpshp)
85*59599516SKenneth E. Jansen          deallocate (tmpshgl)
86*59599516SKenneth E. Jansen
87*59599516SKenneth E. Jansenc
88*59599516SKenneth E. Jansenc.... end of interior element loop
89*59599516SKenneth E. Jansenc
90*59599516SKenneth E. Jansen        enddo
91*59599516SKenneth E. Jansenc
92*59599516SKenneth E. Jansenc.... -------------------->   boundary elements   <--------------------
93*59599516SKenneth E. Jansenc
94*59599516SKenneth E. Jansen        if (Navier .eq. 1 .and. Jactyp.ne.0) then
95*59599516SKenneth E. Jansenc
96*59599516SKenneth E. Jansenc.... loop over the elements
97*59599516SKenneth E. Jansenc
98*59599516SKenneth E. Jansen        do iblk = 1, nelblb
99*59599516SKenneth E. Jansenc
100*59599516SKenneth E. Jansenc.... set up the parameters
101*59599516SKenneth E. Jansenc$$$c
102*59599516SKenneth E. Jansenc$$$          iel    = lcblkb(1,iblk)
103*59599516SKenneth E. Jansenc$$$          nenl   = lcblkb(5,iblk)
104*59599516SKenneth E. Jansenc$$$          nenbl  = lcblkb(6,iblk)
105*59599516SKenneth E. Jansenc$$$          mattyp = lcblkb(7,iblk)
106*59599516SKenneth E. Jansenc$$$          ndofl  = lcblkb(8,iblk)
107*59599516SKenneth E. Jansenc$$$          npro   = lcblkb(1,iblk+1) - iel
108*59599516SKenneth E. Jansenc$$$c
109*59599516SKenneth E. Jansenc
110*59599516SKenneth E. Jansen          iel    = lcblkb(1,iblk)
111*59599516SKenneth E. Jansen          lelCat = lcblkb(2,iblk)
112*59599516SKenneth E. Jansen          lcsyst = lcblkb(3,iblk)
113*59599516SKenneth E. Jansen          iorder = lcblkb(4,iblk)
114*59599516SKenneth E. Jansen          nenl   = lcblkb(5,iblk)  ! no. of vertices per element
115*59599516SKenneth E. Jansen          nenbl  = lcblkb(6,iblk)  ! no. of vertices per bdry. face
116*59599516SKenneth E. Jansen          mattyp = lcblkb(7,iblk)
117*59599516SKenneth E. Jansen          ndofl  = lcblkb(8,iblk)
118*59599516SKenneth E. Jansen          nshl   = lcblkb(9,iblk)
119*59599516SKenneth E. Jansen          nshlb  = lcblkb(10,iblk)
120*59599516SKenneth E. Jansen          npro   = lcblkb(1,iblk+1) - iel
121*59599516SKenneth E. Jansen          if(lcsyst.eq.3) lcsyst=nenbl
122*59599516SKenneth E. Jansen          ngaussb = nintb(lcsyst)
123*59599516SKenneth E. Jansenc
124*59599516SKenneth E. Jansen          allocate (tmpshpb(nshl,MAXQPT))
125*59599516SKenneth E. Jansen          allocate (tmpshglb(nsd,nshl,MAXQPT))
126*59599516SKenneth E. Jansen
127*59599516SKenneth E. Jansen          tmpshpb(1:nshl,:) = shpb(lcsyst,1:nshl,:)
128*59599516SKenneth E. Jansen          tmpshglb(:,1:nshl,:) = shglb(lcsyst,:,1:nshl,:)
129*59599516SKenneth E. Jansen
130*59599516SKenneth E. Jansenc
131*59599516SKenneth E. Jansenc.... compute and assemble the residuals
132*59599516SKenneth E. Jansenc
133*59599516SKenneth E. Jansen
134*59599516SKenneth E. Jansen          call AsBRes (yp,   yc,              x,
135*59599516SKenneth E. Jansen     &                 tmpshpb,           tmpshglb,
136*59599516SKenneth E. Jansen     &                 mienb(iblk)%p,     mmatb(iblk)%p,
137*59599516SKenneth E. Jansen     &                 miBCB(iblk)%p,     mBCB(iblk)%p,
138*59599516SKenneth E. Jansen     &                 rmes)
139*59599516SKenneth E. Jansenc
140*59599516SKenneth E. Jansen
141*59599516SKenneth E. Jansen          deallocate (tmpshpb)
142*59599516SKenneth E. Jansen          deallocate (tmpshglb)
143*59599516SKenneth E. Jansenc.... end of boundary element loop
144*59599516SKenneth E. Jansenc
145*59599516SKenneth E. Jansen        enddo
146*59599516SKenneth E. Jansen
147*59599516SKenneth E. Jansen        endif
148*59599516SKenneth E. Jansen
149*59599516SKenneth E. Jansen        ttim(81) = ttim(81) + secs(0.0)
150*59599516SKenneth E. Jansen
151*59599516SKenneth E. Jansenc
152*59599516SKenneth E. Jansenc.... ---------------------->   communications  <-----------------------
153*59599516SKenneth E. Jansenc
154*59599516SKenneth E. Jansen        if((iabc==1)) !are there any axisym bc's
155*59599516SKenneth E. Jansen     &       call rotabc(rmes(1,2), iBC, 'in ')
156*59599516SKenneth E. Jansenc
157*59599516SKenneth E. Jansen        if (numpe > 1) then
158*59599516SKenneth E. Jansen           call commu (rmes, ilwork, nflow, 'in ')
159*59599516SKenneth E. Jansen        endif
160*59599516SKenneth E. Jansen
161*59599516SKenneth E. Jansenc
162*59599516SKenneth E. Jansenc.... ---------------------->   post processing  <----------------------
163*59599516SKenneth E. Jansenc
164*59599516SKenneth E. Jansenc.... satisfy the BCs on the modified residual
165*59599516SKenneth E. Jansenc
166*59599516SKenneth E. Jansen        call bc3Res (yc,  iBC,  BC,  rmes, iper, ilwork)
167*59599516SKenneth E. Jansenc
168*59599516SKenneth E. Jansenc.... return
169*59599516SKenneth E. Jansenc
170*59599516SKenneth E. Jansen        return
171*59599516SKenneth E. Jansen        end
172