1*aa9a5b67SBarry Smith(handson)= 2*aa9a5b67SBarry Smith 3*aa9a5b67SBarry Smith# Tutorials, by Mathematical Problem 4*aa9a5b67SBarry Smith 5*aa9a5b67SBarry SmithTODO: Add link to Python example here 6*aa9a5b67SBarry Smith 7*aa9a5b67SBarry Smith(handson-example-1)= 8*aa9a5b67SBarry Smith 9*aa9a5b67SBarry Smith## Linear elliptic PDE on a 2D grid 10*aa9a5b67SBarry Smith 11*aa9a5b67SBarry SmithWHAT THIS EXAMPLE DEMONSTRATES: 12*aa9a5b67SBarry Smith 13*aa9a5b67SBarry Smith- Using command line options 14*aa9a5b67SBarry Smith- Using Linear Solvers 15*aa9a5b67SBarry Smith- Handling a simple structured grid 16*aa9a5b67SBarry Smith 17*aa9a5b67SBarry SmithFURTHER DETAILS: 18*aa9a5b67SBarry Smith 19*aa9a5b67SBarry Smith- <a href="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex50.c.html#line1">Mathematical description of the problem</a> 20*aa9a5b67SBarry Smith- <a href="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/tutorials/ex50.c.html#line21">the source code</a> 21*aa9a5b67SBarry Smith 22*aa9a5b67SBarry SmithDO THE FOLLOWING: 23*aa9a5b67SBarry Smith 24*aa9a5b67SBarry Smith- Compile `src/ksp/ksp/tutorials/ex50.c` 25*aa9a5b67SBarry Smith 26*aa9a5b67SBarry Smith ```console 27*aa9a5b67SBarry Smith $ cd petsc/src/ksp/ksp/tutorials 28*aa9a5b67SBarry Smith $ make ex50 29*aa9a5b67SBarry Smith ``` 30*aa9a5b67SBarry Smith 31*aa9a5b67SBarry Smith- Run a 1 processor example with a 3x3 mesh and view the matrix 32*aa9a5b67SBarry Smith assembled 33*aa9a5b67SBarry Smith 34*aa9a5b67SBarry Smith ```console 35*aa9a5b67SBarry Smith $ mpiexec -n 1 ./ex50 -da_grid_x 4 -da_grid_y 4 -mat_view 36*aa9a5b67SBarry Smith ``` 37*aa9a5b67SBarry Smith 38*aa9a5b67SBarry Smith Expected output: 39*aa9a5b67SBarry Smith 40*aa9a5b67SBarry Smith ```{literalinclude} /../src/ksp/ksp/tutorials/output/ex50_tut_1.out 41*aa9a5b67SBarry Smith :language: none 42*aa9a5b67SBarry Smith ``` 43*aa9a5b67SBarry Smith 44*aa9a5b67SBarry Smith- Run with a 120x120 mesh on 4 processors using superlu_dist and 45*aa9a5b67SBarry Smith view the solver options used 46*aa9a5b67SBarry Smith 47*aa9a5b67SBarry Smith ```console 48*aa9a5b67SBarry Smith $ mpiexec -n 4 ./ex50 -da_grid_x 120 -da_grid_y 120 -pc_type lu -pc_factor_mat_solver_type superlu_dist -ksp_monitor -ksp_view 49*aa9a5b67SBarry Smith ``` 50*aa9a5b67SBarry Smith 51*aa9a5b67SBarry Smith Expected output: 52*aa9a5b67SBarry Smith 53*aa9a5b67SBarry Smith ```{literalinclude} /../src/ksp/ksp/tutorials/output/ex50_tut_2.out 54*aa9a5b67SBarry Smith :language: none 55*aa9a5b67SBarry Smith ``` 56*aa9a5b67SBarry Smith 57*aa9a5b67SBarry Smith- Run with a 1025x1025 grid using multigrid solver on 4 58*aa9a5b67SBarry Smith processors with 9 multigrid levels 59*aa9a5b67SBarry Smith 60*aa9a5b67SBarry Smith ```console 61*aa9a5b67SBarry Smith $ mpiexec -n 4 ./ex50 -da_grid_x 1025 -da_grid_y 1025 -pc_type mg -pc_mg_levels 9 -ksp_monitor 62*aa9a5b67SBarry Smith ``` 63*aa9a5b67SBarry Smith 64*aa9a5b67SBarry Smith Expected output: 65*aa9a5b67SBarry Smith 66*aa9a5b67SBarry Smith ```{literalinclude} /../src/ksp/ksp/tutorials/output/ex50_tut_3.out 67*aa9a5b67SBarry Smith :language: none 68*aa9a5b67SBarry Smith ``` 69*aa9a5b67SBarry Smith 70*aa9a5b67SBarry Smith(handson-example-2)= 71*aa9a5b67SBarry Smith 72*aa9a5b67SBarry Smith## Nonlinear ODE arising from a time-dependent one-dimensional PDE 73*aa9a5b67SBarry Smith 74*aa9a5b67SBarry SmithWHAT THIS EXAMPLE DEMONSTRATES: 75*aa9a5b67SBarry Smith 76*aa9a5b67SBarry Smith- Using command line options 77*aa9a5b67SBarry Smith- Handling a simple structured grid 78*aa9a5b67SBarry Smith- Using the ODE integrator 79*aa9a5b67SBarry Smith- Using call-back functions 80*aa9a5b67SBarry Smith 81*aa9a5b67SBarry SmithFURTHER DETAILS: 82*aa9a5b67SBarry Smith 83*aa9a5b67SBarry Smith- <a href="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ts/tutorials/ex2.c.html#line13">Mathematical description of the problem</a> 84*aa9a5b67SBarry Smith- <a href="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ts/tutorials/ex2.c.html#line36">the source code</a> 85*aa9a5b67SBarry Smith 86*aa9a5b67SBarry SmithDO THE FOLLOWING: 87*aa9a5b67SBarry Smith 88*aa9a5b67SBarry Smith- Compile `src/ts/tutorials/ex2.c` 89*aa9a5b67SBarry Smith 90*aa9a5b67SBarry Smith ```console 91*aa9a5b67SBarry Smith $ cd petsc/src/ts/tutorials 92*aa9a5b67SBarry Smith $ make ex2 93*aa9a5b67SBarry Smith ``` 94*aa9a5b67SBarry Smith 95*aa9a5b67SBarry Smith- Run a 1 processor example on the default grid with all the 96*aa9a5b67SBarry Smith default solver options 97*aa9a5b67SBarry Smith 98*aa9a5b67SBarry Smith ```console 99*aa9a5b67SBarry Smith $ mpiexec -n 1 ./ex2 -ts_max_steps 10 -ts_monitor 100*aa9a5b67SBarry Smith ``` 101*aa9a5b67SBarry Smith 102*aa9a5b67SBarry Smith Expected output: 103*aa9a5b67SBarry Smith 104*aa9a5b67SBarry Smith ```{literalinclude} /../src/ts/tutorials/output/ex2_tut_1.out 105*aa9a5b67SBarry Smith :language: none 106*aa9a5b67SBarry Smith ``` 107*aa9a5b67SBarry Smith 108*aa9a5b67SBarry Smith- Run with the same options on 4 processors plus monitor 109*aa9a5b67SBarry Smith convergence of the nonlinear and linear solvers 110*aa9a5b67SBarry Smith 111*aa9a5b67SBarry Smith ```console 112*aa9a5b67SBarry Smith $ mpiexec -n 4 ./ex2 -ts_max_steps 10 -ts_monitor -snes_monitor -ksp_monitor 113*aa9a5b67SBarry Smith ``` 114*aa9a5b67SBarry Smith 115*aa9a5b67SBarry Smith Expected output: 116*aa9a5b67SBarry Smith 117*aa9a5b67SBarry Smith ```{literalinclude} /../src/ts/tutorials/output/ex2_tut_2.out 118*aa9a5b67SBarry Smith :language: none 119*aa9a5b67SBarry Smith ``` 120*aa9a5b67SBarry Smith 121*aa9a5b67SBarry Smith- Run with the same options on 4 processors with 128 grid points 122*aa9a5b67SBarry Smith 123*aa9a5b67SBarry Smith ```console 124*aa9a5b67SBarry Smith $ mpiexec -n 16 ./ex2 -ts_max_steps 10 -ts_monitor -M 128 125*aa9a5b67SBarry Smith ``` 126*aa9a5b67SBarry Smith 127*aa9a5b67SBarry Smith Expected output: 128*aa9a5b67SBarry Smith 129*aa9a5b67SBarry Smith ```{literalinclude} /../src/ts/tutorials/output/ex2_tut_3.out 130*aa9a5b67SBarry Smith :language: none 131*aa9a5b67SBarry Smith ``` 132*aa9a5b67SBarry Smith 133*aa9a5b67SBarry Smith(handson-example-3)= 134*aa9a5b67SBarry Smith 135*aa9a5b67SBarry Smith## Nonlinear PDE on a structured grid 136*aa9a5b67SBarry Smith 137*aa9a5b67SBarry SmithWHAT THIS EXAMPLE DEMONSTRATES: 138*aa9a5b67SBarry Smith 139*aa9a5b67SBarry Smith- Handling a 2d structured grid 140*aa9a5b67SBarry Smith- Using the nonlinear solvers 141*aa9a5b67SBarry Smith- Changing the default linear solver 142*aa9a5b67SBarry Smith 143*aa9a5b67SBarry SmithFURTHER DETAILS: 144*aa9a5b67SBarry Smith 145*aa9a5b67SBarry Smith- <a href="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex19.c.html#line19">Mathematical description of the problem</a> 146*aa9a5b67SBarry Smith- <a href="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex19.c.html#line94">main program source code</a> 147*aa9a5b67SBarry Smith- <a href="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex19.c.html#line246">physics source code</a> 148*aa9a5b67SBarry Smith 149*aa9a5b67SBarry SmithDO THE FOLLOWING: 150*aa9a5b67SBarry Smith 151*aa9a5b67SBarry Smith- Compile `src/snes/tutorials/ex19.c` 152*aa9a5b67SBarry Smith 153*aa9a5b67SBarry Smith ```console 154*aa9a5b67SBarry Smith $ cd petsc/src/snes/tutorials/ 155*aa9a5b67SBarry Smith $ make ex19 156*aa9a5b67SBarry Smith ``` 157*aa9a5b67SBarry Smith 158*aa9a5b67SBarry Smith- Run a 4 processor example with 5 levels of grid refinement, 159*aa9a5b67SBarry Smith monitor the convergence of the nonlinear and linear solver and 160*aa9a5b67SBarry Smith examine the exact solver used 161*aa9a5b67SBarry Smith 162*aa9a5b67SBarry Smith ```console 163*aa9a5b67SBarry Smith $ mpiexec -n 4 ./ex19 -da_refine 5 -snes_monitor -ksp_monitor -snes_view 164*aa9a5b67SBarry Smith ``` 165*aa9a5b67SBarry Smith 166*aa9a5b67SBarry Smith Expected output: 167*aa9a5b67SBarry Smith 168*aa9a5b67SBarry Smith ```{literalinclude} /../src/snes/tutorials/output/ex19_tut_1.out 169*aa9a5b67SBarry Smith :language: none 170*aa9a5b67SBarry Smith ``` 171*aa9a5b67SBarry Smith 172*aa9a5b67SBarry Smith- Run with the same options but use geometric multigrid as the 173*aa9a5b67SBarry Smith linear solver 174*aa9a5b67SBarry Smith 175*aa9a5b67SBarry Smith ```console 176*aa9a5b67SBarry Smith $ mpiexec -n 4 ./ex19 -da_refine 5 -snes_monitor -ksp_monitor -snes_view -pc_type mg 177*aa9a5b67SBarry Smith ``` 178*aa9a5b67SBarry Smith 179*aa9a5b67SBarry Smith Expected output: 180*aa9a5b67SBarry Smith 181*aa9a5b67SBarry Smith ```{literalinclude} /../src/snes/tutorials/output/ex19_tut_2.out 182*aa9a5b67SBarry Smith :language: none 183*aa9a5b67SBarry Smith ``` 184*aa9a5b67SBarry Smith 185*aa9a5b67SBarry Smith Note this requires many fewer iterations than the default 186*aa9a5b67SBarry Smith solver 187*aa9a5b67SBarry Smith 188*aa9a5b67SBarry Smith- Run with the same options but use algebraic multigrid (hypre's 189*aa9a5b67SBarry Smith BoomerAMG) as the linear solver 190*aa9a5b67SBarry Smith 191*aa9a5b67SBarry Smith ```console 192*aa9a5b67SBarry Smith $ mpiexec -n 4 ./ex19 -da_refine 5 -snes_monitor -ksp_monitor -snes_view -pc_type hypre 193*aa9a5b67SBarry Smith ``` 194*aa9a5b67SBarry Smith 195*aa9a5b67SBarry Smith Expected output: 196*aa9a5b67SBarry Smith 197*aa9a5b67SBarry Smith ```{literalinclude} /../src/snes/tutorials/output/ex19_tut_3.out 198*aa9a5b67SBarry Smith :language: none 199*aa9a5b67SBarry Smith ``` 200*aa9a5b67SBarry Smith 201*aa9a5b67SBarry Smith Note this requires many fewer iterations than the default 202*aa9a5b67SBarry Smith solver but requires more linear solver iterations than 203*aa9a5b67SBarry Smith geometric multigrid. 204*aa9a5b67SBarry Smith 205*aa9a5b67SBarry Smith- Run with the same options but use the ML preconditioner from 206*aa9a5b67SBarry Smith Trilinos 207*aa9a5b67SBarry Smith 208*aa9a5b67SBarry Smith ```console 209*aa9a5b67SBarry Smith $ mpiexec -n 4 ./ex19 -da_refine 5 -snes_monitor -ksp_monitor -snes_view -pc_type ml 210*aa9a5b67SBarry Smith ``` 211*aa9a5b67SBarry Smith 212*aa9a5b67SBarry Smith Expected output: 213*aa9a5b67SBarry Smith 214*aa9a5b67SBarry Smith ```{literalinclude} /../src/snes/tutorials/output/ex19_tut_8.out 215*aa9a5b67SBarry Smith :language: none 216*aa9a5b67SBarry Smith ``` 217*aa9a5b67SBarry Smith 218*aa9a5b67SBarry Smith- Run on 1 processor with the default linear solver and profile 219*aa9a5b67SBarry Smith the run 220*aa9a5b67SBarry Smith 221*aa9a5b67SBarry Smith ```console 222*aa9a5b67SBarry Smith $ mpiexec -n 1 ./ex19 -da_refine 5 -log_view 223*aa9a5b67SBarry Smith ``` 224*aa9a5b67SBarry Smith 225*aa9a5b67SBarry Smith Expected output: 226*aa9a5b67SBarry Smith 227*aa9a5b67SBarry Smith ```{literalinclude} /../src/snes/tutorials/output/ex19_tut_4.out 228*aa9a5b67SBarry Smith :language: none 229*aa9a5b67SBarry Smith ``` 230*aa9a5b67SBarry Smith 231*aa9a5b67SBarry Smith Search for the line beginning with SNESSolve, the fourth column 232*aa9a5b67SBarry Smith gives the time for the nonlinear solve. 233*aa9a5b67SBarry Smith 234*aa9a5b67SBarry Smith- Run on 1 processor with the geometric multigrid linear solver 235*aa9a5b67SBarry Smith and profile the run 236*aa9a5b67SBarry Smith 237*aa9a5b67SBarry Smith ```console 238*aa9a5b67SBarry Smith $ mpiexec -n 1 ./ex19 -da_refine 5 -log_view -pc_type mg 239*aa9a5b67SBarry Smith ``` 240*aa9a5b67SBarry Smith 241*aa9a5b67SBarry Smith Expected output: 242*aa9a5b67SBarry Smith 243*aa9a5b67SBarry Smith ```{literalinclude} /../src/snes/tutorials/output/ex19_tut_5.out 244*aa9a5b67SBarry Smith :language: none 245*aa9a5b67SBarry Smith ``` 246*aa9a5b67SBarry Smith 247*aa9a5b67SBarry Smith Compare the runtime for SNESSolve to the case with the default 248*aa9a5b67SBarry Smith solver 249*aa9a5b67SBarry Smith 250*aa9a5b67SBarry Smith- Run on 4 processors with the default linear solver and profile 251*aa9a5b67SBarry Smith the run 252*aa9a5b67SBarry Smith 253*aa9a5b67SBarry Smith ```console 254*aa9a5b67SBarry Smith $ mpiexec -n 4 ./ex19 -da_refine 5 -log_view 255*aa9a5b67SBarry Smith ``` 256*aa9a5b67SBarry Smith 257*aa9a5b67SBarry Smith Expected output: 258*aa9a5b67SBarry Smith 259*aa9a5b67SBarry Smith ```{literalinclude} /../src/snes/tutorials/output/ex19_tut_6.out 260*aa9a5b67SBarry Smith :language: none 261*aa9a5b67SBarry Smith ``` 262*aa9a5b67SBarry Smith 263*aa9a5b67SBarry Smith Compare the runtime for `SNESSolve` to the 1 processor case with 264*aa9a5b67SBarry Smith the default solver. What is the speedup? 265*aa9a5b67SBarry Smith 266*aa9a5b67SBarry Smith- Run on 4 processors with the geometric multigrid linear solver 267*aa9a5b67SBarry Smith and profile the run 268*aa9a5b67SBarry Smith 269*aa9a5b67SBarry Smith ```console 270*aa9a5b67SBarry Smith $ mpiexec -n 4 ./ex19 -da_refine 5 -log_view -pc_type mg 271*aa9a5b67SBarry Smith ``` 272*aa9a5b67SBarry Smith 273*aa9a5b67SBarry Smith Expected output: 274*aa9a5b67SBarry Smith 275*aa9a5b67SBarry Smith ```{literalinclude} /../src/snes/tutorials/output/ex19_tut_7.out 276*aa9a5b67SBarry Smith :language: none 277*aa9a5b67SBarry Smith ``` 278*aa9a5b67SBarry Smith 279*aa9a5b67SBarry Smith Compare the runtime for SNESSolve to the 1 processor case with 280*aa9a5b67SBarry Smith multigrid. What is the speedup? Why is the speedup for 281*aa9a5b67SBarry Smith multigrid lower than the speedup for the default solver? 282*aa9a5b67SBarry Smith 283*aa9a5b67SBarry Smith(handson-example-4)= 284*aa9a5b67SBarry Smith 285*aa9a5b67SBarry Smith## Nonlinear time dependent PDE on unstructured grid 286*aa9a5b67SBarry Smith 287*aa9a5b67SBarry SmithWHAT THIS EXAMPLE DEMONSTRATES: 288*aa9a5b67SBarry Smith 289*aa9a5b67SBarry Smith- Changing the default ODE integrator 290*aa9a5b67SBarry Smith- Handling unstructured grids 291*aa9a5b67SBarry Smith- Registering your own interchangeable physics and algorithm 292*aa9a5b67SBarry Smith modules 293*aa9a5b67SBarry Smith 294*aa9a5b67SBarry SmithFURTHER DETAILS: 295*aa9a5b67SBarry Smith 296*aa9a5b67SBarry Smith- <a href="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ts/tutorials/ex11.c.html">Mathematical description of the problem</a> 297*aa9a5b67SBarry Smith- <a href="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ts/tutorials/ex11.c.html#line1403">main program source code</a> 298*aa9a5b67SBarry Smith- <a href="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ts/tutorials/ex11.c.html#line186">source code of physics modules</a> 299*aa9a5b67SBarry Smith 300*aa9a5b67SBarry SmithDO THE FOLLOWING: 301*aa9a5b67SBarry Smith 302*aa9a5b67SBarry Smith- Compile `src/ts/tutorials/ex11.c` 303*aa9a5b67SBarry Smith 304*aa9a5b67SBarry Smith ```console 305*aa9a5b67SBarry Smith $ cd petsc/src/ts/tutorials 306*aa9a5b67SBarry Smith $ make ex11 307*aa9a5b67SBarry Smith ``` 308*aa9a5b67SBarry Smith 309*aa9a5b67SBarry Smith- Run simple advection through a tiny hybrid mesh 310*aa9a5b67SBarry Smith 311*aa9a5b67SBarry Smith ```console 312*aa9a5b67SBarry Smith $ mpiexec -n 1 ./ex11 -f ${PETSC_DIR}/share/petsc/datafiles/meshes/sevenside.exo 313*aa9a5b67SBarry Smith ``` 314*aa9a5b67SBarry Smith 315*aa9a5b67SBarry Smith Expected output: 316*aa9a5b67SBarry Smith 317*aa9a5b67SBarry Smith ```{literalinclude} /../src/ts/tutorials/output/ex11_tut_1.out 318*aa9a5b67SBarry Smith :language: none 319*aa9a5b67SBarry Smith ``` 320*aa9a5b67SBarry Smith 321*aa9a5b67SBarry Smith- Run simple advection through a small mesh with a Rosenbrock-W 322*aa9a5b67SBarry Smith solver 323*aa9a5b67SBarry Smith 324*aa9a5b67SBarry Smith ```console 325*aa9a5b67SBarry Smith $ mpiexec -n 1 ./ex11 -f ${PETSC_DIR}/share/petsc/datafiles/meshes/sevenside.exo -ts_type rosw 326*aa9a5b67SBarry Smith ``` 327*aa9a5b67SBarry Smith 328*aa9a5b67SBarry Smith Expected output: 329*aa9a5b67SBarry Smith 330*aa9a5b67SBarry Smith ```{literalinclude} /../src/ts/tutorials/output/ex11_tut_2.out 331*aa9a5b67SBarry Smith :language: none 332*aa9a5b67SBarry Smith ``` 333*aa9a5b67SBarry Smith 334*aa9a5b67SBarry Smith- Run simple advection through a larger quadrilateral mesh of an 335*aa9a5b67SBarry Smith annulus with least squares reconstruction and no limiting, 336*aa9a5b67SBarry Smith monitoring the error 337*aa9a5b67SBarry Smith 338*aa9a5b67SBarry Smith ```console 339*aa9a5b67SBarry Smith $ mpiexec -n 4 ./ex11 -f ${PETSC_DIR}/share/petsc/datafiles/meshes/annulus-20.exo -monitor Error -advect_sol_type bump -petscfv_type leastsquares -petsclimiter_type sin 340*aa9a5b67SBarry Smith ``` 341*aa9a5b67SBarry Smith 342*aa9a5b67SBarry Smith Expected output: 343*aa9a5b67SBarry Smith 344*aa9a5b67SBarry Smith ```{literalinclude} /../src/ts/tutorials/output/ex11_tut_3.out 345*aa9a5b67SBarry Smith :language: none 346*aa9a5b67SBarry Smith ``` 347*aa9a5b67SBarry Smith 348*aa9a5b67SBarry Smith Compare turning to the error after turning off reconstruction. 349*aa9a5b67SBarry Smith 350*aa9a5b67SBarry Smith- Run shallow water on the larger mesh with least squares 351*aa9a5b67SBarry Smith reconstruction and minmod limiting, monitoring water Height 352*aa9a5b67SBarry Smith (integral is conserved) and Energy (not conserved) 353*aa9a5b67SBarry Smith 354*aa9a5b67SBarry Smith ```console 355*aa9a5b67SBarry Smith $ mpiexec -n 4 ./ex11 -f ${PETSC_DIR}/share/petsc/datafiles/meshes/annulus-20.exo -physics sw -monitor Height,Energy -petscfv_type leastsquares -petsclimiter_type minmod 356*aa9a5b67SBarry Smith ``` 357*aa9a5b67SBarry Smith 358*aa9a5b67SBarry Smith Expected output: 359*aa9a5b67SBarry Smith 360*aa9a5b67SBarry Smith ```{literalinclude} /../src/ts/tutorials/output/ex11_tut_4.out 361*aa9a5b67SBarry Smith :language: none 362*aa9a5b67SBarry Smith ``` 363