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, 11*ae8d68e4SKenneth E. Jansen & GradV, sumtime, 12*ae8d68e4SKenneth E. Jansen & svLS_lhs, svLS_ls, svLS_nFaces) 1359599516SKenneth E. Jansenc 1459599516SKenneth E. Jansenc---------------------------------------------------------------------- 1559599516SKenneth E. Jansenc 16*ae8d68e4SKenneth 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" 68*ae8d68e4SKenneth E. Jansen include "svLS.h" 6959599516SKenneth E. Jansenc 70*ae8d68e4SKenneth E. JansenC 71*ae8d68e4SKenneth E. JansenC Argument variables 72*ae8d68e4SKenneth E. JansenC 73*ae8d68e4SKenneth E. Jansen INTEGER npermdims 74*ae8d68e4SKenneth E. Jansen INTEGER ntmpdims 75*ae8d68e4SKenneth E. JansenC 76*ae8d68e4SKenneth E. JansenC Local variables 77*ae8d68e4SKenneth E. JansenC 78*ae8d68e4SKenneth E. Jansen INTEGER lesid 79*ae8d68e4SKenneth E. JansenC 80*ae8d68e4SKenneth E. Jansen REAL*8 rdtmp 81*ae8d68e4SKenneth E. JansenC 82*ae8d68e4SKenneth E. Jansen TYPE(svLS_lhsType) svLS_lhs 83*ae8d68e4SKenneth E. Jansen TYPE(svLS_lsType) svLS_ls 84*ae8d68e4SKenneth 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) 116*ae8d68e4SKenneth E. Jansen REAL*8 sumtime 117*ae8d68e4SKenneth E. Jansen INTEGER dof, svLS_nFaces, i, j, k, l 118*ae8d68e4SKenneth E. Jansen INTEGER, ALLOCATABLE :: incL(:) 119*ae8d68e4SKenneth 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 161*ae8d68e4SKenneth E. Jansen IF (svLSFlag .EQ. 1) THEN 16259599516SKenneth E. Jansen 163*ae8d68e4SKenneth E. Jansenc#################################################################### 164*ae8d68e4SKenneth E. Jansen! Here calling svLS 165*ae8d68e4SKenneth E. Jansen 166*ae8d68e4SKenneth E. Jansen ALLOCATE(faceRes(svLS_nFaces), incL(svLS_nFaces)) 167*ae8d68e4SKenneth E. Jansen CALL AddElmpvsQForsvLS(faceRes, svLS_nFaces) 168*ae8d68e4SKenneth E. Jansen 169*ae8d68e4SKenneth E. Jansen incL = 1 170*ae8d68e4SKenneth E. Jansen dof = 4 171*ae8d68e4SKenneth E. Jansen IF (.NOT.ALLOCATED(Res4)) THEN 172*ae8d68e4SKenneth E. Jansen ALLOCATE (Res4(dof,nshg), Val4(dof*dof,nnz_tot)) 173*ae8d68e4SKenneth E. Jansen END IF 174*ae8d68e4SKenneth E. Jansen 175*ae8d68e4SKenneth E. Jansen DO i=1, nshg 176*ae8d68e4SKenneth E. Jansen Res4(1:dof,i) = res(i,1:dof) 177*ae8d68e4SKenneth E. Jansen END DO 178*ae8d68e4SKenneth E. Jansen 179*ae8d68e4SKenneth E. Jansen DO i=1, nnz_tot 180*ae8d68e4SKenneth E. Jansen Val4(1:3,i) = lhsK(1:3,i) 181*ae8d68e4SKenneth E. Jansen Val4(5:7,i) = lhsK(4:6,i) 182*ae8d68e4SKenneth E. Jansen Val4(9:11,i) = lhsK(7:9,i) 183*ae8d68e4SKenneth E. Jansen Val4(13:15,i) = lhsP(1:3,i) 184*ae8d68e4SKenneth E. Jansen Val4(16,i) = lhsP(4,i) 185*ae8d68e4SKenneth E. Jansen END DO 186*ae8d68e4SKenneth E. Jansen 187*ae8d68e4SKenneth E. Jansen !Val4(4:12:4,:) = -lhsP(1:3,:)^t 188*ae8d68e4SKenneth E. Jansen DO i=1, nshg 189*ae8d68e4SKenneth E. Jansen Do j=colm(i), colm(i+1) - 1 190*ae8d68e4SKenneth E. Jansen k = rowp(j) 191*ae8d68e4SKenneth E. Jansen DO l=colm(k), colm(k+1) - 1 192*ae8d68e4SKenneth E. Jansen IF (rowp(l) .EQ. i) THEN 193*ae8d68e4SKenneth E. Jansen Val4(4:12:4,l) = -lhsP(1:3,j) 194*ae8d68e4SKenneth E. Jansen EXIT 195*ae8d68e4SKenneth E. Jansen END IF 196*ae8d68e4SKenneth E. Jansen END DO 197*ae8d68e4SKenneth E. Jansen END DO 198*ae8d68e4SKenneth E. Jansen END DO 199*ae8d68e4SKenneth E. Jansen CALL svLS_SOLVE(svLS_lhs, svLS_ls, dof, Res4, Val4, incL, 200*ae8d68e4SKenneth E. Jansen 2 faceRes) 201*ae8d68e4SKenneth E. Jansen 202*ae8d68e4SKenneth E. Jansen DO i=1, nshg 203*ae8d68e4SKenneth E. Jansen solinc(i,1:dof) = Res4(1:dof,i) 204*ae8d68e4SKenneth E. Jansen END DO 205*ae8d68e4SKenneth E. Jansen 206*ae8d68e4SKenneth E. Jansenc#################################################################### 207*ae8d68e4SKenneth E. Jansen ELSE 208*ae8d68e4SKenneth E. Jansenc 20959599516SKenneth E. Jansenc.... lesSolve : main matrix solver 21059599516SKenneth E. Jansenc 21159599516SKenneth E. Jansen lesId = numeqns(1) 21259599516SKenneth E. Jansen eqnType = 1 21359599516SKenneth E. Jansen 21459599516SKenneth E. Jansenc call summary_start() 21559599516SKenneth E. Jansen impistat=1 21659599516SKenneth E. Jansen impistat2=1 21759599516SKenneth E. Jansen tlescp1 = TMRC() 21859599516SKenneth E. Jansen#ifdef AMG 21959599516SKenneth E. Jansen ! Initial Time Profiling 22059599516SKenneth E. Jansen call cpu_time(cpusec(1)) 22159599516SKenneth E. Jansen if (irun_amg_prec.gt.0) then 22259599516SKenneth E. Jansen call ramg_control(colm,rowp,lhsK,lhsP, 22359599516SKenneth E. Jansen & ilwork,BC,iBC,iper) 22459599516SKenneth E. Jansen end if 22559599516SKenneth E. Jansen 22659599516SKenneth E. Jansen call cpu_time(cpusec(6)) 22759599516SKenneth E. Jansen if (irun_amg_prec.gt.0) then 22859599516SKenneth E. Jansen ramg_flag = 1 22959599516SKenneth E. Jansen if (irun_amg_prec.eq.2) then ! Some setup work (mode a) 23059599516SKenneth E. Jansen ramg_window = 1.0 23159599516SKenneth E. Jansen ramg_redo = 0 23259599516SKenneth E. Jansen endif 23359599516SKenneth E. Jansen do while (ramg_flag.le.irun_amg_prec) 23459599516SKenneth E. Jansen ! if smart solve, possible run solve twice 23559599516SKenneth E. Jansen ! restart only if meets plateau 23659599516SKenneth E. Jansen#endif 23759599516SKenneth E. Jansen 23859599516SKenneth E. Jansenc 23959599516SKenneth E. Jansenc.... setup the linear algebra solver 24059599516SKenneth E. Jansenc 24159599516SKenneth E. Jansen rtmp = res(:,1:4) 24259599516SKenneth E. Jansen call usrNew ( usr, eqnType, aperm, 24359599516SKenneth E. Jansen & atemp, rtmp, solinc, 24459599516SKenneth E. Jansen & flowDiag, sclrDiag, lesP, 24559599516SKenneth E. Jansen & lesQ, iBC, BC, 24659599516SKenneth E. Jansen & iper, ilwork, numpe, 24759599516SKenneth E. Jansen & nshg, nshl, nPermDims, 24859599516SKenneth E. Jansen & nTmpDims, rowp, colm, 24959599516SKenneth E. Jansen & lhsK, lhsP, rdtmp, 25059599516SKenneth E. Jansen & nnz_tot, CGsol ) 25159599516SKenneth E. Jansenc 25259599516SKenneth E. Jansenc.... solve linear system 25359599516SKenneth E. Jansenc 25459599516SKenneth E. Jansen call myfLesSolve ( lesId, usr ) 25559599516SKenneth E. Jansen#ifdef AMG 25659599516SKenneth E. Jansen ramg_flag = ramg_flag + 2 ! Default no second run in mode a 25759599516SKenneth E. Jansen if (irun_amg_prec.eq.3) then 25859599516SKenneth E. Jansen if (maxIters.gt.int(statsflow(4))) then 25959599516SKenneth E. Jansen ramg_flag = ramg_flag + 1 ! Default no second run in mode b 26059599516SKenneth E. Jansen endif 26159599516SKenneth E. Jansen endif 26259599516SKenneth E. Jansen enddo 26359599516SKenneth E. Jansen else 26459599516SKenneth E. Jansenc 26559599516SKenneth E. Jansenc.... setup the linear algebra solver 26659599516SKenneth E. Jansenc 26759599516SKenneth E. Jansen rtmp = res(:,1:4) 26859599516SKenneth E. Jansen call usrNew ( usr, eqnType, aperm, 26959599516SKenneth E. Jansen & atemp, rtmp, solinc, 27059599516SKenneth E. Jansen & flowDiag, sclrDiag, lesP, 27159599516SKenneth E. Jansen & lesQ, iBC, BC, 27259599516SKenneth E. Jansen & iper, ilwork, numpe, 27359599516SKenneth E. Jansen & nshg, nshl, nPermDims, 27459599516SKenneth E. Jansen & nTmpDims, rowp, colm, 27559599516SKenneth E. Jansen & lhsK, lhsP, rdtmp, 27659599516SKenneth E. Jansen & nnz_tot, CGsol ) 27759599516SKenneth E. Jansen 27859599516SKenneth E. Jansen call myfLesSolve( lesId, usr ) 27959599516SKenneth E. Jansen endif 28059599516SKenneth E. Jansen 28159599516SKenneth E. Jansen call cpu_time(cpusec(3)) 28259599516SKenneth E. Jansen 28359599516SKenneth E. Jansen ramg_time(1) = ramg_time(1) + cpusec(3)-cpusec(1) 28459599516SKenneth E. Jansen ramg_time(7) = ramg_time(7) + cpusec(6)-cpusec(1) 28559599516SKenneth E. Jansen 28659599516SKenneth E. Jansen ! ramg_time: 1 : local total 28759599516SKenneth E. Jansen ! 4 : local VG-cycle 28859599516SKenneth E. Jansen ! 7 : local setup time 28959599516SKenneth E. Jansen ! 11 : Ap-product level 1 29059599516SKenneth E. Jansen ! 12 : Ap-product level >1 29159599516SKenneth E. Jansen ! 13 : Prolongation/Restriction 29259599516SKenneth E. Jansen ! 20 : local boundary MLS time 29359599516SKenneth E. Jansen 29459599516SKenneth E. Jansen if (myrank.eq.master) then 29559599516SKenneth E. Jansen write(*,*) 29659599516SKenneth E. Jansen endif 29759599516SKenneth E. Jansen call ramg_print_time(" == AMG == Total ACUSIM Solver:", 29859599516SKenneth E. Jansen & ramg_time(1)) 29959599516SKenneth E. Jansen call ramg_print_time(" == AMG == Setup: ",ramg_time(7)) 30059599516SKenneth E. Jansen call ramg_print_time(" == AMG == Prec'd cycle: ",ramg_time(4)) 30159599516SKenneth E. Jansen call ramg_print_time(" == AMG == Ap product(level=1): ", 30259599516SKenneth E. Jansen & ramg_time(11)) 30359599516SKenneth E. Jansen call ramg_print_time(" == AMG == Ap product(level>=2): ", 30459599516SKenneth E. Jansen & ramg_time(12)) 30559599516SKenneth E. Jansen call ramg_print_time(" == AMG == Pro/Restr ", 30659599516SKenneth E. Jansen & ramg_time(13)) 30759599516SKenneth E. Jansen call ramg_print_time(" == AMG == Boundary Ap (GS only)", 30859599516SKenneth E. Jansen & ramg_time(20)) 30959599516SKenneth E. Jansen if (myrank.eq.master) then 31059599516SKenneth E. Jansen write(*,*) 31159599516SKenneth E. Jansen endif 31259599516SKenneth E. Jansen 31359599516SKenneth E. Jansen#endif 31459599516SKenneth E. Jansen 31559599516SKenneth E. Jansen ! End Time profiling output 31659599516SKenneth E. Jansen 31759599516SKenneth E. Jansen call getSol ( usr, solinc ) 31859599516SKenneth E. Jansen 31959599516SKenneth E. Jansen if (numpe > 1) then 32059599516SKenneth E. Jansen call commu ( solinc, ilwork, nflow, 'out') 32159599516SKenneth E. Jansen endif 32259599516SKenneth E. Jansen tlescp2 = TMRC() 32359599516SKenneth E. Jansen impistat=0 32459599516SKenneth E. Jansen impistat2=0 32559599516SKenneth E. Jansenc call summary_stop() 32659599516SKenneth E. Jansen 32759599516SKenneth E. Jansen tcorecp(1) = tcorecp(1) + telmcp2-telmcp1 ! elem. formation 32859599516SKenneth E. Jansen tcorecp(2) = tcorecp(2) + tlescp2-tlescp1 ! linear alg. solution 329*ae8d68e4SKenneth E. Jansen ENDIF 33059599516SKenneth E. Jansen call rstatic (res, y, solinc) ! output flow stats 33159599516SKenneth E. Jansenc 33259599516SKenneth E. Jansenc.... end 33359599516SKenneth E. Jansenc 33459599516SKenneth E. Jansen return 33559599516SKenneth E. Jansen end 33659599516SKenneth E. Jansen 33759599516SKenneth E. Jansen subroutine SolSclr(y, ac, u, 33859599516SKenneth E. Jansen & yold, acold, uold, 33959599516SKenneth E. Jansen & x, iBC, 34059599516SKenneth E. Jansen & BC, nPermDimsS, nTmpDimsS, 34159599516SKenneth E. Jansen & apermS, atempS, iper, 34259599516SKenneth E. Jansen & ilwork, shp, shgl, 34359599516SKenneth E. Jansen & shpb, shglb, rowp, 34459599516SKenneth E. Jansen & colm, lhsS, solinc, 34559599516SKenneth E. Jansen & tcorecpscal) 34659599516SKenneth E. Jansenc 34759599516SKenneth E. Jansenc---------------------------------------------------------------------- 34859599516SKenneth E. Jansenc 34959599516SKenneth E. Jansenc This is the 2nd interface routine to the Farzin's linear equation 35059599516SKenneth E. Jansenc solver library. 35159599516SKenneth E. Jansenc 35259599516SKenneth E. Jansenc input: 35359599516SKenneth E. Jansenc y (nshg,ndof) : Y-variables at n+alpha_f 35459599516SKenneth E. Jansenc ac (nshg,ndof) : Primvar. accel. variable n+alpha_m 35559599516SKenneth E. Jansenc yold (nshg,ndof) : Y-variables at beginning of step 35659599516SKenneth E. Jansenc x (numnp,nsd) : node coordinates 35759599516SKenneth E. Jansenc iBC (nshg) : BC codes 35859599516SKenneth E. Jansenc BC (nshg,ndofBC) : BC constraint parameters 35959599516SKenneth E. Jansenc iper (nshg) : periodic nodal information 36059599516SKenneth E. Jansenc 36159599516SKenneth E. Jansenc output: 36259599516SKenneth E. Jansenc y (nshg,ndof) : Y-variables at n+alpha_f 36359599516SKenneth E. Jansenc ac (nshg,ndof) : Primvar. accel. variable n+alpha_m 36459599516SKenneth E. Jansenc 36559599516SKenneth E. Jansenc 36659599516SKenneth E. Jansenc The followings are preliminary steps required to use Farzin's 36759599516SKenneth E. Jansenc solver library. New way of writing has to be used such as 36859599516SKenneth E. Jansenc 36959599516SKenneth E. Jansenc | E | | dS | = | RScal | 37059599516SKenneth E. Jansenc 37159599516SKenneth E. Jansenc---------------------------------------------------------------------- 37259599516SKenneth E. Jansenc 37359599516SKenneth E. Jansen use pointer_data 37459599516SKenneth E. Jansen 37559599516SKenneth E. Jansen include "common.h" 37659599516SKenneth E. Jansen include "mpif.h" 37759599516SKenneth E. Jansen include "auxmpi.h" 37859599516SKenneth E. Jansenc 37959599516SKenneth E. Jansen real*8 y(nshg,ndof), ac(nshg,ndof), 38059599516SKenneth E. Jansen & yold(nshg,ndof), acold(nshg,ndof), 38159599516SKenneth E. Jansen & u(nshg,nsd), uold(nshg,nsd), 38259599516SKenneth E. Jansen & x(numnp,nsd), BC(nshg,ndofBC), 38359599516SKenneth E. Jansen & res(nshg,1), 38459599516SKenneth E. Jansen & flowDiag(nshg,4), 38559599516SKenneth E. Jansen & sclrDiag(nshg,1), lhsS(nnz_tot), 38659599516SKenneth E. Jansen & apermS(nshg,nPermDimsS), atempS(nshg,nTmpDimsS) 38759599516SKenneth E. Jansen 38859599516SKenneth E. Jansenc 38959599516SKenneth E. Jansen real*8 shp(MAXTOP,maxsh,MAXQPT), 39059599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 39159599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 39259599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 39359599516SKenneth E. Jansenc 39459599516SKenneth E. Jansen integer usr(100), eqnType, 39559599516SKenneth E. Jansen & rowp(nshg*nnz), colm(nshg+1), 39659599516SKenneth E. Jansen & iBC(nshg), ilwork(nlwork), 39759599516SKenneth E. Jansen & iper(nshg) 39859599516SKenneth E. Jansenc 39959599516SKenneth E. Jansen real*8 yAlpha(nshg,ndof), acAlpha(nshg,ndof), 40059599516SKenneth E. Jansen & uAlpha(nshg,nsd), 40159599516SKenneth E. Jansen & lesP(nshg,1), lesQ(nshg,1), 40259599516SKenneth E. Jansen & solinc(nshg,1), CGsol(nshg), 40359599516SKenneth E. Jansen & tcorecpscal(2) 40459599516SKenneth E. Jansen 40559599516SKenneth E. Jansenc 40659599516SKenneth E. Jansenc.... *******************>> Element Data Formation <<****************** 40759599516SKenneth E. Jansenc 40859599516SKenneth E. Jansenc.... compute solution at n+alpha 40959599516SKenneth E. Jansenc 41059599516SKenneth E. Jansen call itrYAlpha( uold, yold, acold, 41159599516SKenneth E. Jansen & u, y, ac, 41259599516SKenneth E. Jansen & uAlpha, yAlpha, acAlpha) 41359599516SKenneth E. Jansenc 41459599516SKenneth E. Jansenc.... form the LHS matrices, the residual vector (at alpha) 41559599516SKenneth E. Jansenc 41659599516SKenneth E. Jansen impistat=2 41759599516SKenneth E. Jansen impistat2=1 41859599516SKenneth E. Jansen telmcp1 = TMRC() 41959599516SKenneth E. Jansen call ElmGMRSclr(yAlpha,acAlpha, x, 42059599516SKenneth E. Jansen & shp, shgl, iBC, 42159599516SKenneth E. Jansen & BC, shpb, shglb, 42259599516SKenneth E. Jansen & res, iper, ilwork, 42359599516SKenneth E. Jansen & rowp, colm, lhsS ) 42459599516SKenneth E. Jansen telmcp2 = TMRC() 42559599516SKenneth E. Jansen impistat=0 42659599516SKenneth E. Jansen impistat2=0 42759599516SKenneth E. Jansenc 42859599516SKenneth E. Jansenc.... lesSolve : main matrix solver 42959599516SKenneth E. Jansenc 43059599516SKenneth E. Jansen lesId = numeqns(1+nsolt+isclr) 43159599516SKenneth E. Jansen eqnType = 2 43259599516SKenneth E. Jansenc 43359599516SKenneth E. Jansenc.... setup the linear algebra solver 43459599516SKenneth E. Jansenc 43559599516SKenneth E. Jansen 43659599516SKenneth E. Jansen impistat=2 43759599516SKenneth E. Jansen impistat2=1 43859599516SKenneth E. Jansen tlescp1 = TMRC() 43959599516SKenneth E. Jansen call usrNew ( usr, eqnType, apermS, 44059599516SKenneth E. Jansen & atempS, res, solinc, 44159599516SKenneth E. Jansen & flowDiag, sclrDiag, lesP, 44259599516SKenneth E. Jansen & lesQ, iBC, BC, 44359599516SKenneth E. Jansen & iper, ilwork, numpe, 44459599516SKenneth E. Jansen & nshg, nshl, nPermDimsS, 44559599516SKenneth E. Jansen & nTmpDimsS, rowp, colm, 44659599516SKenneth E. Jansen & rlhsK, rlhsP, lhsS, 44759599516SKenneth E. Jansen & nnz_tot, CGsol ) 44859599516SKenneth E. Jansenc 44959599516SKenneth E. Jansenc.... solve linear system 45059599516SKenneth E. Jansenc 45159599516SKenneth E. Jansen call myfLesSolve ( lesId, usr ) 45259599516SKenneth E. Jansen call getSol ( usr, solinc ) 45359599516SKenneth E. Jansen 45459599516SKenneth E. Jansen if (numpe > 1) then 45559599516SKenneth E. Jansen call commu ( solinc, ilwork, 1, 'out') 45659599516SKenneth E. Jansen endif 45759599516SKenneth E. Jansen tlescp2 = TMRC() 45859599516SKenneth E. Jansen impistat=0 45959599516SKenneth E. Jansen impistat2=0 46059599516SKenneth E. Jansen 46159599516SKenneth E. Jansen tcorecpscal(1) = tcorecpscal(1) + telmcp2-telmcp1 ! elem. formation 46259599516SKenneth E. Jansen tcorecpscal(2) = tcorecpscal(2) + tlescp2-tlescp1 ! linear alg. solution 46359599516SKenneth E. Jansen 46459599516SKenneth E. Jansen nsolsc=5+isclr 46559599516SKenneth E. Jansen call rstaticSclr (res, y, solinc, nsolsc) ! output scalar stats 46659599516SKenneth E. Jansenc 46759599516SKenneth E. Jansenc.... end 46859599516SKenneth E. Jansenc 46959599516SKenneth E. Jansen return 47059599516SKenneth E. Jansen end 47159599516SKenneth E. Jansen 47259599516SKenneth E. Jansen 47359599516SKenneth E. Jansen 47459599516SKenneth E. Jansen 47559599516SKenneth E. Jansen 476