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