159599516SKenneth E. Jansenc--------------------------------------------------------------------- 259599516SKenneth E. Jansenc 359599516SKenneth E. Jansenc drvftools.f : Bundle of Fortran driver routines for ftools.f 459599516SKenneth E. Jansenc 559599516SKenneth E. Jansenc Each routine is to be called by les**.c 659599516SKenneth E. Jansenc 759599516SKenneth E. Jansenc--------------------------------------------------------------------- 859599516SKenneth E. Jansenc 959599516SKenneth E. Jansenc---------------- 1059599516SKenneth E. Jansenc drvLesPrepDiag 1159599516SKenneth E. Jansenc---------------- 1259599516SKenneth E. Jansenc 1359599516SKenneth E. Jansen subroutine drvlesPrepDiag ( flowDiag, ilwork, 1459599516SKenneth E. Jansen & iBC, BC, iper, 1559599516SKenneth E. Jansen & rowp, colm, 1659599516SKenneth E. Jansen & lhsK, lhsP) 1759599516SKenneth E. Jansenc 1859599516SKenneth E. Jansen use pointer_data 1959599516SKenneth E. Jansen use pvsQbi 2059599516SKenneth E. Jansen use convolImpFlow !brings in the current part of convol coef for imp BC 2159599516SKenneth E. Jansen use convolRCRFlow !brings in the current part of convol coef for RCR BC 2259599516SKenneth E. Jansen 2359599516SKenneth E. Jansen include "common.h" 2459599516SKenneth E. Jansen include "mpif.h" 2559599516SKenneth E. Jansenc 2659599516SKenneth E. Jansen dimension flowDiag(nshg,4), ilwork(nlwork) 2759599516SKenneth E. Jansen dimension iBC(nshg), iper(nshg), BC(nshg,ndofBC) 2859599516SKenneth E. Jansen real*8 lhsK(9,nnz_tot), lhsP(4,nnz_tot) 2959599516SKenneth E. Jansen integer rowp(nnz_tot), colm(nshg+1) 3059599516SKenneth E. Jansen integer n, k 3159599516SKenneth E. Jansenc 3259599516SKenneth E. Jansen integer sparseloc 3359599516SKenneth E. Jansenc 3459599516SKenneth E. Jansenc 3559599516SKenneth E. Jansenc.... Clear the flowdiag 3659599516SKenneth E. Jansenc 3759599516SKenneth E. Jansen if((flmpl.eq.1).or.(ipord.gt.1)) then 3859599516SKenneth E. Jansen do n = 1, nshg 3959599516SKenneth E. Jansen k = sparseloc( rowp(colm(n)), colm(n+1)-colm(n), n ) 4059599516SKenneth E. Jansen & + colm(n)-1 4159599516SKenneth E. Jansenc 4259599516SKenneth E. Jansen flowdiag(n,1) = lhsK(1,k) 4359599516SKenneth E. Jansen flowdiag(n,2) = lhsK(5,k) 4459599516SKenneth E. Jansen flowdiag(n,3) = lhsK(9,k) 4559599516SKenneth E. Jansenc 4659599516SKenneth E. Jansen flowdiag(n,4) = lhsP(4,k) 4759599516SKenneth E. Jansen enddo 4859599516SKenneth E. Jansen else 4959599516SKenneth E. Jansen flowDiag = zero 5059599516SKenneth E. Jansen do n = 1, nshg ! rowsum put on the diagonal instead of diag entry 5159599516SKenneth E. Jansen do k=colm(n),colm(n+1)-1 5259599516SKenneth E. Jansen 5359599516SKenneth E. Jansenc 5459599516SKenneth E. Jansen flowdiag(n,1) = flowdiag(n,1) + abs(lhsK(1,k)) 5559599516SKenneth E. Jansenc & + lhsK(2,k) + lhsK(3,k) 5659599516SKenneth E. Jansen flowdiag(n,2) = flowdiag(n,2) + abs(lhsK(5,k)) 5759599516SKenneth E. Jansenc & + lhsK(4,k) + lhsK(6,k) 5859599516SKenneth E. Jansen flowdiag(n,3) = flowdiag(n,3) + abs(lhsK(9,k)) 5959599516SKenneth E. Jansenc & + lhsK(7,k) + lhsK(8,k) 6059599516SKenneth E. Jansenc 6159599516SKenneth E. Jansen flowdiag(n,4) = flowdiag(n,4) + abs(lhsP(4,k)) 6259599516SKenneth E. Jansen enddo 6359599516SKenneth E. Jansen flowdiag(n,:)=flowdiag(n,:)*pt33 6459599516SKenneth E. Jansen enddo 6559599516SKenneth E. Jansen endif 6659599516SKenneth E. Jansen if(ipvsq.ge.3) then ! for first cut only do diagonal extraction 6759599516SKenneth E. Jansen ! this is not yet correct for multi procs I suspect if partition 6859599516SKenneth E. Jansen ! boundary cuts a p=QR face 6959599516SKenneth E. Jansen tfact=alfi * gami * Delt(1) 7059599516SKenneth E. Jansen do n=1,nshg 7159599516SKenneth E. Jansen if(numResistSrfs.gt.zero) then 7259599516SKenneth E. Jansen do k = 1,numResistSrfs 7359599516SKenneth E. Jansen if (nsrflistResist(k).eq.ndsurf(n)) then 7459599516SKenneth E. Jansen irankCoupled=k 7559599516SKenneth E. Jansen flowdiag(n,1:3) = flowdiag(n,1:3) 7659599516SKenneth E. Jansen & + tfact*ValueListResist(irankCoupled)* 7759599516SKenneth E. Jansen & NABI(n,:)*NABI(n,:) 7859599516SKenneth E. Jansen exit 7959599516SKenneth E. Jansen endif 8059599516SKenneth E. Jansen enddo 8159599516SKenneth E. Jansen elseif(numImpSrfs.gt.zero) then 8259599516SKenneth E. Jansen do k = 1,numImpSrfs 8359599516SKenneth E. Jansen if (nsrflistImp(k).eq.ndsurf(n)) then 8459599516SKenneth E. Jansen irankCoupled=k 8559599516SKenneth E. Jansen flowdiag(n,1:3) = flowdiag(n,1:3) 8659599516SKenneth E. Jansen & + tfact*ImpConvCoef(ntimeptpT+2,irankCoupled)* 8759599516SKenneth E. Jansen & NABI(n,:)*NABI(n,:) 8859599516SKenneth E. Jansen exit 8959599516SKenneth E. Jansen endif 9059599516SKenneth E. Jansen enddo 9159599516SKenneth E. Jansen elseif(numRCRSrfs.gt.zero) then 9259599516SKenneth E. Jansen do k = 1,numRCRSrfs 9359599516SKenneth E. Jansen if (nsrflistRCR(k).eq.ndsurf(n)) then 9459599516SKenneth E. Jansen irankCoupled=k 9559599516SKenneth E. Jansen flowdiag(n,1:3) = flowdiag(n,1:3) 9659599516SKenneth E. Jansen & + tfact*RCRConvCoef(lstep+2,irankCoupled)* !check lstep+2 if restart from t.ne.0 9759599516SKenneth E. Jansen & NABI(n,:)*NABI(n,:) 9859599516SKenneth E. Jansen exit 9959599516SKenneth E. Jansen endif 10059599516SKenneth E. Jansen enddo 10159599516SKenneth E. Jansen endif 10259599516SKenneth E. Jansen enddo 10359599516SKenneth E. Jansen endif 10459599516SKenneth E. Jansenc 10559599516SKenneth E. Jansen 10659599516SKenneth E. Jansenc 10759599516SKenneth E. Jansen if(iabc==1) !are there any axisym bc's 10859599516SKenneth E. Jansen & call rotabc(flowdiag, iBC, 'in ') 10959599516SKenneth E. Jansenc 11059599516SKenneth E. Jansen 11159599516SKenneth E. Jansenc 11259599516SKenneth E. Jansenc.... communicate : add the slaves part to the master's part of flowDiag 11359599516SKenneth E. Jansenc 11459599516SKenneth E. Jansen if (numpe > 1) then 11559599516SKenneth E. Jansen call commu (flowDiag, ilwork, nflow, 'in ') 11659599516SKenneth E. Jansen endif 11759599516SKenneth E. Jansenc 11859599516SKenneth E. Jansenc.... satisfy the boundary conditions on the diagonal 11959599516SKenneth E. Jansenc 12059599516SKenneth E. Jansen call bc3diag(iBC, BC, flowDiag) 12159599516SKenneth E. Jansenc 12259599516SKenneth E. Jansenc 12359599516SKenneth E. Jansenc.... on processor periodicity was not taken care of in the setting of the 12459599516SKenneth E. Jansenc boundary conditions on the matrix. Take care of it now. 12559599516SKenneth E. Jansenc 12659599516SKenneth E. Jansen call bc3per(iBC, flowDiag, iper, ilwork, 4) 12759599516SKenneth E. Jansenc 12859599516SKenneth E. Jansenc... slaves and masters have the correct values 12959599516SKenneth E. Jansenc 13059599516SKenneth E. Jansenc 13159599516SKenneth E. Jansenc.... Calculate square root 13259599516SKenneth E. Jansenc 13359599516SKenneth E. Jansen do i = 1, nshg 13459599516SKenneth E. Jansen do j = 1, nflow 13559599516SKenneth E. Jansen if (flowDiag(i,j).ne.0) 13659599516SKenneth E. Jansen & flowDiag(i,j) = 1. / sqrt(abs(flowDiag(i,j))) 13759599516SKenneth E. Jansen enddo 13859599516SKenneth E. Jansen enddo 13959599516SKenneth E. Jansenc 14059599516SKenneth E. Jansen return 14159599516SKenneth E. Jansen end 14259599516SKenneth E. Jansen 14359599516SKenneth E. Jansenc 14459599516SKenneth E. Jansenc------------- 14559599516SKenneth E. Jansenc drvsclrDiag 14659599516SKenneth E. Jansenc------------- 14759599516SKenneth E. Jansenc 14859599516SKenneth E. Jansen subroutine drvsclrDiag ( sclrDiag, ilwork, iBC, BC, iper, 14959599516SKenneth E. Jansen & rowp, colm, lhsS ) 15059599516SKenneth E. Jansenc 15159599516SKenneth E. Jansen use pointer_data 15259599516SKenneth E. Jansen include "common.h" 15359599516SKenneth E. Jansen include "mpif.h" 15459599516SKenneth E. Jansenc 15559599516SKenneth E. Jansen integer ilwork(nlwork), iBC(nshg), iper(nshg), 15659599516SKenneth E. Jansen & rowp(nnz_tot), colm(nshg+1) 15759599516SKenneth E. Jansen 15859599516SKenneth E. Jansen real*8 sclrDiag(nshg), lhsS(nnz_tot), BC(nshg,ndofBC) 15959599516SKenneth E. Jansen integer sparseloc 16059599516SKenneth E. Jansen 16159599516SKenneth E. Jansen sclrDiag = zero 16259599516SKenneth E. Jansen do n = 1, nshg 16359599516SKenneth E. Jansen k = sparseloc( rowp(colm(n)), colm(n+1)-colm(n), n ) 16459599516SKenneth E. Jansen & + colm(n)-1 16559599516SKenneth E. Jansenc 16659599516SKenneth E. Jansen sclrDiag(n) = lhsS(k) 16759599516SKenneth E. Jansen enddo 16859599516SKenneth E. Jansenc 16959599516SKenneth E. Jansenc.... communicate : add the slaves part to the master's part of sclrDiag 17059599516SKenneth E. Jansenc 17159599516SKenneth E. Jansen if (numpe > 1) then 17259599516SKenneth E. Jansen call commu (sclrDiag, ilwork, 1, 'in ') 17359599516SKenneth E. Jansen endif 17459599516SKenneth E. Jansenc 17559599516SKenneth E. Jansenc.... satisfy the boundary conditions on the diagonal 17659599516SKenneth E. Jansenc 17759599516SKenneth E. Jansen call bc3SclrDiag(iBC, sclrDiag) 17859599516SKenneth E. Jansenc 17959599516SKenneth E. Jansenc 18059599516SKenneth E. Jansenc.... on processor periodicity was not taken care of in the setting of the 18159599516SKenneth E. Jansenc boundary conditions on the matrix. Take care of it now. 18259599516SKenneth E. Jansenc 18359599516SKenneth E. Jansen call bc3per(iBC, sclrDiag, iper, ilwork, 1) 18459599516SKenneth E. Jansenc 18559599516SKenneth E. Jansenc... slaves and masters have the correct values 18659599516SKenneth E. Jansenc 18759599516SKenneth E. Jansenc 18859599516SKenneth E. Jansenc.... Calculate square root 18959599516SKenneth E. Jansenc 19059599516SKenneth E. Jansen do i = 1, nshg 19159599516SKenneth E. Jansen if (sclrDiag(i).ne.0) then 19259599516SKenneth E. Jansen sclrDiag(i) = 1. / sqrt(abs(sclrDiag(i))) 19359599516SKenneth E. Jansen endif 19459599516SKenneth E. Jansen enddo 19559599516SKenneth E. Jansenc 19659599516SKenneth E. Jansen return 19759599516SKenneth E. Jansen end 19859599516SKenneth E. Jansen 19959599516SKenneth E. JansenC============================================================================ 20059599516SKenneth E. JansenC 20159599516SKenneth E. JansenC "fLesSparseApG": 20259599516SKenneth E. JansenC 20359599516SKenneth E. JansenC============================================================================ 20459599516SKenneth E. Jansen subroutine fLesSparseApG( col, row, pLhs, 20559599516SKenneth E. Jansen & p, q, nNodes, 20659599516SKenneth E. Jansen & nnz_tot ) 20759599516SKenneth E. Jansenc 20859599516SKenneth E. Jansenc.... Data declaration 20959599516SKenneth E. Jansenc 21059599516SKenneth E. Jansen implicit none 21159599516SKenneth E. Jansen integer nNodes, nnz_tot 21259599516SKenneth E. Jansen integer col(nNodes+1), row(nnz_tot) 21359599516SKenneth E. Jansen real*8 pLhs(4,nnz_tot), p(nNodes), q(nNodes,3) 21459599516SKenneth E. Jansenc 21559599516SKenneth E. Jansen real*8 pisave 21659599516SKenneth E. Jansen integer i, j, k 21759599516SKenneth E. Jansenc 21859599516SKenneth E. Jansenc.... clear the vector 21959599516SKenneth E. Jansenc 22059599516SKenneth E. Jansen do i = 1, nNodes 22159599516SKenneth E. Jansen q(i,1) = 0 22259599516SKenneth E. Jansen q(i,2) = 0 22359599516SKenneth E. Jansen q(i,3) = 0 22459599516SKenneth E. Jansen enddo 22559599516SKenneth E. Jansenc 22659599516SKenneth E. Jansenc.... Do an AP product 22759599516SKenneth E. Jansenc 22859599516SKenneth E. Jansen do i = 1, nNodes 22959599516SKenneth E. Jansenc 23059599516SKenneth E. Jansen pisave = p(i) 23159599516SKenneth E. Jansencdir$ ivdep 23259599516SKenneth E. Jansen do k = col(i), col(i+1)-1 23359599516SKenneth E. Jansen j = row(k) 23459599516SKenneth E. Jansenc 23559599516SKenneth E. Jansen q(j,1) = q(j,1) - pLhs(1,k) * pisave 23659599516SKenneth E. Jansen q(j,2) = q(j,2) - pLhs(2,k) * pisave 23759599516SKenneth E. Jansen q(j,3) = q(j,3) - pLhs(3,k) * pisave 23859599516SKenneth E. Jansen enddo 23959599516SKenneth E. Jansen enddo 24059599516SKenneth E. Jansenc 24159599516SKenneth E. Jansenc.... end 24259599516SKenneth E. Jansenc 24359599516SKenneth E. Jansen return 24459599516SKenneth E. Jansen end 24559599516SKenneth E. Jansen 24659599516SKenneth E. JansenC============================================================================ 24759599516SKenneth E. JansenC 24859599516SKenneth E. JansenC "fLesSparseApKG": 24959599516SKenneth E. JansenC 25059599516SKenneth E. JansenC============================================================================ 25159599516SKenneth E. Jansen 25259599516SKenneth E. Jansen subroutine fLesSparseApKG( col, row, kLhs, pLhs, 25359599516SKenneth E. Jansen 1 p, q, nNodes, 25459599516SKenneth E. Jansen 2 nnz_tot_hide ) 25559599516SKenneth E. Jansenc 25659599516SKenneth E. Jansenc.... Data declaration 25759599516SKenneth E. Jansenc 25859599516SKenneth E. Jansenc implicit none 25959599516SKenneth E. Jansen use pvsQbi 26059599516SKenneth E. Jansen include "common.h" 261*9a6935e5SKenneth E. Jansen integer nNodes 26259599516SKenneth E. Jansen integer col(nNodes+1), row(nnz_tot) 26359599516SKenneth E. Jansen real*8 kLhs(9,nnz_tot), pLhs(4,nnz_tot) 26459599516SKenneth E. Jansen real*8 p(nNodes,4), q(nNodes,3) 26559599516SKenneth E. Jansenc 26659599516SKenneth E. Jansen real*8 tmp1, tmp2, tmp3, pisave 26759599516SKenneth E. Jansen integer i, j, k 26859599516SKenneth E. Jansenc 26959599516SKenneth E. Jansenc.... clear the vector 27059599516SKenneth E. Jansenc 27159599516SKenneth E. Jansen do i = 1, nNodes 27259599516SKenneth E. Jansen q(i,1) = 0 27359599516SKenneth E. Jansen q(i,2) = 0 27459599516SKenneth E. Jansen q(i,3) = 0 27559599516SKenneth E. Jansen enddo 27659599516SKenneth E. Jansenc 27759599516SKenneth E. Jansenc.... Do an AP product 27859599516SKenneth E. Jansenc 27959599516SKenneth E. Jansen do i = 1, nNodes 28059599516SKenneth E. Jansenc 28159599516SKenneth E. Jansen tmp1 = 0 28259599516SKenneth E. Jansen tmp2 = 0 28359599516SKenneth E. Jansen tmp3 = 0 28459599516SKenneth E. Jansen pisave = p(i,4) 28559599516SKenneth E. Jansencdir$ ivdep 28659599516SKenneth E. Jansen do k = col(i), col(i+1)-1 28759599516SKenneth E. Jansen j = row(k) 28859599516SKenneth E. Jansen tmp1 = tmp1 28959599516SKenneth E. Jansen 1 + kLhs(1,k) * p(j,1) 29059599516SKenneth E. Jansen 2 + kLhs(4,k) * p(j,2) 29159599516SKenneth E. Jansen 3 + kLhs(7,k) * p(j,3) 29259599516SKenneth E. Jansen tmp2 = tmp2 29359599516SKenneth E. Jansen 1 + kLhs(2,k) * p(j,1) 29459599516SKenneth E. Jansen 2 + kLhs(5,k) * p(j,2) 29559599516SKenneth E. Jansen 3 + kLhs(8,k) * p(j,3) 29659599516SKenneth E. Jansen tmp3 = tmp3 29759599516SKenneth E. Jansen 1 + kLhs(3,k) * p(j,1) 29859599516SKenneth E. Jansen 2 + kLhs(6,k) * p(j,2) 29959599516SKenneth E. Jansen 3 + kLhs(9,k) * p(j,3) 30059599516SKenneth E. Jansenc 30159599516SKenneth E. Jansen q(j,1) = q(j,1) - pLhs(1,k) * pisave 30259599516SKenneth E. Jansen q(j,2) = q(j,2) - pLhs(2,k) * pisave 30359599516SKenneth E. Jansen q(j,3) = q(j,3) - pLhs(3,k) * pisave 30459599516SKenneth E. Jansen enddo 30559599516SKenneth E. Jansen q(i,1) = q(i,1) + tmp1 30659599516SKenneth E. Jansen q(i,2) = q(i,2) + tmp2 30759599516SKenneth E. Jansen q(i,3) = q(i,3) + tmp3 30859599516SKenneth E. Jansen enddo 30959599516SKenneth E. Jansen 31059599516SKenneth E. Jansen if(ipvsq.ge.2) then 31159599516SKenneth E. Jansen tfact=alfi * gami * Delt(1) 31259599516SKenneth E. Jansen call ElmpvsQ(q,p,tfact) 31359599516SKenneth E. Jansen endif 31459599516SKenneth E. Jansenc 31559599516SKenneth E. Jansenc.... end 31659599516SKenneth E. Jansenc 31759599516SKenneth E. Jansen return 31859599516SKenneth E. Jansen end 31959599516SKenneth E. Jansen 32059599516SKenneth E. Jansen 32159599516SKenneth E. JansenC============================================================================ 32259599516SKenneth E. JansenC 32359599516SKenneth E. JansenC "fLesSparseApNGt": 32459599516SKenneth E. JansenC 32559599516SKenneth E. JansenC============================================================================ 32659599516SKenneth E. Jansen 32759599516SKenneth E. Jansen subroutine fLesSparseApNGt( col, row, pLhs, 32859599516SKenneth E. Jansen 1 p, q, nNodes, 32959599516SKenneth E. Jansen 2 nnz_tot ) 33059599516SKenneth E. Jansenc 33159599516SKenneth E. Jansenc.... Data declaration 33259599516SKenneth E. Jansenc 33359599516SKenneth E. Jansen implicit none 33459599516SKenneth E. Jansen integer nNodes, nnz_tot 33559599516SKenneth E. Jansen integer col(nNodes+1), row(nnz_tot) 33659599516SKenneth E. Jansen real*8 pLhs(4,nnz_tot), p(nNodes,3), q(nNodes) 33759599516SKenneth E. Jansenc 33859599516SKenneth E. Jansen real*8 tmp 33959599516SKenneth E. Jansen integer i, j, k 34059599516SKenneth E. Jansenc 34159599516SKenneth E. Jansenc.... Do an AP product 34259599516SKenneth E. Jansenc 34359599516SKenneth E. Jansen do i = nNodes, 1, -1 34459599516SKenneth E. Jansenc 34559599516SKenneth E. Jansen tmp = 0 34659599516SKenneth E. Jansen do k = col(i), col(i+1)-1 34759599516SKenneth E. Jansen j = row(k) 34859599516SKenneth E. Jansenc 34959599516SKenneth E. Jansen tmp = tmp 35059599516SKenneth E. Jansen 1 + pLhs(1,k) * p(j,1) 35159599516SKenneth E. Jansen 2 + pLhs(2,k) * p(j,2) 35259599516SKenneth E. Jansen 3 + pLhs(3,k) * p(j,3) 35359599516SKenneth E. Jansen enddo 35459599516SKenneth E. Jansen q(i) = tmp 35559599516SKenneth E. Jansen enddo 35659599516SKenneth E. Jansenc 35759599516SKenneth E. Jansenc.... end 35859599516SKenneth E. Jansenc 35959599516SKenneth E. Jansen return 36059599516SKenneth E. Jansen end 36159599516SKenneth E. Jansen 36259599516SKenneth E. JansenC============================================================================ 36359599516SKenneth E. JansenC 36459599516SKenneth E. JansenC "fLesSparseApNGtC": 36559599516SKenneth E. JansenC 36659599516SKenneth E. JansenC============================================================================ 36759599516SKenneth E. Jansen 36859599516SKenneth E. Jansen subroutine fLesSparseApNGtC( col, row, pLhs, 36959599516SKenneth E. Jansen 1 p, q, nNodes, 37059599516SKenneth E. Jansen 2 nnz_tot ) 37159599516SKenneth E. Jansenc 37259599516SKenneth E. Jansenc.... Data declaration 37359599516SKenneth E. Jansenc 37459599516SKenneth E. Jansen implicit none 37559599516SKenneth E. Jansen integer nNodes, nnz_tot 37659599516SKenneth E. Jansen integer col(nNodes+1), row(nnz_tot) 37759599516SKenneth E. Jansen real*8 pLhs(4,nnz_tot), p(nNodes,4), q(nNodes) 37859599516SKenneth E. Jansenc 37959599516SKenneth E. Jansen real*8 tmp 38059599516SKenneth E. Jansen integer i, j, k 38159599516SKenneth E. Jansenc 38259599516SKenneth E. Jansenc.... Do an AP product 38359599516SKenneth E. Jansenc 38459599516SKenneth E. Jansen do i = nNodes, 1, -1 38559599516SKenneth E. Jansenc 38659599516SKenneth E. Jansen tmp = 0 38759599516SKenneth E. Jansen do k = col(i), col(i+1)-1 38859599516SKenneth E. Jansen j = row(k) 38959599516SKenneth E. Jansenc 39059599516SKenneth E. Jansen tmp = tmp 39159599516SKenneth E. Jansen 1 + pLhs(1,k) * p(j,1) 39259599516SKenneth E. Jansen 2 + pLhs(2,k) * p(j,2) 39359599516SKenneth E. Jansen 3 + pLhs(3,k) * p(j,3) 39459599516SKenneth E. Jansen 4 + pLhs(4,k) * p(j,4) 39559599516SKenneth E. Jansen enddo 39659599516SKenneth E. Jansen q(i) = tmp 39759599516SKenneth E. Jansen enddo 39859599516SKenneth E. Jansenc 39959599516SKenneth E. Jansenc.... end 40059599516SKenneth E. Jansenc 40159599516SKenneth E. Jansen return 40259599516SKenneth E. Jansen end 40359599516SKenneth E. Jansen 40459599516SKenneth E. JansenC============================================================================ 40559599516SKenneth E. JansenC 40659599516SKenneth E. JansenC "fLesSparseApFull": 40759599516SKenneth E. JansenC 40859599516SKenneth E. JansenC============================================================================ 40959599516SKenneth E. Jansen 41059599516SKenneth E. Jansen subroutine fLesSparseApFull( col, row, kLhs, pLhs, 41159599516SKenneth E. Jansen 1 p, q, nNodes, 41259599516SKenneth E. Jansen 2 nnz_tot_hide ) 41359599516SKenneth E. Jansenc 41459599516SKenneth E. Jansenc.... Data declaration 41559599516SKenneth E. Jansenc 41659599516SKenneth E. Jansenc implicit none 41759599516SKenneth E. Jansen use pvsQbi 41859599516SKenneth E. Jansen include "common.h" 41959599516SKenneth E. Jansen 42059599516SKenneth E. Jansen integer nNodes, nnz_tot 42159599516SKenneth E. Jansen integer col(nNodes+1), row(nnz_tot) 42259599516SKenneth E. Jansen real*8 kLhs(9,nnz_tot), pLhs(4,nnz_tot) 42359599516SKenneth E. Jansen real*8 p(nNodes,4), q(nNodes,4) 42459599516SKenneth E. Jansenc 42559599516SKenneth E. Jansen real*8 tmp1, tmp2, tmp3, tmp4, pisave 42659599516SKenneth E. Jansen integer i, j, k 42759599516SKenneth E. Jansenc 42859599516SKenneth E. Jansenc.... clear the vector 42959599516SKenneth E. Jansenc 43059599516SKenneth E. Jansen do i = 1, nNodes 43159599516SKenneth E. Jansen q(i,1) = 0 43259599516SKenneth E. Jansen q(i,2) = 0 43359599516SKenneth E. Jansen q(i,3) = 0 43459599516SKenneth E. Jansen enddo 43559599516SKenneth E. Jansenc 43659599516SKenneth E. Jansenc.... Do an AP product 43759599516SKenneth E. Jansenc 43859599516SKenneth E. Jansen do i = 1, nNodes 43959599516SKenneth E. Jansenc 44059599516SKenneth E. Jansen tmp1 = 0 44159599516SKenneth E. Jansen tmp2 = 0 44259599516SKenneth E. Jansen tmp3 = 0 44359599516SKenneth E. Jansen tmp4 = 0 44459599516SKenneth E. Jansen pisave = p(i,4) 44559599516SKenneth E. Jansencdir$ ivdep 44659599516SKenneth E. Jansen do k = col(i), col(i+1)-1 44759599516SKenneth E. Jansen j = row(k) 44859599516SKenneth E. Jansenc 44959599516SKenneth E. Jansen tmp1 = tmp1 45059599516SKenneth E. Jansen 1 + kLhs(1,k) * p(j,1) 45159599516SKenneth E. Jansen 2 + kLhs(4,k) * p(j,2) 45259599516SKenneth E. Jansen 3 + kLhs(7,k) * p(j,3) 45359599516SKenneth E. Jansen tmp2 = tmp2 45459599516SKenneth E. Jansen 1 + kLhs(2,k) * p(j,1) 45559599516SKenneth E. Jansen 2 + kLhs(5,k) * p(j,2) 45659599516SKenneth E. Jansen 3 + kLhs(8,k) * p(j,3) 45759599516SKenneth E. Jansen tmp3 = tmp3 45859599516SKenneth E. Jansen 1 + kLhs(3,k) * p(j,1) 45959599516SKenneth E. Jansen 2 + kLhs(6,k) * p(j,2) 46059599516SKenneth E. Jansen 3 + kLhs(9,k) * p(j,3) 46159599516SKenneth E. Jansenc 46259599516SKenneth E. Jansen tmp4 = tmp4 46359599516SKenneth E. Jansen 1 + pLhs(1,k) * p(j,1) 46459599516SKenneth E. Jansen 2 + pLhs(2,k) * p(j,2) 46559599516SKenneth E. Jansen 3 + pLhs(3,k) * p(j,3) 46659599516SKenneth E. Jansen 4 + pLhs(4,k) * p(j,4) 46759599516SKenneth E. Jansenc 46859599516SKenneth E. Jansen q(j,1) = q(j,1) - pLhs(1,k) * pisave 46959599516SKenneth E. Jansen q(j,2) = q(j,2) - pLhs(2,k) * pisave 47059599516SKenneth E. Jansen q(j,3) = q(j,3) - pLhs(3,k) * pisave 47159599516SKenneth E. Jansen enddo 47259599516SKenneth E. Jansen q(i,1) = q(i,1) + tmp1 47359599516SKenneth E. Jansen q(i,2) = q(i,2) + tmp2 47459599516SKenneth E. Jansen q(i,3) = q(i,3) + tmp3 47559599516SKenneth E. Jansen q(i,4) = tmp4 47659599516SKenneth E. Jansen enddo 47759599516SKenneth E. Jansen if(ipvsq.ge.2) then 47859599516SKenneth E. Jansen tfact=alfi * gami * Delt(1) 47959599516SKenneth E. Jansen call ElmpvsQ(q,p,tfact) 48059599516SKenneth E. Jansen endif 48159599516SKenneth E. Jansenc 48259599516SKenneth E. Jansenc.... end 48359599516SKenneth E. Jansenc 48459599516SKenneth E. Jansen return 48559599516SKenneth E. Jansen end 48659599516SKenneth E. Jansen 48759599516SKenneth E. JansenC============================================================================ 48859599516SKenneth E. JansenC 48959599516SKenneth E. JansenC "fLesSparseApSclr": 49059599516SKenneth E. JansenC 49159599516SKenneth E. JansenC============================================================================ 49259599516SKenneth E. Jansen 49359599516SKenneth E. Jansen subroutine fLesSparseApSclr( col, row, lhs, 49459599516SKenneth E. Jansen 1 p, q, nNodes, 49559599516SKenneth E. Jansen & nnz_tot) 49659599516SKenneth E. Jansenc 49759599516SKenneth E. Jansenc.... Data declaration 49859599516SKenneth E. Jansenc 49959599516SKenneth E. Jansen implicit none 50059599516SKenneth E. Jansen integer nNodes, nnz_tot 50159599516SKenneth E. Jansen integer col(nNodes+1), row(nnz_tot) 50259599516SKenneth E. Jansen real*8 lhs(nnz_tot), p(nNodes), q(nNodes) 50359599516SKenneth E. Jansenc 50459599516SKenneth E. Jansen real*8 tmp 50559599516SKenneth E. Jansen integer i, j, k 50659599516SKenneth E. Jansenc 50759599516SKenneth E. Jansenc.... Do an AP product 50859599516SKenneth E. Jansenc 50959599516SKenneth E. Jansen do i = nNodes, 1, -1 51059599516SKenneth E. Jansenc 51159599516SKenneth E. Jansen tmp = 0 51259599516SKenneth E. Jansen do k = col(i), col(i+1)-1 51359599516SKenneth E. Jansen tmp = tmp + lhs(k) * p(row(k)) 51459599516SKenneth E. Jansen enddo 51559599516SKenneth E. Jansen q(i) = tmp 51659599516SKenneth E. Jansen enddo 51759599516SKenneth E. Jansenc 51859599516SKenneth E. Jansenc.... end 51959599516SKenneth E. Jansenc 52059599516SKenneth E. Jansen return 52159599516SKenneth E. Jansen end 52259599516SKenneth E. JansenC============================================================================ 52359599516SKenneth E. Jansen subroutine commOut( global, ilwork, n, 52459599516SKenneth E. Jansen & iper, iBC, BC ) 52559599516SKenneth E. Jansen 52659599516SKenneth E. Jansen include "common.h" 52759599516SKenneth E. Jansen 52859599516SKenneth E. Jansen real*8 global(nshg,n), BC(nshg,ndofBC) 52959599516SKenneth E. Jansen integer ilwork(nlwork), iper(nshg), iBC(nshg) 53059599516SKenneth E. Jansenc 53159599516SKenneth E. Jansen if ( numpe .gt. 1) then 53259599516SKenneth E. Jansen call commu ( global, ilwork, n, 'out') 53359599516SKenneth E. Jansen endif 53459599516SKenneth E. Jansenc 53559599516SKenneth E. Jansenc before doing AP product P must be made periodic 53659599516SKenneth E. Jansenc on processor slaves did not get updated with the 53759599516SKenneth E. Jansenc commu (out) so do it here 53859599516SKenneth E. Jansenc 53959599516SKenneth E. Jansen do i=1,n 54059599516SKenneth E. Jansen global(:,i) = global(iper(:),i) ! iper(i)=i if non-slave so no danger 54159599516SKenneth E. Jansen enddo 54259599516SKenneth E. Jansenc 54359599516SKenneth E. Jansenc slave has masters value, for abc we need to rotate it 54459599516SKenneth E. Jansenc (if this is a vector only no SCALARS) 54559599516SKenneth E. Jansen if((iabc==1) .and. (n.gt.1)) !are there any axisym bc's 54659599516SKenneth E. Jansen & call rotabc(global, iBC, 'out') 54759599516SKenneth E. Jansen 54859599516SKenneth E. Jansen 54959599516SKenneth E. Jansenc$$$ do j = 1,nshg 55059599516SKenneth E. Jansenc$$$ if (btest(iBC(j),10)) then 55159599516SKenneth E. Jansenc$$$ i = iper(j) 55259599516SKenneth E. Jansenc$$$ res(j,:) = res(i,:) 55359599516SKenneth E. Jansenc$$$ endif 55459599516SKenneth E. Jansenc$$$ enddo 55559599516SKenneth E. Jansen 55659599516SKenneth E. Jansen return 55759599516SKenneth E. Jansen end 55859599516SKenneth E. Jansen 55959599516SKenneth E. JansenC============================================================================ 56059599516SKenneth E. Jansen subroutine commIn( global, ilwork, n, 56159599516SKenneth E. Jansen & iper, iBC, BC ) 56259599516SKenneth E. Jansen 56359599516SKenneth E. Jansen include "common.h" 56459599516SKenneth E. Jansen 56559599516SKenneth E. Jansen real*8 global(nshg,n), BC(nshg,ndofBC) 56659599516SKenneth E. Jansen integer ilwork(nlwork), iper(nshg), iBC(nshg) 56759599516SKenneth E. Jansenc 56859599516SKenneth E. Jansen if((iabc==1) .and. (n.gt.1)) !are there any axisym bc's 56959599516SKenneth E. Jansen & call rotabc(global, iBC, 'in ') 57059599516SKenneth E. Jansenc 57159599516SKenneth E. Jansen 57259599516SKenneth E. Jansen if ( numpe .gt. 1 ) then 57359599516SKenneth E. Jansen call commu ( global, ilwork, n, 'in ') 57459599516SKenneth E. Jansen endif 57559599516SKenneth E. Jansen 57659599516SKenneth E. Jansen call bc3per ( iBC, global, iper, ilwork, n) 57759599516SKenneth E. Jansen 57859599516SKenneth E. Jansen return 57959599516SKenneth E. Jansen end 58059599516SKenneth E. Jansen 581