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
=== modified file '.bzrignore'
--- .bzrignore 2010-11-30 19:14:30 +0000
+++ .bzrignore 2011-05-28 15:37:28 +0000
@@ -1,1 +1,5 @@
1build1build
2utils/newsfetcher/cache/*
3utils/newsfetcher/output/*
4*.tmplc
5
26
=== modified file 'Makefile'
--- Makefile 2010-08-25 12:56:10 +0000
+++ Makefile 2011-05-28 15:37:28 +0000
@@ -1,9 +1,9 @@
1# Makefile for FEniCS documentation1# Makefile for FEniCS documentation
22
3# You can set these variables from the command line3# You can set these variables from the command line
4SPHINXOPTS =4SPHINXOPTS =
5SPHINXBUILD = sphinx-build5SPHINXBUILD = sphinx-build
6PAPER =6PAPER =
77
8# Internal variables8# Internal variables
9PAPEROPT_a4 = -D latex_paper_size=a49PAPEROPT_a4 = -D latex_paper_size=a4
@@ -33,10 +33,26 @@
3333
34all: clean latex pdf html34all: clean latex pdf html
3535
36update:
37 scripts/generate_programmers_reference_cpp
38 scripts/generate_programmers_reference_python
39 scripts/copy_demos_dolfin
40
36html:41html:
37 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html42 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html
38 @echo43 @echo
39 @echo "Build finished. The HTML pages are in build/html."44 @echo "Build finished. HTML generated in build/html."
45
46latex:
47 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex
48 @echo
49 @echo "Build finished. LaTeX generated in build/latex."
50
51pdf:
52 make -C build/latex all-pdf
53
54
55# AL: Don't know what the stuff below is used for, might be removed
4056
41dirhtml:57dirhtml:
42 $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) build/dirhtml58 $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) build/dirhtml
@@ -68,16 +84,6 @@
68 @echo "To view the help file:"84 @echo "To view the help file:"
69 @echo "# assistant -collectionFile build/qthelp/FEniCS.qhc"85 @echo "# assistant -collectionFile build/qthelp/FEniCS.qhc"
7086
71latex:
72 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex
73 @echo
74 @echo "Build finished; the LaTeX files are in build/latex."
75 @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
76 "run these through (pdf)latex."
77
78pdf:
79 make -C build/latex all-pdf
80
81changes:87changes:
82 $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes88 $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes
83 @echo89 @echo
8490
=== modified file 'README'
--- README 2010-12-07 15:29:06 +0000
+++ README 2011-05-28 15:37:28 +0000
@@ -1,32 +1,9 @@
1FEniCS documentation1# Last changed: 2011-05-05
2--------------------2
33FEniCS documentation and webpage
4To build all documentation, simply type4--------------------------------
55
6 make all6How to generate webpage and documentation? Someone who knows how,
77please write something here.
8Note that you need to have the ufc module in your PYTHONPATH variable in order8
9to generate the Python programmer's reference.9
10
11In the future when we add documentation for FFC, UFC, UFL, viper etc. you will
12also need to have these modules in your path.
13
14To update the C++ programmer's reference and the demos from a specific DOLFIN
15installation you need to set the DOLFIN_DIR variable and run the two scripts
16utils/generate_cpp_doc.py and utils/copy_demos.sh before building the
17documentation.
18
19FEniCS web page
20---------------
21
221. push to lp:fenics-web
23
242. navigate to fenics@fenics.org:~/fenics-web-sphinx and bzr pull
25
263. export PYTHONPATH=/home/fenics-doc/local/lib/python2.6/site-packages:${PYTHONPATH}
27
284. export PATH=/home/fenics-doc/local/bin:${PATH}
29
305. source /home/fenics-doc/fenics/share/dolfin/dolfin.conf
31
326. make html
3310
=== renamed directory 'source/doc' => 'doc-temporarily-removed'
=== added directory 'doc-temporarily-removed/dolfin'
=== renamed directory 'source/doc/demos' => 'doc-temporarily-removed/dolfin/demos'
=== added directory 'doc-temporarily-removed/dolfin/demos/la/eigenvalue'
=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/common.txt'
--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/common.txt 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/common.txt 2011-05-28 15:37:28 +0000
@@ -0,0 +1,40 @@
1
2This demo illustrates how to:
3
4* Load a mesh from a file
5* Solve an eigenvalue problem
6* Use a specific linear algebra backend (PETSc)
7* Initialize a finite element function with a coefficient vector
8
9Problem definition
10------------------
11
12Sometimes one wants to solve an eigenvalue problem such as this one:
13find the eigenvalues :math:`\lambda \in \mathbb{R}` and the
14corresponding eigenvectors :math:`x \in \mathbb{R}^n` such that
15
16.. math::
17
18 A x = \lambda x
19
20In the finite element world, the matrix :math:`A` often originates
21from some partial differential operator. For instance, :math:`A` can
22be the stiffness matrix corresponding to this bilinear form:
23
24.. math::
25
26 a(u, v) = \int_{\Omega} \nabla u \cdot \nabla v \ {\rm d} x.
27
28Here, we will let the space :math:`V` (of dimension :math:`n`) consist
29of continuous piecewise linear polynomials defined relative to some
30mesh (Lagrange finite elements). For this example, we will consider a
313-D mesh of tetrahedra generated elsewhere.
32
33With the above input the eigenfunction will look as follows:
34
35.. image:: ../eigenvalue_x.png
36 :scale: 75
37 :align: center
38
39In the following, we show how this eigenvalue problem can be solved.
40
041
=== added directory 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp'
=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/CMakeLists.txt'
--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/CMakeLists.txt 2011-05-28 15:37:28 +0000
@@ -0,0 +1,34 @@
1# Require CMake 2.8
2cmake_minimum_required(VERSION 2.8)
3
4project(demo_eigenvalue)
5
6# Set verbose output while testing CMake
7#set(CMAKE_VERBOSE_MAKEFILE 1)
8
9# Set CMake behavior
10cmake_policy(SET CMP0004 OLD)
11
12# Get DOLFIN configuration data (dolfin-config.cmake must be in DOLFIN_CMAKE_CONFIG_PATH)
13find_package(dolfin)
14
15# Default build type (can be overridden by user)
16if (NOT CMAKE_BUILD_TYPE)
17 set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
18 "Choose the type of build, options are: Debug MinSizeRel Release RelWithDebInfo." FORCE)
19endif()
20
21# Compiler definitions
22add_definitions(${DOLFIN_CXX_DEFINITIONS})
23
24# Add special DOLFIN compiler flags
25set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DOLFIN_CXX_FLAGS}")
26
27# Include directories
28include_directories(${DOLFIN_INCLUDE_DIRS} ${DOLFIN_3RD_PARTY_INCLUDE_DIRS})
29
30# Executable
31add_executable(demo_eigenvalue main.cpp)
32
33# Target libraries
34target_link_libraries(demo_eigenvalue ${DOLFIN_LIBRARIES} ${DOLFIN_3RD_PARTY_LIBRARIES})
035
=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/StiffnessMatrix.ufl'
--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/StiffnessMatrix.ufl 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/StiffnessMatrix.ufl 2011-05-28 15:37:28 +0000
@@ -0,0 +1,14 @@
1# Copyright (c) 2005-2006 Anders Logg (logg@tti-c.org)
2# Licensed under the GNU LGPL Version 2.1
3#
4# First added: 2005-06-05
5# Last changed: 2010-09-05
6#
7# The bilinear form for a stiffness matrix (Poisson).
8
9element = FiniteElement("Lagrange", "tetrahedron", 1)
10
11v = TestFunction(element)
12u = TrialFunction(element)
13
14a = dot(grad(v), grad(u))*dx
015
=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/box_with_dent.xml.gz'
1Binary 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 differ16Binary 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
=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/main.cpp'
--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/main.cpp 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/cpp/main.cpp 2011-05-28 15:37:28 +0000
@@ -0,0 +1,56 @@
1// Copyright (C) 2007-2010 Kristian B. Oelgaard and Garth N. Wells
2// Licensed under the GNU LGPL Version 2.1.
3//
4// Modified by Anders Logg, 2008.
5// Modified by Marie E. Rognes, 2010.
6//
7// First added: 2007-03-08
8// Last changed: 2010-09-05
9//
10// This simple program illustrates the use of the SLEPc eigenvalue solver.
11
12#include <dolfin.h>
13#include "StiffnessMatrix.h"
14
15using namespace dolfin;
16
17int main()
18{
19 #ifdef HAS_SLEPC
20
21 // Create mesh
22 Mesh mesh("box_with_dent.xml.gz");
23
24 // Build stiffness matrix
25 PETScMatrix A;
26 StiffnessMatrix::FunctionSpace V(mesh);
27 StiffnessMatrix::BilinearForm a(V, V);
28 assemble(A, a);
29
30 // Create eigensolver
31 SLEPcEigenSolver esolver(A);
32
33 // Compute all eigenvalues of A x = \lambda x
34 esolver.solve();
35
36 // Extract largest (first, n =0) eigenpair
37 double r, c;
38 PETScVector rx, cx;
39 esolver.get_eigenpair(r, c, rx, cx, 0);
40
41 std::cout << "Largest eigenvalue: " << r << std::endl;
42
43 // Initialize function with eigenvector
44 Function u(V, rx);
45
46 // Plot eigenfunction
47 plot(u);
48
49 #else
50
51 cout << "SLEPc must be installed to run this demo." << endl;
52
53 #endif
54
55 return 0;
56}
057
=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/eigenvalue_x.png'
1Binary 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 differ58Binary 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
=== added directory 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/python'
=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/box_with_dent.xml.gz'
2Binary 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 differ59Binary 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
=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/demo_eigenvalue.py'
--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/demo_eigenvalue.py 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/demo_eigenvalue.py 2011-05-28 15:37:28 +0000
@@ -0,0 +1,57 @@
1"""
2This program illustrates basic use of the SLEPc eigenvalue solver for
3a standard eigenvalue problem.
4"""
5
6__author__ = "Kristian B. Oelgaard (k.b.oelgaard@tudelft.nl)"
7__date__ = "2007-11-28 -- 2009-10-09"
8__copyright__ = "Copyright (C) 2007 Kristian B. Oelgaard"
9__license__ = "GNU LGPL Version 2.1"
10
11# Modified by Anders Logg, 2008.
12# Modified by Marie Rognes, 2009.
13
14# Begin demo
15
16from dolfin import *
17
18# Test for PETSc and SLEPc
19if not has_la_backend("PETSc"):
20 print "DOLFIN has not been configured with PETSc. Exiting."
21 exit()
22
23if not has_slepc():
24 print "DOLFIN has not been configured with SLEPc. Exiting."
25 exit()
26
27# Define mesh, function space
28mesh = Mesh("box_with_dent.xml.gz")
29V = FunctionSpace(mesh, "CG", 1)
30
31# Define basis and bilinear form
32u = TrialFunction(V)
33v = TestFunction(V)
34a = dot(grad(u), grad(v))*dx
35
36# Assemble stiffness form
37A = PETScMatrix()
38assemble(a, tensor=A)
39
40# Create eigensolver
41eigensolver = SLEPcEigenSolver(A)
42
43# Compute all eigenvalues of A x = \lambda x
44print "Computing eigenvalues. This can take a minute."
45eigensolver.solve()
46
47# Extract largest (first) eigenpair
48r, c, rx, cx = eigensolver.get_eigenpair(0)
49
50print "Largest eigenvalue: ", r
51
52# Initialize function with eigenvector
53u = Function(V, rx)
54
55# Plot eigenfunction
56plot(u)
57interactive()
058
=== added file 'doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/documentation.rst'
--- doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/documentation.rst 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/la/eigenvalue/python/documentation.rst 2011-05-28 15:37:28 +0000
@@ -0,0 +1,119 @@
1.. Documentation for the basic eigenvalue demo in DOLFIN
2
3.. _demos_la_eigenvalue_python_documentation:
4
5A simple eigenvalue solver
6==========================
7
8We recommend that you are familiar with demo for the Poisson equation
9before looking at this demo.
10
11
12.. include:: ../common.txt
13
14If you want a more complex problem, we suggest that you look at the
15other eigenvalue demo.
16
17Implementation
18--------------
19
20This demo is implemented in a single Python file, :download:`demo_eigenvalue.py`,
21which contains both the variational forms and the solver.
22
23The eigensolver functionality in DOLFIN relies on the library SLEPc
24which in turn relies on the linear algebra library PETSc. Therefore,
25both PETSc and SLEPc are required for this demo. We can test whether
26PETSc and SLEPc are available, and exit if not, as follows:
27
28.. code-block:: python
29
30 from dolfin import *
31
32 # Test for PETSc and SLEPc
33 if not has_la_backend("PETSc"):
34 print "DOLFIN has not been configured with PETSc. Exiting."
35 exit()
36
37 if not has_slepc():
38 print "DOLFIN has not been configured with SLEPc. Exiting."
39 exit()
40
41First, we need to construct the matrix :math:`A`. This will be done in
42three steps: defining the mesh and the function space associated with
43it; constructing the variational form defining the matrix; and then
44assembling this form. The code is shown below
45
46.. code-block:: python
47
48 # Define mesh, function space
49 mesh = Mesh("box_with_dent.xml.gz")
50 V = FunctionSpace(mesh, "CG", 1)
51
52 # Define basis and bilinear form
53 u = TrialFunction(V)
54 v = TestFunction(V)
55 a = dot(grad(v), grad(u))*dx
56
57 # Assemble stiffness form
58 A = PETScMatrix()
59 assemble(a, tensor=A)
60
61Note that we (in this example) first define the matrix ``A`` as a
62:py:class:`PETScMatrix` and then assemble the form into it. This is
63an easy way to ensure that the matrix has the right type.
64
65In order to solve the eigenproblem, we need to define an
66eigensolver. To solve a standard eigenvalue problem, the eigensolver
67is initialized with a single argument, namely the matrix ``A``.
68
69.. code-block:: python
70
71 # Create eigensolver
72 eigensolver = SLEPcEigenSolver(A)
73
74Now, we ready solve the eigenproblem by calling the ``solve`` method
75of the eigensolver. Note that eigenvalue problems tend to be
76computationally intensive and may hence take a while.
77
78.. code-block:: python
79
80 # Compute all eigenvalues of A x = \lambda x
81 print "Computing eigenvalues. This can take a minute."
82 eigensolver.solve()
83
84The result is kept by the eigensolver, but can fortunately be
85extracted. Here, we have computed all eigenvalues, and they will be
86sorted by largest magnitude. We can extract the real and complex part
87(``r`` and ``c``) of the largest eigenvalue and the real and complex
88part of the corresponding eigenvector (``ru`` and ``cu``) by asking
89for the first eigenpair as follows:
90
91.. code-block:: python
92
93 # Extract largest (first) eigenpair
94 r, c, rx, cx = eigensolver.get_eigenpair(0)
95
96Finally, we want to examine the results. The eigenvalue can easily be
97printed. But, the real part of eigenvector is probably most easily
98visualized by constructing the corresponding eigenfunction. This can
99be done by creating a :py:class:`Function` in the function space
100``V`` with the eigenvector ``rx`` as an additional argument. Then the
101eigenfunction can be manipulated as any other :py:class:`Function`,
102and in particular plotted:
103
104.. code-block:: python
105
106 print "Largest eigenvalue: ", r
107
108 # Initialize function with eigenvector
109 u = Function(V, rx)
110
111 # Plot eigenfunction
112 plot(u)
113 interactive()
114
115Complete code
116-------------
117
118.. literalinclude:: demo_eigenvalue.py
119 :start-after: # Begin demo
0120
=== modified file 'doc-temporarily-removed/dolfin/demos/la/index-cpp.rst'
--- source/doc/demos/la/index-cpp.rst 2010-10-21 11:35:37 +0000
+++ doc-temporarily-removed/dolfin/demos/la/index-cpp.rst 2011-05-28 15:37:28 +0000
@@ -6,7 +6,7 @@
6Linear algebra6Linear algebra
7**************7**************
88
9Below is a list demos which demonstrates how to solve linear algebra problems.9Below is a list of demos which demonstrate how to solve linear algebra problems.
1010
11.. toctree::11.. toctree::
12 :maxdepth: 212 :maxdepth: 2
1313
=== added directory 'doc-temporarily-removed/dolfin/demos/pde/biharmonic'
=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/biharmonic_u.png'
14Binary 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 differ14Binary 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
=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/common.txt'
--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/common.txt 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/common.txt 2011-05-28 15:37:28 +0000
@@ -0,0 +1,82 @@
1
2This demo illustrates how to:
3
4* Solve a linear partial differential equation
5* Use a discontinuous Galerkin method
6* Solve a fourth-order differential equation
7
8The solution for :math:`u` in this demo will look as follows:
9
10.. image:: ../biharmonic_u.png
11 :scale: 75 %
12
13Equation and problem definition
14-------------------------------
15
16The biharmonic equation is a fourth-order elliptic equation. On the domain
17:math:`\Omega \subset \mathbb{R}^{d}`, :math:`1 \le d \le 3`, it reads
18
19.. math::
20 \nabla^{4} u = f \quad {\rm in} \ \Omega,
21
22where :math:`\nabla^{4} \equiv \nabla^{2} \nabla^{2}` is the biharmonic
23operator and :math:`f` is a prescribed source term. To formulate a complete
24boundary value problem, the biharmonic equation must be complemented by
25suitable boundary conditions.
26
27Multiplying the biharmonic equation by a test function and integrating
28by parts twice leads to a problem second-order derivatives, which would
29requires :math:`H^{2}` conforming (roughly :math:`C^{0}` continuous) basis
30functions. To solve the biharmonic equation using Lagrange finite element
31basis functions, the biharmonic equation can be split into two second-order
32equations (see :ref:`demos_pde_mixed-poisson_python` for a mixed method for
33the Poisson equation), or a variational formulation can be constructed that
34imposes weak continuity of normal derivatives between finite element cells.
35The demo uses a discontinuous Galerkin approach to impose continuity of the
36normal derivative weakly.
37
38Consider a triangulation :math:`\mathcal{T}` of the domain :math:`\Omega`,
39where the union of interior facets is denoted by :math:`\Gamma`.
40Functions evaluated on opposite sides of a facet are indicated by the
41subscripts ':math:`+`' and ':math:`-`'.
42Using the standard continuous Lagrange finite element space
43
44.. math::
45 V_ = \left\{v \in H^{1}_{0}(\Omega): \ v \in P_{k}(K) \ \forall \ K \in \mathcal{T} \right\}
46
47and considering the boundary conditions
48
49.. math::
50 u &= 0 \quad {\rm on} \ \partial\Omega \\
51 \nabla^{2} u &= 0 \quad {\rm on} \ \partial\Omega
52
53a weak formulation of the biharmonic reads: find :math:`u \in V` such that
54
55.. math::
56 \sum_{K \in \mathcal{T}} \int_{K} \nabla^{2} u \nabla^{2} v \, dx \
57 - \int_{\Gamma} \left<\nabla^{2} u \right> \llbracket\nabla v \rrbracket \, ds
58 - \int_{\Gamma} \llbracket\nabla u \rrbracket \left<\nabla^{2} v \right> \, ds
59 + \int_{\Gamma} \frac{\alpha}{h} \llbracket \nabla u \rrbracket \llbracket \nabla v \rrbracket \, ds
60 = \int_{\Omega} vf \, dx \quad \forall \ v \in V
61
62where :math:`\left< u \right> = (1/2) (u_{+} + u_{-})`, :math:`\llbracket w
63\rrbracket = w_{+} \cdot n_{+} + w_{-} \cdot n_{-}`, :math:`\alpha \ge 0`
64is a penalty term and :math:`h` is a measure of the cell size. For the
65implementation, it is useful to identify the bilinear form
66
67.. math::
68 a(u, v) = \sum_{K \in \mathcal{T}} \int_{K} \nabla^{2} u \nabla^{2} v \, dx \
69 - \int_{\Gamma} \left<\nabla^{2} u \right> \llbracket\nabla v \rrbracket \, ds
70 - \int_{\Gamma} \llbracket\nabla u \rrbracket \left<\nabla^{2} v \right> \, ds
71 + \int_{\Gamma} \frac{\alpha}{h} \llbracket \nabla u \rrbracket \llbracket \nabla v \rrbracket \, ds
72
73and the linear form
74
75.. math::
76 L(v) = \int_{\Omega} vf \, dx
77
78The input parameters for this demos are defined as follows:
79
80* :math:`\Omega = [0,1] \times [0,1]` (a unit square)
81* :math:`\alpha = 8.0` (penalty parameter)
82* :math:`f = 4.0 \pi^4\sin(\pi x)\sin(\pi y)` (source term)
083
=== added directory 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp'
=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/Biharmonic.ufl'
--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/Biharmonic.ufl 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/Biharmonic.ufl 2011-05-28 15:37:28 +0000
@@ -0,0 +1,37 @@
1#!/usr/bin/env python
2# Copyright (C) 2009 Kristiand B. Oelgaard, Garth N. Wells and Anders Logg
3# Licensed under the GNU LGPL Version 2.1.
4#
5# First added: 2009-06-26
6# Last changed: 2010-09-01
7#
8# The bilinear form a(u, v) and linear form L(v) for
9# Biharmonic equation in a discontinuous Galerkin (DG)
10# formulation.
11#
12# Compile this form with FFC: ffc -l dolfin Biharmonic.ufl
13
14# Elements
15element = FiniteElement("Lagrange", triangle, 2)
16
17# Trial and test functions
18u = TrialFunction(element)
19v = TestFunction(element)
20f = Coefficient(element)
21
22# Normal component, mesh size and right-hand side
23n = element.cell().n
24h = 2.0*triangle.circumradius
25h_avg = (h('+') + h('-'))/2
26
27# Parameters
28alpha = Constant(triangle)
29
30# Bilinear form
31a = inner(div(grad(u)), div(grad(v)))*dx \
32 - inner(avg(div(grad(u))), jump(grad(v), n))*dS \
33 - inner(jump(grad(u), n), avg(div(grad(v))))*dS \
34 + alpha('+')/h_avg*inner(jump(grad(u), n), jump(grad(v),n))*dS
35
36# Linear form
37L = f*v*dx
038
=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/CMakeLists.txt'
--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/CMakeLists.txt 2011-05-28 15:37:28 +0000
@@ -0,0 +1,34 @@
1# Require CMake 2.8
2cmake_minimum_required(VERSION 2.8)
3
4project(demo_biharmonic)
5
6# Set verbose output while testing CMake
7#set(CMAKE_VERBOSE_MAKEFILE 1)
8
9# Set CMake behavior
10cmake_policy(SET CMP0004 OLD)
11
12# Get DOLFIN configuration data (dolfin-config.cmake must be in DOLFIN_CMAKE_CONFIG_PATH)
13find_package(dolfin)
14
15# Default build type (can be overridden by user)
16if (NOT CMAKE_BUILD_TYPE)
17 set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
18 "Choose the type of build, options are: Debug MinSizeRel Release RelWithDebInfo." FORCE)
19endif()
20
21# Compiler definitions
22add_definitions(${DOLFIN_CXX_DEFINITIONS})
23
24# Add special DOLFIN compiler flags
25set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DOLFIN_CXX_FLAGS}")
26
27# Include directories
28include_directories(${DOLFIN_INCLUDE_DIRS} ${DOLFIN_3RD_PARTY_INCLUDE_DIRS})
29
30# Executable
31add_executable(demo_biharmonic main.cpp)
32
33# Target libraries
34target_link_libraries(demo_biharmonic ${DOLFIN_LIBRARIES} ${DOLFIN_3RD_PARTY_LIBRARIES})
035
=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/documentation.rst'
--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/documentation.rst 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/documentation.rst 2011-05-28 15:37:28 +0000
@@ -0,0 +1,212 @@
1.. Documentation for the biharmonic demo from DOLFIN.
2
3.. _demos_pde_biharmonic_cpp_documentation:
4
5
6Biharmonic equation
7===================
8
9.. include:: ../common.txt
10
11Implementation
12--------------
13
14The implementation is split in two files, a form file containing the definition
15of the variational forms expressed in UFL and the solver which is implemented
16in a C++ file.
17
18Running this demo requires the following files: :download:`main.cpp`,
19:download:`Biharmonic.ufl` and :download:`CMakeLists.txt`.
20
21UFL form file
22^^^^^^^^^^^^^
23
24First we define the variational problem in UFL in the file called
25:download:`Biharmonic.ufl`.
26
27In the UFL file, the finite element space is defined:
28
29.. code-block:: python
30
31 # Elements
32 element = FiniteElement("Lagrange", triangle, 2)
33
34On the space ``element``, trial and test functions, and the source term
35are defined:
36
37.. code-block:: python
38
39 # Trial and test functions
40 u = TrialFunction(element)
41 v = TestFunction(element)
42 f = Coefficient(element)
43
44Next, the outward unit normal to cell boundaries and a measure of the
45cell size are defined. The average size of cells sharing a facet will
46be used (``h_avg``). The UFL syntax ``('+')`` and ``('-')`` restricts
47a function to the ``('+')`` and ``('-')`` sides of a facet,
48respectively. The penalty parameter ``alpha`` is made a
49:cpp:class:`Constant` so that it can be changed in the program without
50regenerating the code.
51
52.. code-block:: python
53
54 # Normal component, mesh size and right-hand side
55 n = element.cell().n
56 h = 2.0*triangle.circumradius
57 h_avg = (h('+') + h('-'))/2
58
59 # Parameters
60 alpha = Constant(triangle)
61
62Finally the bilinear and linear forms are defined. Integrals over
63internal facets are indicated by ``*dS``.
64
65.. code-block:: python
66
67 # Bilinear form
68 a = inner(div(grad(u)), div(grad(v)))*dx \
69 - inner(avg(div(grad(u))), jump(grad(v), n))*dS \
70 - inner(jump(grad(u), n), avg(div(grad(v))))*dS \
71 + alpha('+')/h_avg*inner(jump(grad(u), n), jump(grad(v),n))*dS
72
73 # Linear form
74 L = f*v*dx
75
76
77C++ program
78^^^^^^^^^^^
79
80The DOLFIN interface and the code generated from the UFL input is included,
81and the DOLFIN namespace is used:
82
83.. code-block:: c++
84
85 #include <dolfin.h>
86 #include "Biharmonic.h"
87
88 using namespace dolfin;
89
90A class ``Source`` is defined for the function :math:`f`, with the
91function ``Expression::eval`` overloaded:
92
93.. code-block:: c++
94
95 // Source term
96 class Source : public Expression
97 {
98 public:
99
100 void eval(Array<double>& values, const Array<double>& x) const
101 {
102 values[0] = 4.0*std::pow(DOLFIN_PI, 4)*std::sin(DOLFIN_PI*x[0])*std::sin(DOLFIN_PI*x[1]);
103 }
104
105 };
106
107A boundary subdomain is defined, which in this case is the entire boundary:
108
109.. code-block:: c++
110
111 // Sub domain for Dirichlet boundary condition
112 class DirichletBoundary : public SubDomain
113 {
114 bool inside(const Array<double>& x, bool on_boundary) const
115 {
116 return on_boundary;
117 }
118 };
119
120The main part of the program is begun, and a mesh is created with 32 vertices
121in each direction:
122
123.. code-block:: c++
124
125 int main()
126 {
127 // Create mesh
128 UnitSquare mesh(32, 32);
129
130
131The source function, a function for the cell size and the penalty term
132are declared:
133
134.. code-block:: c++
135
136 // Create functions
137 Source f;
138 Constant alpha(8.0);
139
140A function space object, which is defined in the generated code, is created:
141
142.. code-block:: c++
143
144 // Create function space
145 Biharmonic::FunctionSpace V(mesh);
146
147The Dirichlet boundary condition on :math:`u` is constructed by
148defining a :cpp:class:`Constant` which is equal to zero, defining the boundary
149(``DirichletBoundary``), and using these, together with ``V``, to create
150``bc``:
151
152.. code-block:: c++
153
154 // Define boundary condition
155 Constant u0(0.0);
156 DirichletBoundary boundary;
157 DirichletBC bc(V, u0, boundary);
158
159Using the function space ``V``, the bilinear and linear forms
160are created, and function are attached:
161
162.. code-block:: c++
163
164 // Define forms and attach functions
165 Biharmonic::BilinearForm a(V, V);
166 Biharmonic::LinearForm L(V);
167 a.alpha = alpha; L.f = f;
168
169A :cpp:class:`VariationalProblem` is created from the forms and the
170Dirichet boundary condition, a finite element function ``u`` is
171created and the problem is solved:
172
173.. code-block:: c++
174
175 // Create PDE
176 VariationalProblem problem(a, L, bc);
177
178 // Solve PDE
179 Function u(V);
180 problem.solve(u);
181
182The solution is then plotted to the screen and written to a file in VTK
183format:
184
185.. code-block:: c++
186
187 // Plot solution
188 plot(u);
189
190 // Save solution in VTK format
191 File file("biharmonic.pvd");
192 file << u;
193
194 return 0;
195 }
196
197Complete code
198-------------
199
200Complete UFL file
201^^^^^^^^^^^^^^^^^
202
203.. literalinclude:: Biharmonic.ufl
204 :start-after: # Compile
205 :language: python
206
207Complete main file
208^^^^^^^^^^^^^^^^^^
209
210.. literalinclude:: main.cpp
211 :start-after: // using
212 :language: c++
0213
=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/main.cpp'
--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/main.cpp 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/cpp/main.cpp 2011-05-28 15:37:28 +0000
@@ -0,0 +1,85 @@
1// Copyright (C) 2009 Kristian Oelgaard.
2// Licensed under the GNU LGPL Version 2.1.
3//
4// First added: 2009-06-26
5// Last changed: 2010-09-01
6//
7// This demo program solves the Biharmonic equation,
8//
9// - nabla^4 u(x, y) = f(x, y)
10//
11// on the unit square with source f given by
12//
13// f(x, y) = 4 pi^4 sin(pi*x)*sin(pi*y)
14//
15// and boundary conditions given by
16//
17// u(x, y) = 0
18// nabla^2 u(x, y) = 0
19//
20// using a discontinuous Galerkin formulation (interior penalty method).
21
22#include <dolfin.h>
23#include "Biharmonic.h"
24
25using namespace dolfin;
26
27// Source term
28class Source : public Expression
29{
30public:
31
32 void eval(Array<double>& values, const Array<double>& x) const
33 {
34 values[0] = 4.0*std::pow(DOLFIN_PI, 4)*std::sin(DOLFIN_PI*x[0])*std::sin(DOLFIN_PI*x[1]);
35 }
36
37};
38
39// Sub domain for Dirichlet boundary condition
40class DirichletBoundary : public SubDomain
41{
42 bool inside(const Array<double>& x, bool on_boundary) const
43 {
44 return on_boundary;
45 }
46};
47
48int main()
49{
50 // Create mesh
51 UnitSquare mesh(32, 32);
52
53 // Create functions
54 Source f;
55 Constant alpha(8.0);
56
57 // Create function space
58 Biharmonic::FunctionSpace V(mesh);
59
60 // Define boundary condition
61 Constant u0(0.0);
62 DirichletBoundary boundary;
63 DirichletBC bc(V, u0, boundary);
64
65 // Define forms and attach functions
66 Biharmonic::BilinearForm a(V, V);
67 Biharmonic::LinearForm L(V);
68 a.alpha = alpha; L.f = f;
69
70 // Create PDE
71 VariationalProblem problem(a, L, bc);
72
73 // Solve PDE
74 Function u(V);
75 problem.solve(u);
76
77 // Plot solution
78 plot(u);
79
80 // Save solution in VTK format
81 File file("biharmonic.pvd");
82 file << u;
83
84 return 0;
85}
086
=== added directory 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/python'
=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/demo_biharmonic.py'
--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/demo_biharmonic.py 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/demo_biharmonic.py 2011-05-28 15:37:28 +0000
@@ -0,0 +1,78 @@
1"""This demo program solves the Biharmonic equation,
2
3 nabla^4 u(x, y) = f(x, y)
4
5on the unit square with source f given by
6
7 f(x, y) = 4 pi^4 sin(pi*x)*sin(pi*y)
8
9and boundary conditions given by
10
11 u(x, y) = 0
12 nabla^2 u(x, y) = 0
13
14using a discontinuous Galerkin formulation (interior penalty method).
15"""
16
17__author__ = "Kristian B. Oelgaard (k.b.oelgaard@tudelft.nl)"
18__date__ = "2009-06-26 -- 2009-06-26"
19__copyright__ = "Copyright (C) 2009 Kristian B. Oelgaard"
20__license__ = "GNU LGPL Version 2.1"
21
22# Begin demo
23
24from dolfin import *
25
26# Optimization options for the form compiler
27parameters["form_compiler"]["cpp_optimize"] = True
28parameters["form_compiler"]["optimize"] = True
29
30# Create mesh and define function space
31mesh = UnitSquare(32, 32)
32V = FunctionSpace(mesh, "CG", 2)
33
34# Define Dirichlet boundary
35class DirichletBoundary(SubDomain):
36 def inside(self, x, on_boundary):
37 return on_boundary
38
39class Source(Expression):
40 def eval(self, values, x):
41 values[0] = 4.0*pi**4*sin(pi*x[0])*sin(pi*x[1])
42
43# Define boundary condition
44u0 = Constant(0.0)
45bc = DirichletBC(V, u0, DirichletBoundary())
46
47# Define trial and test functions
48u = TrialFunction(V)
49v = TestFunction(V)
50
51# Define normal component, mesh size and right-hand side
52h = CellSize(mesh)
53h_avg = (h('+') + h('-'))/2.0
54n = FacetNormal(mesh)
55f = Source()
56
57# Penalty parameter
58alpha = Constant(8.0)
59
60# Define bilinear form
61a = inner(div(grad(u)), div(grad(v)))*dx \
62 - inner(avg(div(grad(u))), jump(grad(v), n))*dS \
63 - inner(jump(grad(u), n), avg(div(grad(v))))*dS \
64 + alpha('+')/h_avg*inner(jump(grad(u),n), jump(grad(v),n))*dS
65
66# Define linear form
67L = f*v*dx
68
69# Create variational problem and solve
70problem = VariationalProblem(a, L, bc)
71u = problem.solve()
72
73# Save solution to file
74file = File("biharmonic.pvd")
75file << u
76
77# Plot solution
78plot(u, interactive=True)
079
=== added file 'doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/documentation.rst'
--- doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/documentation.rst 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/pde/biharmonic/python/documentation.rst 2011-05-28 15:37:28 +0000
@@ -0,0 +1,132 @@
1.. Documentation for the biharmonic demo from DOLFIN.
2
3.. _demos_pde_biharmonic_python_documentation:
4
5Biharmonic equation
6===================
7
8This demo is implemented in a single Python file, :download:`demo_biharmonic.py`,
9which contains both the variational forms and the solver.
10
11.. include:: ../common.txt
12
13Implementation
14--------------
15
16This demo is implemented in the :download:`demo_biharmonic.py` file.
17
18First, the ``dolfin`` module is imported:
19
20.. code-block:: python
21
22 from dolfin import *
23
24Next, some parameters for the form compiler are set:
25
26.. code-block:: python
27
28 # Optimization options for the form compiler
29 parameters["form_compiler"]["cpp_optimize"] = True
30 parameters["form_compiler"]["optimize"] = True
31
32A mesh is created, and a quadratic finite element function space:
33
34.. code-block:: python
35
36 # Create mesh and define function space
37 mesh = UnitSquare(32, 32)
38 V = FunctionSpace(mesh, "CG", 2)
39
40A subclass of ``SubDomain``, ``DirichletBoundary`` is created for later
41defining the boundary of the domian:
42
43.. code-block:: python
44
45 # Define Dirichlet boundary
46 class DirichletBoundary(SubDomain):
47 def inside(self, x, on_boundary):
48 return on_boundary
49
50A subclass of ``Expression``, ``Source`` is created for the source
51term :math:`f`:
52
53.. code-block:: python
54
55 class Source(Expression):
56 def eval(self, values, x):
57 values[0] = 4.0*pi**4*sin(pi*x[0])*sin(pi*x[1])
58
59The Dirichlet boundary condition is created:
60
61.. code-block:: python
62
63 # Define boundary condition
64 u0 = Constant(0.0)
65 bc = DirichletBC(V, u0, DirichletBoundary())
66
67On the finite element space ``V``, trial and test functions are created:
68
69.. code-block:: python
70
71 # Define trial and test functions
72 u = TrialFunction(V)
73 v = TestFunction(V)
74
75A function for the cell size :math:`h` is created, as is a function for
76the average size of cells that share a facet (``h_avg``). The UFL syntax
77``('+')`` and ``('-')`` restricts a function to the ``('+')`` and ``('-')``
78sides of a facet, respectively. The unit outward normal to cell boundaries (``n``)
79is created, as is the source term ``f`` and the penalty parameter ``alpha``. The
80penalty parameters is made a ``Constant`` so that it can be changed without needing
81to regenerate code.
82
83.. code-block:: python
84
85 # Define normal component, mesh size and right-hand side
86 h = CellSize(mesh)
87 h_avg = (h('+') + h('-'))/2.0
88 n = FacetNormal(mesh)
89 f = Source()
90
91 # Penalty parameter
92 alpha = Constant(8.0)
93
94The bilinear and linear forms are defined:
95
96.. code-block:: python
97
98 # Define bilinear form
99 a = inner(div(grad(u)), div(grad(v)))*dx \
100 - inner(avg(div(grad(u))), jump(grad(v), n))*dS \
101 - inner(jump(grad(u), n), avg(div(grad(v))))*dS \
102 + alpha('+')/h_avg*inner(jump(grad(u),n), jump(grad(v),n))*dS
103
104 # Define linear form
105 L = f*v*dx
106
107A variational problem is created and solved:
108
109.. code-block:: python
110
111 # Create variational problem and solve
112 problem = VariationalProblem(a, L, bc)
113 u = problem.solve()
114
115The computed solution is written to a file in VTK format and plotted to
116the screen.
117
118.. code-block:: python
119
120 # Save solution to file
121 file = File("biharmonic.pvd")
122 file << u
123
124 # Plot solution
125 plot(u, interactive=True)
126
127
128Complete code
129-------------
130
131.. literalinclude:: demo_biharmonic.py
132 :start-after: # Begin demo
0133
=== added directory 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard'
=== added file 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cahn-hilliard_c.png'
1Binary 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 differ134Binary 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
=== added file 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/common.txt'
--- doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/common.txt 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/common.txt 2011-05-28 15:37:28 +0000
@@ -0,0 +1,91 @@
1This example demonstrates the solution of a particular nonlinear
2time-dependent fourth-order equation, known as the Cahn-Hilliard
3equation. In particular it demonstrates the use of
4
5* The built-in Newton solver
6* Advanced use of the base class ``NonlinearProblem``
7* Automatic linearisation
8* A mixed finite element method
9* The :math:`\theta`-method for time-dependent equations
10* User-defined Expressions as Python classes
11* Form compiler options
12* Interpolation of functions
13
14
15Equation and problem definition
16-------------------------------
17
18The Cahn-Hilliard equation is a parabolic equation and is typically used
19to model phase separation in binary mixtures. It involves first-order time
20derivatives, and second- and fourth-order spatial derivatives. The equation
21reads:
22
23.. math::
24 \frac{\partial c}{\partial t} - \nabla \cdot M \left(\nabla\left(\frac{d f}{d c}
25 + \lambda \nabla^{2}c\right)\right) &= 0 \quad {\rm in} \ \Omega, \\
26 M\left(\nabla\left(\frac{d f}{d c} + \lambda \nabla^{2}c\right)\right) &= 0 \quad {\rm on} \ \partial\Omega, \\
27 M \lambda \nabla c \cdot n &= 0 \quad {\rm on} \ \partial\Omega.
28
29where :math:`c` is the unknown field, the function :math:`f` is
30usually non-convex in :math:`c` (a fourth-order polynomial is commonly
31used), :math:`n` is the outward directed boundary normal, and :math:`M`
32is a scalar parameter.
33
34Mixed form
35^^^^^^^^^^
36
37The Cahn-Hilliard equation is a fourth-order equation, so casting it in a weak
38form would result in the presence of second-order spatial derivatives, and the
39problem could not be solved using a standard Lagrange finite element basis.
40A solution is to rephrase the problem as two coupled second-order equations:
41
42.. math::
43 \frac{\partial c}{\partial t} - \nabla \cdot M \nabla\mu &= 0 \quad {\rm in} \ \Omega, \\
44 \mu - \frac{d f}{d c} - \lambda \nabla^{2}c &= 0 \quad {\rm in} \ \Omega.
45
46The unknown fields are now :math:`c` and :math:`\mu`. The weak (variational)
47form of the problem reads: find :math:`(c, \mu) \in V \times V` such that
48
49.. math::
50 \int_{\Omega} \frac{\partial c}{\partial t} q \, {\rm d} x + \int_{\Omega} M \nabla\mu \cdot \nabla q \, {\rm d} x
51 &= 0 \quad \forall \ q \in V, \\
52 \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
53 &= 0 \quad \forall \ v \in V.
54
55Time discretisation
56^^^^^^^^^^^^^^^^^^^
57
58Before being able to solve this problem, the time derivative must be dealt
59with. Apply the :math:`\theta`-method to the mixed weak form of the equation:
60
61.. math::
62
63 \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
64 &= 0 \quad \forall \ q \in V \\
65 \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
66 &= 0 \quad \forall \ v \in V
67
68where :math:`dt = t_{n+1} - t_{n}`
69and :math:`\mu_{n+\theta} = (1-\theta) \mu_{n} + \theta \mu_{n+1}`.
70The task is: given :math:`c_{n}` and :math:`\mu_{n}`, solve the above
71equation to find :math:`c_{n+1}` and :math:`\mu_{n+1}`.
72
73
74Demo parameters
75^^^^^^^^^^^^^^^
76
77The following domains, functions and time stepping parameters are used in this demo:
78
79* :math:`\Omega = (0, 1) \times (0, 1)` (unit square)
80* :math:`f = 100 c^{2} (1-c)^{2}`
81* :math:`\lambda = 1 \times 10^{-2}`
82* :math:`M = 1`
83* :math:`dt = 5 \times 10^{-6}`
84* :math:`\theta = 0.5`
85
86With the above input the solution for :math:`c` will look as follows:
87
88.. image:: ../cahn-hilliard_c.png
89 :scale: 75
90 :align: center
91
092
=== added directory 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp'
=== added file 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CMakeLists.txt'
--- doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CMakeLists.txt 2011-05-28 15:37:28 +0000
@@ -0,0 +1,34 @@
1# Require CMake 2.8
2cmake_minimum_required(VERSION 2.8)
3
4project(demo_cahn-hilliard)
5
6# Set verbose output while testing CMake
7#set(CMAKE_VERBOSE_MAKEFILE 1)
8
9# Set CMake behavior
10cmake_policy(SET CMP0004 OLD)
11
12# Get DOLFIN configuration data (dolfin-config.cmake must be in DOLFIN_CMAKE_CONFIG_PATH)
13find_package(dolfin)
14
15# Default build type (can be overridden by user)
16if (NOT CMAKE_BUILD_TYPE)
17 set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
18 "Choose the type of build, options are: Debug MinSizeRel Release RelWithDebInfo." FORCE)
19endif()
20
21# Compiler definitions
22add_definitions(${DOLFIN_CXX_DEFINITIONS})
23
24# Add special DOLFIN compiler flags
25set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DOLFIN_CXX_FLAGS}")
26
27# Include directories
28include_directories(${DOLFIN_INCLUDE_DIRS} ${DOLFIN_3RD_PARTY_INCLUDE_DIRS})
29
30# Executable
31add_executable(demo_cahn-hilliard CahnHilliard2D.cpp CahnHilliard3D.cpp main.cpp)
32
33# Target libraries
34target_link_libraries(demo_cahn-hilliard ${DOLFIN_LIBRARIES} ${DOLFIN_3RD_PARTY_LIBRARIES})
035
=== added file 'doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CahnHilliard2D.cpp'
--- doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CahnHilliard2D.cpp 1970-01-01 00:00:00 +0000
+++ doc-temporarily-removed/dolfin/demos/pde/cahn-hilliard/cpp/CahnHilliard2D.cpp 2011-05-28 15:37:28 +0000
@@ -0,0 +1,4467 @@
1// This code conforms with the UFC specification version 2.0.0
2// and was automatically generated by FFC version 0.9.9+.
3//
4// This code was generated with the option '-l dolfin' and
5// contains DOLFIN-specific wrappers that depend on DOLFIN.
6//
7// This code was generated with the following parameters:
8//
9// cache_dir: ''
10// convert_exceptions_to_warnings: False
11// cpp_optimize: False
12// cpp_optimize_flags: '-O2'
13// epsilon: 1e-14
14// error_control: False
15// form_postfix: True
16// format: 'dolfin'
17// log_level: 10
18// log_prefix: ''
19// no_ferari: True
20// optimize: True
21// output_dir: '.'
22// precision: 15
23// quadrature_degree: 'auto'
24// quadrature_rule: 'auto'
25// representation: 'auto'
26// split: True
27// swig_binary: 'swig'
28// swig_path: ''
29
30#include "CahnHilliard2D.h"
31
32/// Constructor
33cahnhilliard2d_finite_element_0::cahnhilliard2d_finite_element_0() : ufc::finite_element()
34{
35 // Do nothing
36}
37
38/// Destructor
39cahnhilliard2d_finite_element_0::~cahnhilliard2d_finite_element_0()
40{
41 // Do nothing
42}
43
44/// Return a string identifying the finite element
45const char* cahnhilliard2d_finite_element_0::signature() const
46{
47 return "FiniteElement('Discontinuous Lagrange', Cell('triangle', 1, Space(2)), 0)";
48}
49
50/// Return the cell shape
51ufc::shape cahnhilliard2d_finite_element_0::cell_shape() const
52{
53 return ufc::triangle;
54}
55
56/// Return the topological dimension of the cell shape
57unsigned int cahnhilliard2d_finite_element_0::topological_dimension() const
58{
59 return 2;
60}
61
62/// Return the geometric dimension of the cell shape
63unsigned int cahnhilliard2d_finite_element_0::geometric_dimension() const
64{
65 return 2;
66}
67
68/// Return the dimension of the finite element function space
69unsigned int cahnhilliard2d_finite_element_0::space_dimension() const
70{
71 return 1;
72}
73
74/// Return the rank of the value space
75unsigned int cahnhilliard2d_finite_element_0::value_rank() const
76{
77 return 0;
78}
79
80/// Return the dimension of the value space for axis i
81unsigned int cahnhilliard2d_finite_element_0::value_dimension(unsigned int i) const
82{
83 return 1;
84}
85
86/// Evaluate basis function i at given point in cell
87void cahnhilliard2d_finite_element_0::evaluate_basis(unsigned int i,
88 double* values,
89 const double* coordinates,
90 const ufc::cell& c) const
91{
92 // Extract vertex coordinates
93
94 // Compute Jacobian of affine map from reference cell
95
96 // Compute determinant of Jacobian
97
98 // Compute inverse of Jacobian
99
100 // Compute constants
101
102 // Get coordinates and map to the reference (FIAT) element
103
104 // Reset values.
105 *values = 0.000000000000000;
106
107 // Array of basisvalues.
108 double basisvalues[1] = {0.000000000000000};
109
110 // Declare helper variables.
111
112 // Compute basisvalues.
113 basisvalues[0] = 1.000000000000000;
114
115 // Table(s) of coefficients.
116 static const double coefficients0[1] = \
117 {1.000000000000000};
118
119 // Compute value(s).
120 for (unsigned int r = 0; r < 1; r++)
121 {
122 *values += coefficients0[r]*basisvalues[r];
123 }// end loop over 'r'
124}
125
126/// Evaluate all basis functions at given point in cell
127void cahnhilliard2d_finite_element_0::evaluate_basis_all(double* values,
128 const double* coordinates,
129 const ufc::cell& c) const
130{
131 // Element is constant, calling evaluate_basis.
132 evaluate_basis(0, values, coordinates, c);
133}
134
135/// Evaluate order n derivatives of basis function i at given point in cell
136void cahnhilliard2d_finite_element_0::evaluate_basis_derivatives(unsigned int i,
137 unsigned int n,
138 double* values,
139 const double* coordinates,
140 const ufc::cell& c) const
141{
142 // Extract vertex coordinates
143 const double * const * x = c.coordinates;
144
145 // Compute Jacobian of affine map from reference cell
146 const double J_00 = x[1][0] - x[0][0];
147 const double J_01 = x[2][0] - x[0][0];
148 const double J_10 = x[1][1] - x[0][1];
149 const double J_11 = x[2][1] - x[0][1];
150
151 // Compute determinant of Jacobian
152 double detJ = J_00*J_11 - J_01*J_10;
153
154 // Compute inverse of Jacobian
155 const double K_00 = J_11 / detJ;
156 const double K_01 = -J_01 / detJ;
157 const double K_10 = -J_10 / detJ;
158 const double K_11 = J_00 / detJ;
159
160 // Compute constants
161
162 // Get coordinates and map to the reference (FIAT) element
163
164 // Compute number of derivatives.
165 unsigned int num_derivatives = 1;
166 for (unsigned int r = 0; r < n; r++)
167 {
168 num_derivatives *= 2;
169 }// end loop over 'r'
170
171 // Declare pointer to two dimensional array that holds combinations of derivatives and initialise
172 unsigned int **combinations = new unsigned int *[num_derivatives];
173 for (unsigned int row = 0; row < num_derivatives; row++)
174 {
175 combinations[row] = new unsigned int [n];
176 for (unsigned int col = 0; col < n; col++)
177 combinations[row][col] = 0;
178 }
179
180 // Generate combinations of derivatives
181 for (unsigned int row = 1; row < num_derivatives; row++)
182 {
183 for (unsigned int num = 0; num < row; num++)
184 {
185 for (unsigned int col = n-1; col+1 > 0; col--)
186 {
187 if (combinations[row][col] + 1 > 1)
188 combinations[row][col] = 0;
189 else
190 {
191 combinations[row][col] += 1;
192 break;
193 }
194 }
195 }
196 }
197
198 // Compute inverse of Jacobian
199 const double Jinv[2][2] = {{K_00, K_01}, {K_10, K_11}};
200
201 // Declare transformation matrix
202 // Declare pointer to two dimensional array and initialise
203 double **transform = new double *[num_derivatives];
204
205 for (unsigned int j = 0; j < num_derivatives; j++)
206 {
207 transform[j] = new double [num_derivatives];
208 for (unsigned int k = 0; k < num_derivatives; k++)
209 transform[j][k] = 1;
210 }
211
212 // Construct transformation matrix
213 for (unsigned int row = 0; row < num_derivatives; row++)
214 {
215 for (unsigned int col = 0; col < num_derivatives; col++)
216 {
217 for (unsigned int k = 0; k < n; k++)
218 transform[row][col] *= Jinv[combinations[col][k]][combinations[row][k]];
219 }
220 }
221
222 // Reset values. Assuming that values is always an array.
223 for (unsigned int r = 0; r < num_derivatives; r++)
224 {
225 values[r] = 0.000000000000000;
226 }// end loop over 'r'
227
228
229 // Array of basisvalues.
230 double basisvalues[1] = {0.000000000000000};
231
232 // Declare helper variables.
233
234 // Compute basisvalues.
235 basisvalues[0] = 1.000000000000000;
236
237 // Table(s) of coefficients.
238 static const double coefficients0[1] = \
239 {1.000000000000000};
240
241 // Tables of derivatives of the polynomial base (transpose).
242 static const double dmats0[1][1] = \
243 {{0.000000000000000}};
244
245 static const double dmats1[1][1] = \
246 {{0.000000000000000}};
247
248 // Compute reference derivatives.
249 // Declare pointer to array of derivatives on FIAT element.
250 double *derivatives = new double[num_derivatives];
251 for (unsigned int r = 0; r < num_derivatives; r++)
252 {
253 derivatives[r] = 0.000000000000000;
254 }// end loop over 'r'
255
256 // Declare derivative matrix (of polynomial basis).
257 double dmats[1][1] = \
258 {{1.000000000000000}};
259
260 // Declare (auxiliary) derivative matrix (of polynomial basis).
261 double dmats_old[1][1] = \
262 {{1.000000000000000}};
263
264 // Loop possible derivatives.
265 for (unsigned int r = 0; r < num_derivatives; r++)
266 {
267 // Resetting dmats values to compute next derivative.
268 for (unsigned int t = 0; t < 1; t++)
269 {
270 for (unsigned int u = 0; u < 1; u++)
271 {
272 dmats[t][u] = 0.000000000000000;
273 if (t == u)
274 {
275 dmats[t][u] = 1.000000000000000;
276 }
277
278 }// end loop over 'u'
279 }// end loop over 't'
280
281 // Looping derivative order to generate dmats.
282 for (unsigned int s = 0; s < n; s++)
283 {
284 // Updating dmats_old with new values and resetting dmats.
285 for (unsigned int t = 0; t < 1; t++)
286 {
287 for (unsigned int u = 0; u < 1; u++)
288 {
289 dmats_old[t][u] = dmats[t][u];
290 dmats[t][u] = 0.000000000000000;
291 }// end loop over 'u'
292 }// end loop over 't'
293
294 // Update dmats using an inner product.
295 if (combinations[r][s] == 0)
296 {
297 for (unsigned int t = 0; t < 1; t++)
298 {
299 for (unsigned int u = 0; u < 1; u++)
300 {
301 for (unsigned int tu = 0; tu < 1; tu++)
302 {
303 dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
304 }// end loop over 'tu'
305 }// end loop over 'u'
306 }// end loop over 't'
307 }
308
309 if (combinations[r][s] == 1)
310 {
311 for (unsigned int t = 0; t < 1; t++)
312 {
313 for (unsigned int u = 0; u < 1; u++)
314 {
315 for (unsigned int tu = 0; tu < 1; tu++)
316 {
317 dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
318 }// end loop over 'tu'
319 }// end loop over 'u'
320 }// end loop over 't'
321 }
322
323 }// end loop over 's'
324 for (unsigned int s = 0; s < 1; s++)
325 {
326 for (unsigned int t = 0; t < 1; t++)
327 {
328 derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
329 }// end loop over 't'
330 }// end loop over 's'
331 }// end loop over 'r'
332
333 // Transform derivatives back to physical element
334 for (unsigned int r = 0; r < num_derivatives; r++)
335 {
336 for (unsigned int s = 0; s < num_derivatives; s++)
337 {
338 values[r] += transform[r][s]*derivatives[s];
339 }// end loop over 's'
340 }// end loop over 'r'
341
342 // Delete pointer to array of derivatives on FIAT element
343 delete [] derivatives;
344
345 // Delete pointer to array of combinations of derivatives and transform
346 for (unsigned int r = 0; r < num_derivatives; r++)
347 {
348 delete [] combinations[r];
349 }// end loop over 'r'
350 delete [] combinations;
351 for (unsigned int r = 0; r < num_derivatives; r++)
352 {
353 delete [] transform[r];
354 }// end loop over 'r'
355 delete [] transform;
356}
357
358/// Evaluate order n derivatives of all basis functions at given point in cell
359void cahnhilliard2d_finite_element_0::evaluate_basis_derivatives_all(unsigned int n,
360 double* values,
361 const double* coordinates,
362 const ufc::cell& c) const
363{
364 // Element is constant, calling evaluate_basis_derivatives.
365 evaluate_basis_derivatives(0, n, values, coordinates, c);
366}
367
368/// Evaluate linear functional for dof i on the function f
369double cahnhilliard2d_finite_element_0::evaluate_dof(unsigned int i,
370 const ufc::function& f,
371 const ufc::cell& c) const
372{
373 // Declare variables for result of evaluation.
374 double vals[1];
375
376 // Declare variable for physical coordinates.
377 double y[2];
378 const double * const * x = c.coordinates;
379 switch (i)
380 {
381 case 0:
382 {
383 y[0] = 0.333333333333333*x[0][0] + 0.333333333333333*x[1][0] + 0.333333333333333*x[2][0];
384 y[1] = 0.333333333333333*x[0][1] + 0.333333333333333*x[1][1] + 0.333333333333333*x[2][1];
385 f.evaluate(vals, y, c);
386 return vals[0];
387 break;
388 }
389 }
390
391 return 0.000000000000000;
392}
393
394/// Evaluate linear functionals for all dofs on the function f
395void cahnhilliard2d_finite_element_0::evaluate_dofs(double* values,
396 const ufc::function& f,
397 const ufc::cell& c) const
398{
399 // Declare variables for result of evaluation.
400 double vals[1];
401
402 // Declare variable for physical coordinates.
403 double y[2];
404 const double * const * x = c.coordinates;
405 y[0] = 0.333333333333333*x[0][0] + 0.333333333333333*x[1][0] + 0.333333333333333*x[2][0];
406 y[1] = 0.333333333333333*x[0][1] + 0.333333333333333*x[1][1] + 0.333333333333333*x[2][1];
407 f.evaluate(vals, y, c);
408 values[0] = vals[0];
409}
410
411/// Interpolate vertex values from dof values
412void cahnhilliard2d_finite_element_0::interpolate_vertex_values(double* vertex_values,
413 const double* dof_values,
414 const ufc::cell& c) const
415{
416 // Evaluate function and change variables
417 vertex_values[0] = dof_values[0];
418 vertex_values[1] = dof_values[0];
419 vertex_values[2] = dof_values[0];
420}
421
422/// Map coordinate xhat from reference cell to coordinate x in cell
423void cahnhilliard2d_finite_element_0::map_from_reference_cell(double* x,
424 const double* xhat,
425 const ufc::cell& c) const
426{
427 throw std::runtime_error("map_from_reference_cell not yet implemented (introduced in UFC 2.0).");
428}
429
430/// Map from coordinate x in cell to coordinate xhat in reference cell
431void cahnhilliard2d_finite_element_0::map_to_reference_cell(double* xhat,
432 const double* x,
433 const ufc::cell& c) const
434{
435 throw std::runtime_error("map_to_reference_cell not yet implemented (introduced in UFC 2.0).");
436}
437
438/// Return the number of sub elements (for a mixed element)
439unsigned int cahnhilliard2d_finite_element_0::num_sub_elements() const
440{
441 return 0;
442}
443
444/// Create a new finite element for sub element i (for a mixed element)
445ufc::finite_element* cahnhilliard2d_finite_element_0::create_sub_element(unsigned int i) const
446{
447 return 0;
448}
449
450/// Create a new class instance
451ufc::finite_element* cahnhilliard2d_finite_element_0::create() const
452{
453 return new cahnhilliard2d_finite_element_0();
454}
455
456
457/// Constructor
458cahnhilliard2d_finite_element_1::cahnhilliard2d_finite_element_1() : ufc::finite_element()
459{
460 // Do nothing
461}
462
463/// Destructor
464cahnhilliard2d_finite_element_1::~cahnhilliard2d_finite_element_1()
465{
466 // Do nothing
467}
468
469/// Return a string identifying the finite element
470const char* cahnhilliard2d_finite_element_1::signature() const
471{
472 return "FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1)";
473}
474
475/// Return the cell shape
476ufc::shape cahnhilliard2d_finite_element_1::cell_shape() const
477{
478 return ufc::triangle;
479}
480
481/// Return the topological dimension of the cell shape
482unsigned int cahnhilliard2d_finite_element_1::topological_dimension() const
483{
484 return 2;
485}
486
487/// Return the geometric dimension of the cell shape
488unsigned int cahnhilliard2d_finite_element_1::geometric_dimension() const
489{
490 return 2;
491}
492
493/// Return the dimension of the finite element function space
494unsigned int cahnhilliard2d_finite_element_1::space_dimension() const
495{
496 return 3;
497}
498
499/// Return the rank of the value space
500unsigned int cahnhilliard2d_finite_element_1::value_rank() const
501{
502 return 0;
503}
504
505/// Return the dimension of the value space for axis i
506unsigned int cahnhilliard2d_finite_element_1::value_dimension(unsigned int i) const
507{
508 return 1;
509}
510
511/// Evaluate basis function i at given point in cell
512void cahnhilliard2d_finite_element_1::evaluate_basis(unsigned int i,
513 double* values,
514 const double* coordinates,
515 const ufc::cell& c) const
516{
517 // Extract vertex coordinates
518 const double * const * x = c.coordinates;
519
520 // Compute Jacobian of affine map from reference cell
521 const double J_00 = x[1][0] - x[0][0];
522 const double J_01 = x[2][0] - x[0][0];
523 const double J_10 = x[1][1] - x[0][1];
524 const double J_11 = x[2][1] - x[0][1];
525
526 // Compute determinant of Jacobian
527 double detJ = J_00*J_11 - J_01*J_10;
528
529 // Compute inverse of Jacobian
530
531 // Compute constants
532 const double C0 = x[1][0] + x[2][0];
533 const double C1 = x[1][1] + x[2][1];
534
535 // Get coordinates and map to the reference (FIAT) element
536 double X = (J_01*(C1 - 2.0*coordinates[1]) + J_11*(2.0*coordinates[0] - C0)) / detJ;
537 double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
538
539 // Reset values.
540 *values = 0.000000000000000;
541 switch (i)
542 {
543 case 0:
544 {
545
546 // Array of basisvalues.
547 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
548
549 // Declare helper variables.
550 unsigned int rr = 0;
551 unsigned int ss = 0;
552 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
553
554 // Compute basisvalues.
555 basisvalues[0] = 1.000000000000000;
556 basisvalues[1] = tmp0;
557 for (unsigned int r = 0; r < 1; r++)
558 {
559 rr = (r + 1)*(r + 1 + 1)/2 + 1;
560 ss = r*(r + 1)/2;
561 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
562 }// end loop over 'r'
563 for (unsigned int r = 0; r < 2; r++)
564 {
565 for (unsigned int s = 0; s < 2 - r; s++)
566 {
567 rr = (r + s)*(r + s + 1)/2 + s;
568 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
569 }// end loop over 's'
570 }// end loop over 'r'
571
572 // Table(s) of coefficients.
573 static const double coefficients0[3] = \
574 {0.471404520791032, -0.288675134594813, -0.166666666666667};
575
576 // Compute value(s).
577 for (unsigned int r = 0; r < 3; r++)
578 {
579 *values += coefficients0[r]*basisvalues[r];
580 }// end loop over 'r'
581 break;
582 }
583 case 1:
584 {
585
586 // Array of basisvalues.
587 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
588
589 // Declare helper variables.
590 unsigned int rr = 0;
591 unsigned int ss = 0;
592 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
593
594 // Compute basisvalues.
595 basisvalues[0] = 1.000000000000000;
596 basisvalues[1] = tmp0;
597 for (unsigned int r = 0; r < 1; r++)
598 {
599 rr = (r + 1)*(r + 1 + 1)/2 + 1;
600 ss = r*(r + 1)/2;
601 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
602 }// end loop over 'r'
603 for (unsigned int r = 0; r < 2; r++)
604 {
605 for (unsigned int s = 0; s < 2 - r; s++)
606 {
607 rr = (r + s)*(r + s + 1)/2 + s;
608 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
609 }// end loop over 's'
610 }// end loop over 'r'
611
612 // Table(s) of coefficients.
613 static const double coefficients0[3] = \
614 {0.471404520791032, 0.288675134594813, -0.166666666666667};
615
616 // Compute value(s).
617 for (unsigned int r = 0; r < 3; r++)
618 {
619 *values += coefficients0[r]*basisvalues[r];
620 }// end loop over 'r'
621 break;
622 }
623 case 2:
624 {
625
626 // Array of basisvalues.
627 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
628
629 // Declare helper variables.
630 unsigned int rr = 0;
631 unsigned int ss = 0;
632 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
633
634 // Compute basisvalues.
635 basisvalues[0] = 1.000000000000000;
636 basisvalues[1] = tmp0;
637 for (unsigned int r = 0; r < 1; r++)
638 {
639 rr = (r + 1)*(r + 1 + 1)/2 + 1;
640 ss = r*(r + 1)/2;
641 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
642 }// end loop over 'r'
643 for (unsigned int r = 0; r < 2; r++)
644 {
645 for (unsigned int s = 0; s < 2 - r; s++)
646 {
647 rr = (r + s)*(r + s + 1)/2 + s;
648 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
649 }// end loop over 's'
650 }// end loop over 'r'
651
652 // Table(s) of coefficients.
653 static const double coefficients0[3] = \
654 {0.471404520791032, 0.000000000000000, 0.333333333333333};
655
656 // Compute value(s).
657 for (unsigned int r = 0; r < 3; r++)
658 {
659 *values += coefficients0[r]*basisvalues[r];
660 }// end loop over 'r'
661 break;
662 }
663 }
664
665}
666
667/// Evaluate all basis functions at given point in cell
668void cahnhilliard2d_finite_element_1::evaluate_basis_all(double* values,
669 const double* coordinates,
670 const ufc::cell& c) const
671{
672 // Helper variable to hold values of a single dof.
673 double dof_values = 0.000000000000000;
674
675 // Loop dofs and call evaluate_basis.
676 for (unsigned int r = 0; r < 3; r++)
677 {
678 evaluate_basis(r, &dof_values, coordinates, c);
679 values[r] = dof_values;
680 }// end loop over 'r'
681}
682
683/// Evaluate order n derivatives of basis function i at given point in cell
684void cahnhilliard2d_finite_element_1::evaluate_basis_derivatives(unsigned int i,
685 unsigned int n,
686 double* values,
687 const double* coordinates,
688 const ufc::cell& c) const
689{
690 // Extract vertex coordinates
691 const double * const * x = c.coordinates;
692
693 // Compute Jacobian of affine map from reference cell
694 const double J_00 = x[1][0] - x[0][0];
695 const double J_01 = x[2][0] - x[0][0];
696 const double J_10 = x[1][1] - x[0][1];
697 const double J_11 = x[2][1] - x[0][1];
698
699 // Compute determinant of Jacobian
700 double detJ = J_00*J_11 - J_01*J_10;
701
702 // Compute inverse of Jacobian
703 const double K_00 = J_11 / detJ;
704 const double K_01 = -J_01 / detJ;
705 const double K_10 = -J_10 / detJ;
706 const double K_11 = J_00 / detJ;
707
708 // Compute constants
709 const double C0 = x[1][0] + x[2][0];
710 const double C1 = x[1][1] + x[2][1];
711
712 // Get coordinates and map to the reference (FIAT) element
713 double X = (J_01*(C1 - 2.0*coordinates[1]) + J_11*(2.0*coordinates[0] - C0)) / detJ;
714 double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
715
716 // Compute number of derivatives.
717 unsigned int num_derivatives = 1;
718 for (unsigned int r = 0; r < n; r++)
719 {
720 num_derivatives *= 2;
721 }// end loop over 'r'
722
723 // Declare pointer to two dimensional array that holds combinations of derivatives and initialise
724 unsigned int **combinations = new unsigned int *[num_derivatives];
725 for (unsigned int row = 0; row < num_derivatives; row++)
726 {
727 combinations[row] = new unsigned int [n];
728 for (unsigned int col = 0; col < n; col++)
729 combinations[row][col] = 0;
730 }
731
732 // Generate combinations of derivatives
733 for (unsigned int row = 1; row < num_derivatives; row++)
734 {
735 for (unsigned int num = 0; num < row; num++)
736 {
737 for (unsigned int col = n-1; col+1 > 0; col--)
738 {
739 if (combinations[row][col] + 1 > 1)
740 combinations[row][col] = 0;
741 else
742 {
743 combinations[row][col] += 1;
744 break;
745 }
746 }
747 }
748 }
749
750 // Compute inverse of Jacobian
751 const double Jinv[2][2] = {{K_00, K_01}, {K_10, K_11}};
752
753 // Declare transformation matrix
754 // Declare pointer to two dimensional array and initialise
755 double **transform = new double *[num_derivatives];
756
757 for (unsigned int j = 0; j < num_derivatives; j++)
758 {
759 transform[j] = new double [num_derivatives];
760 for (unsigned int k = 0; k < num_derivatives; k++)
761 transform[j][k] = 1;
762 }
763
764 // Construct transformation matrix
765 for (unsigned int row = 0; row < num_derivatives; row++)
766 {
767 for (unsigned int col = 0; col < num_derivatives; col++)
768 {
769 for (unsigned int k = 0; k < n; k++)
770 transform[row][col] *= Jinv[combinations[col][k]][combinations[row][k]];
771 }
772 }
773
774 // Reset values. Assuming that values is always an array.
775 for (unsigned int r = 0; r < num_derivatives; r++)
776 {
777 values[r] = 0.000000000000000;
778 }// end loop over 'r'
779
780 switch (i)
781 {
782 case 0:
783 {
784
785 // Array of basisvalues.
786 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
787
788 // Declare helper variables.
789 unsigned int rr = 0;
790 unsigned int ss = 0;
791 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
792
793 // Compute basisvalues.
794 basisvalues[0] = 1.000000000000000;
795 basisvalues[1] = tmp0;
796 for (unsigned int r = 0; r < 1; r++)
797 {
798 rr = (r + 1)*(r + 1 + 1)/2 + 1;
799 ss = r*(r + 1)/2;
800 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
801 }// end loop over 'r'
802 for (unsigned int r = 0; r < 2; r++)
803 {
804 for (unsigned int s = 0; s < 2 - r; s++)
805 {
806 rr = (r + s)*(r + s + 1)/2 + s;
807 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
808 }// end loop over 's'
809 }// end loop over 'r'
810
811 // Table(s) of coefficients.
812 static const double coefficients0[3] = \
813 {0.471404520791032, -0.288675134594813, -0.166666666666667};
814
815 // Tables of derivatives of the polynomial base (transpose).
816 static const double dmats0[3][3] = \
817 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
818 {4.898979485566356, 0.000000000000000, 0.000000000000000},
819 {0.000000000000000, 0.000000000000000, 0.000000000000000}};
820
821 static const double dmats1[3][3] = \
822 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
823 {2.449489742783178, 0.000000000000000, 0.000000000000000},
824 {4.242640687119285, 0.000000000000000, 0.000000000000000}};
825
826 // Compute reference derivatives.
827 // Declare pointer to array of derivatives on FIAT element.
828 double *derivatives = new double[num_derivatives];
829 for (unsigned int r = 0; r < num_derivatives; r++)
830 {
831 derivatives[r] = 0.000000000000000;
832 }// end loop over 'r'
833
834 // Declare derivative matrix (of polynomial basis).
835 double dmats[3][3] = \
836 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
837 {0.000000000000000, 1.000000000000000, 0.000000000000000},
838 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
839
840 // Declare (auxiliary) derivative matrix (of polynomial basis).
841 double dmats_old[3][3] = \
842 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
843 {0.000000000000000, 1.000000000000000, 0.000000000000000},
844 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
845
846 // Loop possible derivatives.
847 for (unsigned int r = 0; r < num_derivatives; r++)
848 {
849 // Resetting dmats values to compute next derivative.
850 for (unsigned int t = 0; t < 3; t++)
851 {
852 for (unsigned int u = 0; u < 3; u++)
853 {
854 dmats[t][u] = 0.000000000000000;
855 if (t == u)
856 {
857 dmats[t][u] = 1.000000000000000;
858 }
859
860 }// end loop over 'u'
861 }// end loop over 't'
862
863 // Looping derivative order to generate dmats.
864 for (unsigned int s = 0; s < n; s++)
865 {
866 // Updating dmats_old with new values and resetting dmats.
867 for (unsigned int t = 0; t < 3; t++)
868 {
869 for (unsigned int u = 0; u < 3; u++)
870 {
871 dmats_old[t][u] = dmats[t][u];
872 dmats[t][u] = 0.000000000000000;
873 }// end loop over 'u'
874 }// end loop over 't'
875
876 // Update dmats using an inner product.
877 if (combinations[r][s] == 0)
878 {
879 for (unsigned int t = 0; t < 3; t++)
880 {
881 for (unsigned int u = 0; u < 3; u++)
882 {
883 for (unsigned int tu = 0; tu < 3; tu++)
884 {
885 dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
886 }// end loop over 'tu'
887 }// end loop over 'u'
888 }// end loop over 't'
889 }
890
891 if (combinations[r][s] == 1)
892 {
893 for (unsigned int t = 0; t < 3; t++)
894 {
895 for (unsigned int u = 0; u < 3; u++)
896 {
897 for (unsigned int tu = 0; tu < 3; tu++)
898 {
899 dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
900 }// end loop over 'tu'
901 }// end loop over 'u'
902 }// end loop over 't'
903 }
904
905 }// end loop over 's'
906 for (unsigned int s = 0; s < 3; s++)
907 {
908 for (unsigned int t = 0; t < 3; t++)
909 {
910 derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
911 }// end loop over 't'
912 }// end loop over 's'
913 }// end loop over 'r'
914
915 // Transform derivatives back to physical element
916 for (unsigned int r = 0; r < num_derivatives; r++)
917 {
918 for (unsigned int s = 0; s < num_derivatives; s++)
919 {
920 values[r] += transform[r][s]*derivatives[s];
921 }// end loop over 's'
922 }// end loop over 'r'
923
924 // Delete pointer to array of derivatives on FIAT element
925 delete [] derivatives;
926
927 // Delete pointer to array of combinations of derivatives and transform
928 for (unsigned int r = 0; r < num_derivatives; r++)
929 {
930 delete [] combinations[r];
931 }// end loop over 'r'
932 delete [] combinations;
933 for (unsigned int r = 0; r < num_derivatives; r++)
934 {
935 delete [] transform[r];
936 }// end loop over 'r'
937 delete [] transform;
938 break;
939 }
940 case 1:
941 {
942
943 // Array of basisvalues.
944 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
945
946 // Declare helper variables.
947 unsigned int rr = 0;
948 unsigned int ss = 0;
949 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
950
951 // Compute basisvalues.
952 basisvalues[0] = 1.000000000000000;
953 basisvalues[1] = tmp0;
954 for (unsigned int r = 0; r < 1; r++)
955 {
956 rr = (r + 1)*(r + 1 + 1)/2 + 1;
957 ss = r*(r + 1)/2;
958 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
959 }// end loop over 'r'
960 for (unsigned int r = 0; r < 2; r++)
961 {
962 for (unsigned int s = 0; s < 2 - r; s++)
963 {
964 rr = (r + s)*(r + s + 1)/2 + s;
965 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
966 }// end loop over 's'
967 }// end loop over 'r'
968
969 // Table(s) of coefficients.
970 static const double coefficients0[3] = \
971 {0.471404520791032, 0.288675134594813, -0.166666666666667};
972
973 // Tables of derivatives of the polynomial base (transpose).
974 static const double dmats0[3][3] = \
975 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
976 {4.898979485566356, 0.000000000000000, 0.000000000000000},
977 {0.000000000000000, 0.000000000000000, 0.000000000000000}};
978
979 static const double dmats1[3][3] = \
980 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
981 {2.449489742783178, 0.000000000000000, 0.000000000000000},
982 {4.242640687119285, 0.000000000000000, 0.000000000000000}};
983
984 // Compute reference derivatives.
985 // Declare pointer to array of derivatives on FIAT element.
986 double *derivatives = new double[num_derivatives];
987 for (unsigned int r = 0; r < num_derivatives; r++)
988 {
989 derivatives[r] = 0.000000000000000;
990 }// end loop over 'r'
991
992 // Declare derivative matrix (of polynomial basis).
993 double dmats[3][3] = \
994 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
995 {0.000000000000000, 1.000000000000000, 0.000000000000000},
996 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
997
998 // Declare (auxiliary) derivative matrix (of polynomial basis).
999 double dmats_old[3][3] = \
1000 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
1001 {0.000000000000000, 1.000000000000000, 0.000000000000000},
1002 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
1003
1004 // Loop possible derivatives.
1005 for (unsigned int r = 0; r < num_derivatives; r++)
1006 {
1007 // Resetting dmats values to compute next derivative.
1008 for (unsigned int t = 0; t < 3; t++)
1009 {
1010 for (unsigned int u = 0; u < 3; u++)
1011 {
1012 dmats[t][u] = 0.000000000000000;
1013 if (t == u)
1014 {
1015 dmats[t][u] = 1.000000000000000;
1016 }
1017
1018 }// end loop over 'u'
1019 }// end loop over 't'
1020
1021 // Looping derivative order to generate dmats.
1022 for (unsigned int s = 0; s < n; s++)
1023 {
1024 // Updating dmats_old with new values and resetting dmats.
1025 for (unsigned int t = 0; t < 3; t++)
1026 {
1027 for (unsigned int u = 0; u < 3; u++)
1028 {
1029 dmats_old[t][u] = dmats[t][u];
1030 dmats[t][u] = 0.000000000000000;
1031 }// end loop over 'u'
1032 }// end loop over 't'
1033
1034 // Update dmats using an inner product.
1035 if (combinations[r][s] == 0)
1036 {
1037 for (unsigned int t = 0; t < 3; t++)
1038 {
1039 for (unsigned int u = 0; u < 3; u++)
1040 {
1041 for (unsigned int tu = 0; tu < 3; tu++)
1042 {
1043 dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1044 }// end loop over 'tu'
1045 }// end loop over 'u'
1046 }// end loop over 't'
1047 }
1048
1049 if (combinations[r][s] == 1)
1050 {
1051 for (unsigned int t = 0; t < 3; t++)
1052 {
1053 for (unsigned int u = 0; u < 3; u++)
1054 {
1055 for (unsigned int tu = 0; tu < 3; tu++)
1056 {
1057 dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1058 }// end loop over 'tu'
1059 }// end loop over 'u'
1060 }// end loop over 't'
1061 }
1062
1063 }// end loop over 's'
1064 for (unsigned int s = 0; s < 3; s++)
1065 {
1066 for (unsigned int t = 0; t < 3; t++)
1067 {
1068 derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
1069 }// end loop over 't'
1070 }// end loop over 's'
1071 }// end loop over 'r'
1072
1073 // Transform derivatives back to physical element
1074 for (unsigned int r = 0; r < num_derivatives; r++)
1075 {
1076 for (unsigned int s = 0; s < num_derivatives; s++)
1077 {
1078 values[r] += transform[r][s]*derivatives[s];
1079 }// end loop over 's'
1080 }// end loop over 'r'
1081
1082 // Delete pointer to array of derivatives on FIAT element
1083 delete [] derivatives;
1084
1085 // Delete pointer to array of combinations of derivatives and transform
1086 for (unsigned int r = 0; r < num_derivatives; r++)
1087 {
1088 delete [] combinations[r];
1089 }// end loop over 'r'
1090 delete [] combinations;
1091 for (unsigned int r = 0; r < num_derivatives; r++)
1092 {
1093 delete [] transform[r];
1094 }// end loop over 'r'
1095 delete [] transform;
1096 break;
1097 }
1098 case 2:
1099 {
1100
1101 // Array of basisvalues.
1102 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
1103
1104 // Declare helper variables.
1105 unsigned int rr = 0;
1106 unsigned int ss = 0;
1107 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
1108
1109 // Compute basisvalues.
1110 basisvalues[0] = 1.000000000000000;
1111 basisvalues[1] = tmp0;
1112 for (unsigned int r = 0; r < 1; r++)
1113 {
1114 rr = (r + 1)*(r + 1 + 1)/2 + 1;
1115 ss = r*(r + 1)/2;
1116 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
1117 }// end loop over 'r'
1118 for (unsigned int r = 0; r < 2; r++)
1119 {
1120 for (unsigned int s = 0; s < 2 - r; s++)
1121 {
1122 rr = (r + s)*(r + s + 1)/2 + s;
1123 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
1124 }// end loop over 's'
1125 }// end loop over 'r'
1126
1127 // Table(s) of coefficients.
1128 static const double coefficients0[3] = \
1129 {0.471404520791032, 0.000000000000000, 0.333333333333333};
1130
1131 // Tables of derivatives of the polynomial base (transpose).
1132 static const double dmats0[3][3] = \
1133 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
1134 {4.898979485566356, 0.000000000000000, 0.000000000000000},
1135 {0.000000000000000, 0.000000000000000, 0.000000000000000}};
1136
1137 static const double dmats1[3][3] = \
1138 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
1139 {2.449489742783178, 0.000000000000000, 0.000000000000000},
1140 {4.242640687119285, 0.000000000000000, 0.000000000000000}};
1141
1142 // Compute reference derivatives.
1143 // Declare pointer to array of derivatives on FIAT element.
1144 double *derivatives = new double[num_derivatives];
1145 for (unsigned int r = 0; r < num_derivatives; r++)
1146 {
1147 derivatives[r] = 0.000000000000000;
1148 }// end loop over 'r'
1149
1150 // Declare derivative matrix (of polynomial basis).
1151 double dmats[3][3] = \
1152 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
1153 {0.000000000000000, 1.000000000000000, 0.000000000000000},
1154 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
1155
1156 // Declare (auxiliary) derivative matrix (of polynomial basis).
1157 double dmats_old[3][3] = \
1158 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
1159 {0.000000000000000, 1.000000000000000, 0.000000000000000},
1160 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
1161
1162 // Loop possible derivatives.
1163 for (unsigned int r = 0; r < num_derivatives; r++)
1164 {
1165 // Resetting dmats values to compute next derivative.
1166 for (unsigned int t = 0; t < 3; t++)
1167 {
1168 for (unsigned int u = 0; u < 3; u++)
1169 {
1170 dmats[t][u] = 0.000000000000000;
1171 if (t == u)
1172 {
1173 dmats[t][u] = 1.000000000000000;
1174 }
1175
1176 }// end loop over 'u'
1177 }// end loop over 't'
1178
1179 // Looping derivative order to generate dmats.
1180 for (unsigned int s = 0; s < n; s++)
1181 {
1182 // Updating dmats_old with new values and resetting dmats.
1183 for (unsigned int t = 0; t < 3; t++)
1184 {
1185 for (unsigned int u = 0; u < 3; u++)
1186 {
1187 dmats_old[t][u] = dmats[t][u];
1188 dmats[t][u] = 0.000000000000000;
1189 }// end loop over 'u'
1190 }// end loop over 't'
1191
1192 // Update dmats using an inner product.
1193 if (combinations[r][s] == 0)
1194 {
1195 for (unsigned int t = 0; t < 3; t++)
1196 {
1197 for (unsigned int u = 0; u < 3; u++)
1198 {
1199 for (unsigned int tu = 0; tu < 3; tu++)
1200 {
1201 dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1202 }// end loop over 'tu'
1203 }// end loop over 'u'
1204 }// end loop over 't'
1205 }
1206
1207 if (combinations[r][s] == 1)
1208 {
1209 for (unsigned int t = 0; t < 3; t++)
1210 {
1211 for (unsigned int u = 0; u < 3; u++)
1212 {
1213 for (unsigned int tu = 0; tu < 3; tu++)
1214 {
1215 dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1216 }// end loop over 'tu'
1217 }// end loop over 'u'
1218 }// end loop over 't'
1219 }
1220
1221 }// end loop over 's'
1222 for (unsigned int s = 0; s < 3; s++)
1223 {
1224 for (unsigned int t = 0; t < 3; t++)
1225 {
1226 derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
1227 }// end loop over 't'
1228 }// end loop over 's'
1229 }// end loop over 'r'
1230
1231 // Transform derivatives back to physical element
1232 for (unsigned int r = 0; r < num_derivatives; r++)
1233 {
1234 for (unsigned int s = 0; s < num_derivatives; s++)
1235 {
1236 values[r] += transform[r][s]*derivatives[s];
1237 }// end loop over 's'
1238 }// end loop over 'r'
1239
1240 // Delete pointer to array of derivatives on FIAT element
1241 delete [] derivatives;
1242
1243 // Delete pointer to array of combinations of derivatives and transform
1244 for (unsigned int r = 0; r < num_derivatives; r++)
1245 {
1246 delete [] combinations[r];
1247 }// end loop over 'r'
1248 delete [] combinations;
1249 for (unsigned int r = 0; r < num_derivatives; r++)
1250 {
1251 delete [] transform[r];
1252 }// end loop over 'r'
1253 delete [] transform;
1254 break;
1255 }
1256 }
1257
1258}
1259
1260/// Evaluate order n derivatives of all basis functions at given point in cell
1261void cahnhilliard2d_finite_element_1::evaluate_basis_derivatives_all(unsigned int n,
1262 double* values,
1263 const double* coordinates,
1264 const ufc::cell& c) const
1265{
1266 // Compute number of derivatives.
1267 unsigned int num_derivatives = 1;
1268 for (unsigned int r = 0; r < n; r++)
1269 {
1270 num_derivatives *= 2;
1271 }// end loop over 'r'
1272
1273 // Helper variable to hold values of a single dof.
1274 double *dof_values = new double[num_derivatives];
1275 for (unsigned int r = 0; r < num_derivatives; r++)
1276 {
1277 dof_values[r] = 0.000000000000000;
1278 }// end loop over 'r'
1279
1280 // Loop dofs and call evaluate_basis_derivatives.
1281 for (unsigned int r = 0; r < 3; r++)
1282 {
1283 evaluate_basis_derivatives(r, n, dof_values, coordinates, c);
1284 for (unsigned int s = 0; s < num_derivatives; s++)
1285 {
1286 values[r*num_derivatives + s] = dof_values[s];
1287 }// end loop over 's'
1288 }// end loop over 'r'
1289
1290 // Delete pointer.
1291 delete [] dof_values;
1292}
1293
1294/// Evaluate linear functional for dof i on the function f
1295double cahnhilliard2d_finite_element_1::evaluate_dof(unsigned int i,
1296 const ufc::function& f,
1297 const ufc::cell& c) const
1298{
1299 // Declare variables for result of evaluation.
1300 double vals[1];
1301
1302 // Declare variable for physical coordinates.
1303 double y[2];
1304 const double * const * x = c.coordinates;
1305 switch (i)
1306 {
1307 case 0:
1308 {
1309 y[0] = x[0][0];
1310 y[1] = x[0][1];
1311 f.evaluate(vals, y, c);
1312 return vals[0];
1313 break;
1314 }
1315 case 1:
1316 {
1317 y[0] = x[1][0];
1318 y[1] = x[1][1];
1319 f.evaluate(vals, y, c);
1320 return vals[0];
1321 break;
1322 }
1323 case 2:
1324 {
1325 y[0] = x[2][0];
1326 y[1] = x[2][1];
1327 f.evaluate(vals, y, c);
1328 return vals[0];
1329 break;
1330 }
1331 }
1332
1333 return 0.000000000000000;
1334}
1335
1336/// Evaluate linear functionals for all dofs on the function f
1337void cahnhilliard2d_finite_element_1::evaluate_dofs(double* values,
1338 const ufc::function& f,
1339 const ufc::cell& c) const
1340{
1341 // Declare variables for result of evaluation.
1342 double vals[1];
1343
1344 // Declare variable for physical coordinates.
1345 double y[2];
1346 const double * const * x = c.coordinates;
1347 y[0] = x[0][0];
1348 y[1] = x[0][1];
1349 f.evaluate(vals, y, c);
1350 values[0] = vals[0];
1351 y[0] = x[1][0];
1352 y[1] = x[1][1];
1353 f.evaluate(vals, y, c);
1354 values[1] = vals[0];
1355 y[0] = x[2][0];
1356 y[1] = x[2][1];
1357 f.evaluate(vals, y, c);
1358 values[2] = vals[0];
1359}
1360
1361/// Interpolate vertex values from dof values
1362void cahnhilliard2d_finite_element_1::interpolate_vertex_values(double* vertex_values,
1363 const double* dof_values,
1364 const ufc::cell& c) const
1365{
1366 // Evaluate function and change variables
1367 vertex_values[0] = dof_values[0];
1368 vertex_values[1] = dof_values[1];
1369 vertex_values[2] = dof_values[2];
1370}
1371
1372/// Map coordinate xhat from reference cell to coordinate x in cell
1373void cahnhilliard2d_finite_element_1::map_from_reference_cell(double* x,
1374 const double* xhat,
1375 const ufc::cell& c) const
1376{
1377 throw std::runtime_error("map_from_reference_cell not yet implemented (introduced in UFC 2.0).");
1378}
1379
1380/// Map from coordinate x in cell to coordinate xhat in reference cell
1381void cahnhilliard2d_finite_element_1::map_to_reference_cell(double* xhat,
1382 const double* x,
1383 const ufc::cell& c) const
1384{
1385 throw std::runtime_error("map_to_reference_cell not yet implemented (introduced in UFC 2.0).");
1386}
1387
1388/// Return the number of sub elements (for a mixed element)
1389unsigned int cahnhilliard2d_finite_element_1::num_sub_elements() const
1390{
1391 return 0;
1392}
1393
1394/// Create a new finite element for sub element i (for a mixed element)
1395ufc::finite_element* cahnhilliard2d_finite_element_1::create_sub_element(unsigned int i) const
1396{
1397 return 0;
1398}
1399
1400/// Create a new class instance
1401ufc::finite_element* cahnhilliard2d_finite_element_1::create() const
1402{
1403 return new cahnhilliard2d_finite_element_1();
1404}
1405
1406
1407/// Constructor
1408cahnhilliard2d_finite_element_2::cahnhilliard2d_finite_element_2() : ufc::finite_element()
1409{
1410 // Do nothing
1411}
1412
1413/// Destructor
1414cahnhilliard2d_finite_element_2::~cahnhilliard2d_finite_element_2()
1415{
1416 // Do nothing
1417}
1418
1419/// Return a string identifying the finite element
1420const char* cahnhilliard2d_finite_element_2::signature() const
1421{
1422 return "MixedElement(*[FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1), FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1)], **{'value_shape': (2,) })";
1423}
1424
1425/// Return the cell shape
1426ufc::shape cahnhilliard2d_finite_element_2::cell_shape() const
1427{
1428 return ufc::triangle;
1429}
1430
1431/// Return the topological dimension of the cell shape
1432unsigned int cahnhilliard2d_finite_element_2::topological_dimension() const
1433{
1434 return 2;
1435}
1436
1437/// Return the geometric dimension of the cell shape
1438unsigned int cahnhilliard2d_finite_element_2::geometric_dimension() const
1439{
1440 return 2;
1441}
1442
1443/// Return the dimension of the finite element function space
1444unsigned int cahnhilliard2d_finite_element_2::space_dimension() const
1445{
1446 return 6;
1447}
1448
1449/// Return the rank of the value space
1450unsigned int cahnhilliard2d_finite_element_2::value_rank() const
1451{
1452 return 1;
1453}
1454
1455/// Return the dimension of the value space for axis i
1456unsigned int cahnhilliard2d_finite_element_2::value_dimension(unsigned int i) const
1457{
1458 switch (i)
1459 {
1460 case 0:
1461 {
1462 return 2;
1463 break;
1464 }
1465 }
1466
1467 return 0;
1468}
1469
1470/// Evaluate basis function i at given point in cell
1471void cahnhilliard2d_finite_element_2::evaluate_basis(unsigned int i,
1472 double* values,
1473 const double* coordinates,
1474 const ufc::cell& c) const
1475{
1476 // Extract vertex coordinates
1477 const double * const * x = c.coordinates;
1478
1479 // Compute Jacobian of affine map from reference cell
1480 const double J_00 = x[1][0] - x[0][0];
1481 const double J_01 = x[2][0] - x[0][0];
1482 const double J_10 = x[1][1] - x[0][1];
1483 const double J_11 = x[2][1] - x[0][1];
1484
1485 // Compute determinant of Jacobian
1486 double detJ = J_00*J_11 - J_01*J_10;
1487
1488 // Compute inverse of Jacobian
1489
1490 // Compute constants
1491 const double C0 = x[1][0] + x[2][0];
1492 const double C1 = x[1][1] + x[2][1];
1493
1494 // Get coordinates and map to the reference (FIAT) element
1495 double X = (J_01*(C1 - 2.0*coordinates[1]) + J_11*(2.0*coordinates[0] - C0)) / detJ;
1496 double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
1497
1498 // Reset values.
1499 values[0] = 0.000000000000000;
1500 values[1] = 0.000000000000000;
1501 switch (i)
1502 {
1503 case 0:
1504 {
1505
1506 // Array of basisvalues.
1507 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
1508
1509 // Declare helper variables.
1510 unsigned int rr = 0;
1511 unsigned int ss = 0;
1512 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
1513
1514 // Compute basisvalues.
1515 basisvalues[0] = 1.000000000000000;
1516 basisvalues[1] = tmp0;
1517 for (unsigned int r = 0; r < 1; r++)
1518 {
1519 rr = (r + 1)*(r + 1 + 1)/2 + 1;
1520 ss = r*(r + 1)/2;
1521 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
1522 }// end loop over 'r'
1523 for (unsigned int r = 0; r < 2; r++)
1524 {
1525 for (unsigned int s = 0; s < 2 - r; s++)
1526 {
1527 rr = (r + s)*(r + s + 1)/2 + s;
1528 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
1529 }// end loop over 's'
1530 }// end loop over 'r'
1531
1532 // Table(s) of coefficients.
1533 static const double coefficients0[3] = \
1534 {0.471404520791032, -0.288675134594813, -0.166666666666667};
1535
1536 // Compute value(s).
1537 for (unsigned int r = 0; r < 3; r++)
1538 {
1539 values[0] += coefficients0[r]*basisvalues[r];
1540 }// end loop over 'r'
1541 break;
1542 }
1543 case 1:
1544 {
1545
1546 // Array of basisvalues.
1547 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
1548
1549 // Declare helper variables.
1550 unsigned int rr = 0;
1551 unsigned int ss = 0;
1552 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
1553
1554 // Compute basisvalues.
1555 basisvalues[0] = 1.000000000000000;
1556 basisvalues[1] = tmp0;
1557 for (unsigned int r = 0; r < 1; r++)
1558 {
1559 rr = (r + 1)*(r + 1 + 1)/2 + 1;
1560 ss = r*(r + 1)/2;
1561 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
1562 }// end loop over 'r'
1563 for (unsigned int r = 0; r < 2; r++)
1564 {
1565 for (unsigned int s = 0; s < 2 - r; s++)
1566 {
1567 rr = (r + s)*(r + s + 1)/2 + s;
1568 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
1569 }// end loop over 's'
1570 }// end loop over 'r'
1571
1572 // Table(s) of coefficients.
1573 static const double coefficients0[3] = \
1574 {0.471404520791032, 0.288675134594813, -0.166666666666667};
1575
1576 // Compute value(s).
1577 for (unsigned int r = 0; r < 3; r++)
1578 {
1579 values[0] += coefficients0[r]*basisvalues[r];
1580 }// end loop over 'r'
1581 break;
1582 }
1583 case 2:
1584 {
1585
1586 // Array of basisvalues.
1587 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
1588
1589 // Declare helper variables.
1590 unsigned int rr = 0;
1591 unsigned int ss = 0;
1592 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
1593
1594 // Compute basisvalues.
1595 basisvalues[0] = 1.000000000000000;
1596 basisvalues[1] = tmp0;
1597 for (unsigned int r = 0; r < 1; r++)
1598 {
1599 rr = (r + 1)*(r + 1 + 1)/2 + 1;
1600 ss = r*(r + 1)/2;
1601 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
1602 }// end loop over 'r'
1603 for (unsigned int r = 0; r < 2; r++)
1604 {
1605 for (unsigned int s = 0; s < 2 - r; s++)
1606 {
1607 rr = (r + s)*(r + s + 1)/2 + s;
1608 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
1609 }// end loop over 's'
1610 }// end loop over 'r'
1611
1612 // Table(s) of coefficients.
1613 static const double coefficients0[3] = \
1614 {0.471404520791032, 0.000000000000000, 0.333333333333333};
1615
1616 // Compute value(s).
1617 for (unsigned int r = 0; r < 3; r++)
1618 {
1619 values[0] += coefficients0[r]*basisvalues[r];
1620 }// end loop over 'r'
1621 break;
1622 }
1623 case 3:
1624 {
1625
1626 // Array of basisvalues.
1627 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
1628
1629 // Declare helper variables.
1630 unsigned int rr = 0;
1631 unsigned int ss = 0;
1632 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
1633
1634 // Compute basisvalues.
1635 basisvalues[0] = 1.000000000000000;
1636 basisvalues[1] = tmp0;
1637 for (unsigned int r = 0; r < 1; r++)
1638 {
1639 rr = (r + 1)*(r + 1 + 1)/2 + 1;
1640 ss = r*(r + 1)/2;
1641 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
1642 }// end loop over 'r'
1643 for (unsigned int r = 0; r < 2; r++)
1644 {
1645 for (unsigned int s = 0; s < 2 - r; s++)
1646 {
1647 rr = (r + s)*(r + s + 1)/2 + s;
1648 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
1649 }// end loop over 's'
1650 }// end loop over 'r'
1651
1652 // Table(s) of coefficients.
1653 static const double coefficients0[3] = \
1654 {0.471404520791032, -0.288675134594813, -0.166666666666667};
1655
1656 // Compute value(s).
1657 for (unsigned int r = 0; r < 3; r++)
1658 {
1659 values[1] += coefficients0[r]*basisvalues[r];
1660 }// end loop over 'r'
1661 break;
1662 }
1663 case 4:
1664 {
1665
1666 // Array of basisvalues.
1667 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
1668
1669 // Declare helper variables.
1670 unsigned int rr = 0;
1671 unsigned int ss = 0;
1672 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
1673
1674 // Compute basisvalues.
1675 basisvalues[0] = 1.000000000000000;
1676 basisvalues[1] = tmp0;
1677 for (unsigned int r = 0; r < 1; r++)
1678 {
1679 rr = (r + 1)*(r + 1 + 1)/2 + 1;
1680 ss = r*(r + 1)/2;
1681 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
1682 }// end loop over 'r'
1683 for (unsigned int r = 0; r < 2; r++)
1684 {
1685 for (unsigned int s = 0; s < 2 - r; s++)
1686 {
1687 rr = (r + s)*(r + s + 1)/2 + s;
1688 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
1689 }// end loop over 's'
1690 }// end loop over 'r'
1691
1692 // Table(s) of coefficients.
1693 static const double coefficients0[3] = \
1694 {0.471404520791032, 0.288675134594813, -0.166666666666667};
1695
1696 // Compute value(s).
1697 for (unsigned int r = 0; r < 3; r++)
1698 {
1699 values[1] += coefficients0[r]*basisvalues[r];
1700 }// end loop over 'r'
1701 break;
1702 }
1703 case 5:
1704 {
1705
1706 // Array of basisvalues.
1707 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
1708
1709 // Declare helper variables.
1710 unsigned int rr = 0;
1711 unsigned int ss = 0;
1712 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
1713
1714 // Compute basisvalues.
1715 basisvalues[0] = 1.000000000000000;
1716 basisvalues[1] = tmp0;
1717 for (unsigned int r = 0; r < 1; r++)
1718 {
1719 rr = (r + 1)*(r + 1 + 1)/2 + 1;
1720 ss = r*(r + 1)/2;
1721 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
1722 }// end loop over 'r'
1723 for (unsigned int r = 0; r < 2; r++)
1724 {
1725 for (unsigned int s = 0; s < 2 - r; s++)
1726 {
1727 rr = (r + s)*(r + s + 1)/2 + s;
1728 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
1729 }// end loop over 's'
1730 }// end loop over 'r'
1731
1732 // Table(s) of coefficients.
1733 static const double coefficients0[3] = \
1734 {0.471404520791032, 0.000000000000000, 0.333333333333333};
1735
1736 // Compute value(s).
1737 for (unsigned int r = 0; r < 3; r++)
1738 {
1739 values[1] += coefficients0[r]*basisvalues[r];
1740 }// end loop over 'r'
1741 break;
1742 }
1743 }
1744
1745}
1746
1747/// Evaluate all basis functions at given point in cell
1748void cahnhilliard2d_finite_element_2::evaluate_basis_all(double* values,
1749 const double* coordinates,
1750 const ufc::cell& c) const
1751{
1752 // Helper variable to hold values of a single dof.
1753 double dof_values[2] = {0.000000000000000, 0.000000000000000};
1754
1755 // Loop dofs and call evaluate_basis.
1756 for (unsigned int r = 0; r < 6; r++)
1757 {
1758 evaluate_basis(r, dof_values, coordinates, c);
1759 for (unsigned int s = 0; s < 2; s++)
1760 {
1761 values[r*2 + s] = dof_values[s];
1762 }// end loop over 's'
1763 }// end loop over 'r'
1764}
1765
1766/// Evaluate order n derivatives of basis function i at given point in cell
1767void cahnhilliard2d_finite_element_2::evaluate_basis_derivatives(unsigned int i,
1768 unsigned int n,
1769 double* values,
1770 const double* coordinates,
1771 const ufc::cell& c) const
1772{
1773 // Extract vertex coordinates
1774 const double * const * x = c.coordinates;
1775
1776 // Compute Jacobian of affine map from reference cell
1777 const double J_00 = x[1][0] - x[0][0];
1778 const double J_01 = x[2][0] - x[0][0];
1779 const double J_10 = x[1][1] - x[0][1];
1780 const double J_11 = x[2][1] - x[0][1];
1781
1782 // Compute determinant of Jacobian
1783 double detJ = J_00*J_11 - J_01*J_10;
1784
1785 // Compute inverse of Jacobian
1786 const double K_00 = J_11 / detJ;
1787 const double K_01 = -J_01 / detJ;
1788 const double K_10 = -J_10 / detJ;
1789 const double K_11 = J_00 / detJ;
1790
1791 // Compute constants
1792 const double C0 = x[1][0] + x[2][0];
1793 const double C1 = x[1][1] + x[2][1];
1794
1795 // Get coordinates and map to the reference (FIAT) element
1796 double X = (J_01*(C1 - 2.0*coordinates[1]) + J_11*(2.0*coordinates[0] - C0)) / detJ;
1797 double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
1798
1799 // Compute number of derivatives.
1800 unsigned int num_derivatives = 1;
1801 for (unsigned int r = 0; r < n; r++)
1802 {
1803 num_derivatives *= 2;
1804 }// end loop over 'r'
1805
1806 // Declare pointer to two dimensional array that holds combinations of derivatives and initialise
1807 unsigned int **combinations = new unsigned int *[num_derivatives];
1808 for (unsigned int row = 0; row < num_derivatives; row++)
1809 {
1810 combinations[row] = new unsigned int [n];
1811 for (unsigned int col = 0; col < n; col++)
1812 combinations[row][col] = 0;
1813 }
1814
1815 // Generate combinations of derivatives
1816 for (unsigned int row = 1; row < num_derivatives; row++)
1817 {
1818 for (unsigned int num = 0; num < row; num++)
1819 {
1820 for (unsigned int col = n-1; col+1 > 0; col--)
1821 {
1822 if (combinations[row][col] + 1 > 1)
1823 combinations[row][col] = 0;
1824 else
1825 {
1826 combinations[row][col] += 1;
1827 break;
1828 }
1829 }
1830 }
1831 }
1832
1833 // Compute inverse of Jacobian
1834 const double Jinv[2][2] = {{K_00, K_01}, {K_10, K_11}};
1835
1836 // Declare transformation matrix
1837 // Declare pointer to two dimensional array and initialise
1838 double **transform = new double *[num_derivatives];
1839
1840 for (unsigned int j = 0; j < num_derivatives; j++)
1841 {
1842 transform[j] = new double [num_derivatives];
1843 for (unsigned int k = 0; k < num_derivatives; k++)
1844 transform[j][k] = 1;
1845 }
1846
1847 // Construct transformation matrix
1848 for (unsigned int row = 0; row < num_derivatives; row++)
1849 {
1850 for (unsigned int col = 0; col < num_derivatives; col++)
1851 {
1852 for (unsigned int k = 0; k < n; k++)
1853 transform[row][col] *= Jinv[combinations[col][k]][combinations[row][k]];
1854 }
1855 }
1856
1857 // Reset values. Assuming that values is always an array.
1858 for (unsigned int r = 0; r < 2*num_derivatives; r++)
1859 {
1860 values[r] = 0.000000000000000;
1861 }// end loop over 'r'
1862
1863 switch (i)
1864 {
1865 case 0:
1866 {
1867
1868 // Array of basisvalues.
1869 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
1870
1871 // Declare helper variables.
1872 unsigned int rr = 0;
1873 unsigned int ss = 0;
1874 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
1875
1876 // Compute basisvalues.
1877 basisvalues[0] = 1.000000000000000;
1878 basisvalues[1] = tmp0;
1879 for (unsigned int r = 0; r < 1; r++)
1880 {
1881 rr = (r + 1)*(r + 1 + 1)/2 + 1;
1882 ss = r*(r + 1)/2;
1883 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
1884 }// end loop over 'r'
1885 for (unsigned int r = 0; r < 2; r++)
1886 {
1887 for (unsigned int s = 0; s < 2 - r; s++)
1888 {
1889 rr = (r + s)*(r + s + 1)/2 + s;
1890 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
1891 }// end loop over 's'
1892 }// end loop over 'r'
1893
1894 // Table(s) of coefficients.
1895 static const double coefficients0[3] = \
1896 {0.471404520791032, -0.288675134594813, -0.166666666666667};
1897
1898 // Tables of derivatives of the polynomial base (transpose).
1899 static const double dmats0[3][3] = \
1900 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
1901 {4.898979485566356, 0.000000000000000, 0.000000000000000},
1902 {0.000000000000000, 0.000000000000000, 0.000000000000000}};
1903
1904 static const double dmats1[3][3] = \
1905 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
1906 {2.449489742783178, 0.000000000000000, 0.000000000000000},
1907 {4.242640687119285, 0.000000000000000, 0.000000000000000}};
1908
1909 // Compute reference derivatives.
1910 // Declare pointer to array of derivatives on FIAT element.
1911 double *derivatives = new double[num_derivatives];
1912 for (unsigned int r = 0; r < num_derivatives; r++)
1913 {
1914 derivatives[r] = 0.000000000000000;
1915 }// end loop over 'r'
1916
1917 // Declare derivative matrix (of polynomial basis).
1918 double dmats[3][3] = \
1919 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
1920 {0.000000000000000, 1.000000000000000, 0.000000000000000},
1921 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
1922
1923 // Declare (auxiliary) derivative matrix (of polynomial basis).
1924 double dmats_old[3][3] = \
1925 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
1926 {0.000000000000000, 1.000000000000000, 0.000000000000000},
1927 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
1928
1929 // Loop possible derivatives.
1930 for (unsigned int r = 0; r < num_derivatives; r++)
1931 {
1932 // Resetting dmats values to compute next derivative.
1933 for (unsigned int t = 0; t < 3; t++)
1934 {
1935 for (unsigned int u = 0; u < 3; u++)
1936 {
1937 dmats[t][u] = 0.000000000000000;
1938 if (t == u)
1939 {
1940 dmats[t][u] = 1.000000000000000;
1941 }
1942
1943 }// end loop over 'u'
1944 }// end loop over 't'
1945
1946 // Looping derivative order to generate dmats.
1947 for (unsigned int s = 0; s < n; s++)
1948 {
1949 // Updating dmats_old with new values and resetting dmats.
1950 for (unsigned int t = 0; t < 3; t++)
1951 {
1952 for (unsigned int u = 0; u < 3; u++)
1953 {
1954 dmats_old[t][u] = dmats[t][u];
1955 dmats[t][u] = 0.000000000000000;
1956 }// end loop over 'u'
1957 }// end loop over 't'
1958
1959 // Update dmats using an inner product.
1960 if (combinations[r][s] == 0)
1961 {
1962 for (unsigned int t = 0; t < 3; t++)
1963 {
1964 for (unsigned int u = 0; u < 3; u++)
1965 {
1966 for (unsigned int tu = 0; tu < 3; tu++)
1967 {
1968 dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
1969 }// end loop over 'tu'
1970 }// end loop over 'u'
1971 }// end loop over 't'
1972 }
1973
1974 if (combinations[r][s] == 1)
1975 {
1976 for (unsigned int t = 0; t < 3; t++)
1977 {
1978 for (unsigned int u = 0; u < 3; u++)
1979 {
1980 for (unsigned int tu = 0; tu < 3; tu++)
1981 {
1982 dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
1983 }// end loop over 'tu'
1984 }// end loop over 'u'
1985 }// end loop over 't'
1986 }
1987
1988 }// end loop over 's'
1989 for (unsigned int s = 0; s < 3; s++)
1990 {
1991 for (unsigned int t = 0; t < 3; t++)
1992 {
1993 derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
1994 }// end loop over 't'
1995 }// end loop over 's'
1996 }// end loop over 'r'
1997
1998 // Transform derivatives back to physical element
1999 for (unsigned int r = 0; r < num_derivatives; r++)
2000 {
2001 for (unsigned int s = 0; s < num_derivatives; s++)
2002 {
2003 values[r] += transform[r][s]*derivatives[s];
2004 }// end loop over 's'
2005 }// end loop over 'r'
2006
2007 // Delete pointer to array of derivatives on FIAT element
2008 delete [] derivatives;
2009
2010 // Delete pointer to array of combinations of derivatives and transform
2011 for (unsigned int r = 0; r < num_derivatives; r++)
2012 {
2013 delete [] combinations[r];
2014 }// end loop over 'r'
2015 delete [] combinations;
2016 for (unsigned int r = 0; r < num_derivatives; r++)
2017 {
2018 delete [] transform[r];
2019 }// end loop over 'r'
2020 delete [] transform;
2021 break;
2022 }
2023 case 1:
2024 {
2025
2026 // Array of basisvalues.
2027 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2028
2029 // Declare helper variables.
2030 unsigned int rr = 0;
2031 unsigned int ss = 0;
2032 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2033
2034 // Compute basisvalues.
2035 basisvalues[0] = 1.000000000000000;
2036 basisvalues[1] = tmp0;
2037 for (unsigned int r = 0; r < 1; r++)
2038 {
2039 rr = (r + 1)*(r + 1 + 1)/2 + 1;
2040 ss = r*(r + 1)/2;
2041 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2042 }// end loop over 'r'
2043 for (unsigned int r = 0; r < 2; r++)
2044 {
2045 for (unsigned int s = 0; s < 2 - r; s++)
2046 {
2047 rr = (r + s)*(r + s + 1)/2 + s;
2048 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2049 }// end loop over 's'
2050 }// end loop over 'r'
2051
2052 // Table(s) of coefficients.
2053 static const double coefficients0[3] = \
2054 {0.471404520791032, 0.288675134594813, -0.166666666666667};
2055
2056 // Tables of derivatives of the polynomial base (transpose).
2057 static const double dmats0[3][3] = \
2058 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2059 {4.898979485566356, 0.000000000000000, 0.000000000000000},
2060 {0.000000000000000, 0.000000000000000, 0.000000000000000}};
2061
2062 static const double dmats1[3][3] = \
2063 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2064 {2.449489742783178, 0.000000000000000, 0.000000000000000},
2065 {4.242640687119285, 0.000000000000000, 0.000000000000000}};
2066
2067 // Compute reference derivatives.
2068 // Declare pointer to array of derivatives on FIAT element.
2069 double *derivatives = new double[num_derivatives];
2070 for (unsigned int r = 0; r < num_derivatives; r++)
2071 {
2072 derivatives[r] = 0.000000000000000;
2073 }// end loop over 'r'
2074
2075 // Declare derivative matrix (of polynomial basis).
2076 double dmats[3][3] = \
2077 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2078 {0.000000000000000, 1.000000000000000, 0.000000000000000},
2079 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2080
2081 // Declare (auxiliary) derivative matrix (of polynomial basis).
2082 double dmats_old[3][3] = \
2083 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2084 {0.000000000000000, 1.000000000000000, 0.000000000000000},
2085 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2086
2087 // Loop possible derivatives.
2088 for (unsigned int r = 0; r < num_derivatives; r++)
2089 {
2090 // Resetting dmats values to compute next derivative.
2091 for (unsigned int t = 0; t < 3; t++)
2092 {
2093 for (unsigned int u = 0; u < 3; u++)
2094 {
2095 dmats[t][u] = 0.000000000000000;
2096 if (t == u)
2097 {
2098 dmats[t][u] = 1.000000000000000;
2099 }
2100
2101 }// end loop over 'u'
2102 }// end loop over 't'
2103
2104 // Looping derivative order to generate dmats.
2105 for (unsigned int s = 0; s < n; s++)
2106 {
2107 // Updating dmats_old with new values and resetting dmats.
2108 for (unsigned int t = 0; t < 3; t++)
2109 {
2110 for (unsigned int u = 0; u < 3; u++)
2111 {
2112 dmats_old[t][u] = dmats[t][u];
2113 dmats[t][u] = 0.000000000000000;
2114 }// end loop over 'u'
2115 }// end loop over 't'
2116
2117 // Update dmats using an inner product.
2118 if (combinations[r][s] == 0)
2119 {
2120 for (unsigned int t = 0; t < 3; t++)
2121 {
2122 for (unsigned int u = 0; u < 3; u++)
2123 {
2124 for (unsigned int tu = 0; tu < 3; tu++)
2125 {
2126 dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2127 }// end loop over 'tu'
2128 }// end loop over 'u'
2129 }// end loop over 't'
2130 }
2131
2132 if (combinations[r][s] == 1)
2133 {
2134 for (unsigned int t = 0; t < 3; t++)
2135 {
2136 for (unsigned int u = 0; u < 3; u++)
2137 {
2138 for (unsigned int tu = 0; tu < 3; tu++)
2139 {
2140 dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2141 }// end loop over 'tu'
2142 }// end loop over 'u'
2143 }// end loop over 't'
2144 }
2145
2146 }// end loop over 's'
2147 for (unsigned int s = 0; s < 3; s++)
2148 {
2149 for (unsigned int t = 0; t < 3; t++)
2150 {
2151 derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2152 }// end loop over 't'
2153 }// end loop over 's'
2154 }// end loop over 'r'
2155
2156 // Transform derivatives back to physical element
2157 for (unsigned int r = 0; r < num_derivatives; r++)
2158 {
2159 for (unsigned int s = 0; s < num_derivatives; s++)
2160 {
2161 values[r] += transform[r][s]*derivatives[s];
2162 }// end loop over 's'
2163 }// end loop over 'r'
2164
2165 // Delete pointer to array of derivatives on FIAT element
2166 delete [] derivatives;
2167
2168 // Delete pointer to array of combinations of derivatives and transform
2169 for (unsigned int r = 0; r < num_derivatives; r++)
2170 {
2171 delete [] combinations[r];
2172 }// end loop over 'r'
2173 delete [] combinations;
2174 for (unsigned int r = 0; r < num_derivatives; r++)
2175 {
2176 delete [] transform[r];
2177 }// end loop over 'r'
2178 delete [] transform;
2179 break;
2180 }
2181 case 2:
2182 {
2183
2184 // Array of basisvalues.
2185 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2186
2187 // Declare helper variables.
2188 unsigned int rr = 0;
2189 unsigned int ss = 0;
2190 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2191
2192 // Compute basisvalues.
2193 basisvalues[0] = 1.000000000000000;
2194 basisvalues[1] = tmp0;
2195 for (unsigned int r = 0; r < 1; r++)
2196 {
2197 rr = (r + 1)*(r + 1 + 1)/2 + 1;
2198 ss = r*(r + 1)/2;
2199 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2200 }// end loop over 'r'
2201 for (unsigned int r = 0; r < 2; r++)
2202 {
2203 for (unsigned int s = 0; s < 2 - r; s++)
2204 {
2205 rr = (r + s)*(r + s + 1)/2 + s;
2206 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2207 }// end loop over 's'
2208 }// end loop over 'r'
2209
2210 // Table(s) of coefficients.
2211 static const double coefficients0[3] = \
2212 {0.471404520791032, 0.000000000000000, 0.333333333333333};
2213
2214 // Tables of derivatives of the polynomial base (transpose).
2215 static const double dmats0[3][3] = \
2216 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2217 {4.898979485566356, 0.000000000000000, 0.000000000000000},
2218 {0.000000000000000, 0.000000000000000, 0.000000000000000}};
2219
2220 static const double dmats1[3][3] = \
2221 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2222 {2.449489742783178, 0.000000000000000, 0.000000000000000},
2223 {4.242640687119285, 0.000000000000000, 0.000000000000000}};
2224
2225 // Compute reference derivatives.
2226 // Declare pointer to array of derivatives on FIAT element.
2227 double *derivatives = new double[num_derivatives];
2228 for (unsigned int r = 0; r < num_derivatives; r++)
2229 {
2230 derivatives[r] = 0.000000000000000;
2231 }// end loop over 'r'
2232
2233 // Declare derivative matrix (of polynomial basis).
2234 double dmats[3][3] = \
2235 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2236 {0.000000000000000, 1.000000000000000, 0.000000000000000},
2237 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2238
2239 // Declare (auxiliary) derivative matrix (of polynomial basis).
2240 double dmats_old[3][3] = \
2241 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2242 {0.000000000000000, 1.000000000000000, 0.000000000000000},
2243 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2244
2245 // Loop possible derivatives.
2246 for (unsigned int r = 0; r < num_derivatives; r++)
2247 {
2248 // Resetting dmats values to compute next derivative.
2249 for (unsigned int t = 0; t < 3; t++)
2250 {
2251 for (unsigned int u = 0; u < 3; u++)
2252 {
2253 dmats[t][u] = 0.000000000000000;
2254 if (t == u)
2255 {
2256 dmats[t][u] = 1.000000000000000;
2257 }
2258
2259 }// end loop over 'u'
2260 }// end loop over 't'
2261
2262 // Looping derivative order to generate dmats.
2263 for (unsigned int s = 0; s < n; s++)
2264 {
2265 // Updating dmats_old with new values and resetting dmats.
2266 for (unsigned int t = 0; t < 3; t++)
2267 {
2268 for (unsigned int u = 0; u < 3; u++)
2269 {
2270 dmats_old[t][u] = dmats[t][u];
2271 dmats[t][u] = 0.000000000000000;
2272 }// end loop over 'u'
2273 }// end loop over 't'
2274
2275 // Update dmats using an inner product.
2276 if (combinations[r][s] == 0)
2277 {
2278 for (unsigned int t = 0; t < 3; t++)
2279 {
2280 for (unsigned int u = 0; u < 3; u++)
2281 {
2282 for (unsigned int tu = 0; tu < 3; tu++)
2283 {
2284 dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2285 }// end loop over 'tu'
2286 }// end loop over 'u'
2287 }// end loop over 't'
2288 }
2289
2290 if (combinations[r][s] == 1)
2291 {
2292 for (unsigned int t = 0; t < 3; t++)
2293 {
2294 for (unsigned int u = 0; u < 3; u++)
2295 {
2296 for (unsigned int tu = 0; tu < 3; tu++)
2297 {
2298 dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2299 }// end loop over 'tu'
2300 }// end loop over 'u'
2301 }// end loop over 't'
2302 }
2303
2304 }// end loop over 's'
2305 for (unsigned int s = 0; s < 3; s++)
2306 {
2307 for (unsigned int t = 0; t < 3; t++)
2308 {
2309 derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2310 }// end loop over 't'
2311 }// end loop over 's'
2312 }// end loop over 'r'
2313
2314 // Transform derivatives back to physical element
2315 for (unsigned int r = 0; r < num_derivatives; r++)
2316 {
2317 for (unsigned int s = 0; s < num_derivatives; s++)
2318 {
2319 values[r] += transform[r][s]*derivatives[s];
2320 }// end loop over 's'
2321 }// end loop over 'r'
2322
2323 // Delete pointer to array of derivatives on FIAT element
2324 delete [] derivatives;
2325
2326 // Delete pointer to array of combinations of derivatives and transform
2327 for (unsigned int r = 0; r < num_derivatives; r++)
2328 {
2329 delete [] combinations[r];
2330 }// end loop over 'r'
2331 delete [] combinations;
2332 for (unsigned int r = 0; r < num_derivatives; r++)
2333 {
2334 delete [] transform[r];
2335 }// end loop over 'r'
2336 delete [] transform;
2337 break;
2338 }
2339 case 3:
2340 {
2341
2342 // Array of basisvalues.
2343 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2344
2345 // Declare helper variables.
2346 unsigned int rr = 0;
2347 unsigned int ss = 0;
2348 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2349
2350 // Compute basisvalues.
2351 basisvalues[0] = 1.000000000000000;
2352 basisvalues[1] = tmp0;
2353 for (unsigned int r = 0; r < 1; r++)
2354 {
2355 rr = (r + 1)*(r + 1 + 1)/2 + 1;
2356 ss = r*(r + 1)/2;
2357 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2358 }// end loop over 'r'
2359 for (unsigned int r = 0; r < 2; r++)
2360 {
2361 for (unsigned int s = 0; s < 2 - r; s++)
2362 {
2363 rr = (r + s)*(r + s + 1)/2 + s;
2364 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2365 }// end loop over 's'
2366 }// end loop over 'r'
2367
2368 // Table(s) of coefficients.
2369 static const double coefficients0[3] = \
2370 {0.471404520791032, -0.288675134594813, -0.166666666666667};
2371
2372 // Tables of derivatives of the polynomial base (transpose).
2373 static const double dmats0[3][3] = \
2374 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2375 {4.898979485566356, 0.000000000000000, 0.000000000000000},
2376 {0.000000000000000, 0.000000000000000, 0.000000000000000}};
2377
2378 static const double dmats1[3][3] = \
2379 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2380 {2.449489742783178, 0.000000000000000, 0.000000000000000},
2381 {4.242640687119285, 0.000000000000000, 0.000000000000000}};
2382
2383 // Compute reference derivatives.
2384 // Declare pointer to array of derivatives on FIAT element.
2385 double *derivatives = new double[num_derivatives];
2386 for (unsigned int r = 0; r < num_derivatives; r++)
2387 {
2388 derivatives[r] = 0.000000000000000;
2389 }// end loop over 'r'
2390
2391 // Declare derivative matrix (of polynomial basis).
2392 double dmats[3][3] = \
2393 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2394 {0.000000000000000, 1.000000000000000, 0.000000000000000},
2395 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2396
2397 // Declare (auxiliary) derivative matrix (of polynomial basis).
2398 double dmats_old[3][3] = \
2399 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2400 {0.000000000000000, 1.000000000000000, 0.000000000000000},
2401 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2402
2403 // Loop possible derivatives.
2404 for (unsigned int r = 0; r < num_derivatives; r++)
2405 {
2406 // Resetting dmats values to compute next derivative.
2407 for (unsigned int t = 0; t < 3; t++)
2408 {
2409 for (unsigned int u = 0; u < 3; u++)
2410 {
2411 dmats[t][u] = 0.000000000000000;
2412 if (t == u)
2413 {
2414 dmats[t][u] = 1.000000000000000;
2415 }
2416
2417 }// end loop over 'u'
2418 }// end loop over 't'
2419
2420 // Looping derivative order to generate dmats.
2421 for (unsigned int s = 0; s < n; s++)
2422 {
2423 // Updating dmats_old with new values and resetting dmats.
2424 for (unsigned int t = 0; t < 3; t++)
2425 {
2426 for (unsigned int u = 0; u < 3; u++)
2427 {
2428 dmats_old[t][u] = dmats[t][u];
2429 dmats[t][u] = 0.000000000000000;
2430 }// end loop over 'u'
2431 }// end loop over 't'
2432
2433 // Update dmats using an inner product.
2434 if (combinations[r][s] == 0)
2435 {
2436 for (unsigned int t = 0; t < 3; t++)
2437 {
2438 for (unsigned int u = 0; u < 3; u++)
2439 {
2440 for (unsigned int tu = 0; tu < 3; tu++)
2441 {
2442 dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2443 }// end loop over 'tu'
2444 }// end loop over 'u'
2445 }// end loop over 't'
2446 }
2447
2448 if (combinations[r][s] == 1)
2449 {
2450 for (unsigned int t = 0; t < 3; t++)
2451 {
2452 for (unsigned int u = 0; u < 3; u++)
2453 {
2454 for (unsigned int tu = 0; tu < 3; tu++)
2455 {
2456 dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2457 }// end loop over 'tu'
2458 }// end loop over 'u'
2459 }// end loop over 't'
2460 }
2461
2462 }// end loop over 's'
2463 for (unsigned int s = 0; s < 3; s++)
2464 {
2465 for (unsigned int t = 0; t < 3; t++)
2466 {
2467 derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2468 }// end loop over 't'
2469 }// end loop over 's'
2470 }// end loop over 'r'
2471
2472 // Transform derivatives back to physical element
2473 for (unsigned int r = 0; r < num_derivatives; r++)
2474 {
2475 for (unsigned int s = 0; s < num_derivatives; s++)
2476 {
2477 values[num_derivatives + r] += transform[r][s]*derivatives[s];
2478 }// end loop over 's'
2479 }// end loop over 'r'
2480
2481 // Delete pointer to array of derivatives on FIAT element
2482 delete [] derivatives;
2483
2484 // Delete pointer to array of combinations of derivatives and transform
2485 for (unsigned int r = 0; r < num_derivatives; r++)
2486 {
2487 delete [] combinations[r];
2488 }// end loop over 'r'
2489 delete [] combinations;
2490 for (unsigned int r = 0; r < num_derivatives; r++)
2491 {
2492 delete [] transform[r];
2493 }// end loop over 'r'
2494 delete [] transform;
2495 break;
2496 }
2497 case 4:
2498 {
2499
2500 // Array of basisvalues.
2501 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2502
2503 // Declare helper variables.
2504 unsigned int rr = 0;
2505 unsigned int ss = 0;
2506 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2507
2508 // Compute basisvalues.
2509 basisvalues[0] = 1.000000000000000;
2510 basisvalues[1] = tmp0;
2511 for (unsigned int r = 0; r < 1; r++)
2512 {
2513 rr = (r + 1)*(r + 1 + 1)/2 + 1;
2514 ss = r*(r + 1)/2;
2515 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2516 }// end loop over 'r'
2517 for (unsigned int r = 0; r < 2; r++)
2518 {
2519 for (unsigned int s = 0; s < 2 - r; s++)
2520 {
2521 rr = (r + s)*(r + s + 1)/2 + s;
2522 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2523 }// end loop over 's'
2524 }// end loop over 'r'
2525
2526 // Table(s) of coefficients.
2527 static const double coefficients0[3] = \
2528 {0.471404520791032, 0.288675134594813, -0.166666666666667};
2529
2530 // Tables of derivatives of the polynomial base (transpose).
2531 static const double dmats0[3][3] = \
2532 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2533 {4.898979485566356, 0.000000000000000, 0.000000000000000},
2534 {0.000000000000000, 0.000000000000000, 0.000000000000000}};
2535
2536 static const double dmats1[3][3] = \
2537 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2538 {2.449489742783178, 0.000000000000000, 0.000000000000000},
2539 {4.242640687119285, 0.000000000000000, 0.000000000000000}};
2540
2541 // Compute reference derivatives.
2542 // Declare pointer to array of derivatives on FIAT element.
2543 double *derivatives = new double[num_derivatives];
2544 for (unsigned int r = 0; r < num_derivatives; r++)
2545 {
2546 derivatives[r] = 0.000000000000000;
2547 }// end loop over 'r'
2548
2549 // Declare derivative matrix (of polynomial basis).
2550 double dmats[3][3] = \
2551 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2552 {0.000000000000000, 1.000000000000000, 0.000000000000000},
2553 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2554
2555 // Declare (auxiliary) derivative matrix (of polynomial basis).
2556 double dmats_old[3][3] = \
2557 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2558 {0.000000000000000, 1.000000000000000, 0.000000000000000},
2559 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2560
2561 // Loop possible derivatives.
2562 for (unsigned int r = 0; r < num_derivatives; r++)
2563 {
2564 // Resetting dmats values to compute next derivative.
2565 for (unsigned int t = 0; t < 3; t++)
2566 {
2567 for (unsigned int u = 0; u < 3; u++)
2568 {
2569 dmats[t][u] = 0.000000000000000;
2570 if (t == u)
2571 {
2572 dmats[t][u] = 1.000000000000000;
2573 }
2574
2575 }// end loop over 'u'
2576 }// end loop over 't'
2577
2578 // Looping derivative order to generate dmats.
2579 for (unsigned int s = 0; s < n; s++)
2580 {
2581 // Updating dmats_old with new values and resetting dmats.
2582 for (unsigned int t = 0; t < 3; t++)
2583 {
2584 for (unsigned int u = 0; u < 3; u++)
2585 {
2586 dmats_old[t][u] = dmats[t][u];
2587 dmats[t][u] = 0.000000000000000;
2588 }// end loop over 'u'
2589 }// end loop over 't'
2590
2591 // Update dmats using an inner product.
2592 if (combinations[r][s] == 0)
2593 {
2594 for (unsigned int t = 0; t < 3; t++)
2595 {
2596 for (unsigned int u = 0; u < 3; u++)
2597 {
2598 for (unsigned int tu = 0; tu < 3; tu++)
2599 {
2600 dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2601 }// end loop over 'tu'
2602 }// end loop over 'u'
2603 }// end loop over 't'
2604 }
2605
2606 if (combinations[r][s] == 1)
2607 {
2608 for (unsigned int t = 0; t < 3; t++)
2609 {
2610 for (unsigned int u = 0; u < 3; u++)
2611 {
2612 for (unsigned int tu = 0; tu < 3; tu++)
2613 {
2614 dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2615 }// end loop over 'tu'
2616 }// end loop over 'u'
2617 }// end loop over 't'
2618 }
2619
2620 }// end loop over 's'
2621 for (unsigned int s = 0; s < 3; s++)
2622 {
2623 for (unsigned int t = 0; t < 3; t++)
2624 {
2625 derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2626 }// end loop over 't'
2627 }// end loop over 's'
2628 }// end loop over 'r'
2629
2630 // Transform derivatives back to physical element
2631 for (unsigned int r = 0; r < num_derivatives; r++)
2632 {
2633 for (unsigned int s = 0; s < num_derivatives; s++)
2634 {
2635 values[num_derivatives + r] += transform[r][s]*derivatives[s];
2636 }// end loop over 's'
2637 }// end loop over 'r'
2638
2639 // Delete pointer to array of derivatives on FIAT element
2640 delete [] derivatives;
2641
2642 // Delete pointer to array of combinations of derivatives and transform
2643 for (unsigned int r = 0; r < num_derivatives; r++)
2644 {
2645 delete [] combinations[r];
2646 }// end loop over 'r'
2647 delete [] combinations;
2648 for (unsigned int r = 0; r < num_derivatives; r++)
2649 {
2650 delete [] transform[r];
2651 }// end loop over 'r'
2652 delete [] transform;
2653 break;
2654 }
2655 case 5:
2656 {
2657
2658 // Array of basisvalues.
2659 double basisvalues[3] = {0.000000000000000, 0.000000000000000, 0.000000000000000};
2660
2661 // Declare helper variables.
2662 unsigned int rr = 0;
2663 unsigned int ss = 0;
2664 double tmp0 = (1.000000000000000 + Y + 2.000000000000000*X)/2.000000000000000;
2665
2666 // Compute basisvalues.
2667 basisvalues[0] = 1.000000000000000;
2668 basisvalues[1] = tmp0;
2669 for (unsigned int r = 0; r < 1; r++)
2670 {
2671 rr = (r + 1)*(r + 1 + 1)/2 + 1;
2672 ss = r*(r + 1)/2;
2673 basisvalues[rr] = basisvalues[ss]*(0.500000000000000 + r + Y*(1.500000000000000 + r));
2674 }// end loop over 'r'
2675 for (unsigned int r = 0; r < 2; r++)
2676 {
2677 for (unsigned int s = 0; s < 2 - r; s++)
2678 {
2679 rr = (r + s)*(r + s + 1)/2 + s;
2680 basisvalues[rr] *= std::sqrt((0.500000000000000 + r)*(1.000000000000000 + r + s));
2681 }// end loop over 's'
2682 }// end loop over 'r'
2683
2684 // Table(s) of coefficients.
2685 static const double coefficients0[3] = \
2686 {0.471404520791032, 0.000000000000000, 0.333333333333333};
2687
2688 // Tables of derivatives of the polynomial base (transpose).
2689 static const double dmats0[3][3] = \
2690 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2691 {4.898979485566356, 0.000000000000000, 0.000000000000000},
2692 {0.000000000000000, 0.000000000000000, 0.000000000000000}};
2693
2694 static const double dmats1[3][3] = \
2695 {{0.000000000000000, 0.000000000000000, 0.000000000000000},
2696 {2.449489742783178, 0.000000000000000, 0.000000000000000},
2697 {4.242640687119285, 0.000000000000000, 0.000000000000000}};
2698
2699 // Compute reference derivatives.
2700 // Declare pointer to array of derivatives on FIAT element.
2701 double *derivatives = new double[num_derivatives];
2702 for (unsigned int r = 0; r < num_derivatives; r++)
2703 {
2704 derivatives[r] = 0.000000000000000;
2705 }// end loop over 'r'
2706
2707 // Declare derivative matrix (of polynomial basis).
2708 double dmats[3][3] = \
2709 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2710 {0.000000000000000, 1.000000000000000, 0.000000000000000},
2711 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2712
2713 // Declare (auxiliary) derivative matrix (of polynomial basis).
2714 double dmats_old[3][3] = \
2715 {{1.000000000000000, 0.000000000000000, 0.000000000000000},
2716 {0.000000000000000, 1.000000000000000, 0.000000000000000},
2717 {0.000000000000000, 0.000000000000000, 1.000000000000000}};
2718
2719 // Loop possible derivatives.
2720 for (unsigned int r = 0; r < num_derivatives; r++)
2721 {
2722 // Resetting dmats values to compute next derivative.
2723 for (unsigned int t = 0; t < 3; t++)
2724 {
2725 for (unsigned int u = 0; u < 3; u++)
2726 {
2727 dmats[t][u] = 0.000000000000000;
2728 if (t == u)
2729 {
2730 dmats[t][u] = 1.000000000000000;
2731 }
2732
2733 }// end loop over 'u'
2734 }// end loop over 't'
2735
2736 // Looping derivative order to generate dmats.
2737 for (unsigned int s = 0; s < n; s++)
2738 {
2739 // Updating dmats_old with new values and resetting dmats.
2740 for (unsigned int t = 0; t < 3; t++)
2741 {
2742 for (unsigned int u = 0; u < 3; u++)
2743 {
2744 dmats_old[t][u] = dmats[t][u];
2745 dmats[t][u] = 0.000000000000000;
2746 }// end loop over 'u'
2747 }// end loop over 't'
2748
2749 // Update dmats using an inner product.
2750 if (combinations[r][s] == 0)
2751 {
2752 for (unsigned int t = 0; t < 3; t++)
2753 {
2754 for (unsigned int u = 0; u < 3; u++)
2755 {
2756 for (unsigned int tu = 0; tu < 3; tu++)
2757 {
2758 dmats[t][u] += dmats0[t][tu]*dmats_old[tu][u];
2759 }// end loop over 'tu'
2760 }// end loop over 'u'
2761 }// end loop over 't'
2762 }
2763
2764 if (combinations[r][s] == 1)
2765 {
2766 for (unsigned int t = 0; t < 3; t++)
2767 {
2768 for (unsigned int u = 0; u < 3; u++)
2769 {
2770 for (unsigned int tu = 0; tu < 3; tu++)
2771 {
2772 dmats[t][u] += dmats1[t][tu]*dmats_old[tu][u];
2773 }// end loop over 'tu'
2774 }// end loop over 'u'
2775 }// end loop over 't'
2776 }
2777
2778 }// end loop over 's'
2779 for (unsigned int s = 0; s < 3; s++)
2780 {
2781 for (unsigned int t = 0; t < 3; t++)
2782 {
2783 derivatives[r] += coefficients0[s]*dmats[s][t]*basisvalues[t];
2784 }// end loop over 't'
2785 }// end loop over 's'
2786 }// end loop over 'r'
2787
2788 // Transform derivatives back to physical element
2789 for (unsigned int r = 0; r < num_derivatives; r++)
2790 {
2791 for (unsigned int s = 0; s < num_derivatives; s++)
2792 {
2793 values[num_derivatives + r] += transform[r][s]*derivatives[s];
2794 }// end loop over 's'
2795 }// end loop over 'r'
2796
2797 // Delete pointer to array of derivatives on FIAT element
2798 delete [] derivatives;
2799
2800 // Delete pointer to array of combinations of derivatives and transform
2801 for (unsigned int r = 0; r < num_derivatives; r++)
2802 {
2803 delete [] combinations[r];
2804 }// end loop over 'r'
2805 delete [] combinations;
2806 for (unsigned int r = 0; r < num_derivatives; r++)
2807 {
2808 delete [] transform[r];
2809 }// end loop over 'r'
2810 delete [] transform;
2811 break;
2812 }
2813 }
2814
2815}
2816
2817/// Evaluate order n derivatives of all basis functions at given point in cell
2818void cahnhilliard2d_finite_element_2::evaluate_basis_derivatives_all(unsigned int n,
2819 double* values,
2820 const double* coordinates,
2821 const ufc::cell& c) const
2822{
2823 // Compute number of derivatives.
2824 unsigned int num_derivatives = 1;
2825 for (unsigned int r = 0; r < n; r++)
2826 {
2827 num_derivatives *= 2;
2828 }// end loop over 'r'
2829
2830 // Helper variable to hold values of a single dof.
2831 double *dof_values = new double[2*num_derivatives];
2832 for (unsigned int r = 0; r < 2*num_derivatives; r++)
2833 {
2834 dof_values[r] = 0.000000000000000;
2835 }// end loop over 'r'
2836
2837 // Loop dofs and call evaluate_basis_derivatives.
2838 for (unsigned int r = 0; r < 6; r++)
2839 {
2840 evaluate_basis_derivatives(r, n, dof_values, coordinates, c);
2841 for (unsigned int s = 0; s < 2*num_derivatives; s++)
2842 {
2843 values[r*2*num_derivatives + s] = dof_values[s];
2844 }// end loop over 's'
2845 }// end loop over 'r'
2846
2847 // Delete pointer.
2848 delete [] dof_values;
2849}
2850
2851/// Evaluate linear functional for dof i on the function f
2852double cahnhilliard2d_finite_element_2::evaluate_dof(unsigned int i,
2853 const ufc::function& f,
2854 const ufc::cell& c) const
2855{
2856 // Declare variables for result of evaluation.
2857 double vals[2];
2858
2859 // Declare variable for physical coordinates.
2860 double y[2];
2861 const double * const * x = c.coordinates;
2862 switch (i)
2863 {
2864 case 0:
2865 {
2866 y[0] = x[0][0];
2867 y[1] = x[0][1];
2868 f.evaluate(vals, y, c);
2869 return vals[0];
2870 break;
2871 }
2872 case 1:
2873 {
2874 y[0] = x[1][0];
2875 y[1] = x[1][1];
2876 f.evaluate(vals, y, c);
2877 return vals[0];
2878 break;
2879 }
2880 case 2:
2881 {
2882 y[0] = x[2][0];
2883 y[1] = x[2][1];
2884 f.evaluate(vals, y, c);
2885 return vals[0];
2886 break;
2887 }
2888 case 3:
2889 {
2890 y[0] = x[0][0];
2891 y[1] = x[0][1];
2892 f.evaluate(vals, y, c);
2893 return vals[1];
2894 break;
2895 }
2896 case 4:
2897 {
2898 y[0] = x[1][0];
2899 y[1] = x[1][1];
2900 f.evaluate(vals, y, c);
2901 return vals[1];
2902 break;
2903 }
2904 case 5:
2905 {
2906 y[0] = x[2][0];
2907 y[1] = x[2][1];
2908 f.evaluate(vals, y, c);
2909 return vals[1];
2910 break;
2911 }
2912 }
2913
2914 return 0.000000000000000;
2915}
2916
2917/// Evaluate linear functionals for all dofs on the function f
2918void cahnhilliard2d_finite_element_2::evaluate_dofs(double* values,
2919 const ufc::function& f,
2920 const ufc::cell& c) const
2921{
2922 // Declare variables for result of evaluation.
2923 double vals[2];
2924
2925 // Declare variable for physical coordinates.
2926 double y[2];
2927 const double * const * x = c.coordinates;
2928 y[0] = x[0][0];
2929 y[1] = x[0][1];
2930 f.evaluate(vals, y, c);
2931 values[0] = vals[0];
2932 y[0] = x[1][0];
2933 y[1] = x[1][1];
2934 f.evaluate(vals, y, c);
2935 values[1] = vals[0];
2936 y[0] = x[2][0];
2937 y[1] = x[2][1];
2938 f.evaluate(vals, y, c);
2939 values[2] = vals[0];
2940 y[0] = x[0][0];
2941 y[1] = x[0][1];
2942 f.evaluate(vals, y, c);
2943 values[3] = vals[1];
2944 y[0] = x[1][0];
2945 y[1] = x[1][1];
2946 f.evaluate(vals, y, c);
2947 values[4] = vals[1];
2948 y[0] = x[2][0];
2949 y[1] = x[2][1];
2950 f.evaluate(vals, y, c);
2951 values[5] = vals[1];
2952}
2953
2954/// Interpolate vertex values from dof values
2955void cahnhilliard2d_finite_element_2::interpolate_vertex_values(double* vertex_values,
2956 const double* dof_values,
2957 const ufc::cell& c) const
2958{
2959 // Evaluate function and change variables
2960 vertex_values[0] = dof_values[0];
2961 vertex_values[2] = dof_values[1];
2962 vertex_values[4] = dof_values[2];
2963 // Evaluate function and change variables
2964 vertex_values[1] = dof_values[3];
2965 vertex_values[3] = dof_values[4];
2966 vertex_values[5] = dof_values[5];
2967}
2968
2969/// Map coordinate xhat from reference cell to coordinate x in cell
2970void cahnhilliard2d_finite_element_2::map_from_reference_cell(double* x,
2971 const double* xhat,
2972 const ufc::cell& c) const
2973{
2974 throw std::runtime_error("map_from_reference_cell not yet implemented (introduced in UFC 2.0).");
2975}
2976
2977/// Map from coordinate x in cell to coordinate xhat in reference cell
2978void cahnhilliard2d_finite_element_2::map_to_reference_cell(double* xhat,
2979 const double* x,
2980 const ufc::cell& c) const
2981{
2982 throw std::runtime_error("map_to_reference_cell not yet implemented (introduced in UFC 2.0).");
2983}
2984
2985/// Return the number of sub elements (for a mixed element)
2986unsigned int cahnhilliard2d_finite_element_2::num_sub_elements() const
2987{
2988 return 2;
2989}
2990
2991/// Create a new finite element for sub element i (for a mixed element)
2992ufc::finite_element* cahnhilliard2d_finite_element_2::create_sub_element(unsigned int i) const
2993{
2994 switch (i)
2995 {
2996 case 0:
2997 {
2998 return new cahnhilliard2d_finite_element_1();
2999 break;
3000 }
3001 case 1:
3002 {
3003 return new cahnhilliard2d_finite_element_1();
3004 break;
3005 }
3006 }
3007
3008 return 0;
3009}
3010
3011/// Create a new class instance
3012ufc::finite_element* cahnhilliard2d_finite_element_2::create() const
3013{
3014 return new cahnhilliard2d_finite_element_2();
3015}
3016
3017/// Constructor
3018cahnhilliard2d_dofmap_0::cahnhilliard2d_dofmap_0() : ufc::dofmap()
3019{
3020 _global_dimension = 0;
3021}
3022
3023/// Destructor
3024cahnhilliard2d_dofmap_0::~cahnhilliard2d_dofmap_0()
3025{
3026 // Do nothing
3027}
3028
3029/// Return a string identifying the dofmap
3030const char* cahnhilliard2d_dofmap_0::signature() const
3031{
3032 return "FFC dofmap for FiniteElement('Discontinuous Lagrange', Cell('triangle', 1, Space(2)), 0)";
3033}
3034
3035/// Return true iff mesh entities of topological dimension d are needed
3036bool cahnhilliard2d_dofmap_0::needs_mesh_entities(unsigned int d) const
3037{
3038 switch (d)
3039 {
3040 case 0:
3041 {
3042 return false;
3043 break;
3044 }
3045 case 1:
3046 {
3047 return false;
3048 break;
3049 }
3050 case 2:
3051 {
3052 return true;
3053 break;
3054 }
3055 }
3056
3057 return false;
3058}
3059
3060/// Initialize dofmap for mesh (return true iff init_cell() is needed)
3061bool cahnhilliard2d_dofmap_0::init_mesh(const ufc::mesh& m)
3062{
3063 _global_dimension = m.num_entities[2];
3064 return false;
3065}
3066
3067/// Initialize dofmap for given cell
3068void cahnhilliard2d_dofmap_0::init_cell(const ufc::mesh& m,
3069 const ufc::cell& c)
3070{
3071 // Do nothing
3072}
3073
3074/// Finish initialization of dofmap for cells
3075void cahnhilliard2d_dofmap_0::init_cell_finalize()
3076{
3077 // Do nothing
3078}
3079
3080/// Return the topological dimension of the associated cell shape
3081unsigned int cahnhilliard2d_dofmap_0::topological_dimension() const
3082{
3083 return 2;
3084}
3085
3086/// Return the geometric dimension of the associated cell shape
3087unsigned int cahnhilliard2d_dofmap_0::geometric_dimension() const
3088{
3089 return 2;
3090}
3091
3092/// Return the dimension of the global finite element function space
3093unsigned int cahnhilliard2d_dofmap_0::global_dimension() const
3094{
3095 return _global_dimension;
3096}
3097
3098/// Return the dimension of the local finite element function space for a cell
3099unsigned int cahnhilliard2d_dofmap_0::local_dimension(const ufc::cell& c) const
3100{
3101 return 1;
3102}
3103
3104/// Return the maximum dimension of the local finite element function space
3105unsigned int cahnhilliard2d_dofmap_0::max_local_dimension() const
3106{
3107 return 1;
3108}
3109
3110/// Return the number of dofs on each cell facet
3111unsigned int cahnhilliard2d_dofmap_0::num_facet_dofs() const
3112{
3113 return 0;
3114}
3115
3116/// Return the number of dofs associated with each cell entity of dimension d
3117unsigned int cahnhilliard2d_dofmap_0::num_entity_dofs(unsigned int d) const
3118{
3119 switch (d)
3120 {
3121 case 0:
3122 {
3123 return 0;
3124 break;
3125 }
3126 case 1:
3127 {
3128 return 0;
3129 break;
3130 }
3131 case 2:
3132 {
3133 return 1;
3134 break;
3135 }
3136 }
3137
3138 return 0;
3139}
3140
3141/// Tabulate the local-to-global mapping of dofs on a cell
3142void cahnhilliard2d_dofmap_0::tabulate_dofs(unsigned int* dofs,
3143 const ufc::mesh& m,
3144 const ufc::cell& c) const
3145{
3146 dofs[0] = c.entity_indices[2][0];
3147}
3148
3149/// Tabulate the local-to-local mapping from facet dofs to cell dofs
3150void cahnhilliard2d_dofmap_0::tabulate_facet_dofs(unsigned int* dofs,
3151 unsigned int facet) const
3152{
3153 switch (facet)
3154 {
3155 case 0:
3156 {
3157
3158 break;
3159 }
3160 case 1:
3161 {
3162
3163 break;
3164 }
3165 case 2:
3166 {
3167
3168 break;
3169 }
3170 }
3171
3172}
3173
3174/// Tabulate the local-to-local mapping of dofs on entity (d, i)
3175void cahnhilliard2d_dofmap_0::tabulate_entity_dofs(unsigned int* dofs,
3176 unsigned int d, unsigned int i) const
3177{
3178 if (d > 2)
3179 {
3180 throw std::runtime_error("d is larger than dimension (2)");
3181 }
3182
3183 switch (d)
3184 {
3185 case 0:
3186 {
3187
3188 break;
3189 }
3190 case 1:
3191 {
3192
3193 break;
3194 }
3195 case 2:
3196 {
3197 if (i > 0)
3198 {
3199 throw std::runtime_error("i is larger than number of entities (0)");
3200 }
3201
3202 dofs[0] = 0;
3203 break;
3204 }
3205 }
3206
3207}
3208
3209/// Tabulate the coordinates of all dofs on a cell
3210void cahnhilliard2d_dofmap_0::tabulate_coordinates(double** coordinates,
3211 const ufc::cell& c) const
3212{
3213 const double * const * x = c.coordinates;
3214
3215 coordinates[0][0] = 0.333333333333333*x[0][0] + 0.333333333333333*x[1][0] + 0.333333333333333*x[2][0];
3216 coordinates[0][1] = 0.333333333333333*x[0][1] + 0.333333333333333*x[1][1] + 0.333333333333333*x[2][1];
3217}
3218
3219/// Return the number of sub dofmaps (for a mixed element)
3220unsigned int cahnhilliard2d_dofmap_0::num_sub_dofmaps() const
3221{
3222 return 0;
3223}
3224
3225/// Create a new dofmap for sub dofmap i (for a mixed element)
3226ufc::dofmap* cahnhilliard2d_dofmap_0::create_sub_dofmap(unsigned int i) const
3227{
3228 return 0;
3229}
3230
3231/// Create a new class instance
3232ufc::dofmap* cahnhilliard2d_dofmap_0::create() const
3233{
3234 return new cahnhilliard2d_dofmap_0();
3235}
3236
3237/// Constructor
3238cahnhilliard2d_dofmap_1::cahnhilliard2d_dofmap_1() : ufc::dofmap()
3239{
3240 _global_dimension = 0;
3241}
3242
3243/// Destructor
3244cahnhilliard2d_dofmap_1::~cahnhilliard2d_dofmap_1()
3245{
3246 // Do nothing
3247}
3248
3249/// Return a string identifying the dofmap
3250const char* cahnhilliard2d_dofmap_1::signature() const
3251{
3252 return "FFC dofmap for FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1)";
3253}
3254
3255/// Return true iff mesh entities of topological dimension d are needed
3256bool cahnhilliard2d_dofmap_1::needs_mesh_entities(unsigned int d) const
3257{
3258 switch (d)
3259 {
3260 case 0:
3261 {
3262 return true;
3263 break;
3264 }
3265 case 1:
3266 {
3267 return false;
3268 break;
3269 }
3270 case 2:
3271 {
3272 return false;
3273 break;
3274 }
3275 }
3276
3277 return false;
3278}
3279
3280/// Initialize dofmap for mesh (return true iff init_cell() is needed)
3281bool cahnhilliard2d_dofmap_1::init_mesh(const ufc::mesh& m)
3282{
3283 _global_dimension = m.num_entities[0];
3284 return false;
3285}
3286
3287/// Initialize dofmap for given cell
3288void cahnhilliard2d_dofmap_1::init_cell(const ufc::mesh& m,
3289 const ufc::cell& c)
3290{
3291 // Do nothing
3292}
3293
3294/// Finish initialization of dofmap for cells
3295void cahnhilliard2d_dofmap_1::init_cell_finalize()
3296{
3297 // Do nothing
3298}
3299
3300/// Return the topological dimension of the associated cell shape
3301unsigned int cahnhilliard2d_dofmap_1::topological_dimension() const
3302{
3303 return 2;
3304}
3305
3306/// Return the geometric dimension of the associated cell shape
3307unsigned int cahnhilliard2d_dofmap_1::geometric_dimension() const
3308{
3309 return 2;
3310}
3311
3312/// Return the dimension of the global finite element function space
3313unsigned int cahnhilliard2d_dofmap_1::global_dimension() const
3314{
3315 return _global_dimension;
3316}
3317
3318/// Return the dimension of the local finite element function space for a cell
3319unsigned int cahnhilliard2d_dofmap_1::local_dimension(const ufc::cell& c) const
3320{
3321 return 3;
3322}
3323
3324/// Return the maximum dimension of the local finite element function space
3325unsigned int cahnhilliard2d_dofmap_1::max_local_dimension() const
3326{
3327 return 3;
3328}
3329
3330/// Return the number of dofs on each cell facet
3331unsigned int cahnhilliard2d_dofmap_1::num_facet_dofs() const
3332{
3333 return 2;
3334}
3335
3336/// Return the number of dofs associated with each cell entity of dimension d
3337unsigned int cahnhilliard2d_dofmap_1::num_entity_dofs(unsigned int d) const
3338{
3339 switch (d)
3340 {
3341 case 0:
3342 {
3343 return 1;
3344 break;
3345 }
3346 case 1:
3347 {
3348 return 0;
3349 break;
3350 }
3351 case 2:
3352 {
3353 return 0;
3354 break;
3355 }
3356 }
3357
3358 return 0;
3359}
3360
3361/// Tabulate the local-to-global mapping of dofs on a cell
3362void cahnhilliard2d_dofmap_1::tabulate_dofs(unsigned int* dofs,
3363 const ufc::mesh& m,
3364 const ufc::cell& c) const
3365{
3366 dofs[0] = c.entity_indices[0][0];
3367 dofs[1] = c.entity_indices[0][1];
3368 dofs[2] = c.entity_indices[0][2];
3369}
3370
3371/// Tabulate the local-to-local mapping from facet dofs to cell dofs
3372void cahnhilliard2d_dofmap_1::tabulate_facet_dofs(unsigned int* dofs,
3373 unsigned int facet) const
3374{
3375 switch (facet)
3376 {
3377 case 0:
3378 {
3379 dofs[0] = 1;
3380 dofs[1] = 2;
3381 break;
3382 }
3383 case 1:
3384 {
3385 dofs[0] = 0;
3386 dofs[1] = 2;
3387 break;
3388 }
3389 case 2:
3390 {
3391 dofs[0] = 0;
3392 dofs[1] = 1;
3393 break;
3394 }
3395 }
3396
3397}
3398
3399/// Tabulate the local-to-local mapping of dofs on entity (d, i)
3400void cahnhilliard2d_dofmap_1::tabulate_entity_dofs(unsigned int* dofs,
3401 unsigned int d, unsigned int i) const
3402{
3403 if (d > 2)
3404 {
3405 throw std::runtime_error("d is larger than dimension (2)");
3406 }
3407
3408 switch (d)
3409 {
3410 case 0:
3411 {
3412 if (i > 2)
3413 {
3414 throw std::runtime_error("i is larger than number of entities (2)");
3415 }
3416
3417 switch (i)
3418 {
3419 case 0:
3420 {
3421 dofs[0] = 0;
3422 break;
3423 }
3424 case 1:
3425 {
3426 dofs[0] = 1;
3427 break;
3428 }
3429 case 2:
3430 {
3431 dofs[0] = 2;
3432 break;
3433 }
3434 }
3435
3436 break;
3437 }
3438 case 1:
3439 {
3440
3441 break;
3442 }
3443 case 2:
3444 {
3445
3446 break;
3447 }
3448 }
3449
3450}
3451
3452/// Tabulate the coordinates of all dofs on a cell
3453void cahnhilliard2d_dofmap_1::tabulate_coordinates(double** coordinates,
3454 const ufc::cell& c) const
3455{
3456 const double * const * x = c.coordinates;
3457
3458 coordinates[0][0] = x[0][0];
3459 coordinates[0][1] = x[0][1];
3460 coordinates[1][0] = x[1][0];
3461 coordinates[1][1] = x[1][1];
3462 coordinates[2][0] = x[2][0];
3463 coordinates[2][1] = x[2][1];
3464}
3465
3466/// Return the number of sub dofmaps (for a mixed element)
3467unsigned int cahnhilliard2d_dofmap_1::num_sub_dofmaps() const
3468{
3469 return 0;
3470}
3471
3472/// Create a new dofmap for sub dofmap i (for a mixed element)
3473ufc::dofmap* cahnhilliard2d_dofmap_1::create_sub_dofmap(unsigned int i) const
3474{
3475 return 0;
3476}
3477
3478/// Create a new class instance
3479ufc::dofmap* cahnhilliard2d_dofmap_1::create() const
3480{
3481 return new cahnhilliard2d_dofmap_1();
3482}
3483
3484/// Constructor
3485cahnhilliard2d_dofmap_2::cahnhilliard2d_dofmap_2() : ufc::dofmap()
3486{
3487 _global_dimension = 0;
3488}
3489
3490/// Destructor
3491cahnhilliard2d_dofmap_2::~cahnhilliard2d_dofmap_2()
3492{
3493 // Do nothing
3494}
3495
3496/// Return a string identifying the dofmap
3497const char* cahnhilliard2d_dofmap_2::signature() const
3498{
3499 return "FFC dofmap for MixedElement(*[FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1), FiniteElement('Lagrange', Cell('triangle', 1, Space(2)), 1)], **{'value_shape': (2,) })";
3500}
3501
3502/// Return true iff mesh entities of topological dimension d are needed
3503bool cahnhilliard2d_dofmap_2::needs_mesh_entities(unsigned int d) const
3504{
3505 switch (d)
3506 {
3507 case 0:
3508 {
3509 return true;
3510 break;
3511 }
3512 case 1:
3513 {
3514 return false;
3515 break;
3516 }
3517 case 2:
3518 {
3519 return false;
3520 break;
3521 }
3522 }
3523
3524 return false;
3525}
3526
3527/// Initialize dofmap for mesh (return true iff init_cell() is needed)
3528bool cahnhilliard2d_dofmap_2::init_mesh(const ufc::mesh& m)
3529{
3530 _global_dimension = 2.000000000000000*m.num_entities[0];
3531 return false;
3532}
3533
3534/// Initialize dofmap for given cell
3535void cahnhilliard2d_dofmap_2::init_cell(const ufc::mesh& m,
3536 const ufc::cell& c)
3537{
3538 // Do nothing
3539}
3540
3541/// Finish initialization of dofmap for cells
3542void cahnhilliard2d_dofmap_2::init_cell_finalize()
3543{
3544 // Do nothing
3545}
3546
3547/// Return the topological dimension of the associated cell shape
3548unsigned int cahnhilliard2d_dofmap_2::topological_dimension() const
3549{
3550 return 2;
3551}
3552
3553/// Return the geometric dimension of the associated cell shape
3554unsigned int cahnhilliard2d_dofmap_2::geometric_dimension() const
3555{
3556 return 2;
3557}
3558
3559/// Return the dimension of the global finite element function space
3560unsigned int cahnhilliard2d_dofmap_2::global_dimension() const
3561{
3562 return _global_dimension;
3563}
3564
3565/// Return the dimension of the local finite element function space for a cell
3566unsigned int cahnhilliard2d_dofmap_2::local_dimension(const ufc::cell& c) const
3567{
3568 return 6;
3569}
3570
3571/// Return the maximum dimension of the local finite element function space
3572unsigned int cahnhilliard2d_dofmap_2::max_local_dimension() const
3573{
3574 return 6;
3575}
3576
3577/// Return the number of dofs on each cell facet
3578unsigned int cahnhilliard2d_dofmap_2::num_facet_dofs() const
3579{
3580 return 4;
3581}
3582
3583/// Return the number of dofs associated with each cell entity of dimension d
3584unsigned int cahnhilliard2d_dofmap_2::num_entity_dofs(unsigned int d) const
3585{
3586 switch (d)
3587 {
3588 case 0:
3589 {
3590 return 2;
3591 break;
3592 }
3593 case 1:
3594 {
3595 return 0;
3596 break;
3597 }
3598 case 2:
3599 {
3600 return 0;
3601 break;
3602 }
3603 }
3604
3605 return 0;
3606}
3607
3608/// Tabulate the local-to-global mapping of dofs on a cell
3609void cahnhilliard2d_dofmap_2::tabulate_dofs(unsigned int* dofs,
3610 const ufc::mesh& m,
3611 const ufc::cell& c) const
3612{
3613 unsigned int offset = 0;
3614 dofs[0] = offset + c.entity_indices[0][0];
3615 dofs[1] = offset + c.entity_indices[0][1];
3616 dofs[2] = offset + c.entity_indices[0][2];
3617 offset += m.num_entities[0];
3618 dofs[3] = offset + c.entity_indices[0][0];
3619 dofs[4] = offset + c.entity_indices[0][1];
3620 dofs[5] = offset + c.entity_indices[0][2];
3621 offset += m.num_entities[0];
3622}
3623
3624/// Tabulate the local-to-local mapping from facet dofs to cell dofs
3625void cahnhilliard2d_dofmap_2::tabulate_facet_dofs(unsigned int* dofs,
3626 unsigned int facet) const
3627{
3628 switch (facet)
3629 {
3630 case 0:
3631 {
3632 dofs[0] = 1;
3633 dofs[1] = 2;
3634 dofs[2] = 4;
3635 dofs[3] = 5;
3636 break;
3637 }
3638 case 1:
3639 {
3640 dofs[0] = 0;
3641 dofs[1] = 2;
3642 dofs[2] = 3;
3643 dofs[3] = 5;
3644 break;
3645 }
3646 case 2:
3647 {
3648 dofs[0] = 0;
3649 dofs[1] = 1;
3650 dofs[2] = 3;
3651 dofs[3] = 4;
3652 break;
3653 }
3654 }
3655
3656}
3657
3658/// Tabulate the local-to-local mapping of dofs on entity (d, i)
3659void cahnhilliard2d_dofmap_2::tabulate_entity_dofs(unsigned int* dofs,
3660 unsigned int d, unsigned int i) const
3661{
3662 if (d > 2)
3663 {
3664 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