xref: /petsc/doc/tutorials/handson.md (revision 7ab0661e7bf890d52e64979ba468952a11c5843a)
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