xref: /phasta/phSolver/incompressible/solveGradV.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine solveGradV( rmass, qres, iBC, iper, ilwork )
2*59599516SKenneth E. Jansenc---------------------------------------------------------------------
3*59599516SKenneth E. Jansenc
4*59599516SKenneth E. Jansenc This routine satisfies the periodic boundary conditions
5*59599516SKenneth E. Jansenc on the diffusive flux residual and mass matrix
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc input:
8*59599516SKenneth E. Jansenc     rmass   (nshg)              : mass matrix
9*59599516SKenneth E. Jansenc     qres    (nshg,(nflow-1)*nsd) : diffusive flux vector
10*59599516SKenneth E. Jansenc
11*59599516SKenneth E. Jansenc output: modified qres and rmass
12*59599516SKenneth E. Jansenc---------------------------------------------------------------------
13*59599516SKenneth E. Jansen      include "common.h"
14*59599516SKenneth E. Jansen
15*59599516SKenneth E. Jansen      dimension rmass(nshg), qres(nshg,nsdsq),
16*59599516SKenneth E. Jansen     &          iBC(nshg), iper(nshg)
17*59599516SKenneth E. Jansenc
18*59599516SKenneth E. Jansenc
19*59599516SKenneth E. Jansenc.... compute qi for node A, i.e., qres <-- qres/rmass
20*59599516SKenneth E. Jansenc
21*59599516SKenneth E. Jansen       if (numpe > 1) then
22*59599516SKenneth E. Jansen          call commu (qres  , ilwork, nsdsq  , 'in ')
23*59599516SKenneth E. Jansen       endif
24*59599516SKenneth E. Jansenc
25*59599516SKenneth E. Jansenc  take care of periodic boundary conditions
26*59599516SKenneth E. Jansenc  but not on surface tension terms in qres(:,10-12)
27*59599516SKenneth E. Jansenc  that are used to compute normal vector
28*59599516SKenneth E. Jansenc
29*59599516SKenneth E. Jansen        !write(*,*) 'nflow, nsd, idflx, idflow:',nflow,nsd,idflx,idflow
30*59599516SKenneth E. Jansen        !idflow = (nflow-1)*nsd
31*59599516SKenneth E. Jansen        do j= 1,nshg
32*59599516SKenneth E. Jansen          if ((btest(iBC(j),10))) then
33*59599516SKenneth E. Jansen            i = iper(j)
34*59599516SKenneth E. Jansenc            qres(i,:) = qres(i,:) + qres(j,:)
35*59599516SKenneth E. Jansen!            qres(i,1:idflow) = qres(i,1:idflow) + qres(j,1:idflow)
36*59599516SKenneth E. Jansen            qres(i,1:nsdsq) = qres(i,1:nsdsq) + qres(j,1:nsdsq)
37*59599516SKenneth E. Jansen          endif
38*59599516SKenneth E. Jansen        enddo
39*59599516SKenneth E. Jansen
40*59599516SKenneth E. Jansen        do j= 1,nshg
41*59599516SKenneth E. Jansen          if ((btest(iBC(j),10))) then
42*59599516SKenneth E. Jansen            i = iper(j)
43*59599516SKenneth E. Jansenc            qres(j,:) = qres(i,:)
44*59599516SKenneth E. Jansen!            qres(j,1:idflow) = qres(i,1:idflow)
45*59599516SKenneth E. Jansen            qres(j,1:nsdsq) = qres(i,1:nsdsq)
46*59599516SKenneth E. Jansen          endif
47*59599516SKenneth E. Jansen        enddo
48*59599516SKenneth E. Jansen
49*59599516SKenneth E. Jansen       ! rmass has already been computed and inversed in qpbc.f
50*59599516SKenneth E. Jansen       do i=1, nsdsq
51*59599516SKenneth E. Jansen          qres(:,i) = rmass*qres(:,i)
52*59599516SKenneth E. Jansen       enddo
53*59599516SKenneth E. Jansen
54*59599516SKenneth E. Jansen       if(numpe > 1) then
55*59599516SKenneth E. Jansen          call commu (qres, ilwork, nsdsq, 'out')
56*59599516SKenneth E. Jansen       endif
57*59599516SKenneth E. Jansen
58*59599516SKenneth E. Jansenc
59*59599516SKenneth E. Jansenc.... return
60*59599516SKenneth E. Jansenc
61*59599516SKenneth E. Jansen        return
62*59599516SKenneth E. Jansen        end
63*59599516SKenneth E. Jansen
64