1*59599516SKenneth E. Jansen subroutine SolFlow(y, ac, u, 2*59599516SKenneth E. Jansen & yold, acold, uold, 3*59599516SKenneth E. Jansen & x, iBC, 4*59599516SKenneth E. Jansen & BC, res, 5*59599516SKenneth E. Jansen & nPermDims, nTmpDims, aperm, 6*59599516SKenneth E. Jansen & atemp, iper, 7*59599516SKenneth E. Jansen & ilwork, shp, shgl, 8*59599516SKenneth E. Jansen & shpb, shglb, rowp, 9*59599516SKenneth E. Jansen & colm, lhsK, lhsP, 10*59599516SKenneth E. Jansen & solinc, rerr, tcorecp, 11*59599516SKenneth E. Jansen & GradV) 12*59599516SKenneth E. Jansenc 13*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 14*59599516SKenneth E. Jansenc 15*59599516SKenneth E. Jansenc This is the 2nd interface routine to the Farzin's linear equation 16*59599516SKenneth E. Jansenc solver library that uses the CGP and GMRES methods. 17*59599516SKenneth E. Jansenc 18*59599516SKenneth E. Jansenc input: 19*59599516SKenneth E. Jansenc y (nshg,ndof) : Y-variables at n+alpha_f 20*59599516SKenneth E. Jansenc ac (nshg,ndof) : Primvar. accel. variable n+alpha_m 21*59599516SKenneth E. Jansenc yold (nshg,ndof) : Y-variables at beginning of step 22*59599516SKenneth E. Jansenc acold (nshg,ndof) : Primvar. accel. at beginning of step 23*59599516SKenneth E. Jansenc x (numnp,nsd) : node coordinates 24*59599516SKenneth E. Jansenc iBC (nshg) : BC codes 25*59599516SKenneth E. Jansenc BC (nshg,ndofBC) : BC constraint parameters 26*59599516SKenneth E. Jansenc iper (nshg) : periodic nodal information 27*59599516SKenneth E. Jansenc 28*59599516SKenneth E. Jansenc output: 29*59599516SKenneth E. Jansenc res (nshg,nflow) : preconditioned residual 30*59599516SKenneth E. Jansenc y (nshg,ndof) : Y-variables at n+alpha_f 31*59599516SKenneth E. Jansenc ac (nshg,ndof) : Primvar. accel. variable n+alpha_m 32*59599516SKenneth E. Jansenc 33*59599516SKenneth E. Jansenc 34*59599516SKenneth E. Jansenc The followings are preliminary steps required to use Farzin's 35*59599516SKenneth E. Jansenc solver library. New way of writing has to be used such as 36*59599516SKenneth E. Jansenc 37*59599516SKenneth E. Jansenc | K G | | du | | Rmom | 38*59599516SKenneth E. Jansenc | | | | = | | 39*59599516SKenneth E. Jansenc | G^t C | | dp | | Rcon | 40*59599516SKenneth E. Jansenc 41*59599516SKenneth E. Jansenc | E | | dT | = | Rtemp | 42*59599516SKenneth E. Jansenc 43*59599516SKenneth E. Jansenc where 44*59599516SKenneth E. Jansenc 45*59599516SKenneth E. Jansenc xKebe : K_ab = dRmom_a/du_b xTe : E_ab = dRtemp_a/dT_b 46*59599516SKenneth E. Jansenc 47*59599516SKenneth E. Jansenc G_ab = dRmom_a/dp_b 48*59599516SKenneth E. Jansenc xGoC : 49*59599516SKenneth E. Jansenc C_ab = dRcon_a/dp_b 50*59599516SKenneth E. Jansenc 51*59599516SKenneth E. Jansenc resf = Rmon Rcon rest = Rtemp 52*59599516SKenneth E. Jansenc 53*59599516SKenneth E. Jansenc 54*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 55*59599516SKenneth E. Jansenc Juin Kim, Summer 1998. (Incompressible flow solver interface) 56*59599516SKenneth E. Jansenc Alberto Figueroa. CMM-FSI 57*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 58*59599516SKenneth E. Jansenc 59*59599516SKenneth E. Jansen use pointer_data 60*59599516SKenneth E. Jansen#ifdef AMG 61*59599516SKenneth E. Jansen use ramg_data 62*59599516SKenneth E. Jansen#endif 63*59599516SKenneth E. Jansen 64*59599516SKenneth E. Jansen include "common.h" 65*59599516SKenneth E. Jansen include "mpif.h" 66*59599516SKenneth E. Jansen include "auxmpi.h" 67*59599516SKenneth E. Jansenc 68*59599516SKenneth E. Jansen real*8 y(nshg,ndof), ac(nshg,ndof), 69*59599516SKenneth E. Jansen & yold(nshg,ndof), acold(nshg,ndof), 70*59599516SKenneth E. Jansen & u(nshg,nsd), uold(nshg,nsd), 71*59599516SKenneth E. Jansen & x(numnp,nsd), BC(nshg,ndofBC), 72*59599516SKenneth E. Jansen & res(nshg,nflow), tmpres(nshg,nflow), 73*59599516SKenneth E. Jansen & flowDiag(nshg,4), 74*59599516SKenneth E. Jansen & aperm(nshg,nPermDims), atemp(nshg,nTmpDims), 75*59599516SKenneth E. Jansen & sclrDiag(nshg,1), 76*59599516SKenneth E. Jansen & lhsK(9,nnz_tot), lhsP(4,nnz_tot), 77*59599516SKenneth E. Jansen & GradV(nshg,nsdsq) 78*59599516SKenneth E. Jansenc 79*59599516SKenneth E. Jansen real*8 shp(MAXTOP,maxsh,MAXQPT), 80*59599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 81*59599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 82*59599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 83*59599516SKenneth E. Jansenc 84*59599516SKenneth E. Jansen integer usr(100), eqnType,temp, 85*59599516SKenneth E. Jansen & rowp(nshg*nnz), colm(nshg+1), 86*59599516SKenneth E. Jansen & iBC(nshg), ilwork(nlwork), 87*59599516SKenneth E. Jansen & iper(nshg) 88*59599516SKenneth E. Jansenc 89*59599516SKenneth E. Jansen real*8 yAlpha(nshg,ndof), acAlpha(nshg,ndof), 90*59599516SKenneth E. Jansen & uAlpha(nshg,nsd), 91*59599516SKenneth E. Jansen & lesP(nshg,4), lesQ(nshg,4), 92*59599516SKenneth E. Jansen & solinc(nshg,ndof), CGsol(nshg) 93*59599516SKenneth E. Jansen 94*59599516SKenneth E. Jansen real*8 tcorecp(2) 95*59599516SKenneth E. Jansen 96*59599516SKenneth E. Jansen real*8 rerr(nshg,10), rtmp(nshg,4),rtemp 97*59599516SKenneth E. Jansen 98*59599516SKenneth E. Jansen real*8 msum(4),mval(4),cpusec(10) 99*59599516SKenneth E. Jansen 100*59599516SKenneth E. Jansen 101*59599516SKenneth E. Jansenc 102*59599516SKenneth E. Jansenc.... *******************>> Element Data Formation <<****************** 103*59599516SKenneth E. Jansenc 104*59599516SKenneth E. Jansenc 105*59599516SKenneth E. Jansenc.... set the parameters for flux and surface tension calculations 106*59599516SKenneth E. Jansenc 107*59599516SKenneth E. Jansenc 108*59599516SKenneth E. Jansen temp = npro 109*59599516SKenneth E. Jansen 110*59599516SKenneth E. Jansen 111*59599516SKenneth E. Jansen idflx = 0 112*59599516SKenneth E. Jansen if(idiff >= 1 ) idflx= (nflow-1) * nsd 113*59599516SKenneth E. Jansen if (isurf == 1) idflx=nflow*nsd 114*59599516SKenneth E. Jansenc.... compute solution at n+alpha 115*59599516SKenneth E. Jansenc 116*59599516SKenneth E. Jansen call itrYAlpha( uold, yold, acold, 117*59599516SKenneth E. Jansen & u, y, ac, 118*59599516SKenneth E. Jansen & uAlpha, yAlpha, acAlpha) 119*59599516SKenneth E. Jansen 120*59599516SKenneth E. Jansenc 121*59599516SKenneth E. Jansenc.... form the LHS matrices, the residual vector (at alpha) 122*59599516SKenneth E. Jansenc 123*59599516SKenneth E. Jansenc call summary_start() 124*59599516SKenneth E. Jansen impistat=1 125*59599516SKenneth E. Jansen impistat2=1 126*59599516SKenneth E. Jansen telmcp1 = TMRC() 127*59599516SKenneth E. Jansen call ElmGMR (uAlpha, yAlpha, acAlpha, x, 128*59599516SKenneth E. Jansen & shp, shgl, iBC, 129*59599516SKenneth E. Jansen & BC, shpb, shglb, 130*59599516SKenneth E. Jansen & res, iper, ilwork, 131*59599516SKenneth E. Jansen & rowp, colm, lhsK, 132*59599516SKenneth E. Jansen & lhsP, rerr, GradV ) 133*59599516SKenneth E. Jansen telmcp2 = TMRC() 134*59599516SKenneth E. Jansen impistat=0 135*59599516SKenneth E. Jansen impistat2=0 136*59599516SKenneth E. Jansenc call summary_stop() 137*59599516SKenneth E. Jansen 138*59599516SKenneth E. Jansen 139*59599516SKenneth E. Jansen tmpres(:,:) = res(:,:) 140*59599516SKenneth E. Jansen iblk = 1 141*59599516SKenneth E. Jansen 142*59599516SKenneth E. Jansenc.... lesSolve : main matrix solver 143*59599516SKenneth E. Jansenc 144*59599516SKenneth E. Jansen lesId = numeqns(1) 145*59599516SKenneth E. Jansen eqnType = 1 146*59599516SKenneth E. Jansen 147*59599516SKenneth E. Jansenc call summary_start() 148*59599516SKenneth E. Jansen impistat=1 149*59599516SKenneth E. Jansen impistat2=1 150*59599516SKenneth E. Jansen tlescp1 = TMRC() 151*59599516SKenneth E. Jansen#ifdef AMG 152*59599516SKenneth E. Jansen ! Initial Time Profiling 153*59599516SKenneth E. Jansen call cpu_time(cpusec(1)) 154*59599516SKenneth E. Jansen if (irun_amg_prec.gt.0) then 155*59599516SKenneth E. Jansen call ramg_control(colm,rowp,lhsK,lhsP, 156*59599516SKenneth E. Jansen & ilwork,BC,iBC,iper) 157*59599516SKenneth E. Jansen end if 158*59599516SKenneth E. Jansen 159*59599516SKenneth E. Jansen call cpu_time(cpusec(6)) 160*59599516SKenneth E. Jansen if (irun_amg_prec.gt.0) then 161*59599516SKenneth E. Jansen ramg_flag = 1 162*59599516SKenneth E. Jansen if (irun_amg_prec.eq.2) then ! Some setup work (mode a) 163*59599516SKenneth E. Jansen ramg_window = 1.0 164*59599516SKenneth E. Jansen ramg_redo = 0 165*59599516SKenneth E. Jansen endif 166*59599516SKenneth E. Jansen do while (ramg_flag.le.irun_amg_prec) 167*59599516SKenneth E. Jansen ! if smart solve, possible run solve twice 168*59599516SKenneth E. Jansen ! restart only if meets plateau 169*59599516SKenneth E. Jansen#endif 170*59599516SKenneth E. Jansen 171*59599516SKenneth E. Jansenc 172*59599516SKenneth E. Jansenc.... setup the linear algebra solver 173*59599516SKenneth E. Jansenc 174*59599516SKenneth E. Jansen rtmp = res(:,1:4) 175*59599516SKenneth E. Jansen call usrNew ( usr, eqnType, aperm, 176*59599516SKenneth E. Jansen & atemp, rtmp, solinc, 177*59599516SKenneth E. Jansen & flowDiag, sclrDiag, lesP, 178*59599516SKenneth E. Jansen & lesQ, iBC, BC, 179*59599516SKenneth E. Jansen & iper, ilwork, numpe, 180*59599516SKenneth E. Jansen & nshg, nshl, nPermDims, 181*59599516SKenneth E. Jansen & nTmpDims, rowp, colm, 182*59599516SKenneth E. Jansen & lhsK, lhsP, rdtmp, 183*59599516SKenneth E. Jansen & nnz_tot, CGsol ) 184*59599516SKenneth E. Jansenc 185*59599516SKenneth E. Jansenc.... solve linear system 186*59599516SKenneth E. Jansenc 187*59599516SKenneth E. Jansen call myfLesSolve ( lesId, usr ) 188*59599516SKenneth E. Jansen#ifdef AMG 189*59599516SKenneth E. Jansen ramg_flag = ramg_flag + 2 ! Default no second run in mode a 190*59599516SKenneth E. Jansen if (irun_amg_prec.eq.3) then 191*59599516SKenneth E. Jansen if (maxIters.gt.int(statsflow(4))) then 192*59599516SKenneth E. Jansen ramg_flag = ramg_flag + 1 ! Default no second run in mode b 193*59599516SKenneth E. Jansen endif 194*59599516SKenneth E. Jansen endif 195*59599516SKenneth E. Jansen enddo 196*59599516SKenneth E. Jansen else 197*59599516SKenneth E. Jansenc 198*59599516SKenneth E. Jansenc.... setup the linear algebra solver 199*59599516SKenneth E. Jansenc 200*59599516SKenneth E. Jansen rtmp = res(:,1:4) 201*59599516SKenneth E. Jansen call usrNew ( usr, eqnType, aperm, 202*59599516SKenneth E. Jansen & atemp, rtmp, solinc, 203*59599516SKenneth E. Jansen & flowDiag, sclrDiag, lesP, 204*59599516SKenneth E. Jansen & lesQ, iBC, BC, 205*59599516SKenneth E. Jansen & iper, ilwork, numpe, 206*59599516SKenneth E. Jansen & nshg, nshl, nPermDims, 207*59599516SKenneth E. Jansen & nTmpDims, rowp, colm, 208*59599516SKenneth E. Jansen & lhsK, lhsP, rdtmp, 209*59599516SKenneth E. Jansen & nnz_tot, CGsol ) 210*59599516SKenneth E. Jansen 211*59599516SKenneth E. Jansen call myfLesSolve( lesId, usr ) 212*59599516SKenneth E. Jansen endif 213*59599516SKenneth E. Jansen 214*59599516SKenneth E. Jansen call cpu_time(cpusec(3)) 215*59599516SKenneth E. Jansen 216*59599516SKenneth E. Jansen ramg_time(1) = ramg_time(1) + cpusec(3)-cpusec(1) 217*59599516SKenneth E. Jansen ramg_time(7) = ramg_time(7) + cpusec(6)-cpusec(1) 218*59599516SKenneth E. Jansen 219*59599516SKenneth E. Jansen ! ramg_time: 1 : local total 220*59599516SKenneth E. Jansen ! 4 : local VG-cycle 221*59599516SKenneth E. Jansen ! 7 : local setup time 222*59599516SKenneth E. Jansen ! 11 : Ap-product level 1 223*59599516SKenneth E. Jansen ! 12 : Ap-product level >1 224*59599516SKenneth E. Jansen ! 13 : Prolongation/Restriction 225*59599516SKenneth E. Jansen ! 20 : local boundary MLS time 226*59599516SKenneth E. Jansen 227*59599516SKenneth E. Jansen if (myrank.eq.master) then 228*59599516SKenneth E. Jansen write(*,*) 229*59599516SKenneth E. Jansen endif 230*59599516SKenneth E. Jansen call ramg_print_time(" == AMG == Total ACUSIM Solver:", 231*59599516SKenneth E. Jansen & ramg_time(1)) 232*59599516SKenneth E. Jansen call ramg_print_time(" == AMG == Setup: ",ramg_time(7)) 233*59599516SKenneth E. Jansen call ramg_print_time(" == AMG == Prec'd cycle: ",ramg_time(4)) 234*59599516SKenneth E. Jansen call ramg_print_time(" == AMG == Ap product(level=1): ", 235*59599516SKenneth E. Jansen & ramg_time(11)) 236*59599516SKenneth E. Jansen call ramg_print_time(" == AMG == Ap product(level>=2): ", 237*59599516SKenneth E. Jansen & ramg_time(12)) 238*59599516SKenneth E. Jansen call ramg_print_time(" == AMG == Pro/Restr ", 239*59599516SKenneth E. Jansen & ramg_time(13)) 240*59599516SKenneth E. Jansen call ramg_print_time(" == AMG == Boundary Ap (GS only)", 241*59599516SKenneth E. Jansen & ramg_time(20)) 242*59599516SKenneth E. Jansen if (myrank.eq.master) then 243*59599516SKenneth E. Jansen write(*,*) 244*59599516SKenneth E. Jansen endif 245*59599516SKenneth E. Jansen 246*59599516SKenneth E. Jansen#endif 247*59599516SKenneth E. Jansen 248*59599516SKenneth E. Jansen ! End Time profiling output 249*59599516SKenneth E. Jansen 250*59599516SKenneth E. Jansen call getSol ( usr, solinc ) 251*59599516SKenneth E. Jansen 252*59599516SKenneth E. Jansen if (numpe > 1) then 253*59599516SKenneth E. Jansen call commu ( solinc, ilwork, nflow, 'out') 254*59599516SKenneth E. Jansen endif 255*59599516SKenneth E. Jansen tlescp2 = TMRC() 256*59599516SKenneth E. Jansen impistat=0 257*59599516SKenneth E. Jansen impistat2=0 258*59599516SKenneth E. Jansenc call summary_stop() 259*59599516SKenneth E. Jansen 260*59599516SKenneth E. Jansen tcorecp(1) = tcorecp(1) + telmcp2-telmcp1 ! elem. formation 261*59599516SKenneth E. Jansen tcorecp(2) = tcorecp(2) + tlescp2-tlescp1 ! linear alg. solution 262*59599516SKenneth E. Jansen 263*59599516SKenneth E. Jansen call rstatic (res, y, solinc) ! output flow stats 264*59599516SKenneth E. Jansenc 265*59599516SKenneth E. Jansenc.... end 266*59599516SKenneth E. Jansenc 267*59599516SKenneth E. Jansen return 268*59599516SKenneth E. Jansen end 269*59599516SKenneth E. Jansen 270*59599516SKenneth E. Jansen subroutine SolSclr(y, ac, u, 271*59599516SKenneth E. Jansen & yold, acold, uold, 272*59599516SKenneth E. Jansen & x, iBC, 273*59599516SKenneth E. Jansen & BC, nPermDimsS, nTmpDimsS, 274*59599516SKenneth E. Jansen & apermS, atempS, iper, 275*59599516SKenneth E. Jansen & ilwork, shp, shgl, 276*59599516SKenneth E. Jansen & shpb, shglb, rowp, 277*59599516SKenneth E. Jansen & colm, lhsS, solinc, 278*59599516SKenneth E. Jansen & tcorecpscal) 279*59599516SKenneth E. Jansenc 280*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 281*59599516SKenneth E. Jansenc 282*59599516SKenneth E. Jansenc This is the 2nd interface routine to the Farzin's linear equation 283*59599516SKenneth E. Jansenc solver library. 284*59599516SKenneth E. Jansenc 285*59599516SKenneth E. Jansenc input: 286*59599516SKenneth E. Jansenc y (nshg,ndof) : Y-variables at n+alpha_f 287*59599516SKenneth E. Jansenc ac (nshg,ndof) : Primvar. accel. variable n+alpha_m 288*59599516SKenneth E. Jansenc yold (nshg,ndof) : Y-variables at beginning of step 289*59599516SKenneth E. Jansenc x (numnp,nsd) : node coordinates 290*59599516SKenneth E. Jansenc iBC (nshg) : BC codes 291*59599516SKenneth E. Jansenc BC (nshg,ndofBC) : BC constraint parameters 292*59599516SKenneth E. Jansenc iper (nshg) : periodic nodal information 293*59599516SKenneth E. Jansenc 294*59599516SKenneth E. Jansenc output: 295*59599516SKenneth E. Jansenc y (nshg,ndof) : Y-variables at n+alpha_f 296*59599516SKenneth E. Jansenc ac (nshg,ndof) : Primvar. accel. variable n+alpha_m 297*59599516SKenneth E. Jansenc 298*59599516SKenneth E. Jansenc 299*59599516SKenneth E. Jansenc The followings are preliminary steps required to use Farzin's 300*59599516SKenneth E. Jansenc solver library. New way of writing has to be used such as 301*59599516SKenneth E. Jansenc 302*59599516SKenneth E. Jansenc | E | | dS | = | RScal | 303*59599516SKenneth E. Jansenc 304*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 305*59599516SKenneth E. Jansenc 306*59599516SKenneth E. Jansen use pointer_data 307*59599516SKenneth E. Jansen 308*59599516SKenneth E. Jansen include "common.h" 309*59599516SKenneth E. Jansen include "mpif.h" 310*59599516SKenneth E. Jansen include "auxmpi.h" 311*59599516SKenneth E. Jansenc 312*59599516SKenneth E. Jansen real*8 y(nshg,ndof), ac(nshg,ndof), 313*59599516SKenneth E. Jansen & yold(nshg,ndof), acold(nshg,ndof), 314*59599516SKenneth E. Jansen & u(nshg,nsd), uold(nshg,nsd), 315*59599516SKenneth E. Jansen & x(numnp,nsd), BC(nshg,ndofBC), 316*59599516SKenneth E. Jansen & res(nshg,1), 317*59599516SKenneth E. Jansen & flowDiag(nshg,4), 318*59599516SKenneth E. Jansen & sclrDiag(nshg,1), lhsS(nnz_tot), 319*59599516SKenneth E. Jansen & apermS(nshg,nPermDimsS), atempS(nshg,nTmpDimsS) 320*59599516SKenneth E. Jansen 321*59599516SKenneth E. Jansenc 322*59599516SKenneth E. Jansen real*8 shp(MAXTOP,maxsh,MAXQPT), 323*59599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 324*59599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 325*59599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 326*59599516SKenneth E. Jansenc 327*59599516SKenneth E. Jansen integer usr(100), eqnType, 328*59599516SKenneth E. Jansen & rowp(nshg*nnz), colm(nshg+1), 329*59599516SKenneth E. Jansen & iBC(nshg), ilwork(nlwork), 330*59599516SKenneth E. Jansen & iper(nshg) 331*59599516SKenneth E. Jansenc 332*59599516SKenneth E. Jansen real*8 yAlpha(nshg,ndof), acAlpha(nshg,ndof), 333*59599516SKenneth E. Jansen & uAlpha(nshg,nsd), 334*59599516SKenneth E. Jansen & lesP(nshg,1), lesQ(nshg,1), 335*59599516SKenneth E. Jansen & solinc(nshg,1), CGsol(nshg), 336*59599516SKenneth E. Jansen & tcorecpscal(2) 337*59599516SKenneth E. Jansen 338*59599516SKenneth E. Jansenc 339*59599516SKenneth E. Jansenc.... *******************>> Element Data Formation <<****************** 340*59599516SKenneth E. Jansenc 341*59599516SKenneth E. Jansenc.... compute solution at n+alpha 342*59599516SKenneth E. Jansenc 343*59599516SKenneth E. Jansen call itrYAlpha( uold, yold, acold, 344*59599516SKenneth E. Jansen & u, y, ac, 345*59599516SKenneth E. Jansen & uAlpha, yAlpha, acAlpha) 346*59599516SKenneth E. Jansenc 347*59599516SKenneth E. Jansenc.... form the LHS matrices, the residual vector (at alpha) 348*59599516SKenneth E. Jansenc 349*59599516SKenneth E. Jansen impistat=2 350*59599516SKenneth E. Jansen impistat2=1 351*59599516SKenneth E. Jansen telmcp1 = TMRC() 352*59599516SKenneth E. Jansen call ElmGMRSclr(yAlpha,acAlpha, x, 353*59599516SKenneth E. Jansen & shp, shgl, iBC, 354*59599516SKenneth E. Jansen & BC, shpb, shglb, 355*59599516SKenneth E. Jansen & res, iper, ilwork, 356*59599516SKenneth E. Jansen & rowp, colm, lhsS ) 357*59599516SKenneth E. Jansen telmcp2 = TMRC() 358*59599516SKenneth E. Jansen impistat=0 359*59599516SKenneth E. Jansen impistat2=0 360*59599516SKenneth E. Jansenc 361*59599516SKenneth E. Jansenc.... lesSolve : main matrix solver 362*59599516SKenneth E. Jansenc 363*59599516SKenneth E. Jansen lesId = numeqns(1+nsolt+isclr) 364*59599516SKenneth E. Jansen eqnType = 2 365*59599516SKenneth E. Jansenc 366*59599516SKenneth E. Jansenc.... setup the linear algebra solver 367*59599516SKenneth E. Jansenc 368*59599516SKenneth E. Jansen 369*59599516SKenneth E. Jansen impistat=2 370*59599516SKenneth E. Jansen impistat2=1 371*59599516SKenneth E. Jansen tlescp1 = TMRC() 372*59599516SKenneth E. Jansen call usrNew ( usr, eqnType, apermS, 373*59599516SKenneth E. Jansen & atempS, res, solinc, 374*59599516SKenneth E. Jansen & flowDiag, sclrDiag, lesP, 375*59599516SKenneth E. Jansen & lesQ, iBC, BC, 376*59599516SKenneth E. Jansen & iper, ilwork, numpe, 377*59599516SKenneth E. Jansen & nshg, nshl, nPermDimsS, 378*59599516SKenneth E. Jansen & nTmpDimsS, rowp, colm, 379*59599516SKenneth E. Jansen & rlhsK, rlhsP, lhsS, 380*59599516SKenneth E. Jansen & nnz_tot, CGsol ) 381*59599516SKenneth E. Jansenc 382*59599516SKenneth E. Jansenc.... solve linear system 383*59599516SKenneth E. Jansenc 384*59599516SKenneth E. Jansen call myfLesSolve ( lesId, usr ) 385*59599516SKenneth E. Jansen call getSol ( usr, solinc ) 386*59599516SKenneth E. Jansen 387*59599516SKenneth E. Jansen if (numpe > 1) then 388*59599516SKenneth E. Jansen call commu ( solinc, ilwork, 1, 'out') 389*59599516SKenneth E. Jansen endif 390*59599516SKenneth E. Jansen tlescp2 = TMRC() 391*59599516SKenneth E. Jansen impistat=0 392*59599516SKenneth E. Jansen impistat2=0 393*59599516SKenneth E. Jansen 394*59599516SKenneth E. Jansen tcorecpscal(1) = tcorecpscal(1) + telmcp2-telmcp1 ! elem. formation 395*59599516SKenneth E. Jansen tcorecpscal(2) = tcorecpscal(2) + tlescp2-tlescp1 ! linear alg. solution 396*59599516SKenneth E. Jansen 397*59599516SKenneth E. Jansen nsolsc=5+isclr 398*59599516SKenneth E. Jansen call rstaticSclr (res, y, solinc, nsolsc) ! output scalar stats 399*59599516SKenneth E. Jansenc 400*59599516SKenneth E. Jansenc.... end 401*59599516SKenneth E. Jansenc 402*59599516SKenneth E. Jansen return 403*59599516SKenneth E. Jansen end 404*59599516SKenneth E. Jansen 405*59599516SKenneth E. Jansen 406*59599516SKenneth E. Jansen 407*59599516SKenneth E. Jansen 408*59599516SKenneth E. Jansen 409