Merge lp:~fenics-core/fenics-doc/1.0 into lp:fenics-doc

Proposed by Marie Rognes
Status: Merged
Merged at revision: 236
Proposed branch: lp:~fenics-core/fenics-doc/1.0
Merge into: lp:fenics-doc
Diff against target: 160302 lines (+113495/-37225) (has conflicts)
1541 files modified
.bzrignore (+4/-0)
Makefile (+20/-14)
README (+9/-32)
doc-temporarily-removed/dolfin/demos/la/eigenvalue/common.txt (+40/-0)
doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/StiffnessMatrix.ufl (+14/-0)
doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/main.cpp (+56/-0)
doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/demo_eigenvalue.py (+57/-0)
doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/documentation.rst (+119/-0)
doc-temporarily-removed/dolfin/demos/la/index-cpp.rst (+1/-1)
doc-temporarily-removed/dolfin/demos/pde/biharmonic/common.txt (+82/-0)
doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/Biharmonic.ufl (+37/-0)
doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/documentation.rst (+212/-0)
doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/main.cpp (+85/-0)
doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/demo_biharmonic.py (+78/-0)
doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/documentation.rst (+132/-0)
doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/common.txt (+91/-0)
doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CahnHilliard2D.cpp (+4467/-0)
doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CahnHilliard2D.ufl (+42/-0)
doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CahnHilliard3D.cpp (+6095/-0)
doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CahnHilliard3D.ufl (+42/-0)
doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/documentation.rst (+410/-0)
doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/main.cpp (+170/-0)
doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/python/demo_cahn-hilliard.py (+105/-0)
doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/python/documentation.rst (+289/-0)
doc-temporarily-removed/dolfin/demos/pde/hyperelasticity/common.txt (+140/-0)
doc-temporarily-removed/dolfin/demos/pde/hyperelasticity/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/pde/hyperelasticity/cpp/HyperElasticity.ufl (+47/-0)
doc-temporarily-removed/dolfin/demos/pde/hyperelasticity/cpp/documentation.rst (+298/-0)
doc-temporarily-removed/dolfin/demos/pde/hyperelasticity/cpp/main.cpp (+133/-0)
doc-temporarily-removed/dolfin/demos/pde/hyperelasticity/python/demo_hyperelasticity.py (+82/-0)
doc-temporarily-removed/dolfin/demos/pde/hyperelasticity/python/documentation.rst (+155/-0)
doc-temporarily-removed/dolfin/demos/pde/mixed-poisson/common.txt (+99/-0)
doc-temporarily-removed/dolfin/demos/pde/mixed-poisson/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/pde/mixed-poisson/cpp/MixedPoisson.ufl (+17/-0)
doc-temporarily-removed/dolfin/demos/pde/mixed-poisson/cpp/documentation.rst (+241/-0)
doc-temporarily-removed/dolfin/demos/pde/mixed-poisson/cpp/main.cpp (+96/-0)
doc-temporarily-removed/dolfin/demos/pde/mixed-poisson/python/demo_mixed-poisson.py (+78/-0)
doc-temporarily-removed/dolfin/demos/pde/mixed-poisson/python/documentation.rst (+171/-0)
doc-temporarily-removed/dolfin/demos/pde/navier-stokes/common.txt (+91/-0)
doc-temporarily-removed/dolfin/demos/pde/navier-stokes/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/pde/navier-stokes/cpp/PressureUpdate.ufl (+27/-0)
doc-temporarily-removed/dolfin/demos/pde/navier-stokes/cpp/TentativeVelocity.ufl (+31/-0)
doc-temporarily-removed/dolfin/demos/pde/navier-stokes/cpp/VelocityUpdate.ufl (+28/-0)
doc-temporarily-removed/dolfin/demos/pde/navier-stokes/cpp/documentation.rst (+449/-0)
doc-temporarily-removed/dolfin/demos/pde/navier-stokes/cpp/main.cpp (+183/-0)
doc-temporarily-removed/dolfin/demos/pde/navier-stokes/python/demo_navier-stokes.py (+121/-0)
doc-temporarily-removed/dolfin/demos/pde/navier-stokes/python/documentation.rst (+231/-0)
doc-temporarily-removed/dolfin/demos/pde/poisson/common.txt (+55/-0)
doc-temporarily-removed/dolfin/demos/pde/poisson/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/pde/poisson/cpp/Poisson.ufl (+20/-0)
doc-temporarily-removed/dolfin/demos/pde/poisson/cpp/documentation.rst (+229/-0)
doc-temporarily-removed/dolfin/demos/pde/poisson/cpp/main.cpp (+86/-0)
doc-temporarily-removed/dolfin/demos/pde/poisson/python/demo_poisson.py (+53/-0)
doc-temporarily-removed/dolfin/demos/pde/poisson/python/documentation.rst (+153/-0)
doc-temporarily-removed/dolfin/demos/undocumented/adaptive-poisson/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/adaptive-poisson/cpp/README (+2/-0)
doc-temporarily-removed/dolfin/demos/undocumented/adaptive-poisson/python/demo_adaptive-poisson.py (+89/-0)
doc-temporarily-removed/dolfin/demos/undocumented/advection-diffusion/cpp/AdvectionDiffusion.ufl (+26/-0)
doc-temporarily-removed/dolfin/demos/undocumented/advection-diffusion/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/advection-diffusion/cpp/Velocity.ufl (+11/-0)
doc-temporarily-removed/dolfin/demos/undocumented/advection-diffusion/cpp/main.cpp (+97/-0)
doc-temporarily-removed/dolfin/demos/undocumented/advection-diffusion/python/demo_advection-diffusion.py (+112/-0)
doc-temporarily-removed/dolfin/demos/undocumented/ale/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/ale/cpp/main.cpp (+41/-0)
doc-temporarily-removed/dolfin/demos/undocumented/ale/python/demo_ale.py (+28/-0)
doc-temporarily-removed/dolfin/demos/undocumented/aliev-panfilov/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/aliev-panfilov/cpp/main.cpp (+58/-0)
doc-temporarily-removed/dolfin/demos/undocumented/aliev-panfilov/cpp/plot.py (+25/-0)
doc-temporarily-removed/dolfin/demos/undocumented/aliev-panfilov/python/demo.py (+33/-0)
doc-temporarily-removed/dolfin/demos/undocumented/aliev-panfilov/python/plot.py (+25/-0)
doc-temporarily-removed/dolfin/demos/undocumented/assembly/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/assembly/cpp/ReactionDiffusion.ufl (+19/-0)
doc-temporarily-removed/dolfin/demos/undocumented/assembly/cpp/main.cpp (+18/-0)
doc-temporarily-removed/dolfin/demos/undocumented/assembly/python/README (+2/-0)
doc-temporarily-removed/dolfin/demos/undocumented/auto-adaptive-navier-stokes/cpp/AdaptiveNavierStokes.ufl (+36/-0)
doc-temporarily-removed/dolfin/demos/undocumented/auto-adaptive-navier-stokes/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/auto-adaptive-navier-stokes/cpp/channel_with_flap.xml (+1688/-0)
doc-temporarily-removed/dolfin/demos/undocumented/auto-adaptive-navier-stokes/cpp/main.cpp (+95/-0)
doc-temporarily-removed/dolfin/demos/undocumented/auto-adaptive-navier-stokes/python/channel_with_flap.xml (+1688/-0)
doc-temporarily-removed/dolfin/demos/undocumented/auto-adaptive-navier-stokes/python/demo_auto-adaptive-navier-stokes.py (+67/-0)
doc-temporarily-removed/dolfin/demos/undocumented/auto-adaptive-poisson/cpp/AdaptivePoisson.ufl (+16/-0)
doc-temporarily-removed/dolfin/demos/undocumented/auto-adaptive-poisson/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/auto-adaptive-poisson/cpp/main.cpp (+73/-0)
doc-temporarily-removed/dolfin/demos/undocumented/auto-adaptive-poisson/python/demo_auto-adaptive-poisson.py (+33/-0)
doc-temporarily-removed/dolfin/demos/undocumented/bcs/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/bcs/cpp/Poisson.ufl (+19/-0)
doc-temporarily-removed/dolfin/demos/undocumented/bcs/cpp/main.cpp (+49/-0)
doc-temporarily-removed/dolfin/demos/undocumented/bcs/python/demo_bcs.py (+40/-0)
doc-temporarily-removed/dolfin/demos/undocumented/block-matrix/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/block-matrix/cpp/StiffnessMatrix.ufl (+14/-0)
doc-temporarily-removed/dolfin/demos/undocumented/block-matrix/cpp/main.cpp (+58/-0)
doc-temporarily-removed/dolfin/demos/undocumented/block-matrix/python/demo_block-matrix.py (+43/-0)
doc-temporarily-removed/dolfin/demos/undocumented/built-in/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/built-in/cpp/main.cpp (+66/-0)
doc-temporarily-removed/dolfin/demos/undocumented/built-in/python/demo_built-in.py (+64/-0)
doc-temporarily-removed/dolfin/demos/undocumented/collection/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/collection/cpp/main.cpp (+69/-0)
doc-temporarily-removed/dolfin/demos/undocumented/collection/cpp/plot.py (+21/-0)
doc-temporarily-removed/dolfin/demos/undocumented/coloring/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/coloring/cpp/main.cpp (+45/-0)
doc-temporarily-removed/dolfin/demos/undocumented/coloring/python/demo_coloring.py (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/complex/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/complex/cpp/main.cpp (+45/-0)
doc-temporarily-removed/dolfin/demos/undocumented/complex/cpp/plot.py (+12/-0)
doc-temporarily-removed/dolfin/demos/undocumented/conditional/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/conditional/cpp/Conditional.ufl (+30/-0)
doc-temporarily-removed/dolfin/demos/undocumented/conditional/cpp/main.cpp (+63/-0)
doc-temporarily-removed/dolfin/demos/undocumented/conditional/python/demo_conditional.py (+60/-0)
doc-temporarily-removed/dolfin/demos/undocumented/courtemanche/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/courtemanche/cpp/main.cpp (+334/-0)
doc-temporarily-removed/dolfin/demos/undocumented/courtemanche/cpp/plot.py (+26/-0)
doc-temporarily-removed/dolfin/demos/undocumented/curl-curl/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/curl-curl/cpp/CurrentDensity.ufl (+20/-0)
doc-temporarily-removed/dolfin/demos/undocumented/curl-curl/cpp/EddyCurrents.ufl (+20/-0)
doc-temporarily-removed/dolfin/demos/undocumented/curl-curl/cpp/main.cpp (+108/-0)
doc-temporarily-removed/dolfin/demos/undocumented/curl-curl/python/demo_curl-curl.py (+65/-0)
doc-temporarily-removed/dolfin/demos/undocumented/dg-advection-diffusion/cpp/AdvectionDiffusion.ufl (+44/-0)
doc-temporarily-removed/dolfin/demos/undocumented/dg-advection-diffusion/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/dg-advection-diffusion/cpp/Projection.ufl (+19/-0)
doc-temporarily-removed/dolfin/demos/undocumented/dg-advection-diffusion/cpp/Velocity.ufl (+12/-0)
doc-temporarily-removed/dolfin/demos/undocumented/dg-advection-diffusion/cpp/main.cpp (+110/-0)
doc-temporarily-removed/dolfin/demos/undocumented/dg-advection-diffusion/python/demo_dg-advection-diffusion.py (+86/-0)
doc-temporarily-removed/dolfin/demos/undocumented/dg-poisson/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/dg-poisson/cpp/Poisson.ufl (+42/-0)
doc-temporarily-removed/dolfin/demos/undocumented/dg-poisson/cpp/main.cpp (+78/-0)
doc-temporarily-removed/dolfin/demos/undocumented/dg-poisson/cpp/plot.py (+4/-0)
doc-temporarily-removed/dolfin/demos/undocumented/dg-poisson/python/demo_dg-poisson.py (+80/-0)
doc-temporarily-removed/dolfin/demos/undocumented/distancequeries/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/distancequeries/cpp/main.cpp (+85/-0)
doc-temporarily-removed/dolfin/demos/undocumented/distancequeries/python/README (+2/-0)
doc-temporarily-removed/dolfin/demos/undocumented/elasticity/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/elasticity/cpp/Elasticity.ufl (+29/-0)
doc-temporarily-removed/dolfin/demos/undocumented/elasticity/cpp/main.cpp (+163/-0)
doc-temporarily-removed/dolfin/demos/undocumented/elasticity/cpp/plot.py (+4/-0)
doc-temporarily-removed/dolfin/demos/undocumented/elasticity/python/demo_elasticity.py (+98/-0)
doc-temporarily-removed/dolfin/demos/undocumented/elastodynamics/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/elastodynamics/cpp/DG0_eps_xx.ufl (+20/-0)
doc-temporarily-removed/dolfin/demos/undocumented/elastodynamics/cpp/ElastoDynamics.ufl (+63/-0)
doc-temporarily-removed/dolfin/demos/undocumented/elastodynamics/cpp/main.cpp (+222/-0)
doc-temporarily-removed/dolfin/demos/undocumented/elastodynamics/python/demo_elastodynamics.py (+164/-0)
doc-temporarily-removed/dolfin/demos/undocumented/elementplot/python/demo_elementplot.py (+11/-0)
doc-temporarily-removed/dolfin/demos/undocumented/entityintersection/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/entityintersection/cpp/main.cpp (+47/-0)
doc-temporarily-removed/dolfin/demos/undocumented/entityintersection/python/demo_entityintersection.py (+41/-0)
doc-temporarily-removed/dolfin/demos/undocumented/equality/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/equality/cpp/Poisson.ufl (+19/-0)
doc-temporarily-removed/dolfin/demos/undocumented/equality/cpp/main.cpp (+93/-0)
doc-temporarily-removed/dolfin/demos/undocumented/equality/python/README (+2/-0)
doc-temporarily-removed/dolfin/demos/undocumented/eval/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/eval/cpp/Projection.ufl (+19/-0)
doc-temporarily-removed/dolfin/demos/undocumented/eval/cpp/main.cpp (+65/-0)
doc-temporarily-removed/dolfin/demos/undocumented/eval/python/demo_eval.py (+39/-0)
doc-temporarily-removed/dolfin/demos/undocumented/extrapolation/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/extrapolation/cpp/P1.ufl (+1/-0)
doc-temporarily-removed/dolfin/demos/undocumented/extrapolation/cpp/P2.ufl (+1/-0)
doc-temporarily-removed/dolfin/demos/undocumented/extrapolation/cpp/main.cpp (+51/-0)
doc-temporarily-removed/dolfin/demos/undocumented/extrapolation/python/demo2.py (+40/-0)
doc-temporarily-removed/dolfin/demos/undocumented/extrapolation/python/demo_extrapolation.py (+29/-0)
doc-temporarily-removed/dolfin/demos/undocumented/functional/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/functional/cpp/EnergyNorm.ufl (+12/-0)
doc-temporarily-removed/dolfin/demos/undocumented/functional/cpp/main.cpp (+51/-0)
doc-temporarily-removed/dolfin/demos/undocumented/functional/python/demo_functional.py (+35/-0)
doc-temporarily-removed/dolfin/demos/undocumented/harmonic/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/harmonic/cpp/main.cpp (+99/-0)
doc-temporarily-removed/dolfin/demos/undocumented/harmonic/cpp/plot.py (+12/-0)
doc-temporarily-removed/dolfin/demos/undocumented/harmonic/cpp/plot_dual.py (+12/-0)
doc-temporarily-removed/dolfin/demos/undocumented/interpolation/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/interpolation/cpp/README (+2/-0)
doc-temporarily-removed/dolfin/demos/undocumented/interpolation/python/demo_interpolation.py (+50/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lift-drag/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lift-drag/cpp/Drag.ufl (+16/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lift-drag/cpp/Lift.ufl (+16/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lift-drag/cpp/Pressure.ufl (+12/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lift-drag/cpp/main.cpp (+57/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lift-drag/python/demo_lift-drag.py (+46/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lorenz/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lorenz/cpp/main.cpp (+83/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lorenz/cpp/plot.py (+24/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lorenz/cpp/stabilityfactors.py (+90/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lorenz/python/demo.py (+77/-0)
doc-temporarily-removed/dolfin/demos/undocumented/lorenz/python/plot.py (+39/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshfunction-refinement/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshfunction-refinement/cpp/main.cpp (+61/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshfunction/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshfunction/cpp/main.cpp (+28/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshfunction/cpp/plot.py (+5/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshfunction/meshfunction.xml (+13/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshfunction/python/demo_meshfunction.py (+25/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshintersection/2D/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshintersection/2D/cpp/main.cpp (+70/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshintersection/2D/python/demo_2D.py (+136/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshintersection/3D/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshintersection/3D/cpp/README (+2/-0)
doc-temporarily-removed/dolfin/demos/undocumented/meshintersection/3D/python/demo_3D.py (+80/-0)
doc-temporarily-removed/dolfin/demos/undocumented/method-weights/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/method-weights/cpp/main.cpp (+41/-0)
doc-temporarily-removed/dolfin/demos/undocumented/neumann-poisson/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/neumann-poisson/cpp/Poisson.ufl (+22/-0)
doc-temporarily-removed/dolfin/demos/undocumented/neumann-poisson/cpp/main.cpp (+82/-0)
doc-temporarily-removed/dolfin/demos/undocumented/neumann-poisson/python/demo_neumann-poisson.py (+53/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonlinear-poisson/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonlinear-poisson/cpp/NonlinearPoisson.ufl (+21/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonlinear-poisson/cpp/main.cpp (+95/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonlinear-poisson/cpp/plot.py (+10/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonlinear-poisson/python/demo_nonlinear-poisson.py (+68/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonmatching-interpolation/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonmatching-interpolation/cpp/P1.ufl (+13/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonmatching-interpolation/cpp/P3.ufl (+13/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonmatching-interpolation/cpp/main.cpp (+69/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonmatching-interpolation/python/demo_nonmatching-interpolation.py (+33/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonmatching-projection/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonmatching-projection/cpp/P1_projection.ufl (+20/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonmatching-projection/cpp/P3.ufl (+13/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonmatching-projection/cpp/main.cpp (+74/-0)
doc-temporarily-removed/dolfin/demos/undocumented/nonmatching-projection/python/demo_nonmatching-projection.py (+36/-0)
doc-temporarily-removed/dolfin/demos/undocumented/optimization/python/demo_optimization.py (+83/-0)
doc-temporarily-removed/dolfin/demos/undocumented/parameters/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/parameters/cpp/main.cpp (+105/-0)
doc-temporarily-removed/dolfin/demos/undocumented/parameters/cpp/parameters.xml (+8/-0)
doc-temporarily-removed/dolfin/demos/undocumented/parameters/python/demo_parameters.py (+146/-0)
doc-temporarily-removed/dolfin/demos/undocumented/parameters/python/parameters.xml (+14/-0)
doc-temporarily-removed/dolfin/demos/undocumented/partitioning/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/partitioning/cpp/main.cpp (+33/-0)
doc-temporarily-removed/dolfin/demos/undocumented/partitioning/cpp/plotpartitions (+16/-0)
doc-temporarily-removed/dolfin/demos/undocumented/partitioning/python/demo_partitioning.py (+18/-0)
doc-temporarily-removed/dolfin/demos/undocumented/periodic/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/periodic/cpp/Poisson.ufl (+19/-0)
doc-temporarily-removed/dolfin/demos/undocumented/periodic/cpp/main.cpp (+99/-0)
doc-temporarily-removed/dolfin/demos/undocumented/periodic/python/demo_periodic.py (+72/-0)
doc-temporarily-removed/dolfin/demos/undocumented/plot/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/plot/cpp/main.cpp (+16/-0)
doc-temporarily-removed/dolfin/demos/undocumented/plot/python/demo_plot.py (+92/-0)
doc-temporarily-removed/dolfin/demos/undocumented/poisson1D/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/poisson1D/cpp/Poisson.ufl (+21/-0)
doc-temporarily-removed/dolfin/demos/undocumented/poisson1D/cpp/main.cpp (+93/-0)
doc-temporarily-removed/dolfin/demos/undocumented/poisson1D/python/demo_poisson1D.py (+53/-0)
doc-temporarily-removed/dolfin/demos/undocumented/projection-interpolation/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/projection-interpolation/cpp/README (+2/-0)
doc-temporarily-removed/dolfin/demos/undocumented/projection-interpolation/python/demo_projection-interpolation.py (+29/-0)
doc-temporarily-removed/dolfin/demos/undocumented/quadrature/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/quadrature/cpp/main.cpp (+45/-0)
doc-temporarily-removed/dolfin/demos/undocumented/quadrature/python/demo_quadrature.py (+40/-0)
doc-temporarily-removed/dolfin/demos/undocumented/reaction-diffusion/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/reaction-diffusion/cpp/ReactionDiffusion.ufl (+16/-0)
doc-temporarily-removed/dolfin/demos/undocumented/reaction-diffusion/cpp/main.cpp (+49/-0)
doc-temporarily-removed/dolfin/demos/undocumented/reaction-diffusion/python/demo_reaction-diffusion.py (+31/-0)
doc-temporarily-removed/dolfin/demos/undocumented/reaction-diffusion/python/short.py (+4/-0)
doc-temporarily-removed/dolfin/demos/undocumented/reaction/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/reaction/cpp/main.cpp (+109/-0)
doc-temporarily-removed/dolfin/demos/undocumented/reaction/cpp/plot.py (+23/-0)
doc-temporarily-removed/dolfin/demos/undocumented/refinement/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/refinement/cpp/main.cpp (+46/-0)
doc-temporarily-removed/dolfin/demos/undocumented/refinement/python/demo_refinement.py (+51/-0)
doc-temporarily-removed/dolfin/demos/undocumented/restriction/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/restriction/cpp/README (+2/-0)
doc-temporarily-removed/dolfin/demos/undocumented/restriction/python/demo_restriction.py (+75/-0)
doc-temporarily-removed/dolfin/demos/undocumented/simple/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/simple/cpp/MassMatrix3D.ufl (+14/-0)
doc-temporarily-removed/dolfin/demos/undocumented/simple/cpp/StiffnessMatrix3D.ufl (+14/-0)
doc-temporarily-removed/dolfin/demos/undocumented/simple/cpp/main.cpp (+78/-0)
doc-temporarily-removed/dolfin/demos/undocumented/simple/python/demo_simple.py (+59/-0)
doc-temporarily-removed/dolfin/demos/undocumented/smoothing/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/smoothing/cpp/README (+2/-0)
doc-temporarily-removed/dolfin/demos/undocumented/smoothing/python/demo_smoothing.py (+61/-0)
doc-temporarily-removed/dolfin/demos/undocumented/spatial-coordinates/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/spatial-coordinates/cpp/SpatialCoordinates.ufl (+22/-0)
doc-temporarily-removed/dolfin/demos/undocumented/spatial-coordinates/cpp/main.cpp (+67/-0)
doc-temporarily-removed/dolfin/demos/undocumented/spatial-coordinates/python/demo_spatial-coordinates.py (+62/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stiff/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stiff/cpp/main.cpp (+147/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stiff/cpp/plot.py (+51/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stiff/cpp/run-tests.sh (+30/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-iterative/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-iterative/cpp/Stokes.ufl (+23/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-iterative/cpp/StokesPreconditioner.ufl (+21/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-iterative/cpp/main.cpp (+139/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-iterative/python/demo_stokes-iterative.py (+85/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-mini/python/demo_stokes-mini.py (+71/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-stabilized/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-stabilized/cpp/Stokes.ufl (+26/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-stabilized/cpp/main.cpp (+102/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-stabilized/cpp/plot.py (+9/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-stabilized/python/demo_stokes-stabilized.py (+72/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-taylor-hood/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-taylor-hood/cpp/Stokes.ufl (+22/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-taylor-hood/cpp/main.cpp (+100/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-taylor-hood/cpp/plot.py (+9/-0)
doc-temporarily-removed/dolfin/demos/undocumented/stokes-taylor-hood/python/demo_stokes-taylor-hood.py (+70/-0)
doc-temporarily-removed/dolfin/demos/undocumented/subdomains/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/subdomains/cpp/main.cpp (+87/-0)
doc-temporarily-removed/dolfin/demos/undocumented/subdomains/python/demo_subdomains.py (+82/-0)
doc-temporarily-removed/dolfin/demos/undocumented/submesh/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/submesh/cpp/main.cpp (+55/-0)
doc-temporarily-removed/dolfin/demos/undocumented/submesh/python/demo_submesh.py (+46/-0)
doc-temporarily-removed/dolfin/demos/undocumented/sym-dirichlet-bc/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/sym-dirichlet-bc/cpp/Poisson.ufl (+20/-0)
doc-temporarily-removed/dolfin/demos/undocumented/sym-dirichlet-bc/cpp/main.cpp (+128/-0)
doc-temporarily-removed/dolfin/demos/undocumented/sym-dirichlet-bc/python/demo_sym-dirichlet-bc.py (+63/-0)
doc-temporarily-removed/dolfin/demos/undocumented/sym-dirichlet-bc/python/dg-demo.py (+103/-0)
doc-temporarily-removed/dolfin/demos/undocumented/sym-dirichlet-bc/python/dg-speed-up-test.py (+72/-0)
doc-temporarily-removed/dolfin/demos/undocumented/sym-dirichlet-bc/python/speed-up-test.py (+60/-0)
doc-temporarily-removed/dolfin/demos/undocumented/tensor-weighted-poisson/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/tensor-weighted-poisson/cpp/README (+2/-0)
doc-temporarily-removed/dolfin/demos/undocumented/tensor-weighted-poisson/python/demo_tensor-weighted-poisson.py (+106/-0)
doc-temporarily-removed/dolfin/demos/undocumented/tensor-weighted-poisson/python/generate_data.py (+48/-0)
doc-temporarily-removed/dolfin/demos/undocumented/time-series/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/time-series/cpp/main.cpp (+57/-0)
doc-temporarily-removed/dolfin/demos/undocumented/time-series/python/demo_time-series.py (+42/-0)
doc-temporarily-removed/dolfin/demos/undocumented/trilinos/python/demo2.py (+61/-0)
doc-temporarily-removed/dolfin/demos/undocumented/trilinos/python/demo_trilinos.py (+89/-0)
doc-temporarily-removed/dolfin/demos/undocumented/waveguide/cpp/CMakeLists.txt (+34/-0)
doc-temporarily-removed/dolfin/demos/undocumented/waveguide/cpp/Forms.py (+31/-0)
doc-temporarily-removed/dolfin/demos/undocumented/waveguide/cpp/Forms.ufl (+16/-0)
doc-temporarily-removed/dolfin/demos/undocumented/waveguide/cpp/main.cpp (+94/-0)
doc-temporarily-removed/dolfin/demos/undocumented/waveguide/python/demo_waveguide.py (+89/-0)
doc-temporarily-removed/dolfin/index.rst (+16/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/adaptivity/TimeSeries.rst (+5/-1)
doc-temporarily-removed/dolfin/programmers-reference/cpp/adaptivity/index.rst (+1/-1)
doc-temporarily-removed/dolfin/programmers-reference/cpp/common/index.rst (+1/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/common/real.rst (+0/-4)
doc-temporarily-removed/dolfin/programmers-reference/cpp/fem/Assembler.rst (+23/-5)
doc-temporarily-removed/dolfin/programmers-reference/cpp/fem/DirichletBC.rst (+11/-13)
doc-temporarily-removed/dolfin/programmers-reference/cpp/fem/DofMap.rst (+35/-34)
doc-temporarily-removed/dolfin/programmers-reference/cpp/fem/FiniteElement.rst (+73/-5)
doc-temporarily-removed/dolfin/programmers-reference/cpp/fem/Form.rst (+52/-26)
doc-temporarily-removed/dolfin/programmers-reference/cpp/fem/GenericDofMap.rst (+11/-11)
doc-temporarily-removed/dolfin/programmers-reference/cpp/fem/VariationalProblem.rst (+27/-59)
doc-temporarily-removed/dolfin/programmers-reference/cpp/fem/assemble.rst (+3/-3)
doc-temporarily-removed/dolfin/programmers-reference/cpp/fem/index.rst (+1/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/function/Function.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/function/FunctionSpace.rst (+5/-12)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/EpetraKrylovSolver.rst (+6/-2)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/EpetraLUSolver.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/EpetraMatrix.rst (+6/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/EpetraVector.rst (+3/-3)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/GenericLinearSolver.rst (+6/-2)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/GenericMatrix.rst (+6/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/GenericVector.rst (+2/-2)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/ITLKrylovSolver.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/KrylovSolver.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/LUSolver.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/LinearSolver.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/MTL4Matrix.rst (+6/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/MTL4Vector.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/Matrix.rst (+6/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/PETScBaseMatrix.rst (+8/-2)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/PETScKrylovSolver.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/PETScLUSolver.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/PETScMatrix.rst (+6/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/PETScVector.rst (+6/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/STLMatrix.rst (+6/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/UmfpackLUSolver.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/uBLASKrylovSolver.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/uBLASMatrix.rst (+6/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/la/uBLASVector.rst (+4/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/log/log.rst (+10/-6)
doc-temporarily-removed/dolfin/programmers-reference/cpp/math/Lagrange.rst (+3/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/Cell.rst (+2/-2)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/CellType.rst (+1/-1)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/Edge.rst (+5/-1)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/Face.rst (+8/-0)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/Facet.rst (+13/-4)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/IntersectionOperator.rst (+4/-13)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/Mesh.rst (+9/-9)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/MeshData.rst (+17/-15)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/MeshFunction.rst (+5/-1)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/Point.rst (+1/-1)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/SubDomain.rst (+1/-1)
doc-temporarily-removed/dolfin/programmers-reference/cpp/mesh/SubMesh.rst (+1/-1)
doc-temporarily-removed/dolfin/programmers-reference/cpp/ode/ComplexODE.rst (+6/-6)
doc-temporarily-removed/dolfin/programmers-reference/cpp/ode/ODE.rst (+10/-10)
doc-temporarily-removed/dolfin/programmers-reference/cpp/ode/ODECollection.rst (+5/-5)
doc-temporarily-removed/dolfin/programmers-reference/cpp/ode/ODESolution.rst (+1/-1)
doc-temporarily-removed/dolfin/programmers-reference/cpp/quadrature/Quadrature.rst (+1/-1)
doc-temporarily-removed/dolfin/programmers-reference/index.rst (+4/-4)
doc-temporarily-removed/dolfin/programmers-reference/python/index.rst (+12/-3)
doc-temporarily-removed/ffc/index.rst (+18/-0)
doc-temporarily-removed/ffc/user/index.rst (+9/-0)
doc-temporarily-removed/ufc/index.rst (+104/-0)
doc-temporarily-removed/ufl/index.rst (+18/-0)
doc-temporarily-removed/ufl/user/index.rst (+1945/-0)
make.bat (+0/-112)
publish.sh (+3/-0)
sandbox/test/Makefile (+130/-0)
sandbox/test/source/_themes/fenics/README (+2/-0)
sandbox/test/source/_themes/fenics/layout.html (+69/-0)
sandbox/test/source/_themes/fenics/static/fenics.css_t (+388/-0)
sandbox/test/source/_themes/fenics/theme.conf (+12/-0)
sandbox/test/source/about/about.rst (+13/-0)
sandbox/test/source/cite/cite.rst (+32/-0)
sandbox/test/source/conf.py (+216/-0)
sandbox/test/source/contact/help.rst (+86/-0)
sandbox/test/source/index.rst (+25/-0)
sandbox/test/source/installation/installation.rst (+280/-0)
scripts/copy_demos_dolfin (+6/-4)
scripts/fetch_news (+27/-0)
scripts/generate_programmers_reference_cpp (+52/-19)
scripts/generate_programmers_reference_python (+225/-0)
source/_themes/fenics/README (+2/-0)
source/_themes/fenics/layout.html (+69/-0)
source/_themes/fenics/static/fenics.css_t (+388/-0)
source/_themes/fenics/theme.conf (+12/-0)
source/about/index.rst (+3/-3)
source/citing/index.rst (+5/-7)
source/conf.py (+9/-4)
source/contact/index.rst (+14/-10)
source/contact/launchpad_pages.rst (+2/-2)
source/developers/index.rst (+14/-11)
source/doc/demos/la/eigenvalue/common.txt (+0/-40)
source/doc/demos/la/eigenvalue/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/la/eigenvalue/cpp/CMakeLists.txt.moved (+0/-31)
source/doc/demos/la/eigenvalue/cpp/Stiffness.ufl (+0/-10)
source/doc/demos/la/eigenvalue/cpp/StiffnessMatrix.ufl (+0/-14)
source/doc/demos/la/eigenvalue/cpp/main.cpp (+0/-56)
source/doc/demos/la/eigenvalue/python/demo.py (+0/-57)
source/doc/demos/la/eigenvalue/python/documentation.rst (+0/-122)
source/doc/demos/pde/biharmonic/common.txt (+0/-82)
source/doc/demos/pde/biharmonic/cpp/Biharmonic.ufl (+0/-37)
source/doc/demos/pde/biharmonic/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/pde/biharmonic/cpp/documentation.rst (+0/-213)
source/doc/demos/pde/biharmonic/cpp/main.cpp (+0/-85)
source/doc/demos/pde/biharmonic/python/demo.py (+0/-78)
source/doc/demos/pde/biharmonic/python/documentation.rst (+0/-133)
source/doc/demos/pde/cahn-hilliard/common.txt (+0/-91)
source/doc/demos/pde/cahn-hilliard/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/pde/cahn-hilliard/cpp/CahnHilliard2D.cpp (+0/-4318)
source/doc/demos/pde/cahn-hilliard/cpp/CahnHilliard2D.ufl (+0/-42)
source/doc/demos/pde/cahn-hilliard/cpp/CahnHilliard3D.cpp (+0/-5986)
source/doc/demos/pde/cahn-hilliard/cpp/CahnHilliard3D.ufl (+0/-42)
source/doc/demos/pde/cahn-hilliard/cpp/documentation.rst (+0/-410)
source/doc/demos/pde/cahn-hilliard/cpp/main.cpp (+0/-170)
source/doc/demos/pde/cahn-hilliard/python/demo.py (+0/-105)
source/doc/demos/pde/cahn-hilliard/python/documentation.rst (+0/-289)
source/doc/demos/pde/hyperelasticity/common.txt (+0/-140)
source/doc/demos/pde/hyperelasticity/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/pde/hyperelasticity/cpp/HyperElasticity.ufl (+0/-47)
source/doc/demos/pde/hyperelasticity/cpp/documentation.rst (+0/-298)
source/doc/demos/pde/hyperelasticity/cpp/main.cpp (+0/-133)
source/doc/demos/pde/hyperelasticity/python/demo.py (+0/-82)
source/doc/demos/pde/hyperelasticity/python/documentation.rst (+0/-156)
source/doc/demos/pde/mixed-poisson/common.txt (+0/-99)
source/doc/demos/pde/mixed-poisson/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/pde/mixed-poisson/cpp/MixedPoisson.ufl (+0/-17)
source/doc/demos/pde/mixed-poisson/cpp/documentation.rst (+0/-242)
source/doc/demos/pde/mixed-poisson/cpp/main.cpp (+0/-96)
source/doc/demos/pde/mixed-poisson/python/demo.py (+0/-78)
source/doc/demos/pde/mixed-poisson/python/documentation.rst (+0/-170)
source/doc/demos/pde/navier-stokes/common.txt (+0/-91)
source/doc/demos/pde/navier-stokes/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/pde/navier-stokes/cpp/PressureUpdate.ufl (+0/-27)
source/doc/demos/pde/navier-stokes/cpp/TentativeVelocity.ufl (+0/-31)
source/doc/demos/pde/navier-stokes/cpp/VelocityUpdate.ufl (+0/-28)
source/doc/demos/pde/navier-stokes/cpp/documentation.rst (+0/-449)
source/doc/demos/pde/navier-stokes/cpp/main.cpp (+0/-183)
source/doc/demos/pde/navier-stokes/python/demo.py (+0/-121)
source/doc/demos/pde/navier-stokes/python/documentation.rst (+0/-231)
source/doc/demos/pde/poisson/common.txt (+0/-55)
source/doc/demos/pde/poisson/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/pde/poisson/cpp/Poisson.ufl (+0/-20)
source/doc/demos/pde/poisson/cpp/documentation.rst (+0/-231)
source/doc/demos/pde/poisson/cpp/main.cpp (+0/-86)
source/doc/demos/pde/poisson/python/demo.py (+0/-53)
source/doc/demos/pde/poisson/python/documentation.rst (+0/-153)
source/doc/demos/undocumented/adaptive-pde/energy-norm-poisson.py (+0/-46)
source/doc/demos/undocumented/adaptive-pde/mixed-poisson.py (+0/-78)
source/doc/demos/undocumented/adaptive-pde/navier-stokes.py (+0/-80)
source/doc/demos/undocumented/adaptive-pde/poisson.py (+0/-51)
source/doc/demos/undocumented/adaptive-poisson/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/adaptive-poisson/cpp/README (+0/-2)
source/doc/demos/undocumented/adaptive-poisson/python/demo.py (+0/-89)
source/doc/demos/undocumented/advection-diffusion/cpp/AdvectionDiffusion.ufl (+0/-25)
source/doc/demos/undocumented/advection-diffusion/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/advection-diffusion/cpp/Velocity.ufl (+0/-11)
source/doc/demos/undocumented/advection-diffusion/cpp/main.cpp (+0/-97)
source/doc/demos/undocumented/advection-diffusion/python/demo.py (+0/-112)
source/doc/demos/undocumented/ale/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/ale/cpp/main.cpp (+0/-41)
source/doc/demos/undocumented/ale/python/demo.py (+0/-28)
source/doc/demos/undocumented/aliev-panfilov/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/aliev-panfilov/cpp/main.cpp (+0/-58)
source/doc/demos/undocumented/aliev-panfilov/cpp/plot.py (+0/-25)
source/doc/demos/undocumented/aliev-panfilov/python/demo.py (+0/-37)
source/doc/demos/undocumented/assembly/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/assembly/cpp/ReactionDiffusion.ufl (+0/-19)
source/doc/demos/undocumented/assembly/cpp/main.cpp (+0/-18)
source/doc/demos/undocumented/assembly/python/README (+0/-2)
source/doc/demos/undocumented/auto-adaptive-navier-stokes/cpp/AdaptiveNavierStokes.ufl (+0/-34)
source/doc/demos/undocumented/auto-adaptive-navier-stokes/cpp/CMakeLists.txt (+0/-31)
source/doc/demos/undocumented/auto-adaptive-navier-stokes/cpp/channel_with_flap.xml (+0/-1688)
source/doc/demos/undocumented/auto-adaptive-navier-stokes/cpp/main.cpp (+0/-89)
source/doc/demos/undocumented/auto-adaptive-navier-stokes/python/channel_with_flap.xml (+0/-1688)
source/doc/demos/undocumented/auto-adaptive-navier-stokes/python/demo.py (+0/-59)
source/doc/demos/undocumented/auto-adaptive-poisson/cpp/AdaptivePoisson.ufl (+0/-16)
source/doc/demos/undocumented/auto-adaptive-poisson/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/auto-adaptive-poisson/cpp/main.cpp (+0/-74)
source/doc/demos/undocumented/auto-adaptive-poisson/python/demo.py (+0/-33)
source/doc/demos/undocumented/bcs/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/bcs/cpp/Poisson.ufl (+0/-19)
source/doc/demos/undocumented/bcs/cpp/main.cpp (+0/-49)
source/doc/demos/undocumented/bcs/python/demo.py (+0/-40)
source/doc/demos/undocumented/block-matrix/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/block-matrix/cpp/StiffnessMatrix.ufl (+0/-14)
source/doc/demos/undocumented/block-matrix/cpp/main.cpp (+0/-58)
source/doc/demos/undocumented/block-matrix/python/demo.py (+0/-43)
source/doc/demos/undocumented/built-in/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/built-in/cpp/main.cpp (+0/-66)
source/doc/demos/undocumented/built-in/python/demo.py (+0/-64)
source/doc/demos/undocumented/collection/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/collection/cpp/main.cpp (+0/-69)
source/doc/demos/undocumented/collection/cpp/plot.py (+0/-21)
source/doc/demos/undocumented/coloring/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/coloring/cpp/main.cpp (+0/-45)
source/doc/demos/undocumented/coloring/python/demo.py (+0/-34)
source/doc/demos/undocumented/complex/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/complex/cpp/main.cpp (+0/-45)
source/doc/demos/undocumented/complex/cpp/plot.py (+0/-12)
source/doc/demos/undocumented/conditional/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/conditional/cpp/Conditional.ufl (+0/-30)
source/doc/demos/undocumented/conditional/cpp/main.cpp (+0/-63)
source/doc/demos/undocumented/conditional/python/demo.py (+0/-60)
source/doc/demos/undocumented/courtemanche/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/courtemanche/cpp/main.cpp (+0/-334)
source/doc/demos/undocumented/courtemanche/cpp/plot.py (+0/-26)
source/doc/demos/undocumented/curl-curl/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/curl-curl/cpp/CurrentDensity.ufl (+0/-20)
source/doc/demos/undocumented/curl-curl/cpp/EddyCurrents.ufl (+0/-20)
source/doc/demos/undocumented/curl-curl/cpp/main.cpp (+0/-108)
source/doc/demos/undocumented/curl-curl/python/demo.py (+0/-65)
source/doc/demos/undocumented/dg-advection-diffusion/cpp/AdvectionDiffusion.ufl (+0/-43)
source/doc/demos/undocumented/dg-advection-diffusion/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/dg-advection-diffusion/cpp/Projection.ufl (+0/-19)
source/doc/demos/undocumented/dg-advection-diffusion/cpp/Velocity.ufl (+0/-12)
source/doc/demos/undocumented/dg-advection-diffusion/cpp/main.cpp (+0/-110)
source/doc/demos/undocumented/dg-advection-diffusion/python/demo.py (+0/-86)
source/doc/demos/undocumented/dg-poisson/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/dg-poisson/cpp/Poisson.ufl (+0/-42)
source/doc/demos/undocumented/dg-poisson/cpp/main.cpp (+0/-78)
source/doc/demos/undocumented/dg-poisson/cpp/plot.py (+0/-4)
source/doc/demos/undocumented/dg-poisson/python/demo.py (+0/-80)
source/doc/demos/undocumented/dielectric/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/dielectric/cpp/README (+0/-2)
source/doc/demos/undocumented/dielectric/python/demo.py (+0/-132)
source/doc/demos/undocumented/distancequeries/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/distancequeries/cpp/main.cpp (+0/-85)
source/doc/demos/undocumented/distancequeries/python/README (+0/-2)
source/doc/demos/undocumented/elasticity/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/elasticity/cpp/Elasticity.ufl (+0/-29)
source/doc/demos/undocumented/elasticity/cpp/main.cpp (+0/-156)
source/doc/demos/undocumented/elasticity/cpp/plot.py (+0/-4)
source/doc/demos/undocumented/elasticity/python/demo.py (+0/-98)
source/doc/demos/undocumented/elastodynamics/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/elastodynamics/cpp/DG0_eps_xx.ufl (+0/-21)
source/doc/demos/undocumented/elastodynamics/cpp/ElastoDynamics.ufl (+0/-63)
source/doc/demos/undocumented/elastodynamics/cpp/main.cpp (+0/-218)
source/doc/demos/undocumented/elastodynamics/python/demo.py (+0/-161)
source/doc/demos/undocumented/elementplot/python/demo.py (+0/-11)
source/doc/demos/undocumented/entityintersection/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/entityintersection/cpp/main.cpp (+0/-47)
source/doc/demos/undocumented/entityintersection/python/demo.py (+0/-41)
source/doc/demos/undocumented/equality/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/equality/cpp/Poisson.ufl (+0/-19)
source/doc/demos/undocumented/equality/cpp/main.cpp (+0/-93)
source/doc/demos/undocumented/equality/python/README (+0/-2)
source/doc/demos/undocumented/eval/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/eval/cpp/Projection.ufl (+0/-19)
source/doc/demos/undocumented/eval/cpp/main.cpp (+0/-65)
source/doc/demos/undocumented/eval/python/demo.py (+0/-39)
source/doc/demos/undocumented/extrapolation/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/extrapolation/cpp/P1.ufl (+0/-1)
source/doc/demos/undocumented/extrapolation/cpp/P2.ufl (+0/-1)
source/doc/demos/undocumented/extrapolation/cpp/main.cpp (+0/-51)
source/doc/demos/undocumented/extrapolation/python/demo.py (+0/-29)
source/doc/demos/undocumented/extrapolation/python/demo2.py (+0/-40)
source/doc/demos/undocumented/functional/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/functional/cpp/EnergyNorm.ufl (+0/-12)
source/doc/demos/undocumented/functional/cpp/main.cpp (+0/-51)
source/doc/demos/undocumented/functional/python/demo.py (+0/-35)
source/doc/demos/undocumented/harmonic/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/harmonic/cpp/main.cpp (+0/-98)
source/doc/demos/undocumented/harmonic/cpp/plot.py (+0/-12)
source/doc/demos/undocumented/harmonic/cpp/plot_dual.py (+0/-12)
source/doc/demos/undocumented/interpolation/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/interpolation/cpp/README (+0/-2)
source/doc/demos/undocumented/interpolation/python/demo.py (+0/-50)
source/doc/demos/undocumented/lift-drag/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/lift-drag/cpp/Drag.ufl (+0/-16)
source/doc/demos/undocumented/lift-drag/cpp/Lift.ufl (+0/-16)
source/doc/demos/undocumented/lift-drag/cpp/Pressure.ufl (+0/-12)
source/doc/demos/undocumented/lift-drag/cpp/main.cpp (+0/-57)
source/doc/demos/undocumented/lift-drag/python/demo.py (+0/-46)
source/doc/demos/undocumented/lorenz/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/lorenz/cpp/main.cpp (+0/-83)
source/doc/demos/undocumented/lorenz/cpp/plot.py (+0/-24)
source/doc/demos/undocumented/lorenz/cpp/stabilityfactors.py (+0/-90)
source/doc/demos/undocumented/lorenz/python/demo.py (+0/-89)
source/doc/demos/undocumented/lorenz/python/plot.py (+0/-35)
source/doc/demos/undocumented/meshfunction/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/meshfunction/cpp/main.cpp (+0/-28)
source/doc/demos/undocumented/meshfunction/cpp/plot.py (+0/-5)
source/doc/demos/undocumented/meshfunction/meshfunction.xml (+0/-13)
source/doc/demos/undocumented/meshfunction/python/demo.py (+0/-25)
source/doc/demos/undocumented/meshintersection/2D/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/meshintersection/2D/cpp/main.cpp (+0/-70)
source/doc/demos/undocumented/meshintersection/2D/python/demo.py (+0/-136)
source/doc/demos/undocumented/meshintersection/3D/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/meshintersection/3D/cpp/README (+0/-2)
source/doc/demos/undocumented/meshintersection/3D/python/demo.py (+0/-80)
source/doc/demos/undocumented/method-weights/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/method-weights/cpp/main.cpp (+0/-41)
source/doc/demos/undocumented/neumann-poisson/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/neumann-poisson/cpp/Poisson.ufl (+0/-23)
source/doc/demos/undocumented/neumann-poisson/cpp/main.cpp (+0/-82)
source/doc/demos/undocumented/neumann-poisson/python/demo.py (+0/-53)
source/doc/demos/undocumented/nonlinear-poisson/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/nonlinear-poisson/cpp/NonlinearPoisson.ufl (+0/-21)
source/doc/demos/undocumented/nonlinear-poisson/cpp/main.cpp (+0/-95)
source/doc/demos/undocumented/nonlinear-poisson/cpp/plot.py (+0/-10)
source/doc/demos/undocumented/nonlinear-poisson/python/demo.py (+0/-68)
source/doc/demos/undocumented/nonmatching-interpolation/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/nonmatching-interpolation/cpp/P1.ufl (+0/-13)
source/doc/demos/undocumented/nonmatching-interpolation/cpp/P3.ufl (+0/-13)
source/doc/demos/undocumented/nonmatching-interpolation/cpp/main.cpp (+0/-69)
source/doc/demos/undocumented/nonmatching-interpolation/python/demo.py (+0/-33)
source/doc/demos/undocumented/nonmatching-projection/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/nonmatching-projection/cpp/P1_projection.ufl (+0/-20)
source/doc/demos/undocumented/nonmatching-projection/cpp/P3.ufl (+0/-13)
source/doc/demos/undocumented/nonmatching-projection/cpp/main.cpp (+0/-74)
source/doc/demos/undocumented/nonmatching-projection/python/demo.py (+0/-36)
source/doc/demos/undocumented/optimization/python/demo.py (+0/-83)
source/doc/demos/undocumented/parameters/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/parameters/cpp/main.cpp (+0/-106)
source/doc/demos/undocumented/parameters/cpp/parameters.xml (+0/-9)
source/doc/demos/undocumented/parameters/python/demo.py (+0/-147)
source/doc/demos/undocumented/parameters/python/parameters.xml (+0/-14)
source/doc/demos/undocumented/partitioning/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/partitioning/cpp/main.cpp (+0/-33)
source/doc/demos/undocumented/partitioning/cpp/plotpartitions (+0/-16)
source/doc/demos/undocumented/partitioning/python/demo.py (+0/-18)
source/doc/demos/undocumented/periodic/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/periodic/cpp/Poisson.ufl (+0/-19)
source/doc/demos/undocumented/periodic/cpp/main.cpp (+0/-99)
source/doc/demos/undocumented/periodic/python/demo.py (+0/-72)
source/doc/demos/undocumented/plot/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/plot/cpp/main.cpp (+0/-16)
source/doc/demos/undocumented/plot/python/demo.py (+0/-92)
source/doc/demos/undocumented/poisson1D/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/poisson1D/cpp/Poisson.ufl (+0/-21)
source/doc/demos/undocumented/poisson1D/cpp/main.cpp (+0/-93)
source/doc/demos/undocumented/poisson1D/python/demo.py (+0/-53)
source/doc/demos/undocumented/projection-interpolation/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/projection-interpolation/cpp/README (+0/-2)
source/doc/demos/undocumented/projection-interpolation/python/demo.py (+0/-29)
source/doc/demos/undocumented/quadrature/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/quadrature/cpp/main.cpp (+0/-45)
source/doc/demos/undocumented/quadrature/python/demo.py (+0/-40)
source/doc/demos/undocumented/reaction-diffusion/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/reaction-diffusion/cpp/ReactionDiffusion.ufl (+0/-16)
source/doc/demos/undocumented/reaction-diffusion/cpp/main.cpp (+0/-49)
source/doc/demos/undocumented/reaction-diffusion/python/demo.py (+0/-31)
source/doc/demos/undocumented/reaction-diffusion/python/short.py (+0/-4)
source/doc/demos/undocumented/reaction/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/reaction/cpp/main.cpp (+0/-109)
source/doc/demos/undocumented/reaction/cpp/plot.py (+0/-23)
source/doc/demos/undocumented/refinement/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/refinement/cpp/main.cpp (+0/-47)
source/doc/demos/undocumented/refinement/python/demo.py (+0/-51)
source/doc/demos/undocumented/restriction/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/restriction/cpp/README (+0/-2)
source/doc/demos/undocumented/restriction/python/demo.py (+0/-75)
source/doc/demos/undocumented/simple/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/simple/cpp/MassMatrix3D.ufl (+0/-14)
source/doc/demos/undocumented/simple/cpp/StiffnessMatrix3D.ufl (+0/-14)
source/doc/demos/undocumented/simple/cpp/main.cpp (+0/-78)
source/doc/demos/undocumented/simple/python/demo.py (+0/-59)
source/doc/demos/undocumented/smoothing/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/smoothing/cpp/README (+0/-2)
source/doc/demos/undocumented/smoothing/python/demo.py (+0/-61)
source/doc/demos/undocumented/spatial-coordinates/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/spatial-coordinates/cpp/SpatialCoordinates.ufl (+0/-22)
source/doc/demos/undocumented/spatial-coordinates/cpp/main.cpp (+0/-67)
source/doc/demos/undocumented/spatial-coordinates/python/demo.py (+0/-58)
source/doc/demos/undocumented/stiff/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/stiff/cpp/main.cpp (+0/-147)
source/doc/demos/undocumented/stiff/cpp/plot.py (+0/-51)
source/doc/demos/undocumented/stiff/cpp/run-tests.sh (+0/-30)
source/doc/demos/undocumented/stokes-iterative/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/stokes-iterative/cpp/Stokes.ufl (+0/-23)
source/doc/demos/undocumented/stokes-iterative/cpp/StokesPreconditioner.ufl (+0/-22)
source/doc/demos/undocumented/stokes-iterative/cpp/main.cpp (+0/-139)
source/doc/demos/undocumented/stokes-iterative/python/demo.py (+0/-85)
source/doc/demos/undocumented/stokes-mini/python/demo.py (+0/-71)
source/doc/demos/undocumented/stokes-stabilized/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/stokes-stabilized/cpp/Stokes.ufl (+0/-26)
source/doc/demos/undocumented/stokes-stabilized/cpp/main.cpp (+0/-102)
source/doc/demos/undocumented/stokes-stabilized/cpp/plot.py (+0/-9)
source/doc/demos/undocumented/stokes-stabilized/python/demo.py (+0/-72)
source/doc/demos/undocumented/stokes-taylor-hood/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/stokes-taylor-hood/cpp/Stokes.ufl (+0/-22)
source/doc/demos/undocumented/stokes-taylor-hood/cpp/main.cpp (+0/-100)
source/doc/demos/undocumented/stokes-taylor-hood/cpp/plot.py (+0/-9)
source/doc/demos/undocumented/stokes-taylor-hood/python/demo.py (+0/-70)
source/doc/demos/undocumented/subdomains/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/subdomains/cpp/main.cpp (+0/-87)
source/doc/demos/undocumented/subdomains/python/demo.py (+0/-73)
source/doc/demos/undocumented/submesh/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/submesh/cpp/main.cpp (+0/-55)
source/doc/demos/undocumented/submesh/python/demo.py (+0/-46)
source/doc/demos/undocumented/sym-dirichlet-bc/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/sym-dirichlet-bc/cpp/Poisson.ufl (+0/-20)
source/doc/demos/undocumented/sym-dirichlet-bc/cpp/main.cpp (+0/-128)
source/doc/demos/undocumented/sym-dirichlet-bc/python/demo.py (+0/-63)
source/doc/demos/undocumented/sym-dirichlet-bc/python/dg-demo.py (+0/-108)
source/doc/demos/undocumented/sym-dirichlet-bc/python/dg-speed-up-test.py (+0/-72)
source/doc/demos/undocumented/sym-dirichlet-bc/python/speed-up-test.py (+0/-60)
source/doc/demos/undocumented/tensor-weighted-poisson/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/tensor-weighted-poisson/cpp/README (+0/-2)
source/doc/demos/undocumented/tensor-weighted-poisson/python/demo.py (+0/-106)
source/doc/demos/undocumented/tensor-weighted-poisson/python/generate_data.py (+0/-48)
source/doc/demos/undocumented/time-series/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/time-series/cpp/main.cpp (+0/-58)
source/doc/demos/undocumented/time-series/python/demo.py (+0/-38)
source/doc/demos/undocumented/trilinos/python/demo.py (+0/-90)
source/doc/demos/undocumented/trilinos/python/demo2.py (+0/-61)
source/doc/demos/undocumented/waveguide/cpp/CMakeLists.txt (+0/-34)
source/doc/demos/undocumented/waveguide/cpp/Forms.py (+0/-31)
source/doc/demos/undocumented/waveguide/cpp/Forms.ufl (+0/-16)
source/doc/demos/undocumented/waveguide/cpp/main.cpp (+0/-94)
source/doc/demos/undocumented/waveguide/python/demo.py (+0/-89)
source/doc/programmers-reference/appendices/ffc/index.rst (+0/-13)
source/doc/programmers-reference/appendices/ffc/introduction.rst (+0/-16)
source/doc/programmers-reference/appendices/index.rst (+0/-15)
source/doc/programmers-reference/python/adaptivity/adaptive/AdaptiveVariationalProblem.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/adaptive/index.rst (+0/-14)
source/doc/programmers-reference/python/adaptivity/adaptivedata/AdaptiveData.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/adaptivedata/index.rst (+0/-14)
source/doc/programmers-reference/python/adaptivity/dual/Dual.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/dual/index.rst (+0/-14)
source/doc/programmers-reference/python/adaptivity/errorestimator/ErrorEstimatorBase.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/errorestimator/GoalEstimatorBase.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/errorestimator/index.rst (+0/-15)
source/doc/programmers-reference/python/adaptivity/errorestimators/CellFacetSplitEstimator.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/errorestimators/DualWeightedResidualEstimator.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/errorestimators/ErrorRepresentationEstimator.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/errorestimators/index.rst (+0/-16)
source/doc/programmers-reference/python/adaptivity/formmanipulation/change_regularity.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/formmanipulation/construct_dual_form.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/formmanipulation/extract_mesh.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/formmanipulation/glue.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/formmanipulation/higher_order_problem.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/formmanipulation/increase_argument_order.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/formmanipulation/increase_bc_order.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/formmanipulation/increase_order.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/formmanipulation/index.rst (+0/-23)
source/doc/programmers-reference/python/adaptivity/formmanipulation/replace_arguments.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/formmanipulation/tear.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/index.rst (+0/-25)
source/doc/programmers-reference/python/adaptivity/marking/dorfler_marking.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/marking/equidistributed_marking.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/marking/fixed_fraction.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/marking/index.rst (+0/-18)
source/doc/programmers-reference/python/adaptivity/marking/mark_cells.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/marking/maximal_marking.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/normestimators/BankWeiserEstimator.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/normestimators/EnergyNormEstimator.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/normestimators/index.rst (+0/-15)
source/doc/programmers-reference/python/adaptivity/residual/_tmp_constrain_spaces.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/residual/_tmp_modulo_P1.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/residual/bank_weiser.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/residual/compute_cell_residual.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/residual/compute_facet_residual.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/residual/compute_residual_representation.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/residual/index.rst (+0/-21)
source/doc/programmers-reference/python/adaptivity/residual/residual.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/residual/spy.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/specialfunctions/Bubble.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/specialfunctions/FacetBubble.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/specialfunctions/SpecialFacetFunction.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/specialfunctions/index.rst (+0/-16)
source/doc/programmers-reference/python/adaptivity/updates/index.rst (+0/-17)
source/doc/programmers-reference/python/adaptivity/updates/update_bcs.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/updates/update_coefficient.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/updates/update_form.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/updates/update_function_space.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/utils/convert_domains_to_mf.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/utils/convert_to_mesh_function.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/utils/domain_to_mf.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/utils/extract_data.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/utils/index.rst (+0/-23)
source/doc/programmers-reference/python/adaptivity/utils/print_iteration.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/utils/print_stage.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/utils/print_value.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/utils/print_value_green.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/utils/print_value_red.rst (+0/-10)
source/doc/programmers-reference/python/adaptivity/utils/save_data.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/configure_instant.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/expect_arg.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/expect_list_of.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/expression_to_code_fragments.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/expressions/compile_expression_code.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/expressions/compile_expressions.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/expressions/expression_to_dolfin_expression.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/expressions/flatten_and_check_expression.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/expressions/index.rst (+0/-17)
source/doc/programmers-reference/python/compilemodules/extract_shared_ptr_declaration.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/get_dolfin_include_dir.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/index.rst (+0/-28)
source/doc/programmers-reference/python/compilemodules/jit/index.rst (+0/-15)
source/doc/programmers-reference/python/compilemodules/jit/jit.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/jit/mpi_jit_decorator.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/subdomains/compile_subdomain_code.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/subdomains/compile_subdomains.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/subdomains/expression_to_subdomain.rst (+0/-10)
source/doc/programmers-reference/python/compilemodules/subdomains/index.rst (+0/-16)
source/doc/programmers-reference/python/cpp/ALE.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ALE_move.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Assembler.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Assembler_assemble.rst (+0/-10)
source/doc/programmers-reference/python/cpp/BarycenterQuadrature.rst (+0/-10)
source/doc/programmers-reference/python/cpp/BasisFunction.rst (+0/-10)
source/doc/programmers-reference/python/cpp/BlockMatrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/BlockVector.rst (+0/-10)
source/doc/programmers-reference/python/cpp/BoolParameter.rst (+0/-10)
source/doc/programmers-reference/python/cpp/BoundaryCondition.rst (+0/-10)
source/doc/programmers-reference/python/cpp/BoundaryMesh.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Box.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Cell.rst (+0/-10)
source/doc/programmers-reference/python/cpp/CellSize.rst (+0/-10)
source/doc/programmers-reference/python/cpp/CellType.rst (+0/-10)
source/doc/programmers-reference/python/cpp/CellType_create.rst (+0/-10)
source/doc/programmers-reference/python/cpp/CellType_string2type.rst (+0/-10)
source/doc/programmers-reference/python/cpp/CellType_type2string.rst (+0/-10)
source/doc/programmers-reference/python/cpp/CholmodCholeskySolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/CholmodCholeskySolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ComplexODE.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ConstDoubleArray.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Constant.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Data.rst (+0/-10)
source/doc/programmers-reference/python/cpp/DefaultFactory.rst (+0/-10)
source/doc/programmers-reference/python/cpp/DirichletBC.rst (+0/-10)
source/doc/programmers-reference/python/cpp/DirichletBC_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/DofMap.rst (+0/-10)
source/doc/programmers-reference/python/cpp/DofMap_extract_sub_dofmap.rst (+0/-10)
source/doc/programmers-reference/python/cpp/DomainBoundary.rst (+0/-10)
source/doc/programmers-reference/python/cpp/DoubleArray.rst (+0/-10)
source/doc/programmers-reference/python/cpp/DummyComplexODE.rst (+0/-10)
source/doc/programmers-reference/python/cpp/DynamicMeshEditor.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Edge.rst (+0/-10)
source/doc/programmers-reference/python/cpp/EqualityBC.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Event.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Expression.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Face.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Facet.rst (+0/-10)
source/doc/programmers-reference/python/cpp/FacetArea.rst (+0/-10)
source/doc/programmers-reference/python/cpp/FacetCell.rst (+0/-10)
source/doc/programmers-reference/python/cpp/File.rst (+0/-10)
source/doc/programmers-reference/python/cpp/File_exists.rst (+0/-10)
source/doc/programmers-reference/python/cpp/FiniteElement.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Form.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Function.rst (+0/-10)
source/doc/programmers-reference/python/cpp/FunctionPlotData.rst (+0/-10)
source/doc/programmers-reference/python/cpp/FunctionSpace.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GaussQuadrature.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GaussianQuadrature.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GenericDofMap.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GenericFunction.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GenericLUSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GenericLinearSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GenericMatrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GenericSparsityPattern.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GenericTensor.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GenericVector.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GlobalParameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/GlobalParameters_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ITLKrylovSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ITLKrylovSolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/IntArray.rst (+0/-10)
source/doc/programmers-reference/python/cpp/IntParameter.rst (+0/-10)
source/doc/programmers-reference/python/cpp/IntersectionOperator.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Interval.rst (+0/-10)
source/doc/programmers-reference/python/cpp/KrylovSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/KrylovSolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/LUSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/LUSolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Lagrange.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Legendre.rst (+0/-10)
source/doc/programmers-reference/python/cpp/LinearAlgebraFactory.rst (+0/-10)
source/doc/programmers-reference/python/cpp/LinearSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/LinearSolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/LobattoQuadrature.rst (+0/-10)
source/doc/programmers-reference/python/cpp/LocalMeshData.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPICommunicator.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_barrier.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_distribute.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_gather.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_global_maximum.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_global_offset.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_index_owner.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_is_broadcaster.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_is_receiver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_local_range.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_num_processes.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_process_number.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_scatter.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_send_recv.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MPI_sum.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MTL4Factory.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MTL4Matrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MTL4Vector.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Matrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Mesh.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshConnectivity.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshCoordinates.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshData.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshEditor.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshEntity.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshFunction.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshFunctionBool.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshFunctionDouble.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshFunctionInt.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshFunctionUInt.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshGeometry.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshPartitioning.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshPartitioning_number_entities.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshPartitioning_partition.rst (+0/-10)
source/doc/programmers-reference/python/cpp/MeshTopology.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Method.rst (+0/-10)
source/doc/programmers-reference/python/cpp/NewtonSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/NewtonSolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/NonlinearProblem.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ODE.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ODECollection.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ODESolution.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ODESolutionData.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ODESolutionIterator.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ODE_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScBaseMatrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScFactory.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScFactory_instance.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScKrylovMatrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScKrylovSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScKrylovSolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScLUSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScLUSolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScMatrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScMatrixDeleter.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScObject.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScPreconditioner.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScPreconditioner_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScUserPreconditioner.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PETScVector.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ParameterValue.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PeriodicBC.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Point.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PointPrimitive.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PrimitiveIntersector.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PrimitiveIntersector_do_intersect.rst (+0/-10)
source/doc/programmers-reference/python/cpp/PrimitiveIntersector_do_intersect_exact.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Progress.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Quadrature.rst (+0/-10)
source/doc/programmers-reference/python/cpp/RadauQuadrature.rst (+0/-10)
source/doc/programmers-reference/python/cpp/RealParameter.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Rectangle.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SLEPcEigenSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SLEPcEigenSolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/STLFactory.rst (+0/-10)
source/doc/programmers-reference/python/cpp/STLFactory_instance.rst (+0/-10)
source/doc/programmers-reference/python/cpp/STLMatrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Sample.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Scalar.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SingularSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SingularSolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SparsityPattern.rst (+0/-10)
source/doc/programmers-reference/python/cpp/StabilityAnalysis.rst (+0/-10)
source/doc/programmers-reference/python/cpp/StringParameter.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SubDomain.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SubMatrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SubMesh.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SubSpace.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SubSystemsManager.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SubSystemsManager_finalize.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SubSystemsManager_init_mpi.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SubSystemsManager_init_petsc.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SubVector.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SystemAssembler.rst (+0/-10)
source/doc/programmers-reference/python/cpp/SystemAssembler_assemble.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Table.rst (+0/-10)
source/doc/programmers-reference/python/cpp/TableEntry.rst (+0/-10)
source/doc/programmers-reference/python/cpp/TimeSeries.rst (+0/-10)
source/doc/programmers-reference/python/cpp/TimeSeries_filename_data.rst (+0/-10)
source/doc/programmers-reference/python/cpp/TimeSeries_filename_times.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Timer.rst (+0/-10)
source/doc/programmers-reference/python/cpp/UIntArray.rst (+0/-10)
source/doc/programmers-reference/python/cpp/UmfpackLUSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/UmfpackLUSolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/UnitCircle.rst (+0/-10)
source/doc/programmers-reference/python/cpp/UnitCube.rst (+0/-10)
source/doc/programmers-reference/python/cpp/UnitInterval.rst (+0/-10)
source/doc/programmers-reference/python/cpp/UnitSphere.rst (+0/-10)
source/doc/programmers-reference/python/cpp/UnitSquare.rst (+0/-10)
source/doc/programmers-reference/python/cpp/UnitTetrahedron.rst (+0/-10)
source/doc/programmers-reference/python/cpp/UnitTriangle.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Variable.rst (+0/-10)
source/doc/programmers-reference/python/cpp/VariationalProblem.rst (+0/-10)
source/doc/programmers-reference/python/cpp/VariationalProblem_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Vector.rst (+0/-10)
source/doc/programmers-reference/python/cpp/Vertex.rst (+0/-10)
source/doc/programmers-reference/python/cpp/__new_Parameter_init__.rst (+0/-10)
source/doc/programmers-reference/python/cpp/_info.rst (+0/-10)
source/doc/programmers-reference/python/cpp/_refine.rst (+0/-10)
source/doc/programmers-reference/python/cpp/_swig_getattr.rst (+0/-10)
source/doc/programmers-reference/python/cpp/_swig_repr.rst (+0/-10)
source/doc/programmers-reference/python/cpp/_swig_setattr.rst (+0/-10)
source/doc/programmers-reference/python/cpp/_swig_setattr_nondynamic.rst (+0/-10)
source/doc/programmers-reference/python/cpp/_swig_setattr_nondynamic_method.rst (+0/-10)
source/doc/programmers-reference/python/cpp/assemble.rst (+0/-10)
source/doc/programmers-reference/python/cpp/assemble_system.rst (+0/-10)
source/doc/programmers-reference/python/cpp/begin.rst (+0/-10)
source/doc/programmers-reference/python/cpp/cGqMethod.rst (+0/-10)
source/doc/programmers-reference/python/cpp/cells.rst (+0/-10)
source/doc/programmers-reference/python/cpp/check_equal.rst (+0/-10)
source/doc/programmers-reference/python/cpp/dGqMethod.rst (+0/-10)
source/doc/programmers-reference/python/cpp/debug.rst (+0/-10)
source/doc/programmers-reference/python/cpp/dolfin_init.rst (+0/-10)
source/doc/programmers-reference/python/cpp/down_cast.rst (+0/-10)
source/doc/programmers-reference/python/cpp/edges.rst (+0/-10)
source/doc/programmers-reference/python/cpp/end.rst (+0/-10)
source/doc/programmers-reference/python/cpp/entities.rst (+0/-10)
source/doc/programmers-reference/python/cpp/error.rst (+0/-10)
source/doc/programmers-reference/python/cpp/faces.rst (+0/-10)
source/doc/programmers-reference/python/cpp/facets.rst (+0/-10)
source/doc/programmers-reference/python/cpp/get_log_level.rst (+0/-10)
source/doc/programmers-reference/python/cpp/get_tensor_type.rst (+0/-10)
source/doc/programmers-reference/python/cpp/has_type.rst (+0/-10)
source/doc/programmers-reference/python/cpp/index.rst (+0/-322)
source/doc/programmers-reference/python/cpp/info.rst (+0/-10)
source/doc/programmers-reference/python/cpp/info_stream.rst (+0/-10)
source/doc/programmers-reference/python/cpp/info_underline.rst (+0/-10)
source/doc/programmers-reference/python/cpp/ipow.rst (+0/-10)
source/doc/programmers-reference/python/cpp/logging.rst (+0/-10)
source/doc/programmers-reference/python/cpp/normalize.rst (+0/-10)
source/doc/programmers-reference/python/cpp/not_working_in_parallel.rst (+0/-10)
source/doc/programmers-reference/python/cpp/rand.rst (+0/-10)
source/doc/programmers-reference/python/cpp/real_exp.rst (+0/-10)
source/doc/programmers-reference/python/cpp/real_log.rst (+0/-10)
source/doc/programmers-reference/python/cpp/real_mat_exp.rst (+0/-10)
source/doc/programmers-reference/python/cpp/real_pi.rst (+0/-10)
source/doc/programmers-reference/python/cpp/real_sqrt.rst (+0/-10)
source/doc/programmers-reference/python/cpp/residual.rst (+0/-10)
source/doc/programmers-reference/python/cpp/seed.rst (+0/-10)
source/doc/programmers-reference/python/cpp/set_log_level.rst (+0/-10)
source/doc/programmers-reference/python/cpp/solve.rst (+0/-10)
source/doc/programmers-reference/python/cpp/sqr.rst (+0/-10)
source/doc/programmers-reference/python/cpp/summary.rst (+0/-10)
source/doc/programmers-reference/python/cpp/tic.rst (+0/-10)
source/doc/programmers-reference/python/cpp/time.rst (+0/-10)
source/doc/programmers-reference/python/cpp/timing.rst (+0/-10)
source/doc/programmers-reference/python/cpp/toc.rst (+0/-10)
source/doc/programmers-reference/python/cpp/uBLASDenseFactory.rst (+0/-10)
source/doc/programmers-reference/python/cpp/uBLASDenseMatrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/uBLASILUPreconditioner.rst (+0/-10)
source/doc/programmers-reference/python/cpp/uBLASKrylovMatrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/uBLASKrylovSolver.rst (+0/-10)
source/doc/programmers-reference/python/cpp/uBLASKrylovSolver_default_parameters.rst (+0/-10)
source/doc/programmers-reference/python/cpp/uBLASPreconditioner.rst (+0/-10)
source/doc/programmers-reference/python/cpp/uBLASSparseFactory.rst (+0/-10)
source/doc/programmers-reference/python/cpp/uBLASSparseMatrix.rst (+0/-10)
source/doc/programmers-reference/python/cpp/uBLASVector.rst (+0/-10)
source/doc/programmers-reference/python/cpp/vertices.rst (+0/-10)
source/doc/programmers-reference/python/cpp/warning.rst (+0/-10)
source/doc/programmers-reference/python/fem/assemble/_create_tensor.rst (+0/-10)
source/doc/programmers-reference/python/fem/assemble/_extract_domains.rst (+0/-10)
source/doc/programmers-reference/python/fem/assemble/assemble.rst (+0/-10)
source/doc/programmers-reference/python/fem/assemble/assemble_system.rst (+0/-10)
source/doc/programmers-reference/python/fem/assemble/index.rst (+0/-17)
source/doc/programmers-reference/python/fem/bcs/AutoSubDomain.rst (+0/-10)
source/doc/programmers-reference/python/fem/bcs/DirichletBC.rst (+0/-10)
source/doc/programmers-reference/python/fem/bcs/homogenize.rst (+0/-10)
source/doc/programmers-reference/python/fem/bcs/index.rst (+0/-22)
source/doc/programmers-reference/python/fem/errornorm/errornorm.rst (+0/-10)
source/doc/programmers-reference/python/fem/errornorm/index.rst (+0/-14)
source/doc/programmers-reference/python/fem/form/Form.rst (+0/-10)
source/doc/programmers-reference/python/fem/form/_extract_coefficients.rst (+0/-10)
source/doc/programmers-reference/python/fem/form/_extract_function_spaces.rst (+0/-10)
source/doc/programmers-reference/python/fem/form/index.rst (+0/-22)
source/doc/programmers-reference/python/fem/index.rst (+0/-21)
source/doc/programmers-reference/python/fem/interpolate/index.rst (+0/-14)
source/doc/programmers-reference/python/fem/interpolate/interpolate.rst (+0/-10)
source/doc/programmers-reference/python/fem/norm/index.rst (+0/-14)
source/doc/programmers-reference/python/fem/norm/norm.rst (+0/-10)
source/doc/programmers-reference/python/fem/project/_extract_function_space.rst (+0/-10)
source/doc/programmers-reference/python/fem/project/index.rst (+0/-15)
source/doc/programmers-reference/python/fem/project/project.rst (+0/-10)
source/doc/programmers-reference/python/fem/variationalproblem/VariationalProblem.rst (+0/-10)
source/doc/programmers-reference/python/fem/variationalproblem/index.rst (+0/-14)
source/doc/programmers-reference/python/function/constant/Constant.rst (+0/-10)
source/doc/programmers-reference/python/function/constant/_to_float.rst (+0/-10)
source/doc/programmers-reference/python/function/constant/index.rst (+0/-21)
source/doc/programmers-reference/python/function/expression/Expression.rst (+0/-10)
source/doc/programmers-reference/python/function/expression/ExpressionMetaClass.rst (+0/-10)
source/doc/programmers-reference/python/function/expression/Expressions.rst (+0/-10)
source/doc/programmers-reference/python/function/expression/_auto_select_element_from_shape.rst (+0/-10)
source/doc/programmers-reference/python/function/expression/_check_cppcode.rst (+0/-10)
source/doc/programmers-reference/python/function/expression/_check_defaults.rst (+0/-10)
source/doc/programmers-reference/python/function/expression/_check_name_and_base.rst (+0/-10)
source/doc/programmers-reference/python/function/expression/_is_complex_expression.rst (+0/-10)
source/doc/programmers-reference/python/function/expression/create_compiled_expression_class.rst (+0/-10)
source/doc/programmers-reference/python/function/expression/create_python_derived_expression_class.rst (+0/-10)
source/doc/programmers-reference/python/function/expression/expression__call__.rst (+0/-10)
source/doc/programmers-reference/python/function/expression/index.rst (+0/-30)
source/doc/programmers-reference/python/function/function/Argument.rst (+0/-10)
source/doc/programmers-reference/python/function/function/Function.rst (+0/-10)
source/doc/programmers-reference/python/function/function/MetaNoEvalOverloading.rst (+0/-10)
source/doc/programmers-reference/python/function/function/TestFunction.rst (+0/-10)
source/doc/programmers-reference/python/function/function/TestFunctions.rst (+0/-10)
source/doc/programmers-reference/python/function/function/TrialFunction.rst (+0/-10)
source/doc/programmers-reference/python/function/function/TrialFunctions.rst (+0/-10)
source/doc/programmers-reference/python/function/function/index.rst (+0/-26)
source/doc/programmers-reference/python/function/functionspace/EnrichedFunctionSpace.rst (+0/-10)
source/doc/programmers-reference/python/function/functionspace/FunctionSpace.rst (+0/-10)
source/doc/programmers-reference/python/function/functionspace/FunctionSpaceBase.rst (+0/-10)
source/doc/programmers-reference/python/function/functionspace/FunctionSpaceFromCpp.rst (+0/-10)
source/doc/programmers-reference/python/function/functionspace/MixedFunctionSpace.rst (+0/-10)
source/doc/programmers-reference/python/function/functionspace/TensorFunctionSpace.rst (+0/-10)
source/doc/programmers-reference/python/function/functionspace/UFCFunctionSpace.rst (+0/-10)
source/doc/programmers-reference/python/function/functionspace/VectorFunctionSpace.rst (+0/-10)
source/doc/programmers-reference/python/function/functionspace/create_ufc_function_spaces.rst (+0/-10)
source/doc/programmers-reference/python/function/functionspace/index.rst (+0/-28)
source/doc/programmers-reference/python/function/index.rst (+0/-18)
source/doc/programmers-reference/python/function/specialfunctions/CellSize.rst (+0/-10)
source/doc/programmers-reference/python/function/specialfunctions/FacetArea.rst (+0/-10)
source/doc/programmers-reference/python/function/specialfunctions/FacetNormal.rst (+0/-10)
source/doc/programmers-reference/python/function/specialfunctions/MeshCoordinates.rst (+0/-10)
source/doc/programmers-reference/python/function/specialfunctions/index.rst (+0/-23)
source/doc/programmers-reference/python/mesh/ale/compute_vertex_map.rst (+0/-10)
source/doc/programmers-reference/python/mesh/ale/index.rst (+0/-14)
source/doc/programmers-reference/python/mesh/index.rst (+0/-15)
source/doc/programmers-reference/python/mesh/meshfunction/CellFunction.rst (+0/-10)
source/doc/programmers-reference/python/mesh/meshfunction/EdgeFunction.rst (+0/-10)
source/doc/programmers-reference/python/mesh/meshfunction/FaceFunction.rst (+0/-10)
source/doc/programmers-reference/python/mesh/meshfunction/FacetFunction.rst (+0/-10)
source/doc/programmers-reference/python/mesh/meshfunction/VertexFunction.rst (+0/-10)
source/doc/programmers-reference/python/mesh/meshfunction/index.rst (+0/-18)
source/doc/programmers-reference/python/mesh/refine/index.rst (+0/-14)
source/doc/programmers-reference/python/mesh/refine/refine.rst (+0/-10)
source/documentation/index.rst (+8/-39)
source/documentation/tutorial/index.rst (+12/-0)
source/documentation/tutorial/tu2.rst (+5877/-0)
source/download.inc (+26/-0)
source/index.inc (+4/-0)
source/index.rst (+27/-23)
source/installation/debian_details.rst (+18/-0)
source/installation/icons.rst (+15/-0)
source/installation/index.rst (+82/-23)
source/installation/installation_from_source.rst (+73/-0)
source/installation/installation_using_dorsal.rst (+51/-0)
source/installation/older_releases.rst (+75/-0)
source/installation/osx_details.rst (+57/-0)
source/installation/snapshot_releases.rst (+35/-0)
source/installation/troubleshooting.rst (+25/-0)
source/installation/ubuntu_details.rst (+42/-0)
source/installation/windows_details.rst (+47/-0)
source/mathjax.py (+68/-0)
source/newsfeed.inc (+44/-0)
utils/README (+3/-0)
utils/README_generate_modules.rst (+29/-0)
utils/generate_modules.py (+262/-0)
utils/generate_python_doc.py (+0/-150)
utils/newsfetcher/AUTHORS (+7/-0)
utils/newsfetcher/LICENCE (+84/-0)
utils/newsfetcher/README (+20/-0)
utils/newsfetcher/THANKS (+41/-0)
utils/newsfetcher/TODO (+7/-0)
utils/newsfetcher/docs/config.html (+164/-0)
utils/newsfetcher/docs/contributing.html (+67/-0)
utils/newsfetcher/docs/docs.css (+100/-0)
utils/newsfetcher/docs/docs.js (+54/-0)
utils/newsfetcher/docs/etiquette.html (+48/-0)
utils/newsfetcher/docs/filters.html (+105/-0)
utils/newsfetcher/docs/index.html (+55/-0)
utils/newsfetcher/docs/installation.html (+129/-0)
utils/newsfetcher/docs/migration.html (+42/-0)
utils/newsfetcher/docs/normalization.html (+107/-0)
utils/newsfetcher/docs/templates.html (+184/-0)
utils/newsfetcher/docs/venus.svg (+109/-0)
utils/newsfetcher/examples/filters/categories/categories.xslt (+82/-0)
utils/newsfetcher/examples/filters/guess-language/README (+37/-0)
utils/newsfetcher/examples/filters/guess-language/en.data (+15131/-0)
utils/newsfetcher/examples/filters/guess-language/fr.data (+22710/-0)
utils/newsfetcher/examples/filters/guess-language/guess-language.py (+58/-0)
utils/newsfetcher/examples/filters/guess-language/learn-language.py (+25/-0)
utils/newsfetcher/examples/filters/guess-language/trigram.py (+188/-0)
utils/newsfetcher/examples/filters/xpath-sifter/xpath-sifter.ini (+55/-0)
utils/newsfetcher/examples/foaf-based.ini (+44/-0)
utils/newsfetcher/examples/opml-top100.ini (+57/-0)
utils/newsfetcher/examples/planet-schmanet.ini (+78/-0)
utils/newsfetcher/expunge.py (+17/-0)
utils/newsfetcher/filters/addsearch.genshi (+30/-0)
utils/newsfetcher/filters/addsearch.xslt (+70/-0)
utils/newsfetcher/filters/coral_cdn_filter.py (+18/-0)
utils/newsfetcher/filters/delDupName/byline_author.xslt (+29/-0)
utils/newsfetcher/filters/delDupName/p_by_name.xslt (+17/-0)
utils/newsfetcher/filters/delDupName/p_from.xslt (+15/-0)
utils/newsfetcher/filters/detitle.xslt (+25/-0)
utils/newsfetcher/filters/excerpt.py (+109/-0)
utils/newsfetcher/filters/h1title.xslt (+30/-0)
utils/newsfetcher/filters/html2xhtml.plugin (+6/-0)
utils/newsfetcher/filters/mememe.plugin (+496/-0)
utils/newsfetcher/filters/minhead.py (+36/-0)
utils/newsfetcher/filters/notweets.py (+6/-0)
utils/newsfetcher/filters/regexp_sifter.py (+44/-0)
utils/newsfetcher/filters/stripAd/feedburner.sed (+1/-0)
utils/newsfetcher/filters/stripAd/google_ad_map.sed (+1/-0)
utils/newsfetcher/filters/stripAd/yahoo.sed (+1/-0)
utils/newsfetcher/filters/xhtml2html.plugin (+31/-0)
utils/newsfetcher/filters/xpath_sifter.py (+23/-0)
utils/newsfetcher/planet.py (+72/-0)
utils/newsfetcher/planet/__init__.py (+40/-0)
utils/newsfetcher/planet/config.py (+400/-0)
utils/newsfetcher/planet/csv_config.py (+29/-0)
utils/newsfetcher/planet/expunge.py (+67/-0)
utils/newsfetcher/planet/foaf.py (+197/-0)
utils/newsfetcher/planet/idindex.py (+99/-0)
utils/newsfetcher/planet/opml.py (+154/-0)
utils/newsfetcher/planet/reconstitute.py (+339/-0)
utils/newsfetcher/planet/scrub.py (+140/-0)
utils/newsfetcher/planet/shell/__init__.py (+67/-0)
utils/newsfetcher/planet/shell/_genshi.py (+143/-0)
utils/newsfetcher/planet/shell/dj.py (+50/-0)
utils/newsfetcher/planet/shell/plugin.py (+64/-0)
utils/newsfetcher/planet/shell/py.py (+22/-0)
utils/newsfetcher/planet/shell/sed.py (+19/-0)
utils/newsfetcher/planet/shell/tmpl.py (+273/-0)
utils/newsfetcher/planet/shell/xslt.py (+78/-0)
utils/newsfetcher/planet/spider.py (+486/-0)
utils/newsfetcher/planet/splice.py (+167/-0)
utils/newsfetcher/planet/vendor/compat_logging/__init__.py (+1196/-0)
utils/newsfetcher/planet/vendor/compat_logging/config.py (+299/-0)
utils/newsfetcher/planet/vendor/compat_logging/handlers.py (+728/-0)
utils/newsfetcher/planet/vendor/feedparser.py (+3612/-0)
utils/newsfetcher/planet/vendor/html5lib/__init__.py (+16/-0)
utils/newsfetcher/planet/vendor/html5lib/constants.py (+1132/-0)
utils/newsfetcher/planet/vendor/html5lib/filters/_base.py (+10/-0)
utils/newsfetcher/planet/vendor/html5lib/filters/formfiller.py (+127/-0)
utils/newsfetcher/planet/vendor/html5lib/filters/inject_meta_charset.py (+63/-0)
utils/newsfetcher/planet/vendor/html5lib/filters/lint.py (+88/-0)
utils/newsfetcher/planet/vendor/html5lib/filters/optionaltags.py (+202/-0)
utils/newsfetcher/planet/vendor/html5lib/filters/sanitizer.py (+8/-0)
utils/newsfetcher/planet/vendor/html5lib/filters/whitespace.py (+41/-0)
utils/newsfetcher/planet/vendor/html5lib/html5parser.py (+2624/-0)
utils/newsfetcher/planet/vendor/html5lib/ihatexml.py (+170/-0)
utils/newsfetcher/planet/vendor/html5lib/inputstream.py (+778/-0)
utils/newsfetcher/planet/vendor/html5lib/sanitizer.py (+228/-0)
utils/newsfetcher/planet/vendor/html5lib/serializer/__init__.py (+17/-0)
utils/newsfetcher/planet/vendor/html5lib/serializer/htmlserializer.py (+218/-0)
utils/newsfetcher/planet/vendor/html5lib/serializer/xhtmlserializer.py (+9/-0)
utils/newsfetcher/planet/vendor/html5lib/tokenizer.py (+1171/-0)
utils/newsfetcher/planet/vendor/html5lib/treebuilders/__init__.py (+79/-0)
utils/newsfetcher/planet/vendor/html5lib/treebuilders/_base.py (+347/-0)
utils/newsfetcher/planet/vendor/html5lib/treebuilders/dom.py (+292/-0)
utils/newsfetcher/planet/vendor/html5lib/treebuilders/etree.py (+330/-0)
utils/newsfetcher/planet/vendor/html5lib/treebuilders/etree_lxml.py (+331/-0)
utils/newsfetcher/planet/vendor/html5lib/treebuilders/simpletree.py (+232/-0)
utils/newsfetcher/planet/vendor/html5lib/treebuilders/soup.py (+221/-0)
utils/newsfetcher/planet/vendor/html5lib/treewalkers/__init__.py (+52/-0)
utils/newsfetcher/planet/vendor/html5lib/treewalkers/_base.py (+162/-0)
utils/newsfetcher/planet/vendor/html5lib/treewalkers/dom.py (+38/-0)
utils/newsfetcher/planet/vendor/html5lib/treewalkers/etree.py (+130/-0)
utils/newsfetcher/planet/vendor/html5lib/treewalkers/genshistream.py (+70/-0)
utils/newsfetcher/planet/vendor/html5lib/treewalkers/lxmletree.py (+175/-0)
utils/newsfetcher/planet/vendor/html5lib/treewalkers/pulldom.py (+56/-0)
utils/newsfetcher/planet/vendor/html5lib/treewalkers/simpletree.py (+72/-0)
utils/newsfetcher/planet/vendor/html5lib/treewalkers/soup.py (+59/-0)
utils/newsfetcher/planet/vendor/html5lib/utils.py (+156/-0)
utils/newsfetcher/planet/vendor/htmltmpl.py (+1421/-0)
utils/newsfetcher/planet/vendor/httplib2/__init__.py (+1174/-0)
utils/newsfetcher/planet/vendor/httplib2/iri2uri.py (+110/-0)
utils/newsfetcher/planet/vendor/portalocker.py (+93/-0)
utils/newsfetcher/planet/vendor/timeoutsocket.py (+424/-0)
utils/newsfetcher/runtests.py (+48/-0)
utils/newsfetcher/sources.ini (+53/-0)
utils/newsfetcher/spider.py (+22/-0)
utils/newsfetcher/splice.py (+18/-0)
utils/newsfetcher/tests/capture.py (+57/-0)
utils/newsfetcher/tests/data/apply/config-asf.ini (+17/-0)
utils/newsfetcher/tests/data/apply/config-fancy.ini (+21/-0)
utils/newsfetcher/tests/data/apply/config-filter.ini (+21/-0)
utils/newsfetcher/tests/data/apply/config-genshi.ini (+21/-0)
utils/newsfetcher/tests/data/apply/config-html.ini (+25/-0)
utils/newsfetcher/tests/data/apply/config-mememe.ini (+29/-0)
utils/newsfetcher/tests/data/apply/feed.xml (+2/-0)
utils/newsfetcher/tests/data/apply/rebase.py (+24/-0)
utils/newsfetcher/tests/data/config/another.foaf (+38/-0)
utils/newsfetcher/tests/data/config/basic.csv (+3/-0)
utils/newsfetcher/tests/data/config/basic.ini (+17/-0)
utils/newsfetcher/tests/data/config/eliast.foaf (+55/-0)
utils/newsfetcher/tests/data/config/foaf-deep.ini (+11/-0)
utils/newsfetcher/tests/data/config/foaf-multiple.ini (+18/-0)
utils/newsfetcher/tests/data/config/foaf.ini (+9/-0)
utils/newsfetcher/tests/data/config/ldf-card.foaf (+33/-0)
utils/newsfetcher/tests/data/config/opml.xml (+15/-0)
utils/newsfetcher/tests/data/config/rlist-config.ini (+7/-0)
utils/newsfetcher/tests/data/config/rlist-csv.ini (+7/-0)
utils/newsfetcher/tests/data/config/rlist.ini (+6/-0)
utils/newsfetcher/tests/data/config/rubys-card.foaf (+33/-0)
utils/newsfetcher/tests/data/config/subconfig.ini (+6/-0)
utils/newsfetcher/tests/data/config/themed.ini (+14/-0)
utils/newsfetcher/tests/data/expunge/config.ini (+20/-0)
utils/newsfetcher/tests/data/expunge/test1.entry (+8/-0)
utils/newsfetcher/tests/data/expunge/test2.entry (+11/-0)
utils/newsfetcher/tests/data/expunge/test3a.entry (+12/-0)
utils/newsfetcher/tests/data/expunge/test3b.entry (+12/-0)
utils/newsfetcher/tests/data/expunge/test3c.entry (+12/-0)
utils/newsfetcher/tests/data/expunge/test4a.entry (+12/-0)
utils/newsfetcher/tests/data/expunge/test4b.entry (+12/-0)
utils/newsfetcher/tests/data/expunge/test4c.entry (+12/-0)
utils/newsfetcher/tests/data/expunge/test5.entry (+12/-0)
utils/newsfetcher/tests/data/expunge/testfeed1.atom (+5/-0)
utils/newsfetcher/tests/data/expunge/testfeed2.atom (+5/-0)
utils/newsfetcher/tests/data/expunge/testfeed3.atom (+5/-0)
utils/newsfetcher/tests/data/expunge/testfeed4.atom (+5/-0)
utils/newsfetcher/tests/data/filter/category-one.xml (+3/-0)
utils/newsfetcher/tests/data/filter/category-two.xml (+3/-0)
utils/newsfetcher/tests/data/filter/coral_cdn.xml (+10/-0)
utils/newsfetcher/tests/data/filter/django/config.html.dj (+1/-0)
utils/newsfetcher/tests/data/filter/django/test.ini (+2/-0)
utils/newsfetcher/tests/data/filter/django/test.xml (+20/-0)
utils/newsfetcher/tests/data/filter/django/title.html.dj (+1/-0)
utils/newsfetcher/tests/data/filter/excerpt-images.ini (+5/-0)
utils/newsfetcher/tests/data/filter/excerpt-images.xml (+10/-0)
utils/newsfetcher/tests/data/filter/excerpt-images2.ini (+2/-0)
utils/newsfetcher/tests/data/filter/excerpt-lorem-ipsum.ini (+7/-0)
utils/newsfetcher/tests/data/filter/excerpt-lorem-ipsum.xml (+8/-0)
utils/newsfetcher/tests/data/filter/index.html (+18/-0)
utils/newsfetcher/tests/data/filter/minhead.ini (+3/-0)
utils/newsfetcher/tests/data/filter/minhead.xml (+3/-0)
utils/newsfetcher/tests/data/filter/regexp-sifter.ini (+2/-0)
utils/newsfetcher/tests/data/filter/regexp-sifter2.ini (+2/-0)
utils/newsfetcher/tests/data/filter/stripAd-yahoo.ini (+2/-0)
utils/newsfetcher/tests/data/filter/stripAd-yahoo.xml (+4/-0)
utils/newsfetcher/tests/data/filter/tmpl/author_email.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/author_name.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/author_uri.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/content_html.xml (+10/-0)
utils/newsfetcher/tests/data/filter/tmpl/content_lang.xml (+10/-0)
utils/newsfetcher/tests/data/filter/tmpl/content_text.xml (+10/-0)
utils/newsfetcher/tests/data/filter/tmpl/content_xhtml.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/content_xhtml2.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/enclosure_href.xml (+11/-0)
utils/newsfetcher/tests/data/filter/tmpl/enclosure_length.xml (+11/-0)
utils/newsfetcher/tests/data/filter/tmpl/enclosure_type.xml (+11/-0)
utils/newsfetcher/tests/data/filter/tmpl/feed_feed.ini (+7/-0)
utils/newsfetcher/tests/data/filter/tmpl/feed_generator.ini (+7/-0)
utils/newsfetcher/tests/data/filter/tmpl/feed_link.ini (+7/-0)
utils/newsfetcher/tests/data/filter/tmpl/feed_name.ini (+7/-0)
utils/newsfetcher/tests/data/filter/tmpl/feed_owner_email.ini (+7/-0)
utils/newsfetcher/tests/data/filter/tmpl/feed_owner_name.ini (+7/-0)
utils/newsfetcher/tests/data/filter/tmpl/id.xml (+11/-0)
utils/newsfetcher/tests/data/filter/tmpl/id_only_content.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/id_only_description.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/id_only_link.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/id_only_title.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/link_href.xml (+11/-0)
utils/newsfetcher/tests/data/filter/tmpl/link_rel.xml (+11/-0)
utils/newsfetcher/tests/data/filter/tmpl/link_type.xml (+11/-0)
utils/newsfetcher/tests/data/filter/tmpl/new_channel.xml (+34/-0)
utils/newsfetcher/tests/data/filter/tmpl/new_channel_date.xml (+35/-0)
utils/newsfetcher/tests/data/filter/tmpl/new_date.xml (+23/-0)
utils/newsfetcher/tests/data/filter/tmpl/planet_name.xml (+16/-0)
utils/newsfetcher/tests/data/filter/tmpl/planet_title_name.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/published.xml (+11/-0)
utils/newsfetcher/tests/data/filter/tmpl/rights.xml (+11/-0)
utils/newsfetcher/tests/data/filter/tmpl/source_author.xml (+20/-0)
utils/newsfetcher/tests/data/filter/tmpl/source_icon.xml (+16/-0)
utils/newsfetcher/tests/data/filter/tmpl/source_id.xml (+16/-0)
utils/newsfetcher/tests/data/filter/tmpl/source_link.xml (+16/-0)
utils/newsfetcher/tests/data/filter/tmpl/source_logo.xml (+16/-0)
utils/newsfetcher/tests/data/filter/tmpl/source_planet_message.xml (+16/-0)
utils/newsfetcher/tests/data/filter/tmpl/source_planet_name.xml (+16/-0)
utils/newsfetcher/tests/data/filter/tmpl/source_rights.xml (+16/-0)
utils/newsfetcher/tests/data/filter/tmpl/source_subtitle.xml (+16/-0)
utils/newsfetcher/tests/data/filter/tmpl/source_title.xml (+16/-0)
utils/newsfetcher/tests/data/filter/tmpl/source_updated.xml (+16/-0)
utils/newsfetcher/tests/data/filter/tmpl/summary_html.xml (+10/-0)
utils/newsfetcher/tests/data/filter/tmpl/summary_lang.xml (+10/-0)
utils/newsfetcher/tests/data/filter/tmpl/summary_text.xml (+10/-0)
utils/newsfetcher/tests/data/filter/tmpl/summary_xhtml.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/title_html.xml (+10/-0)
utils/newsfetcher/tests/data/filter/tmpl/title_lang.xml (+10/-0)
utils/newsfetcher/tests/data/filter/tmpl/title_text.xml (+10/-0)
utils/newsfetcher/tests/data/filter/tmpl/title_xhtml.xml (+13/-0)
utils/newsfetcher/tests/data/filter/tmpl/updated.xml (+11/-0)
utils/newsfetcher/tests/data/filter/translate.ini (+7/-0)
utils/newsfetcher/tests/data/filter/translate.xslt (+20/-0)
utils/newsfetcher/tests/data/filter/xpath-sifter.ini (+6/-0)
utils/newsfetcher/tests/data/filter/xpath-sifter2.ini (+2/-0)
utils/newsfetcher/tests/data/reconstitute.xslt (+40/-0)
utils/newsfetcher/tests/data/reconstitute/author_email.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/author_name.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/author_noname.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/author_uri.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/category_blank_term.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/category_label.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/category_scheme.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/category_term.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/cc_license.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/content_html.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/content_illegal_char.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/content_lang.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/content_tag_soup.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/content_text.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/content_xhtml.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/contributor_email.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/contributor_name.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/contributor_uri.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/creativeCommons_license.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/dc_lang.xml (+14/-0)
utils/newsfetcher/tests/data/reconstitute/empty_title.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/enclosure.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/feedburner_origlink.xml (+12/-0)
utils/newsfetcher/tests/data/reconstitute/geo_latlong.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/id.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/id_only_content.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/id_only_description.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/id_only_link.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/id_only_title.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/link_href.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/link_length.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/link_rel.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/link_type.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/missing_item_pubDate.xml (+14/-0)
utils/newsfetcher/tests/data/reconstitute/missing_title.xml (+9/-0)
utils/newsfetcher/tests/data/reconstitute/onlyguid.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/planet_name.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/planet_name_source.xml (+15/-0)
utils/newsfetcher/tests/data/reconstitute/published.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/rights.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/rss_image.xml (+12/-0)
utils/newsfetcher/tests/data/reconstitute/rss_lang.xml (+14/-0)
utils/newsfetcher/tests/data/reconstitute/rss_source.xml (+15/-0)
utils/newsfetcher/tests/data/reconstitute/source_author.xml (+12/-0)
utils/newsfetcher/tests/data/reconstitute/source_bozo.xml (+8/-0)
utils/newsfetcher/tests/data/reconstitute/source_category.xml (+14/-0)
utils/newsfetcher/tests/data/reconstitute/source_contributor.xml (+12/-0)
utils/newsfetcher/tests/data/reconstitute/source_format.xml (+8/-0)
utils/newsfetcher/tests/data/reconstitute/source_icon.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/source_id.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/source_link.xml (+11/-0)
utils/newsfetcher/tests/data/reconstitute/source_logo.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/source_planet_id.xml (+14/-0)
utils/newsfetcher/tests/data/reconstitute/source_rights.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/source_subtitle.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/source_title.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/source_updated.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/stack_overflow.xml (+36/-0)
utils/newsfetcher/tests/data/reconstitute/summary_html.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/summary_lang.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/summary_text.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/summary_xhtml.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/title_html.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/title_lang.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/title_text.xml (+10/-0)
utils/newsfetcher/tests/data/reconstitute/title_xhtml.xml (+13/-0)
utils/newsfetcher/tests/data/reconstitute/updated.xml (+11/-0)
utils/newsfetcher/tests/data/spider/config.ini (+15/-0)
utils/newsfetcher/tests/data/spider/testfeed1a.atom (+49/-0)
utils/newsfetcher/tests/data/spider/testfeed1b.atom (+50/-0)
utils/newsfetcher/tests/data/spider/testfeed2.atom (+49/-0)
utils/newsfetcher/tests/data/spider/testfeed3.rss (+37/-0)
utils/newsfetcher/tests/data/spider/testfeed4.atom (+41/-0)
utils/newsfetcher/tests/data/spider/threaded.ini (+19/-0)
utils/newsfetcher/tests/data/splice/cache/example.com,3 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/example.com,4 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,1 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,2 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,3 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,4 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,1 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,2 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,3 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,4 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed3,1 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed3,2 (+2/-0)
utils/newsfetcher/tests/data/splice/cache/sources/tests,data,spider,testfeed0.atom (+2/-0)
utils/newsfetcher/tests/data/splice/cache/sources/tests,data,spider,testfeed1b.atom (+2/-0)
utils/newsfetcher/tests/data/splice/cache/sources/tests,data,spider,testfeed2.atom (+2/-0)
utils/newsfetcher/tests/data/splice/cache/sources/tests,data,spider,testfeed3.rss (+2/-0)
utils/newsfetcher/tests/data/splice/config.ini (+15/-0)
utils/newsfetcher/tests/reconstitute.py (+87/-0)
utils/newsfetcher/tests/test_apply.py (+135/-0)
utils/newsfetcher/tests/test_config.py (+68/-0)
utils/newsfetcher/tests/test_config_csv.py (+25/-0)
utils/newsfetcher/tests/test_docs.py (+20/-0)
utils/newsfetcher/tests/test_expunge.py (+84/-0)
utils/newsfetcher/tests/test_filter_django.py (+43/-0)
utils/newsfetcher/tests/test_filter_genshi.py (+22/-0)
utils/newsfetcher/tests/test_filter_tmpl.py (+67/-0)
utils/newsfetcher/tests/test_filter_xslt.py (+44/-0)
utils/newsfetcher/tests/test_filters.py (+189/-0)
utils/newsfetcher/tests/test_foaf.py (+127/-0)
utils/newsfetcher/tests/test_idindex.py (+74/-0)
utils/newsfetcher/tests/test_opml.py (+177/-0)
utils/newsfetcher/tests/test_reconstitute.py (+44/-0)
utils/newsfetcher/tests/test_rlists.py (+49/-0)
utils/newsfetcher/tests/test_scrub.py (+124/-0)
utils/newsfetcher/tests/test_spider.py (+162/-0)
utils/newsfetcher/tests/test_splice.py (+34/-0)
utils/newsfetcher/tests/test_subconfig.py (+8/-0)
utils/newsfetcher/tests/test_themes.py (+59/-0)
utils/newsfetcher/themes/asf/config.ini (+21/-0)
utils/newsfetcher/themes/asf/default.css (+533/-0)
utils/newsfetcher/themes/asf/index.html.xslt (+340/-0)
utils/newsfetcher/themes/asf/personalize.js (+297/-0)
utils/newsfetcher/themes/classic_fancy/config.ini (+20/-0)
utils/newsfetcher/themes/classic_fancy/index.html.tmpl (+126/-0)
utils/newsfetcher/themes/classic_fancy/planet.css (+150/-0)
utils/newsfetcher/themes/common/atom.xml.xslt (+80/-0)
utils/newsfetcher/themes/common/foafroll.xml.xslt (+39/-0)
utils/newsfetcher/themes/common/opml.xml.xslt (+40/-0)
utils/newsfetcher/themes/common/rss10.xml.tmpl (+37/-0)
utils/newsfetcher/themes/common/rss20.xml.tmpl (+33/-0)
utils/newsfetcher/themes/common/validate.html.xslt (+146/-0)
utils/newsfetcher/themes/django/bland.css (+39/-0)
utils/newsfetcher/themes/django/config.ini (+11/-0)
utils/newsfetcher/themes/django/index.html.dj (+49/-0)
utils/newsfetcher/themes/fenics/config.ini (+5/-0)
utils/newsfetcher/themes/fenics/feed.xml.tmpl (+33/-0)
utils/newsfetcher/themes/fenics/include.html.tmpl (+10/-0)
utils/newsfetcher/themes/genshi_fancy/config.ini (+20/-0)
utils/newsfetcher/themes/genshi_fancy/index.html.genshi (+95/-0)
utils/newsfetcher/themes/genshi_fancy/planet.css (+150/-0)
utils/newsfetcher/themes/mobile/config.ini (+24/-0)
utils/newsfetcher/themes/mobile/mobile.html.xslt (+199/-0)
utils/newsfetcher/themes/musings/config.ini (+18/-0)
utils/newsfetcher/themes/musings/default.css (+402/-0)
utils/newsfetcher/themes/musings/index.html.xslt (+293/-0)
utils/newsfetcher/themes/musings/personalize.js (+220/-0)
Text conflict in source/installation/index.rst
To merge this branch: bzr merge lp:~fenics-core/fenics-doc/1.0
Reviewer Review Type Date Requested Status
Marie Rognes Approve
Review via email: mp+62770@code.launchpad.net

Description of the change

Time to merge this branch with trunk and continue development there?

To post a comment you must log in.
Revision history for this message
Marie Rognes (meg-simula) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2010-11-30 19:14:30 +0000
3+++ .bzrignore 2011-05-28 15:37:28 +0000
4@@ -1,1 +1,5 @@
5 build
6+utils/newsfetcher/cache/*
7+utils/newsfetcher/output/*
8+*.tmplc
9+
10
11=== modified file 'Makefile'
12--- Makefile 2010-08-25 12:56:10 +0000
13+++ Makefile 2011-05-28 15:37:28 +0000
14@@ -1,9 +1,9 @@
15 # Makefile for FEniCS documentation
16
17 # You can set these variables from the command line
18-SPHINXOPTS =
19-SPHINXBUILD = sphinx-build
20-PAPER =
21+SPHINXOPTS =
22+SPHINXBUILD = sphinx-build
23+PAPER =
24
25 # Internal variables
26 PAPEROPT_a4 = -D latex_paper_size=a4
27@@ -33,10 +33,26 @@
28
29 all: clean latex pdf html
30
31+update:
32+ scripts/generate_programmers_reference_cpp
33+ scripts/generate_programmers_reference_python
34+ scripts/copy_demos_dolfin
35+
36 html:
37 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html
38 @echo
39- @echo "Build finished. The HTML pages are in build/html."
40+ @echo "Build finished. HTML generated in build/html."
41+
42+latex:
43+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex
44+ @echo
45+ @echo "Build finished. LaTeX generated in build/latex."
46+
47+pdf:
48+ make -C build/latex all-pdf
49+
50+
51+# AL: Don't know what the stuff below is used for, might be removed
52
53 dirhtml:
54 $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) build/dirhtml
55@@ -68,16 +84,6 @@
56 @echo "To view the help file:"
57 @echo "# assistant -collectionFile build/qthelp/FEniCS.qhc"
58
59-latex:
60- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex
61- @echo
62- @echo "Build finished; the LaTeX files are in build/latex."
63- @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
64- "run these through (pdf)latex."
65-
66-pdf:
67- make -C build/latex all-pdf
68-
69 changes:
70 $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes
71 @echo
72
73=== modified file 'README'
74--- README 2010-12-07 15:29:06 +0000
75+++ README 2011-05-28 15:37:28 +0000
76@@ -1,32 +1,9 @@
77-FEniCS documentation
78---------------------
79-
80-To build all documentation, simply type
81-
82- make all
83-
84-Note that you need to have the ufc module in your PYTHONPATH variable in order
85-to generate the Python programmer's reference.
86-
87-In the future when we add documentation for FFC, UFC, UFL, viper etc. you will
88-also need to have these modules in your path.
89-
90-To update the C++ programmer's reference and the demos from a specific DOLFIN
91-installation you need to set the DOLFIN_DIR variable and run the two scripts
92-utils/generate_cpp_doc.py and utils/copy_demos.sh before building the
93-documentation.
94-
95-FEniCS web page
96----------------
97-
98-1. push to lp:fenics-web
99-
100-2. navigate to fenics@fenics.org:~/fenics-web-sphinx and bzr pull
101-
102-3. export PYTHONPATH=/home/fenics-doc/local/lib/python2.6/site-packages:${PYTHONPATH}
103-
104-4. export PATH=/home/fenics-doc/local/bin:${PATH}
105-
106-5. source /home/fenics-doc/fenics/share/dolfin/dolfin.conf
107-
108-6. make html
109+# Last changed: 2011-05-05
110+
111+FEniCS documentation and webpage
112+--------------------------------
113+
114+How to generate webpage and documentation? Someone who knows how,
115+please write something here.
116+
117+
118
119=== renamed directory 'source/doc' => 'doc-temporarily-removed'
120=== added directory 'doc-temporarily-removed/dolfin'
121=== renamed directory 'source/doc/demos' => 'doc-temporarily-removed/dolfin/demos'
122=== added directory 'doc-temporarily-removed/dolfin/demos/la/eigenvalue'
123=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/common.txt'
124--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/common.txt 1970-01-01 00:00:00 +0000
125+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/common.txt 2011-05-28 15:37:28 +0000
126@@ -0,0 +1,40 @@
127+
128+This demo illustrates how to:
129+
130+* Load a mesh from a file
131+* Solve an eigenvalue problem
132+* Use a specific linear algebra backend (PETSc)
133+* Initialize a finite element function with a coefficient vector
134+
135+Problem definition
136+------------------
137+
138+Sometimes one wants to solve an eigenvalue problem such as this one:
139+find the eigenvalues :math:`\lambda \in \mathbb{R}` and the
140+corresponding eigenvectors :math:`x \in \mathbb{R}^n` such that
141+
142+.. math::
143+
144+ A x = \lambda x
145+
146+In the finite element world, the matrix :math:`A` often originates
147+from some partial differential operator. For instance, :math:`A` can
148+be the stiffness matrix corresponding to this bilinear form:
149+
150+.. math::
151+
152+ a(u, v) = \int_{\Omega} \nabla u \cdot \nabla v \ {\rm d} x.
153+
154+Here, we will let the space :math:`V` (of dimension :math:`n`) consist
155+of continuous piecewise linear polynomials defined relative to some
156+mesh (Lagrange finite elements). For this example, we will consider a
157+3-D mesh of tetrahedra generated elsewhere.
158+
159+With the above input the eigenfunction will look as follows:
160+
161+.. image:: ../eigenvalue_x.png
162+ :scale: 75
163+ :align: center
164+
165+In the following, we show how this eigenvalue problem can be solved.
166+
167
168=== added directory 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp'
169=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/CMakeLists.txt'
170--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/CMakeLists.txt 1970-01-01 00:00:00 +0000
171+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/CMakeLists.txt 2011-05-28 15:37:28 +0000
172@@ -0,0 +1,34 @@
173+# Require CMake 2.8
174+cmake_minimum_required(VERSION 2.8)
175+
176+project(demo_eigenvalue)
177+
178+# Set verbose output while testing CMake
179+#set(CMAKE_VERBOSE_MAKEFILE 1)
180+
181+# Set CMake behavior
182+cmake_policy(SET CMP0004 OLD)
183+
184+# Get DOLFIN configuration data (dolfin-config.cmake must be in DOLFIN_CMAKE_CONFIG_PATH)
185+find_package(dolfin)
186+
187+# Default build type (can be overridden by user)
188+if (NOT CMAKE_BUILD_TYPE)
189+ set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
190+ "Choose the type of build, options are: Debug MinSizeRel Release RelWithDebInfo." FORCE)
191+endif()
192+
193+# Compiler definitions
194+add_definitions(${DOLFIN_CXX_DEFINITIONS})
195+
196+# Add special DOLFIN compiler flags
197+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DOLFIN_CXX_FLAGS}")
198+
199+# Include directories
200+include_directories(${DOLFIN_INCLUDE_DIRS} ${DOLFIN_3RD_PARTY_INCLUDE_DIRS})
201+
202+# Executable
203+add_executable(demo_eigenvalue main.cpp)
204+
205+# Target libraries
206+target_link_libraries(demo_eigenvalue ${DOLFIN_LIBRARIES} ${DOLFIN_3RD_PARTY_LIBRARIES})
207
208=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/StiffnessMatrix.ufl'
209--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/StiffnessMatrix.ufl 1970-01-01 00:00:00 +0000
210+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/StiffnessMatrix.ufl 2011-05-28 15:37:28 +0000
211@@ -0,0 +1,14 @@
212+# Copyright (c) 2005-2006 Anders Logg (logg@tti-c.org)
213+# Licensed under the GNU LGPL Version 2.1
214+#
215+# First added: 2005-06-05
216+# Last changed: 2010-09-05
217+#
218+# The bilinear form for a stiffness matrix (Poisson).
219+
220+element = FiniteElement("Lagrange", "tetrahedron", 1)
221+
222+v = TestFunction(element)
223+u = TrialFunction(element)
224+
225+a = dot(grad(v), grad(u))*dx
226
227=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/box_with_dent.xml.gz'
228Binary files doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/box_with_dent.xml.gz 1970-01-01 00:00:00 +0000 and doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/box_with_dent.xml.gz 2011-05-28 15:37:28 +0000 differ
229=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/main.cpp'
230--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/main.cpp 1970-01-01 00:00:00 +0000
231+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/main.cpp 2011-05-28 15:37:28 +0000
232@@ -0,0 +1,56 @@
233+// Copyright (C) 2007-2010 Kristian B. Oelgaard and Garth N. Wells
234+// Licensed under the GNU LGPL Version 2.1.
235+//
236+// Modified by Anders Logg, 2008.
237+// Modified by Marie E. Rognes, 2010.
238+//
239+// First added: 2007-03-08
240+// Last changed: 2010-09-05
241+//
242+// This simple program illustrates the use of the SLEPc eigenvalue solver.
243+
244+#include <dolfin.h>
245+#include "StiffnessMatrix.h"
246+
247+using namespace dolfin;
248+
249+int main()
250+{
251+ #ifdef HAS_SLEPC
252+
253+ // Create mesh
254+ Mesh mesh("box_with_dent.xml.gz");
255+
256+ // Build stiffness matrix
257+ PETScMatrix A;
258+ StiffnessMatrix::FunctionSpace V(mesh);
259+ StiffnessMatrix::BilinearForm a(V, V);
260+ assemble(A, a);
261+
262+ // Create eigensolver
263+ SLEPcEigenSolver esolver(A);
264+
265+ // Compute all eigenvalues of A x = \lambda x
266+ esolver.solve();
267+
268+ // Extract largest (first, n =0) eigenpair
269+ double r, c;
270+ PETScVector rx, cx;
271+ esolver.get_eigenpair(r, c, rx, cx, 0);
272+
273+ std::cout << "Largest eigenvalue: " << r << std::endl;
274+
275+ // Initialize function with eigenvector
276+ Function u(V, rx);
277+
278+ // Plot eigenfunction
279+ plot(u);
280+
281+ #else
282+
283+ cout << "SLEPc must be installed to run this demo." << endl;
284+
285+ #endif
286+
287+ return 0;
288+}
289
290=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/eigenvalue_x.png'
291Binary files doc-temporarily-removed/dolfin/demos/la/eigenvalue/eigenvalue_x.png 1970-01-01 00:00:00 +0000 and doc-temporarily-removed/dolfin/demos/la/eigenvalue/eigenvalue_x.png 2011-05-28 15:37:28 +0000 differ
292=== added directory 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/python'
293=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/box_with_dent.xml.gz'
294Binary files doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/box_with_dent.xml.gz 1970-01-01 00:00:00 +0000 and doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/box_with_dent.xml.gz 2011-05-28 15:37:28 +0000 differ
295=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/demo_eigenvalue.py'
296--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/demo_eigenvalue.py 1970-01-01 00:00:00 +0000
297+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/demo_eigenvalue.py 2011-05-28 15:37:28 +0000
298@@ -0,0 +1,57 @@
299+"""
300+This program illustrates basic use of the SLEPc eigenvalue solver for
301+a standard eigenvalue problem.
302+"""
303+
304+__author__ = "Kristian B. Oelgaard (k.b.oelgaard@tudelft.nl)"
305+__date__ = "2007-11-28 -- 2009-10-09"
306+__copyright__ = "Copyright (C) 2007 Kristian B. Oelgaard"
307+__license__ = "GNU LGPL Version 2.1"
308+
309+# Modified by Anders Logg, 2008.
310+# Modified by Marie Rognes, 2009.
311+
312+# Begin demo
313+
314+from dolfin import *
315+
316+# Test for PETSc and SLEPc
317+if not has_la_backend("PETSc"):
318+ print "DOLFIN has not been configured with PETSc. Exiting."
319+ exit()
320+
321+if not has_slepc():
322+ print "DOLFIN has not been configured with SLEPc. Exiting."
323+ exit()
324+
325+# Define mesh, function space
326+mesh = Mesh("box_with_dent.xml.gz")
327+V = FunctionSpace(mesh, "CG", 1)
328+
329+# Define basis and bilinear form
330+u = TrialFunction(V)
331+v = TestFunction(V)
332+a = dot(grad(u), grad(v))*dx
333+
334+# Assemble stiffness form
335+A = PETScMatrix()
336+assemble(a, tensor=A)
337+
338+# Create eigensolver
339+eigensolver = SLEPcEigenSolver(A)
340+
341+# Compute all eigenvalues of A x = \lambda x
342+print "Computing eigenvalues. This can take a minute."
343+eigensolver.solve()
344+
345+# Extract largest (first) eigenpair
346+r, c, rx, cx = eigensolver.get_eigenpair(0)
347+
348+print "Largest eigenvalue: ", r
349+
350+# Initialize function with eigenvector
351+u = Function(V, rx)
352+
353+# Plot eigenfunction
354+plot(u)
355+interactive()
356
357=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/documentation.rst'
358--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/documentation.rst 1970-01-01 00:00:00 +0000
359+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/documentation.rst 2011-05-28 15:37:28 +0000
360@@ -0,0 +1,119 @@
361+.. Documentation for the basic eigenvalue demo in DOLFIN
362+
363+.. _demos_la_eigenvalue_python_documentation:
364+
365+A simple eigenvalue solver
366+==========================
367+
368+We recommend that you are familiar with demo for the Poisson equation
369+before looking at this demo.
370+
371+
372+.. include:: ../common.txt
373+
374+If you want a more complex problem, we suggest that you look at the
375+other eigenvalue demo.
376+
377+Implementation
378+--------------
379+
380+This demo is implemented in a single Python file, :download:`demo_eigenvalue.py`,
381+which contains both the variational forms and the solver.
382+
383+The eigensolver functionality in DOLFIN relies on the library SLEPc
384+which in turn relies on the linear algebra library PETSc. Therefore,
385+both PETSc and SLEPc are required for this demo. We can test whether
386+PETSc and SLEPc are available, and exit if not, as follows:
387+
388+.. code-block:: python
389+
390+ from dolfin import *
391+
392+ # Test for PETSc and SLEPc
393+ if not has_la_backend("PETSc"):
394+ print "DOLFIN has not been configured with PETSc. Exiting."
395+ exit()
396+
397+ if not has_slepc():
398+ print "DOLFIN has not been configured with SLEPc. Exiting."
399+ exit()
400+
401+First, we need to construct the matrix :math:`A`. This will be done in
402+three steps: defining the mesh and the function space associated with
403+it; constructing the variational form defining the matrix; and then
404+assembling this form. The code is shown below
405+
406+.. code-block:: python
407+
408+ # Define mesh, function space
409+ mesh = Mesh("box_with_dent.xml.gz")
410+ V = FunctionSpace(mesh, "CG", 1)
411+
412+ # Define basis and bilinear form
413+ u = TrialFunction(V)
414+ v = TestFunction(V)
415+ a = dot(grad(v), grad(u))*dx
416+
417+ # Assemble stiffness form
418+ A = PETScMatrix()
419+ assemble(a, tensor=A)
420+
421+Note that we (in this example) first define the matrix ``A`` as a
422+:py:class:`PETScMatrix` and then assemble the form into it. This is
423+an easy way to ensure that the matrix has the right type.
424+
425+In order to solve the eigenproblem, we need to define an
426+eigensolver. To solve a standard eigenvalue problem, the eigensolver
427+is initialized with a single argument, namely the matrix ``A``.
428+
429+.. code-block:: python
430+
431+ # Create eigensolver
432+ eigensolver = SLEPcEigenSolver(A)
433+
434+Now, we ready solve the eigenproblem by calling the ``solve`` method
435+of the eigensolver. Note that eigenvalue problems tend to be
436+computationally intensive and may hence take a while.
437+
438+.. code-block:: python
439+
440+ # Compute all eigenvalues of A x = \lambda x
441+ print "Computing eigenvalues. This can take a minute."
442+ eigensolver.solve()
443+
444+The result is kept by the eigensolver, but can fortunately be
445+extracted. Here, we have computed all eigenvalues, and they will be
446+sorted by largest magnitude. We can extract the real and complex part
447+(``r`` and ``c``) of the largest eigenvalue and the real and complex
448+part of the corresponding eigenvector (``ru`` and ``cu``) by asking
449+for the first eigenpair as follows:
450+
451+.. code-block:: python
452+
453+ # Extract largest (first) eigenpair
454+ r, c, rx, cx = eigensolver.get_eigenpair(0)
455+
456+Finally, we want to examine the results. The eigenvalue can easily be
457+printed. But, the real part of eigenvector is probably most easily
458+visualized by constructing the corresponding eigenfunction. This can
459+be done by creating a :py:class:`Function` in the function space
460+``V`` with the eigenvector ``rx`` as an additional argument. Then the
461+eigenfunction can be manipulated as any other :py:class:`Function`,
462+and in particular plotted:
463+
464+.. code-block:: python
465+
466+ print "Largest eigenvalue: ", r
467+
468+ # Initialize function with eigenvector
469+ u = Function(V, rx)
470+
471+ # Plot eigenfunction
472+ plot(u)
473+ interactive()
474+
475+Complete code
476+-------------
477+
478+.. literalinclude:: demo_eigenvalue.py
479+ :start-after: # Begin demo
480
481=== modified file 'doc-temporarily-removed/dolfin/demos/la/index-cpp.rst'
482--- source/doc/demos/la/index-cpp.rst 2010-10-21 11:35:37 +0000
483+++ doc-temporarily-removed/dolfin/demos/la/index-cpp.rst 2011-05-28 15:37:28 +0000
484@@ -6,7 +6,7 @@
485 Linear algebra
486 **************
487
488-Below is a list demos which demonstrates how to solve linear algebra problems.
489+Below is a list of demos which demonstrate how to solve linear algebra problems.
490
491 .. toctree::
492 :maxdepth: 2
493
494=== added directory 'doc-temporarily-removed/dolfin/demos/pde/biharmonic'
495=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/biharmonic_u.png'
496Binary files doc-temporarily-removed/dolfin/demos/pde/biharmonic/biharmonic_u.png 1970-01-01 00:00:00 +0000 and doc-temporarily-removed/dolfin/demos/pde/biharmonic/biharmonic_u.png 2011-05-28 15:37:28 +0000 differ
497=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/common.txt'
498--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/common.txt 1970-01-01 00:00:00 +0000
499+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/common.txt 2011-05-28 15:37:28 +0000
500@@ -0,0 +1,82 @@
501+
502+This demo illustrates how to:
503+
504+* Solve a linear partial differential equation
505+* Use a discontinuous Galerkin method
506+* Solve a fourth-order differential equation
507+
508+The solution for :math:`u` in this demo will look as follows:
509+
510+.. image:: ../biharmonic_u.png
511+ :scale: 75 %
512+
513+Equation and problem definition
514+-------------------------------
515+
516+The biharmonic equation is a fourth-order elliptic equation. On the domain
517+:math:`\Omega \subset \mathbb{R}^{d}`, :math:`1 \le d \le 3`, it reads
518+
519+.. math::
520+ \nabla^{4} u = f \quad {\rm in} \ \Omega,
521+
522+where :math:`\nabla^{4} \equiv \nabla^{2} \nabla^{2}` is the biharmonic
523+operator and :math:`f` is a prescribed source term. To formulate a complete
524+boundary value problem, the biharmonic equation must be complemented by
525+suitable boundary conditions.
526+
527+Multiplying the biharmonic equation by a test function and integrating
528+by parts twice leads to a problem second-order derivatives, which would
529+requires :math:`H^{2}` conforming (roughly :math:`C^{0}` continuous) basis
530+functions. To solve the biharmonic equation using Lagrange finite element
531+basis functions, the biharmonic equation can be split into two second-order
532+equations (see :ref:`demos_pde_mixed-poisson_python` for a mixed method for
533+the Poisson equation), or a variational formulation can be constructed that
534+imposes weak continuity of normal derivatives between finite element cells.
535+The demo uses a discontinuous Galerkin approach to impose continuity of the
536+normal derivative weakly.
537+
538+Consider a triangulation :math:`\mathcal{T}` of the domain :math:`\Omega`,
539+where the union of interior facets is denoted by :math:`\Gamma`.
540+Functions evaluated on opposite sides of a facet are indicated by the
541+subscripts ':math:`+`' and ':math:`-`'.
542+Using the standard continuous Lagrange finite element space
543+
544+.. math::
545+ V_ = \left\{v \in H^{1}_{0}(\Omega): \ v \in P_{k}(K) \ \forall \ K \in \mathcal{T} \right\}
546+
547+and considering the boundary conditions
548+
549+.. math::
550+ u &= 0 \quad {\rm on} \ \partial\Omega \\
551+ \nabla^{2} u &= 0 \quad {\rm on} \ \partial\Omega
552+
553+a weak formulation of the biharmonic reads: find :math:`u \in V` such that
554+
555+.. math::
556+ \sum_{K \in \mathcal{T}} \int_{K} \nabla^{2} u \nabla^{2} v \, dx \
557+ - \int_{\Gamma} \left<\nabla^{2} u \right> \llbracket\nabla v \rrbracket \, ds
558+ - \int_{\Gamma} \llbracket\nabla u \rrbracket \left<\nabla^{2} v \right> \, ds
559+ + \int_{\Gamma} \frac{\alpha}{h} \llbracket \nabla u \rrbracket \llbracket \nabla v \rrbracket \, ds
560+ = \int_{\Omega} vf \, dx \quad \forall \ v \in V
561+
562+where :math:`\left< u \right> = (1/2) (u_{+} + u_{-})`, :math:`\llbracket w
563+\rrbracket = w_{+} \cdot n_{+} + w_{-} \cdot n_{-}`, :math:`\alpha \ge 0`
564+is a penalty term and :math:`h` is a measure of the cell size. For the
565+implementation, it is useful to identify the bilinear form
566+
567+.. math::
568+ a(u, v) = \sum_{K \in \mathcal{T}} \int_{K} \nabla^{2} u \nabla^{2} v \, dx \
569+ - \int_{\Gamma} \left<\nabla^{2} u \right> \llbracket\nabla v \rrbracket \, ds
570+ - \int_{\Gamma} \llbracket\nabla u \rrbracket \left<\nabla^{2} v \right> \, ds
571+ + \int_{\Gamma} \frac{\alpha}{h} \llbracket \nabla u \rrbracket \llbracket \nabla v \rrbracket \, ds
572+
573+and the linear form
574+
575+.. math::
576+ L(v) = \int_{\Omega} vf \, dx
577+
578+The input parameters for this demos are defined as follows:
579+
580+* :math:`\Omega = [0,1] \times [0,1]` (a unit square)
581+* :math:`\alpha = 8.0` (penalty parameter)
582+* :math:`f = 4.0 \pi^4\sin(\pi x)\sin(\pi y)` (source term)
583
584=== added directory 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp'
585=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/Biharmonic.ufl'
586--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/Biharmonic.ufl 1970-01-01 00:00:00 +0000
587+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/Biharmonic.ufl 2011-05-28 15:37:28 +0000
588@@ -0,0 +1,37 @@
589+#!/usr/bin/env python
590+# Copyright (C) 2009 Kristiand B. Oelgaard, Garth N. Wells and Anders Logg
591+# Licensed under the GNU LGPL Version 2.1.
592+#
593+# First added: 2009-06-26
594+# Last changed: 2010-09-01
595+#
596+# The bilinear form a(u, v) and linear form L(v) for
597+# Biharmonic equation in a discontinuous Galerkin (DG)
598+# formulation.
599+#
600+# Compile this form with FFC: ffc -l dolfin Biharmonic.ufl
601+
602+# Elements
603+element = FiniteElement("Lagrange", triangle, 2)
604+
605+# Trial and test functions
606+u = TrialFunction(element)
607+v = TestFunction(element)
608+f = Coefficient(element)
609+
610+# Normal component, mesh size and right-hand side
611+n = element.cell().n
612+h = 2.0*triangle.circumradius
613+h_avg = (h('+') + h('-'))/2
614+
615+# Parameters
616+alpha = Constant(triangle)
617+
618+# Bilinear form
619+a = inner(div(grad(u)), div(grad(v)))*dx \
620+ - inner(avg(div(grad(u))), jump(grad(v), n))*dS \
621+ - inner(jump(grad(u), n), avg(div(grad(v))))*dS \
622+ + alpha('+')/h_avg*inner(jump(grad(u), n), jump(grad(v),n))*dS
623+
624+# Linear form
625+L = f*v*dx
626
627=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/CMakeLists.txt'
628--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/CMakeLists.txt 1970-01-01 00:00:00 +0000
629+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/CMakeLists.txt 2011-05-28 15:37:28 +0000
630@@ -0,0 +1,34 @@
631+# Require CMake 2.8
632+cmake_minimum_required(VERSION 2.8)
633+
634+project(demo_biharmonic)
635+
636+# Set verbose output while testing CMake
637+#set(CMAKE_VERBOSE_MAKEFILE 1)
638+
639+# Set CMake behavior
640+cmake_policy(SET CMP0004 OLD)
641+
642+# Get DOLFIN configuration data (dolfin-config.cmake must be in DOLFIN_CMAKE_CONFIG_PATH)
643+find_package(dolfin)
644+
645+# Default build type (can be overridden by user)
646+if (NOT CMAKE_BUILD_TYPE)
647+ set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
648+ "Choose the type of build, options are: Debug MinSizeRel Release RelWithDebInfo." FORCE)
649+endif()
650+
651+# Compiler definitions
652+add_definitions(${DOLFIN_CXX_DEFINITIONS})
653+
654+# Add special DOLFIN compiler flags
655+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DOLFIN_CXX_FLAGS}")
656+
657+# Include directories
658+include_directories(${DOLFIN_INCLUDE_DIRS} ${DOLFIN_3RD_PARTY_INCLUDE_DIRS})
659+
660+# Executable
661+add_executable(demo_biharmonic main.cpp)
662+
663+# Target libraries
664+target_link_libraries(demo_biharmonic ${DOLFIN_LIBRARIES} ${DOLFIN_3RD_PARTY_LIBRARIES})
665
666=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/documentation.rst'
667--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/documentation.rst 1970-01-01 00:00:00 +0000
668+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/documentation.rst 2011-05-28 15:37:28 +0000
669@@ -0,0 +1,212 @@
670+.. Documentation for the biharmonic demo from DOLFIN.
671+
672+.. _demos_pde_biharmonic_cpp_documentation:
673+
674+
675+Biharmonic equation
676+===================
677+
678+.. include:: ../common.txt
679+
680+Implementation
681+--------------
682+
683+The implementation is split in two files, a form file containing the definition
684+of the variational forms expressed in UFL and the solver which is implemented
685+in a C++ file.
686+
687+Running this demo requires the following files: :download:`main.cpp`,
688+:download:`Biharmonic.ufl` and :download:`CMakeLists.txt`.
689+
690+UFL form file
691+^^^^^^^^^^^^^
692+
693+First we define the variational problem in UFL in the file called
694+:download:`Biharmonic.ufl`.
695+
696+In the UFL file, the finite element space is defined:
697+
698+.. code-block:: python
699+
700+ # Elements
701+ element = FiniteElement("Lagrange", triangle, 2)
702+
703+On the space ``element``, trial and test functions, and the source term
704+are defined:
705+
706+.. code-block:: python
707+
708+ # Trial and test functions
709+ u = TrialFunction(element)
710+ v = TestFunction(element)
711+ f = Coefficient(element)
712+
713+Next, the outward unit normal to cell boundaries and a measure of the
714+cell size are defined. The average size of cells sharing a facet will
715+be used (``h_avg``). The UFL syntax ``('+')`` and ``('-')`` restricts
716+a function to the ``('+')`` and ``('-')`` sides of a facet,
717+respectively. The penalty parameter ``alpha`` is made a
718+:cpp:class:`Constant` so that it can be changed in the program without
719+regenerating the code.
720+
721+.. code-block:: python
722+
723+ # Normal component, mesh size and right-hand side
724+ n = element.cell().n
725+ h = 2.0*triangle.circumradius
726+ h_avg = (h('+') + h('-'))/2
727+
728+ # Parameters
729+ alpha = Constant(triangle)
730+
731+Finally the bilinear and linear forms are defined. Integrals over
732+internal facets are indicated by ``*dS``.
733+
734+.. code-block:: python
735+
736+ # Bilinear form
737+ a = inner(div(grad(u)), div(grad(v)))*dx \
738+ - inner(avg(div(grad(u))), jump(grad(v), n))*dS \
739+ - inner(jump(grad(u), n), avg(div(grad(v))))*dS \
740+ + alpha('+')/h_avg*inner(jump(grad(u), n), jump(grad(v),n))*dS
741+
742+ # Linear form
743+ L = f*v*dx
744+
745+
746+C++ program
747+^^^^^^^^^^^
748+
749+The DOLFIN interface and the code generated from the UFL input is included,
750+and the DOLFIN namespace is used:
751+
752+.. code-block:: c++
753+
754+ #include <dolfin.h>
755+ #include "Biharmonic.h"
756+
757+ using namespace dolfin;
758+
759+A class ``Source`` is defined for the function :math:`f`, with the
760+function ``Expression::eval`` overloaded:
761+
762+.. code-block:: c++
763+
764+ // Source term
765+ class Source : public Expression
766+ {
767+ public:
768+
769+ void eval(Array<double>& values, const Array<double>& x) const
770+ {
771+ values[0] = 4.0*std::pow(DOLFIN_PI, 4)*std::sin(DOLFIN_PI*x[0])*std::sin(DOLFIN_PI*x[1]);
772+ }
773+
774+ };
775+
776+A boundary subdomain is defined, which in this case is the entire boundary:
777+
778+.. code-block:: c++
779+
780+ // Sub domain for Dirichlet boundary condition
781+ class DirichletBoundary : public SubDomain
782+ {
783+ bool inside(const Array<double>& x, bool on_boundary) const
784+ {
785+ return on_boundary;
786+ }
787+ };
788+
789+The main part of the program is begun, and a mesh is created with 32 vertices
790+in each direction:
791+
792+.. code-block:: c++
793+
794+ int main()
795+ {
796+ // Create mesh
797+ UnitSquare mesh(32, 32);
798+
799+
800+The source function, a function for the cell size and the penalty term
801+are declared:
802+
803+.. code-block:: c++
804+
805+ // Create functions
806+ Source f;
807+ Constant alpha(8.0);
808+
809+A function space object, which is defined in the generated code, is created:
810+
811+.. code-block:: c++
812+
813+ // Create function space
814+ Biharmonic::FunctionSpace V(mesh);
815+
816+The Dirichlet boundary condition on :math:`u` is constructed by
817+defining a :cpp:class:`Constant` which is equal to zero, defining the boundary
818+(``DirichletBoundary``), and using these, together with ``V``, to create
819+``bc``:
820+
821+.. code-block:: c++
822+
823+ // Define boundary condition
824+ Constant u0(0.0);
825+ DirichletBoundary boundary;
826+ DirichletBC bc(V, u0, boundary);
827+
828+Using the function space ``V``, the bilinear and linear forms
829+are created, and function are attached:
830+
831+.. code-block:: c++
832+
833+ // Define forms and attach functions
834+ Biharmonic::BilinearForm a(V, V);
835+ Biharmonic::LinearForm L(V);
836+ a.alpha = alpha; L.f = f;
837+
838+A :cpp:class:`VariationalProblem` is created from the forms and the
839+Dirichet boundary condition, a finite element function ``u`` is
840+created and the problem is solved:
841+
842+.. code-block:: c++
843+
844+ // Create PDE
845+ VariationalProblem problem(a, L, bc);
846+
847+ // Solve PDE
848+ Function u(V);
849+ problem.solve(u);
850+
851+The solution is then plotted to the screen and written to a file in VTK
852+format:
853+
854+.. code-block:: c++
855+
856+ // Plot solution
857+ plot(u);
858+
859+ // Save solution in VTK format
860+ File file("biharmonic.pvd");
861+ file << u;
862+
863+ return 0;
864+ }
865+
866+Complete code
867+-------------
868+
869+Complete UFL file
870+^^^^^^^^^^^^^^^^^
871+
872+.. literalinclude:: Biharmonic.ufl
873+ :start-after: # Compile
874+ :language: python
875+
876+Complete main file
877+^^^^^^^^^^^^^^^^^^
878+
879+.. literalinclude:: main.cpp
880+ :start-after: // using
881+ :language: c++
882
883=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/main.cpp'
884--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/main.cpp 1970-01-01 00:00:00 +0000
885+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/main.cpp 2011-05-28 15:37:28 +0000
886@@ -0,0 +1,85 @@
887+// Copyright (C) 2009 Kristian Oelgaard.
888+// Licensed under the GNU LGPL Version 2.1.
889+//
890+// First added: 2009-06-26
891+// Last changed: 2010-09-01
892+//
893+// This demo program solves the Biharmonic equation,
894+//
895+// - nabla^4 u(x, y) = f(x, y)
896+//
897+// on the unit square with source f given by
898+//
899+// f(x, y) = 4 pi^4 sin(pi*x)*sin(pi*y)
900+//
901+// and boundary conditions given by
902+//
903+// u(x, y) = 0
904+// nabla^2 u(x, y) = 0
905+//
906+// using a discontinuous Galerkin formulation (interior penalty method).
907+
908+#include <dolfin.h>
909+#include "Biharmonic.h"
910+
911+using namespace dolfin;
912+
913+// Source term
914+class Source : public Expression
915+{
916+public:
917+
918+ void eval(Array<double>& values, const Array<double>& x) const
919+ {
920+ values[0] = 4.0*std::pow(DOLFIN_PI, 4)*std::sin(DOLFIN_PI*x[0])*std::sin(DOLFIN_PI*x[1]);
921+ }
922+
923+};
924+
925+// Sub domain for Dirichlet boundary condition
926+class DirichletBoundary : public SubDomain
927+{
928+ bool inside(const Array<double>& x, bool on_boundary) const
929+ {
930+ return on_boundary;
931+ }
932+};
933+
934+int main()
935+{
936+ // Create mesh
937+ UnitSquare mesh(32, 32);
938+
939+ // Create functions
940+ Source f;
941+ Constant alpha(8.0);
942+
943+ // Create function space
944+ Biharmonic::FunctionSpace V(mesh);
945+
946+ // Define boundary condition
947+ Constant u0(0.0);
948+ DirichletBoundary boundary;
949+ DirichletBC bc(V, u0, boundary);
950+
951+ // Define forms and attach functions
952+ Biharmonic::BilinearForm a(V, V);
953+ Biharmonic::LinearForm L(V);
954+ a.alpha = alpha; L.f = f;
955+
956+ // Create PDE
957+ VariationalProblem problem(a, L, bc);
958+
959+ // Solve PDE
960+ Function u(V);
961+ problem.solve(u);
962+
963+ // Plot solution
964+ plot(u);
965+
966+ // Save solution in VTK format
967+ File file("biharmonic.pvd");
968+ file << u;
969+
970+ return 0;
971+}
972
973=== added directory 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/python'
974=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/demo_biharmonic.py'
975--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/demo_biharmonic.py 1970-01-01 00:00:00 +0000
976+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/demo_biharmonic.py 2011-05-28 15:37:28 +0000
977@@ -0,0 +1,78 @@
978+"""This demo program solves the Biharmonic equation,
979+
980+ nabla^4 u(x, y) = f(x, y)
981+
982+on the unit square with source f given by
983+
984+ f(x, y) = 4 pi^4 sin(pi*x)*sin(pi*y)
985+
986+and boundary conditions given by
987+
988+ u(x, y) = 0
989+ nabla^2 u(x, y) = 0
990+
991+using a discontinuous Galerkin formulation (interior penalty method).
992+"""
993+
994+__author__ = "Kristian B. Oelgaard (k.b.oelgaard@tudelft.nl)"
995+__date__ = "2009-06-26 -- 2009-06-26"
996+__copyright__ = "Copyright (C) 2009 Kristian B. Oelgaard"
997+__license__ = "GNU LGPL Version 2.1"
998+
999+# Begin demo
1000+
1001+from dolfin import *
1002+
1003+# Optimization options for the form compiler
1004+parameters["form_compiler"]["cpp_optimize"] = True
1005+parameters["form_compiler"]["optimize"] = True
1006+
1007+# Create mesh and define function space
1008+mesh = UnitSquare(32, 32)
1009+V = FunctionSpace(mesh, "CG", 2)
1010+
1011+# Define Dirichlet boundary
1012+class DirichletBoundary(SubDomain):
1013+ def inside(self, x, on_boundary):
1014+ return on_boundary
1015+
1016+class Source(Expression):
1017+ def eval(self, values, x):
1018+ values[0] = 4.0*pi**4*sin(pi*x[0])*sin(pi*x[1])
1019+
1020+# Define boundary condition
1021+u0 = Constant(0.0)
1022+bc = DirichletBC(V, u0, DirichletBoundary())
1023+
1024+# Define trial and test functions
1025+u = TrialFunction(V)
1026+v = TestFunction(V)
1027+
1028+# Define normal component, mesh size and right-hand side
1029+h = CellSize(mesh)
1030+h_avg = (h('+') + h('-'))/2.0
1031+n = FacetNormal(mesh)
1032+f = Source()
1033+
1034+# Penalty parameter
1035+alpha = Constant(8.0)
1036+
1037+# Define bilinear form
1038+a = inner(div(grad(u)), div(grad(v)))*dx \
1039+ - inner(avg(div(grad(u))), jump(grad(v), n))*dS \
1040+ - inner(jump(grad(u), n), avg(div(grad(v))))*dS \
1041+ + alpha('+')/h_avg*inner(jump(grad(u),n), jump(grad(v),n))*dS
1042+
1043+# Define linear form
1044+L = f*v*dx
1045+
1046+# Create variational problem and solve
1047+problem = VariationalProblem(a, L, bc)
1048+u = problem.solve()
1049+
1050+# Save solution to file
1051+file = File("biharmonic.pvd")
1052+file << u
1053+
1054+# Plot solution
1055+plot(u, interactive=True)
1056
1057=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/documentation.rst'
1058--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/documentation.rst 1970-01-01 00:00:00 +0000
1059+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/documentation.rst 2011-05-28 15:37:28 +0000
1060@@ -0,0 +1,132 @@
1061+.. Documentation for the biharmonic demo from DOLFIN.
1062+
1063+.. _demos_pde_biharmonic_python_documentation:
1064+
1065+Biharmonic equation
1066+===================
1067+
1068+This demo is implemented in a single Python file, :download:`demo_biharmonic.py`,
1069+which contains both the variational forms and the solver.
1070+
1071+.. include:: ../common.txt
1072+
1073+Implementation
1074+--------------
1075+
1076+This demo is implemented in the :download:`demo_biharmonic.py` file.
1077+
1078+First, the ``dolfin`` module is imported:
1079+
1080+.. code-block:: python
1081+
1082+ from dolfin import *
1083+
1084+Next, some parameters for the form compiler are set:
1085+
1086+.. code-block:: python
1087+
1088+ # Optimization options for the form compiler
1089+ parameters["form_compiler"]["cpp_optimize"] = True
1090+ parameters["form_compiler"]["optimize"] = True
1091+
1092+A mesh is created, and a quadratic finite element function space:
1093+
1094+.. code-block:: python
1095+
1096+ # Create mesh and define function space
1097+ mesh = UnitSquare(32, 32)
1098+ V = FunctionSpace(mesh, "CG", 2)
1099+
1100+A subclass of ``SubDomain``, ``DirichletBoundary`` is created for later
1101+defining the boundary of the domian:
1102+
1103+.. code-block:: python
1104+
1105+ # Define Dirichlet boundary
1106+ class DirichletBoundary(SubDomain):
1107+ def inside(self, x, on_boundary):
1108+ return on_boundary
1109+
1110+A subclass of ``Expression``, ``Source`` is created for the source
1111+term :math:`f`:
1112+
1113+.. code-block:: python
1114+
1115+ class Source(Expression):
1116+ def eval(self, values, x):
1117+ values[0] = 4.0*pi**4*sin(pi*x[0])*sin(pi*x[1])
1118+
1119+The Dirichlet boundary condition is created:
1120+
1121+.. code-block:: python
1122+
1123+ # Define boundary condition
1124+ u0 = Constant(0.0)
1125+ bc = DirichletBC(V, u0, DirichletBoundary())
1126+
1127+On the finite element space ``V``, trial and test functions are created:
1128+
1129+.. code-block:: python
1130+
1131+ # Define trial and test functions
1132+ u = TrialFunction(V)
1133+ v = TestFunction(V)
1134+
1135+A function for the cell size :math:`h` is created, as is a function for
1136+the average size of cells that share a facet (``h_avg``). The UFL syntax
1137+``('+')`` and ``('-')`` restricts a function to the ``('+')`` and ``('-')``
1138+sides of a facet, respectively. The unit outward normal to cell boundaries (``n``)
1139+is created, as is the source term ``f`` and the penalty parameter ``alpha``. The
1140+penalty parameters is made a ``Constant`` so that it can be changed without needing
1141+to regenerate code.
1142+
1143+.. code-block:: python
1144+
1145+ # Define normal component, mesh size and right-hand side
1146+ h = CellSize(mesh)
1147+ h_avg = (h('+') + h('-'))/2.0
1148+ n = FacetNormal(mesh)
1149+ f = Source()
1150+
1151+ # Penalty parameter
1152+ alpha = Constant(8.0)
1153+
1154+The bilinear and linear forms are defined:
1155+
1156+.. code-block:: python
1157+
1158+ # Define bilinear form
1159+ a = inner(div(grad(u)), div(grad(v)))*dx \
1160+ - inner(avg(div(grad(u))), jump(grad(v), n))*dS \
1161+ - inner(jump(grad(u), n), avg(div(grad(v))))*dS \
1162+ + alpha('+')/h_avg*inner(jump(grad(u),n), jump(grad(v),n))*dS
1163+
1164+ # Define linear form
1165+ L = f*v*dx
1166+
1167+A variational problem is created and solved:
1168+
1169+.. code-block:: python
1170+
1171+ # Create variational problem and solve
1172+ problem = VariationalProblem(a, L, bc)
1173+ u = problem.solve()
1174+
1175+The computed solution is written to a file in VTK format and plotted to
1176+the screen.
1177+
1178+.. code-block:: python
1179+
1180+ # Save solution to file
1181+ file = File("biharmonic.pvd")
1182+ file << u
1183+
1184+ # Plot solution
1185+ plot(u, interactive=True)
1186+
1187+
1188+Complete code
1189+-------------
1190+
1191+.. literalinclude:: demo_biharmonic.py
1192+ :start-after: # Begin demo
1193
1194=== added directory 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard'
1195=== added file 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cahn-hilliard_c.png'
1196Binary files doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cahn-hilliard_c.png 1970-01-01 00:00:00 +0000 and doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cahn-hilliard_c.png 2011-05-28 15:37:28 +0000 differ
1197=== added file 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/common.txt'
1198--- doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/common.txt 1970-01-01 00:00:00 +0000
1199+++ doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/common.txt 2011-05-28 15:37:28 +0000
1200@@ -0,0 +1,91 @@
1201+This example demonstrates the solution of a particular nonlinear
1202+time-dependent fourth-order equation, known as the Cahn-Hilliard
1203+equation. In particular it demonstrates the use of
1204+
1205+* The built-in Newton solver
1206+* Advanced use of the base class ``NonlinearProblem``
1207+* Automatic linearisation
1208+* A mixed finite element method
1209+* The :math:`\theta`-method for time-dependent equations
1210+* User-defined Expressions as Python classes
1211+* Form compiler options
1212+* Interpolation of functions
1213+
1214+
1215+Equation and problem definition
1216+-------------------------------
1217+
1218+The Cahn-Hilliard equation is a parabolic equation and is typically used
1219+to model phase separation in binary mixtures. It involves first-order time
1220+derivatives, and second- and fourth-order spatial derivatives. The equation
1221+reads:
1222+
1223+.. math::
1224+ \frac{\partial c}{\partial t} - \nabla \cdot M \left(\nabla\left(\frac{d f}{d c}
1225+ + \lambda \nabla^{2}c\right)\right) &= 0 \quad {\rm in} \ \Omega, \\
1226+ M\left(\nabla\left(\frac{d f}{d c} + \lambda \nabla^{2}c\right)\right) &= 0 \quad {\rm on} \ \partial\Omega, \\
1227+ M \lambda \nabla c \cdot n &= 0 \quad {\rm on} \ \partial\Omega.
1228+
1229+where :math:`c` is the unknown field, the function :math:`f` is
1230+usually non-convex in :math:`c` (a fourth-order polynomial is commonly
1231+used), :math:`n` is the outward directed boundary normal, and :math:`M`
1232+is a scalar parameter.
1233+
1234+Mixed form
1235+^^^^^^^^^^
1236+
1237+The Cahn-Hilliard equation is a fourth-order equation, so casting it in a weak
1238+form would result in the presence of second-order spatial derivatives, and the
1239+problem could not be solved using a standard Lagrange finite element basis.
1240+A solution is to rephrase the problem as two coupled second-order equations:
1241+
1242+.. math::
1243+ \frac{\partial c}{\partial t} - \nabla \cdot M \nabla\mu &= 0 \quad {\rm in} \ \Omega, \\
1244+ \mu - \frac{d f}{d c} - \lambda \nabla^{2}c &= 0 \quad {\rm in} \ \Omega.
1245+
1246+The unknown fields are now :math:`c` and :math:`\mu`. The weak (variational)
1247+form of the problem reads: find :math:`(c, \mu) \in V \times V` such that
1248+
1249+.. math::
1250+ \int_{\Omega} \frac{\partial c}{\partial t} q \, {\rm d} x + \int_{\Omega} M \nabla\mu \cdot \nabla q \, {\rm d} x
1251+ &= 0 \quad \forall \ q \in V, \\
1252+ \int_{\Omega} \mu v \, {\rm d} x - \int_{\Omega} \frac{d f}{d c} v \, {\rm d} x + \int_{\Omega} \lambda \nabla c \cdot \nabla v \, {\rm d} x
1253+ &= 0 \quad \forall \ v \in V.
1254+
1255+Time discretisation
1256+^^^^^^^^^^^^^^^^^^^
1257+
1258+Before being able to solve this problem, the time derivative must be dealt
1259+with. Apply the :math:`\theta`-method to the mixed weak form of the equation:
1260+
1261+.. math::
1262+
1263+ \int_{\Omega} \frac{c_{n+1} - c_{n}}{dt} q \, {\rm d} x + \int_{\Omega} M \nabla \mu_{n+\theta} \cdot \nabla q \, {\rm d} x
1264+ &= 0 \quad \forall \ q \in V \\
1265+ \int_{\Omega} \mu_{n+1} v \, {\rm d} x - \int_{\Omega} \frac{d f_{n+1}}{d c} v \, {\rm d} x + \int_{\Omega} \lambda \nabla c_{n+1} \cdot \nabla v \, {\rm d} x
1266+ &= 0 \quad \forall \ v \in V
1267+
1268+where :math:`dt = t_{n+1} - t_{n}`
1269+and :math:`\mu_{n+\theta} = (1-\theta) \mu_{n} + \theta \mu_{n+1}`.
1270+The task is: given :math:`c_{n}` and :math:`\mu_{n}`, solve the above
1271+equation to find :math:`c_{n+1}` and :math:`\mu_{n+1}`.
1272+
1273+
1274+Demo parameters
1275+^^^^^^^^^^^^^^^
1276+
1277+The following domains, functions and time stepping parameters are used in this demo:
1278+
1279+* :math:`\Omega = (0, 1) \times (0, 1)` (unit square)
1280+* :math:`f = 100 c^{2} (1-c)^{2}`
1281+* :math:`\lambda = 1 \times 10^{-2}`
1282+* :math:`M = 1`
1283+* :math:`dt = 5 \times 10^{-6}`
1284+* :math:`\theta = 0.5`
1285+
1286+With the above input the solution for :math:`c` will look as follows:
1287+
1288+.. image:: ../cahn-hilliard_c.png
1289+ :scale: 75
1290+ :align: center
1291+
1292
1293=== added directory 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp'
1294=== added file 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CMakeLists.txt'
1295--- doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CMakeLists.txt 1970-01-01 00:00:00 +0000
1296+++ doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CMakeLists.txt 2011-05-28 15:37:28 +0000
1297@@ -0,0 +1,34 @@
1298+# Require CMake 2.8
1299+cmake_minimum_required(VERSION 2.8)
1300+
1301+project(demo_cahn-hilliard)
1302+
1303+# Set verbose output while testing CMake
1304+#set(CMAKE_VERBOSE_MAKEFILE 1)
1305+
1306+# Set CMake behavior
1307+cmake_policy(SET CMP0004 OLD)
1308+
1309+# Get DOLFIN configuration data (dolfin-config.cmake must be in DOLFIN_CMAKE_CONFIG_PATH)
1310+find_package(dolfin)
1311+
1312+# Default build type (can be overridden by user)
1313+if (NOT CMAKE_BUILD_TYPE)
1314+ set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
1315+ "Choose the type of build, options are: Debug MinSizeRel Release RelWithDebInfo." FORCE)
1316+endif()
1317+
1318+# Compiler definitions
1319+add_definitions(${DOLFIN_CXX_DEFINITIONS})
1320+
1321+# Add special DOLFIN compiler flags
1322+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DOLFIN_CXX_FLAGS}")
1323+
1324+# Include directories
1325+include_directories(${DOLFIN_INCLUDE_DIRS} ${DOLFIN_3RD_PARTY_INCLUDE_DIRS})
1326+
1327+# Executable
1328+add_executable(demo_cahn-hilliard CahnHilliard2D.cpp CahnHilliard3D.cpp main.cpp)
1329+
1330+# Target libraries
1331+target_link_libraries(demo_cahn-hilliard ${DOLFIN_LIBRARIES} ${DOLFIN_3RD_PARTY_LIBRARIES})
1332
1333=== added file 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CahnHilliard2D.cpp'
1334--- doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CahnHilliard2D.cpp 1970-01-01 00:00:00 +0000
1335+++ doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CahnHilliard2D.cpp 2011-05-28 15:37:28 +0000
1336@@ -0,0 +1,4467 @@
1337+// This code conforms with the UFC specification version 2.0.0
1338+// and was automatically generated by FFC version 0.9.9+.
1339+//
1340+// This code was generated with the option '-l dolfin' and
1341+// contains DOLFIN-specific wrappers that depend on DOLFIN.
1342+//
1343+// This code was generated with the following parameters:
1344+//
1345+// cache_dir: ''
1346+// convert_exceptions_to_warnings: False
1347+// cpp_optimize: False
1348+// cpp_optimize_flags: '-O2'
1349+// epsilon: 1e-14
1350+// error_control: False
1351+// form_postfix: True
1352+// format: 'dolfin'
1353+// log_level: 10
1354+// log_prefix: ''
1355+// no_ferari: True
1356+// optimize: True
1357+// output_dir: '.'
1358+// precision: 15
1359+// quadrature_degree: 'auto'
1360+// quadrature_rule: 'auto'
1361+// representation: 'auto'
1362+// split: True
1363+// swig_binary: 'swig'
1364+// swig_path: ''
1365+
1366+#include "CahnHilliard2D.h"
1367+
1368+/// Constructor
1369+cahnhilliard2d_finite_element_0::cahnhilliard2d_finite_element_0() : ufc::finite_element()
1370+{
1371+ // Do nothing
1372+}
1373+
1374+/// Destructor
1375+cahnhilliard2d_finite_element_0::~cahnhilliard2d_finite_element_0()
1376+{
1377+ // Do nothing
1378+}
1379+
1380+/// Return a string identifying the finite element
1381+const char* cahnhilliard2d_finite_element_0::signature() const
1382+{
1383+ return "FiniteElement('Discontinuous Lagrange', Cell('triangle', 1, Space(2)), 0)";
1384+}
1385+
1386+/// Return the cell shape
1387+ufc::shape cahnhilliard2d_finite_element_0::cell_shape() const
1388+{
1389+ return ufc::triangle;
1390+}
1391+
1392+/// Return the topological dimension of the cell shape
1393+unsigned int cahnhilliard2d_finite_element_0::topological_dimension() const
1394+{
1395+ return 2;
1396+}
1397+
1398+/// Return the geometric dimension of the cell shape
1399+unsigned int cahnhilliard2d_finite_element_0::geometric_dimension() const
1400+{
1401+ return 2;
1402+}
1403+
1404+/// Return the dimension of the finite element function space
1405+unsigned int cahnhilliard2d_finite_element_0::space_dimension() const
1406+{
1407+ return 1;
1408+}
1409+
1410+/// Return the rank of the value space
1411+unsigned int cahnhilliard2d_finite_element_0::value_rank() const
1412+{
1413+ return 0;
1414+}
1415+
1416+/// Return the dimension of the value space for axis i
1417+unsigned int cahnhilliard2d_finite_element_0::value_dimension(unsigned int i) const
1418+{
1419+ return 1;
1420+}
1421+
1422+/// Evaluate basis function i at given point in cell
1423+void cahnhilliard2d_finite_element_0::evaluate_basis(unsigned int i,
1424+ double* values,
1425+ const double* coordinates,
1426+ const ufc::cell& c) const
1427+{
1428+ // Extract vertex coordinates
1429+
1430+ // Compute Jacobian of affine map from reference cell
1431+
1432+ // Compute determinant of Jacobian
1433+
1434+ // Compute inverse of Jacobian
1435+
1436+ // Compute constants
1437+
1438+ // Get coordinates and map to the reference (FIAT) element
1439+
1440+ // Reset values.
1441+ *values = 0.000000000000000;
1442+
1443+ // Array of basisvalues.
1444+ double basisvalues[1] = {0.000000000000000};
1445+
1446+ // Declare helper variables.
1447+
1448+ // Compute basisvalues.
1449+ basisvalues[0] = 1.000000000000000;
1450+
1451+ // Table(s) of coefficients.
1452+ static const double coefficients0[1] = \
1453+ {1.000000000000000};
1454+
1455+ // Compute value(s).
1456+ for (unsigned int r = 0; r < 1; r++)
1457+ {
1458+ *values += coefficients0[r]*basisvalues[r];
1459+ }// end loop over 'r'
1460+}
1461+
1462+/// Evaluate all basis functions at given point in cell
1463+void cahnhilliard2d_finite_element_0::evaluate_basis_all(double* values,
1464+ const double* coordinates,
1465+ const ufc::cell& c) const
1466+{
1467+ // Element is constant, calling evaluate_basis.
1468+ evaluate_basis(0, values, coordinates, c);
1469+}
1470+
1471+/// Evaluate order n derivatives of basis function i at given point in cell
1472+void cahnhilliard2d_finite_element_0::evaluate_basis_derivatives(unsigned int i,
1473+ unsigned int n,
1474+ double* values,
1475+ const double* coordinates,
1476+ const ufc::cell& c) const
1477+{
1478+ // Extract vertex coordinates
1479+ const double * const * x = c.coordinates;
1480+
1481+ // Compute Jacobian of affine map from reference cell
1482+ const double J_00 = x[1][0] - x[0][0];
1483+ const double J_01 = x[2][0] - x[0][0];
1484+ const double J_10 = x[1][1] - x[0][1];
1485+ const double J_11 = x[2][1] - x[0][1];
1486+
1487+ // Compute determinant of Jacobian
1488+ double detJ = J_00*J_11 - J_01*J_10;
1489+
1490+ // Compute inverse of Jacobian
1491+ const double K_00 = J_11 / detJ;
1492+ const double K_01 = -J_01 / detJ;
1493+ const double K_10 = -J_10 / detJ;
1494+ const double K_11 = J_00 / detJ;
1495+
1496+ // Compute constants
1497+
1498+ // Get coordinates and map to the reference (FIAT) element
1499+
1500+ // Compute number of derivatives.
1501+ unsigned int num_derivatives = 1;
1502+ for (unsigned int r = 0; r < n; r++)
1503+ {
1504+ num_derivatives *= 2;
1505+ }// end loop over 'r'
1506+
1507+ // Declare pointer to two dimensional array that holds combinations of derivatives and initialise
1508+ unsigned int **combinations = new unsigned int *[num_derivatives];
1509+ for (unsigned int row = 0; row < num_derivatives; row++)
1510+ {
1511+ combinations[row] = new unsigned int [n];
1512+ for (unsigned int col = 0; col < n; col++)
1513+ combinations[row][col] = 0;
1514+ }
1515+
1516+ // Generate combinations of derivatives
1517+ for (unsigned int row = 1; row < num_derivatives; row++)
1518+ {
1519+ for (unsigned int num = 0; num < row; num++)
1520+ {
1521+ for (unsigned int col = n-1; col+1 > 0; col--)
1522+ {
1523+ if (combinations[row][col] + 1 > 1)
1524+ combinations[row][col] = 0;
1525+ else
1526+ {
1527+ combinations[row][col] += 1;
1528+ break;
1529+ }
1530+ }
1531+ }
1532+ }
1533+
1534+ // Compute inverse of Jacobian
1535+ const double Jinv[2][2] = {{K_00, K_01}, {K_10, K_11}};
1536+
1537+ // Declare transformation matrix
1538+ // Declare pointer to two dimensional array and initialise
1539+ double **transform = new double *[num_derivatives];
1540+
1541+ for (unsigned int j = 0; j < num_derivatives; j++)
1542+ {
1543+ transform[j] = new double [num_derivatives];
1544+ for (unsigned int k = 0; k < num_derivatives; k++)
1545+ transform[j][k] = 1;
1546+ }
1547+
1548+ // Construct transformation matrix
1549+ for (unsigned int row = 0; row < num_derivatives; row++)
1550+ {
1551+ for (unsigned int col = 0; col < num_derivatives; col++)
1552+ {
1553+ for (unsigned int k = 0; k < n; k++)
1554+ transform[row][col] *= Jinv[combinations[col][k]][combinations[row][k]];
1555+ }
1556+ }
1557+
1558+ // Reset values. Assuming that values is always an array.
1559+ for (unsigned int r = 0; r < num_derivatives; r++)
1560+ {
1561+ values[r] = 0.000000000000000;
1562+ }// end loop over 'r'
1563+
1564+
1565+ // Array of basisvalues.
1566+ double basisvalues[1] = {0.000000000000000};
1567+
1568+ // Declare helper variables.
1569+
1570+ // Compute basisvalues.
1571+ basisvalues[0] = 1.000000000000000;
1572+
1573+ // Table(s) of coefficients.
1574+ static const double coefficients0[1] = \
1575+ {1.000000000000000};
1576+
1577+ // Tables of derivatives of the polynomial base (transpose).
1578+ static const double dmats0[1][1] = \
1579+ {{0.000000000000000}};
1580+
1581+ static const double dmats1[1][1] = \
1582+ {{0.000000000000000}};
1583+
1584+ // Compute reference derivatives.
1585+ // Declare pointer to array of derivatives on FIAT element.
1586+ double *derivatives = new double[num_derivatives];
1587+ for (unsigned int r = 0; r < num_derivatives; r++)
1588+ {
1589+ derivatives[r] = 0.000000000000000;
1590+ }// end loop over 'r'
1591+
1592+ // Declare derivative matrix (of polynomial basis).
1593+ double dmats[1][1] = \
1594+ {{1.000000000000000}};
1595+
1596+ // Declare (auxiliary) derivative matrix (of polynomial basis).
1597+ double dmats_old[1][1] = \
1598+ {{1.000000000000000}};
1599+
1600+ // Loop possible derivatives.
1601+ for (unsigned int r = 0; r < num_derivatives; r++)
1602+ {
1603+ // Resetting dmats values to compute next derivative.
1604+ for (unsigned int t = 0; t < 1; t++)
1605+ {
1606+ for (unsigned int u = 0; u < 1; u++)
1607+ {
1608+ dmats[t][u] = 0.000000000000000;
1609+ if (t == u)
1610+ {
1611+ dmats[t][u] = 1.000000000000000;
1612+ }
1613+
1614+ }// end loop over 'u'
1615+ }// end loop over 't'
1616+
1617+ // Looping derivative order to generate dmats.
1618+ for (unsigned int s = 0; s < n; s++)
1619+ {
1620+ // Updating dmats_old with new values and resetting dmats.
1621+ for (unsigned int t = 0; t < 1; t++)
1622+ {
1623+ for (unsigned int u = 0; u < 1; u++)
1624+ {
1625+ dmats_old[t][u] = dmats[t][u];
1626+ dmats[t][u] = 0.000000000000000;
1627+ }// end loop over 'u'
1628+ }// end loop over 't'
1629+
1630+ // Update dmats using an inner product.
1631+ if (combinations[r][s] == 0)
1632+ {
1633+ for (unsigned int t = 0; t < 1; t++)
1634+ {
1635+ for (unsigned int u = 0; u < 1; u++)
1636+ {
1637+ for (unsigned int tu = 0; tu < 1; tu++)
1638+ {
1639+ dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1640+ }// end loop over 'tu'
1641+ }// end loop over 'u'
1642+ }// end loop over 't'
1643+ }
1644+
1645+ if (combinations[r][s] == 1)
1646+ {
1647+ for (unsigned int t = 0; t < 1; t++)
1648+ {
1649+ for (unsigned int u = 0; u < 1; u++)
1650+ {
1651+ for (unsigned int tu = 0; tu < 1; tu++)
1652+ {
1653+ dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1654+ }// end loop over 'tu'
1655+ }// end loop over 'u'
1656+ }// end loop over 't'
1657+ }
1658+
1659+ }// end loop over 's'
1660+ for (unsigned int s = 0; s < 1; s++)
1661+ {
1662+ for (unsigned int t = 0; t < 1; t++)
1663+ {
1664+ derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
1665+ }// end loop over 't'
1666+ }// end loop over 's'
1667+ }// end loop over 'r'
1668+
1669+ // Transform derivatives back to physical element
1670+ for (unsigned int r = 0; r < num_derivatives; r++)
1671+ {
1672+ for (unsigned int s = 0; s < num_derivatives; s++)
1673+ {
1674+ values[r] += transform[r][s]*derivatives[s];
1675+ }// end loop over 's'
1676+ }// end loop over 'r'
1677+
1678+ // Delete pointer to array of derivatives on FIAT element
1679+ delete [] derivatives;
1680+
1681+ // Delete pointer to array of combinations of derivatives and transform
1682+ for (unsigned int r = 0; r < num_derivatives; r++)
1683+ {
1684+ delete [] combinations[r];
1685+ }// end loop over 'r'
1686+ delete [] combinations;
1687+ for (unsigned int r = 0; r < num_derivatives; r++)
1688+ {
1689+ delete [] transform[r];
1690+ }// end loop over 'r'
1691+ delete [] transform;
1692+}
1693+
1694+/// Evaluate order n derivatives of all basis functions at given point in cell
1695+void cahnhilliard2d_finite_element_0::evaluate_basis_derivatives_all(unsigned int n,
1696+ double* values,
1697+ const double* coordinates,
1698+ const ufc::cell& c) const
1699+{
1700+ // Element is constant, calling evaluate_basis_derivatives.
1701+ evaluate_basis_derivatives(0, n, values, coordinates, c);
1702+}
1703+
1704+/// Evaluate linear functional for dof i on the function f
1705+double cahnhilliard2d_finite_element_0::evaluate_dof(unsigned int i,
1706+ const ufc::function& f,
1707+ const ufc::cell& c) const
1708+{
1709+ // Declare variables for result of evaluation.
1710+ double vals[1];
1711+
1712+ // Declare variable for physical coordinates.
1713+ double y[2];
1714+ const double * const * x = c.coordinates;
1715+ switch (i)
1716+ {
1717+ case 0:
1718+ {
1719+ y[0] = 0.333333333333333*x[0][0] + 0.333333333333333*x[1][0] + 0.333333333333333*x[2][0];
1720+ y[1] = 0.333333333333333*x[0][1] + 0.333333333333333*x[1][1] + 0.333333333333333*x[2][1];
1721+ f.evaluate(vals, y, c);
1722+ return vals[0];
1723+ break;
1724+ }
1725+ }
1726+
1727+ return 0.000000000000000;
1728+}
1729+
1730+/// Evaluate linear functionals for all dofs on the function f
1731+void cahnhilliard2d_finite_element_0::evaluate_dofs(double* values,
1732+ const ufc::function& f,
1733+ const ufc::cell& c) const
1734+{
1735+ // Declare variables for result of evaluation.
1736+ double vals[1];
1737+
1738+ // Declare variable for physical coordinates.
1739+ double y[2];
1740+ const double * const * x = c.coordinates;
1741+ y[0] = 0.333333333333333*x[0][0] + 0.333333333333333*x[1][0] + 0.333333333333333*x[2][0];
1742+ y[1] = 0.333333333333333*x[0][1] + 0.333333333333333*x[1][1] + 0.333333333333333*x[2][1];
1743+ f.evaluate(vals, y, c);
1744+ values[0] = vals[0];
1745+}
1746+
1747+/// Interpolate vertex values from dof values
1748+void cahnhilliard2d_finite_element_0::interpolate_vertex_values(double* vertex_values,
1749+ const double* dof_values,
1750+ const ufc::cell& c) const
1751+{
1752+ // Evaluate function and change variables
1753+ vertex_values[0] = dof_values[0];
1754+ vertex_values[1] = dof_values[0];
1755+ vertex_values[2] = dof_values[0];
1756+}
1757+
1758+/// Map coordinate xhat from reference cell to coordinate x in cell
1759+void cahnhilliard2d_finite_element_0::map_from_reference_cell(double* x,
1760+ const double* xhat,
1761+ const ufc::cell& c) const
1762+{
1763+ throw std::runtime_error("map_from_reference_cell not yet implemented (introduced in UFC 2.0).");
1764+}
1765+
1766+/// Map from coordinate x in cell to coordinate xhat in reference cell
1767+void cahnhilliard2d_finite_element_0::map_to_reference_cell(double* xhat,
1768+ const double* x,
1769+ const ufc::cell& c) const
1770+{
1771+ throw std::runtime_error("map_to_reference_cell not yet implemented (introduced in UFC 2.0).");
1772+}
1773+
1774+/// Return the number of sub elements (for a mixed element)
1775+unsigned int cahnhilliard2d_finite_element_0::num_sub_elements() const
1776+{
1777+ return 0;
1778+}
1779+
1780+/// Create a new finite element for sub element i (for a mixed element)
1781+ufc::finite_element* cahnhilliard2d_finite_element_0::create_sub_element(unsigned int i) const
1782+{
1783+ return 0;
1784+}
1785+
1786+/// Create a new class instance
1787+ufc::finite_element* cahnhilliard2d_finite_element_0::create() const
1788+{
1789+ return new cahnhilliard2d_finite_element_0();
1790+}
1791+
1792+
1793+/// Constructor
1794+cahnhilliard2d_finite_element_1::cahnhilliard2d_finite_element_1() : ufc::finite_element()
1795+{
1796+ // Do nothing
1797+}
1798+
1799+/// Destructor
1800+cahnhilliard2d_finite_element_1::~cahnhilliard2d_finite_element_1()
1801+{
1802+ // Do nothing
1803+}
1804+
1805+/// Return a string identifying the finite element
1806+const char* cahnhilliard2d_finite_element_1::signature() const
1807+{
1808+ return "FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1)";
1809+}
1810+
1811+/// Return the cell shape
1812+ufc::shape cahnhilliard2d_finite_element_1::cell_shape() const
1813+{
1814+ return ufc::triangle;
1815+}
1816+
1817+/// Return the topological dimension of the cell shape
1818+unsigned int cahnhilliard2d_finite_element_1::topological_dimension() const
1819+{
1820+ return 2;
1821+}
1822+
1823+/// Return the geometric dimension of the cell shape
1824+unsigned int cahnhilliard2d_finite_element_1::geometric_dimension() const
1825+{
1826+ return 2;
1827+}
1828+
1829+/// Return the dimension of the finite element function space
1830+unsigned int cahnhilliard2d_finite_element_1::space_dimension() const
1831+{
1832+ return 3;
1833+}
1834+
1835+/// Return the rank of the value space
1836+unsigned int cahnhilliard2d_finite_element_1::value_rank() const
1837+{
1838+ return 0;
1839+}
1840+
1841+/// Return the dimension of the value space for axis i
1842+unsigned int cahnhilliard2d_finite_element_1::value_dimension(unsigned int i) const
1843+{
1844+ return 1;
1845+}
1846+
1847+/// Evaluate basis function i at given point in cell
1848+void cahnhilliard2d_finite_element_1::evaluate_basis(unsigned int i,
1849+ double* values,
1850+ const double* coordinates,
1851+ const ufc::cell& c) const
1852+{
1853+ // Extract vertex coordinates
1854+ const double * const * x = c.coordinates;
1855+
1856+ // Compute Jacobian of affine map from reference cell
1857+ const double J_00 = x[1][0] - x[0][0];
1858+ const double J_01 = x[2][0] - x[0][0];
1859+ const double J_10 = x[1][1] - x[0][1];
1860+ const double J_11 = x[2][1] - x[0][1];
1861+
1862+ // Compute determinant of Jacobian
1863+ double detJ = J_00*J_11 - J_01*J_10;
1864+
1865+ // Compute inverse of Jacobian
1866+
1867+ // Compute constants
1868+ const double C0 = x[1][0] + x[2][0];
1869+ const double C1 = x[1][1] + x[2][1];
1870+
1871+ // Get coordinates and map to the reference (FIAT) element
1872+ double X = (J_01*(C1 - 2.0*coordinates[1]) + J_11*(2.0*coordinates[0] - C0)) / detJ;
1873+ double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
1874+
1875+ // Reset values.
1876+ *values = 0.000000000000000;
1877+ switch (i)
1878+ {
1879+ case 0:
1880+ {
1881+
1882+ // Array of basisvalues.
1883+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
1884+
1885+ // Declare helper variables.
1886+ unsigned int rr = 0;
1887+ unsigned int ss = 0;
1888+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
1889+
1890+ // Compute basisvalues.
1891+ basisvalues[0] = 1.000000000000000;
1892+ basisvalues[1] = tmp0;
1893+ for (unsigned int r = 0; r < 1; r++)
1894+ {
1895+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
1896+ ss = r*(r + 1)/2;
1897+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
1898+ }// end loop over 'r'
1899+ for (unsigned int r = 0; r < 2; r++)
1900+ {
1901+ for (unsigned int s = 0; s < 2 - r; s++)
1902+ {
1903+ rr = (r + s)*(r + s + 1)/2 + s;
1904+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
1905+ }// end loop over 's'
1906+ }// end loop over 'r'
1907+
1908+ // Table(s) of coefficients.
1909+ static const double coefficients0[3] = \
1910+ {0.471404520791032, -0.288675134594813, -0.166666666666667};
1911+
1912+ // Compute value(s).
1913+ for (unsigned int r = 0; r < 3; r++)
1914+ {
1915+ *values += coefficients0[r]*basisvalues[r];
1916+ }// end loop over 'r'
1917+ break;
1918+ }
1919+ case 1:
1920+ {
1921+
1922+ // Array of basisvalues.
1923+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
1924+
1925+ // Declare helper variables.
1926+ unsigned int rr = 0;
1927+ unsigned int ss = 0;
1928+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
1929+
1930+ // Compute basisvalues.
1931+ basisvalues[0] = 1.000000000000000;
1932+ basisvalues[1] = tmp0;
1933+ for (unsigned int r = 0; r < 1; r++)
1934+ {
1935+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
1936+ ss = r*(r + 1)/2;
1937+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
1938+ }// end loop over 'r'
1939+ for (unsigned int r = 0; r < 2; r++)
1940+ {
1941+ for (unsigned int s = 0; s < 2 - r; s++)
1942+ {
1943+ rr = (r + s)*(r + s + 1)/2 + s;
1944+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
1945+ }// end loop over 's'
1946+ }// end loop over 'r'
1947+
1948+ // Table(s) of coefficients.
1949+ static const double coefficients0[3] = \
1950+ {0.471404520791032, 0.288675134594813, -0.166666666666667};
1951+
1952+ // Compute value(s).
1953+ for (unsigned int r = 0; r < 3; r++)
1954+ {
1955+ *values += coefficients0[r]*basisvalues[r];
1956+ }// end loop over 'r'
1957+ break;
1958+ }
1959+ case 2:
1960+ {
1961+
1962+ // Array of basisvalues.
1963+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
1964+
1965+ // Declare helper variables.
1966+ unsigned int rr = 0;
1967+ unsigned int ss = 0;
1968+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
1969+
1970+ // Compute basisvalues.
1971+ basisvalues[0] = 1.000000000000000;
1972+ basisvalues[1] = tmp0;
1973+ for (unsigned int r = 0; r < 1; r++)
1974+ {
1975+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
1976+ ss = r*(r + 1)/2;
1977+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
1978+ }// end loop over 'r'
1979+ for (unsigned int r = 0; r < 2; r++)
1980+ {
1981+ for (unsigned int s = 0; s < 2 - r; s++)
1982+ {
1983+ rr = (r + s)*(r + s + 1)/2 + s;
1984+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
1985+ }// end loop over 's'
1986+ }// end loop over 'r'
1987+
1988+ // Table(s) of coefficients.
1989+ static const double coefficients0[3] = \
1990+ {0.471404520791032, 0.000000000000000, 0.333333333333333};
1991+
1992+ // Compute value(s).
1993+ for (unsigned int r = 0; r < 3; r++)
1994+ {
1995+ *values += coefficients0[r]*basisvalues[r];
1996+ }// end loop over 'r'
1997+ break;
1998+ }
1999+ }
2000+
2001+}
2002+
2003+/// Evaluate all basis functions at given point in cell
2004+void cahnhilliard2d_finite_element_1::evaluate_basis_all(double* values,
2005+ const double* coordinates,
2006+ const ufc::cell& c) const
2007+{
2008+ // Helper variable to hold values of a single dof.
2009+ double dof_values = 0.000000000000000;
2010+
2011+ // Loop dofs and call evaluate_basis.
2012+ for (unsigned int r = 0; r < 3; r++)
2013+ {
2014+ evaluate_basis(r, &dof_values, coordinates, c);
2015+ values[r] = dof_values;
2016+ }// end loop over 'r'
2017+}
2018+
2019+/// Evaluate order n derivatives of basis function i at given point in cell
2020+void cahnhilliard2d_finite_element_1::evaluate_basis_derivatives(unsigned int i,
2021+ unsigned int n,
2022+ double* values,
2023+ const double* coordinates,
2024+ const ufc::cell& c) const
2025+{
2026+ // Extract vertex coordinates
2027+ const double * const * x = c.coordinates;
2028+
2029+ // Compute Jacobian of affine map from reference cell
2030+ const double J_00 = x[1][0] - x[0][0];
2031+ const double J_01 = x[2][0] - x[0][0];
2032+ const double J_10 = x[1][1] - x[0][1];
2033+ const double J_11 = x[2][1] - x[0][1];
2034+
2035+ // Compute determinant of Jacobian
2036+ double detJ = J_00*J_11 - J_01*J_10;
2037+
2038+ // Compute inverse of Jacobian
2039+ const double K_00 = J_11 / detJ;
2040+ const double K_01 = -J_01 / detJ;
2041+ const double K_10 = -J_10 / detJ;
2042+ const double K_11 = J_00 / detJ;
2043+
2044+ // Compute constants
2045+ const double C0 = x[1][0] + x[2][0];
2046+ const double C1 = x[1][1] + x[2][1];
2047+
2048+ // Get coordinates and map to the reference (FIAT) element
2049+ double X = (J_01*(C1 - 2.0*coordinates[1]) + J_11*(2.0*coordinates[0] - C0)) / detJ;
2050+ double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
2051+
2052+ // Compute number of derivatives.
2053+ unsigned int num_derivatives = 1;
2054+ for (unsigned int r = 0; r < n; r++)
2055+ {
2056+ num_derivatives *= 2;
2057+ }// end loop over 'r'
2058+
2059+ // Declare pointer to two dimensional array that holds combinations of derivatives and initialise
2060+ unsigned int **combinations = new unsigned int *[num_derivatives];
2061+ for (unsigned int row = 0; row < num_derivatives; row++)
2062+ {
2063+ combinations[row] = new unsigned int [n];
2064+ for (unsigned int col = 0; col < n; col++)
2065+ combinations[row][col] = 0;
2066+ }
2067+
2068+ // Generate combinations of derivatives
2069+ for (unsigned int row = 1; row < num_derivatives; row++)
2070+ {
2071+ for (unsigned int num = 0; num < row; num++)
2072+ {
2073+ for (unsigned int col = n-1; col+1 > 0; col--)
2074+ {
2075+ if (combinations[row][col] + 1 > 1)
2076+ combinations[row][col] = 0;
2077+ else
2078+ {
2079+ combinations[row][col] += 1;
2080+ break;
2081+ }
2082+ }
2083+ }
2084+ }
2085+
2086+ // Compute inverse of Jacobian
2087+ const double Jinv[2][2] = {{K_00, K_01}, {K_10, K_11}};
2088+
2089+ // Declare transformation matrix
2090+ // Declare pointer to two dimensional array and initialise
2091+ double **transform = new double *[num_derivatives];
2092+
2093+ for (unsigned int j = 0; j < num_derivatives; j++)
2094+ {
2095+ transform[j] = new double [num_derivatives];
2096+ for (unsigned int k = 0; k < num_derivatives; k++)
2097+ transform[j][k] = 1;
2098+ }
2099+
2100+ // Construct transformation matrix
2101+ for (unsigned int row = 0; row < num_derivatives; row++)
2102+ {
2103+ for (unsigned int col = 0; col < num_derivatives; col++)
2104+ {
2105+ for (unsigned int k = 0; k < n; k++)
2106+ transform[row][col] *= Jinv[combinations[col][k]][combinations[row][k]];
2107+ }
2108+ }
2109+
2110+ // Reset values. Assuming that values is always an array.
2111+ for (unsigned int r = 0; r < num_derivatives; r++)
2112+ {
2113+ values[r] = 0.000000000000000;
2114+ }// end loop over 'r'
2115+
2116+ switch (i)
2117+ {
2118+ case 0:
2119+ {
2120+
2121+ // Array of basisvalues.
2122+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2123+
2124+ // Declare helper variables.
2125+ unsigned int rr = 0;
2126+ unsigned int ss = 0;
2127+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2128+
2129+ // Compute basisvalues.
2130+ basisvalues[0] = 1.000000000000000;
2131+ basisvalues[1] = tmp0;
2132+ for (unsigned int r = 0; r < 1; r++)
2133+ {
2134+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
2135+ ss = r*(r + 1)/2;
2136+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2137+ }// end loop over 'r'
2138+ for (unsigned int r = 0; r < 2; r++)
2139+ {
2140+ for (unsigned int s = 0; s < 2 - r; s++)
2141+ {
2142+ rr = (r + s)*(r + s + 1)/2 + s;
2143+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2144+ }// end loop over 's'
2145+ }// end loop over 'r'
2146+
2147+ // Table(s) of coefficients.
2148+ static const double coefficients0[3] = \
2149+ {0.471404520791032, -0.288675134594813, -0.166666666666667};
2150+
2151+ // Tables of derivatives of the polynomial base (transpose).
2152+ static const double dmats0[3][3] = \
2153+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2154+ {4.898979485566356, 0.000000000000000, 0.000000000000000},
2155+ {0.000000000000000, 0.000000000000000, 0.000000000000000}};
2156+
2157+ static const double dmats1[3][3] = \
2158+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2159+ {2.449489742783178, 0.000000000000000, 0.000000000000000},
2160+ {4.242640687119285, 0.000000000000000, 0.000000000000000}};
2161+
2162+ // Compute reference derivatives.
2163+ // Declare pointer to array of derivatives on FIAT element.
2164+ double *derivatives = new double[num_derivatives];
2165+ for (unsigned int r = 0; r < num_derivatives; r++)
2166+ {
2167+ derivatives[r] = 0.000000000000000;
2168+ }// end loop over 'r'
2169+
2170+ // Declare derivative matrix (of polynomial basis).
2171+ double dmats[3][3] = \
2172+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2173+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
2174+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2175+
2176+ // Declare (auxiliary) derivative matrix (of polynomial basis).
2177+ double dmats_old[3][3] = \
2178+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2179+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
2180+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2181+
2182+ // Loop possible derivatives.
2183+ for (unsigned int r = 0; r < num_derivatives; r++)
2184+ {
2185+ // Resetting dmats values to compute next derivative.
2186+ for (unsigned int t = 0; t < 3; t++)
2187+ {
2188+ for (unsigned int u = 0; u < 3; u++)
2189+ {
2190+ dmats[t][u] = 0.000000000000000;
2191+ if (t == u)
2192+ {
2193+ dmats[t][u] = 1.000000000000000;
2194+ }
2195+
2196+ }// end loop over 'u'
2197+ }// end loop over 't'
2198+
2199+ // Looping derivative order to generate dmats.
2200+ for (unsigned int s = 0; s < n; s++)
2201+ {
2202+ // Updating dmats_old with new values and resetting dmats.
2203+ for (unsigned int t = 0; t < 3; t++)
2204+ {
2205+ for (unsigned int u = 0; u < 3; u++)
2206+ {
2207+ dmats_old[t][u] = dmats[t][u];
2208+ dmats[t][u] = 0.000000000000000;
2209+ }// end loop over 'u'
2210+ }// end loop over 't'
2211+
2212+ // Update dmats using an inner product.
2213+ if (combinations[r][s] == 0)
2214+ {
2215+ for (unsigned int t = 0; t < 3; t++)
2216+ {
2217+ for (unsigned int u = 0; u < 3; u++)
2218+ {
2219+ for (unsigned int tu = 0; tu < 3; tu++)
2220+ {
2221+ dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2222+ }// end loop over 'tu'
2223+ }// end loop over 'u'
2224+ }// end loop over 't'
2225+ }
2226+
2227+ if (combinations[r][s] == 1)
2228+ {
2229+ for (unsigned int t = 0; t < 3; t++)
2230+ {
2231+ for (unsigned int u = 0; u < 3; u++)
2232+ {
2233+ for (unsigned int tu = 0; tu < 3; tu++)
2234+ {
2235+ dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2236+ }// end loop over 'tu'
2237+ }// end loop over 'u'
2238+ }// end loop over 't'
2239+ }
2240+
2241+ }// end loop over 's'
2242+ for (unsigned int s = 0; s < 3; s++)
2243+ {
2244+ for (unsigned int t = 0; t < 3; t++)
2245+ {
2246+ derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2247+ }// end loop over 't'
2248+ }// end loop over 's'
2249+ }// end loop over 'r'
2250+
2251+ // Transform derivatives back to physical element
2252+ for (unsigned int r = 0; r < num_derivatives; r++)
2253+ {
2254+ for (unsigned int s = 0; s < num_derivatives; s++)
2255+ {
2256+ values[r] += transform[r][s]*derivatives[s];
2257+ }// end loop over 's'
2258+ }// end loop over 'r'
2259+
2260+ // Delete pointer to array of derivatives on FIAT element
2261+ delete [] derivatives;
2262+
2263+ // Delete pointer to array of combinations of derivatives and transform
2264+ for (unsigned int r = 0; r < num_derivatives; r++)
2265+ {
2266+ delete [] combinations[r];
2267+ }// end loop over 'r'
2268+ delete [] combinations;
2269+ for (unsigned int r = 0; r < num_derivatives; r++)
2270+ {
2271+ delete [] transform[r];
2272+ }// end loop over 'r'
2273+ delete [] transform;
2274+ break;
2275+ }
2276+ case 1:
2277+ {
2278+
2279+ // Array of basisvalues.
2280+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2281+
2282+ // Declare helper variables.
2283+ unsigned int rr = 0;
2284+ unsigned int ss = 0;
2285+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2286+
2287+ // Compute basisvalues.
2288+ basisvalues[0] = 1.000000000000000;
2289+ basisvalues[1] = tmp0;
2290+ for (unsigned int r = 0; r < 1; r++)
2291+ {
2292+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
2293+ ss = r*(r + 1)/2;
2294+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2295+ }// end loop over 'r'
2296+ for (unsigned int r = 0; r < 2; r++)
2297+ {
2298+ for (unsigned int s = 0; s < 2 - r; s++)
2299+ {
2300+ rr = (r + s)*(r + s + 1)/2 + s;
2301+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2302+ }// end loop over 's'
2303+ }// end loop over 'r'
2304+
2305+ // Table(s) of coefficients.
2306+ static const double coefficients0[3] = \
2307+ {0.471404520791032, 0.288675134594813, -0.166666666666667};
2308+
2309+ // Tables of derivatives of the polynomial base (transpose).
2310+ static const double dmats0[3][3] = \
2311+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2312+ {4.898979485566356, 0.000000000000000, 0.000000000000000},
2313+ {0.000000000000000, 0.000000000000000, 0.000000000000000}};
2314+
2315+ static const double dmats1[3][3] = \
2316+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2317+ {2.449489742783178, 0.000000000000000, 0.000000000000000},
2318+ {4.242640687119285, 0.000000000000000, 0.000000000000000}};
2319+
2320+ // Compute reference derivatives.
2321+ // Declare pointer to array of derivatives on FIAT element.
2322+ double *derivatives = new double[num_derivatives];
2323+ for (unsigned int r = 0; r < num_derivatives; r++)
2324+ {
2325+ derivatives[r] = 0.000000000000000;
2326+ }// end loop over 'r'
2327+
2328+ // Declare derivative matrix (of polynomial basis).
2329+ double dmats[3][3] = \
2330+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2331+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
2332+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2333+
2334+ // Declare (auxiliary) derivative matrix (of polynomial basis).
2335+ double dmats_old[3][3] = \
2336+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2337+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
2338+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2339+
2340+ // Loop possible derivatives.
2341+ for (unsigned int r = 0; r < num_derivatives; r++)
2342+ {
2343+ // Resetting dmats values to compute next derivative.
2344+ for (unsigned int t = 0; t < 3; t++)
2345+ {
2346+ for (unsigned int u = 0; u < 3; u++)
2347+ {
2348+ dmats[t][u] = 0.000000000000000;
2349+ if (t == u)
2350+ {
2351+ dmats[t][u] = 1.000000000000000;
2352+ }
2353+
2354+ }// end loop over 'u'
2355+ }// end loop over 't'
2356+
2357+ // Looping derivative order to generate dmats.
2358+ for (unsigned int s = 0; s < n; s++)
2359+ {
2360+ // Updating dmats_old with new values and resetting dmats.
2361+ for (unsigned int t = 0; t < 3; t++)
2362+ {
2363+ for (unsigned int u = 0; u < 3; u++)
2364+ {
2365+ dmats_old[t][u] = dmats[t][u];
2366+ dmats[t][u] = 0.000000000000000;
2367+ }// end loop over 'u'
2368+ }// end loop over 't'
2369+
2370+ // Update dmats using an inner product.
2371+ if (combinations[r][s] == 0)
2372+ {
2373+ for (unsigned int t = 0; t < 3; t++)
2374+ {
2375+ for (unsigned int u = 0; u < 3; u++)
2376+ {
2377+ for (unsigned int tu = 0; tu < 3; tu++)
2378+ {
2379+ dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2380+ }// end loop over 'tu'
2381+ }// end loop over 'u'
2382+ }// end loop over 't'
2383+ }
2384+
2385+ if (combinations[r][s] == 1)
2386+ {
2387+ for (unsigned int t = 0; t < 3; t++)
2388+ {
2389+ for (unsigned int u = 0; u < 3; u++)
2390+ {
2391+ for (unsigned int tu = 0; tu < 3; tu++)
2392+ {
2393+ dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2394+ }// end loop over 'tu'
2395+ }// end loop over 'u'
2396+ }// end loop over 't'
2397+ }
2398+
2399+ }// end loop over 's'
2400+ for (unsigned int s = 0; s < 3; s++)
2401+ {
2402+ for (unsigned int t = 0; t < 3; t++)
2403+ {
2404+ derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2405+ }// end loop over 't'
2406+ }// end loop over 's'
2407+ }// end loop over 'r'
2408+
2409+ // Transform derivatives back to physical element
2410+ for (unsigned int r = 0; r < num_derivatives; r++)
2411+ {
2412+ for (unsigned int s = 0; s < num_derivatives; s++)
2413+ {
2414+ values[r] += transform[r][s]*derivatives[s];
2415+ }// end loop over 's'
2416+ }// end loop over 'r'
2417+
2418+ // Delete pointer to array of derivatives on FIAT element
2419+ delete [] derivatives;
2420+
2421+ // Delete pointer to array of combinations of derivatives and transform
2422+ for (unsigned int r = 0; r < num_derivatives; r++)
2423+ {
2424+ delete [] combinations[r];
2425+ }// end loop over 'r'
2426+ delete [] combinations;
2427+ for (unsigned int r = 0; r < num_derivatives; r++)
2428+ {
2429+ delete [] transform[r];
2430+ }// end loop over 'r'
2431+ delete [] transform;
2432+ break;
2433+ }
2434+ case 2:
2435+ {
2436+
2437+ // Array of basisvalues.
2438+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2439+
2440+ // Declare helper variables.
2441+ unsigned int rr = 0;
2442+ unsigned int ss = 0;
2443+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2444+
2445+ // Compute basisvalues.
2446+ basisvalues[0] = 1.000000000000000;
2447+ basisvalues[1] = tmp0;
2448+ for (unsigned int r = 0; r < 1; r++)
2449+ {
2450+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
2451+ ss = r*(r + 1)/2;
2452+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2453+ }// end loop over 'r'
2454+ for (unsigned int r = 0; r < 2; r++)
2455+ {
2456+ for (unsigned int s = 0; s < 2 - r; s++)
2457+ {
2458+ rr = (r + s)*(r + s + 1)/2 + s;
2459+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2460+ }// end loop over 's'
2461+ }// end loop over 'r'
2462+
2463+ // Table(s) of coefficients.
2464+ static const double coefficients0[3] = \
2465+ {0.471404520791032, 0.000000000000000, 0.333333333333333};
2466+
2467+ // Tables of derivatives of the polynomial base (transpose).
2468+ static const double dmats0[3][3] = \
2469+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2470+ {4.898979485566356, 0.000000000000000, 0.000000000000000},
2471+ {0.000000000000000, 0.000000000000000, 0.000000000000000}};
2472+
2473+ static const double dmats1[3][3] = \
2474+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2475+ {2.449489742783178, 0.000000000000000, 0.000000000000000},
2476+ {4.242640687119285, 0.000000000000000, 0.000000000000000}};
2477+
2478+ // Compute reference derivatives.
2479+ // Declare pointer to array of derivatives on FIAT element.
2480+ double *derivatives = new double[num_derivatives];
2481+ for (unsigned int r = 0; r < num_derivatives; r++)
2482+ {
2483+ derivatives[r] = 0.000000000000000;
2484+ }// end loop over 'r'
2485+
2486+ // Declare derivative matrix (of polynomial basis).
2487+ double dmats[3][3] = \
2488+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2489+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
2490+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2491+
2492+ // Declare (auxiliary) derivative matrix (of polynomial basis).
2493+ double dmats_old[3][3] = \
2494+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2495+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
2496+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2497+
2498+ // Loop possible derivatives.
2499+ for (unsigned int r = 0; r < num_derivatives; r++)
2500+ {
2501+ // Resetting dmats values to compute next derivative.
2502+ for (unsigned int t = 0; t < 3; t++)
2503+ {
2504+ for (unsigned int u = 0; u < 3; u++)
2505+ {
2506+ dmats[t][u] = 0.000000000000000;
2507+ if (t == u)
2508+ {
2509+ dmats[t][u] = 1.000000000000000;
2510+ }
2511+
2512+ }// end loop over 'u'
2513+ }// end loop over 't'
2514+
2515+ // Looping derivative order to generate dmats.
2516+ for (unsigned int s = 0; s < n; s++)
2517+ {
2518+ // Updating dmats_old with new values and resetting dmats.
2519+ for (unsigned int t = 0; t < 3; t++)
2520+ {
2521+ for (unsigned int u = 0; u < 3; u++)
2522+ {
2523+ dmats_old[t][u] = dmats[t][u];
2524+ dmats[t][u] = 0.000000000000000;
2525+ }// end loop over 'u'
2526+ }// end loop over 't'
2527+
2528+ // Update dmats using an inner product.
2529+ if (combinations[r][s] == 0)
2530+ {
2531+ for (unsigned int t = 0; t < 3; t++)
2532+ {
2533+ for (unsigned int u = 0; u < 3; u++)
2534+ {
2535+ for (unsigned int tu = 0; tu < 3; tu++)
2536+ {
2537+ dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2538+ }// end loop over 'tu'
2539+ }// end loop over 'u'
2540+ }// end loop over 't'
2541+ }
2542+
2543+ if (combinations[r][s] == 1)
2544+ {
2545+ for (unsigned int t = 0; t < 3; t++)
2546+ {
2547+ for (unsigned int u = 0; u < 3; u++)
2548+ {
2549+ for (unsigned int tu = 0; tu < 3; tu++)
2550+ {
2551+ dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2552+ }// end loop over 'tu'
2553+ }// end loop over 'u'
2554+ }// end loop over 't'
2555+ }
2556+
2557+ }// end loop over 's'
2558+ for (unsigned int s = 0; s < 3; s++)
2559+ {
2560+ for (unsigned int t = 0; t < 3; t++)
2561+ {
2562+ derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2563+ }// end loop over 't'
2564+ }// end loop over 's'
2565+ }// end loop over 'r'
2566+
2567+ // Transform derivatives back to physical element
2568+ for (unsigned int r = 0; r < num_derivatives; r++)
2569+ {
2570+ for (unsigned int s = 0; s < num_derivatives; s++)
2571+ {
2572+ values[r] += transform[r][s]*derivatives[s];
2573+ }// end loop over 's'
2574+ }// end loop over 'r'
2575+
2576+ // Delete pointer to array of derivatives on FIAT element
2577+ delete [] derivatives;
2578+
2579+ // Delete pointer to array of combinations of derivatives and transform
2580+ for (unsigned int r = 0; r < num_derivatives; r++)
2581+ {
2582+ delete [] combinations[r];
2583+ }// end loop over 'r'
2584+ delete [] combinations;
2585+ for (unsigned int r = 0; r < num_derivatives; r++)
2586+ {
2587+ delete [] transform[r];
2588+ }// end loop over 'r'
2589+ delete [] transform;
2590+ break;
2591+ }
2592+ }
2593+
2594+}
2595+
2596+/// Evaluate order n derivatives of all basis functions at given point in cell
2597+void cahnhilliard2d_finite_element_1::evaluate_basis_derivatives_all(unsigned int n,
2598+ double* values,
2599+ const double* coordinates,
2600+ const ufc::cell& c) const
2601+{
2602+ // Compute number of derivatives.
2603+ unsigned int num_derivatives = 1;
2604+ for (unsigned int r = 0; r < n; r++)
2605+ {
2606+ num_derivatives *= 2;
2607+ }// end loop over 'r'
2608+
2609+ // Helper variable to hold values of a single dof.
2610+ double *dof_values = new double[num_derivatives];
2611+ for (unsigned int r = 0; r < num_derivatives; r++)
2612+ {
2613+ dof_values[r] = 0.000000000000000;
2614+ }// end loop over 'r'
2615+
2616+ // Loop dofs and call evaluate_basis_derivatives.
2617+ for (unsigned int r = 0; r < 3; r++)
2618+ {
2619+ evaluate_basis_derivatives(r, n, dof_values, coordinates, c);
2620+ for (unsigned int s = 0; s < num_derivatives; s++)
2621+ {
2622+ values[r*num_derivatives + s] = dof_values[s];
2623+ }// end loop over 's'
2624+ }// end loop over 'r'
2625+
2626+ // Delete pointer.
2627+ delete [] dof_values;
2628+}
2629+
2630+/// Evaluate linear functional for dof i on the function f
2631+double cahnhilliard2d_finite_element_1::evaluate_dof(unsigned int i,
2632+ const ufc::function& f,
2633+ const ufc::cell& c) const
2634+{
2635+ // Declare variables for result of evaluation.
2636+ double vals[1];
2637+
2638+ // Declare variable for physical coordinates.
2639+ double y[2];
2640+ const double * const * x = c.coordinates;
2641+ switch (i)
2642+ {
2643+ case 0:
2644+ {
2645+ y[0] = x[0][0];
2646+ y[1] = x[0][1];
2647+ f.evaluate(vals, y, c);
2648+ return vals[0];
2649+ break;
2650+ }
2651+ case 1:
2652+ {
2653+ y[0] = x[1][0];
2654+ y[1] = x[1][1];
2655+ f.evaluate(vals, y, c);
2656+ return vals[0];
2657+ break;
2658+ }
2659+ case 2:
2660+ {
2661+ y[0] = x[2][0];
2662+ y[1] = x[2][1];
2663+ f.evaluate(vals, y, c);
2664+ return vals[0];
2665+ break;
2666+ }
2667+ }
2668+
2669+ return 0.000000000000000;
2670+}
2671+
2672+/// Evaluate linear functionals for all dofs on the function f
2673+void cahnhilliard2d_finite_element_1::evaluate_dofs(double* values,
2674+ const ufc::function& f,
2675+ const ufc::cell& c) const
2676+{
2677+ // Declare variables for result of evaluation.
2678+ double vals[1];
2679+
2680+ // Declare variable for physical coordinates.
2681+ double y[2];
2682+ const double * const * x = c.coordinates;
2683+ y[0] = x[0][0];
2684+ y[1] = x[0][1];
2685+ f.evaluate(vals, y, c);
2686+ values[0] = vals[0];
2687+ y[0] = x[1][0];
2688+ y[1] = x[1][1];
2689+ f.evaluate(vals, y, c);
2690+ values[1] = vals[0];
2691+ y[0] = x[2][0];
2692+ y[1] = x[2][1];
2693+ f.evaluate(vals, y, c);
2694+ values[2] = vals[0];
2695+}
2696+
2697+/// Interpolate vertex values from dof values
2698+void cahnhilliard2d_finite_element_1::interpolate_vertex_values(double* vertex_values,
2699+ const double* dof_values,
2700+ const ufc::cell& c) const
2701+{
2702+ // Evaluate function and change variables
2703+ vertex_values[0] = dof_values[0];
2704+ vertex_values[1] = dof_values[1];
2705+ vertex_values[2] = dof_values[2];
2706+}
2707+
2708+/// Map coordinate xhat from reference cell to coordinate x in cell
2709+void cahnhilliard2d_finite_element_1::map_from_reference_cell(double* x,
2710+ const double* xhat,
2711+ const ufc::cell& c) const
2712+{
2713+ throw std::runtime_error("map_from_reference_cell not yet implemented (introduced in UFC 2.0).");
2714+}
2715+
2716+/// Map from coordinate x in cell to coordinate xhat in reference cell
2717+void cahnhilliard2d_finite_element_1::map_to_reference_cell(double* xhat,
2718+ const double* x,
2719+ const ufc::cell& c) const
2720+{
2721+ throw std::runtime_error("map_to_reference_cell not yet implemented (introduced in UFC 2.0).");
2722+}
2723+
2724+/// Return the number of sub elements (for a mixed element)
2725+unsigned int cahnhilliard2d_finite_element_1::num_sub_elements() const
2726+{
2727+ return 0;
2728+}
2729+
2730+/// Create a new finite element for sub element i (for a mixed element)
2731+ufc::finite_element* cahnhilliard2d_finite_element_1::create_sub_element(unsigned int i) const
2732+{
2733+ return 0;
2734+}
2735+
2736+/// Create a new class instance
2737+ufc::finite_element* cahnhilliard2d_finite_element_1::create() const
2738+{
2739+ return new cahnhilliard2d_finite_element_1();
2740+}
2741+
2742+
2743+/// Constructor
2744+cahnhilliard2d_finite_element_2::cahnhilliard2d_finite_element_2() : ufc::finite_element()
2745+{
2746+ // Do nothing
2747+}
2748+
2749+/// Destructor
2750+cahnhilliard2d_finite_element_2::~cahnhilliard2d_finite_element_2()
2751+{
2752+ // Do nothing
2753+}
2754+
2755+/// Return a string identifying the finite element
2756+const char* cahnhilliard2d_finite_element_2::signature() const
2757+{
2758+ return "MixedElement(*[FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1), FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1)], **{'value_shape': (2,) })";
2759+}
2760+
2761+/// Return the cell shape
2762+ufc::shape cahnhilliard2d_finite_element_2::cell_shape() const
2763+{
2764+ return ufc::triangle;
2765+}
2766+
2767+/// Return the topological dimension of the cell shape
2768+unsigned int cahnhilliard2d_finite_element_2::topological_dimension() const
2769+{
2770+ return 2;
2771+}
2772+
2773+/// Return the geometric dimension of the cell shape
2774+unsigned int cahnhilliard2d_finite_element_2::geometric_dimension() const
2775+{
2776+ return 2;
2777+}
2778+
2779+/// Return the dimension of the finite element function space
2780+unsigned int cahnhilliard2d_finite_element_2::space_dimension() const
2781+{
2782+ return 6;
2783+}
2784+
2785+/// Return the rank of the value space
2786+unsigned int cahnhilliard2d_finite_element_2::value_rank() const
2787+{
2788+ return 1;
2789+}
2790+
2791+/// Return the dimension of the value space for axis i
2792+unsigned int cahnhilliard2d_finite_element_2::value_dimension(unsigned int i) const
2793+{
2794+ switch (i)
2795+ {
2796+ case 0:
2797+ {
2798+ return 2;
2799+ break;
2800+ }
2801+ }
2802+
2803+ return 0;
2804+}
2805+
2806+/// Evaluate basis function i at given point in cell
2807+void cahnhilliard2d_finite_element_2::evaluate_basis(unsigned int i,
2808+ double* values,
2809+ const double* coordinates,
2810+ const ufc::cell& c) const
2811+{
2812+ // Extract vertex coordinates
2813+ const double * const * x = c.coordinates;
2814+
2815+ // Compute Jacobian of affine map from reference cell
2816+ const double J_00 = x[1][0] - x[0][0];
2817+ const double J_01 = x[2][0] - x[0][0];
2818+ const double J_10 = x[1][1] - x[0][1];
2819+ const double J_11 = x[2][1] - x[0][1];
2820+
2821+ // Compute determinant of Jacobian
2822+ double detJ = J_00*J_11 - J_01*J_10;
2823+
2824+ // Compute inverse of Jacobian
2825+
2826+ // Compute constants
2827+ const double C0 = x[1][0] + x[2][0];
2828+ const double C1 = x[1][1] + x[2][1];
2829+
2830+ // Get coordinates and map to the reference (FIAT) element
2831+ double X = (J_01*(C1 - 2.0*coordinates[1]) + J_11*(2.0*coordinates[0] - C0)) / detJ;
2832+ double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
2833+
2834+ // Reset values.
2835+ values[0] = 0.000000000000000;
2836+ values[1] = 0.000000000000000;
2837+ switch (i)
2838+ {
2839+ case 0:
2840+ {
2841+
2842+ // Array of basisvalues.
2843+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2844+
2845+ // Declare helper variables.
2846+ unsigned int rr = 0;
2847+ unsigned int ss = 0;
2848+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2849+
2850+ // Compute basisvalues.
2851+ basisvalues[0] = 1.000000000000000;
2852+ basisvalues[1] = tmp0;
2853+ for (unsigned int r = 0; r < 1; r++)
2854+ {
2855+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
2856+ ss = r*(r + 1)/2;
2857+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2858+ }// end loop over 'r'
2859+ for (unsigned int r = 0; r < 2; r++)
2860+ {
2861+ for (unsigned int s = 0; s < 2 - r; s++)
2862+ {
2863+ rr = (r + s)*(r + s + 1)/2 + s;
2864+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2865+ }// end loop over 's'
2866+ }// end loop over 'r'
2867+
2868+ // Table(s) of coefficients.
2869+ static const double coefficients0[3] = \
2870+ {0.471404520791032, -0.288675134594813, -0.166666666666667};
2871+
2872+ // Compute value(s).
2873+ for (unsigned int r = 0; r < 3; r++)
2874+ {
2875+ values[0] += coefficients0[r]*basisvalues[r];
2876+ }// end loop over 'r'
2877+ break;
2878+ }
2879+ case 1:
2880+ {
2881+
2882+ // Array of basisvalues.
2883+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2884+
2885+ // Declare helper variables.
2886+ unsigned int rr = 0;
2887+ unsigned int ss = 0;
2888+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2889+
2890+ // Compute basisvalues.
2891+ basisvalues[0] = 1.000000000000000;
2892+ basisvalues[1] = tmp0;
2893+ for (unsigned int r = 0; r < 1; r++)
2894+ {
2895+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
2896+ ss = r*(r + 1)/2;
2897+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2898+ }// end loop over 'r'
2899+ for (unsigned int r = 0; r < 2; r++)
2900+ {
2901+ for (unsigned int s = 0; s < 2 - r; s++)
2902+ {
2903+ rr = (r + s)*(r + s + 1)/2 + s;
2904+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2905+ }// end loop over 's'
2906+ }// end loop over 'r'
2907+
2908+ // Table(s) of coefficients.
2909+ static const double coefficients0[3] = \
2910+ {0.471404520791032, 0.288675134594813, -0.166666666666667};
2911+
2912+ // Compute value(s).
2913+ for (unsigned int r = 0; r < 3; r++)
2914+ {
2915+ values[0] += coefficients0[r]*basisvalues[r];
2916+ }// end loop over 'r'
2917+ break;
2918+ }
2919+ case 2:
2920+ {
2921+
2922+ // Array of basisvalues.
2923+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2924+
2925+ // Declare helper variables.
2926+ unsigned int rr = 0;
2927+ unsigned int ss = 0;
2928+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2929+
2930+ // Compute basisvalues.
2931+ basisvalues[0] = 1.000000000000000;
2932+ basisvalues[1] = tmp0;
2933+ for (unsigned int r = 0; r < 1; r++)
2934+ {
2935+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
2936+ ss = r*(r + 1)/2;
2937+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2938+ }// end loop over 'r'
2939+ for (unsigned int r = 0; r < 2; r++)
2940+ {
2941+ for (unsigned int s = 0; s < 2 - r; s++)
2942+ {
2943+ rr = (r + s)*(r + s + 1)/2 + s;
2944+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2945+ }// end loop over 's'
2946+ }// end loop over 'r'
2947+
2948+ // Table(s) of coefficients.
2949+ static const double coefficients0[3] = \
2950+ {0.471404520791032, 0.000000000000000, 0.333333333333333};
2951+
2952+ // Compute value(s).
2953+ for (unsigned int r = 0; r < 3; r++)
2954+ {
2955+ values[0] += coefficients0[r]*basisvalues[r];
2956+ }// end loop over 'r'
2957+ break;
2958+ }
2959+ case 3:
2960+ {
2961+
2962+ // Array of basisvalues.
2963+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2964+
2965+ // Declare helper variables.
2966+ unsigned int rr = 0;
2967+ unsigned int ss = 0;
2968+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2969+
2970+ // Compute basisvalues.
2971+ basisvalues[0] = 1.000000000000000;
2972+ basisvalues[1] = tmp0;
2973+ for (unsigned int r = 0; r < 1; r++)
2974+ {
2975+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
2976+ ss = r*(r + 1)/2;
2977+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2978+ }// end loop over 'r'
2979+ for (unsigned int r = 0; r < 2; r++)
2980+ {
2981+ for (unsigned int s = 0; s < 2 - r; s++)
2982+ {
2983+ rr = (r + s)*(r + s + 1)/2 + s;
2984+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2985+ }// end loop over 's'
2986+ }// end loop over 'r'
2987+
2988+ // Table(s) of coefficients.
2989+ static const double coefficients0[3] = \
2990+ {0.471404520791032, -0.288675134594813, -0.166666666666667};
2991+
2992+ // Compute value(s).
2993+ for (unsigned int r = 0; r < 3; r++)
2994+ {
2995+ values[1] += coefficients0[r]*basisvalues[r];
2996+ }// end loop over 'r'
2997+ break;
2998+ }
2999+ case 4:
3000+ {
3001+
3002+ // Array of basisvalues.
3003+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
3004+
3005+ // Declare helper variables.
3006+ unsigned int rr = 0;
3007+ unsigned int ss = 0;
3008+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
3009+
3010+ // Compute basisvalues.
3011+ basisvalues[0] = 1.000000000000000;
3012+ basisvalues[1] = tmp0;
3013+ for (unsigned int r = 0; r < 1; r++)
3014+ {
3015+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
3016+ ss = r*(r + 1)/2;
3017+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
3018+ }// end loop over 'r'
3019+ for (unsigned int r = 0; r < 2; r++)
3020+ {
3021+ for (unsigned int s = 0; s < 2 - r; s++)
3022+ {
3023+ rr = (r + s)*(r + s + 1)/2 + s;
3024+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
3025+ }// end loop over 's'
3026+ }// end loop over 'r'
3027+
3028+ // Table(s) of coefficients.
3029+ static const double coefficients0[3] = \
3030+ {0.471404520791032, 0.288675134594813, -0.166666666666667};
3031+
3032+ // Compute value(s).
3033+ for (unsigned int r = 0; r < 3; r++)
3034+ {
3035+ values[1] += coefficients0[r]*basisvalues[r];
3036+ }// end loop over 'r'
3037+ break;
3038+ }
3039+ case 5:
3040+ {
3041+
3042+ // Array of basisvalues.
3043+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
3044+
3045+ // Declare helper variables.
3046+ unsigned int rr = 0;
3047+ unsigned int ss = 0;
3048+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
3049+
3050+ // Compute basisvalues.
3051+ basisvalues[0] = 1.000000000000000;
3052+ basisvalues[1] = tmp0;
3053+ for (unsigned int r = 0; r < 1; r++)
3054+ {
3055+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
3056+ ss = r*(r + 1)/2;
3057+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
3058+ }// end loop over 'r'
3059+ for (unsigned int r = 0; r < 2; r++)
3060+ {
3061+ for (unsigned int s = 0; s < 2 - r; s++)
3062+ {
3063+ rr = (r + s)*(r + s + 1)/2 + s;
3064+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
3065+ }// end loop over 's'
3066+ }// end loop over 'r'
3067+
3068+ // Table(s) of coefficients.
3069+ static const double coefficients0[3] = \
3070+ {0.471404520791032, 0.000000000000000, 0.333333333333333};
3071+
3072+ // Compute value(s).
3073+ for (unsigned int r = 0; r < 3; r++)
3074+ {
3075+ values[1] += coefficients0[r]*basisvalues[r];
3076+ }// end loop over 'r'
3077+ break;
3078+ }
3079+ }
3080+
3081+}
3082+
3083+/// Evaluate all basis functions at given point in cell
3084+void cahnhilliard2d_finite_element_2::evaluate_basis_all(double* values,
3085+ const double* coordinates,
3086+ const ufc::cell& c) const
3087+{
3088+ // Helper variable to hold values of a single dof.
3089+ double dof_values[2] = {0.000000000000000, 0.000000000000000};
3090+
3091+ // Loop dofs and call evaluate_basis.
3092+ for (unsigned int r = 0; r < 6; r++)
3093+ {
3094+ evaluate_basis(r, dof_values, coordinates, c);
3095+ for (unsigned int s = 0; s < 2; s++)
3096+ {
3097+ values[r*2 + s] = dof_values[s];
3098+ }// end loop over 's'
3099+ }// end loop over 'r'
3100+}
3101+
3102+/// Evaluate order n derivatives of basis function i at given point in cell
3103+void cahnhilliard2d_finite_element_2::evaluate_basis_derivatives(unsigned int i,
3104+ unsigned int n,
3105+ double* values,
3106+ const double* coordinates,
3107+ const ufc::cell& c) const
3108+{
3109+ // Extract vertex coordinates
3110+ const double * const * x = c.coordinates;
3111+
3112+ // Compute Jacobian of affine map from reference cell
3113+ const double J_00 = x[1][0] - x[0][0];
3114+ const double J_01 = x[2][0] - x[0][0];
3115+ const double J_10 = x[1][1] - x[0][1];
3116+ const double J_11 = x[2][1] - x[0][1];
3117+
3118+ // Compute determinant of Jacobian
3119+ double detJ = J_00*J_11 - J_01*J_10;
3120+
3121+ // Compute inverse of Jacobian
3122+ const double K_00 = J_11 / detJ;
3123+ const double K_01 = -J_01 / detJ;
3124+ const double K_10 = -J_10 / detJ;
3125+ const double K_11 = J_00 / detJ;
3126+
3127+ // Compute constants
3128+ const double C0 = x[1][0] + x[2][0];
3129+ const double C1 = x[1][1] + x[2][1];
3130+
3131+ // Get coordinates and map to the reference (FIAT) element
3132+ double X = (J_01*(C1 - 2.0*coordinates[1]) + J_11*(2.0*coordinates[0] - C0)) / detJ;
3133+ double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
3134+
3135+ // Compute number of derivatives.
3136+ unsigned int num_derivatives = 1;
3137+ for (unsigned int r = 0; r < n; r++)
3138+ {
3139+ num_derivatives *= 2;
3140+ }// end loop over 'r'
3141+
3142+ // Declare pointer to two dimensional array that holds combinations of derivatives and initialise
3143+ unsigned int **combinations = new unsigned int *[num_derivatives];
3144+ for (unsigned int row = 0; row < num_derivatives; row++)
3145+ {
3146+ combinations[row] = new unsigned int [n];
3147+ for (unsigned int col = 0; col < n; col++)
3148+ combinations[row][col] = 0;
3149+ }
3150+
3151+ // Generate combinations of derivatives
3152+ for (unsigned int row = 1; row < num_derivatives; row++)
3153+ {
3154+ for (unsigned int num = 0; num < row; num++)
3155+ {
3156+ for (unsigned int col = n-1; col+1 > 0; col--)
3157+ {
3158+ if (combinations[row][col] + 1 > 1)
3159+ combinations[row][col] = 0;
3160+ else
3161+ {
3162+ combinations[row][col] += 1;
3163+ break;
3164+ }
3165+ }
3166+ }
3167+ }
3168+
3169+ // Compute inverse of Jacobian
3170+ const double Jinv[2][2] = {{K_00, K_01}, {K_10, K_11}};
3171+
3172+ // Declare transformation matrix
3173+ // Declare pointer to two dimensional array and initialise
3174+ double **transform = new double *[num_derivatives];
3175+
3176+ for (unsigned int j = 0; j < num_derivatives; j++)
3177+ {
3178+ transform[j] = new double [num_derivatives];
3179+ for (unsigned int k = 0; k < num_derivatives; k++)
3180+ transform[j][k] = 1;
3181+ }
3182+
3183+ // Construct transformation matrix
3184+ for (unsigned int row = 0; row < num_derivatives; row++)
3185+ {
3186+ for (unsigned int col = 0; col < num_derivatives; col++)
3187+ {
3188+ for (unsigned int k = 0; k < n; k++)
3189+ transform[row][col] *= Jinv[combinations[col][k]][combinations[row][k]];
3190+ }
3191+ }
3192+
3193+ // Reset values. Assuming that values is always an array.
3194+ for (unsigned int r = 0; r < 2*num_derivatives; r++)
3195+ {
3196+ values[r] = 0.000000000000000;
3197+ }// end loop over 'r'
3198+
3199+ switch (i)
3200+ {
3201+ case 0:
3202+ {
3203+
3204+ // Array of basisvalues.
3205+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
3206+
3207+ // Declare helper variables.
3208+ unsigned int rr = 0;
3209+ unsigned int ss = 0;
3210+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
3211+
3212+ // Compute basisvalues.
3213+ basisvalues[0] = 1.000000000000000;
3214+ basisvalues[1] = tmp0;
3215+ for (unsigned int r = 0; r < 1; r++)
3216+ {
3217+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
3218+ ss = r*(r + 1)/2;
3219+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
3220+ }// end loop over 'r'
3221+ for (unsigned int r = 0; r < 2; r++)
3222+ {
3223+ for (unsigned int s = 0; s < 2 - r; s++)
3224+ {
3225+ rr = (r + s)*(r + s + 1)/2 + s;
3226+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
3227+ }// end loop over 's'
3228+ }// end loop over 'r'
3229+
3230+ // Table(s) of coefficients.
3231+ static const double coefficients0[3] = \
3232+ {0.471404520791032, -0.288675134594813, -0.166666666666667};
3233+
3234+ // Tables of derivatives of the polynomial base (transpose).
3235+ static const double dmats0[3][3] = \
3236+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
3237+ {4.898979485566356, 0.000000000000000, 0.000000000000000},
3238+ {0.000000000000000, 0.000000000000000, 0.000000000000000}};
3239+
3240+ static const double dmats1[3][3] = \
3241+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
3242+ {2.449489742783178, 0.000000000000000, 0.000000000000000},
3243+ {4.242640687119285, 0.000000000000000, 0.000000000000000}};
3244+
3245+ // Compute reference derivatives.
3246+ // Declare pointer to array of derivatives on FIAT element.
3247+ double *derivatives = new double[num_derivatives];
3248+ for (unsigned int r = 0; r < num_derivatives; r++)
3249+ {
3250+ derivatives[r] = 0.000000000000000;
3251+ }// end loop over 'r'
3252+
3253+ // Declare derivative matrix (of polynomial basis).
3254+ double dmats[3][3] = \
3255+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
3256+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
3257+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
3258+
3259+ // Declare (auxiliary) derivative matrix (of polynomial basis).
3260+ double dmats_old[3][3] = \
3261+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
3262+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
3263+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
3264+
3265+ // Loop possible derivatives.
3266+ for (unsigned int r = 0; r < num_derivatives; r++)
3267+ {
3268+ // Resetting dmats values to compute next derivative.
3269+ for (unsigned int t = 0; t < 3; t++)
3270+ {
3271+ for (unsigned int u = 0; u < 3; u++)
3272+ {
3273+ dmats[t][u] = 0.000000000000000;
3274+ if (t == u)
3275+ {
3276+ dmats[t][u] = 1.000000000000000;
3277+ }
3278+
3279+ }// end loop over 'u'
3280+ }// end loop over 't'
3281+
3282+ // Looping derivative order to generate dmats.
3283+ for (unsigned int s = 0; s < n; s++)
3284+ {
3285+ // Updating dmats_old with new values and resetting dmats.
3286+ for (unsigned int t = 0; t < 3; t++)
3287+ {
3288+ for (unsigned int u = 0; u < 3; u++)
3289+ {
3290+ dmats_old[t][u] = dmats[t][u];
3291+ dmats[t][u] = 0.000000000000000;
3292+ }// end loop over 'u'
3293+ }// end loop over 't'
3294+
3295+ // Update dmats using an inner product.
3296+ if (combinations[r][s] == 0)
3297+ {
3298+ for (unsigned int t = 0; t < 3; t++)
3299+ {
3300+ for (unsigned int u = 0; u < 3; u++)
3301+ {
3302+ for (unsigned int tu = 0; tu < 3; tu++)
3303+ {
3304+ dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
3305+ }// end loop over 'tu'
3306+ }// end loop over 'u'
3307+ }// end loop over 't'
3308+ }
3309+
3310+ if (combinations[r][s] == 1)
3311+ {
3312+ for (unsigned int t = 0; t < 3; t++)
3313+ {
3314+ for (unsigned int u = 0; u < 3; u++)
3315+ {
3316+ for (unsigned int tu = 0; tu < 3; tu++)
3317+ {
3318+ dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
3319+ }// end loop over 'tu'
3320+ }// end loop over 'u'
3321+ }// end loop over 't'
3322+ }
3323+
3324+ }// end loop over 's'
3325+ for (unsigned int s = 0; s < 3; s++)
3326+ {
3327+ for (unsigned int t = 0; t < 3; t++)
3328+ {
3329+ derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
3330+ }// end loop over 't'
3331+ }// end loop over 's'
3332+ }// end loop over 'r'
3333+
3334+ // Transform derivatives back to physical element
3335+ for (unsigned int r = 0; r < num_derivatives; r++)
3336+ {
3337+ for (unsigned int s = 0; s < num_derivatives; s++)
3338+ {
3339+ values[r] += transform[r][s]*derivatives[s];
3340+ }// end loop over 's'
3341+ }// end loop over 'r'
3342+
3343+ // Delete pointer to array of derivatives on FIAT element
3344+ delete [] derivatives;
3345+
3346+ // Delete pointer to array of combinations of derivatives and transform
3347+ for (unsigned int r = 0; r < num_derivatives; r++)
3348+ {
3349+ delete [] combinations[r];
3350+ }// end loop over 'r'
3351+ delete [] combinations;
3352+ for (unsigned int r = 0; r < num_derivatives; r++)
3353+ {
3354+ delete [] transform[r];
3355+ }// end loop over 'r'
3356+ delete [] transform;
3357+ break;
3358+ }
3359+ case 1:
3360+ {
3361+
3362+ // Array of basisvalues.
3363+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
3364+
3365+ // Declare helper variables.
3366+ unsigned int rr = 0;
3367+ unsigned int ss = 0;
3368+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
3369+
3370+ // Compute basisvalues.
3371+ basisvalues[0] = 1.000000000000000;
3372+ basisvalues[1] = tmp0;
3373+ for (unsigned int r = 0; r < 1; r++)
3374+ {
3375+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
3376+ ss = r*(r + 1)/2;
3377+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
3378+ }// end loop over 'r'
3379+ for (unsigned int r = 0; r < 2; r++)
3380+ {
3381+ for (unsigned int s = 0; s < 2 - r; s++)
3382+ {
3383+ rr = (r + s)*(r + s + 1)/2 + s;
3384+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
3385+ }// end loop over 's'
3386+ }// end loop over 'r'
3387+
3388+ // Table(s) of coefficients.
3389+ static const double coefficients0[3] = \
3390+ {0.471404520791032, 0.288675134594813, -0.166666666666667};
3391+
3392+ // Tables of derivatives of the polynomial base (transpose).
3393+ static const double dmats0[3][3] = \
3394+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
3395+ {4.898979485566356, 0.000000000000000, 0.000000000000000},
3396+ {0.000000000000000, 0.000000000000000, 0.000000000000000}};
3397+
3398+ static const double dmats1[3][3] = \
3399+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
3400+ {2.449489742783178, 0.000000000000000, 0.000000000000000},
3401+ {4.242640687119285, 0.000000000000000, 0.000000000000000}};
3402+
3403+ // Compute reference derivatives.
3404+ // Declare pointer to array of derivatives on FIAT element.
3405+ double *derivatives = new double[num_derivatives];
3406+ for (unsigned int r = 0; r < num_derivatives; r++)
3407+ {
3408+ derivatives[r] = 0.000000000000000;
3409+ }// end loop over 'r'
3410+
3411+ // Declare derivative matrix (of polynomial basis).
3412+ double dmats[3][3] = \
3413+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
3414+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
3415+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
3416+
3417+ // Declare (auxiliary) derivative matrix (of polynomial basis).
3418+ double dmats_old[3][3] = \
3419+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
3420+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
3421+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
3422+
3423+ // Loop possible derivatives.
3424+ for (unsigned int r = 0; r < num_derivatives; r++)
3425+ {
3426+ // Resetting dmats values to compute next derivative.
3427+ for (unsigned int t = 0; t < 3; t++)
3428+ {
3429+ for (unsigned int u = 0; u < 3; u++)
3430+ {
3431+ dmats[t][u] = 0.000000000000000;
3432+ if (t == u)
3433+ {
3434+ dmats[t][u] = 1.000000000000000;
3435+ }
3436+
3437+ }// end loop over 'u'
3438+ }// end loop over 't'
3439+
3440+ // Looping derivative order to generate dmats.
3441+ for (unsigned int s = 0; s < n; s++)
3442+ {
3443+ // Updating dmats_old with new values and resetting dmats.
3444+ for (unsigned int t = 0; t < 3; t++)
3445+ {
3446+ for (unsigned int u = 0; u < 3; u++)
3447+ {
3448+ dmats_old[t][u] = dmats[t][u];
3449+ dmats[t][u] = 0.000000000000000;
3450+ }// end loop over 'u'
3451+ }// end loop over 't'
3452+
3453+ // Update dmats using an inner product.
3454+ if (combinations[r][s] == 0)
3455+ {
3456+ for (unsigned int t = 0; t < 3; t++)
3457+ {
3458+ for (unsigned int u = 0; u < 3; u++)
3459+ {
3460+ for (unsigned int tu = 0; tu < 3; tu++)
3461+ {
3462+ dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
3463+ }// end loop over 'tu'
3464+ }// end loop over 'u'
3465+ }// end loop over 't'
3466+ }
3467+
3468+ if (combinations[r][s] == 1)
3469+ {
3470+ for (unsigned int t = 0; t < 3; t++)
3471+ {
3472+ for (unsigned int u = 0; u < 3; u++)
3473+ {
3474+ for (unsigned int tu = 0; tu < 3; tu++)
3475+ {
3476+ dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
3477+ }// end loop over 'tu'
3478+ }// end loop over 'u'
3479+ }// end loop over 't'
3480+ }
3481+
3482+ }// end loop over 's'
3483+ for (unsigned int s = 0; s < 3; s++)
3484+ {
3485+ for (unsigned int t = 0; t < 3; t++)
3486+ {
3487+ derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
3488+ }// end loop over 't'
3489+ }// end loop over 's'
3490+ }// end loop over 'r'
3491+
3492+ // Transform derivatives back to physical element
3493+ for (unsigned int r = 0; r < num_derivatives; r++)
3494+ {
3495+ for (unsigned int s = 0; s < num_derivatives; s++)
3496+ {
3497+ values[r] += transform[r][s]*derivatives[s];
3498+ }// end loop over 's'
3499+ }// end loop over 'r'
3500+
3501+ // Delete pointer to array of derivatives on FIAT element
3502+ delete [] derivatives;
3503+
3504+ // Delete pointer to array of combinations of derivatives and transform
3505+ for (unsigned int r = 0; r < num_derivatives; r++)
3506+ {
3507+ delete [] combinations[r];
3508+ }// end loop over 'r'
3509+ delete [] combinations;
3510+ for (unsigned int r = 0; r < num_derivatives; r++)
3511+ {
3512+ delete [] transform[r];
3513+ }// end loop over 'r'
3514+ delete [] transform;
3515+ break;
3516+ }
3517+ case 2:
3518+ {
3519+
3520+ // Array of basisvalues.
3521+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
3522+
3523+ // Declare helper variables.
3524+ unsigned int rr = 0;
3525+ unsigned int ss = 0;
3526+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
3527+
3528+ // Compute basisvalues.
3529+ basisvalues[0] = 1.000000000000000;
3530+ basisvalues[1] = tmp0;
3531+ for (unsigned int r = 0; r < 1; r++)
3532+ {
3533+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
3534+ ss = r*(r + 1)/2;
3535+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
3536+ }// end loop over 'r'
3537+ for (unsigned int r = 0; r < 2; r++)
3538+ {
3539+ for (unsigned int s = 0; s < 2 - r; s++)
3540+ {
3541+ rr = (r + s)*(r + s + 1)/2 + s;
3542+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
3543+ }// end loop over 's'
3544+ }// end loop over 'r'
3545+
3546+ // Table(s) of coefficients.
3547+ static const double coefficients0[3] = \
3548+ {0.471404520791032, 0.000000000000000, 0.333333333333333};
3549+
3550+ // Tables of derivatives of the polynomial base (transpose).
3551+ static const double dmats0[3][3] = \
3552+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
3553+ {4.898979485566356, 0.000000000000000, 0.000000000000000},
3554+ {0.000000000000000, 0.000000000000000, 0.000000000000000}};
3555+
3556+ static const double dmats1[3][3] = \
3557+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
3558+ {2.449489742783178, 0.000000000000000, 0.000000000000000},
3559+ {4.242640687119285, 0.000000000000000, 0.000000000000000}};
3560+
3561+ // Compute reference derivatives.
3562+ // Declare pointer to array of derivatives on FIAT element.
3563+ double *derivatives = new double[num_derivatives];
3564+ for (unsigned int r = 0; r < num_derivatives; r++)
3565+ {
3566+ derivatives[r] = 0.000000000000000;
3567+ }// end loop over 'r'
3568+
3569+ // Declare derivative matrix (of polynomial basis).
3570+ double dmats[3][3] = \
3571+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
3572+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
3573+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
3574+
3575+ // Declare (auxiliary) derivative matrix (of polynomial basis).
3576+ double dmats_old[3][3] = \
3577+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
3578+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
3579+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
3580+
3581+ // Loop possible derivatives.
3582+ for (unsigned int r = 0; r < num_derivatives; r++)
3583+ {
3584+ // Resetting dmats values to compute next derivative.
3585+ for (unsigned int t = 0; t < 3; t++)
3586+ {
3587+ for (unsigned int u = 0; u < 3; u++)
3588+ {
3589+ dmats[t][u] = 0.000000000000000;
3590+ if (t == u)
3591+ {
3592+ dmats[t][u] = 1.000000000000000;
3593+ }
3594+
3595+ }// end loop over 'u'
3596+ }// end loop over 't'
3597+
3598+ // Looping derivative order to generate dmats.
3599+ for (unsigned int s = 0; s < n; s++)
3600+ {
3601+ // Updating dmats_old with new values and resetting dmats.
3602+ for (unsigned int t = 0; t < 3; t++)
3603+ {
3604+ for (unsigned int u = 0; u < 3; u++)
3605+ {
3606+ dmats_old[t][u] = dmats[t][u];
3607+ dmats[t][u] = 0.000000000000000;
3608+ }// end loop over 'u'
3609+ }// end loop over 't'
3610+
3611+ // Update dmats using an inner product.
3612+ if (combinations[r][s] == 0)
3613+ {
3614+ for (unsigned int t = 0; t < 3; t++)
3615+ {
3616+ for (unsigned int u = 0; u < 3; u++)
3617+ {
3618+ for (unsigned int tu = 0; tu < 3; tu++)
3619+ {
3620+ dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
3621+ }// end loop over 'tu'
3622+ }// end loop over 'u'
3623+ }// end loop over 't'
3624+ }
3625+
3626+ if (combinations[r][s] == 1)
3627+ {
3628+ for (unsigned int t = 0; t < 3; t++)
3629+ {
3630+ for (unsigned int u = 0; u < 3; u++)
3631+ {
3632+ for (unsigned int tu = 0; tu < 3; tu++)
3633+ {
3634+ dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
3635+ }// end loop over 'tu'
3636+ }// end loop over 'u'
3637+ }// end loop over 't'
3638+ }
3639+
3640+ }// end loop over 's'
3641+ for (unsigned int s = 0; s < 3; s++)
3642+ {
3643+ for (unsigned int t = 0; t < 3; t++)
3644+ {
3645+ derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
3646+ }// end loop over 't'
3647+ }// end loop over 's'
3648+ }// end loop over 'r'
3649+
3650+ // Transform derivatives back to physical element
3651+ for (unsigned int r = 0; r < num_derivatives; r++)
3652+ {
3653+ for (unsigned int s = 0; s < num_derivatives; s++)
3654+ {
3655+ values[r] += transform[r][s]*derivatives[s];
3656+ }// end loop over 's'
3657+ }// end loop over 'r'
3658+
3659+ // Delete pointer to array of derivatives on FIAT element
3660+ delete [] derivatives;
3661+
3662+ // Delete pointer to array of combinations of derivatives and transform
3663+ for (unsigned int r = 0; r < num_derivatives; r++)
3664+ {
3665+ delete [] combinations[r];
3666+ }// end loop over 'r'
3667+ delete [] combinations;
3668+ for (unsigned int r = 0; r < num_derivatives; r++)
3669+ {
3670+ delete [] transform[r];
3671+ }// end loop over 'r'
3672+ delete [] transform;
3673+ break;
3674+ }
3675+ case 3:
3676+ {
3677+
3678+ // Array of basisvalues.
3679+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
3680+
3681+ // Declare helper variables.
3682+ unsigned int rr = 0;
3683+ unsigned int ss = 0;
3684+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
3685+
3686+ // Compute basisvalues.
3687+ basisvalues[0] = 1.000000000000000;
3688+ basisvalues[1] = tmp0;
3689+ for (unsigned int r = 0; r < 1; r++)
3690+ {
3691+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
3692+ ss = r*(r + 1)/2;
3693+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
3694+ }// end loop over 'r'
3695+ for (unsigned int r = 0; r < 2; r++)
3696+ {
3697+ for (unsigned int s = 0; s < 2 - r; s++)
3698+ {
3699+ rr = (r + s)*(r + s + 1)/2 + s;
3700+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
3701+ }// end loop over 's'
3702+ }// end loop over 'r'
3703+
3704+ // Table(s) of coefficients.
3705+ static const double coefficients0[3] = \
3706+ {0.471404520791032, -0.288675134594813, -0.166666666666667};
3707+
3708+ // Tables of derivatives of the polynomial base (transpose).
3709+ static const double dmats0[3][3] = \
3710+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
3711+ {4.898979485566356, 0.000000000000000, 0.000000000000000},
3712+ {0.000000000000000, 0.000000000000000, 0.000000000000000}};
3713+
3714+ static const double dmats1[3][3] = \
3715+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
3716+ {2.449489742783178, 0.000000000000000, 0.000000000000000},
3717+ {4.242640687119285, 0.000000000000000, 0.000000000000000}};
3718+
3719+ // Compute reference derivatives.
3720+ // Declare pointer to array of derivatives on FIAT element.
3721+ double *derivatives = new double[num_derivatives];
3722+ for (unsigned int r = 0; r < num_derivatives; r++)
3723+ {
3724+ derivatives[r] = 0.000000000000000;
3725+ }// end loop over 'r'
3726+
3727+ // Declare derivative matrix (of polynomial basis).
3728+ double dmats[3][3] = \
3729+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
3730+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
3731+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
3732+
3733+ // Declare (auxiliary) derivative matrix (of polynomial basis).
3734+ double dmats_old[3][3] = \
3735+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
3736+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
3737+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
3738+
3739+ // Loop possible derivatives.
3740+ for (unsigned int r = 0; r < num_derivatives; r++)
3741+ {
3742+ // Resetting dmats values to compute next derivative.
3743+ for (unsigned int t = 0; t < 3; t++)
3744+ {
3745+ for (unsigned int u = 0; u < 3; u++)
3746+ {
3747+ dmats[t][u] = 0.000000000000000;
3748+ if (t == u)
3749+ {
3750+ dmats[t][u] = 1.000000000000000;
3751+ }
3752+
3753+ }// end loop over 'u'
3754+ }// end loop over 't'
3755+
3756+ // Looping derivative order to generate dmats.
3757+ for (unsigned int s = 0; s < n; s++)
3758+ {
3759+ // Updating dmats_old with new values and resetting dmats.
3760+ for (unsigned int t = 0; t < 3; t++)
3761+ {
3762+ for (unsigned int u = 0; u < 3; u++)
3763+ {
3764+ dmats_old[t][u] = dmats[t][u];
3765+ dmats[t][u] = 0.000000000000000;
3766+ }// end loop over 'u'
3767+ }// end loop over 't'
3768+
3769+ // Update dmats using an inner product.
3770+ if (combinations[r][s] == 0)
3771+ {
3772+ for (unsigned int t = 0; t < 3; t++)
3773+ {
3774+ for (unsigned int u = 0; u < 3; u++)
3775+ {
3776+ for (unsigned int tu = 0; tu < 3; tu++)
3777+ {
3778+ dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
3779+ }// end loop over 'tu'
3780+ }// end loop over 'u'
3781+ }// end loop over 't'
3782+ }
3783+
3784+ if (combinations[r][s] == 1)
3785+ {
3786+ for (unsigned int t = 0; t < 3; t++)
3787+ {
3788+ for (unsigned int u = 0; u < 3; u++)
3789+ {
3790+ for (unsigned int tu = 0; tu < 3; tu++)
3791+ {
3792+ dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
3793+ }// end loop over 'tu'
3794+ }// end loop over 'u'
3795+ }// end loop over 't'
3796+ }
3797+
3798+ }// end loop over 's'
3799+ for (unsigned int s = 0; s < 3; s++)
3800+ {
3801+ for (unsigned int t = 0; t < 3; t++)
3802+ {
3803+ derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
3804+ }// end loop over 't'
3805+ }// end loop over 's'
3806+ }// end loop over 'r'
3807+
3808+ // Transform derivatives back to physical element
3809+ for (unsigned int r = 0; r < num_derivatives; r++)
3810+ {
3811+ for (unsigned int s = 0; s < num_derivatives; s++)
3812+ {
3813+ values[num_derivatives + r] += transform[r][s]*derivatives[s];
3814+ }// end loop over 's'
3815+ }// end loop over 'r'
3816+
3817+ // Delete pointer to array of derivatives on FIAT element
3818+ delete [] derivatives;
3819+
3820+ // Delete pointer to array of combinations of derivatives and transform
3821+ for (unsigned int r = 0; r < num_derivatives; r++)
3822+ {
3823+ delete [] combinations[r];
3824+ }// end loop over 'r'
3825+ delete [] combinations;
3826+ for (unsigned int r = 0; r < num_derivatives; r++)
3827+ {
3828+ delete [] transform[r];
3829+ }// end loop over 'r'
3830+ delete [] transform;
3831+ break;
3832+ }
3833+ case 4:
3834+ {
3835+
3836+ // Array of basisvalues.
3837+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
3838+
3839+ // Declare helper variables.
3840+ unsigned int rr = 0;
3841+ unsigned int ss = 0;
3842+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
3843+
3844+ // Compute basisvalues.
3845+ basisvalues[0] = 1.000000000000000;
3846+ basisvalues[1] = tmp0;
3847+ for (unsigned int r = 0; r < 1; r++)
3848+ {
3849+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
3850+ ss = r*(r + 1)/2;
3851+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
3852+ }// end loop over 'r'
3853+ for (unsigned int r = 0; r < 2; r++)
3854+ {
3855+ for (unsigned int s = 0; s < 2 - r; s++)
3856+ {
3857+ rr = (r + s)*(r + s + 1)/2 + s;
3858+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
3859+ }// end loop over 's'
3860+ }// end loop over 'r'
3861+
3862+ // Table(s) of coefficients.
3863+ static const double coefficients0[3] = \
3864+ {0.471404520791032, 0.288675134594813, -0.166666666666667};
3865+
3866+ // Tables of derivatives of the polynomial base (transpose).
3867+ static const double dmats0[3][3] = \
3868+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
3869+ {4.898979485566356, 0.000000000000000, 0.000000000000000},
3870+ {0.000000000000000, 0.000000000000000, 0.000000000000000}};
3871+
3872+ static const double dmats1[3][3] = \
3873+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
3874+ {2.449489742783178, 0.000000000000000, 0.000000000000000},
3875+ {4.242640687119285, 0.000000000000000, 0.000000000000000}};
3876+
3877+ // Compute reference derivatives.
3878+ // Declare pointer to array of derivatives on FIAT element.
3879+ double *derivatives = new double[num_derivatives];
3880+ for (unsigned int r = 0; r < num_derivatives; r++)
3881+ {
3882+ derivatives[r] = 0.000000000000000;
3883+ }// end loop over 'r'
3884+
3885+ // Declare derivative matrix (of polynomial basis).
3886+ double dmats[3][3] = \
3887+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
3888+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
3889+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
3890+
3891+ // Declare (auxiliary) derivative matrix (of polynomial basis).
3892+ double dmats_old[3][3] = \
3893+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
3894+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
3895+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
3896+
3897+ // Loop possible derivatives.
3898+ for (unsigned int r = 0; r < num_derivatives; r++)
3899+ {
3900+ // Resetting dmats values to compute next derivative.
3901+ for (unsigned int t = 0; t < 3; t++)
3902+ {
3903+ for (unsigned int u = 0; u < 3; u++)
3904+ {
3905+ dmats[t][u] = 0.000000000000000;
3906+ if (t == u)
3907+ {
3908+ dmats[t][u] = 1.000000000000000;
3909+ }
3910+
3911+ }// end loop over 'u'
3912+ }// end loop over 't'
3913+
3914+ // Looping derivative order to generate dmats.
3915+ for (unsigned int s = 0; s < n; s++)
3916+ {
3917+ // Updating dmats_old with new values and resetting dmats.
3918+ for (unsigned int t = 0; t < 3; t++)
3919+ {
3920+ for (unsigned int u = 0; u < 3; u++)
3921+ {
3922+ dmats_old[t][u] = dmats[t][u];
3923+ dmats[t][u] = 0.000000000000000;
3924+ }// end loop over 'u'
3925+ }// end loop over 't'
3926+
3927+ // Update dmats using an inner product.
3928+ if (combinations[r][s] == 0)
3929+ {
3930+ for (unsigned int t = 0; t < 3; t++)
3931+ {
3932+ for (unsigned int u = 0; u < 3; u++)
3933+ {
3934+ for (unsigned int tu = 0; tu < 3; tu++)
3935+ {
3936+ dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
3937+ }// end loop over 'tu'
3938+ }// end loop over 'u'
3939+ }// end loop over 't'
3940+ }
3941+
3942+ if (combinations[r][s] == 1)
3943+ {
3944+ for (unsigned int t = 0; t < 3; t++)
3945+ {
3946+ for (unsigned int u = 0; u < 3; u++)
3947+ {
3948+ for (unsigned int tu = 0; tu < 3; tu++)
3949+ {
3950+ dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
3951+ }// end loop over 'tu'
3952+ }// end loop over 'u'
3953+ }// end loop over 't'
3954+ }
3955+
3956+ }// end loop over 's'
3957+ for (unsigned int s = 0; s < 3; s++)
3958+ {
3959+ for (unsigned int t = 0; t < 3; t++)
3960+ {
3961+ derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
3962+ }// end loop over 't'
3963+ }// end loop over 's'
3964+ }// end loop over 'r'
3965+
3966+ // Transform derivatives back to physical element
3967+ for (unsigned int r = 0; r < num_derivatives; r++)
3968+ {
3969+ for (unsigned int s = 0; s < num_derivatives; s++)
3970+ {
3971+ values[num_derivatives + r] += transform[r][s]*derivatives[s];
3972+ }// end loop over 's'
3973+ }// end loop over 'r'
3974+
3975+ // Delete pointer to array of derivatives on FIAT element
3976+ delete [] derivatives;
3977+
3978+ // Delete pointer to array of combinations of derivatives and transform
3979+ for (unsigned int r = 0; r < num_derivatives; r++)
3980+ {
3981+ delete [] combinations[r];
3982+ }// end loop over 'r'
3983+ delete [] combinations;
3984+ for (unsigned int r = 0; r < num_derivatives; r++)
3985+ {
3986+ delete [] transform[r];
3987+ }// end loop over 'r'
3988+ delete [] transform;
3989+ break;
3990+ }
3991+ case 5:
3992+ {
3993+
3994+ // Array of basisvalues.
3995+ double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
3996+
3997+ // Declare helper variables.
3998+ unsigned int rr = 0;
3999+ unsigned int ss = 0;
4000+ double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
4001+
4002+ // Compute basisvalues.
4003+ basisvalues[0] = 1.000000000000000;
4004+ basisvalues[1] = tmp0;
4005+ for (unsigned int r = 0; r < 1; r++)
4006+ {
4007+ rr = (r + 1)*(r + 1 + 1)/2 + 1;
4008+ ss = r*(r + 1)/2;
4009+ basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
4010+ }// end loop over 'r'
4011+ for (unsigned int r = 0; r < 2; r++)
4012+ {
4013+ for (unsigned int s = 0; s < 2 - r; s++)
4014+ {
4015+ rr = (r + s)*(r + s + 1)/2 + s;
4016+ basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
4017+ }// end loop over 's'
4018+ }// end loop over 'r'
4019+
4020+ // Table(s) of coefficients.
4021+ static const double coefficients0[3] = \
4022+ {0.471404520791032, 0.000000000000000, 0.333333333333333};
4023+
4024+ // Tables of derivatives of the polynomial base (transpose).
4025+ static const double dmats0[3][3] = \
4026+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
4027+ {4.898979485566356, 0.000000000000000, 0.000000000000000},
4028+ {0.000000000000000, 0.000000000000000, 0.000000000000000}};
4029+
4030+ static const double dmats1[3][3] = \
4031+ {{0.000000000000000, 0.000000000000000, 0.000000000000000},
4032+ {2.449489742783178, 0.000000000000000, 0.000000000000000},
4033+ {4.242640687119285, 0.000000000000000, 0.000000000000000}};
4034+
4035+ // Compute reference derivatives.
4036+ // Declare pointer to array of derivatives on FIAT element.
4037+ double *derivatives = new double[num_derivatives];
4038+ for (unsigned int r = 0; r < num_derivatives; r++)
4039+ {
4040+ derivatives[r] = 0.000000000000000;
4041+ }// end loop over 'r'
4042+
4043+ // Declare derivative matrix (of polynomial basis).
4044+ double dmats[3][3] = \
4045+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
4046+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
4047+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
4048+
4049+ // Declare (auxiliary) derivative matrix (of polynomial basis).
4050+ double dmats_old[3][3] = \
4051+ {{1.000000000000000, 0.000000000000000, 0.000000000000000},
4052+ {0.000000000000000, 1.000000000000000, 0.000000000000000},
4053+ {0.000000000000000, 0.000000000000000, 1.000000000000000}};
4054+
4055+ // Loop possible derivatives.
4056+ for (unsigned int r = 0; r < num_derivatives; r++)
4057+ {
4058+ // Resetting dmats values to compute next derivative.
4059+ for (unsigned int t = 0; t < 3; t++)
4060+ {
4061+ for (unsigned int u = 0; u < 3; u++)
4062+ {
4063+ dmats[t][u] = 0.000000000000000;
4064+ if (t == u)
4065+ {
4066+ dmats[t][u] = 1.000000000000000;
4067+ }
4068+
4069+ }// end loop over 'u'
4070+ }// end loop over 't'
4071+
4072+ // Looping derivative order to generate dmats.
4073+ for (unsigned int s = 0; s < n; s++)
4074+ {
4075+ // Updating dmats_old with new values and resetting dmats.
4076+ for (unsigned int t = 0; t < 3; t++)
4077+ {
4078+ for (unsigned int u = 0; u < 3; u++)
4079+ {
4080+ dmats_old[t][u] = dmats[t][u];
4081+ dmats[t][u] = 0.000000000000000;
4082+ }// end loop over 'u'
4083+ }// end loop over 't'
4084+
4085+ // Update dmats using an inner product.
4086+ if (combinations[r][s] == 0)
4087+ {
4088+ for (unsigned int t = 0; t < 3; t++)
4089+ {
4090+ for (unsigned int u = 0; u < 3; u++)
4091+ {
4092+ for (unsigned int tu = 0; tu < 3; tu++)
4093+ {
4094+ dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
4095+ }// end loop over 'tu'
4096+ }// end loop over 'u'
4097+ }// end loop over 't'
4098+ }
4099+
4100+ if (combinations[r][s] == 1)
4101+ {
4102+ for (unsigned int t = 0; t < 3; t++)
4103+ {
4104+ for (unsigned int u = 0; u < 3; u++)
4105+ {
4106+ for (unsigned int tu = 0; tu < 3; tu++)
4107+ {
4108+ dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
4109+ }// end loop over 'tu'
4110+ }// end loop over 'u'
4111+ }// end loop over 't'
4112+ }
4113+
4114+ }// end loop over 's'
4115+ for (unsigned int s = 0; s < 3; s++)
4116+ {
4117+ for (unsigned int t = 0; t < 3; t++)
4118+ {
4119+ derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
4120+ }// end loop over 't'
4121+ }// end loop over 's'
4122+ }// end loop over 'r'
4123+
4124+ // Transform derivatives back to physical element
4125+ for (unsigned int r = 0; r < num_derivatives; r++)
4126+ {
4127+ for (unsigned int s = 0; s < num_derivatives; s++)
4128+ {
4129+ values[num_derivatives + r] += transform[r][s]*derivatives[s];
4130+ }// end loop over 's'
4131+ }// end loop over 'r'
4132+
4133+ // Delete pointer to array of derivatives on FIAT element
4134+ delete [] derivatives;
4135+
4136+ // Delete pointer to array of combinations of derivatives and transform
4137+ for (unsigned int r = 0; r < num_derivatives; r++)
4138+ {
4139+ delete [] combinations[r];
4140+ }// end loop over 'r'
4141+ delete [] combinations;
4142+ for (unsigned int r = 0; r < num_derivatives; r++)
4143+ {
4144+ delete [] transform[r];
4145+ }// end loop over 'r'
4146+ delete [] transform;
4147+ break;
4148+ }
4149+ }
4150+
4151+}
4152+
4153+/// Evaluate order n derivatives of all basis functions at given point in cell
4154+void cahnhilliard2d_finite_element_2::evaluate_basis_derivatives_all(unsigned int n,
4155+ double* values,
4156+ const double* coordinates,
4157+ const ufc::cell& c) const
4158+{
4159+ // Compute number of derivatives.
4160+ unsigned int num_derivatives = 1;
4161+ for (unsigned int r = 0; r < n; r++)
4162+ {
4163+ num_derivatives *= 2;
4164+ }// end loop over 'r'
4165+
4166+ // Helper variable to hold values of a single dof.
4167+ double *dof_values = new double[2*num_derivatives];
4168+ for (unsigned int r = 0; r < 2*num_derivatives; r++)
4169+ {
4170+ dof_values[r] = 0.000000000000000;
4171+ }// end loop over 'r'
4172+
4173+ // Loop dofs and call evaluate_basis_derivatives.
4174+ for (unsigned int r = 0; r < 6; r++)
4175+ {
4176+ evaluate_basis_derivatives(r, n, dof_values, coordinates, c);
4177+ for (unsigned int s = 0; s < 2*num_derivatives; s++)
4178+ {
4179+ values[r*2*num_derivatives + s] = dof_values[s];
4180+ }// end loop over 's'
4181+ }// end loop over 'r'
4182+
4183+ // Delete pointer.
4184+ delete [] dof_values;
4185+}
4186+
4187+/// Evaluate linear functional for dof i on the function f
4188+double cahnhilliard2d_finite_element_2::evaluate_dof(unsigned int i,
4189+ const ufc::function& f,
4190+ const ufc::cell& c) const
4191+{
4192+ // Declare variables for result of evaluation.
4193+ double vals[2];
4194+
4195+ // Declare variable for physical coordinates.
4196+ double y[2];
4197+ const double * const * x = c.coordinates;
4198+ switch (i)
4199+ {
4200+ case 0:
4201+ {
4202+ y[0] = x[0][0];
4203+ y[1] = x[0][1];
4204+ f.evaluate(vals, y, c);
4205+ return vals[0];
4206+ break;
4207+ }
4208+ case 1:
4209+ {
4210+ y[0] = x[1][0];
4211+ y[1] = x[1][1];
4212+ f.evaluate(vals, y, c);
4213+ return vals[0];
4214+ break;
4215+ }
4216+ case 2:
4217+ {
4218+ y[0] = x[2][0];
4219+ y[1] = x[2][1];
4220+ f.evaluate(vals, y, c);
4221+ return vals[0];
4222+ break;
4223+ }
4224+ case 3:
4225+ {
4226+ y[0] = x[0][0];
4227+ y[1] = x[0][1];
4228+ f.evaluate(vals, y, c);
4229+ return vals[1];
4230+ break;
4231+ }
4232+ case 4:
4233+ {
4234+ y[0] = x[1][0];
4235+ y[1] = x[1][1];
4236+ f.evaluate(vals, y, c);
4237+ return vals[1];
4238+ break;
4239+ }
4240+ case 5:
4241+ {
4242+ y[0] = x[2][0];
4243+ y[1] = x[2][1];
4244+ f.evaluate(vals, y, c);
4245+ return vals[1];
4246+ break;
4247+ }
4248+ }
4249+
4250+ return 0.000000000000000;
4251+}
4252+
4253+/// Evaluate linear functionals for all dofs on the function f
4254+void cahnhilliard2d_finite_element_2::evaluate_dofs(double* values,
4255+ const ufc::function& f,
4256+ const ufc::cell& c) const
4257+{
4258+ // Declare variables for result of evaluation.
4259+ double vals[2];
4260+
4261+ // Declare variable for physical coordinates.
4262+ double y[2];
4263+ const double * const * x = c.coordinates;
4264+ y[0] = x[0][0];
4265+ y[1] = x[0][1];
4266+ f.evaluate(vals, y, c);
4267+ values[0] = vals[0];
4268+ y[0] = x[1][0];
4269+ y[1] = x[1][1];
4270+ f.evaluate(vals, y, c);
4271+ values[1] = vals[0];
4272+ y[0] = x[2][0];
4273+ y[1] = x[2][1];
4274+ f.evaluate(vals, y, c);
4275+ values[2] = vals[0];
4276+ y[0] = x[0][0];
4277+ y[1] = x[0][1];
4278+ f.evaluate(vals, y, c);
4279+ values[3] = vals[1];
4280+ y[0] = x[1][0];
4281+ y[1] = x[1][1];
4282+ f.evaluate(vals, y, c);
4283+ values[4] = vals[1];
4284+ y[0] = x[2][0];
4285+ y[1] = x[2][1];
4286+ f.evaluate(vals, y, c);
4287+ values[5] = vals[1];
4288+}
4289+
4290+/// Interpolate vertex values from dof values
4291+void cahnhilliard2d_finite_element_2::interpolate_vertex_values(double* vertex_values,
4292+ const double* dof_values,
4293+ const ufc::cell& c) const
4294+{
4295+ // Evaluate function and change variables
4296+ vertex_values[0] = dof_values[0];
4297+ vertex_values[2] = dof_values[1];
4298+ vertex_values[4] = dof_values[2];
4299+ // Evaluate function and change variables
4300+ vertex_values[1] = dof_values[3];
4301+ vertex_values[3] = dof_values[4];
4302+ vertex_values[5] = dof_values[5];
4303+}
4304+
4305+/// Map coordinate xhat from reference cell to coordinate x in cell
4306+void cahnhilliard2d_finite_element_2::map_from_reference_cell(double* x,
4307+ const double* xhat,
4308+ const ufc::cell& c) const
4309+{
4310+ throw std::runtime_error("map_from_reference_cell not yet implemented (introduced in UFC 2.0).");
4311+}
4312+
4313+/// Map from coordinate x in cell to coordinate xhat in reference cell
4314+void cahnhilliard2d_finite_element_2::map_to_reference_cell(double* xhat,
4315+ const double* x,
4316+ const ufc::cell& c) const
4317+{
4318+ throw std::runtime_error("map_to_reference_cell not yet implemented (introduced in UFC 2.0).");
4319+}
4320+
4321+/// Return the number of sub elements (for a mixed element)
4322+unsigned int cahnhilliard2d_finite_element_2::num_sub_elements() const
4323+{
4324+ return 2;
4325+}
4326+
4327+/// Create a new finite element for sub element i (for a mixed element)
4328+ufc::finite_element* cahnhilliard2d_finite_element_2::create_sub_element(unsigned int i) const
4329+{
4330+ switch (i)
4331+ {
4332+ case 0:
4333+ {
4334+ return new cahnhilliard2d_finite_element_1();
4335+ break;
4336+ }
4337+ case 1:
4338+ {
4339+ return new cahnhilliard2d_finite_element_1();
4340+ break;
4341+ }
4342+ }
4343+
4344+ return 0;
4345+}
4346+
4347+/// Create a new class instance
4348+ufc::finite_element* cahnhilliard2d_finite_element_2::create() const
4349+{
4350+ return new cahnhilliard2d_finite_element_2();
4351+}
4352+
4353+/// Constructor
4354+cahnhilliard2d_dofmap_0::cahnhilliard2d_dofmap_0() : ufc::dofmap()
4355+{
4356+ _global_dimension = 0;
4357+}
4358+
4359+/// Destructor
4360+cahnhilliard2d_dofmap_0::~cahnhilliard2d_dofmap_0()
4361+{
4362+ // Do nothing
4363+}
4364+
4365+/// Return a string identifying the dofmap
4366+const char* cahnhilliard2d_dofmap_0::signature() const
4367+{
4368+ return "FFC dofmap for FiniteElement('Discontinuous Lagrange', Cell('triangle', 1, Space(2)), 0)";
4369+}
4370+
4371+/// Return true iff mesh entities of topological dimension d are needed
4372+bool cahnhilliard2d_dofmap_0::needs_mesh_entities(unsigned int d) const
4373+{
4374+ switch (d)
4375+ {
4376+ case 0:
4377+ {
4378+ return false;
4379+ break;
4380+ }
4381+ case 1:
4382+ {
4383+ return false;
4384+ break;
4385+ }
4386+ case 2:
4387+ {
4388+ return true;
4389+ break;
4390+ }
4391+ }
4392+
4393+ return false;
4394+}
4395+
4396+/// Initialize dofmap for mesh (return true iff init_cell() is needed)
4397+bool cahnhilliard2d_dofmap_0::init_mesh(const ufc::mesh& m)
4398+{
4399+ _global_dimension = m.num_entities[2];
4400+ return false;
4401+}
4402+
4403+/// Initialize dofmap for given cell
4404+void cahnhilliard2d_dofmap_0::init_cell(const ufc::mesh& m,
4405+ const ufc::cell& c)
4406+{
4407+ // Do nothing
4408+}
4409+
4410+/// Finish initialization of dofmap for cells
4411+void cahnhilliard2d_dofmap_0::init_cell_finalize()
4412+{
4413+ // Do nothing
4414+}
4415+
4416+/// Return the topological dimension of the associated cell shape
4417+unsigned int cahnhilliard2d_dofmap_0::topological_dimension() const
4418+{
4419+ return 2;
4420+}
4421+
4422+/// Return the geometric dimension of the associated cell shape
4423+unsigned int cahnhilliard2d_dofmap_0::geometric_dimension() const
4424+{
4425+ return 2;
4426+}
4427+
4428+/// Return the dimension of the global finite element function space
4429+unsigned int cahnhilliard2d_dofmap_0::global_dimension() const
4430+{
4431+ return _global_dimension;
4432+}
4433+
4434+/// Return the dimension of the local finite element function space for a cell
4435+unsigned int cahnhilliard2d_dofmap_0::local_dimension(const ufc::cell& c) const
4436+{
4437+ return 1;
4438+}
4439+
4440+/// Return the maximum dimension of the local finite element function space
4441+unsigned int cahnhilliard2d_dofmap_0::max_local_dimension() const
4442+{
4443+ return 1;
4444+}
4445+
4446+/// Return the number of dofs on each cell facet
4447+unsigned int cahnhilliard2d_dofmap_0::num_facet_dofs() const
4448+{
4449+ return 0;
4450+}
4451+
4452+/// Return the number of dofs associated with each cell entity of dimension d
4453+unsigned int cahnhilliard2d_dofmap_0::num_entity_dofs(unsigned int d) const
4454+{
4455+ switch (d)
4456+ {
4457+ case 0:
4458+ {
4459+ return 0;
4460+ break;
4461+ }
4462+ case 1:
4463+ {
4464+ return 0;
4465+ break;
4466+ }
4467+ case 2:
4468+ {
4469+ return 1;
4470+ break;
4471+ }
4472+ }
4473+
4474+ return 0;
4475+}
4476+
4477+/// Tabulate the local-to-global mapping of dofs on a cell
4478+void cahnhilliard2d_dofmap_0::tabulate_dofs(unsigned int* dofs,
4479+ const ufc::mesh& m,
4480+ const ufc::cell& c) const
4481+{
4482+ dofs[0] = c.entity_indices[2][0];
4483+}
4484+
4485+/// Tabulate the local-to-local mapping from facet dofs to cell dofs
4486+void cahnhilliard2d_dofmap_0::tabulate_facet_dofs(unsigned int* dofs,
4487+ unsigned int facet) const
4488+{
4489+ switch (facet)
4490+ {
4491+ case 0:
4492+ {
4493+
4494+ break;
4495+ }
4496+ case 1:
4497+ {
4498+
4499+ break;
4500+ }
4501+ case 2:
4502+ {
4503+
4504+ break;
4505+ }
4506+ }
4507+
4508+}
4509+
4510+/// Tabulate the local-to-local mapping of dofs on entity (d, i)
4511+void cahnhilliard2d_dofmap_0::tabulate_entity_dofs(unsigned int* dofs,
4512+ unsigned int d, unsigned int i) const
4513+{
4514+ if (d > 2)
4515+ {
4516+ throw std::runtime_error("d is larger than dimension (2)");
4517+ }
4518+
4519+ switch (d)
4520+ {
4521+ case 0:
4522+ {
4523+
4524+ break;
4525+ }
4526+ case 1:
4527+ {
4528+
4529+ break;
4530+ }
4531+ case 2:
4532+ {
4533+ if (i > 0)
4534+ {
4535+ throw std::runtime_error("i is larger than number of entities (0)");
4536+ }
4537+
4538+ dofs[0] = 0;
4539+ break;
4540+ }
4541+ }
4542+
4543+}
4544+
4545+/// Tabulate the coordinates of all dofs on a cell
4546+void cahnhilliard2d_dofmap_0::tabulate_coordinates(double** coordinates,
4547+ const ufc::cell& c) const
4548+{
4549+ const double * const * x = c.coordinates;
4550+
4551+ coordinates[0][0] = 0.333333333333333*x[0][0] + 0.333333333333333*x[1][0] + 0.333333333333333*x[2][0];
4552+ coordinates[0][1] = 0.333333333333333*x[0][1] + 0.333333333333333*x[1][1] + 0.333333333333333*x[2][1];
4553+}
4554+
4555+/// Return the number of sub dofmaps (for a mixed element)
4556+unsigned int cahnhilliard2d_dofmap_0::num_sub_dofmaps() const
4557+{
4558+ return 0;
4559+}
4560+
4561+/// Create a new dofmap for sub dofmap i (for a mixed element)
4562+ufc::dofmap* cahnhilliard2d_dofmap_0::create_sub_dofmap(unsigned int i) const
4563+{
4564+ return 0;
4565+}
4566+
4567+/// Create a new class instance
4568+ufc::dofmap* cahnhilliard2d_dofmap_0::create() const
4569+{
4570+ return new cahnhilliard2d_dofmap_0();
4571+}
4572+
4573+/// Constructor
4574+cahnhilliard2d_dofmap_1::cahnhilliard2d_dofmap_1() : ufc::dofmap()
4575+{
4576+ _global_dimension = 0;
4577+}
4578+
4579+/// Destructor
4580+cahnhilliard2d_dofmap_1::~cahnhilliard2d_dofmap_1()
4581+{
4582+ // Do nothing
4583+}
4584+
4585+/// Return a string identifying the dofmap
4586+const char* cahnhilliard2d_dofmap_1::signature() const
4587+{
4588+ return "FFC dofmap for FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1)";
4589+}
4590+
4591+/// Return true iff mesh entities of topological dimension d are needed
4592+bool cahnhilliard2d_dofmap_1::needs_mesh_entities(unsigned int d) const
4593+{
4594+ switch (d)
4595+ {
4596+ case 0:
4597+ {
4598+ return true;
4599+ break;
4600+ }
4601+ case 1:
4602+ {
4603+ return false;
4604+ break;
4605+ }
4606+ case 2:
4607+ {
4608+ return false;
4609+ break;
4610+ }
4611+ }
4612+
4613+ return false;
4614+}
4615+
4616+/// Initialize dofmap for mesh (return true iff init_cell() is needed)
4617+bool cahnhilliard2d_dofmap_1::init_mesh(const ufc::mesh& m)
4618+{
4619+ _global_dimension = m.num_entities[0];
4620+ return false;
4621+}
4622+
4623+/// Initialize dofmap for given cell
4624+void cahnhilliard2d_dofmap_1::init_cell(const ufc::mesh& m,
4625+ const ufc::cell& c)
4626+{
4627+ // Do nothing
4628+}
4629+
4630+/// Finish initialization of dofmap for cells
4631+void cahnhilliard2d_dofmap_1::init_cell_finalize()
4632+{
4633+ // Do nothing
4634+}
4635+
4636+/// Return the topological dimension of the associated cell shape
4637+unsigned int cahnhilliard2d_dofmap_1::topological_dimension() const
4638+{
4639+ return 2;
4640+}
4641+
4642+/// Return the geometric dimension of the associated cell shape
4643+unsigned int cahnhilliard2d_dofmap_1::geometric_dimension() const
4644+{
4645+ return 2;
4646+}
4647+
4648+/// Return the dimension of the global finite element function space
4649+unsigned int cahnhilliard2d_dofmap_1::global_dimension() const
4650+{
4651+ return _global_dimension;
4652+}
4653+
4654+/// Return the dimension of the local finite element function space for a cell
4655+unsigned int cahnhilliard2d_dofmap_1::local_dimension(const ufc::cell& c) const
4656+{
4657+ return 3;
4658+}
4659+
4660+/// Return the maximum dimension of the local finite element function space
4661+unsigned int cahnhilliard2d_dofmap_1::max_local_dimension() const
4662+{
4663+ return 3;
4664+}
4665+
4666+/// Return the number of dofs on each cell facet
4667+unsigned int cahnhilliard2d_dofmap_1::num_facet_dofs() const
4668+{
4669+ return 2;
4670+}
4671+
4672+/// Return the number of dofs associated with each cell entity of dimension d
4673+unsigned int cahnhilliard2d_dofmap_1::num_entity_dofs(unsigned int d) const
4674+{
4675+ switch (d)
4676+ {
4677+ case 0:
4678+ {
4679+ return 1;
4680+ break;
4681+ }
4682+ case 1:
4683+ {
4684+ return 0;
4685+ break;
4686+ }
4687+ case 2:
4688+ {
4689+ return 0;
4690+ break;
4691+ }
4692+ }
4693+
4694+ return 0;
4695+}
4696+
4697+/// Tabulate the local-to-global mapping of dofs on a cell
4698+void cahnhilliard2d_dofmap_1::tabulate_dofs(unsigned int* dofs,
4699+ const ufc::mesh& m,
4700+ const ufc::cell& c) const
4701+{
4702+ dofs[0] = c.entity_indices[0][0];
4703+ dofs[1] = c.entity_indices[0][1];
4704+ dofs[2] = c.entity_indices[0][2];
4705+}
4706+
4707+/// Tabulate the local-to-local mapping from facet dofs to cell dofs
4708+void cahnhilliard2d_dofmap_1::tabulate_facet_dofs(unsigned int* dofs,
4709+ unsigned int facet) const
4710+{
4711+ switch (facet)
4712+ {
4713+ case 0:
4714+ {
4715+ dofs[0] = 1;
4716+ dofs[1] = 2;
4717+ break;
4718+ }
4719+ case 1:
4720+ {
4721+ dofs[0] = 0;
4722+ dofs[1] = 2;
4723+ break;
4724+ }
4725+ case 2:
4726+ {
4727+ dofs[0] = 0;
4728+ dofs[1] = 1;
4729+ break;
4730+ }
4731+ }
4732+
4733+}
4734+
4735+/// Tabulate the local-to-local mapping of dofs on entity (d, i)
4736+void cahnhilliard2d_dofmap_1::tabulate_entity_dofs(unsigned int* dofs,
4737+ unsigned int d, unsigned int i) const
4738+{
4739+ if (d > 2)
4740+ {
4741+ throw std::runtime_error("d is larger than dimension (2)");
4742+ }
4743+
4744+ switch (d)
4745+ {
4746+ case 0:
4747+ {
4748+ if (i > 2)
4749+ {
4750+ throw std::runtime_error("i is larger than number of entities (2)");
4751+ }
4752+
4753+ switch (i)
4754+ {
4755+ case 0:
4756+ {
4757+ dofs[0] = 0;
4758+ break;
4759+ }
4760+ case 1:
4761+ {
4762+ dofs[0] = 1;
4763+ break;
4764+ }
4765+ case 2:
4766+ {
4767+ dofs[0] = 2;
4768+ break;
4769+ }
4770+ }
4771+
4772+ break;
4773+ }
4774+ case 1:
4775+ {
4776+
4777+ break;
4778+ }
4779+ case 2:
4780+ {
4781+
4782+ break;
4783+ }
4784+ }
4785+
4786+}
4787+
4788+/// Tabulate the coordinates of all dofs on a cell
4789+void cahnhilliard2d_dofmap_1::tabulate_coordinates(double** coordinates,
4790+ const ufc::cell& c) const
4791+{
4792+ const double * const * x = c.coordinates;
4793+
4794+ coordinates[0][0] = x[0][0];
4795+ coordinates[0][1] = x[0][1];
4796+ coordinates[1][0] = x[1][0];
4797+ coordinates[1][1] = x[1][1];
4798+ coordinates[2][0] = x[2][0];
4799+ coordinates[2][1] = x[2][1];
4800+}
4801+
4802+/// Return the number of sub dofmaps (for a mixed element)
4803+unsigned int cahnhilliard2d_dofmap_1::num_sub_dofmaps() const
4804+{
4805+ return 0;
4806+}
4807+
4808+/// Create a new dofmap for sub dofmap i (for a mixed element)
4809+ufc::dofmap* cahnhilliard2d_dofmap_1::create_sub_dofmap(unsigned int i) const
4810+{
4811+ return 0;
4812+}
4813+
4814+/// Create a new class instance
4815+ufc::dofmap* cahnhilliard2d_dofmap_1::create() const
4816+{
4817+ return new cahnhilliard2d_dofmap_1();
4818+}
4819+
4820+/// Constructor
4821+cahnhilliard2d_dofmap_2::cahnhilliard2d_dofmap_2() : ufc::dofmap()
4822+{
4823+ _global_dimension = 0;
4824+}
4825+
4826+/// Destructor
4827+cahnhilliard2d_dofmap_2::~cahnhilliard2d_dofmap_2()
4828+{
4829+ // Do nothing
4830+}
4831+
4832+/// Return a string identifying the dofmap
4833+const char* cahnhilliard2d_dofmap_2::signature() const
4834+{
4835+ return "FFC dofmap for MixedElement(*[FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1), FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1)], **{'value_shape': (2,) })";
4836+}
4837+
4838+/// Return true iff mesh entities of topological dimension d are needed
4839+bool cahnhilliard2d_dofmap_2::needs_mesh_entities(unsigned int d) const
4840+{
4841+ switch (d)
4842+ {
4843+ case 0:
4844+ {
4845+ return true;
4846+ break;
4847+ }
4848+ case 1:
4849+ {
4850+ return false;
4851+ break;
4852+ }
4853+ case 2:
4854+ {
4855+ return false;
4856+ break;
4857+ }
4858+ }
4859+
4860+ return false;
4861+}
4862+
4863+/// Initialize dofmap for mesh (return true iff init_cell() is needed)
4864+bool cahnhilliard2d_dofmap_2::init_mesh(const ufc::mesh& m)
4865+{
4866+ _global_dimension = 2.000000000000000*m.num_entities[0];
4867+ return false;
4868+}
4869+
4870+/// Initialize dofmap for given cell
4871+void cahnhilliard2d_dofmap_2::init_cell(const ufc::mesh& m,
4872+ const ufc::cell& c)
4873+{
4874+ // Do nothing
4875+}
4876+
4877+/// Finish initialization of dofmap for cells
4878+void cahnhilliard2d_dofmap_2::init_cell_finalize()
4879+{
4880+ // Do nothing
4881+}
4882+
4883+/// Return the topological dimension of the associated cell shape
4884+unsigned int cahnhilliard2d_dofmap_2::topological_dimension() const
4885+{
4886+ return 2;
4887+}
4888+
4889+/// Return the geometric dimension of the associated cell shape
4890+unsigned int cahnhilliard2d_dofmap_2::geometric_dimension() const
4891+{
4892+ return 2;
4893+}
4894+
4895+/// Return the dimension of the global finite element function space
4896+unsigned int cahnhilliard2d_dofmap_2::global_dimension() const
4897+{
4898+ return _global_dimension;
4899+}
4900+
4901+/// Return the dimension of the local finite element function space for a cell
4902+unsigned int cahnhilliard2d_dofmap_2::local_dimension(const ufc::cell& c) const
4903+{
4904+ return 6;
4905+}
4906+
4907+/// Return the maximum dimension of the local finite element function space
4908+unsigned int cahnhilliard2d_dofmap_2::max_local_dimension() const
4909+{
4910+ return 6;
4911+}
4912+
4913+/// Return the number of dofs on each cell facet
4914+unsigned int cahnhilliard2d_dofmap_2::num_facet_dofs() const
4915+{
4916+ return 4;
4917+}
4918+
4919+/// Return the number of dofs associated with each cell entity of dimension d
4920+unsigned int cahnhilliard2d_dofmap_2::num_entity_dofs(unsigned int d) const
4921+{
4922+ switch (d)
4923+ {
4924+ case 0:
4925+ {
4926+ return 2;
4927+ break;
4928+ }
4929+ case 1:
4930+ {
4931+ return 0;
4932+ break;
4933+ }
4934+ case 2:
4935+ {
4936+ return 0;
4937+ break;
4938+ }
4939+ }
4940+
4941+ return 0;
4942+}
4943+
4944+/// Tabulate the local-to-global mapping of dofs on a cell
4945+void cahnhilliard2d_dofmap_2::tabulate_dofs(unsigned int* dofs,
4946+ const ufc::mesh& m,
4947+ const ufc::cell& c) const
4948+{
4949+ unsigned int offset = 0;
4950+ dofs[0] = offset + c.entity_indices[0][0];
4951+ dofs[1] = offset + c.entity_indices[0][1];
4952+ dofs[2] = offset + c.entity_indices[0][2];
4953+ offset += m.num_entities[0];
4954+ dofs[3] = offset + c.entity_indices[0][0];
4955+ dofs[4] = offset + c.entity_indices[0][1];
4956+ dofs[5] = offset + c.entity_indices[0][2];
4957+ offset += m.num_entities[0];
4958+}
4959+
4960+/// Tabulate the local-to-local mapping from facet dofs to cell dofs
4961+void cahnhilliard2d_dofmap_2::tabulate_facet_dofs(unsigned int* dofs,
4962+ unsigned int facet) const
4963+{
4964+ switch (facet)
4965+ {
4966+ case 0:
4967+ {
4968+ dofs[0] = 1;
4969+ dofs[1] = 2;
4970+ dofs[2] = 4;
4971+ dofs[3] = 5;
4972+ break;
4973+ }
4974+ case 1:
4975+ {
4976+ dofs[0] = 0;
4977+ dofs[1] = 2;
4978+ dofs[2] = 3;
4979+ dofs[3] = 5;
4980+ break;
4981+ }
4982+ case 2:
4983+ {
4984+ dofs[0] = 0;
4985+ dofs[1] = 1;
4986+ dofs[2] = 3;
4987+ dofs[3] = 4;
4988+ break;
4989+ }
4990+ }
4991+
4992+}
4993+
4994+/// Tabulate the local-to-local mapping of dofs on entity (d, i)
4995+void cahnhilliard2d_dofmap_2::tabulate_entity_dofs(unsigned int* dofs,
4996+ unsigned int d, unsigned int i) const
4997+{
4998+ if (d > 2)
4999+ {
5000+ throw std::runtime_error("d is larger than dimension (2)");
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches