/* @HEADER@ */
# ************************************************************************
# 
#                              Sundance
#                 Copyright (2005) Sandia Corporation
# 
# Copyright (year first published) Sandia Corporation.  Under the terms 
# of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government 
# retains certain rights in this software.
# 
# This library is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2.1 of the
# License, or (at your option) any later version.
#  
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#                                                                                 
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
# USA                                                                                
# Questions? Contact Kevin Long (krlong@sandia.gov), 
# Sandia National Laboratories, Livermore, California, USA
# 
# ************************************************************************
/* @HEADER@ */

namespace Sundance
{
/*! \page doc_examples Listing of documented examples 


<h2> About the examples </h2>

Source code for these examples can be found in %Sundance/examples.
The doxygen pages linked here will show a short description of the main() function. To see 
a source browser page, follow the link "Go to the source code for this file."

<h4> Laplace's equation </h4>
This example shows many of the core features of Sundance in the context of
a simple linear PDE: getting a Mesh, 
defining geometry regions via CellFilter objects, setting up a weak form
and boundary conditions using Expr objects, forming a LinearProblem, 
getting the solution back as a DiscreteFunction (a subtype of Expr), and then
postprocessing and output. This example is explained in 
detail in the document <A HREF="GettingStarted.pdf"/> GettingStarted.pdf. </A>
<ul>
<li> Laplace3D.cpp 
</ul>

<h4> Infrastructure </h4>
These examples show the skeleton of "boilerplate" code that appears in
most simulations you'll develop, as well as utilities for user input via
command-line options and parameter lists. These examples are explained in 
detail in the document <A HREF="GettingStarted.pdf"/> GettingStarted.pdf. </A>
<ul>
<li> Boilerplate code: Skeleton.cpp
<li> Defining command-line options: CommandLineOptions.cpp
<li> Reading Teuchos::ParameterList objects from XML files: XMLParameterList.cpp
</ul>

<h4> Linear PDE </h4>
<ul>
<li> Solve a system of two coupled PDEs: Coupled2D.cpp. 
<li> How to use a single LinearProblem to do multiple solves of 
a PDE over a range of parameter values: ParameterSweep.cpp
<li> How to do a mixed discretization: TaylorHoodStokes2D.cpp
<li> Nitsche's boundary condition method: NitschePoisson2D.cpp
<li> Vorticity-streamfunction formulation of Stokes' equation: VorticityStokes2D.cpp
<li> %Block preconditioning for Stokes' equation: PCDStokesCouette2D.cpp
<li> Loose coupling of heat transport and fluid flow: CoolingIdealFlow.cpp. 
</ul>


<h4> Nonlinear PDE </h4>
These examples solve Bratu's equation 
\f$ -\nabla^2 u = \lambda e^u + f\f$ using
several different methods.  These examples are explained in 
detail in the document <a href="NonlinearExamples.pdf"> NonlinearExamples.pdf. </a>
<ul>
<li> Fixed-point iteration: FixedPointBratu1D.cpp
<li> Newton's method with linearization done by hand and a simple
user-level Newton loop: HandLinearizedNewtonBratu1D.cpp
<li> Newton's method with the linearization automated, but
the Newton loop still done at the user level: AutoLinearizedNewtonBratu1D.cpp
<li> Newton's method with the linearization automated and the solve done by
a packaged Newton-Armijo algorithm (Playa or NOX): FullyAutomatedNewtonBratu1D.cpp. 
<i> In most cases this is the most efficient and robust way to program a nonlinear PDE. </i>
<li> An outer loop with continuation on the parameter \f$\lambda\f$: ContinuationBratu1D.cpp.
A single nonlinear problem object is reused for every continuation step, similar to how
a single linear problem was used through the sweep in ParameterSweep.cpp.
</ul>

<h4> Transient PDE </h4>
<ul>
<li> Crank-Nicolson stepping for the heat conduction equation in 2D: TransientHeat2D.cpp
<li> Crank-Nicolson stepping for the radiation diffusion equation in 1D: TransientNonlinear1D.cpp. 
<li> Crank-Nicolson stepping for radiation diffusion equation in 1D, with automatic stepsize 
control: StepControlledTransientNonlinear1D.cpp. 
</ul>

*/
}