]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Commit report on assembling matrices.
authorwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 14 Jun 2002 10:11:23 +0000 (10:11 +0000)
committerwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 14 Jun 2002 10:11:23 +0000 (10:11 +0000)
git-svn-id: https://svn.dealii.org/trunk@6114 0785d39b-7218-0410-832d-ea1e28bc413d

113 files changed:
deal.II/doc/reports/assemble/assemble.css [new file with mode: 0644]
deal.II/doc/reports/assemble/img1.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img10.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img11.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img12.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img13.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img14.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img15.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img16.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img17.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img18.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img19.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img2.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img20.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img21.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img22.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img23.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img24.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img25.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img26.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img27.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img28.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img29.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img3.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img30.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img31.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img32.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img33.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img34.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img35.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img36.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img37.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img38.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img39.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img4.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img40.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img41.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img42.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img43.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img44.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img45.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img46.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img47.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img48.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img49.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img5.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img50.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img51.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img52.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img53.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img54.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img55.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img56.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img57.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img58.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img59.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img6.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img60.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img61.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img62.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img63.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img64.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img65.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img66.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img67.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img68.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img69.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img7.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img70.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img71.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img72.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img73.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img74.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img75.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img76.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img77.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img78.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img79.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img8.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img80.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img81.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img82.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img83.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img84.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img85.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img86.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img87.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img88.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img89.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img9.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img90.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img91.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img92.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img93.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img94.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img95.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/img96.gif [new file with mode: 0644]
deal.II/doc/reports/assemble/index.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node10.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node11.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node12.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node13.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node14.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node15.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node16.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node2.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node3.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node4.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node5.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node6.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node7.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node8.html [new file with mode: 0644]
deal.II/doc/reports/assemble/node9.html [new file with mode: 0644]

diff --git a/deal.II/doc/reports/assemble/assemble.css b/deal.II/doc/reports/assemble/assemble.css
new file mode 100644 (file)
index 0000000..d1824af
--- /dev/null
@@ -0,0 +1,30 @@
+/* Century Schoolbook font is very similar to Computer Modern Math: cmmi */
+.MATH    { font-family: "Century Schoolbook", serif; }
+.MATH I  { font-family: "Century Schoolbook", serif; font-style: italic }
+.BOLDMATH { font-family: "Century Schoolbook", serif; font-weight: bold }
+
+/* implement both fixed-size and relative sizes */
+SMALL.XTINY            { font-size : xx-small }
+SMALL.TINY             { font-size : x-small  }
+SMALL.SCRIPTSIZE       { font-size : smaller  }
+SMALL.FOOTNOTESIZE     { font-size : small    }
+SMALL.SMALL            {  }
+BIG.LARGE              {  }
+BIG.XLARGE             { font-size : large    }
+BIG.XXLARGE            { font-size : x-large  }
+BIG.HUGE               { font-size : larger   }
+BIG.XHUGE              { font-size : xx-large }
+
+/* heading styles */
+H1             {  }
+H2             {  }
+H3             {  }
+H4             {  }
+H5             {  }
+
+/* mathematics styles */
+DIV.displaymath                { }     /* math displays */
+TD.eqno                        { }     /* equation-number cells */
+
+
+/* document-specific styles come next */
diff --git a/deal.II/doc/reports/assemble/img1.gif b/deal.II/doc/reports/assemble/img1.gif
new file mode 100644 (file)
index 0000000..d6b9f87
Binary files /dev/null and b/deal.II/doc/reports/assemble/img1.gif differ
diff --git a/deal.II/doc/reports/assemble/img10.gif b/deal.II/doc/reports/assemble/img10.gif
new file mode 100644 (file)
index 0000000..aaaa4fe
Binary files /dev/null and b/deal.II/doc/reports/assemble/img10.gif differ
diff --git a/deal.II/doc/reports/assemble/img11.gif b/deal.II/doc/reports/assemble/img11.gif
new file mode 100644 (file)
index 0000000..e73eb27
Binary files /dev/null and b/deal.II/doc/reports/assemble/img11.gif differ
diff --git a/deal.II/doc/reports/assemble/img12.gif b/deal.II/doc/reports/assemble/img12.gif
new file mode 100644 (file)
index 0000000..48ac2d8
Binary files /dev/null and b/deal.II/doc/reports/assemble/img12.gif differ
diff --git a/deal.II/doc/reports/assemble/img13.gif b/deal.II/doc/reports/assemble/img13.gif
new file mode 100644 (file)
index 0000000..c89091b
Binary files /dev/null and b/deal.II/doc/reports/assemble/img13.gif differ
diff --git a/deal.II/doc/reports/assemble/img14.gif b/deal.II/doc/reports/assemble/img14.gif
new file mode 100644 (file)
index 0000000..918bd25
Binary files /dev/null and b/deal.II/doc/reports/assemble/img14.gif differ
diff --git a/deal.II/doc/reports/assemble/img15.gif b/deal.II/doc/reports/assemble/img15.gif
new file mode 100644 (file)
index 0000000..f3eacb2
Binary files /dev/null and b/deal.II/doc/reports/assemble/img15.gif differ
diff --git a/deal.II/doc/reports/assemble/img16.gif b/deal.II/doc/reports/assemble/img16.gif
new file mode 100644 (file)
index 0000000..abca97a
Binary files /dev/null and b/deal.II/doc/reports/assemble/img16.gif differ
diff --git a/deal.II/doc/reports/assemble/img17.gif b/deal.II/doc/reports/assemble/img17.gif
new file mode 100644 (file)
index 0000000..742ed03
Binary files /dev/null and b/deal.II/doc/reports/assemble/img17.gif differ
diff --git a/deal.II/doc/reports/assemble/img18.gif b/deal.II/doc/reports/assemble/img18.gif
new file mode 100644 (file)
index 0000000..d28fe1b
Binary files /dev/null and b/deal.II/doc/reports/assemble/img18.gif differ
diff --git a/deal.II/doc/reports/assemble/img19.gif b/deal.II/doc/reports/assemble/img19.gif
new file mode 100644 (file)
index 0000000..78d68bb
Binary files /dev/null and b/deal.II/doc/reports/assemble/img19.gif differ
diff --git a/deal.II/doc/reports/assemble/img2.gif b/deal.II/doc/reports/assemble/img2.gif
new file mode 100644 (file)
index 0000000..7c2f274
Binary files /dev/null and b/deal.II/doc/reports/assemble/img2.gif differ
diff --git a/deal.II/doc/reports/assemble/img20.gif b/deal.II/doc/reports/assemble/img20.gif
new file mode 100644 (file)
index 0000000..2c840cb
Binary files /dev/null and b/deal.II/doc/reports/assemble/img20.gif differ
diff --git a/deal.II/doc/reports/assemble/img21.gif b/deal.II/doc/reports/assemble/img21.gif
new file mode 100644 (file)
index 0000000..4ee5086
Binary files /dev/null and b/deal.II/doc/reports/assemble/img21.gif differ
diff --git a/deal.II/doc/reports/assemble/img22.gif b/deal.II/doc/reports/assemble/img22.gif
new file mode 100644 (file)
index 0000000..47342d2
Binary files /dev/null and b/deal.II/doc/reports/assemble/img22.gif differ
diff --git a/deal.II/doc/reports/assemble/img23.gif b/deal.II/doc/reports/assemble/img23.gif
new file mode 100644 (file)
index 0000000..a7cd819
Binary files /dev/null and b/deal.II/doc/reports/assemble/img23.gif differ
diff --git a/deal.II/doc/reports/assemble/img24.gif b/deal.II/doc/reports/assemble/img24.gif
new file mode 100644 (file)
index 0000000..b44ef07
Binary files /dev/null and b/deal.II/doc/reports/assemble/img24.gif differ
diff --git a/deal.II/doc/reports/assemble/img25.gif b/deal.II/doc/reports/assemble/img25.gif
new file mode 100644 (file)
index 0000000..eb8edea
Binary files /dev/null and b/deal.II/doc/reports/assemble/img25.gif differ
diff --git a/deal.II/doc/reports/assemble/img26.gif b/deal.II/doc/reports/assemble/img26.gif
new file mode 100644 (file)
index 0000000..2ef4c1d
Binary files /dev/null and b/deal.II/doc/reports/assemble/img26.gif differ
diff --git a/deal.II/doc/reports/assemble/img27.gif b/deal.II/doc/reports/assemble/img27.gif
new file mode 100644 (file)
index 0000000..a9c26a3
Binary files /dev/null and b/deal.II/doc/reports/assemble/img27.gif differ
diff --git a/deal.II/doc/reports/assemble/img28.gif b/deal.II/doc/reports/assemble/img28.gif
new file mode 100644 (file)
index 0000000..002b77a
Binary files /dev/null and b/deal.II/doc/reports/assemble/img28.gif differ
diff --git a/deal.II/doc/reports/assemble/img29.gif b/deal.II/doc/reports/assemble/img29.gif
new file mode 100644 (file)
index 0000000..7793704
Binary files /dev/null and b/deal.II/doc/reports/assemble/img29.gif differ
diff --git a/deal.II/doc/reports/assemble/img3.gif b/deal.II/doc/reports/assemble/img3.gif
new file mode 100644 (file)
index 0000000..8a05126
Binary files /dev/null and b/deal.II/doc/reports/assemble/img3.gif differ
diff --git a/deal.II/doc/reports/assemble/img30.gif b/deal.II/doc/reports/assemble/img30.gif
new file mode 100644 (file)
index 0000000..d8e107d
Binary files /dev/null and b/deal.II/doc/reports/assemble/img30.gif differ
diff --git a/deal.II/doc/reports/assemble/img31.gif b/deal.II/doc/reports/assemble/img31.gif
new file mode 100644 (file)
index 0000000..c19ad2a
Binary files /dev/null and b/deal.II/doc/reports/assemble/img31.gif differ
diff --git a/deal.II/doc/reports/assemble/img32.gif b/deal.II/doc/reports/assemble/img32.gif
new file mode 100644 (file)
index 0000000..e17f19d
Binary files /dev/null and b/deal.II/doc/reports/assemble/img32.gif differ
diff --git a/deal.II/doc/reports/assemble/img33.gif b/deal.II/doc/reports/assemble/img33.gif
new file mode 100644 (file)
index 0000000..8ebedd0
Binary files /dev/null and b/deal.II/doc/reports/assemble/img33.gif differ
diff --git a/deal.II/doc/reports/assemble/img34.gif b/deal.II/doc/reports/assemble/img34.gif
new file mode 100644 (file)
index 0000000..d6de723
Binary files /dev/null and b/deal.II/doc/reports/assemble/img34.gif differ
diff --git a/deal.II/doc/reports/assemble/img35.gif b/deal.II/doc/reports/assemble/img35.gif
new file mode 100644 (file)
index 0000000..bbc5bc6
Binary files /dev/null and b/deal.II/doc/reports/assemble/img35.gif differ
diff --git a/deal.II/doc/reports/assemble/img36.gif b/deal.II/doc/reports/assemble/img36.gif
new file mode 100644 (file)
index 0000000..1214cb8
Binary files /dev/null and b/deal.II/doc/reports/assemble/img36.gif differ
diff --git a/deal.II/doc/reports/assemble/img37.gif b/deal.II/doc/reports/assemble/img37.gif
new file mode 100644 (file)
index 0000000..9aa700d
Binary files /dev/null and b/deal.II/doc/reports/assemble/img37.gif differ
diff --git a/deal.II/doc/reports/assemble/img38.gif b/deal.II/doc/reports/assemble/img38.gif
new file mode 100644 (file)
index 0000000..5e63946
Binary files /dev/null and b/deal.II/doc/reports/assemble/img38.gif differ
diff --git a/deal.II/doc/reports/assemble/img39.gif b/deal.II/doc/reports/assemble/img39.gif
new file mode 100644 (file)
index 0000000..255d05e
Binary files /dev/null and b/deal.II/doc/reports/assemble/img39.gif differ
diff --git a/deal.II/doc/reports/assemble/img4.gif b/deal.II/doc/reports/assemble/img4.gif
new file mode 100644 (file)
index 0000000..e2aff43
Binary files /dev/null and b/deal.II/doc/reports/assemble/img4.gif differ
diff --git a/deal.II/doc/reports/assemble/img40.gif b/deal.II/doc/reports/assemble/img40.gif
new file mode 100644 (file)
index 0000000..aac5a4b
Binary files /dev/null and b/deal.II/doc/reports/assemble/img40.gif differ
diff --git a/deal.II/doc/reports/assemble/img41.gif b/deal.II/doc/reports/assemble/img41.gif
new file mode 100644 (file)
index 0000000..6930a1e
Binary files /dev/null and b/deal.II/doc/reports/assemble/img41.gif differ
diff --git a/deal.II/doc/reports/assemble/img42.gif b/deal.II/doc/reports/assemble/img42.gif
new file mode 100644 (file)
index 0000000..36e9d63
Binary files /dev/null and b/deal.II/doc/reports/assemble/img42.gif differ
diff --git a/deal.II/doc/reports/assemble/img43.gif b/deal.II/doc/reports/assemble/img43.gif
new file mode 100644 (file)
index 0000000..efde6fc
Binary files /dev/null and b/deal.II/doc/reports/assemble/img43.gif differ
diff --git a/deal.II/doc/reports/assemble/img44.gif b/deal.II/doc/reports/assemble/img44.gif
new file mode 100644 (file)
index 0000000..afe88c6
Binary files /dev/null and b/deal.II/doc/reports/assemble/img44.gif differ
diff --git a/deal.II/doc/reports/assemble/img45.gif b/deal.II/doc/reports/assemble/img45.gif
new file mode 100644 (file)
index 0000000..d64b0e2
Binary files /dev/null and b/deal.II/doc/reports/assemble/img45.gif differ
diff --git a/deal.II/doc/reports/assemble/img46.gif b/deal.II/doc/reports/assemble/img46.gif
new file mode 100644 (file)
index 0000000..6034c45
Binary files /dev/null and b/deal.II/doc/reports/assemble/img46.gif differ
diff --git a/deal.II/doc/reports/assemble/img47.gif b/deal.II/doc/reports/assemble/img47.gif
new file mode 100644 (file)
index 0000000..159a7fa
Binary files /dev/null and b/deal.II/doc/reports/assemble/img47.gif differ
diff --git a/deal.II/doc/reports/assemble/img48.gif b/deal.II/doc/reports/assemble/img48.gif
new file mode 100644 (file)
index 0000000..6c8fa26
Binary files /dev/null and b/deal.II/doc/reports/assemble/img48.gif differ
diff --git a/deal.II/doc/reports/assemble/img49.gif b/deal.II/doc/reports/assemble/img49.gif
new file mode 100644 (file)
index 0000000..d52efb8
Binary files /dev/null and b/deal.II/doc/reports/assemble/img49.gif differ
diff --git a/deal.II/doc/reports/assemble/img5.gif b/deal.II/doc/reports/assemble/img5.gif
new file mode 100644 (file)
index 0000000..c9e8e74
Binary files /dev/null and b/deal.II/doc/reports/assemble/img5.gif differ
diff --git a/deal.II/doc/reports/assemble/img50.gif b/deal.II/doc/reports/assemble/img50.gif
new file mode 100644 (file)
index 0000000..0053aa2
Binary files /dev/null and b/deal.II/doc/reports/assemble/img50.gif differ
diff --git a/deal.II/doc/reports/assemble/img51.gif b/deal.II/doc/reports/assemble/img51.gif
new file mode 100644 (file)
index 0000000..93bd487
Binary files /dev/null and b/deal.II/doc/reports/assemble/img51.gif differ
diff --git a/deal.II/doc/reports/assemble/img52.gif b/deal.II/doc/reports/assemble/img52.gif
new file mode 100644 (file)
index 0000000..96e89cc
Binary files /dev/null and b/deal.II/doc/reports/assemble/img52.gif differ
diff --git a/deal.II/doc/reports/assemble/img53.gif b/deal.II/doc/reports/assemble/img53.gif
new file mode 100644 (file)
index 0000000..98014b0
Binary files /dev/null and b/deal.II/doc/reports/assemble/img53.gif differ
diff --git a/deal.II/doc/reports/assemble/img54.gif b/deal.II/doc/reports/assemble/img54.gif
new file mode 100644 (file)
index 0000000..72f9c4a
Binary files /dev/null and b/deal.II/doc/reports/assemble/img54.gif differ
diff --git a/deal.II/doc/reports/assemble/img55.gif b/deal.II/doc/reports/assemble/img55.gif
new file mode 100644 (file)
index 0000000..0536f80
Binary files /dev/null and b/deal.II/doc/reports/assemble/img55.gif differ
diff --git a/deal.II/doc/reports/assemble/img56.gif b/deal.II/doc/reports/assemble/img56.gif
new file mode 100644 (file)
index 0000000..6e37c13
Binary files /dev/null and b/deal.II/doc/reports/assemble/img56.gif differ
diff --git a/deal.II/doc/reports/assemble/img57.gif b/deal.II/doc/reports/assemble/img57.gif
new file mode 100644 (file)
index 0000000..e75a973
Binary files /dev/null and b/deal.II/doc/reports/assemble/img57.gif differ
diff --git a/deal.II/doc/reports/assemble/img58.gif b/deal.II/doc/reports/assemble/img58.gif
new file mode 100644 (file)
index 0000000..8ad71c8
Binary files /dev/null and b/deal.II/doc/reports/assemble/img58.gif differ
diff --git a/deal.II/doc/reports/assemble/img59.gif b/deal.II/doc/reports/assemble/img59.gif
new file mode 100644 (file)
index 0000000..f898b00
Binary files /dev/null and b/deal.II/doc/reports/assemble/img59.gif differ
diff --git a/deal.II/doc/reports/assemble/img6.gif b/deal.II/doc/reports/assemble/img6.gif
new file mode 100644 (file)
index 0000000..596606c
Binary files /dev/null and b/deal.II/doc/reports/assemble/img6.gif differ
diff --git a/deal.II/doc/reports/assemble/img60.gif b/deal.II/doc/reports/assemble/img60.gif
new file mode 100644 (file)
index 0000000..4d219c6
Binary files /dev/null and b/deal.II/doc/reports/assemble/img60.gif differ
diff --git a/deal.II/doc/reports/assemble/img61.gif b/deal.II/doc/reports/assemble/img61.gif
new file mode 100644 (file)
index 0000000..c812f39
Binary files /dev/null and b/deal.II/doc/reports/assemble/img61.gif differ
diff --git a/deal.II/doc/reports/assemble/img62.gif b/deal.II/doc/reports/assemble/img62.gif
new file mode 100644 (file)
index 0000000..1771abb
Binary files /dev/null and b/deal.II/doc/reports/assemble/img62.gif differ
diff --git a/deal.II/doc/reports/assemble/img63.gif b/deal.II/doc/reports/assemble/img63.gif
new file mode 100644 (file)
index 0000000..f19edb8
Binary files /dev/null and b/deal.II/doc/reports/assemble/img63.gif differ
diff --git a/deal.II/doc/reports/assemble/img64.gif b/deal.II/doc/reports/assemble/img64.gif
new file mode 100644 (file)
index 0000000..781dbf8
Binary files /dev/null and b/deal.II/doc/reports/assemble/img64.gif differ
diff --git a/deal.II/doc/reports/assemble/img65.gif b/deal.II/doc/reports/assemble/img65.gif
new file mode 100644 (file)
index 0000000..ef1f07b
Binary files /dev/null and b/deal.II/doc/reports/assemble/img65.gif differ
diff --git a/deal.II/doc/reports/assemble/img66.gif b/deal.II/doc/reports/assemble/img66.gif
new file mode 100644 (file)
index 0000000..89a9c89
Binary files /dev/null and b/deal.II/doc/reports/assemble/img66.gif differ
diff --git a/deal.II/doc/reports/assemble/img67.gif b/deal.II/doc/reports/assemble/img67.gif
new file mode 100644 (file)
index 0000000..74852b1
Binary files /dev/null and b/deal.II/doc/reports/assemble/img67.gif differ
diff --git a/deal.II/doc/reports/assemble/img68.gif b/deal.II/doc/reports/assemble/img68.gif
new file mode 100644 (file)
index 0000000..32d7aa9
Binary files /dev/null and b/deal.II/doc/reports/assemble/img68.gif differ
diff --git a/deal.II/doc/reports/assemble/img69.gif b/deal.II/doc/reports/assemble/img69.gif
new file mode 100644 (file)
index 0000000..852f718
Binary files /dev/null and b/deal.II/doc/reports/assemble/img69.gif differ
diff --git a/deal.II/doc/reports/assemble/img7.gif b/deal.II/doc/reports/assemble/img7.gif
new file mode 100644 (file)
index 0000000..4ea7523
Binary files /dev/null and b/deal.II/doc/reports/assemble/img7.gif differ
diff --git a/deal.II/doc/reports/assemble/img70.gif b/deal.II/doc/reports/assemble/img70.gif
new file mode 100644 (file)
index 0000000..4db374d
Binary files /dev/null and b/deal.II/doc/reports/assemble/img70.gif differ
diff --git a/deal.II/doc/reports/assemble/img71.gif b/deal.II/doc/reports/assemble/img71.gif
new file mode 100644 (file)
index 0000000..233c0f4
Binary files /dev/null and b/deal.II/doc/reports/assemble/img71.gif differ
diff --git a/deal.II/doc/reports/assemble/img72.gif b/deal.II/doc/reports/assemble/img72.gif
new file mode 100644 (file)
index 0000000..3b49c00
Binary files /dev/null and b/deal.II/doc/reports/assemble/img72.gif differ
diff --git a/deal.II/doc/reports/assemble/img73.gif b/deal.II/doc/reports/assemble/img73.gif
new file mode 100644 (file)
index 0000000..936e029
Binary files /dev/null and b/deal.II/doc/reports/assemble/img73.gif differ
diff --git a/deal.II/doc/reports/assemble/img74.gif b/deal.II/doc/reports/assemble/img74.gif
new file mode 100644 (file)
index 0000000..a5539ec
Binary files /dev/null and b/deal.II/doc/reports/assemble/img74.gif differ
diff --git a/deal.II/doc/reports/assemble/img75.gif b/deal.II/doc/reports/assemble/img75.gif
new file mode 100644 (file)
index 0000000..9bf6432
Binary files /dev/null and b/deal.II/doc/reports/assemble/img75.gif differ
diff --git a/deal.II/doc/reports/assemble/img76.gif b/deal.II/doc/reports/assemble/img76.gif
new file mode 100644 (file)
index 0000000..dc00481
Binary files /dev/null and b/deal.II/doc/reports/assemble/img76.gif differ
diff --git a/deal.II/doc/reports/assemble/img77.gif b/deal.II/doc/reports/assemble/img77.gif
new file mode 100644 (file)
index 0000000..3e08c35
Binary files /dev/null and b/deal.II/doc/reports/assemble/img77.gif differ
diff --git a/deal.II/doc/reports/assemble/img78.gif b/deal.II/doc/reports/assemble/img78.gif
new file mode 100644 (file)
index 0000000..a915a75
Binary files /dev/null and b/deal.II/doc/reports/assemble/img78.gif differ
diff --git a/deal.II/doc/reports/assemble/img79.gif b/deal.II/doc/reports/assemble/img79.gif
new file mode 100644 (file)
index 0000000..9ae0de6
Binary files /dev/null and b/deal.II/doc/reports/assemble/img79.gif differ
diff --git a/deal.II/doc/reports/assemble/img8.gif b/deal.II/doc/reports/assemble/img8.gif
new file mode 100644 (file)
index 0000000..43fe3e7
Binary files /dev/null and b/deal.II/doc/reports/assemble/img8.gif differ
diff --git a/deal.II/doc/reports/assemble/img80.gif b/deal.II/doc/reports/assemble/img80.gif
new file mode 100644 (file)
index 0000000..affbada
Binary files /dev/null and b/deal.II/doc/reports/assemble/img80.gif differ
diff --git a/deal.II/doc/reports/assemble/img81.gif b/deal.II/doc/reports/assemble/img81.gif
new file mode 100644 (file)
index 0000000..f2bc847
Binary files /dev/null and b/deal.II/doc/reports/assemble/img81.gif differ
diff --git a/deal.II/doc/reports/assemble/img82.gif b/deal.II/doc/reports/assemble/img82.gif
new file mode 100644 (file)
index 0000000..3999439
Binary files /dev/null and b/deal.II/doc/reports/assemble/img82.gif differ
diff --git a/deal.II/doc/reports/assemble/img83.gif b/deal.II/doc/reports/assemble/img83.gif
new file mode 100644 (file)
index 0000000..b45068e
Binary files /dev/null and b/deal.II/doc/reports/assemble/img83.gif differ
diff --git a/deal.II/doc/reports/assemble/img84.gif b/deal.II/doc/reports/assemble/img84.gif
new file mode 100644 (file)
index 0000000..9207600
Binary files /dev/null and b/deal.II/doc/reports/assemble/img84.gif differ
diff --git a/deal.II/doc/reports/assemble/img85.gif b/deal.II/doc/reports/assemble/img85.gif
new file mode 100644 (file)
index 0000000..a6bbaa3
Binary files /dev/null and b/deal.II/doc/reports/assemble/img85.gif differ
diff --git a/deal.II/doc/reports/assemble/img86.gif b/deal.II/doc/reports/assemble/img86.gif
new file mode 100644 (file)
index 0000000..e9bdeb3
Binary files /dev/null and b/deal.II/doc/reports/assemble/img86.gif differ
diff --git a/deal.II/doc/reports/assemble/img87.gif b/deal.II/doc/reports/assemble/img87.gif
new file mode 100644 (file)
index 0000000..0e4d10b
Binary files /dev/null and b/deal.II/doc/reports/assemble/img87.gif differ
diff --git a/deal.II/doc/reports/assemble/img88.gif b/deal.II/doc/reports/assemble/img88.gif
new file mode 100644 (file)
index 0000000..5bd558f
Binary files /dev/null and b/deal.II/doc/reports/assemble/img88.gif differ
diff --git a/deal.II/doc/reports/assemble/img89.gif b/deal.II/doc/reports/assemble/img89.gif
new file mode 100644 (file)
index 0000000..5f489d9
Binary files /dev/null and b/deal.II/doc/reports/assemble/img89.gif differ
diff --git a/deal.II/doc/reports/assemble/img9.gif b/deal.II/doc/reports/assemble/img9.gif
new file mode 100644 (file)
index 0000000..6b81516
Binary files /dev/null and b/deal.II/doc/reports/assemble/img9.gif differ
diff --git a/deal.II/doc/reports/assemble/img90.gif b/deal.II/doc/reports/assemble/img90.gif
new file mode 100644 (file)
index 0000000..9cfeed2
Binary files /dev/null and b/deal.II/doc/reports/assemble/img90.gif differ
diff --git a/deal.II/doc/reports/assemble/img91.gif b/deal.II/doc/reports/assemble/img91.gif
new file mode 100644 (file)
index 0000000..5c92644
Binary files /dev/null and b/deal.II/doc/reports/assemble/img91.gif differ
diff --git a/deal.II/doc/reports/assemble/img92.gif b/deal.II/doc/reports/assemble/img92.gif
new file mode 100644 (file)
index 0000000..26d549b
Binary files /dev/null and b/deal.II/doc/reports/assemble/img92.gif differ
diff --git a/deal.II/doc/reports/assemble/img93.gif b/deal.II/doc/reports/assemble/img93.gif
new file mode 100644 (file)
index 0000000..784eba0
Binary files /dev/null and b/deal.II/doc/reports/assemble/img93.gif differ
diff --git a/deal.II/doc/reports/assemble/img94.gif b/deal.II/doc/reports/assemble/img94.gif
new file mode 100644 (file)
index 0000000..7097f9c
Binary files /dev/null and b/deal.II/doc/reports/assemble/img94.gif differ
diff --git a/deal.II/doc/reports/assemble/img95.gif b/deal.II/doc/reports/assemble/img95.gif
new file mode 100644 (file)
index 0000000..bf8a849
Binary files /dev/null and b/deal.II/doc/reports/assemble/img95.gif differ
diff --git a/deal.II/doc/reports/assemble/img96.gif b/deal.II/doc/reports/assemble/img96.gif
new file mode 100644 (file)
index 0000000..8134a66
Binary files /dev/null and b/deal.II/doc/reports/assemble/img96.gif differ
diff --git a/deal.II/doc/reports/assemble/index.html b/deal.II/doc/reports/assemble/index.html
new file mode 100644 (file)
index 0000000..25f5eb6
--- /dev/null
@@ -0,0 +1,151 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>assemble</TITLE>
+<META NAME="description" CONTENT="assemble">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="next" HREF="node1.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html2"
+  HREF="node1.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif_gr.gif"> 
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif_gr.gif">   
+<BR>
+<B> Next:</B> <A NAME="tex2html3"
+  HREF="node1.html">Introduction</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+<DIV ALIGN="CENTER"><FONT SIZE="+3">Assembling matrices in <TT>deal.II</TT>
+  </FONT>
+</DIV>
+<P>
+<DIV ALIGN="CENTER">
+<BR>
+<BR>
+</DIV>
+<P>
+<DIV ALIGN="CENTER"></DIV>
+<DIV ALIGN="CENTER"><FONT SIZE="+1">Wolfgang Bangerth
+<BR>
+ETH Z&#252;rich, Switzerland
+<BR>
+<BR>
+May 2002
+  </FONT>
+</DIV>
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"></A>
+
+<H2>Overview</H2>
+
+<P>
+Assembling the system matrix for finite element discretizations is standard,
+at least as far as scalar problems are concerned. However, things become a
+little more complicated in implementations once problems are vector-valued,
+and in particular if finite elements are used in which different components of
+vector-valued shape functions are coupled, such as for example for
+divergence-free elements. 
+
+<P>
+It is this case that we are interested in in this report, and we will discuss
+the implementational details user programs must follow if they want to use
+such elements with <TT>deal.II</TT>. In order to explain the problem in a
+simple way, we start by reviewing the algorithms that are used, first for the
+scalar case, then for the case of ``simple'' vector-valued finite elements,
+and finally for the most general case.  However, we do not intend to give an
+introduction into the derivation of finite element methods, or of posing a
+partial differential equation in weak form.
+
+<P>
+The interface for vector-valued finite element shape functions with more than
+one non-zero component that is described in this report is presently being
+implemented, and will be merged with the library after version 3.4 is
+released. Thus, it will be part of version 3.5 or 4.0 of the library,
+depending on which version number we will assign to the successor of 3.4. By
+then, the library will also contain an implementation of Nedelec elements, for
+which these techniques are necessary. The interface for primitive
+vector-valued shape functions, for which only one vector component is
+non-zero, has been part of the library since its publication with version 3.0.
+
+
+<H2>Table of contents</h2>
+
+
+
+<UL>
+<LI><A NAME="tex2html5"
+  HREF="node2.html">Linear systems for finite element methods</A>
+<LI><A NAME="tex2html6"
+  HREF="node3.html">Assembling scalar problems</A>
+<LI><A NAME="tex2html7"
+  HREF="node4.html">Vector-valued problems</A>
+<UL>
+<LI><A NAME="tex2html8"
+  HREF="node5.html">The elastic equations</A>
+<LI><A NAME="tex2html9"
+  HREF="node6.html">The Stokes equations</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html10"
+  HREF="node7.html">Assembling vector-valued problems: The simple case</A>
+<UL>
+<LI><A NAME="tex2html11"
+  HREF="node8.html">The elastic equations</A>
+<LI><A NAME="tex2html12"
+  HREF="node9.html">The Stokes equations</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html13"
+  HREF="node10.html">Assembling vector-valued problems: The complicated case</A>
+<UL>
+<LI><A NAME="tex2html14"
+  HREF="node11.html">Getting information about shape functions</A>
+<LI><A NAME="tex2html15"
+  HREF="node12.html">Evaluating shape functions</A>
+<LI><A NAME="tex2html16"
+  HREF="node13.html">The elastic equations</A>
+<LI><A NAME="tex2html17"
+  HREF="node14.html">The Stokes equations</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html18"
+  HREF="node15.html">Conclusions</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node10.html b/deal.II/doc/reports/assemble/node10.html
new file mode 100644 (file)
index 0000000..f5d49fc
--- /dev/null
@@ -0,0 +1,156 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Assembling vector-valued problems: The complicated case</TITLE>
+<META NAME="description" CONTENT="Assembling vector-valued problems: The complicated case">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="next" HREF="node15.html">
+<LINK REL="previous" HREF="node7.html">
+<LINK REL="up" HREF="assemble.html">
+<LINK REL="next" HREF="node11.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html118"
+  HREF="node11.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html116"
+  HREF="assemble.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html110"
+  HREF="node9.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html119"
+  HREF="node11.html">Getting information about shape</A>
+<B> Up:</B> <A NAME="tex2html117"
+  HREF="assemble.html">assemble</A>
+<B> Previous:</B> <A NAME="tex2html111"
+  HREF="node9.html">The Stokes equations</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00060000000000000000">
+Assembling vector-valued problems: The complicated case</A>
+</H1>
+
+<P>
+The more complicated case is when more than one component of a vector-valued
+shape function is non-zero, i.e. the representation
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="248" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
+ SRC="img77.gif"
+ ALT="$\displaystyle \Phi_i(\vec x) = \left( 0, \dots, 0, \varphi_i(\vec x), 0, \ldots, 0\right)^T,$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+does not hold any more. The usual case where this happens is when shape
+functions have to satisfy certain constraints, such as that they should have
+zero divergence or curl, or when the normal fluxes at some points, e.g. the
+face centers, are the degrees of freedom: 
+<!-- MATH
+ $\vec n\cdot \Phi_i(x_a) = \delta_{ia}$
+ -->
+<IMG
+ WIDTH="112" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img95.gif"
+ ALT="$ \vec n\cdot \Phi_i(x_a) = \delta_{ia}$">. In this case, the individual
+components of a shape function are no more independent, and thus cannot be
+chosen such that only one component is non-zero.
+
+<P>
+What happens in this case? First, the function
+<TT>FiniteElement::system_to_component_index</TT> does not make much sense
+any more, since a shape function <IMG
+ WIDTH="21" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img76.gif"
+ ALT="$ \Phi_i$"> cannot be associated with only one
+vector component any more. Calling this function for basis functions <IMG
+ WIDTH="21" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img76.gif"
+ ALT="$ \Phi_i$">
+that are not restricted to only one non-zero component will thus yield an
+exception being thrown.
+
+<P>
+Second, the functions <TT>FEValues::shape_value</TT> and
+<TT>FEValues::shape_grad</TT> returning the values and gradients of the only
+non-zero component of a shape function at a quadrature point cannot work any
+more, since there are now more than only one non-zero components for some or
+all values of <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$">. For those shape function for which this holds, you will
+again get an exception upon calling these functions.
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><UL>
+<LI><A NAME="tex2html120"
+  HREF="node11.html">Getting information about shape functions</A>
+<LI><A NAME="tex2html121"
+  HREF="node12.html">Evaluating shape functions</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html122"
+  HREF="node13.html">The elastic equations</A>
+<LI><A NAME="tex2html123"
+  HREF="node14.html">The Stokes equations</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html118"
+  HREF="node11.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html116"
+  HREF="assemble.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html110"
+  HREF="node9.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html119"
+  HREF="node11.html">Getting information about shape</A>
+<B> Up:</B> <A NAME="tex2html117"
+  HREF="assemble.html">assemble</A>
+<B> Previous:</B> <A NAME="tex2html111"
+  HREF="node9.html">The Stokes equations</A>
+<!--End of Navigation Panel-->
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node11.html b/deal.II/doc/reports/assemble/node11.html
new file mode 100644 (file)
index 0000000..b537efd
--- /dev/null
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Getting information about shape functions</TITLE>
+<META NAME="description" CONTENT="Getting information about shape functions">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="next" HREF="node12.html">
+<LINK REL="previous" HREF="node10.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node12.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html132"
+  HREF="node12.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html130"
+  HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html124"
+  HREF="node10.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html133"
+  HREF="node12.html">Evaluating shape functions</A>
+<B> Up:</B> <A NAME="tex2html131"
+  HREF="node10.html">Assembling vector-valued problems: The</A>
+<B> Previous:</B> <A NAME="tex2html125"
+  HREF="node10.html">Assembling vector-valued problems: The</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H3><A NAME="SECTION00060100000000000000">
+Getting information about shape functions</A>
+</H3>
+
+<P>
+So how do you find out whether calling these functions is ok or not? In other
+words, how do you know whether shape function <IMG
+ WIDTH="21" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img76.gif"
+ ALT="$ \Phi_i$"> has only one non-zero
+component, or more? For this, there are two functions:
+<TT>FiniteElement::is_primitive(i)</TT> returns as a <TT>bool</TT> whether
+the shape function has only one non-zero component. For example, for a
+<!-- MATH
+ $Q^2/Q^2/Q^1$
+ -->
+<IMG
+ WIDTH="79" HEIGHT="33" ALIGN="MIDDLE" BORDER="0"
+ SRC="img86.gif"
+ ALT="$ Q^2/Q^2/Q^1$"> element, this would be <TT>true</TT> for all 22 shape functions.
+For a finite element for which every shape function is non-zero in more than
+one component, it would be <TT>false</TT> for all indices <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$">. It might also
+be <TT>true</TT> for only some shape functions, for example if the velocity
+components of the Stokes discretization are done using some more complicated
+element, but the pressure component with a <IMG
+ WIDTH="24" HEIGHT="33" ALIGN="MIDDLE" BORDER="0"
+ SRC="img96.gif"
+ ALT="$ Q^1$">, then it would be
+<TT>true</TT> for the pressure shape functions, but <TT>false</TT> otherwise.
+
+<P>
+Second, the <TT>FiniteElement::n_nonzero_components(i)</TT> function returns
+in how many components the <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$">th shape function is non-zero. Again, for the
+<!-- MATH
+ $Q^2/Q^2/Q^1$
+ -->
+<IMG
+ WIDTH="79" HEIGHT="33" ALIGN="MIDDLE" BORDER="0"
+ SRC="img86.gif"
+ ALT="$ Q^2/Q^2/Q^1$"> combination, this would yield the value 1 for all allowed
+indices <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$">. For coupled elements, it would be greater than 1.
+
+<P>
+Third, you may sometimes want to know in which components a certain shape
+function is non-zero. For this, the
+<TT>FiniteElement::get_nonzero_components(i)</TT> function is the right thing: it
+returns a reference to a vector of boolean values, one for each component of
+the vector-valued finite element, and the values indicate whether the shape
+function is non-zero for each of them.
+
+<P>
+Note that if you have the result of
+<TT>FiniteElement::get_nonzero_components(i)</TT>, then the result of
+<TT>FiniteElement::n_nonzero_components(i)</TT> is simply the number of
+<TT>true</TT> values in the array returned by the first function. Likewise, 
+<TT>FiniteElement::is_primitive(i)</TT> is simply whether
+<TT>FiniteElement::n_nonzero_components(i)</TT> returned a value other than
+1. The functions are thus redundant in some way, but useful nevertheless. Of
+course, the values of the  <TT>FiniteElement::is_primitive(i)</TT>
+and  <TT>FiniteElement::n_nonzero_components(i)</TT> functions are not
+recomputed every time based on the result of some other function, but are
+cached once at the time of construction of a finite element object.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html132"
+  HREF="node12.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html130"
+  HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html124"
+  HREF="node10.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html133"
+  HREF="node12.html">Evaluating shape functions</A>
+<B> Up:</B> <A NAME="tex2html131"
+  HREF="node10.html">Assembling vector-valued problems: The</A>
+<B> Previous:</B> <A NAME="tex2html125"
+  HREF="node10.html">Assembling vector-valued problems: The</A>
+<!--End of Navigation Panel-->
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node12.html b/deal.II/doc/reports/assemble/node12.html
new file mode 100644 (file)
index 0000000..879e388
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Evaluating shape functions</TITLE>
+<META NAME="description" CONTENT="Evaluating shape functions">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="previous" HREF="node11.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node13.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html140"
+  HREF="node13.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html138"
+  HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html134"
+  HREF="node11.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html141"
+  HREF="node13.html">The elastic equations</A>
+<B> Up:</B> <A NAME="tex2html139"
+  HREF="node10.html">Assembling vector-valued problems: The</A>
+<B> Previous:</B> <A NAME="tex2html135"
+  HREF="node11.html">Getting information about shape</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H3><A NAME="SECTION00060200000000000000">
+Evaluating shape functions</A>
+</H3>
+
+<P>
+Now, we have seen which functions cannot be called for non-primitive shape
+functions, and also how to find out about shape functions and whether they are
+primitive and the like. Yet, we don't have replacements for the functions that
+cannot be called, so here they are: instead of <TT>FEValues::shape_value</TT>
+and <TT>FEValues::shape_grad</TT>, call
+<TT>FEValues::shape_value_component</TT> and
+<TT>FEValues::shape_grad_component</TT>. These functions take as arguments
+first the number of the shape function, and second the number of the
+quadrature point (these are also the arguments of the original functions), but
+now as additional third argument the vector component.
+
+<P>
+Of course, these functions can be called on primitive shape functions as
+well. In that case, the following holds:
+
+<UL>
+<LI>The value of <TT>FEValues::shape_value_component(i,q,c)</TT> is equal
+  to <TT>FEValues::shape_value(i,q)</TT> if and only if the component
+  <TT>c</TT> is equal to <TT>fe.system_to_component_index(i).first</TT>,
+  i.e. if <TT>c</TT> is the only non-zero component of the shape function
+  <TT>i</TT>.
+</LI>
+<LI>For all other components <TT>c</TT>, the returned value of
+  <TT>FEValues::shape_value_component(i,q,c)</TT> is zero.
+</LI>
+</UL>
+The same of course also holds for
+<TT>FEValues::shape_grad_component(i,q,c)</TT> and
+<TT>FEValues::shape_2nd_derivative_component(i,q,c)</TT>.
+
+<P>
+<BR><HR>
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node13.html b/deal.II/doc/reports/assemble/node13.html
new file mode 100644 (file)
index 0000000..a547f6f
--- /dev/null
@@ -0,0 +1,149 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>The elastic equations</TITLE>
+<META NAME="description" CONTENT="The elastic equations">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="next" HREF="node14.html">
+<LINK REL="previous" HREF="node10.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node14.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html150"
+  HREF="node14.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html148"
+  HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html142"
+  HREF="node12.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html151"
+  HREF="node14.html">The Stokes equations</A>
+<B> Up:</B> <A NAME="tex2html149"
+  HREF="node10.html">Assembling vector-valued problems: The</A>
+<B> Previous:</B> <A NAME="tex2html143"
+  HREF="node12.html">Evaluating shape functions</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00061000000000000000">
+The elastic equations</A>
+</H2>
+
+<P>
+With the above, we can now assemble the matrix for the elastic equation in
+mostly the same way as before. The difference is that for each shape function,
+we have to loop over all components. The code then looks like this (compare
+this with the one in Section&nbsp;<A HREF="node8.html#sec:elastic-simple">5.1</A>):
+<PRE>
+  for (unsigned int i=0; i&lt;fe.dofs_per_cell; ++i)
+    for (unsigned int comp_i=0; comp_i&lt;fe.n_components(); ++comp_i)
+      for (unsigned int j=0; j&lt;fe.dofs_per_cell; ++j)
+        for (unsigned int comp_j=0; comp_j&lt;fe.n_components(); ++comp_j)
+          for (unsigned int q=0; q&lt;n_q_points; ++q) 
+            {
+                           // first assemble part with lambda+mu
+              cell_matrix(i,j)
+                 += ((lambda+mu)                       *
+                     fe_values.shape_grad_component(i,q,comp_i)[comp_i] * 
+                     fe_values.shape_grad_component(j,q,comp_j)[comp_j] *
+                     fe_values.JxW(q)); 
+
+                           // then part with mu only
+              if (comp_i == comp_j)
+                cell_matrix(i,j)
+                  += (mu                           *
+                      (fe_values.shape_grad_component(i,q,comp_i) * 
+                       fe_values.shape_grad_component(j,q,comp_j)  )*
+                       fe_values.JxW(q)); 
+            };
+</PRE>
+If you dislike this particular order of the loops, you can reorder them as you
+like, as they are independent.
+
+<P>
+The code as shown above can be optimized. For example, instead of
+unconditionally performing the loop over all components of shape functions <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$">
+of <IMG
+ WIDTH="12" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img83.gif"
+ ALT="$ j$">, we might first ask whether these shape functions are primitive, using
+<TT>fe.is_primitive(i)</TT>, and use the loop only if the result is false;
+if, on the other hand, the result is true, we only need to set
+<TT>comp_i</TT> to the fixed value
+<TT>fe.system_to_component_index(i).first</TT>, and likewise for shape
+function <IMG
+ WIDTH="12" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img83.gif"
+ ALT="$ j$">.
+
+<P>
+Another possibility for optimization would be to ask whether a certain
+component over which we loop is actually non-zero, or if the shape function is
+a non-primitive one but happens to be zero in the present component
+nevertheless. For this, we could replace the loop over <TT>comp_i</TT> by
+this:
+<PRE>
+    for (unsigned int comp_i=0; comp_i&lt;fe.n_components(); ++comp_i)
+      if (fe.get_nonzero_components(i)[comp_i] == true)
+</PRE>
+If the if-clause does not succeed then this component of the shape function is
+definitely zero, and there will not be a contribution to the matrix anyway, so
+we can also skip the computations.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html150"
+  HREF="node14.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html148"
+  HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html142"
+  HREF="node12.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html151"
+  HREF="node14.html">The Stokes equations</A>
+<B> Up:</B> <A NAME="tex2html149"
+  HREF="node10.html">Assembling vector-valued problems: The</A>
+<B> Previous:</B> <A NAME="tex2html143"
+  HREF="node12.html">Evaluating shape functions</A>
+<!--End of Navigation Panel-->
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node14.html b/deal.II/doc/reports/assemble/node14.html
new file mode 100644 (file)
index 0000000..ad5eeaf
--- /dev/null
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>The Stokes equations</TITLE>
+<META NAME="description" CONTENT="The Stokes equations">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="previous" HREF="node13.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node15.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html158"
+  HREF="node15.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html156"
+  HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html152"
+  HREF="node13.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html159"
+  HREF="node15.html">Conclusions</A>
+<B> Up:</B> <A NAME="tex2html157"
+  HREF="node10.html">Assembling vector-valued problems: The</A>
+<B> Previous:</B> <A NAME="tex2html153"
+  HREF="node13.html">The elastic equations</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00062000000000000000">
+The Stokes equations</A>
+</H2>
+
+<P>
+Likewise, this is now the code for the Stokes equations:
+<PRE>
+  for (unsigned int i=0; i&lt;fe.dofs_per_cell; ++i)
+    for (unsigned int comp_i=0; comp_i&lt;fe.n_components(); ++comp_i)
+      for (unsigned int j=0; j&lt;fe.dofs_per_cell; ++j)
+        for (unsigned int comp_j=0; comp_j&lt;fe.n_components(); ++comp_j)
+          for (unsigned int q=0; q&lt;n_q_points; ++q) 
+            {
+                           // velocity-velocity coupling?
+              if ((comp_i&lt;dim) &amp;&amp; (comp_j&lt;dim))
+                if (comp_i == comp_j)
+                  cell_matrix(i,j)
+                      += (nu *
+                          (fe_values.shape_grad_component(i,q,comp_i) * 
+                           fe_values.shape_grad_component(j,q,comp_j)  ) *
+                          fe_values.JxW(q)); 
+
+                           // velocity-pressure coupling
+              if ((comp_i&lt;dim) &amp;&amp; (comp_j==dim))
+                cell_matrix(i,j)
+                    += (-fe_values.shape_grad_component(i,q,comp_i)[comp_i] * 
+                        fe_values.shape_value_component(j,q,comp_j)        *
+                        fe_values.JxW(q)); 
+
+                           // pressure-velocity coupling
+              if ((comp_i==dim) &amp;&amp; (comp_j&lt;dim))
+                cell_matrix(i,j)
+                    += (fe_values.shape_value_component(i,q,comp_i) * 
+                        fe_values.shape_grad_component(j,q,comp_j)[comp_j] *
+                        fe_values.JxW(q)); 
+            };
+</PRE>
+Again, the same optimizations as above are possible. Here, they even seem
+worthwhile, since it is often the case that the velocity variables are
+discretized using a non-primitive finite element, while the pressure uses a
+primitive element. In that case, some shape functions are primitive (namely
+those discretizing the pressure), and of the non-primitive shape functions
+(those for the velocity variables) some vector components (the pressure
+components) are always zero. Thus, both optimizations described above would be
+useful. We leave the implementation of this to the reader.
+
+<P>
+<BR><HR>
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node15.html b/deal.II/doc/reports/assemble/node15.html
new file mode 100644 (file)
index 0000000..546d822
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Conclusions</TITLE>
+<META NAME="description" CONTENT="Conclusions">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="next" HREF="node16.html">
+<LINK REL="previous" HREF="node10.html">
+<LINK REL="up" HREF="assemble.html">
+<LINK REL="next" HREF="node16.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html168"
+  HREF="node16.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html166"
+  HREF="assemble.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html160"
+  HREF="node14.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html169"
+  HREF="node16.html">About this document ...</A>
+<B> Up:</B> <A NAME="tex2html167"
+  HREF="assemble.html">assemble</A>
+<B> Previous:</B> <A NAME="tex2html161"
+  HREF="node14.html">The Stokes equations</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00070000000000000000">
+Conclusions</A>
+</H1>
+
+<P>
+We have shown how finite element matrices are assembled using the
+functionality of the <TT>deal.II</TT> library. For the scalar case, and, in
+the vector-valued case, if the
+finite element shape functions are such that only one vector component of each
+shape function is non-zero, assembling is relatively simple. In the other
+case, when there are shape functions with more than one non-zero component,
+some more care is necessary, but assembling is still straightforward and
+follows the same pattern as before.
+
+<P>
+<BR><HR>
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node16.html b/deal.II/doc/reports/assemble/node16.html
new file mode 100644 (file)
index 0000000..84bf42e
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>About this document ...</TITLE>
+<META NAME="description" CONTENT="About this document ...">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="previous" HREF="node15.html">
+<LINK REL="up" HREF="assemble.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif_gr.gif"> 
+<A NAME="tex2html174"
+  HREF="assemble.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html170"
+  HREF="node15.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Up:</B> <A NAME="tex2html175"
+  HREF="assemble.html">assemble</A>
+<B> Previous:</B> <A NAME="tex2html171"
+  HREF="node15.html">Conclusions</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00080000000000000000">
+About this document ...</A>
+</H1>
+ <P>
+This document was generated using the
+<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2002-1 (1.68)
+<P>
+Copyright &#169; 1993, 1994, 1995, 1996,
+<A HREF="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos Drakos</A>, 
+Computer Based Learning Unit, University of Leeds.
+<BR>
+Copyright &#169; 1997, 1998, 1999,
+<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>, 
+Mathematics Department, Macquarie University, Sydney.
+<P>
+The command line arguments were: <BR>
+ <STRONG>latex2html</STRONG> <TT><A NAME="tex2html1"
+  HREF="../assemble.tex">assemble.tex</A></TT>
+<P>
+The translation was initiated by Wolfgang Bangerth on 2002-06-14
+<BR><HR>
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node2.html b/deal.II/doc/reports/assemble/node2.html
new file mode 100644 (file)
index 0000000..f393f74
--- /dev/null
@@ -0,0 +1,775 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Linear systems for finite element methods</TITLE>
+<META NAME="description" CONTENT="Linear systems for finite element methods">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="next" HREF="node3.html">
+<LINK REL="previous" HREF="node1.html">
+<LINK REL="up" HREF="assemble.html">
+<LINK REL="next" HREF="node3.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html38"
+  HREF="node3.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html36"
+  HREF="assemble.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html30"
+  HREF="node1.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html39"
+  HREF="node3.html">Assembling scalar problems</A>
+<B> Up:</B> <A NAME="tex2html37"
+  HREF="assemble.html">assemble</A>
+<B> Previous:</B> <A NAME="tex2html31"
+  HREF="node1.html">Introduction</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00020000000000000000">
+Linear systems for finite element methods</A>
+</H1>
+
+<P>
+We start by briefly introducing the way finite element matrices are assembled
+``on paper''. As usual in finite elements, we take the weak form of the partial
+differential equation. In the most general case, it reads: <I>find <IMG
+ WIDTH="45" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img1.gif"
+ ALT="$ u\in
+V$"> such that</I>
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="200" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img2.gif"
+ ALT="$\displaystyle a(u, v) = (f,v)_\Omega \qquad \forall v\in V,$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+where <!-- MATH
+ $a(\cdot,\cdot)$
+ -->
+<IMG
+ WIDTH="41" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img3.gif"
+ ALT="$ a(\cdot,\cdot)$"> is the bilinear form associated with the partial
+differential equations, and <IMG
+ WIDTH="17" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img4.gif"
+ ALT="$ V$"> is the space of test functions. For
+simplicity, we have here assumed that the problem is linear and that then
+<!-- MATH
+ $a(\cdot,\cdot)$
+ -->
+<IMG
+ WIDTH="41" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img3.gif"
+ ALT="$ a(\cdot,\cdot)$"> is a bilinear form; if the problem is nonlinear, it is
+usually solved using a sequence of linear problems, so this is no restriction.
+
+<P>
+In finite elements, we define an approximation of the solution <IMG
+ WIDTH="13" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
+ SRC="img5.gif"
+ ALT="$ u$"> by choosing
+a finite dimensional subspace <IMG
+ WIDTH="22" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img6.gif"
+ ALT="$ V_h$"> spanned by the basis functions
+<!-- MATH
+ $\{\varphi_i\}$
+ -->
+<IMG
+ WIDTH="36" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img7.gif"
+ ALT="$ \{\varphi_i\}$">, and searching <!-- MATH
+ $u_h\in V_h$
+ -->
+<IMG
+ WIDTH="58" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img8.gif"
+ ALT="$ u_h\in V_h$"> by testing the weak form by the
+test functions from <IMG
+ WIDTH="22" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img6.gif"
+ ALT="$ V_h$">. The problem then reads: <I>find <!-- MATH
+ $u_h\in V_h$
+ -->
+<IMG
+ WIDTH="58" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img8.gif"
+ ALT="$ u_h\in V_h$">
+such that</I>
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="238" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img9.gif"
+ ALT="$\displaystyle a(u_h, v_h) = (f,v_h)_\Omega \qquad \forall v_h\in V_h.$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+
+<P>
+Now, <!-- MATH
+ $\{\varphi_i\}$
+ -->
+<IMG
+ WIDTH="36" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img7.gif"
+ ALT="$ \{\varphi_i\}$"> is a basis of <IMG
+ WIDTH="22" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img6.gif"
+ ALT="$ V_h$">. We denote the dimension of <IMG
+ WIDTH="22" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img6.gif"
+ ALT="$ V_h$"> by
+<IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img10.gif"
+ ALT="$ N$">, and will henceforth let all sums be over the range <!-- MATH
+ $0\ldots N-1$
+ -->
+<IMG
+ WIDTH="78" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img11.gif"
+ ALT="$ 0\ldots N-1$">, to keep
+with the standard notation of the C/C++ programming languages. With this, we
+can expand the solution <!-- MATH
+ $u_h=\sum_{j=0}^{N-1} U_j \varphi_j$
+ -->
+<IMG
+ WIDTH="125" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
+ SRC="img12.gif"
+ ALT="$ u_h=\sum_{j=0}^{N-1} U_j \varphi_j$">, and by
+bilinearity of the form <!-- MATH
+ $a(\cdot,\cdot)$
+ -->
+<IMG
+ WIDTH="41" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img3.gif"
+ ALT="$ a(\cdot,\cdot)$">, the problem above is equivalent to
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="323" HEIGHT="65" ALIGN="MIDDLE" BORDER="0"
+ SRC="img13.gif"
+ ALT="$\displaystyle \sum_{j=0}^{N-1} U_j a(\varphi_j,\varphi_i) = (f, \varphi_i) \qquad \forall i=0\ldots N-1.$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+<A NAME="eq:lin-1">(1)</A></TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+Denoting
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="268" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img14.gif"
+ ALT="$\displaystyle A_{ij} = a(\varphi_j,\varphi_i), \qquad \qquad F_j = (f, \varphi_j),$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+the equations determining the expansion coefficients <IMG
+ WIDTH="20" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img15.gif"
+ ALT="$ U_i$"> are therefore:
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="65" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img16.gif"
+ ALT="$\displaystyle A U = F.$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+<A NAME="eq:lin-2">(2)</A></TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+
+<P>
+Note that we have taken a reverted order of indices in the definition of <IMG
+ WIDTH="16" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img17.gif"
+ ALT="$ A$">,
+since we want the linear system (<A HREF="node2.html#eq:lin-2">2</A>) with the solution to the
+right of the matrix, to keep with standard notation, instead of to the left as
+in (<A HREF="node2.html#eq:lin-1">1</A>). For symmetric problems, there is no difference, but for
+non-symmetric ones this is a common source for problems and a rather common
+trap. 
+
+<P>
+For partial differential equations, the bilinear form used in (<A HREF="node2.html#eq:lin-1">1</A>)
+involves an integral over the domain <IMG
+ WIDTH="16" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img18.gif"
+ ALT="$ \Omega$"> on which the problem is
+posed. For example, for the Laplace equation we have
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="359" HEIGHT="51" ALIGN="MIDDLE" BORDER="0"
+ SRC="img19.gif"
+ ALT="$\displaystyle A_{ij} = a(\varphi_j, \varphi_i) = (\nabla \varphi_j, \nabla \varphi_i)_\Omega = \int_\Omega \nabla \varphi_j \cdot \nabla \varphi_i \; dx.$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+For practical purposes, we split this equation into integrals over the
+individual cells <IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img20.gif"
+ ALT="$ K$"> of the triangulation <!-- MATH
+ $\mathbb{T}$
+ -->
+<IMG
+ WIDTH="15" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img21.gif"
+ ALT="$ \mathbb{T}$"> we use for the
+discretization. In <TT>deal.II</TT>, these cells are always lines,
+quadrilaterals, or hexahedra. With this, we have that
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="429" HEIGHT="50" ALIGN="MIDDLE" BORDER="0"
+ SRC="img22.gif"
+ ALT="$\displaystyle A = \sum_{K \in {\mathbb{T}}} A^K, \qquad\qquad A^K_{ij} = a_K(\varphi_j, \varphi_i) \qquad 0\le i,j\le N-1,$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+where the bilinear form <!-- MATH
+ $a_K(\cdot,\cdot)$
+ -->
+<IMG
+ WIDTH="53" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img23.gif"
+ ALT="$ a_K(\cdot,\cdot)$"> only involves an integral over the
+cell <IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img20.gif"
+ ALT="$ K$">. The important point is that we do so since for the localized basis
+functions used in finite elements, <IMG
+ WIDTH="28" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
+ SRC="img24.gif"
+ ALT="$ A^K$"> is a matrix with almost only zeros.
+The only elements which are not zero are those corresponding to indices <IMG
+ WIDTH="24" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img25.gif"
+ ALT="$ i,j$">
+indicating those shape functions that have support also on the element <IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img20.gif"
+ ALT="$ K$">.
+For example, in 2d and using the usual bilinear shape functions for a scalar
+problem, only the four shape functions associated with the vertices of the
+cell <IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img20.gif"
+ ALT="$ K$"> are nonzero on <IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img20.gif"
+ ALT="$ K$">, and thus only the entries in <IMG
+ WIDTH="28" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
+ SRC="img24.gif"
+ ALT="$ A^K$"> are nonzero
+where the four rows corresponding to these indices and the respective four
+columns intersect.
+
+<P>
+In general, assume that there are <IMG
+ WIDTH="29" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img26.gif"
+ ALT="$ N_K$"> shape functions with support on cell
+<IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img20.gif"
+ ALT="$ K$">, and let the set of their indices be denoted by <IMG
+ WIDTH="23" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img27.gif"
+ ALT="$ I_K$">. Then we can define
+a matrix <IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$"> of (small dimension) <!-- MATH
+ $N_K\times N_K$
+ -->
+<IMG
+ WIDTH="74" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img29.gif"
+ ALT="$ N_K\times N_K$"> holding these nonzero
+entries, and we can obtain back the original contribution <IMG
+ WIDTH="28" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img30.gif"
+ ALT="$ A_K$"> to <IMG
+ WIDTH="16" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img17.gif"
+ ALT="$ A$"> by the
+transformation
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="481" HEIGHT="57" ALIGN="MIDDLE" BORDER="0"
+ SRC="img31.gif"
+ ALT="$\displaystyle A^K_{ij} = \left\{ \begin{array}{ll} 0 &amp; \text{if $i\not\in I_K$\...
+...al(i),local(j)} &amp; \text{otherwise}, \end{array} \right. \qquad 0\le i,j\le N-1.$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+Here, <IMG
+ WIDTH="55" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img32.gif"
+ ALT="$ local(i)$"> gives the number of the global degree of freedom <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$"> on the
+cell <IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img20.gif"
+ ALT="$ K$">, i.e. the position of <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$"> in the index set <IMG
+ WIDTH="23" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img27.gif"
+ ALT="$ I_K$">. One could call
+<IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$"> the <TT>reduced</TT> form of <IMG
+ WIDTH="28" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
+ SRC="img24.gif"
+ ALT="$ A^K$">, since the many zero rows and
+column have been stripped.
+
+<P>
+In general, when assembling the global matrix, the reverse way is used: when
+adding up <IMG
+ WIDTH="28" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
+ SRC="img24.gif"
+ ALT="$ A^K$"> to <IMG
+ WIDTH="16" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img17.gif"
+ ALT="$ A$">, we do so only with <IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$"> by
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="361" HEIGHT="37" ALIGN="MIDDLE" BORDER="0"
+ SRC="img34.gif"
+ ALT="$\displaystyle A_{global(i),global(j)} +\!\!= \hat A^K_{ij} \qquad \qquad 0\le i,j\le N_K-1.$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+Thus, indices only run over the (small) range <!-- MATH
+ $0\ldots N_K-1$
+ -->
+<IMG
+ WIDTH="88" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img35.gif"
+ ALT="$ 0\ldots N_K-1$"> instead of
+<!-- MATH
+ $0\ldots N-1$
+ -->
+<IMG
+ WIDTH="78" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img11.gif"
+ ALT="$ 0\ldots N-1$">. Here, <IMG
+ WIDTH="63" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img36.gif"
+ ALT="$ global(i)$"> denotes the global number of the degree of
+freedom with number <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$"> on this cell <IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img20.gif"
+ ALT="$ K$">, i.e. <!-- MATH
+ $global(i)=I_K[i]$
+ -->
+<IMG
+ WIDTH="118" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img37.gif"
+ ALT="$ global(i)=I_K[i]$">, where the
+bracket operator returns the <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$">th element of the set <IMG
+ WIDTH="23" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img27.gif"
+ ALT="$ I_K$">.
+
+<P>
+The main part of assembling finite element matrices is therefore to assemble
+the local matrix <IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$">. Before we go on with discussing how this is done
+in <TT>deal.II</TT>, we would like to comment on the evaluation of the
+integrals involved. Since the integrals are usually too complex to be
+evaluated exactly (they may depend on coefficients appearing in the equation,
+or the solution of previous steps in nonlinear or time-dependent problems),
+they are approximated by quadrature. Assume we have a quadrature formula with
+<IMG
+ WIDTH="24" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img38.gif"
+ ALT="$ N_q$"> points <IMG
+ WIDTH="20" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img39.gif"
+ ALT="$ x_q$"> defined on cell in real space (as opposed to the unit cell)
+and weights <IMG
+ WIDTH="23" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img40.gif"
+ ALT="$ w_q$">. Then, for example for the Laplace equation, we approximate
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="379" HEIGHT="69" ALIGN="MIDDLE" BORDER="0"
+ SRC="img41.gif"
+ ALT="$\displaystyle \hat A^K_{ij} \equiv \int_K \nabla\varphi_i \cdot \nabla \varphi_...
+...\sum_{q=0}^{N_q-1} \nabla\varphi_i(x_q) \cdot \nabla \varphi_j(x_q) \ w_q \vert$">det<IMG
+ WIDTH="57" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img42.gif"
+ ALT="$\displaystyle \ J(\hat x_q)\vert.$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+(3)</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+For other problems, the integrand is different, but the principle remains the
+same. <!-- MATH
+ $\text{det}\ J(\hat x_q)$
+ -->
+det<IMG
+ WIDTH="48" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img43.gif"
+ ALT="$ \ J(\hat x_q)$"> denotes the determinant of the Jacobian of the
+transformation between the unit cell on which the quadrature weights are
+defined, and the real cell, and <IMG
+ WIDTH="20" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img44.gif"
+ ALT="$ \hat x_q$"> is the point on the unit cell
+corresponding to the quadrature point <IMG
+ WIDTH="20" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img39.gif"
+ ALT="$ x_q$"> in real space.
+
+<P>
+Since all matrices and right hand side vectors only require knowledge of the
+values and gradients of shape functions at quadrature points, this is all that
+<TT>deal.II</TT> usually provides. One can see this as a kind of <I>view</I>
+on a finite element, as it only provides a certain perspective on the actual
+definition of a shape function. Nevertheless, this is entirely sufficient for
+all purposes of programming finite element programs. 
+
+<P>
+In <TT>deal.II</TT> the <TT>FEValues</TT> class does this: you give it a
+finite element definition, a quadrature formula object, and an object defining
+the transformation between unit and real cell, and it provides you with the
+values, gradient, and second derivatives of shape functions at the quadrature
+points. It also gives access to the determinant of the Jacobian, although only
+multiplied with <IMG
+ WIDTH="23" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img40.gif"
+ ALT="$ w_q$"> as these two are always used in conjunction. It also
+provides you with many other fields, such as normal vectors to the outer
+boundary. In practice you do not need them all computed on each cell; thus,
+you have to specify explicitly in which data you are interested when
+constructing <TT>FEValues</TT> objects.
+
+<P>
+In the following, we provide a list of connections between the symbols introduced
+above, and the respective functions and variable names used in typical
+<TT>deal.II</TT> programs. With this, we will subsequently show the basic
+structure of an assembly routine. If you have already taken a look at the
+example programs provided with <TT>deal.II</TT>, you will recognize all these
+names. If you haven't, this would be a good time to look at the first
+three of them.
+
+<P>
+<DIV ALIGN="CENTER">
+<TABLE CELLPADDING=3 BORDER="1">
+<TR><TD ALIGN="LEFT"><IMG
+ WIDTH="16" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img17.gif"
+ ALT="$ A$"></TD>
+<TD ALIGN="LEFT"><TT>system_matrix</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$"></TD>
+<TD ALIGN="LEFT"><TT>cell_matrix</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img20.gif"
+ ALT="$ K$"></TD>
+<TD ALIGN="LEFT"><TT>cell</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img10.gif"
+ ALT="$ N$"></TD>
+<TD ALIGN="LEFT"><TT>dof_handler.n_dofs()</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><IMG
+ WIDTH="29" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img26.gif"
+ ALT="$ N_K$"></TD>
+<TD ALIGN="LEFT"><TT>fe.dofs_per_cell</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><IMG
+ WIDTH="23" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img27.gif"
+ ALT="$ I_K$"></TD>
+<TD ALIGN="LEFT"><TT>local_dof_indices</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><IMG
+ WIDTH="24" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img38.gif"
+ ALT="$ N_q$"></TD>
+<TD ALIGN="LEFT"><TT>quadrature_formula.n_quadrature_points</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><!-- MATH
+ $\varphi_i(x_q)$
+ -->
+<IMG
+ WIDTH="48" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img45.gif"
+ ALT="$ \varphi_i(x_q)$"></TD>
+<TD ALIGN="LEFT"><TT>fe_values.shape_value(i,q)</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><!-- MATH
+ $\nabla\varphi_i(x_q)$
+ -->
+<IMG
+ WIDTH="62" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img46.gif"
+ ALT="$ \nabla\varphi_i(x_q)$"></TD>
+<TD ALIGN="LEFT"><TT>fe_values.shape_grad(i,q)</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><IMG
+ WIDTH="20" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img39.gif"
+ ALT="$ x_q$"></TD>
+<TD ALIGN="LEFT"><TT>fe_values.quadrature_point(q)</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><!-- MATH
+ $|\text{det} J(\hat x_q)| w_q$
+ -->
+<IMG
+ WIDTH="8" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img47.gif"
+ ALT="$ \vert$">det<IMG
+ WIDTH="66" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img48.gif"
+ ALT="$ J(\hat x_q)\vert w_q$"></TD>
+<TD ALIGN="LEFT"><TT>fe_values.JxW(q)</TT></TD>
+</TR>
+</TABLE>
+</DIV>
+
+<P>
+With this vocabulary, the typical matrix assembly loop in <TT>deal.II</TT> has
+the following form: first declare a quadrature object and use it for the
+initialization of a <TT>FEValues</TT> object as discussed above:
+<PRE>
+  QGauss2&lt;2&gt;  quadrature_formula;
+  FEValues&lt;2&gt; fe_values (fe, quadrature_formula, 
+                         UpdateFlags(update_values    |
+                                     update_gradients |
+                                     update_JxW_values));
+</PRE>
+In practice, you may want to use a different set of fields to be updated on
+each cell. For example if you do not need the values of shape functions on a
+cell, you may omit <TT>update_values</TT> from the list. Also note that by
+default a bi- or tri-linear (depending on space dimension) mapping between
+unit and real cell is used. Other mappings are possible, for example quadratic
+ones, or a mapping that makes use of the fact that in many cases cells are
+actually rectangular, rather than arbitrary quadrilaterals; in order to use
+them, another constructor of the <TT>FEValues</TT> class can be used, which
+takes a mapping object as first argument, before the other arguments listed
+above.
+
+<P>
+Next we define abbreviations for the values of <IMG
+ WIDTH="29" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img26.gif"
+ ALT="$ N_K$"> and <IMG
+ WIDTH="24" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img38.gif"
+ ALT="$ N_q$">:
+<PRE>
+  const unsigned int 
+      dofs_per_cell = fe.dofs_per_cell,
+      n_q_points    = quadrature_formula.n_quadrature_points;
+</PRE>
+Then have an object to store the matrix <IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$">, which is of size
+<!-- MATH
+ $N_K\times N_K$
+ -->
+<IMG
+ WIDTH="74" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img29.gif"
+ ALT="$ N_K\times N_K$">:
+<PRE>
+  FullMatrix&lt;double&gt;   cell_matrix (dofs_per_cell, dofs_per_cell);
+</PRE>
+And an object representing the set of global indices of degrees of freedom,
+previously denoted by <IMG
+ WIDTH="23" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img27.gif"
+ ALT="$ I_K$">, that have support on the present cell, i.e. those
+degrees of freedom local to the present cell:
+<PRE>
+  std::vector&lt;unsigned int&gt; local_dof_indices (dofs_per_cell);
+</PRE>
+The next step is then to loop over all cells:
+<PRE>
+  typename DoFHandler&lt;dim&gt;::active_cell_iterator
+       cell = dof_handler.begin_active(),
+       endc = dof_handler.end();
+  for (; cell!=endc; ++cell)
+    {
+</PRE>
+On each cell, first tell the <TT>FEValues</TT> object to compute the values of
+the various fields for this particular cell, and do not forget to reset the
+local matrix <IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$"> to zero before adding it up:
+<PRE>
+      fe_values.reinit (cell);
+      cell_matrix.clear ();
+</PRE>
+Now comes the main part, assembling the local matrix <IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$">. It consists
+of a loop over all indices <!-- MATH
+ $0\le i,j \le N_K$
+ -->
+<IMG
+ WIDTH="99" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img49.gif"
+ ALT="$ 0\le i,j \le N_K$"> and all quadrature points <!-- MATH
+ $0\le
+q\le N_q$
+ -->
+<IMG
+ WIDTH="82" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img50.gif"
+ ALT="$ 0\le
+q\le N_q$">, and summing up the contributions. As this is what we will discuss
+in detail later on, we only denote it here by an ellipse:
+<PRE>
+      for (unsigned int i=0; i&lt;dofs_per_cell; ++i)
+        for (unsigned int j=0; j&lt;dofs_per_cell; ++j)
+          for (unsigned int q=0; q&lt;n_q_points; ++q)
+            cell_matrix(i,j) += ...;
+</PRE>
+After we have <IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$">, we still have to sum it into the global matrix
+<IMG
+ WIDTH="16" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img17.gif"
+ ALT="$ A$">. This is done by first getting the set <IMG
+ WIDTH="23" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img27.gif"
+ ALT="$ I_K$"> of the global indices of the
+shape functions that were active on this cell, and then distributing <IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$">: 
+<PRE>
+      cell-&gt;get_dof_indices (local_dof_indices);
+
+      for (unsigned int i=0; i&lt;dofs_per_cell; ++i)
+        for (unsigned int j=0; j&lt;dofs_per_cell; ++j)
+          system_matrix.add (local_dof_indices[i],
+                             local_dof_indices[j],
+                             cell_matrix(i,j));
+    };
+</PRE>
+When this is done, we go on to the next cell.
+
+<P>
+Within this framework, the only open point is assembling <IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$"> on one
+quadrature point. This will be subject of the rest of this report.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html38"
+  HREF="node3.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html36"
+  HREF="assemble.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html30"
+  HREF="node1.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html39"
+  HREF="node3.html">Assembling scalar problems</A>
+<B> Up:</B> <A NAME="tex2html37"
+  HREF="assemble.html">assemble</A>
+<B> Previous:</B> <A NAME="tex2html31"
+  HREF="node1.html">Introduction</A>
+<!--End of Navigation Panel-->
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node3.html b/deal.II/doc/reports/assemble/node3.html
new file mode 100644 (file)
index 0000000..9d1ecb7
--- /dev/null
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Assembling scalar problems</TITLE>
+<META NAME="description" CONTENT="Assembling scalar problems">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="next" HREF="node4.html">
+<LINK REL="previous" HREF="node2.html">
+<LINK REL="up" HREF="assemble.html">
+<LINK REL="next" HREF="node4.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html48"
+  HREF="node4.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html46"
+  HREF="assemble.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html40"
+  HREF="node2.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html49"
+  HREF="node4.html">Vector-valued problems</A>
+<B> Up:</B> <A NAME="tex2html47"
+  HREF="assemble.html">assemble</A>
+<B> Previous:</B> <A NAME="tex2html41"
+  HREF="node2.html">Linear systems for finite</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00030000000000000000">
+Assembling scalar problems</A>
+</H1>
+
+<P>
+For scalar problems, assembling <IMG
+ WIDTH="28" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
+ SRC="img28.gif"
+ ALT="$ \hat A^K$"> is relatively simple. With the
+terms introduced above, and for the Laplace equation, this looks as follows:
+<PRE>
+    local_matrix(i,j) += (fe_values.shape_grad(i,q_point) *
+                          fe_values.shape_grad(j,q_point) *
+                          fe_values.JxW (q_point));
+</PRE>
+This term is placed in the innermost loop, i.e. is performed for all indices
+<IMG
+ WIDTH="24" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img25.gif"
+ ALT="$ i,j$">, and all quadrature points <TT>q_point</TT>.
+
+<P>
+For nonsymmetric problems, the order of terms has to be considered, as
+mentioned above. For example, for the advection equation
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="82" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img51.gif"
+ ALT="$\displaystyle \beta \cdot \nabla u = f,$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+with which the bilinear form
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="152" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img52.gif"
+ ALT="$\displaystyle a(u,v) = (\beta \cdot \nabla u, v)_\Omega$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+is associated, the local matrix is assembled as
+<PRE>
+    local_matrix(i,j) += (fe_values.shape_values(i,q_point) *
+                          ( beta * fe_values.shape_grad(j,q_point) ) *
+                          fe_values.JxW (q_point));
+</PRE>
+Here, <TT>beta</TT> is an object of type <TT>Tensor&lt;1,dim&gt;</TT>, which
+represents a tensor of rank 1 in <TT>dim</TT> space dimensions.
+
+<P>
+Assembling matrices for scalar problems is also shown from a practical
+perspective in many of the example programs of <TT>deal.II</TT>, where it is
+also demonstrated how to do this for the right hand side vectors. Thus, scalar
+problems are not too interesting, and we now turn to vector-valued problems.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html48"
+  HREF="node4.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html46"
+  HREF="assemble.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html40"
+  HREF="node2.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html49"
+  HREF="node4.html">Vector-valued problems</A>
+<B> Up:</B> <A NAME="tex2html47"
+  HREF="assemble.html">assemble</A>
+<B> Previous:</B> <A NAME="tex2html41"
+  HREF="node2.html">Linear systems for finite</A>
+<!--End of Navigation Panel-->
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node4.html b/deal.II/doc/reports/assemble/node4.html
new file mode 100644 (file)
index 0000000..f8e652c
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Vector-valued problems</TITLE>
+<META NAME="description" CONTENT="Vector-valued problems">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="next" HREF="node7.html">
+<LINK REL="previous" HREF="node3.html">
+<LINK REL="up" HREF="assemble.html">
+<LINK REL="next" HREF="node5.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html58"
+  HREF="node5.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html56"
+  HREF="assemble.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html50"
+  HREF="node3.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html59"
+  HREF="node5.html">The elastic equations</A>
+<B> Up:</B> <A NAME="tex2html57"
+  HREF="assemble.html">assemble</A>
+<B> Previous:</B> <A NAME="tex2html51"
+  HREF="node3.html">Assembling scalar problems</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00040000000000000000">
+Vector-valued problems</A>
+</H1>
+
+<P>
+Since we need some problems at which we will explain assembling the matrix for
+the vector-valued case, we now briefly introduce two simple equations. The
+first are the Lam&#233; equations of elasticity, which are taken for the symmetric
+case, then we briefly introduce the Stokes equations as a nonsymmetric problem.
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html60"
+  HREF="node5.html">The elastic equations</A>
+<LI><A NAME="tex2html61"
+  HREF="node6.html">The Stokes equations</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node5.html b/deal.II/doc/reports/assemble/node5.html
new file mode 100644 (file)
index 0000000..67e3e8e
--- /dev/null
@@ -0,0 +1,355 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>The elastic equations</TITLE>
+<META NAME="description" CONTENT="The elastic equations">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="next" HREF="node6.html">
+<LINK REL="previous" HREF="node4.html">
+<LINK REL="up" HREF="node4.html">
+<LINK REL="next" HREF="node6.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html70"
+  HREF="node6.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html68"
+  HREF="node4.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html62"
+  HREF="node4.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html71"
+  HREF="node6.html">The Stokes equations</A>
+<B> Up:</B> <A NAME="tex2html69"
+  HREF="node4.html">Vector-valued problems</A>
+<B> Previous:</B> <A NAME="tex2html63"
+  HREF="node4.html">Vector-valued problems</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00041000000000000000"></A>
+<A NAME="sec:elastic"></A>
+<BR>
+The elastic equations
+</H2>
+
+<P>
+As first example for the methods we are going to discuss for vector-valued
+problems, we consider the elastic Lam&#233; equations for isotropic materials,
+which read in strong form:
+<!-- MATH
+ \begin{displaymath}
+-
+   \nabla (\lambda+\mu) (\div\vec u)
+   -
+   (\nabla \cdot \mu \nabla) \vec u
+   =
+   \vec f.
+\end{displaymath}
+ -->
+<P></P>
+<DIV ALIGN="CENTER">
+<IMG
+ WIDTH="250" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img53.gif"
+ ALT="$\displaystyle -
+\nabla (\lambda+\mu) (\div\vec u)
+-
+(\nabla \cdot \mu \nabla) \vec u
+=
+\vec f.
+$">
+</DIV><P></P>
+These equations describe the three-dimensional deformation <IMG
+ WIDTH="14" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
+ SRC="img54.gif"
+ ALT="$ \vec u$"> of an
+elastic body under a body force <IMG
+ WIDTH="12" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img55.gif"
+ ALT="$ \vec f$">. The respective bilinear form
+associated with this operator is then
+<!-- MATH
+ \begin{displaymath}
+a(\vec u, \vec v) =
+  \left(
+    (\lambda+\mu) \div\vec u, \div\vec v
+  \right)_\Omega
+  +
+  \sum_k
+  \left(
+    \mu \nabla u_k, \nabla v_k
+  \right)_\Omega,
+\end{displaymath}
+ -->
+<P></P>
+<DIV ALIGN="CENTER">
+<IMG
+ WIDTH="373" HEIGHT="49" ALIGN="MIDDLE" BORDER="0"
+ SRC="img56.gif"
+ ALT="$\displaystyle a(\vec u, \vec v) =
+\left(
+(\lambda+\mu) \div\vec u, \div\vec v
+\right)_\Omega
++
+\sum_k
+\left(
+\mu \nabla u_k, \nabla v_k
+\right)_\Omega,
+$">
+</DIV><P></P>
+or as a sum over components:
+<!-- MATH
+ \begin{displaymath}
+a(\vec u, \vec v) =
+  \sum_{k,l}
+  \left(
+    (\lambda+\mu) \partial_l u_l, \partial_k v_k
+  \right)_\Omega
+  +
+  \sum_{k,l}
+  \left(
+    \mu \partial_l u_k, \partial_l v_k
+  \right)_\Omega.
+\end{displaymath}
+ -->
+<P></P>
+<DIV ALIGN="CENTER">
+<IMG
+ WIDTH="388" HEIGHT="53" ALIGN="MIDDLE" BORDER="0"
+ SRC="img57.gif"
+ ALT="$\displaystyle a(\vec u, \vec v) =
+\sum_{k,l}
+\left(
+(\lambda+\mu) \partial_l u_...
+..._\Omega
++
+\sum_{k,l}
+\left(
+\mu \partial_l u_k, \partial_l v_k
+\right)_\Omega.
+$">
+</DIV><P></P>
+
+<P>
+When assembling matrices, it is advantageous to write the weak form
+(i.e. after integration by parts) as a kind of operator. This is since matrix
+elements after discretization are defined as
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="123" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img58.gif"
+ ALT="$\displaystyle A_{ij} = a(\varphi_j,\varphi_i)_\Omega,$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+where <!-- MATH
+ $\varphi_i,\varphi_j$
+ -->
+<IMG
+ WIDTH="44" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img59.gif"
+ ALT="$ \varphi_i,\varphi_j$"> are two vector-valued trial functions, and it
+would be nice if we could write the bilinear form <!-- MATH
+ $a(\cdot,\cdot)$
+ -->
+<IMG
+ WIDTH="41" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img3.gif"
+ ALT="$ a(\cdot,\cdot)$"> as a kind
+of scalar product <!-- MATH
+ $(\varphi_i, Q \varphi_j)$
+ -->
+<IMG
+ WIDTH="69" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img60.gif"
+ ALT="$ (\varphi_i, Q \varphi_j)$">, where <IMG
+ WIDTH="17" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img61.gif"
+ ALT="$ Q$"> is a differential
+operator. This is trivial if we take <IMG
+ WIDTH="17" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img61.gif"
+ ALT="$ Q$"> as the operator of the strong form,
+<!-- MATH
+ $Q=-\nabla (\lambda+\mu) \div - (\nabla \cdot \mu \nabla)$
+ -->
+<IMG
+ WIDTH="211" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img62.gif"
+ ALT="$ Q=-\nabla (\lambda+\mu) \div - (\nabla \cdot \mu \nabla)$">, but we wanted to
+do this for the weak form. For this, we introduce some notation that is used
+in quantum field theory: for differential operators, we indicate by an arrow
+placed atop of it whether it shall act on the object to the left or to the
+right of it. Thus, 
+<!-- MATH
+ $\varphi \overleftarrow\nabla \cdot \overrightarrow\nabla \psi
+=(\nabla\varphi)\cdot(\nabla\psi)$
+ -->
+<IMG
+ WIDTH="174" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
+ SRC="img63.gif"
+ ALT="$ \varphi \overleftarrow\nabla \cdot \overrightarrow\nabla \psi
+=(\nabla\varphi)\cdot(\nabla\psi)$">. With this, a simple computation shows 
+that 
+<P></P>
+<DIV ALIGN="CENTER"><!-- MATH
+ \begin{multline*}
+a(\vec u,\vec v)
+  =
+  (\lambda+\mu)
+  \left(
+    \begin{pmatrix}
+      u_1 \\u_2
+    \end{pmatrix}
+    \mid
+    \begin{pmatrix}
+      \overleftarrow \partial _1 \overrightarrow \partial _1 &
+      \overleftarrow \partial _1 \overrightarrow \partial _2 \\
+      \overleftarrow \partial _2 \overrightarrow \partial _1 &
+      \overleftarrow \partial _2 \overrightarrow \partial _2
+    \end{pmatrix}
+    \mid
+    \begin{pmatrix}
+      v_1 \\v_2
+    \end{pmatrix}
+  \right)_\Omega
+  \\
+  +
+  \mu
+  \left(
+    \begin{pmatrix}
+      u_1 \\u_2
+    \end{pmatrix}
+    \mid
+    \left(
+      \overleftarrow \partial _1 \overrightarrow \partial _1 +
+      \overleftarrow \partial _2 \overrightarrow \partial _2
+    \right)
+    \begin{pmatrix}
+      1 & 0 \\
+      0 & 1
+    \end{pmatrix}
+    \mid
+    \begin{pmatrix}
+      v_1 \\v_2
+    \end{pmatrix}
+  \right)_\Omega.
+\end{multline*}
+ -->
+<IMG
+ WIDTH="540" HEIGHT="105" ALIGN="BOTTOM" BORDER="0"
+ SRC="img64.gif"
+ ALT="\begin{multline*}
+a(\vec u,\vec v)
+=
+(\lambda+\mu)
+\left(
+\begin{pmatrix}
+...
+...\mid
+\begin{pmatrix}
+v_1 \\ v_2
+\end{pmatrix} \right)_\Omega.
+\end{multline*}"></DIV>
+<BR CLEAR="ALL">
+<P><P></P>
+The sought operator <IMG
+ WIDTH="17" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img61.gif"
+ ALT="$ Q$"> is then
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="528" HEIGHT="63" ALIGN="MIDDLE" BORDER="0"
+ SRC="img65.gif"
+ ALT="$\displaystyle Q = (\lambda+\mu) \begin{pmatrix}\overleftarrow \partial _1 \over...
+...tial _1 + \overleftarrow \partial _2 \overrightarrow \partial _2 \end{pmatrix},$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+and <!-- MATH
+ $a(\vec u,\vec v)=(\vec u | Q | \vec v)$
+ -->
+<IMG
+ WIDTH="127" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img66.gif"
+ ALT="$ a(\vec u,\vec v)=(\vec u \vert Q \vert \vec v)$">. We demonstrate the fact that <IMG
+ WIDTH="17" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img61.gif"
+ ALT="$ Q$">
+acts to both sides by placing it in the middle of the scalar product, just as
+in the bra-ket notation of quantum physics. 
+
+<P>
+The advantages of this formulation will become clear when discussing
+assembling matrices below. For now, we remark that the symmetry of the weak
+form is equally apparent from the form of <IMG
+ WIDTH="17" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img61.gif"
+ ALT="$ Q$"> as well as from the initial
+definition of <!-- MATH
+ $a(\cdot,\cdot)$
+ -->
+<IMG
+ WIDTH="41" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img3.gif"
+ ALT="$ a(\cdot,\cdot)$">.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html70"
+  HREF="node6.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html68"
+  HREF="node4.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html62"
+  HREF="node4.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html71"
+  HREF="node6.html">The Stokes equations</A>
+<B> Up:</B> <A NAME="tex2html69"
+  HREF="node4.html">Vector-valued problems</A>
+<B> Previous:</B> <A NAME="tex2html63"
+  HREF="node4.html">Vector-valued problems</A>
+<!--End of Navigation Panel-->
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node6.html b/deal.II/doc/reports/assemble/node6.html
new file mode 100644 (file)
index 0000000..287b5f6
--- /dev/null
@@ -0,0 +1,183 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>The Stokes equations</TITLE>
+<META NAME="description" CONTENT="The Stokes equations">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="previous" HREF="node5.html">
+<LINK REL="up" HREF="node4.html">
+<LINK REL="next" HREF="node7.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html78"
+  HREF="node7.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html76"
+  HREF="node4.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html72"
+  HREF="node5.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html79"
+  HREF="node7.html">Assembling vector-valued problems: The</A>
+<B> Up:</B> <A NAME="tex2html77"
+  HREF="node4.html">Vector-valued problems</A>
+<B> Previous:</B> <A NAME="tex2html73"
+  HREF="node5.html">The elastic equations</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00042000000000000000"></A>
+<A NAME="sec:stokes"></A>
+<BR>
+The Stokes equations
+</H2>
+
+<P>
+For a nonsymmetric problem, we take the Stokes equations: 
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="RIGHT"><IMG
+ WIDTH="81" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img67.gif"
+ ALT="$\displaystyle -\Delta \vec u + \nabla p$"></TD>
+<TD NOWRAP ALIGN="LEFT"><IMG
+ WIDTH="33" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img68.gif"
+ ALT="$\displaystyle = 0,$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="RIGHT">div&nbsp;<IMG
+ WIDTH="14" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img69.gif"
+ ALT="$\displaystyle \vec u$"></TD>
+<TD NOWRAP ALIGN="LEFT"><IMG
+ WIDTH="33" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img70.gif"
+ ALT="$\displaystyle = 0.$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+We denote by <!-- MATH
+ $\vec w=\{\vec u,p\}$
+ -->
+<IMG
+ WIDTH="80" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img71.gif"
+ ALT="$ \vec w=\{\vec u,p\}$"> the entire solution vector. In the weak
+form, the above equations read
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="468" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img72.gif"
+ ALT="$\displaystyle a(\vec u,p; \vec v, q) = \nu(\nabla \vec u_1, \nabla \vec v_1) +\...
+... \vec u_2, \nabla \vec v_2) - (p, \nabla\cdot \vec v) + (\nabla\cdot\vec u, q).$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+Since we integrated the gradient term in the first equation by parts, but not
+the divergence term in the second equation, the problem is now
+nonsymmetric. If we would have liked, we could have made the problem symmetric
+again by multiplying the entire second equation by <IMG
+ WIDTH="24" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img73.gif"
+ ALT="$ -1$">, but we don't want to
+do that for now for illustrational purposes.
+
+<P>
+Again, we introduce the operator <IMG
+ WIDTH="17" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img61.gif"
+ ALT="$ Q$"> for this problem, which after some
+computations turns out to be
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="406" HEIGHT="83" ALIGN="MIDDLE" BORDER="0"
+ SRC="img74.gif"
+ ALT="$\displaystyle Q = \begin{pmatrix}\nu(\overleftarrow \partial _1 \overrightarrow...
+...\\ \overrightarrow \partial _1 &amp; \overrightarrow \partial _2 &amp; 0 \end{pmatrix}.$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+Again, it is clear from this form that we could have made the operator
+symmetric by multiplying the last row by <IMG
+ WIDTH="24" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img73.gif"
+ ALT="$ -1$">. Note when checking the symmetry
+of <IMG
+ WIDTH="17" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img61.gif"
+ ALT="$ Q$"> that taking the transpose of such an operator means reverting the
+directions of the arrows over the operators, and exchanging their order.
+For example, using the first term, these two steps are 
+<!-- MATH
+ $\overleftarrow \partial _1 \overrightarrow \partial _1 \rightarrow \overrightarrow \partial _1 \overleftarrow \partial _1
+\rightarrow \overleftarrow \partial _1 \overrightarrow \partial _1$
+ -->
+<IMG
+ WIDTH="192" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
+ SRC="img75.gif"
+ ALT="$ \overleftarrow \partial _1 \overrightarrow \partial _1 \rightarrow \overrighta...
+... \partial _1
+\rightarrow \overleftarrow \partial _1 \overrightarrow \partial _1$">.
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html78"
+  HREF="node7.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html76"
+  HREF="node4.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html72"
+  HREF="node5.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html79"
+  HREF="node7.html">Assembling vector-valued problems: The</A>
+<B> Up:</B> <A NAME="tex2html77"
+  HREF="node4.html">Vector-valued problems</A>
+<B> Previous:</B> <A NAME="tex2html73"
+  HREF="node5.html">The elastic equations</A>
+<!--End of Navigation Panel-->
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node7.html b/deal.II/doc/reports/assemble/node7.html
new file mode 100644 (file)
index 0000000..a05621f
--- /dev/null
@@ -0,0 +1,321 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Assembling vector-valued problems: The simple case</TITLE>
+<META NAME="description" CONTENT="Assembling vector-valued problems: The simple case">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="next" HREF="node10.html">
+<LINK REL="previous" HREF="node4.html">
+<LINK REL="up" HREF="assemble.html">
+<LINK REL="next" HREF="node8.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html88"
+  HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html86"
+  HREF="assemble.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html80"
+  HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html89"
+  HREF="node8.html">The elastic equations</A>
+<B> Up:</B> <A NAME="tex2html87"
+  HREF="assemble.html">assemble</A>
+<B> Previous:</B> <A NAME="tex2html81"
+  HREF="node6.html">The Stokes equations</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00050000000000000000">
+Assembling vector-valued problems: The simple case</A>
+</H1>
+
+<P>
+The simple case in assembling vector-valued problems is when the (also
+vector-valued) shape functions are chosen such that only one component in the
+vector is nonzero. This is usually the case, if we choose the shape functions
+to be the outer product of scalar shape functions, such as independent
+bilinear ansatz spaces for each component of a finite element space.
+
+<P>
+In this case, each shape function <IMG
+ WIDTH="21" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img76.gif"
+ ALT="$ \Phi_i$"> has the representation
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="248" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
+ SRC="img77.gif"
+ ALT="$\displaystyle \Phi_i(\vec x) = \left( 0, \dots, 0, \varphi_i(\vec x), 0, \ldots, 0\right)^T,$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+where <IMG
+ WIDTH="21" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img76.gif"
+ ALT="$ \Phi_i$"> is the vector-valued shape function, and <IMG
+ WIDTH="20" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img78.gif"
+ ALT="$ \varphi_i$"> its
+only non-zero component. Let us denote by <IMG
+ WIDTH="29" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img79.gif"
+ ALT="$ c(i)$"> the index of this non-zero
+component, then <IMG
+ WIDTH="21" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img76.gif"
+ ALT="$ \Phi_i$"> can also be written as 
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="159" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img80.gif"
+ ALT="$\displaystyle \left(\Phi_i(\vec x)\right)_l = \varphi_i(\vec x) \delta_{c(i),l},$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+with the Kronecker delta function <!-- MATH
+ $\delta_{jk}$
+ -->
+<IMG
+ WIDTH="25" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img81.gif"
+ ALT="$ \delta_{jk}$">.
+
+<P>
+With this simple form, the cell matrix on cell <IMG
+ WIDTH="19" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img20.gif"
+ ALT="$ K$"> has a simple form:
+<P></P>
+<DIV ALIGN="CENTER"><TABLE CELLPADDING="0" WIDTH="100%" ALIGN="CENTER">
+<TR VALIGN="MIDDLE">
+<TD NOWRAP ALIGN="CENTER"><IMG
+ WIDTH="418" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
+ SRC="img82.gif"
+ ALT="$\displaystyle A^K_{ij} = a_K(\Phi_i,\Phi_j) = \left(\Phi_i \mid Q \mid \Phi_j \right)_K = \left(\varphi_i \mid Q_{c(i),c(j)} \mid \varphi_j \right)_K.$"></TD>
+<TD NOWRAP WIDTH="10" ALIGN="RIGHT">
+&nbsp;&nbsp;&nbsp;</TD></TR>
+</TABLE></DIV>
+<BR CLEAR="ALL"><P></P>
+Thus, in assembling the local cell matrices, we only have to determine the
+single components in which the two shape functions are non-zero, and 
+pick one element from the matrix <IMG
+ WIDTH="17" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img61.gif"
+ ALT="$ Q$"> to assemble each entry of the cell
+matrix with the help of the values of the functions <IMG
+ WIDTH="20" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img78.gif"
+ ALT="$ \varphi_i$"> at the
+quadrature points. Here, it comes handy that we have written the operator as a
+matrix operator <IMG
+ WIDTH="17" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img61.gif"
+ ALT="$ Q$">, since this makes it very clear how shape functions <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$">
+and <IMG
+ WIDTH="12" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img83.gif"
+ ALT="$ j$"> couple: if <!-- MATH
+ $Q_{c(i),c(j)}$
+ -->
+<IMG
+ WIDTH="63" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img84.gif"
+ ALT="$ Q_{c(i),c(j)}$"> is zero, then they do not couple at all for
+this operator. Otherwise, it is easily visible which derivative acts on which
+shape function for this combination of shape functions.
+
+<P>
+In <TT>deal.II</TT>, these two actions mentioned above (getting the non-zero
+component of a shape function, and the value of this component at a given
+quadrature point) are done as follows:
+
+<UL>
+<LI><I>Determining the non-zero component:</I> Given the shape function
+  with number <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$"> (i.e. its index local to the degrees of freedom on the
+  present cell), its only non-zero component is obtained by the function call 
+<PRE>
+  const unsigned int nonzero_component_i
+     = fe.system_to_component_index(i).first;
+</PRE>
+  The <TT>FiniteElement::system_to_component_index</TT> returns a pair of
+  numbers for each index <!-- MATH
+ $0\le i < N_K$
+ -->
+<IMG
+ WIDTH="85" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img85.gif"
+ ALT="$ 0\le i &lt; N_K$">, the first of which denotes the only
+  non-zero component of the shape function <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$">. Since for the case described
+  in this section, the individual components of the vector-valued finite
+  element are independent, we consider each component as a set of scalar shape
+  functions; the second number of the pair returned by the function then
+  denotes the index of the shape function <IMG
+ WIDTH="20" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img78.gif"
+ ALT="$ \varphi_i$"> within the shape
+  functions corresponding to this component.
+
+<P>
+If, for example, our finite element in use is a <!-- MATH
+ $Q^2/Q^2/Q^1$
+ -->
+<IMG
+ WIDTH="79" HEIGHT="33" ALIGN="MIDDLE" BORDER="0"
+ SRC="img86.gif"
+ ALT="$ Q^2/Q^2/Q^1$"> combination
+  (for example for 2d flow computations: bi-quadratic ansatz functions for the
+  velocities, bi-linear for the pressure), then we have a total of 22 shape
+  functions (9+9+4). For each <!-- MATH
+ $0\le i < 22$
+ -->
+<IMG
+ WIDTH="76" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img87.gif"
+ ALT="$ 0\le i &lt; 22$">, the first part of the pair
+  returned by the function described above, <IMG
+ WIDTH="29" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img79.gif"
+ ALT="$ c(i)$">, may then either be 0, 1,
+  or 2, denoting the three possible components of the finite element. If
+  <IMG
+ WIDTH="29" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img79.gif"
+ ALT="$ c(i)$"> is either 0 or 1, then the component to which the shape function <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$">
+  belongs is a bi-quadratic one, and the second index is between 0 and <IMG
+ WIDTH="12" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
+ SRC="img88.gif"
+ ALT="$ 8$">
+  (inclusive) as the <IMG
+ WIDTH="24" HEIGHT="33" ALIGN="MIDDLE" BORDER="0"
+ SRC="img89.gif"
+ ALT="$ Q^2$"> element has 9 shape functions. If <IMG
+ WIDTH="70" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img90.gif"
+ ALT="$ c(i)==2$">, then
+  the second part is between 0 and 3 (inclusive).
+
+<P>
+</LI>
+<LI><I>Getting the value of <!-- MATH
+ $\varphi_i(\vec x_q)$
+ -->
+<IMG
+ WIDTH="49" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img91.gif"
+ ALT="$ \varphi_i(\vec x_q)$">:</I> Since only one
+  component of <IMG
+ WIDTH="21" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img76.gif"
+ ALT="$ \Phi_i$"> is non-zero, we can use the same function as before,
+  i.e. <TT>FEValues::shape_value(i,q)</TT>, which in the scalar case returned
+  the value of shape function <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$"> at quadrature point <IMG
+ WIDTH="12" HEIGHT="28" ALIGN="MIDDLE" BORDER="0"
+ SRC="img92.gif"
+ ALT="$ q$">. Likewise, the 
+  <TT>FEValues::shape_grad(i,q)</TT> function returns the gradient of this
+  particular component.
+
+<P>
+In other words, whether the finite element is scalar or not, the two
+  indicated functions return value and gradient of the only non-zero component
+  of a shape function. If the finite element is scalar, then it is of course
+  clear which component this is (since there <IMG
+ WIDTH="70" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img93.gif"
+ ALT="$ c(i)==0$"> for all valid indices
+  <IMG
+ WIDTH="10" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img33.gif"
+ ALT="$ i$">), in the vector-valued case, it is component <IMG
+ WIDTH="29" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img79.gif"
+ ALT="$ c(i)$">.
+</LI>
+</UL>
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html90"
+  HREF="node8.html">The elastic equations</A>
+<LI><A NAME="tex2html91"
+  HREF="node9.html">The Stokes equations</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html88"
+  HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html86"
+  HREF="assemble.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html80"
+  HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html89"
+  HREF="node8.html">The elastic equations</A>
+<B> Up:</B> <A NAME="tex2html87"
+  HREF="assemble.html">assemble</A>
+<B> Previous:</B> <A NAME="tex2html81"
+  HREF="node6.html">The Stokes equations</A>
+<!--End of Navigation Panel-->
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node8.html b/deal.II/doc/reports/assemble/node8.html
new file mode 100644 (file)
index 0000000..0d730b7
--- /dev/null
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>The elastic equations</TITLE>
+<META NAME="description" CONTENT="The elastic equations">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="next" HREF="node9.html">
+<LINK REL="previous" HREF="node7.html">
+<LINK REL="up" HREF="node7.html">
+<LINK REL="next" HREF="node9.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html100"
+  HREF="node9.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html98"
+  HREF="node7.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html92"
+  HREF="node7.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html101"
+  HREF="node9.html">The Stokes equations</A>
+<B> Up:</B> <A NAME="tex2html99"
+  HREF="node7.html">Assembling vector-valued problems: The</A>
+<B> Previous:</B> <A NAME="tex2html93"
+  HREF="node7.html">Assembling vector-valued problems: The</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00051000000000000000"></A>
+<A NAME="sec:elastic-simple"></A>
+<BR>
+The elastic equations
+</H2>
+
+<P>
+With this, and the definition of the ``bi-directional'' operator <IMG
+ WIDTH="17" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img61.gif"
+ ALT="$ Q$"> in
+Section&nbsp;<A HREF="node5.html#sec:elastic">4.1</A>, the local matrix assembly function for the elastic
+equations would then read as follows:
+<PRE>
+  for (unsigned int i=0; i&lt;fe.dofs_per_cell; ++i)
+    for (unsigned int j=0; j&lt;fe.dofs_per_cell; ++j)
+      for (unsigned int q=0; q&lt;n_q_points; ++q) 
+        {
+          const unsigned int
+            comp_i = fe.system_to_component_index(i).first,
+            comp_j = fe.system_to_component_index(j).first;
+
+                           // first assemble part with lambda+mu
+          cell_matrix(i,j) += ((lambda+mu)                       *
+                               fe_values.shape_grad(i,q)[comp_i] * 
+                               fe_values.shape_grad(j,q)[comp_j] *
+                               fe_values.JxW(q)); 
+
+                           // then part with mu only
+          if (comp_i == comp_j)
+            cell_matrix(i,j) += (mu                           *
+                                 (fe_values.shape_grad(i,q) * 
+                                  fe_values.shape_grad(j,q)  )*
+                                 fe_values.JxW(q)); 
+        };
+</PRE>
+Note that this code works in any space dimension, not only for
+<TT>dim==2</TT>. Optimization of this is possible by hoisting the computation
+of <TT>comp_i</TT> and <TT>comp_j</TT>, denoting <IMG
+ WIDTH="29" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img79.gif"
+ ALT="$ c(i)$"> and <IMG
+ WIDTH="31" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img94.gif"
+ ALT="$ c(j)$">,
+respectively, out of the inner loops. Also, if the coefficients are
+non-constant, they need to be computed at each quadrature point; this may be
+done using this fragment in the innermost loop:
+<PRE>
+  const double
+    lambda_value = lambda.value(fe_values.quadrature_point(q)),
+    mu_value     = mu.value(fe_values.quadrature_point(q));
+</PRE>
+assuming that <TT>lambda,mu</TT> are variables of classes that are derived
+from the <TT>Function&lt;dim&gt;</TT> class.
+
+<P>
+<BR><HR>
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/deal.II/doc/reports/assemble/node9.html b/deal.II/doc/reports/assemble/node9.html
new file mode 100644 (file)
index 0000000..b08791e
--- /dev/null
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-1 (1.68)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>The Stokes equations</TITLE>
+<META NAME="description" CONTENT="The Stokes equations">
+<META NAME="keywords" CONTENT="assemble">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="assemble.css">
+
+<LINK REL="previous" HREF="node8.html">
+<LINK REL="up" HREF="node7.html">
+<LINK REL="next" HREF="node10.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html108"
+  HREF="node10.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="../deal.II-paper/next_motif.gif"></A> 
+<A NAME="tex2html106"
+  HREF="node7.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="../deal.II-paper/up_motif.gif"></A> 
+<A NAME="tex2html102"
+  HREF="node8.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="../deal.II-paper/previous_motif.gif"></A>   
+<BR>
+<B> Next:</B> <A NAME="tex2html109"
+  HREF="node10.html">Assembling vector-valued problems: The</A>
+<B> Up:</B> <A NAME="tex2html107"
+  HREF="node7.html">Assembling vector-valued problems: The</A>
+<B> Previous:</B> <A NAME="tex2html103"
+  HREF="node8.html">The elastic equations</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00052000000000000000"></A>
+<A NAME="sec:stokes-simple"></A>
+<BR>
+The Stokes equations
+</H2>
+
+<P>
+For the Stokes equation, things are slightly more complicated since the three
+components denote different quantities, and the operator <IMG
+ WIDTH="17" HEIGHT="29" ALIGN="MIDDLE" BORDER="0"
+ SRC="img61.gif"
+ ALT="$ Q$"> does not have
+such a simple form, but the case is still simple enough. We present its
+generalization to an arbitrary number of space dimensions, i.e. assume that
+there are <TT>dim</TT> velocity variables and one scalar pressure:
+<PRE>
+  for (unsigned int i=0; i&lt;fe.dofs_per_cell; ++i)
+    for (unsigned int j=0; j&lt;fe.dofs_per_cell; ++j)
+      for (unsigned int q=0; q&lt;n_q_points; ++q) 
+        {
+          const unsigned int
+            comp_i = fe.system_to_component_index(i).first,
+            comp_j = fe.system_to_component_index(j).first;
+
+                           // velocity-velocity coupling?
+          if ((comp_i&lt;dim) &amp;&amp; (comp_j&lt;dim))
+            if (comp_i == comp_j)
+              cell_matrix(i,j) += (nu *
+                                   (fe_values.shape_grad(i,q) * 
+                                    fe_values.shape_grad(j,q)  ) *
+                                   fe_values.JxW(q)); 
+
+                           // velocity-pressure coupling
+          if ((comp_i&lt;dim) &amp;&amp; (comp_j==dim))
+            cell_matrix(i,j) += (-fe_values.shape_grad(i,q)[comp_i] * 
+                                  fe_values.shape_value(j,q)        *
+                                 fe_values.JxW(q)); 
+
+                           // pressure-velocity coupling
+          if ((comp_i==dim) &amp;&amp; (comp_j&lt;dim))
+            cell_matrix(i,j) += (fe_values.shape_value(i,q) * 
+                                 fe_values.shape_grad(j,q)[comp_j] *
+                                 fe_values.JxW(q)); 
+        };
+</PRE>
+Again, optimization is possible by observing that only one of the outer
+<TT>if</TT>s in the body can be true, for example using <TT>else</TT> clauses,
+or <TT>break</TT> statements.
+
+<P>
+<BR><HR>
+<ADDRESS>
+Wolfgang Bangerth
+2002-06-14
+</ADDRESS>
+</BODY>
+</HTML>

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.