1*59599516SKenneth E. Jansen subroutine SolDir (y, ac, yold, acold, 2*59599516SKenneth E. Jansen & x, 3*59599516SKenneth E. Jansen & iBC, BC, 4*59599516SKenneth E. Jansen & res, 5*59599516SKenneth E. Jansen & iper, ilwork, 6*59599516SKenneth E. Jansen & shp, shgl, shpb, shglb) 7*59599516SKenneth E. Jansenc 8*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 9*59599516SKenneth E. Jansenc direct solver 10*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 11*59599516SKenneth E. Jansenc 12*59599516SKenneth E. Jansen use pointer_data 13*59599516SKenneth E. Jansen 14*59599516SKenneth E. Jansen include "common.h" 15*59599516SKenneth E. Jansen include "mpif.h" 16*59599516SKenneth E. Jansen include "auxmpi.h" 17*59599516SKenneth E. Jansenc 18*59599516SKenneth E. Jansen dimension y(nshg,ndof), ac(nshg,ndof), 19*59599516SKenneth E. Jansen & yold(nshg,ndof), acold(nshg,ndof), 20*59599516SKenneth E. Jansen & x(numnp,nsd), 21*59599516SKenneth E. Jansen & iBC(nshg), BC(nshg,ndofBC), 22*59599516SKenneth E. Jansen & res(nshg,nflow), 23*59599516SKenneth E. Jansen & ilwork(nlwork), iper(nshg) 24*59599516SKenneth E. Jansenc 25*59599516SKenneth E. Jansen dimension shp(MAXTOP,maxsh,MAXQPT), 26*59599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 27*59599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 28*59599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 29*59599516SKenneth E. Jansen 30*59599516SKenneth E. Jansen real*8 yAlpha(nshg,5), acAlpha(nshg,5) 31*59599516SKenneth E. Jansen 32*59599516SKenneth E. Jansenc 33*59599516SKenneth E. Jansen dimension dyf(4*nshg), indx(4*nshg), solinc(nshg,4) 34*59599516SKenneth E. Jansen 35*59599516SKenneth E. Jansen dimension globMas(4*nshg,4*nshg) 36*59599516SKenneth E. Jansen 37*59599516SKenneth E. Jansen write (*,*) 'Warning: using direct solver...' 38*59599516SKenneth E. Jansenc 39*59599516SKenneth E. Jansenc.... set the element matrix flag 40*59599516SKenneth E. Jansenc 41*59599516SKenneth E. Jansen lhs = 1 ! always 42*59599516SKenneth E. Jansenc 43*59599516SKenneth E. Jansenc.... compute solution at n+alpha 44*59599516SKenneth E. Jansenc 45*59599516SKenneth E. Jansen call itrYAlpha( yold, acold, y, ac, yAlpha, acAlpha) 46*59599516SKenneth E. Jansenc 47*59599516SKenneth E. Jansenc.... *******************>> Element Data Formation <<****************** 48*59599516SKenneth E. Jansenc 49*59599516SKenneth E. Jansenc.... form the LHS matrices, the residual vector 50*59599516SKenneth E. Jansenc 51*59599516SKenneth E. Jansen call ElmGMR (yAlpha, acAlpha, x, 52*59599516SKenneth E. Jansen & shp, shgl, iBC, 53*59599516SKenneth E. Jansen & BC, shpb, shglb, 54*59599516SKenneth E. Jansen & res, iper, ilwork, 55*59599516SKenneth E. Jansen & rowp, colm, lhsK, 56*59599516SKenneth E. Jansen & lhsP, rerr ) 57*59599516SKenneth E. Jansen 58*59599516SKenneth E. Jansen globMas = zero 59*59599516SKenneth E. Jansen npro = numel 60*59599516SKenneth E. Jansenc 61*59599516SKenneth E. Jansencccc need to assemble here! 62*59599516SKenneth E. Jansenc 63*59599516SKenneth E. Jansen call bc3Global(globMas, iBC) 64*59599516SKenneth E. Jansenc 65*59599516SKenneth E. JansencDEBUG: write the global matrix (nonzero blocks) 66*59599516SKenneth E. Jansenc 67*59599516SKenneth E. Jansen do i=1,nshg 68*59599516SKenneth E. Jansen i0 = (i-1)*4 69*59599516SKenneth E. Jansen 70*59599516SKenneth E. Jansen do j=1,nshg 71*59599516SKenneth E. Jansen j0 = (j-1)*4 72*59599516SKenneth E. Jansen 73*59599516SKenneth E. Jansen if (globMas(i0+1,j0+1) .ne. 0) then 74*59599516SKenneth E. Jansen write (544,21) i,j 75*59599516SKenneth E. Jansen do ii=1,4 76*59599516SKenneth E. Jansen write(543,20) (globMas(i0+ii,j0+kk), kk=1,4) 77*59599516SKenneth E. Jansen enddo 78*59599516SKenneth E. Jansen endif 79*59599516SKenneth E. Jansen enddo 80*59599516SKenneth E. Jansen enddo 81*59599516SKenneth E. Jansen 82*59599516SKenneth E. Jansen 20 format (4(2x,e14.7)) 83*59599516SKenneth E. Jansen 21 format (2(2x,i8)) 84*59599516SKenneth E. Jansen 85*59599516SKenneth E. Jansenc$$$ stop 86*59599516SKenneth E. Jansen 87*59599516SKenneth E. Jansenc 88*59599516SKenneth E. Jansenc.... LU factor the mass matrix 89*59599516SKenneth E. Jansenc 90*59599516SKenneth E. Jansen indx = 0 91*59599516SKenneth E. Jansen call ludcmp(globMas, 4*nshg, 4*nshg, indx, d) 92*59599516SKenneth E. Jansen write(543,*) 'rhs' 93*59599516SKenneth E. Jansen do i=1, nshg 94*59599516SKenneth E. Jansen i0 = 4*(i-1) 95*59599516SKenneth E. Jansen dyf(i0+1) = res(i,1) 96*59599516SKenneth E. Jansen dyf(i0+2) = res(i,2) 97*59599516SKenneth E. Jansen dyf(i0+3) = res(i,3) 98*59599516SKenneth E. Jansen dyf(i0+4) = res(i,4) 99*59599516SKenneth E. Jansen write(543,20) (dyf(i0+j),j=1,4) 100*59599516SKenneth E. Jansen enddo 101*59599516SKenneth E. Jansenc 102*59599516SKenneth E. Jansenc.... back-substitute to find dY 103*59599516SKenneth E. Jansenc 104*59599516SKenneth E. Jansen call lubksb(globMas, 4*nshg, 4*nshg, indx, dyf) 105*59599516SKenneth E. Jansenc 106*59599516SKenneth E. Jansen write(543,*) 'soln' 107*59599516SKenneth E. Jansen 108*59599516SKenneth E. Jansen do i=1,nshg 109*59599516SKenneth E. Jansen i0 = 4*(i-1) 110*59599516SKenneth E. Jansen solinc(i,1) = dyf(i0+1) 111*59599516SKenneth E. Jansen solinc(i,2) = dyf(i0+2) 112*59599516SKenneth E. Jansen solinc(i,3) = dyf(i0+3) 113*59599516SKenneth E. Jansen solinc(i,4) = dyf(i0+4) 114*59599516SKenneth E. Jansen enddo 115*59599516SKenneth E. Jansenc 116*59599516SKenneth E. Jansenc 117*59599516SKenneth E. Jansenc.... Now, you satisfy the boundary conditions to newly 118*59599516SKenneth E. Jansenc obtained p,u,v,w 119*59599516SKenneth E. Jansenc 120*59599516SKenneth E. Jansenc 121*59599516SKenneth E. Jansenc You have to set boundary conditions first so Dy distributes 122*59599516SKenneth E. Jansenc 123*59599516SKenneth E. Jansen call itrCorrect ( y, ac, solinc, iBC) 124*59599516SKenneth E. Jansen call itrBC (y, ac, iBC, BC, iper, ilwork) 125*59599516SKenneth E. Jansenc 126*59599516SKenneth E. Jansenc.... output the statistics 127*59599516SKenneth E. Jansenc 128*59599516SKenneth E. Jansen call rstatic (res, y, solinc) 129*59599516SKenneth E. Jansenc 130*59599516SKenneth E. Jansenc.... end 131*59599516SKenneth E. Jansenc 132*59599516SKenneth E. Jansen return 133*59599516SKenneth E. Jansen end 134