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