159599516SKenneth E. Jansen subroutine SolFlow(y, ac, u, 259599516SKenneth E. Jansen & yold, acold, uold, 359599516SKenneth E. Jansen & x, iBC, 459599516SKenneth E. Jansen & BC, res, 559599516SKenneth E. Jansen & nPermDims, nTmpDims, aperm, 659599516SKenneth E. Jansen & atemp, iper, 759599516SKenneth E. Jansen & ilwork, shp, shgl, 859599516SKenneth E. Jansen & shpb, shglb, rowp, 959599516SKenneth E. Jansen & colm, lhsK, lhsP, 1059599516SKenneth E. Jansen & solinc, rerr, tcorecp, 11ae8d68e4SKenneth E. Jansen & GradV, sumtime, 12ae8d68e4SKenneth E. Jansen & svLS_lhs, svLS_ls, svLS_nFaces) 1359599516SKenneth E. Jansenc 1459599516SKenneth E. Jansenc---------------------------------------------------------------------- 1559599516SKenneth E. Jansenc 16ae8d68e4SKenneth E. Jansenc This is the 2nd interface routine to the linear equation 1759599516SKenneth E. Jansenc solver library that uses the CGP and GMRES methods. 1859599516SKenneth E. Jansenc 1959599516SKenneth E. Jansenc input: 2059599516SKenneth E. Jansenc y (nshg,ndof) : Y-variables at n+alpha_f 2159599516SKenneth E. Jansenc ac (nshg,ndof) : Primvar. accel. variable n+alpha_m 2259599516SKenneth E. Jansenc yold (nshg,ndof) : Y-variables at beginning of step 2359599516SKenneth E. Jansenc acold (nshg,ndof) : Primvar. accel. at beginning of step 2459599516SKenneth E. Jansenc x (numnp,nsd) : node coordinates 2559599516SKenneth E. Jansenc iBC (nshg) : BC codes 2659599516SKenneth E. Jansenc BC (nshg,ndofBC) : BC constraint parameters 2759599516SKenneth E. Jansenc iper (nshg) : periodic nodal information 2859599516SKenneth E. Jansenc 2959599516SKenneth E. Jansenc output: 3059599516SKenneth E. Jansenc res (nshg,nflow) : preconditioned residual 3159599516SKenneth E. Jansenc y (nshg,ndof) : Y-variables at n+alpha_f 3259599516SKenneth E. Jansenc ac (nshg,ndof) : Primvar. accel. variable n+alpha_m 3359599516SKenneth E. Jansenc 3459599516SKenneth E. Jansenc 3559599516SKenneth E. Jansenc The followings are preliminary steps required to use Farzin's 3659599516SKenneth E. Jansenc solver library. New way of writing has to be used such as 3759599516SKenneth E. Jansenc 3859599516SKenneth E. Jansenc | K G | | du | | Rmom | 3959599516SKenneth E. Jansenc | | | | = | | 4059599516SKenneth E. Jansenc | G^t C | | dp | | Rcon | 4159599516SKenneth E. Jansenc 4259599516SKenneth E. Jansenc | E | | dT | = | Rtemp | 4359599516SKenneth E. Jansenc 4459599516SKenneth E. Jansenc where 4559599516SKenneth E. Jansenc 4659599516SKenneth E. Jansenc xKebe : K_ab = dRmom_a/du_b xTe : E_ab = dRtemp_a/dT_b 4759599516SKenneth E. Jansenc 4859599516SKenneth E. Jansenc G_ab = dRmom_a/dp_b 4959599516SKenneth E. Jansenc xGoC : 5059599516SKenneth E. Jansenc C_ab = dRcon_a/dp_b 5159599516SKenneth E. Jansenc 5259599516SKenneth E. Jansenc resf = Rmon Rcon rest = Rtemp 5359599516SKenneth E. Jansenc 5459599516SKenneth E. Jansenc 5559599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 5659599516SKenneth E. Jansenc Juin Kim, Summer 1998. (Incompressible flow solver interface) 5759599516SKenneth E. Jansenc Alberto Figueroa. CMM-FSI 5859599516SKenneth E. Jansenc---------------------------------------------------------------------- 5959599516SKenneth E. Jansenc 6059599516SKenneth E. Jansen use pointer_data 6159599516SKenneth E. Jansen#ifdef AMG 6259599516SKenneth E. Jansen use ramg_data 6359599516SKenneth E. Jansen#endif 6459599516SKenneth E. Jansen 6559599516SKenneth E. Jansen include "common.h" 6659599516SKenneth E. Jansen include "mpif.h" 6759599516SKenneth E. Jansen include "auxmpi.h" 68ae8d68e4SKenneth E. Jansen include "svLS.h" 6959599516SKenneth E. Jansenc 70ae8d68e4SKenneth E. JansenC 71ae8d68e4SKenneth E. JansenC Argument variables 72ae8d68e4SKenneth E. JansenC 73ae8d68e4SKenneth E. Jansen INTEGER npermdims 74ae8d68e4SKenneth E. Jansen INTEGER ntmpdims 75ae8d68e4SKenneth E. JansenC 76ae8d68e4SKenneth E. JansenC Local variables 77ae8d68e4SKenneth E. JansenC 78ae8d68e4SKenneth E. Jansen INTEGER lesid 79ae8d68e4SKenneth E. JansenC 80ae8d68e4SKenneth E. Jansen REAL*8 rdtmp 81ae8d68e4SKenneth E. JansenC 82efb88323SKenneth E. Jansen TYPE(svLS_lhsType), INTENT(INOUT) :: svLS_lhs 83efb88323SKenneth E. Jansen TYPE(svLS_lsType), INTENT(INOUT) :: svLS_ls 84ae8d68e4SKenneth E. Jansen 8559599516SKenneth E. Jansen real*8 y(nshg,ndof), ac(nshg,ndof), 8659599516SKenneth E. Jansen & yold(nshg,ndof), acold(nshg,ndof), 8759599516SKenneth E. Jansen & u(nshg,nsd), uold(nshg,nsd), 8859599516SKenneth E. Jansen & x(numnp,nsd), BC(nshg,ndofBC), 8959599516SKenneth E. Jansen & res(nshg,nflow), tmpres(nshg,nflow), 9059599516SKenneth E. Jansen & flowDiag(nshg,4), 9159599516SKenneth E. Jansen & aperm(nshg,nPermDims), atemp(nshg,nTmpDims), 9259599516SKenneth E. Jansen & sclrDiag(nshg,1), 9359599516SKenneth E. Jansen & lhsK(9,nnz_tot), lhsP(4,nnz_tot), 9459599516SKenneth E. Jansen & GradV(nshg,nsdsq) 9559599516SKenneth E. Jansenc 9659599516SKenneth E. Jansen real*8 shp(MAXTOP,maxsh,MAXQPT), 9759599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 9859599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 9959599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 10059599516SKenneth E. Jansenc 10159599516SKenneth E. Jansen integer usr(100), eqnType,temp, 10259599516SKenneth E. Jansen & rowp(nshg*nnz), colm(nshg+1), 10359599516SKenneth E. Jansen & iBC(nshg), ilwork(nlwork), 10459599516SKenneth E. Jansen & iper(nshg) 10559599516SKenneth E. Jansenc 10659599516SKenneth E. Jansen real*8 yAlpha(nshg,ndof), acAlpha(nshg,ndof), 10759599516SKenneth E. Jansen & uAlpha(nshg,nsd), 10859599516SKenneth E. Jansen & lesP(nshg,4), lesQ(nshg,4), 10959599516SKenneth E. Jansen & solinc(nshg,ndof), CGsol(nshg) 11059599516SKenneth E. Jansen 11159599516SKenneth E. Jansen real*8 tcorecp(2) 11259599516SKenneth E. Jansen 11359599516SKenneth E. Jansen real*8 rerr(nshg,10), rtmp(nshg,4),rtemp 11459599516SKenneth E. Jansen 11559599516SKenneth E. Jansen real*8 msum(4),mval(4),cpusec(10) 116ae8d68e4SKenneth E. Jansen REAL*8 sumtime 117ae8d68e4SKenneth E. Jansen INTEGER dof, svLS_nFaces, i, j, k, l 118ae8d68e4SKenneth E. Jansen INTEGER, ALLOCATABLE :: incL(:) 119ae8d68e4SKenneth E. Jansen REAL*8, ALLOCATABLE :: faceRes(:), Res4(:,:), Val4(:,:) 12059599516SKenneth E. Jansen 12159599516SKenneth E. Jansenc 12259599516SKenneth E. Jansenc.... *******************>> Element Data Formation <<****************** 12359599516SKenneth E. Jansenc 12459599516SKenneth E. Jansenc 12559599516SKenneth E. Jansenc.... set the parameters for flux and surface tension calculations 12659599516SKenneth E. Jansenc 12759599516SKenneth E. Jansenc 12859599516SKenneth E. Jansen temp = npro 12959599516SKenneth E. Jansen 13059599516SKenneth E. Jansen 13159599516SKenneth E. Jansen idflx = 0 13259599516SKenneth E. Jansen if(idiff >= 1 ) idflx= (nflow-1) * nsd 13359599516SKenneth E. Jansen if (isurf == 1) idflx=nflow*nsd 13459599516SKenneth E. Jansenc.... compute solution at n+alpha 13559599516SKenneth E. Jansenc 13659599516SKenneth E. Jansen call itrYAlpha( uold, yold, acold, 13759599516SKenneth E. Jansen & u, y, ac, 13859599516SKenneth E. Jansen & uAlpha, yAlpha, acAlpha) 13959599516SKenneth E. Jansen 14059599516SKenneth E. Jansenc 14159599516SKenneth E. Jansenc.... form the LHS matrices, the residual vector (at alpha) 14259599516SKenneth E. Jansenc 14359599516SKenneth E. Jansenc call summary_start() 14459599516SKenneth E. Jansen impistat=1 14559599516SKenneth E. Jansen impistat2=1 14659599516SKenneth E. Jansen telmcp1 = TMRC() 14759599516SKenneth E. Jansen call ElmGMR (uAlpha, yAlpha, acAlpha, x, 14859599516SKenneth E. Jansen & shp, shgl, iBC, 14959599516SKenneth E. Jansen & BC, shpb, shglb, 15059599516SKenneth E. Jansen & res, iper, ilwork, 15159599516SKenneth E. Jansen & rowp, colm, lhsK, 15259599516SKenneth E. Jansen & lhsP, rerr, GradV ) 15359599516SKenneth E. Jansen telmcp2 = TMRC() 15459599516SKenneth E. Jansen impistat=0 15559599516SKenneth E. Jansen impistat2=0 15659599516SKenneth E. Jansenc call summary_stop() 15759599516SKenneth E. Jansen 15859599516SKenneth E. Jansen 15959599516SKenneth E. Jansen tmpres(:,:) = res(:,:) 16059599516SKenneth E. Jansen iblk = 1 161ae8d68e4SKenneth E. Jansen IF (svLSFlag .EQ. 1) THEN 16259599516SKenneth E. Jansen 163ae8d68e4SKenneth E. Jansenc#################################################################### 164ae8d68e4SKenneth E. Jansen! Here calling svLS 165ae8d68e4SKenneth E. Jansen 166ae8d68e4SKenneth E. Jansen ALLOCATE(faceRes(svLS_nFaces), incL(svLS_nFaces)) 167f4e2c78fSKenneth E. Jansen faceRes=zero ! function to compute this left out at this time but would be needed to enable adnvanced p vs. Q BC's 168ae8d68e4SKenneth E. Jansen incL = 1 169ae8d68e4SKenneth E. Jansen dof = 4 170ae8d68e4SKenneth E. Jansen IF (.NOT.ALLOCATED(Res4)) THEN 171ae8d68e4SKenneth E. Jansen ALLOCATE (Res4(dof,nshg), Val4(dof*dof,nnz_tot)) 172ae8d68e4SKenneth E. Jansen END IF 173ae8d68e4SKenneth E. Jansen 174ae8d68e4SKenneth E. Jansen DO i=1, nshg 175ae8d68e4SKenneth E. Jansen Res4(1:dof,i) = res(i,1:dof) 176ae8d68e4SKenneth E. Jansen END DO 177ae8d68e4SKenneth E. Jansen 178ae8d68e4SKenneth E. Jansen DO i=1, nnz_tot 179ae8d68e4SKenneth E. Jansen Val4(1:3,i) = lhsK(1:3,i) 180ae8d68e4SKenneth E. Jansen Val4(5:7,i) = lhsK(4:6,i) 181ae8d68e4SKenneth E. Jansen Val4(9:11,i) = lhsK(7:9,i) 182ae8d68e4SKenneth E. Jansen Val4(13:15,i) = lhsP(1:3,i) 183ae8d68e4SKenneth E. Jansen Val4(16,i) = lhsP(4,i) 184ae8d68e4SKenneth E. Jansen END DO 185ae8d68e4SKenneth E. Jansen 186ae8d68e4SKenneth E. Jansen !Val4(4:12:4,:) = -lhsP(1:3,:)^t 187ae8d68e4SKenneth E. Jansen DO i=1, nshg 188ae8d68e4SKenneth E. Jansen Do j=colm(i), colm(i+1) - 1 189ae8d68e4SKenneth E. Jansen k = rowp(j) 190ae8d68e4SKenneth E. Jansen DO l=colm(k), colm(k+1) - 1 191ae8d68e4SKenneth E. Jansen IF (rowp(l) .EQ. i) THEN 192ae8d68e4SKenneth E. Jansen Val4(4:12:4,l) = -lhsP(1:3,j) 193ae8d68e4SKenneth E. Jansen EXIT 194ae8d68e4SKenneth E. Jansen END IF 195ae8d68e4SKenneth E. Jansen END DO 196ae8d68e4SKenneth E. Jansen END DO 197ae8d68e4SKenneth E. Jansen END DO 198ae8d68e4SKenneth E. Jansen CALL svLS_SOLVE(svLS_lhs, svLS_ls, dof, Res4, Val4, incL, 199ae8d68e4SKenneth E. Jansen 2 faceRes) 200ae8d68e4SKenneth E. Jansen 201*ec121c45SKenneth E. Jansen if(myrank.eq.master) write(*,*) 'svLS outer iterations', svLS_ls%RI%itr 202efb88323SKenneth E. Jansen statsflow(1)=1.0*svLS_ls%GM%itr 203efb88323SKenneth E. Jansen statsflow(4)=1.0*svLS_ls%CG%itr 204ae8d68e4SKenneth E. Jansen DO i=1, nshg 205ae8d68e4SKenneth E. Jansen solinc(i,1:dof) = Res4(1:dof,i) 206ae8d68e4SKenneth E. Jansen END DO 207ae8d68e4SKenneth E. Jansen 208ae8d68e4SKenneth E. Jansenc#################################################################### 209ae8d68e4SKenneth E. Jansen ELSE 210ae8d68e4SKenneth E. Jansenc 21159599516SKenneth E. Jansenc.... lesSolve : main matrix solver 21259599516SKenneth E. Jansenc 21359599516SKenneth E. Jansen lesId = numeqns(1) 21459599516SKenneth E. Jansen eqnType = 1 21559599516SKenneth E. Jansen 21659599516SKenneth E. Jansenc call summary_start() 21759599516SKenneth E. Jansen impistat=1 21859599516SKenneth E. Jansen impistat2=1 21959599516SKenneth E. Jansen tlescp1 = TMRC() 22059599516SKenneth E. Jansen#ifdef AMG 22159599516SKenneth E. Jansen ! Initial Time Profiling 22259599516SKenneth E. Jansen call cpu_time(cpusec(1)) 22359599516SKenneth E. Jansen if (irun_amg_prec.gt.0) then 22459599516SKenneth E. Jansen call ramg_control(colm,rowp,lhsK,lhsP, 22559599516SKenneth E. Jansen & ilwork,BC,iBC,iper) 22659599516SKenneth E. Jansen end if 22759599516SKenneth E. Jansen 22859599516SKenneth E. Jansen call cpu_time(cpusec(6)) 22959599516SKenneth E. Jansen if (irun_amg_prec.gt.0) then 23059599516SKenneth E. Jansen ramg_flag = 1 23159599516SKenneth E. Jansen if (irun_amg_prec.eq.2) then ! Some setup work (mode a) 23259599516SKenneth E. Jansen ramg_window = 1.0 23359599516SKenneth E. Jansen ramg_redo = 0 23459599516SKenneth E. Jansen endif 23559599516SKenneth E. Jansen do while (ramg_flag.le.irun_amg_prec) 23659599516SKenneth E. Jansen ! if smart solve, possible run solve twice 23759599516SKenneth E. Jansen ! restart only if meets plateau 23859599516SKenneth E. Jansen#endif 23959599516SKenneth E. Jansen 24059599516SKenneth E. Jansenc 24159599516SKenneth E. Jansenc.... setup the linear algebra solver 24259599516SKenneth E. Jansenc 24359599516SKenneth E. Jansen rtmp = res(:,1:4) 24459599516SKenneth E. Jansen call usrNew ( usr, eqnType, aperm, 24559599516SKenneth E. Jansen & atemp, rtmp, solinc, 24659599516SKenneth E. Jansen & flowDiag, sclrDiag, lesP, 24759599516SKenneth E. Jansen & lesQ, iBC, BC, 24859599516SKenneth E. Jansen & iper, ilwork, numpe, 24959599516SKenneth E. Jansen & nshg, nshl, nPermDims, 25059599516SKenneth E. Jansen & nTmpDims, rowp, colm, 25159599516SKenneth E. Jansen & lhsK, lhsP, rdtmp, 25259599516SKenneth E. Jansen & nnz_tot, CGsol ) 25359599516SKenneth E. Jansenc 25459599516SKenneth E. Jansenc.... solve linear system 25559599516SKenneth E. Jansenc 25659599516SKenneth E. Jansen call myfLesSolve ( lesId, usr ) 25759599516SKenneth E. Jansen#ifdef AMG 25859599516SKenneth E. Jansen ramg_flag = ramg_flag + 2 ! Default no second run in mode a 25959599516SKenneth E. Jansen if (irun_amg_prec.eq.3) then 26059599516SKenneth E. Jansen if (maxIters.gt.int(statsflow(4))) then 26159599516SKenneth E. Jansen ramg_flag = ramg_flag + 1 ! Default no second run in mode b 26259599516SKenneth E. Jansen endif 26359599516SKenneth E. Jansen endif 26459599516SKenneth E. Jansen enddo 26559599516SKenneth E. Jansen else 26659599516SKenneth E. Jansenc 26759599516SKenneth E. Jansenc.... setup the linear algebra solver 26859599516SKenneth E. Jansenc 26959599516SKenneth E. Jansen rtmp = res(:,1:4) 27059599516SKenneth E. Jansen call usrNew ( usr, eqnType, aperm, 27159599516SKenneth E. Jansen & atemp, rtmp, solinc, 27259599516SKenneth E. Jansen & flowDiag, sclrDiag, lesP, 27359599516SKenneth E. Jansen & lesQ, iBC, BC, 27459599516SKenneth E. Jansen & iper, ilwork, numpe, 27559599516SKenneth E. Jansen & nshg, nshl, nPermDims, 27659599516SKenneth E. Jansen & nTmpDims, rowp, colm, 27759599516SKenneth E. Jansen & lhsK, lhsP, rdtmp, 27859599516SKenneth E. Jansen & nnz_tot, CGsol ) 27959599516SKenneth E. Jansen 28059599516SKenneth E. Jansen call myfLesSolve( lesId, usr ) 28159599516SKenneth E. Jansen endif 28259599516SKenneth E. Jansen 28359599516SKenneth E. Jansen call cpu_time(cpusec(3)) 28459599516SKenneth E. Jansen 28559599516SKenneth E. Jansen ramg_time(1) = ramg_time(1) + cpusec(3)-cpusec(1) 28659599516SKenneth E. Jansen ramg_time(7) = ramg_time(7) + cpusec(6)-cpusec(1) 28759599516SKenneth E. Jansen 28859599516SKenneth E. Jansen ! ramg_time: 1 : local total 28959599516SKenneth E. Jansen ! 4 : local VG-cycle 29059599516SKenneth E. Jansen ! 7 : local setup time 29159599516SKenneth E. Jansen ! 11 : Ap-product level 1 29259599516SKenneth E. Jansen ! 12 : Ap-product level >1 29359599516SKenneth E. Jansen ! 13 : Prolongation/Restriction 29459599516SKenneth E. Jansen ! 20 : local boundary MLS time 29559599516SKenneth E. Jansen 29659599516SKenneth E. Jansen if (myrank.eq.master) then 29759599516SKenneth E. Jansen write(*,*) 29859599516SKenneth E. Jansen endif 29959599516SKenneth E. Jansen call ramg_print_time(" == AMG == Total ACUSIM Solver:", 30059599516SKenneth E. Jansen & ramg_time(1)) 30159599516SKenneth E. Jansen call ramg_print_time(" == AMG == Setup: ",ramg_time(7)) 30259599516SKenneth E. Jansen call ramg_print_time(" == AMG == Prec'd cycle: ",ramg_time(4)) 30359599516SKenneth E. Jansen call ramg_print_time(" == AMG == Ap product(level=1): ", 30459599516SKenneth E. Jansen & ramg_time(11)) 30559599516SKenneth E. Jansen call ramg_print_time(" == AMG == Ap product(level>=2): ", 30659599516SKenneth E. Jansen & ramg_time(12)) 30759599516SKenneth E. Jansen call ramg_print_time(" == AMG == Pro/Restr ", 30859599516SKenneth E. Jansen & ramg_time(13)) 30959599516SKenneth E. Jansen call ramg_print_time(" == AMG == Boundary Ap (GS only)", 31059599516SKenneth E. Jansen & ramg_time(20)) 31159599516SKenneth E. Jansen if (myrank.eq.master) then 31259599516SKenneth E. Jansen write(*,*) 31359599516SKenneth E. Jansen endif 31459599516SKenneth E. Jansen 31559599516SKenneth E. Jansen#endif 31659599516SKenneth E. Jansen 31759599516SKenneth E. Jansen ! End Time profiling output 31859599516SKenneth E. Jansen 31959599516SKenneth E. Jansen call getSol ( usr, solinc ) 32059599516SKenneth E. Jansen 32159599516SKenneth E. Jansen if (numpe > 1) then 32259599516SKenneth E. Jansen call commu ( solinc, ilwork, nflow, 'out') 32359599516SKenneth E. Jansen endif 324436818eeSKenneth E. Jansen ENDIF ! end of selection between solvers. 32559599516SKenneth E. Jansen tlescp2 = TMRC() 32659599516SKenneth E. Jansen impistat=0 32759599516SKenneth E. Jansen impistat2=0 32859599516SKenneth E. Jansenc call summary_stop() 32959599516SKenneth E. Jansen 33059599516SKenneth E. Jansen tcorecp(1) = tcorecp(1) + telmcp2-telmcp1 ! elem. formation 33159599516SKenneth E. Jansen tcorecp(2) = tcorecp(2) + tlescp2-tlescp1 ! linear alg. solution 33259599516SKenneth E. Jansen call rstatic (res, y, solinc) ! output flow stats 33359599516SKenneth E. Jansenc 33459599516SKenneth E. Jansenc.... end 33559599516SKenneth E. Jansenc 33659599516SKenneth E. Jansen return 33759599516SKenneth E. Jansen end 33859599516SKenneth E. Jansen 33959599516SKenneth E. Jansen subroutine SolSclr(y, ac, u, 34059599516SKenneth E. Jansen & yold, acold, uold, 34159599516SKenneth E. Jansen & x, iBC, 34259599516SKenneth E. Jansen & BC, nPermDimsS, nTmpDimsS, 34359599516SKenneth E. Jansen & apermS, atempS, iper, 34459599516SKenneth E. Jansen & ilwork, shp, shgl, 34559599516SKenneth E. Jansen & shpb, shglb, rowp, 34659599516SKenneth E. Jansen & colm, lhsS, solinc, 347436818eeSKenneth E. Jansen & tcorecpscal, 348436818eeSKenneth E. Jansen & svLS_lhs, svLS_ls, svLS_nFaces) 34959599516SKenneth E. Jansenc 35059599516SKenneth E. Jansenc---------------------------------------------------------------------- 35159599516SKenneth E. Jansenc 35259599516SKenneth E. Jansenc This is the 2nd interface routine to the Farzin's linear equation 35359599516SKenneth E. Jansenc solver library. 35459599516SKenneth E. Jansenc 35559599516SKenneth E. Jansenc input: 35659599516SKenneth E. Jansenc y (nshg,ndof) : Y-variables at n+alpha_f 35759599516SKenneth E. Jansenc ac (nshg,ndof) : Primvar. accel. variable n+alpha_m 35859599516SKenneth E. Jansenc yold (nshg,ndof) : Y-variables at beginning of step 35959599516SKenneth E. Jansenc x (numnp,nsd) : node coordinates 36059599516SKenneth E. Jansenc iBC (nshg) : BC codes 36159599516SKenneth E. Jansenc BC (nshg,ndofBC) : BC constraint parameters 36259599516SKenneth E. Jansenc iper (nshg) : periodic nodal information 36359599516SKenneth E. Jansenc 36459599516SKenneth E. Jansenc output: 36559599516SKenneth E. Jansenc y (nshg,ndof) : Y-variables at n+alpha_f 36659599516SKenneth E. Jansenc ac (nshg,ndof) : Primvar. accel. variable n+alpha_m 36759599516SKenneth E. Jansenc 36859599516SKenneth E. Jansenc 36959599516SKenneth E. Jansenc The followings are preliminary steps required to use Farzin's 37059599516SKenneth E. Jansenc solver library. New way of writing has to be used such as 37159599516SKenneth E. Jansenc 37259599516SKenneth E. Jansenc | E | | dS | = | RScal | 37359599516SKenneth E. Jansenc 37459599516SKenneth E. Jansenc---------------------------------------------------------------------- 37559599516SKenneth E. Jansenc 37659599516SKenneth E. Jansen use pointer_data 37759599516SKenneth E. Jansen 37859599516SKenneth E. Jansen include "common.h" 37959599516SKenneth E. Jansen include "mpif.h" 38059599516SKenneth E. Jansen include "auxmpi.h" 381436818eeSKenneth E. Jansen include "svLS.h" 38259599516SKenneth E. Jansenc 38359599516SKenneth E. Jansen real*8 y(nshg,ndof), ac(nshg,ndof), 38459599516SKenneth E. Jansen & yold(nshg,ndof), acold(nshg,ndof), 38559599516SKenneth E. Jansen & u(nshg,nsd), uold(nshg,nsd), 38659599516SKenneth E. Jansen & x(numnp,nsd), BC(nshg,ndofBC), 38759599516SKenneth E. Jansen & res(nshg,1), 38859599516SKenneth E. Jansen & flowDiag(nshg,4), 38959599516SKenneth E. Jansen & sclrDiag(nshg,1), lhsS(nnz_tot), 39059599516SKenneth E. Jansen & apermS(nshg,nPermDimsS), atempS(nshg,nTmpDimsS) 39159599516SKenneth E. Jansen 39259599516SKenneth E. Jansenc 39359599516SKenneth E. Jansen real*8 shp(MAXTOP,maxsh,MAXQPT), 39459599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 39559599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 39659599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 39759599516SKenneth E. Jansenc 39859599516SKenneth E. Jansen integer usr(100), eqnType, 39959599516SKenneth E. Jansen & rowp(nshg*nnz), colm(nshg+1), 40059599516SKenneth E. Jansen & iBC(nshg), ilwork(nlwork), 40159599516SKenneth E. Jansen & iper(nshg) 40259599516SKenneth E. Jansenc 40359599516SKenneth E. Jansen real*8 yAlpha(nshg,ndof), acAlpha(nshg,ndof), 40459599516SKenneth E. Jansen & uAlpha(nshg,nsd), 40559599516SKenneth E. Jansen & lesP(nshg,1), lesQ(nshg,1), 40659599516SKenneth E. Jansen & solinc(nshg,1), CGsol(nshg), 40759599516SKenneth E. Jansen & tcorecpscal(2) 408436818eeSKenneth E. Jansen TYPE(svLS_lhsType), INTENT(INOUT) :: svLS_lhs 409436818eeSKenneth E. Jansen TYPE(svLS_lsType), INTENT(INOUT) :: svLS_ls 410436818eeSKenneth E. Jansen REAL*8 sumtime 411436818eeSKenneth E. Jansen INTEGER dof, svLS_nFaces, i, j, k, l 412436818eeSKenneth E. Jansen INTEGER, ALLOCATABLE :: incL(:) 413436818eeSKenneth E. Jansen REAL*8, ALLOCATABLE :: faceRes(:), Res1(:,:), Val1(:,:) 41459599516SKenneth E. Jansen 41559599516SKenneth E. Jansenc 41659599516SKenneth E. Jansenc.... *******************>> Element Data Formation <<****************** 41759599516SKenneth E. Jansenc 41859599516SKenneth E. Jansenc.... compute solution at n+alpha 41959599516SKenneth E. Jansenc 42059599516SKenneth E. Jansen call itrYAlpha( uold, yold, acold, 42159599516SKenneth E. Jansen & u, y, ac, 42259599516SKenneth E. Jansen & uAlpha, yAlpha, acAlpha) 42359599516SKenneth E. Jansenc 42459599516SKenneth E. Jansenc.... form the LHS matrices, the residual vector (at alpha) 42559599516SKenneth E. Jansenc 42659599516SKenneth E. Jansen impistat=2 42759599516SKenneth E. Jansen impistat2=1 42859599516SKenneth E. Jansen telmcp1 = TMRC() 42959599516SKenneth E. Jansen call ElmGMRSclr(yAlpha,acAlpha, x, 43059599516SKenneth E. Jansen & shp, shgl, iBC, 43159599516SKenneth E. Jansen & BC, shpb, shglb, 43259599516SKenneth E. Jansen & res, iper, ilwork, 43359599516SKenneth E. Jansen & rowp, colm, lhsS ) 43459599516SKenneth E. Jansen telmcp2 = TMRC() 43559599516SKenneth E. Jansen impistat=0 43659599516SKenneth E. Jansen impistat2=0 437436818eeSKenneth E. Jansen statssclr(1)=0 438436818eeSKenneth E. Jansen IF (svLSFlag .EQ. 1) THEN 439436818eeSKenneth E. Jansen 440436818eeSKenneth E. Jansenc#################################################################### 441436818eeSKenneth E. Jansen! Here calling svLS 442436818eeSKenneth E. Jansen 443436818eeSKenneth E. Jansen ALLOCATE(faceRes(svLS_nFaces), incL(svLS_nFaces)) 444*ec121c45SKenneth E. Jansen faceRes=zero 445436818eeSKenneth E. Jansen incL = 1 446436818eeSKenneth E. Jansen dof = 1 447436818eeSKenneth E. Jansen IF (.NOT.ALLOCATED(Res1)) THEN 448436818eeSKenneth E. Jansen ALLOCATE (Res1(dof,nshg), Val1(dof*dof,nnz_tot)) 449436818eeSKenneth E. Jansen END IF 450436818eeSKenneth E. Jansen 451436818eeSKenneth E. Jansen DO i=1, nshg 452436818eeSKenneth E. Jansen Res1(1,i) = res(i,1) 453436818eeSKenneth E. Jansen END DO 454436818eeSKenneth E. Jansen 455436818eeSKenneth E. Jansen DO i=1, nnz_tot 456436818eeSKenneth E. Jansen Val1(1,i) = lhsS(i) 457436818eeSKenneth E. Jansen END DO 458436818eeSKenneth E. Jansen 459436818eeSKenneth E. Jansen CALL svLS_SOLVE(svLS_lhs, svLS_ls, dof, Res1, Val1, incL, 460436818eeSKenneth E. Jansen 2 faceRes) 461436818eeSKenneth E. Jansen statssclr(1)=1.0*svLS_ls%RI%itr 462436818eeSKenneth E. Jansen DO i=1, nshg 463436818eeSKenneth E. Jansen solinc(i,1) = Res1(1,i) 464436818eeSKenneth E. Jansen END DO 465436818eeSKenneth E. Jansen 466436818eeSKenneth E. Jansenc#################################################################### 467436818eeSKenneth E. Jansen ELSE 46859599516SKenneth E. Jansenc 46959599516SKenneth E. Jansenc.... lesSolve : main matrix solver 47059599516SKenneth E. Jansenc 47159599516SKenneth E. Jansen lesId = numeqns(1+nsolt+isclr) 47259599516SKenneth E. Jansen eqnType = 2 47359599516SKenneth E. Jansenc 47459599516SKenneth E. Jansenc.... setup the linear algebra solver 47559599516SKenneth E. Jansenc 47659599516SKenneth E. Jansen 47759599516SKenneth E. Jansen impistat=2 47859599516SKenneth E. Jansen impistat2=1 47959599516SKenneth E. Jansen tlescp1 = TMRC() 48059599516SKenneth E. Jansen call usrNew ( usr, eqnType, apermS, 48159599516SKenneth E. Jansen & atempS, res, solinc, 48259599516SKenneth E. Jansen & flowDiag, sclrDiag, lesP, 48359599516SKenneth E. Jansen & lesQ, iBC, BC, 48459599516SKenneth E. Jansen & iper, ilwork, numpe, 48559599516SKenneth E. Jansen & nshg, nshl, nPermDimsS, 48659599516SKenneth E. Jansen & nTmpDimsS, rowp, colm, 48759599516SKenneth E. Jansen & rlhsK, rlhsP, lhsS, 48859599516SKenneth E. Jansen & nnz_tot, CGsol ) 48959599516SKenneth E. Jansenc 49059599516SKenneth E. Jansenc.... solve linear system 49159599516SKenneth E. Jansenc 49259599516SKenneth E. Jansen call myfLesSolve ( lesId, usr ) 49359599516SKenneth E. Jansen call getSol ( usr, solinc ) 49459599516SKenneth E. Jansen 49559599516SKenneth E. Jansen if (numpe > 1) then 49659599516SKenneth E. Jansen call commu ( solinc, ilwork, 1, 'out') 49759599516SKenneth E. Jansen endif 498436818eeSKenneth E. Jansen ENDIF ! decision between solvers 49959599516SKenneth E. Jansen tlescp2 = TMRC() 50059599516SKenneth E. Jansen impistat=0 50159599516SKenneth E. Jansen impistat2=0 50259599516SKenneth E. Jansen 50359599516SKenneth E. Jansen tcorecpscal(1) = tcorecpscal(1) + telmcp2-telmcp1 ! elem. formation 50459599516SKenneth E. Jansen tcorecpscal(2) = tcorecpscal(2) + tlescp2-tlescp1 ! linear alg. solution 50559599516SKenneth E. Jansen 50659599516SKenneth E. Jansen nsolsc=5+isclr 50759599516SKenneth E. Jansen call rstaticSclr (res, y, solinc, nsolsc) ! output scalar stats 50859599516SKenneth E. Jansenc 50959599516SKenneth E. Jansenc.... end 51059599516SKenneth E. Jansenc 51159599516SKenneth E. Jansen return 51259599516SKenneth E. Jansen end 51359599516SKenneth E. Jansen 51459599516SKenneth E. Jansen 51559599516SKenneth E. Jansen 51659599516SKenneth E. Jansen 51759599516SKenneth E. Jansen 518