]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Merged from trunk.
authorheltai <heltai@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 14 Nov 2013 16:20:41 +0000 (16:20 +0000)
committerheltai <heltai@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 14 Nov 2013 16:20:41 +0000 (16:20 +0000)
git-svn-id: https://svn.dealii.org/branches/branch_manifold_id@31657 0785d39b-7218-0410-832d-ea1e28bc413d

152 files changed:
deal.II/LICENSE
deal.II/README
deal.II/cmake/checks/check_03_compiler_bugs.cmake
deal.II/cmake/config/CMakeLists.txt
deal.II/cmake/configure/configure_1_lapack.cmake
deal.II/cmake/configure/configure_1_mpi.cmake
deal.II/cmake/configure/configure_1_threads.cmake
deal.II/cmake/configure/configure_2_trilinos.cmake
deal.II/cmake/configure/configure_3_petsc.cmake
deal.II/cmake/configure/configure_boost.cmake
deal.II/cmake/configure/configure_hdf5.cmake
deal.II/cmake/configure/configure_mumps.cmake
deal.II/cmake/configure/configure_p4est.cmake
deal.II/cmake/configure/configure_slepc.cmake
deal.II/cmake/macros/macro_configure_feature.cmake
deal.II/cmake/macros/macro_deal_ii_append_libraries.cmake [deleted file]
deal.II/cmake/macros/macro_deal_ii_invoke_autopilot.cmake
deal.II/cmake/macros/macro_pickup_tests.cmake
deal.II/cmake/macros/macro_register_feature.cmake [new file with mode: 0644]
deal.II/cmake/modules/FindDEALII_LAPACK.cmake
deal.II/cmake/modules/FindHDF5.cmake
deal.II/cmake/modules/FindPETSC.cmake
deal.II/cmake/setup_finalize.cmake
deal.II/contrib/mesh_conversion/README.txt
deal.II/contrib/mesh_conversion/mesh/2d/2d_test.cub [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/2d/2d_test.inp [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/2d/2d_test.ucd [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/2d/quad.cub [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/2d/quad.inp [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/2d/quad.ucd [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/CC.cub [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_new.inp [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_new.ucd [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_old.inp [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_old.ucd [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/test_cube_1.cub [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/test_cube_1.inp [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/test_cube_1.ucd [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.cub [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.inp [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.ucd [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.cub [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.inp [changed mode: 0755->0644]
deal.II/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.ucd [changed mode: 0755->0644]
deal.II/doc/README.doc
deal.II/doc/doxygen/doxygen.sty [deleted file]
deal.II/doc/doxygen/options.dox.in
deal.II/doc/news/changes.h
deal.II/doc/news/news.html
deal.II/doc/readme.html
deal.II/doc/reports/assemble/assemble.pdf [deleted file]
deal.II/doc/reports/assemble/assemble.ps [deleted file]
deal.II/doc/reports/assemble/assemble.tex [deleted file]
deal.II/doc/reports/class-hierarchies/1d-dof.eps [deleted file]
deal.II/doc/reports/class-hierarchies/1d-dof.fig [deleted file]
deal.II/doc/reports/class-hierarchies/1d-dof.jpg [deleted file]
deal.II/doc/reports/class-hierarchies/1d-tria.eps [deleted file]
deal.II/doc/reports/class-hierarchies/1d-tria.fig [deleted file]
deal.II/doc/reports/class-hierarchies/1d-tria.jpg [deleted file]
deal.II/doc/reports/class-hierarchies/2d-dof.eps [deleted file]
deal.II/doc/reports/class-hierarchies/2d-dof.fig [deleted file]
deal.II/doc/reports/class-hierarchies/2d-dof.jpg [deleted file]
deal.II/doc/reports/class-hierarchies/2d-tria.eps [deleted file]
deal.II/doc/reports/class-hierarchies/2d-tria.fig [deleted file]
deal.II/doc/reports/class-hierarchies/2d-tria.jpg [deleted file]
deal.II/doc/reports/class-hierarchies/3d-dof.eps [deleted file]
deal.II/doc/reports/class-hierarchies/3d-dof.fig [deleted file]
deal.II/doc/reports/class-hierarchies/3d-dof.jpg [deleted file]
deal.II/doc/reports/class-hierarchies/3d-tria.eps [deleted file]
deal.II/doc/reports/class-hierarchies/3d-tria.fig [deleted file]
deal.II/doc/reports/class-hierarchies/3d-tria.jpg [deleted file]
deal.II/doc/reports/class-hierarchies/index.html [deleted file]
deal.II/doc/reports/codimension-one/desimone-heltai-manigrasso.pdf [deleted file]
deal.II/doc/reports/index.html
deal.II/doc/reports/mapping_q/img1.gif [deleted file]
deal.II/doc/reports/mapping_q/img10.gif [deleted file]
deal.II/doc/reports/mapping_q/img11.gif [deleted file]
deal.II/doc/reports/mapping_q/img12.gif [deleted file]
deal.II/doc/reports/mapping_q/img13.gif [deleted file]
deal.II/doc/reports/mapping_q/img14.gif [deleted file]
deal.II/doc/reports/mapping_q/img15.gif [deleted file]
deal.II/doc/reports/mapping_q/img16.gif [deleted file]
deal.II/doc/reports/mapping_q/img17.gif [deleted file]
deal.II/doc/reports/mapping_q/img18.gif [deleted file]
deal.II/doc/reports/mapping_q/img19.gif [deleted file]
deal.II/doc/reports/mapping_q/img2.gif [deleted file]
deal.II/doc/reports/mapping_q/img20.gif [deleted file]
deal.II/doc/reports/mapping_q/img21.gif [deleted file]
deal.II/doc/reports/mapping_q/img22.gif [deleted file]
deal.II/doc/reports/mapping_q/img23.gif [deleted file]
deal.II/doc/reports/mapping_q/img24.gif [deleted file]
deal.II/doc/reports/mapping_q/img25.gif [deleted file]
deal.II/doc/reports/mapping_q/img26.gif [deleted file]
deal.II/doc/reports/mapping_q/img27.gif [deleted file]
deal.II/doc/reports/mapping_q/img28.gif [deleted file]
deal.II/doc/reports/mapping_q/img29.gif [deleted file]
deal.II/doc/reports/mapping_q/img3.gif [deleted file]
deal.II/doc/reports/mapping_q/img30.gif [deleted file]
deal.II/doc/reports/mapping_q/img31.gif [deleted file]
deal.II/doc/reports/mapping_q/img32.gif [deleted file]
deal.II/doc/reports/mapping_q/img33.gif [deleted file]
deal.II/doc/reports/mapping_q/img34.gif [deleted file]
deal.II/doc/reports/mapping_q/img35.gif [deleted file]
deal.II/doc/reports/mapping_q/img36.gif [deleted file]
deal.II/doc/reports/mapping_q/img37.gif [deleted file]
deal.II/doc/reports/mapping_q/img38.gif [deleted file]
deal.II/doc/reports/mapping_q/img39.gif [deleted file]
deal.II/doc/reports/mapping_q/img4.gif [deleted file]
deal.II/doc/reports/mapping_q/img40.gif [deleted file]
deal.II/doc/reports/mapping_q/img41.gif [deleted file]
deal.II/doc/reports/mapping_q/img42.gif [deleted file]
deal.II/doc/reports/mapping_q/img43.gif [deleted file]
deal.II/doc/reports/mapping_q/img44.gif [deleted file]
deal.II/doc/reports/mapping_q/img45.gif [deleted file]
deal.II/doc/reports/mapping_q/img46.gif [deleted file]
deal.II/doc/reports/mapping_q/img47.gif [deleted file]
deal.II/doc/reports/mapping_q/img48.gif [deleted file]
deal.II/doc/reports/mapping_q/img49.gif [deleted file]
deal.II/doc/reports/mapping_q/img5.gif [deleted file]
deal.II/doc/reports/mapping_q/img50.gif [deleted file]
deal.II/doc/reports/mapping_q/img51.gif [deleted file]
deal.II/doc/reports/mapping_q/img6.gif [deleted file]
deal.II/doc/reports/mapping_q/img7.gif [deleted file]
deal.II/doc/reports/mapping_q/img8.gif [deleted file]
deal.II/doc/reports/mapping_q/img9.gif [deleted file]
deal.II/doc/reports/mapping_q/index.html [deleted file]
deal.II/doc/reports/nedelec/nedelec.pdf [deleted file]
deal.II/doc/reports/nedelec/nedelec.ps [deleted file]
deal.II/doc/reports/new-threads/index.html [deleted file]
deal.II/examples/README.example [new file with mode: 0644]
deal.II/examples/step-25/doc/animate.sh
deal.II/examples/step-42/step-42.cc
deal.II/include/deal.II/base/graph_coloring.h
deal.II/include/deal.II/base/parameter_handler.h
deal.II/include/deal.II/base/thread_management.h
deal.II/include/deal.II/base/work_stream.h
deal.II/include/deal.II/dofs/dof_renumbering.h
deal.II/include/deal.II/grid/tria.h
deal.II/include/deal.II/lac/block_sparse_matrix.h
deal.II/include/deal.II/lac/sparse_matrix.h
deal.II/source/CMakeLists.txt
deal.II/source/base/data_out_base.cc
deal.II/source/base/data_out_base.inst.in
deal.II/source/base/multithread_info.cc
deal.II/source/dofs/dof_renumbering.inst.in
deal.II/source/dummy.cc
deal.II/source/lac/trilinos_sparse_matrix.cc
deal.II/tests/CMakeLists.txt
deal.II/tests/mesh_converter/meshes/README.txt [new file with mode: 0644]
deal.II/tests/quick_tests/CMakeLists.txt
deal.II/tests/quick_tests/step-petsc.cc [new file with mode: 0644]
deal.II/tests/quick_tests/step-slepc.cc [new file with mode: 0644]

index 8b89d07dc609cafb2a916c4cb4ea7cdb7d3f7823..4ef81d521aaab2f3fd694c3c13435599465ef3bf 100644 (file)
@@ -12,10 +12,10 @@ License as published by the Free Software Foundation; either version
 The full text of the GNU Lesser General Public version 2.1 is quoted
 below.
 
-The subdirectory "bundled/" is not licensed by the deal.II authors. PLEASE
-NOTE THAT THE SOFTWARE THERE IS COPYRIGHTED BY OTHERS THAN THE deal.II
-AUTHORS, but is included by permission. For details, consult the stated
-licenses there.
+The subdirectories "bundled/" and "contrib/" contain third party software.
+PLEASE NOTE THAT THE SOFTWARE THERE IS COPYRIGHTED BY OTHERS THAN THE
+deal.II AUTHORS, but is included by permission. For details, consult the
+stated licenses there.
 
 ----------------------------------------------------------------------
 
index 3d878e4de05267b14fd4e2b427fc4a405c9a972f..c88147149a6314e3c99cec02897f4af3c2df9be0 100644 (file)
@@ -13,6 +13,7 @@ For the impatient:
   $ cd build
   $ cmake -DCMAKE_INSTALL_PREFIX=/path/where/deal.II/should/be/intalled/to ..
   $ make install    (alternatively $ make -j<N> install)
+  $ make test
 
   A detailed ReadME can be found at ./doc/readme.html and
   ./doc/users/cmake.html or at http://www.dealii.org/.
index f2cc702cb08032b83621a499050cdf9fbf79a428..a31f9f48241bc02f20ecbf20555e11ceef4a3390 100644 (file)
@@ -314,15 +314,42 @@ CHECK_CXX_COMPILER_BUG(
   "
   DEAL_II_ICC_NUMERICLIMITS_BUG)
 
-IF(DEAL_II_ICC_NUMERICLIMITS_BUG)
+#
+# icc-14.0.0 has an astonishing bug [1] where it hits an internal compiler
+# error when run in C++11 mode with libstdc++-4.7 (from gcc).
+#
+# We just disable C++11 mode in this case
+#
+# [1] http://software.intel.com/en-us/forums/topic/472385
+#
+# - Matthias Maier, 2013
+#
+CHECK_CXX_COMPILER_BUG(
+  "
+  #include <vector>
+  template<typename T> void foo()
+  {
+    std::vector<double> data(100);
+  }
+  int main()
+  {
+    foo<int>();
+  }
+  "
+  DEAL_II_ICC_LIBSTDCPP47CXX11_BUG)
+
+
+IF( DEAL_II_ICC_NUMERICLIMITS_BUG OR
+    DEAL_II_ICC_LIBSTDCPP47CXX11_BUG )
   MESSAGE(STATUS
-    "DEAL_II_ICC_NUMERICLIMITS_BUG found, disabling c++11 support"
+    "Intel C++11 bug found, disabling C++11 support"
     )
   STRIP_FLAG(CMAKE_CXX_FLAGS "${DEAL_II_CXX11_FLAG}")
   SET(DEAL_II_CAN_USE_CXX1X FALSE)
   SET(DEAL_II_USE_CXX11 FALSE)
 ENDIF()
 
+
 #
 # gcc-4.8.1 has some problems with the constexpr "vertices_per_cell" in the
 # definition of alternating_form_at_vertices.
index 8f21d7981e79090780ebf310d32a932494a5e191..d6b3bb2a8920fc1ee6d02327521deb0b3a78309d 100644 (file)
@@ -173,7 +173,6 @@ CONFIGURE_FILE(
   ${CMAKE_CURRENT_BINARY_DIR}/${DEAL_II_PROJECT_CONFIG_NAME}ConfigVersion.cmake
   @ONLY
   )
-
 INSTALL(FILES
   ${CMAKE_CURRENT_BINARY_DIR}/${DEAL_II_PROJECT_CONFIG_NAME}Config.cmake
   ${CMAKE_CURRENT_BINARY_DIR}/${DEAL_II_PROJECT_CONFIG_NAME}ConfigVersion.cmake
@@ -219,6 +218,7 @@ IF(DEAL_II_COMPONENT_COMPAT_FILES)
   #
 
   FOREACH(build ${DEAL_II_BUILD_TYPES})
+
     TO_STRING_AND_ADD_PREFIX(MAKEFILE_DEFINITIONS_${build}
       "-D"
       ${DEAL_II_USER_DEFINITIONS}
@@ -228,14 +228,16 @@ IF(DEAL_II_COMPONENT_COMPAT_FILES)
     #
     # Ideally, DEAL_II_EXTERNAL_LIBRARIES should just contain a list of
     # full library paths. Nevertheless, filter out all elements that are
-    # not a full path starting with "/".
+    # not a full path starting with "/" or that happen to be a "framework"
+    # - we won't deal with that in Make.global_options.
     #
+
     SET(_libs)
     FOREACH(_lib
         ${DEAL_II_EXTERNAL_LIBRARIES_${build}}
         ${DEAL_II_EXTERNAL_LIBRARIES}
         )
-      IF(_lib MATCHES "^\\s*/")
+      IF(_lib MATCHES "^\\s*\\/" AND NOT _lib MATCHES "\\.framework$")
         LIST(APPEND _libs "${_lib}")
       ENDIF()
     ENDFOREACH()
@@ -245,8 +247,6 @@ IF(DEAL_II_COMPONENT_COMPAT_FILES)
         ${_libs}
         )
 
-    MESSAGE("\n\nDEBUG:")
-
     SET(_paths)
     FOREACH(_lib
         $(D)/${DEAL_II_LIBRARY_RELDIR}/${CONFIG_LIBRARY_${build}}
@@ -257,36 +257,48 @@ IF(DEAL_II_COMPONENT_COMPAT_FILES)
       #
       # Strip leading and trailing whitespace
       #
-      MESSAGE("-->           \"${_lib}\"")
       STRING(STRIP "${_lib}" _lib)
-      MESSAGE("    stripped: \"${_lib}\"")
 
-      IF(_lib MATCHES "^(/|\\$\\(D\\))")
-        # Full path: /path/to/libfoo.so:
+      IF(_lib MATCHES "^\\/.*\\.framework$")
+        #
+        # We have a MacOSX framework
+        #
+        # TODO: What do?
+        #
+
+      ELSEIF(_lib MATCHES "^(\\/|\\$\\(D\\))")
+        #
+        # Full path: /path/to/libfoo.(so|dylib|etc):
+        #
 
         # Extract library paths:
         GET_FILENAME_COMPONENT(_path ${_lib} PATH)
         LIST(APPEND _paths ${_path})
 
-        MESSAGE("    appended: \"${_lib}\"")
         LIST(APPEND MAKEFILE_LIBS_${build} ${_lib})
 
-      ELSEIF(_lib MATCHES "^-")
-        # Library is of the form "-lflag", don't touch it:
-        MESSAGE("    appended: \"${_lib}\"")
+      ELSEIF(_lib MATCHES "^-l")
+        #
+        # Library is of the form "-lfoo":
+        #
         LIST(APPEND MAKEFILE_LIBS_${build} ${_lib})
 
-      ELSEIF(NOT "${_lib}" STREQUAL "")
-        # Well in this case we just assume that we have to append an "-l"
-        # Note: This won't cover case where a relative library name, such as
-        # libfoo.so, libfoo.dylib,  etc. is specified...
-        MESSAGE("    appended: \"-l${_lib}\"")
+      ELSEIF(NOT _lib MATCHES "^\\s*$" AND NOT _lib MATCHES "\\.so(\\.[0-9]+)*$")
+        #
+        # Well in this case we just assume that we have to append a "-l"
+        #
+
         LIST(APPEND MAKEFILE_LIBS_${build} "-l${_lib}")
 
+      ELSE()
+        #
+        # For now, ignore the rest.
+        #
+        # TODO: What do?
+        #
       ENDIF()
-    ENDFOREACH()
 
-#    MESSAGE(FATAL_ERROR "bailout")
+    ENDFOREACH()
 
     #
     # And build up an rpath:
index 7c64e0dbe989682f520d1e3e0c17f7b7b733b256..ede31c24ba7fc2445ea38b585d5ab44be565dc3a 100644 (file)
@@ -79,12 +79,8 @@ MACRO(RESET_LAPACK_FUNCTIONS_CACHE)
 ENDMACRO()
 
 
-
 MACRO(FEATURE_LAPACK_CONFIGURE_EXTERNAL)
-
-  ADD_FLAGS(DEAL_II_LINKER_FLAGS "${LAPACK_LINKER_FLAGS}")
-  DEAL_II_APPEND_LIBRARIES(${LAPACK_LIBRARIES})
-
+  REGISTER_FEATURE(LAPACK)
   CHECK_FOR_LAPACK_FUNCTIONS()
 ENDMACRO()
 
index cd92d2707cdc9af7e8ad1ac103e9c99e85ae285c..647ea4a81c96feb5520d1f13dc84531615a0fdbb 100644 (file)
@@ -143,14 +143,12 @@ ENDMACRO()
 
 
 MACRO(FEATURE_MPI_CONFIGURE_EXTERNAL)
-  ADD_FLAGS(CMAKE_CXX_FLAGS "${MPI_CXX_COMPILE_FLAGS}")
-  ADD_FLAGS(DEAL_II_LINKER_FLAGS "${MPI_CXX_LINK_FLAGS}")
-
-  DEAL_II_APPEND_LIBRARIES(${MPI_CXX_LIBRARIES})
-  INCLUDE_DIRECTORIES(${MPI_CXX_INCLUDE_PATH})
-
+  #
   # The user has to know the location of the mpi headers as well:
-  LIST(APPEND DEAL_II_USER_INCLUDE_DIRS ${MPI_CXX_INCLUDE_PATH})
+  #
+  SET(MPI_CXX_ADD_TO_USER_INCLUDE_DIRS TRUE)
+
+  REGISTER_FEATURE(MPI_CXX)
 ENDMACRO()
 
 
index 52e16e0ab8cd0143f9259c94a3a0871864422552..da49c2eb247c8e3f9ca1ce190605d9bd0ae41b83 100644 (file)
@@ -151,9 +151,8 @@ ENDMACRO()
 
 
 MACRO(FEATURE_THREADS_CONFIGURE_EXTERNAL)
-  INCLUDE_DIRECTORIES(${TBB_INCLUDE_DIR})
 
-  DEAL_II_APPEND_LIBRARIES(${TBB_LIBRARIES})
+  REGISTER_FEATURE(TBB)
 
   IF(CMAKE_BUILD_TYPE MATCHES "Debug")
     IF(TBB_WITH_DEBUG_LIB)
@@ -161,7 +160,6 @@ MACRO(FEATURE_THREADS_CONFIGURE_EXTERNAL)
         "TBB_USE_DEBUG=1" "TBB_DO_ASSERT=1"
         )
     ENDIF()
-
   ENDIF()
 
   #
@@ -217,7 +215,7 @@ MACRO(FEATURE_THREADS_CONFIGURE_BUNDLED)
   FIND_LIBRARY(dl_LIBRARY NAMES dl)
   MARK_AS_ADVANCED(dl_LIBRARY)
   IF(NOT dl_LIBRARY MATCHES "-NOTFOUND")
-    DEAL_II_APPEND_LIBRARIES(${dl_LIBRARY})
+    LIST(APPEND DEAL_II_EXTERNAL_LIBRARIES ${dl_LIBRARY})
   ENDIF()
 
   INCLUDE_DIRECTORIES(${TBB_FOLDER}/include)
index 66930730424c59362620e07fca179cd0407fc7d9..0060efb50b07196606c83fddc4faff52554f4425 100644 (file)
@@ -195,12 +195,8 @@ ENDMACRO()
 
 MACRO(FEATURE_TRILINOS_CONFIGURE_EXTERNAL)
 
-  INCLUDE_DIRECTORIES(${TRILINOS_INCLUDE_DIRS})
-
-  # The user has to know the location of the trilinos headers as well:
-  LIST(APPEND DEAL_II_USER_INCLUDE_DIRS ${TRILINOS_INCLUDE_DIRS})
-
-  DEAL_II_APPEND_LIBRARIES(${TRILINOS_LIBRARIES})
+  SET(TRILINOS_ADD_TO_USER_INCLUDE_DIRS TRUE)
+  REGISTER_FEATURE(TRILINOS)
 
   SET(DEAL_II_EXPAND_TRILINOS_VECTOR "TrilinosWrappers::Vector")
   SET(DEAL_II_EXPAND_TRILINOS_BLOCKVECTOR "TrilinosWrappers::BlockVector")
index c1c71a4a83050e62cec88ef3b9ac532c7c5b8304..3627e7c49c1f239b06458fd01c36bb0aa99459e2 100644 (file)
@@ -114,10 +114,8 @@ ENDMACRO()
 MACRO(FEATURE_PETSC_CONFIGURE_EXTERNAL)
   INCLUDE_DIRECTORIES(${PETSC_INCLUDE_DIRS})
 
-  # The user has to know the location of the petsc headers as well:
-  LIST(APPEND DEAL_II_USER_INCLUDE_DIRS ${PETSC_INCLUDE_DIRS})
-
-  DEAL_II_APPEND_LIBRARIES(${PETSC_LIBRARIES})
+  SET(PETSC_ADD_TO_USER_INCLUDE_DIRS TRUE)
+  REGISTER_FEATURE(PETSC)
 
   #
   # Disable a bunch of warnings when compiling with petsc:
index b6ed7c3b2c825145d13c486eab977e4ed31e5900..9571fe9b0e31b97380d38112f42e447936a66de7 100644 (file)
@@ -74,21 +74,33 @@ MACRO(FEATURE_BOOST_FIND_EXTERNAL var)
 
   MARK_AS_ADVANCED(Boost_DIR)
 
-  SET(BOOST_VERSION_MAJOR "${Boost_MAJOR_VERSION}")
-  SET(BOOST_VERSION_MINOR "${Boost_MINOR_VERSION}")
-  SET(BOOST_VERSION_SUBMINOR "${Boost_SUBMINOR_VERSION}")
-  SET(BOOST_VERSION
-    "${BOOST_VERSION_MAJOR}.${BOOST_VERSION_MINOR}.${BOOST_VERSION_SUBMINOR}"
-    )
-
 
   IF( Boost_SERIALIZATION_FOUND AND
       Boost_SYSTEM_FOUND AND
-      (NOT DEAL_II_WITH_THREADS OR Boost_THREAD_FOUND)
-    )
+      (NOT DEAL_II_WITH_THREADS OR Boost_THREAD_FOUND) )
+
+    SET(BOOST_VERSION_MAJOR "${Boost_MAJOR_VERSION}")
+    SET(BOOST_VERSION_MINOR "${Boost_MINOR_VERSION}")
+    SET(BOOST_VERSION_SUBMINOR "${Boost_SUBMINOR_VERSION}")
+    SET(BOOST_VERSION
+      "${BOOST_VERSION_MAJOR}.${BOOST_VERSION_MINOR}.${BOOST_VERSION_SUBMINOR}"
+      )
+
+    #
+    # Remove "pthread" from Boost_LIBRARIES. Threading, if necessary, is
+    # already set up via configure_1_threads.cmake.
+    #
+    LIST(REMOVE_ITEM Boost_LIBRARIES "pthread")
+
+    SET(BOOST_INCLUDE_DIRS ${Boost_INCLUDE_DIRS})
+    SET(BOOST_LIBRARIES ${Boost_LIBRARIES})
+
     MARK_AS_ADVANCED(BOOST_DIR)
+
     SET(${var} TRUE)
+
   ELSE()
+
     SET(BOOST_DIR "" CACHE PATH
       "An optional hint to a boost directory"
       )
@@ -96,21 +108,10 @@ MACRO(FEATURE_BOOST_FIND_EXTERNAL var)
 ENDMACRO()
 
 
-MACRO(FEATURE_BOOST_CONFIGURE_EXTERNAL)
-  INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIRS})
-
-  # The user has to know the location of the boost headers as well:
-  LIST(APPEND DEAL_II_USER_INCLUDE_DIRS ${Boost_INCLUDE_DIRS})
-
-  #
-  # Remove "pthread" from Boost_LIBRARIES. Threading, if necessary, is
-  # already set up via configure_1_threads.cmake.
-  #
-  LIST(REMOVE_ITEM Boost_LIBRARIES "pthread")
-
-  DEAL_II_APPEND_LIBRARIES(${Boost_LIBRARIES})
-
-ENDMACRO()
+#
+# The user has to know the location of the boost headers as well:
+#
+SET(BOOST_ADD_TO_USER_INCLUDE_DIRS TRUE)
 
 
 MACRO(FEATURE_BOOST_CONFIGURE_BUNDLED)
index a5a40a255ae712df9fb9b7fadb50546c11be589b..81e71ceffa7bf9b83ce5166fd3c8abbe3c5288a7 100644 (file)
@@ -47,14 +47,10 @@ MACRO(FEATURE_HDF5_FIND_EXTERNAL var)
 ENDMACRO()
 
 
-MACRO(FEATURE_HDF5_CONFIGURE_EXTERNAL)
-  INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIRS})
-
-  # The user has to know the location of the HDF5 headers as well:
-  LIST(APPEND DEAL_II_USER_INCLUDE_DIRS ${HDF5_INCLUDE_DIRS})
-
-  DEAL_II_APPEND_LIBRARIES(${HDF5_LIBRARIES})
-ENDMACRO()
+#
+# The user has to know the location of the hdf5 headers as well:
+#
+SET(HDF5_ADD_TO_USER_INCLUDE_DIRS TRUE)
 
 
 CONFIGURE_FEATURE(HDF5)
index 0739098602b54007e33dd76d6d314d46cf8be00c..4022f98026856d9e501ce4a5827f408042cfec91 100644 (file)
 
 SET(FEATURE_MUMPS_DEPENDS DEAL_II_WITH_MPI DEAL_II_WITH_LAPACK)
 
-MACRO(FEATURE_MUMPS_CONFIGURE_EXTERNAL)
-  INCLUDE_DIRECTORIES(${MUMPS_INCLUDE_DIRS})
 
-  # The user has to know the location of the MUMPS headers as well:
-  LIST(APPEND DEAL_II_USER_INCLUDE_DIRS ${MUMPS_INCLUDE_DIRS})
+#
+# The user has to know the location of the MUMPS headers as well:
+#
+SET(MUMPS_ADD_TO_USER_INCLUDE_DIRS TRUE)
 
-  DEAL_II_APPEND_LIBRARIES(${MUMPS_LIBRARIES})
-ENDMACRO()
 
 CONFIGURE_FEATURE(MUMPS)
index de91ef6ea130537543702992bcbb69bf2c88aa20..4055c0f30cf494a5ca73e930b73fbec2fac8a737 100644 (file)
@@ -75,13 +75,10 @@ MACRO(FEATURE_P4EST_FIND_EXTERNAL var)
 ENDMACRO()
 
 
-MACRO(FEATURE_P4EST_CONFIGURE_EXTERNAL)
-  INCLUDE_DIRECTORIES(${P4EST_INCLUDE_DIRS})
-
-  # The user has to know the location of the P4EST headers as well:
-  LIST(APPEND DEAL_II_USER_INCLUDE_DIRS ${P4EST_INCLUDE_DIRS})
+#
+# The user has to know the location of the P4est headers as well:
+#
+SET(P4EST_ADD_TO_USER_INCLUDE_DIRS TRUE)
 
-  DEAL_II_APPEND_LIBRARIES(${P4EST_LIBRARIES})
-ENDMACRO()
 
 CONFIGURE_FEATURE(P4EST)
index bf5415a0ff1deaac7af641df706736bc08b89de0..fdb87649d01d34fe8a763dd928739d71e41df61c 100644 (file)
@@ -57,14 +57,11 @@ MACRO(FEATURE_SLEPC_FIND_EXTERNAL var)
   ENDIF()
 ENDMACRO()
 
-MACRO(FEATURE_SLEPC_CONFIGURE_EXTERNAL)
-  INCLUDE_DIRECTORIES(${SLEPC_INCLUDE_DIRS})
 
-  # The user has to know the location of the SLEPC headers as well:
-  LIST(APPEND DEAL_II_USER_INCLUDE_DIRS ${SLEPC_INCLUDE_DIRS})
-
-  DEAL_II_APPEND_LIBRARIES(${SLEPC_LIBRARIES})
-ENDMACRO()
+#
+# The user has to know the location of the SLEPC headers as well:
+#
+SET(SLEPC_ADD_TO_USER_INCLUDE_DIRS TRUE)
 
 
 MACRO(FEATURE_SLEPC_ERROR_MESSAGE)
index 0ffbf4fb10481bbfaadd20c92dcd677187e1583f..4a35b260fddb5de54815f708823302294f3b88a7 100644 (file)
@@ -134,22 +134,6 @@ MACRO(FEATURE_FIND_EXTERNAL _feature _var)
 ENDMACRO()
 
 
-#
-# Default macro for basic external setup:
-#
-MACRO(FEATURE_CONFIGURE_EXTERNAL _feature)
-  IF(DEFINED ${_feature}_INCLUDE_DIRS)
-    INCLUDE_DIRECTORIES(${${_feature}_INCLUDE_DIRS})
-  ENDIF()
-  IF(DEFINED ${_feature}_LIBRARIES)
-    DEAL_II_APPEND_LIBRARIES(${${_feature}_LIBRARIES})
-  ENDIF()
-  IF(DEFINED ${_feature}_LINKER_FLAGS)
-    ADD_FLAGS(DEAL_II_LINKER_FLAGS "${${_feature}_LINKER_FLAGS}")
-  ENDIF()
-ENDMACRO()
-
-
 ########################################################################
 #                                                                      #
 #                          CONFIGURE_FEATURE:                          #
@@ -249,7 +233,7 @@ MACRO(CONFIGURE_FEATURE _feature)
           IF(COMMAND FEATURE_${_feature}_CONFIGURE_EXTERNAL)
             RUN_COMMAND("FEATURE_${_feature}_CONFIGURE_EXTERNAL()")
           ELSE()
-            FEATURE_CONFIGURE_EXTERNAL(${_feature})
+            REGISTER_FEATURE(${_feature})
           ENDIF()
 
           MESSAGE(STATUS "DEAL_II_WITH_${_feature} successfully set up with external dependencies.")
diff --git a/deal.II/cmake/macros/macro_deal_ii_append_libraries.cmake b/deal.II/cmake/macros/macro_deal_ii_append_libraries.cmake
deleted file mode 100644 (file)
index de291d3..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-## ---------------------------------------------------------------------
-## $Id$
-##
-## Copyright (C) 2013 by the deal.II authors
-##
-## This file is part of the deal.II library.
-##
-## The deal.II library is free software; you can use it, redistribute
-## it, and/or modify it under the terms of the GNU Lesser General
-## Public License as published by the Free Software Foundation; either
-## version 2.1 of the License, or (at your option) any later version.
-## The full text of the license can be found in the file LICENSE at
-## the top level of the deal.II distribution.
-##
-## ---------------------------------------------------------------------
-
-#
-# A small macro to add libraries to
-#   DEAL_II_EXTERNAL_LIBRARIES
-#   DEAL_II_EXTERNAL_LIBRARIES_DEBUG
-#   DEAL_II_EXTERNAL_LIBRARIES_RELEASE
-# depending on the "optmized", "debug" or "general" keyword
-#
-# Usage:
-#   DEAL_II_APPEND_LIBRARIES(<list of libraries>)
-#
-
-MACRO(DEAL_II_APPEND_LIBRARIES)
-
-  SET(_toggle "general")
-  FOREACH(_tmp ${ARGN})
-    IF( "${_tmp}" STREQUAL "debug" OR
-        "${_tmp}" STREQUAL "optimized" OR
-        "${_tmp}" STREQUAL "general" )
-      SET(_toggle "${_tmp}")
-    ELSE()
-      IF("${_toggle}" STREQUAL "general")
-        LIST(APPEND DEAL_II_EXTERNAL_LIBRARIES ${_tmp})
-      ELSEIF("${_toggle}" STREQUAL "debug")
-        LIST(APPEND DEAL_II_EXTERNAL_LIBRARIES_DEBUG ${_tmp})
-      ELSEIF("${_toggle}" STREQUAL "optimized")
-        LIST(APPEND DEAL_II_EXTERNAL_LIBRARIES_RELEASE ${_tmp})
-      ENDIF()
-    ENDIF()
-  ENDFOREACH()
-
-ENDMACRO()
index 38c93daec99935b3a8f7bfe75fe261f4b70cd6bd..29867f93f8b4ce3c29632b3a7ef53a1747eb0a97 100644 (file)
@@ -152,7 +152,7 @@ ${_switch_targets}#
 #      $ make edit_cache     - to change (cached) configuration variables
 #                              and rerun the configure and generate phases of CMake
 #
-#      $ make strip_comments - strip the source files in this
+#      $ make strip_comments - to strip the source files in this
 #                              directory off the documentation comments
 #      $ make clean          - to remove the generated executable as well as
 #                              all intermediate compilation files
index 2b0ace6afb2585510c660654b8ce48aff604fc80..1e840dee4a22eb7533799d94607a1f20e5727b87 100644 (file)
@@ -74,12 +74,12 @@ MACRO(DEAL_II_PICKUP_TESTS)
           SET(_define_test FALSE)
         ENDIF()
       ELSE()
-        MESSAGE(WARNING "
+        MESSAGE(FATAL_ERROR "
 Invalid feature constraint \"${_match}\" in file
 \"${_comparison}\":
-The feature \"DEAL_II_${_feature}\" does not exist. Test dropped.\n"
+The feature \"DEAL_II_${_feature}\" does not exist.\n"
           )
-        SET(_define_test FALSE)
+        #SET(_define_test FALSE)
       ENDIF()
     ENDFOREACH()
 
diff --git a/deal.II/cmake/macros/macro_register_feature.cmake b/deal.II/cmake/macros/macro_register_feature.cmake
new file mode 100644 (file)
index 0000000..a4408fe
--- /dev/null
@@ -0,0 +1,99 @@
+## ---------------------------------------------------------------------
+## $Id$
+##
+## Copyright (C) 2013 by the deal.II authors
+##
+## This file is part of the deal.II library.
+##
+## The deal.II library is free software; you can use it, redistribute
+## it, and/or modify it under the terms of the GNU Lesser General
+## Public License as published by the Free Software Foundation; either
+## version 2.1 of the License, or (at your option) any later version.
+## The full text of the license can be found in the file LICENSE at
+## the top level of the deal.II distribution.
+##
+## ---------------------------------------------------------------------
+
+#
+# This macro is used for the feature configuration in deal.II
+#
+# Usage:
+#     REGISTER_FEATURE(feature)
+#
+# This macro will
+#
+#   - add ${feature}_INCLUDE_DIRS and ${feature}_INCLUDE_PATH
+#     to the list of (internal) include
+#     directories
+#   - and if ${feature}_ADD_TO_USER_INCLUDE_DIRS is defined also to
+#     DEAL_II_USER_INCLUDE_DIRS
+#
+#   - add ${feature}_LINKER_FLAGS and ${feature}_LINK_FLAGS to
+#     DEAL_II_LINKER_FLAGS
+#
+#   - add ${feature}_CXX_FLAGS and ${feature}_COMPILE_FLAGS to
+#     CMAKE_CXX_FLAGS
+#
+#   - add ${feature}_LIBRARIES to the list of deal.II libraries depending
+#     on general, optimized or debug keyword
+#
+
+
+MACRO(REGISTER_FEATURE _feature)
+  MESSAGE(STATUS "Register enabled external feature ${_feature}:")
+
+  # variables for include directories:
+  FOREACH(_var ${_feature}_INCLUDE_DIRS ${_feature}_INCLUDE_PATH)
+    IF(DEFINED ${_var})
+      MESSAGE(STATUS "  ${_var}")
+      INCLUDE_DIRECTORIES(${${_var}})
+      IF(${_feature}_ADD_TO_USER_INCLUDE_DIRS)
+        LIST(APPEND DEAL_II_USER_INCLUDE_DIRS ${${_var}})
+      ENDIF()
+    ENDIF()
+  ENDFOREACH()
+
+  # variables for linker flags:
+  FOREACH(_var ${_feature}_LINKER_FLAGS ${_feature}_LINK_FLAGS)
+    IF(DEFINED ${_var})
+      MESSAGE(STATUS "  ${_var}")
+      ADD_FLAGS(DEAL_II_LINKER_FLAGS "${${_var}}")
+    ENDIF()
+  ENDFOREACH()
+
+  # variables for compiler flags:
+  FOREACH(_var ${_feature}_CXX_FLAGS ${_feature}_COMPILE_FLAGS)
+    IF(DEFINED ${_var})
+      MESSAGE(STATUS "  ${_var}")
+      ADD_FLAGS(CMAKE_CXX_FLAGS "${${_var}}")
+    ENDIF()
+  ENDFOREACH()
+
+  IF(DEFINED ${_feature}_LIBRARIES)
+    MESSAGE(STATUS "  ${_feature}_LIBRARIES")
+    #
+    # Add ${_feature}_LIBRARIES to
+    #   DEAL_II_EXTERNAL_LIBRARIES
+    #   DEAL_II_EXTERNAL_LIBRARIES_DEBUG
+    #   DEAL_II_EXTERNAL_LIBRARIES_RELEASE
+    # depending on the "optmized", "debug" or "general" keyword
+    #
+    SET(_toggle "general")
+    FOREACH(_tmp ${${_feature}_LIBRARIES})
+      IF( "${_tmp}" STREQUAL "debug" OR
+          "${_tmp}" STREQUAL "optimized" OR
+          "${_tmp}" STREQUAL "general" )
+        SET(_toggle "${_tmp}")
+      ELSE()
+        IF("${_toggle}" STREQUAL "general")
+          LIST(APPEND DEAL_II_EXTERNAL_LIBRARIES ${_tmp})
+        ELSEIF("${_toggle}" STREQUAL "debug")
+          LIST(APPEND DEAL_II_EXTERNAL_LIBRARIES_DEBUG ${_tmp})
+        ELSEIF("${_toggle}" STREQUAL "optimized")
+          LIST(APPEND DEAL_II_EXTERNAL_LIBRARIES_RELEASE ${_tmp})
+        ENDIF()
+      ENDIF()
+    ENDFOREACH()
+  ENDIF()
+
+ENDMACRO()
index be470cec36a9a63ad17f3a259ba113b500f1000c..84b6a37d3f633edd17fd5dea7b8c486bf0520365 100644 (file)
@@ -114,6 +114,14 @@ IF(LAPACK_FOUND)
   ENDFOREACH()
   SWITCH_LIBRARY_PREFERENCE()
 
+  #
+  # Filter out spurious "FALSE" in the library lists:
+  #
+  IF(DEFINED BLAS_LIBRARIES)
+    LIST(REMOVE_ITEM BLAS_LIBRARIES "FALSE")
+  ENDIF()
+  LIST(REMOVE_ITEM LAPACK_LIBRARIES "FALSE")
+
   MARK_AS_ADVANCED(
     BLAS_DIR
     LAPACK_DIR
@@ -130,14 +138,10 @@ ELSE()
     )
 
   #
-  # If we couldn't find LAPACK, clean up the library variables:
+  # Clean up the library variables in case we couldn't find the libraries
+  # to avoid spurious inclusions of "-NOTFOUND" or "FALSE":
   #
-
-  IF("${BLAS_LIBRARIES}" STREQUAL "FALSE")
-    SET(BLAS_LIBRARIES "")
-  ENDIF()
-  IF("${LAPACK_LIBRARIES}" STREQUAL "FALSE")
-    SET(LAPACK_LIBRARIES "")
-  ENDIF()
+  SET(BLAS_LIBRARIES)
+  SET(LAPACK_LIBRARIES)
 
 ENDIF()
index fec6194dbe20d0eeb4ad90ffc42df65981259e5a..66417e3c33ba77b71d4529edd66959182d8cdba3 100644 (file)
@@ -49,7 +49,7 @@ FIND_LIBRARY(HDF5_HL_LIBRARY NAMES hdf5_hl
     lib${LIB_SUFFIX} lib64 lib
   )
 
-FIND_FILE(HDF5_PUBCONF H5pubconf.h
+FIND_FILE(HDF5_PUBCONF NAMES H5pubconf.h H5pubconf-64.h
   HINTS
     ${HDF5_INCLUDE_DIR}
     ${HDF5_DIR}
index 3bd673927c2675c848de0ae8f41a13ef4b1f2f68..1a4f3122c4f2759dc9fcc5826536e222b9ea6d5c 100644 (file)
@@ -29,6 +29,7 @@
 #     PETSC_VERSION_PATCH
 #     PETSC_WITH_MPIUNI
 #     PETSC_WITH_64BIT_INDICES
+#     PETSC_WITH_COMPLEX
 #
 
 INCLUDE(FindPackageHandleStandardArgs)
@@ -207,6 +208,17 @@ IF(PETSC_FOUND)
     SET(PETSC_WITH_64BIT_INDICES TRUE)
   ENDIF()
 
+  #
+  # Is petsc compiled with support for COMPLEX numbers?
+  #
+  FILE(STRINGS "${PETSC_PETSCCONF_H}" PETSC_COMPLEX_STRING
+    REGEX "#define.*PETSC_USE_COMPLEX 1")
+  IF("${PETSC_COMPLEX_STRING}" STREQUAL "")
+    SET(PETSC_WITH_COMPLEX FALSE)
+  ELSE()
+    SET(PETSC_WITH_COMPLEX TRUE)
+  ENDIF()
+
   FILE(STRINGS "${PETSC_PETSCVERSION_H}" PETSC_VERSION_MAJOR_STRING
     REGEX "#define.*PETSC_VERSION_MAJOR")
   STRING(REGEX REPLACE "^.*PETSC_VERSION_MAJOR.*([0-9]+).*" "\\1"
index 1b3849d7a466ade46aa6f3069b99e1bde7b0ca6f..cb01181acf7d5ef82182b528e80c33a31580b507 100644 (file)
@@ -124,10 +124,15 @@ _both(
 #                                ${CMAKE_CXX_COMPILER}
 "
   )
-_detailed(
-"#        CMAKE_GENERATOR:        ${CMAKE_GENERATOR}
-"
-  )
+
+IF(CMAKE_C_COMPILER_WORKS)
+  _detailed("#        CMAKE_C_COMPILER:       ${CMAKE_C_COMPILER}\n")
+ENDIF()
+IF(CMAKE_Fortran_COMPILER_WORKS)
+  _detailed("#        CMAKE_Fortran_COMPILER: ${CMAKE_Fortran_COMPILER}\n")
+ENDIF()
+_detailed("#        CMAKE_GENERATOR:        ${CMAKE_GENERATOR}\n")
+
 IF(CMAKE_CROSSCOMPILING)
   _both(
     "#\n#        CROSSCOMPILING!\n"
@@ -226,7 +231,7 @@ FOREACH(_var ${_features})
         IF( # MPI:
             _var2 MATCHES "^${_feature}_CXX_(COMPILER|COMPILE_FLAGS|LINK_FLAGS|LIBRARIES|INCLUDE_PATH)$" OR
             # Boost:
-            ( _feature MATCHES "BOOST" AND _var2 MATCHES "^Boost_(LIBRARIES|INCLUDE_DIRS)$" ) OR
+            ( _feature MATCHES "BOOST" AND _var2 MATCHES "^BOOST_(LIBRARIES|INCLUDE_DIRS)$" ) OR
             # TBB:
             ( _feature MATCHES "THREADS" AND _var2 MATCHES "^TBB_(LIBRARIES|INCLUDE_DIRS)$" ) OR
             # Generic:
index ef00b074b1e0133546a4ecb163d187c52cbd1c4d..10dfeb03602fb12f41b6fa9478fcb2ad347e50ff 100644 (file)
@@ -54,3 +54,13 @@ Copyright:
 ----------
 This program is distributed under the GNU GPL v2.0 copyright. Details can be found at:
 http://www.gnu.org/licenses/gpl-2.0.html
+
+This copyright is extended to the example mesh files distributed with this program, namely
+./mesh/2d/2d_test.*
+./mesh/2d/quad.*
+./mesh/3d/CC.*
+./mesh/3d/CC_cubit_new.*
+./mesh/3d/CC_cubit_old.*
+./mesh/3d/test_cube_1.*
+./mesh/3d/test_cube_pave_1.*
+./mesh/3d/test_cube_two_materials.*
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
index c2b56533b9080d06297ac8a0391dc7c76d9f0f5d..b3b1fd0c961846da98040b82dbae48390a9316da 100644 (file)
@@ -1,13 +1,9 @@
 This folder contains the html documentation of deal.II
 
-With the exception of the content under publications/* and reports/* the
-documentation is covered by the same license as the deal.II library itself,
-namely LGPL-2.1+.
+The documentation is generally covered by the same license as the deal.II
+library itself, namely LGPL-2.1+.
 
-Unclear license status:
+Exceptions:
 
-  external-libraries/p4est-setup.sh
-  doxygen/doxygen.sty
-  doxygen/options.dox.in
-  reports/*
+  external-libraries/p4est-setup.sh - coming from the p4est project, GPL-2+
 
diff --git a/deal.II/doc/doxygen/doxygen.sty b/deal.II/doc/doxygen/doxygen.sty
deleted file mode 100644 (file)
index 9480925..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{doxygen}
-\RequirePackage{calc}
-\RequirePackage{array}
-\pagestyle{fancyplain}
-\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}}
-\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
-\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
-\lhead[\fancyplain{}{\bfseries\thepage}]
-        {\fancyplain{}{\bfseries\rightmark}}
-\rhead[\fancyplain{}{\bfseries\leftmark}]
-        {\fancyplain{}{\bfseries\thepage}}
-\rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Wed Jan 11 21:30:49 2006 by doxygen\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Wed Jan 11 21:30:49 2006 by doxygen}}
-\cfoot{}
-\newenvironment{CompactList}
-{\begin{list}{}{
-  \setlength{\leftmargin}{0.5cm}
-  \setlength{\itemsep}{0pt}
-  \setlength{\parsep}{0pt}
-  \setlength{\topsep}{0pt}
-  \renewcommand{\makelabel}{}}}
-{\end{list}}
-\newenvironment{CompactItemize}
-{
-  \begin{itemize}
-  \setlength{\itemsep}{-3pt}
-  \setlength{\parsep}{0pt}
-  \setlength{\topsep}{0pt}
-  \setlength{\partopsep}{0pt}
-}
-{\end{itemize}}
-\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}
-\newlength{\tmplength}
-\newenvironment{TabularC}[1]
-{
-\setlength{\tmplength}
-     {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}
-      \par\begin{tabular*}{\linewidth}
-             {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}
-}
-{\end{tabular*}\par}
-\newcommand{\entrylabel}[1]{
-   {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\\}}}
-\newenvironment{Desc}
-{\begin{list}{}
-  {
-    \settowidth{\labelwidth}{40pt}
-    \setlength{\leftmargin}{\labelwidth}
-    \setlength{\parsep}{0pt}
-    \setlength{\itemsep}{-4pt}
-    \renewcommand{\makelabel}{\entrylabel}
-  }
-}
-{\end{list}}
-\newenvironment{Indent}
-  {\begin{list}{}{\setlength{\leftmargin}{0.5cm}}
-      \item[]\ignorespaces}
-  {\unskip\end{list}}
-\setlength{\parindent}{0cm}
-\setlength{\parskip}{0.2cm}
-\addtocounter{secnumdepth}{1}
-\sloppy
-\usepackage[T1]{fontenc}
index e30740fbdd28a7e320ece37ddb12b017d2ededd2..da03da80a6ecd7c57236faab443056c03904d099 100644 (file)
-# Doxyfile 1.3.6
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
+# This file contains project-specific configurations for the 
+# deal.II documentation.
 
 PROJECT_NAME           = "The deal.II library"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
 PROJECT_NUMBER         = "Reference documentation for deal.II version @DEAL_II_PACKAGE_VERSION@"
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
 OUTPUT_DIRECTORY       = .
 
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
-
+# The doxygen documentation says this about the following flag:
+#   If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+#   4096 sub-directories (in 2 levels) under the output directory of each output
+#   format and will distribute the generated files over these directories.
+#   Enabling this option can be useful when feeding doxygen a huge amount of
+#   source files, where putting all generated files in the same directory would
+#   otherwise cause performance problems for the file system.
+# We set the flag to NO since we occasionally need to reference individual
+# doxygen-generated files from other parts of the documentation and need
+# to have predictable file paths.
+#
+# The same is true for SHORT_NAMES, which compresses file names, and
+# CASE_SENSE_NAMES which allows file names to contain upper case letters.
 CREATE_SUBDIRS         = NO
+SHORT_NAMES            = NO
+CASE_SENSE_NAMES       = YES
 
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
-# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
-# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
-# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF       =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
 
 INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = YES
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
 STRIP_FROM_PATH        = @CMAKE_SOURCE_DIR@ @CMAKE_BINARY_DIR@
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like regular Qt-style comments
-# (thus requiring an explicit @brief command for a brief description.)
-
 JAVADOC_AUTOBRIEF      = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
 INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
 TAB_SIZE               = 8
 
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for Java.
-# For instance, namespaces will be presented as packages, qualified scopes
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
-# include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
+BUILTIN_STL_SUPPORT    = YES
 
-SUBGROUPING            = YES
 
 #---------------------------------------------------------------------------
 # Build related configuration options
 #---------------------------------------------------------------------------
 
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
 EXTRACT_ALL            = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
 EXTRACT_PRIVATE        = YES
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
 EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
 EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = YES
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = YES
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES       = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES     = NO
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
 SORT_MEMBER_DOCS       = NO
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
 SORT_BRIEF_DOCS        = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
 SORT_BY_SCOPE_NAME     = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
 GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
 GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       = YES
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
 SHOW_USED_FILES        = YES
 
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from the
-# version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER    =
-
 #---------------------------------------------------------------------------
 # configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
 
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
 QUIET                  = YES
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
 WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
 WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
 WARN_IF_DOC_ERROR      = YES
 
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
-
-WARN_NO_PARAMDOC       = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT            = "$file:$line: $text "
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE           =
-
 #---------------------------------------------------------------------------
 # configuration options related to the input files
 #---------------------------------------------------------------------------
 
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
 INPUT                  =
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
-
-FILE_PATTERNS          =
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE              = NO
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE                =
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
-# from the input.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
-
 EXCLUDE_PATTERNS       = *.templates.h
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
 EXAMPLE_PATH           = @CMAKE_BINARY_DIR@/doc/doxygen/tutorial \
                          @CMAKE_SOURCE_DIR@/examples/doxygen
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS       =
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
 EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command). This is overwritten in deal.dox
-
 IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be
-# ignored.
-
 INPUT_FILTER           = ${CMAKE_SOURCE_DIR}/doc/doxygen/scripts/filter
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis.  Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match.  The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
-
-FILTER_PATTERNS        =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
 FILTER_SOURCE_FILES    = YES
 
 #---------------------------------------------------------------------------
 # configuration options related to source browsing
 #---------------------------------------------------------------------------
 
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH
-# then you must also enable this option. If you don't then doxygen will produce
-# a warning and turn it on anyway
-
 SOURCE_BROWSER         = YES
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
 INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
 STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = YES
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.  Otherwise they will link to the documentstion.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
-
 USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
 VERBATIM_HEADERS       = NO
 
 #---------------------------------------------------------------------------
 # configuration options related to the alphabetical class index
 #---------------------------------------------------------------------------
 
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
 ALPHABETICAL_INDEX     = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
 COLS_IN_ALPHA_INDEX    = 3
 
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          =
-
 #---------------------------------------------------------------------------
 # configuration options related to the HTML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
 GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
 HTML_OUTPUT            = deal.II
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
 HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
-
 HTML_HEADER            = header.html
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
 HTML_FOOTER            = footer.html
 
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET        =
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
-CHM_FILE               =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
-DISABLE_INDEX          = NO
-
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW      = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
 #---------------------------------------------------------------------------
 # configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
+# don't generate latex output -- it's simply too big!
 GENERATE_LATEX         = NO
 
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = LaTeX/deal.II
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
-
+# but set a few flags for when processing formulas embedded
+# in the documentation.
 PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
 EXTRA_PACKAGES         = amsmath amsfonts
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = NO
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
 LATEX_BATCHMODE        = YES
 
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
-LATEX_HIDE_INDICES     = NO
-
 #---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Other output formats
 #---------------------------------------------------------------------------
 
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
 GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
 GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
 GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA             =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD                =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
 GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
 GENERATE_PERLMOD       = NO
 
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader.  This is useful
-# if you want to understand what is going on.  On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX =
-
 #---------------------------------------------------------------------------
 # Configuration options related to the preprocessor
 #---------------------------------------------------------------------------
 
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
 ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
 MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
 EXPAND_ONLY_PREDEF     = YES
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
 SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
 INCLUDE_PATH           = @CMAKE_SOURCE_DIR@/include/deal.II
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
 INCLUDE_FILE_PATTERNS  =
 
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
-
-# [deal.II] Set MT flags so that the corresponding documentation will always
-# be visible, irrespective of whether MT is actually switched on or not. Do
-# the same for a bunch of other external packages as well. Also, define a
-# variable DOXYGEN in order to mask out inline functions
-
+# set a few variables that help us generate documentation for
+# things like the PETSc and Trilinos wrappers, even if they were
+# not configured
 PREDEFINED             = DOXYGEN=1 \
                          DEBUG=1 \
                          DEAL_II_WITH_PETSC=1 \
@@ -1004,227 +148,52 @@ PREDEFINED             = DOXYGEN=1 \
                         DEAL_II_WITH_P4EST=1 \
                         DEAL_II_WITH_MPI=1
 
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
+# do not expand exception declarations
 EXPAND_AS_DEFINED      = DeclException0 \
                          DeclException1 \
                          DeclException2 \
                          DeclException3 \
                          DeclException4 \
                          DeclException5
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
-
 SKIP_FUNCTION_MACROS   = YES
 
 #---------------------------------------------------------------------------
 # Configuration::additions related to external references
 #---------------------------------------------------------------------------
 
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-#   TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-#   TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
 GENERATE_TAGFILE       = deal.tag
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
 ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
 EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
 PERL_PATH              = /usr/bin/perl
 
 #---------------------------------------------------------------------------
 # Configuration options related to the dot tool
 #---------------------------------------------------------------------------
 
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
-# powerful graphs.
-
 CLASS_DIAGRAMS         = YES
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
 HIDE_UNDOC_RELATIONS   = NO
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
 HAVE_DOT               = YES
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
 CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
 COLLABORATION_GRAPH    = NO
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
-
 GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
 UML_LOOK               = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
 TEMPLATE_RELATIONS     = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
 INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
 INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-
 CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will
-# generate a caller dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-
 CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
-
 GRAPHICAL_HIERARCHY    = NO
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
-
 DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
 DOT_IMAGE_FORMAT       = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS           =
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-
-MAX_DOT_GRAPH_DEPTH    = 2
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, which results in a white background.
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-
+MAX_DOT_GRAPH_DEPTH    = 3
 DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
 GENERATE_LEGEND        = YES
 
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
 DOT_CLEANUP            = YES
 
 #---------------------------------------------------------------------------
 # Configuration::additions related to the search engine
 #---------------------------------------------------------------------------
 
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
 SEARCHENGINE           = YES
 SERVER_BASED_SEARCH    = NO
index b4eab15de51cf350b93c7e2f52f39adab37d08c9..b5997b9a333ebc095760e113f6fb0f6380d3c895 100644 (file)
@@ -94,6 +94,14 @@ inconvenience this causes.
 
 
 <ol>
+  <li> New: introduced "make test" that runs a minimal set of tests. We
+  encourage every user to run this, especially if they run in to problems.
+  The tests are automatically picked depending on the configuration and
+  will be shipped with every release.
+  <br>
+  (Timo Heister, Matthias Maier, 2013/11/08)
+  </li>
+
   <li> Changed: It is now possible to restore a parallel Triangulation
   (and solutions) with a different number of processors it was saved with
   using Triangulation::save() and Triangulation::load().
@@ -203,6 +211,19 @@ inconvenience this causes.
 <h3>Specific improvements</h3>
 
 <ol>
+  <li> Fixed: The CellData class now has a default constructor that
+  sets the material and boundary indicators to zero. This fixes certain
+  internal errors with the Intel ICC compiler.
+  <br>
+  (Wolfgang Bangerth, 2013/11/13)
+  </li>
+
+  <li> New: There is now a framework for coloring graphs, with functions
+  in namespace GraphColoring.
+  <br>
+  (Bruno Turcksin, Martin Kronbichler, 2013/11/06)
+  </li>
+
   <li>
   Fixed: the DerivativeApproximation class was not working correctly when
   used with parallel vectors.
index 143f96af29d77585cfb97adaa91e1ac628ec1798..b2eabc101b116f9ce12f96b9cb45df2351dce4aa 100644 (file)
     </p>
 
     <dl>
+      <dt>
+          <strong>2013/11/01: step-42 solves an elasto-plastic contact problem </strong>
+      </dt>
+      <dd>
+          step-42, written by J&ouml;rg Frohne, Timo Heister and Wolfgang
+          Bangerth, shows how to solve an elasto-plastic contact problem.
+          The program is an extension of step-41 to a much more complex
+          equation (nonlinear elasto-plasticity) and also demonstrates
+          how to compute solutions for such problems in parallel.
+      </dd>
+
       <dt>
           <strong>2013/10/01: step-51 implements an HDG method </strong>
       </dt>
index 2709045d840adda99d36361ab796911843824238..571859682dfc11142eb887abb8ae68c3cf5117c1 100644 (file)
   cd build
   cmake -DCMAKE_INSTALL_PREFIX=/path/to/install/dir ../deal.II
   make install
+  make test
 </pre>
 
 <p>
-  These steps compile, link and install the deal.II library. The
-  whole process should take between a few minutes and an hour, depending
-  on your machine.
+  These steps compile, link, install the deal.II library, and run a few
+  consistency checks. The whole process should take between a few minutes
+  and an hour, depending on your machine.
 </p>
 
     <p>
       paths.</b>
       However, this behavior can be changed using command line switches to
       the initial call to <code>cmake</code>. A detailed description
-      can be found here: <a href="development/cmake.html">Detailed build system description</a>.
+      can be found here: <a href="users/cmake.html">Detailed build system description</a>.
     </p>
 
     <p>
           for <acronym>deal.II</acronym> being able to use them).
           For details on how to set up <acronym>deal.II</acronym> with a
           non standard BLAS/LAPACK implementation, see the
-         <a href="development/cmake.html#advanced">advanced
+         <a href="users/cmake.html#advanced">advanced
             setup</a> section in the CMake ReadME.
        </p>
       </dd>
       The <acronym>deal.II</acronym> <code>cmake</code> system allows far
       greater control over what exactly is configured or built than just the
       outline above. If you want to learn more about this, take a look
-      <a href="development/cmake.html">here</a>.
+      <a href="users/cmake.html">here</a>. You might also be interested in
+      <a href="users/cmakelists.html">CMake for user projects</a> or 
+      <a href="developers/cmake-internals.html">build system internals</a>.
     </p>
 
 
diff --git a/deal.II/doc/reports/assemble/assemble.pdf b/deal.II/doc/reports/assemble/assemble.pdf
deleted file mode 100644 (file)
index 073d8af..0000000
Binary files a/deal.II/doc/reports/assemble/assemble.pdf and /dev/null differ
diff --git a/deal.II/doc/reports/assemble/assemble.ps b/deal.II/doc/reports/assemble/assemble.ps
deleted file mode 100644 (file)
index a839608..0000000
+++ /dev/null
@@ -1,4785 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.86e Copyright 2001 Radical Eye Software
-%%Title: assemble.dvi
-%%Pages: 13
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 596 842
-%%DocumentFonts: CMR17 CMTT12 CMR12 CMBX12 CMR10 CMTT10 CMTI10 CMMI10
-%%+ CMSY10 CMR7 CMMI7 CMEX10 CMSY7 MSBM10 MSBM7 CMMI5 CMBX10
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips assemble -o assemble.ps
-%DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2002.06.14:1228
-%%BeginProcSet: texc.pro
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
-1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
-0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
-sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
-forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
-exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub
-dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
-ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict
-end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{
-dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1
-roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def
-dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}
-if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}
-def end
-
-%%EndProcSet
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 69 /E put
-dup 71 /G put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-/UniqueXX 5000768 def
-currentdict end
-currentfile eexec
-8053514d28ec28da1630165fab262882d3fca78881823c5537fe6c3dda8ee5b8
-97e17cb027f5c73fdbb56b0a7c25fc3512b55fe8f3acfbffcc7f4a382d8299cc
-8fd37d3cea49dabdca92847af0560b404ef71134b0f3d99934fc9d0b4e602011
-b9cfb856c23f958f3c5a2fbe0ef8587d1f5774879c324e51fcb22888b74f2415
-50d7401eb990d4f3a7af635198422283cac1b6cd446ddbcbd915db9bff88844e
-784c6bf7389803d9450b0c21756a017306462c563d51ece66fcc9c831843ecae
-1fefc1a232e2724f7baee428ae03aadb95c3035345c15e9922fe49e1f2cfc980
-237316572dbc57064edac9b0db8913a5e2d45e97e19a91435ccf8adfc835b585
-48e74b291446d689c7f2f8c4325e8356e974ae30c3e2977477baeaa33d141fb7
-80f59351e84bfc88c87b3a4a1d25e168b9d134554f6a581378c7d2d6eca8ac09
-045cc3a5e0ed86f147133f094029e3483bebc81cfde69942cf645ea20d0a2b64
-5140ccc2f9cb4a3d969f4b0a79cd3329b440dfcff5285494406f3dd08d804c86
-df191e57232f6f1f83df6430f214e03fa5412b1e13d83c60c52a698bc9a38159
-19a64162af7b83a9468fae9507c6cb55ea80df8c696dfbc3296c663902d77e89
-a181502627281181ac8624f65be9de5fb32f056cc7dd7cbc7366a91717b5892a
-34ef6b441871c6993da3a81afc9bf70ff3842a21a29c0e49da1ccba37dd6b920
-2702db510b8b1109acf4c27ee8d676bdbd16abe189f34a9b61532eb777457698
-cee0561838eaab2d3939c5093afbb215bac433d1918c739b62566906bb2187f3
-378521fb52e70c18886e1aa15f53a1f8a169528cf2ddd54c203613ff88e619f2
-6c9c50c2c3b8b8c868a88afab1dc8472e7b6f3f992a161723a3c0904865a7c42
-3281601eee91f35222c4a71f343739f102eb43145a47e4fac3bd666e4c114a90
-5950618ecb1bdc29f90f6ebed1d8325fe6b52e14a8870e9b4bb088e585c71b91
-493c12845a101937e3473ac5e9ae24f7c358f06d590d7618e1a1d5834d87621f
-e3f5432b655eebd4ca61a7b00dde0aa740796ce88a43d1c6952f8d2ca63d30b6
-dcbadbb0dadf13150a442714675dbe51ff838f2e47ebe8cd44f1eac6ae5b6ceb
-0b07af03f5d3896ff935a198aa635e337e367e1e128d15e31afe3ffca8245e41
-a3e17011340e49d52fa1e322b435b4f7f2f49ae01f6a319f68d3d786c24be810
-1e1c975a8ba8debd89c6d93db8646b0224c805409e897061b37e81edcb4eff88
-47640c51c28e66d1dfb39ea37525a7f925eab9bcaaa741f90bf207c73cb892e0
-45163ca4d9d25aacbd790e0bcda3746991c5c70ae00e1db0091854884e0fcca1
-a38cdbbe0589e466520f7a132741039b0fd0d2e7aeb2aa458405f0374eb2ad2f
-2c8cf8bc7583d1c7e127e9a50057dafeec9c515005478309a953ea6c972cd208
-1cc5364d221e1b4fecc486b2d79352e839bf4e6cdc7c62065d4aa0af68c919e7
-34e32b6232cf543e829a8c6b2ce9adede5898d91595e3a2efac8c464edf6bec7
-ee9f226ec716485d8171f69e74f0fc08abcc77df5f54a407fb69c928822a5ddd
-f60e7440a2520aa45245586aae9c67b82497decb370372e4ec1738b258bc358b
-4e5953940e16f418b8d27b59565986e3a76b485c2576f23cae22e71c30ec545b
-4f97baa009673d5de69f47fc1bf5450b4499c7c8e8021ab9c364a026799526e4
-92a75ff93fe940ae263a21cdc06af1085c4a18732323457c93e3aa7cf9812fd8
-c603c8e4bf534fc01e66a51a82c2b2be8eb855c73f3e7d578cd60ea458fe37ef
-b91339522a40d7b63d2e709e13e2458650ad20d5730187aef2467372050e92e5
-8d84186ac0c0bdb21f0728fcef3fb862f9a8965e6a65ccfbfe7e51fb157df270
-ae80f251a7a8dace39038b4a2fcfec671ce0ad92e4d5c90702c427fe23278ff6
-6115fa88fa4f338ec647873b483872e75ec56f1ee8e00d5a37e1b1a083f51913
-2f16c6cfb4cd098781a886eb5e8f93ea6c232aef4f64dc85ed090abfb289d654
-52c5b7daf6632fef944bd1db8c902403f769a0b369daa93d124d22c7831e3d64
-890f259bbe326e3a2ab1bd7a4b21f66026be8e37a1edc649f871a3fa75c55079
-d21142b35ee29cad28a15db16c26003e9b67337ee52739e54759aa37ffc908e0
-6cff5d0e05840094ec6b28a565c0b8485b13ebc3da97e5b5182e2b38f3f4027b
-f472d2dd4559849b256b85e535bb63e3bcd8734558a0dcd0d91b43d01baa1d76
-4c85a4eee967be0f383fc8d67c00d15a36f2c9368f5610ccf7f4f181e83a01b6
-24b04f74faa7748fb7f3bece2baab6c6225ee2f8f9f804a40ed0d8714e552fb4
-2e3441ddf48511ce387605ce62da66ed4eb7c87dc1d594bad8006ee519252550
-52f4a6d6d21e417b25c3fa4b624386e40acda51c16a3bd6f7e208d3788e3688f
-fe59e08965760a23bbb8f7d682538ee453d828a044245de5a6f1e28aa5053a3c
-4c0be8ba96974953b095004f9876b56fe9868d7dc1bc623c0c919b4ef8e8a2d4
-c0ecfeaaef0dcf37dfc34319f9c0c9459e7db76991a6683fc5f66d88d54629ff
-a833257926b752fdc3ed6e17c948c167ff7316075d277d16c72f17b9434e6844
-de9c647164245036dffc5dae9163d0e4b58237302332c6d2ca4a59ce6921033d
-5919eb617a490920d528c456a34e671df28c79cdf66ac4f8dd69da0b5163c3ba
-0b275dc0a54afba12164c6b9b6508193002cfa8041281220328c15acfdb64d26
-926adbffa5164efb714af5a14abfa7ecbe079dd5481bbaa9618b5bf625381372
-0cca156f71c2ce7e0ed9d56abe3ac04085e35383f90a8fbf7afcd2d5dfd6f52c
-186b172cf814d6f65663837be4ca4cdc418fa669ac6bf91867d2f46d66ca50e5
-04263f0e6d85d55269faebc393f63b37eb20f45dd95967fae7103322419eef5b
-59024c670b6b8c644fe8fd82628cf30d0af16948231abade88eae85e633bef10
-e72b3a6b627efad5d8ea7cdf55770a4c8af859c8e47481f8c64cd4bea275d4ec
-5766bc16002b118c5a98e03cafc77b5e37050b63e7bc8e4ef6f69f66cf22adec
-15b74db7b9f1dde25bd4b0384a58d5f51505c1e6ea5de3a2ec914f94099faf0e
-8ca7f90ee51e83978143711ffdf55cbeb05fe978f5865bed1fa0f24377c4cc07
-ece35a99a9fb7e62c19a3608d13ed7785ccc27961d8dd7c6ae26c8d6110a0618
-b13f4c570452a12fbac547cfbe5b2dc695b4fddc16704ac6fda3ff94e72d8957
-d2a48cbfed11839315bc45367db66fb83fc1898b9692a78cdfd5d1765a100013
-0485298a5c43d51b658c083bb97940c687ff6985804453001dc7a2bf28181e38
-45c71ea8420f6b48dcd3f3b332f8ac78bbf5d5d7eaf23f3cac919c05a6088be4
-66e7e770173f4df1a234e42cdf2c3f52968a203994092a00553d8b10be4b848b
-d99fe5bfebcb5c2c856c55e2e1aeddfe8e1c496a26f8f7d8de30ddf54103cc3b
-eaedcc16b3be2fb0bc52cda49430393855c38f7d5189f55895cf4b6c25c587d2
-37ee654c4bf55003a855afe57751cc74d3036771bfe1dd01b564767d94682720
-88d5b6fc1384dc1c00a8c6d827850a038475aefb57060707d1a3fadcff525138
-ec3420dcf11b4623fde6f2e90ab4206ee65ba26d85b936e2dac1d8f0985820de
-a1c5fcfa5dcd609e75e31bb0c3cf87f0eb7cdbc3d7f3067faea95137a8bcf65d
-41088f25f1fe4cee81f54bea54be1ca1d5cf238d36090b16e3cb02292af9127e
-e1377ccd08df3e349b35d271a4dfcf9a2495bbc1d56771949bf8083d6a81d77a
-90b8d8c8e4abafcf07ac8bef65f6fe4eea7ee09b3f6419c958e8f81e6b3d82c6
-1aa8e64e543a85b8ef1a61751fc5df599dbe75ea5669f843bdd048e839a4951c
-7dafe01ad3945caf0cc111e8fc95779f3dcd42ac01714b936e57f6d3ce30c78b
-ecbd9ab9edd7bf00ca85223830531a176bef009aeb9a522fd1b2228e547de4df
-36d3707e7b54311007332ee829f808fbb2cec5d4f165013bbbec3a615e057a15
-65cdc8992dbb4cdc7ffb9f930e4ea96ca2597ab45244c5ffbe46ccb43891ae28
-053bcf8c45d7b0e0f1743418f8afcbaf19415e35a4306879ca2a4ed99baa57de
-c9f3d6aaebcfa8999c25d7d89e5061fa40f97ce6fa3f8a8ad87e8e6c899ff376
-b251ba11747461f2e1a75e5e7ee40204ed802f225095f0edf3c8d4723062d7ab
-0fd3d18d30b18cca85ebe3765699a2e5bcaaf350506c7360e7914a75f36cd13a
-f8dd68a72030bc373fb58849d9b158c7b1508ed980e7817737e10f2fcc224d72
-2f16192a18a7d21f1922b6ff94b50261ceab28674f648efd90879a8d557bd734
-44f8d8e3310fb55099cdae0fb4f03090323408c4d319153a2bc36218e45b5555
-9be8603e721f99b41d400801b15d5301ea5eb2cd42752464bf25523aa6163aeb
-9764ddea342a78fd1d43c33f50acf8431d28016b943f6b5345a76f7de6cf273d
-aef8648f48e5fdac3f573149e7e705cf2c82996bb8aef7cb699c79304084e8b7
-c9e437cf9cf8e24c78eb6b1c6b528445e42f7cc553746105e98e19aa699f92c6
-def1446a7008a0298c0cc9c9ed9601a62177202dcbf60357549c824d9697e9a5
-a0f400f4ce741827bfd897ce4cce024a18eccae6783106a710d8c76d2c9da409
-810f437c0b395024f0155025ab4d82ec8f2024b136da891a625ed5a872e1b81e
-551598a9802ca89a85846620e215485e9ca1adcd94fe5ac86cd4d49f09c747e2
-295dfa2af72fd1f6130d277a212c05e91eeef5ff188f58cd4e99a838770bae00
-d12de9609410f847b491749b79aeed9f024acb6744eb560899de7f957e50dbc8
-4cd61b5a60eaf47717a48855f304a283c972213de3fa9812a03b6fdb829a3e0d
-cef701b4da8dcc4db91b2c1e3a11476c36f4426019d2d9aad2ea9a8e39ad5789
-4ff08f83eeef9a643e212eaad81cb81b2add7a8def7810ba7e2682d45c0f175f
-a2e16a127190227faa28f90efc2a41ec6dcb6399058ef56bad97e2b7d07199b2
-d00bba6af6024a4ba8acc7468d43b17dec3d7dec0cb79753a1a5a4839427c366
-f27b7346035f7349fd205392ad144abcbf23fabf068d12abad12ddbfcfb9de19
-5c72c0e51e0640ab8ba1f54560bb30d52961488dbc88ec9c67f2d577dca45d77
-37e9b074245b69b13b09cb447708d6e9bcf4fe1d30be0b6dbfb15e9fdd3fa182
-f90dad78e63bd0a21765f89eca3a5b6c9908a3e6a4c73f8b6d9a6b9992d6cae0
-9235e3ff65d3daebfa21917dd5da7961052ad5bf1b447ddbe5c40ef332e1926d
-f4a2e7e03ad2053f80db3cc5f9c25c7285c8154372bc6620b0b6c888ca046a53
-e64aa3a1f0add6c0bd28e992a3ac3a2229f86c089021ac84ab80fc0af7ff5ce7
-5941c3c15a706de1e6ecfe7acb81935d563db38b05736ba75b9e8489d44a3f54
-512173b661e92c2debab249d649013d83747fc625c54fb4fcb40c344fb9b9bc7
-981b3cbe955651908777338b0557369c5c86f588665e65a630f94fe5023014b8
-258aa8d65d3d8fb75b33465aebd208c7072b6531dcb96143c2ff45ffc60cfa4b
-5028ef487e42e5ad39557511a5838ea19090f019020ae01830d44c4e71d932d3
-03396252a730258436f90638142bd4c02137a2d5b84ee9e5a990fb626892b86e
-bd89c2acedafbe38a95d591206e387b5724c37816db308970787181be6e1596f
-83fd4aed608329db92480992c04d8e88946b9acefe54aa6350ee04de9be9154a
-6fa03606301fc922ee58129af63ead00d64c78576bf287eab9090b3b9baeaad4
-0138c4f09e50949fc667bb25dff16e27aeb0b9ba94963a02f645b16c624629c5
-bd0e31a2f65c3e7b35b6d59b2455765b8f332e351e8c4391fe9789a0f9b7a894
-3093d79daa0593e0fda554006799cc6399a14ec337a5ae6a3294c946193fdab7
-da21888dd9ddf8940ab450e851da5a0a78204a6ec4b4c8f760c39061c6dad9c6
-e59faa3d9b088f10564ff0dd78e091516b4c64cb6f7b9a7a6b375c6fc10e2086
-dbf84db0666380f71a426f9e620ee5f33be163a0326a02f320d28e8f99a87b06
-9b518894bb0aa7a32c79503ba0424237360dd1471cf7db50dcce112bcf73c69d
-a7097caad602f3ba9f95523737dae070166f6192f9fa37b4ee73531a0d869ce1
-ab10ca58439d4a4e76f7e29785081540777aa340f6e8a34e468e9ef42becd452
-cb48e180f92e5dca7bbb4182925e3f3d126f573e79de1c4a2b592a31d056314e
-7710aa2f3256682e03860d4e5881eb38d48d25770e4c2c76261a2844ff7ef14e
-68606e47705deced3700ef26544bc82faf609a85045f7d648c678b3d474af407
-93b28709a5403a3acbf996d49899b74412bd6ec9a5fe612ed549bccfb653286d
-4fb4cb9b728a16cf5b59a40419b262861de214487b144c654689c7f8ff62c86d
-272bf1793f0f6a0fae4760a2ba94c56a5e1fd56a868f7817c398c732571252bb
-068d2e6efbd15074befb6f0e2fba8ef814d05d151f02a00f89b824e20af72206
-418c0aaeaa51424f2c13e5b413733dc3c09329412107a882565d13fc889ceb05
-6928999bcc15f883610dbed7a711a19d2836beef96eaea83f6509d93c1bbe548
-f43e3b8fddf5a50971dbcaf6b0945d1b328a2b5a732e515239f81cca72adca7e
-fcd8f84924b8573525212bd891ae028b9b48a15dbaee8d869e36439dab294d7b
-9e504e4108599d3de92c1c64b504cf73e72e2cc1a3d034cca3836cba061fbd25
-9cab1a5ea506a99b8bd530649a3705831d53a36eb780bab97a6a2117943d1a0f
-66b8e5a5907c1b78e3614f894e7b7017e03b2134970414c7dc35b40b6ddd23b5
-47ef28adfb00fa09e6fc301cd23f32264c9c00593aa164931561d561bc97e269
-b981bf6c0766c8e86da1614eff50f4a95378120206c51e59dff6c01b06c46718
-1e8d207f8e171f5f04a8085a8c49cf7407502c07868194cadd1daace2774e163
-059be3b06b0c57acfbad62805e272c52c9ab882864df59482ca0660b9c2a484c
-3d2e702a2a0a7a3ddc74260084ec1b33c750fea409a96874e66d32625377f7a6
-c7c96bb2570c5a3b2486c5716551faf52434c9189efb3a472be391f34511cdb8
-e57e641d97802decade70552a9a5
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMBX12
-%!PS-AdobeFont-1.1: CMBX12 1.0
-%%CreationDate: 1991 Aug 20 16:34:54
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 12 /fi put
-dup 45 /hyphen put
-dup 46 /period put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 58 /colon put
-dup 65 /A put
-dup 67 /C put
-dup 73 /I put
-dup 76 /L put
-dup 83 /S put
-dup 84 /T put
-dup 86 /V put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 121 /y put
-readonly def
-/FontBBox{-53 -251 1139 750}readonly def
-/UniqueXX 5000769 def
-currentdict end
-currentfile eexec
-9b9c1569015f2c1d2bf560f4c0d52257bacdd6500abda5ed9835f6a016cfc8f0
-0b6c052ed76a87856b50f4d80dfaeb508c97f8281f3f88b17e4d3b90c0f65ec3
-79791aacdc162a66cbbc5be2f53aad8de72dd113b55a022fbfee658cb95f5bb3
-2ba0357b5e050fddf264a07470bef1c52119b6fbd5c77ebed964ac5a2bbec9d8
-b3e48ae5bb003a63d545774b922b9d5ff6b0066ece43645a131879b032137d6d
-823385fe55f3402d557fd3b4486be79011d1f5bfae5c1f476ee6f05eb1d2caeb
-269958b194521197b312fcced4867f3c8fbd030bd715d8ffda1dcd454b174e7a
-1a97b59fe770e67702519d9d9b23d61ac08424d555242a8ca08c49aef300945d
-99b999a79ce74804ae6bfde623f4463371442f6523a5f6ce19c839a708c02513
-2e22c696c8ccade45680e5197189d0f98e7f0d5f955e353970b392cf530a68cc
-56b0035ddfbf206c3074beeb0739dcbca272a6e629fb7aea2c5ba7bae50c7b4c
-a595df78200c352997ec3ee564df229fbb5473f5e8ccb1cc0153e9a7e299a8ea
-a29b69d1b622b1f0cffc58291248759607d91150cb0651120970dc9f743bebef
-44f6ae92facec57658999c8bf01f60611560043962c0695e1bb87d090e0fdaab
-659d6557208a660be9aeef8ae55f71b8bc76394d792967e41bd8023b6e7f8c3d
-9987d5e54c53bf2bbb32855b946473b44833bd78873df8e4c7e668ffff25aabb
-8da4148f744b9d0524d6cb8281247b3052cc5d66f3f1bcf8a56a3fb446ea587b
-d8be30257652cee035628aeddfd8283b5ad21b8b1480ad24d898970ac8a1e33e
-543ce4e3c48f9ee621c5ce3e8ae930f890011b630866c988606068d9e92396eb
-f51bb3db204505fc3d09d4701ac703a14d92bbfe27bd7411b363a88e33a8e9a8
-025ac31f21e73dc52b333b918d0b1270c54873a490222d041a66e0192612be6d
-2c88958a8f70c10390146ee5091df020ab97675e8e6b9e705fbe5d4a561453fc
-99aacd038d0c9d92ce58c764a1a6cd497ec3cef52975ae84cc7e1d0401a7fcd4
-d5e847133c58d736e373745cbfa06237a1ee4ff0706bcc02e316bfe85ec2f0b4
-2dc3c3bb232c4045115c86f37c3bf3aa17b765020265aa22553707335d7fcd8d
-9f619e844ae579bedcd8326b4e97b5ec744e172232ba7d77527d51619b629035
-8eeead95e65ecd25b250137cfbec4a4ab9ada531afc7675329140b035b5b95ef
-70e59fa7265b97d059802c03f27a892dbc7bba4029e2c27bde2b345629887d0f
-503daa813e2f4aa88286ca728443687bb970205e7a1bc8a1e926fbcc08bb53c9
-78dcd1347cbe7db6901de8961f3ae79fba9727894f0bd32eb07af25fbf0ed58a
-e411298f0038ebb9ce560f435ad1c4ac5a042bc7edc88360aa45b3fabc9c8715
-fda2833f3ce873627eb594816ea234b181df3e546cfe9357438b3769c9eaa461
-71a027ed4572e8a28931c3adfd19fb998d53cfb0c45e2144d17c94f0a89f2b2c
-3202e3aefc9c426deb8d01ff3f6c966870cbfc3946c6b2357447f6e2f1f698c2
-17c08485ba86f6ebf5be64a6d6176f777969da23715886a968bf837873ccc07e
-d48f716fc3320f9d97953c57120c222ae04fc5013a1e4dd685488fc7529f9555
-ddf4252c0f8641c504377286056e0970fb62e4662c43f643bb37f0295d8c36c1
-825cf8401224de7d95140c74ca72f9db638d61b82e5902a866f5bd9f9c1bccd8
-74e3ce55d29a5292b27bea670b6f062ea2fd3bc20343a531487570f70d59a173
-16967ca2c7a8e3e2d2b9b0be7b21a0127e3d9505703dff0406a5a3e1cccf8aa6
-d3e80ee67541e209a7fbd65abd7c6176c43d052585fbe2dfd15ecb272b91930e
-3ee3b3f2ee81a622318d2f686cac24627a53fbd56560d3ab78f375011c74f8ca
-d005cbf3eaecf21dd7bdbef92e825d30c975ec4f57af46941d2926a409d958aa
-bda09449e7f429db97a94d5702c1eb5c3f137dd843bd79225def89b5fdfaf347
-58227e12d909271428ea127048398598b6f0d90094931762a2f8c6f01aeffca8
-edfb0c8da62297a9f42c89c1a5b44ade846c5ea51319092cb21e09ad0fe37cc6
-216fa48547ebfbe7605cccaee295fb75e667ef38c098c9204d325b0f8b285863
-c406dd3cd3813a7b4c5958ff93d818044efd19bcf9fdd8b6be6245da8b9fbea1
-0043b3829086a220507bc437a57291eabd7d99654a27515d93ce5c19d2d02c05
-a116b88df31a29d1d9544aceb108941a3ed9b36a47da33225bf272072242cec2
-d53eeb44676ed03ffa4dddd61b1b222667c2bac3003360c11ee91f3edf2c0144
-4b811574de4ee463eea325f2d4640a1e638564ecf613fe627bedd8894e59fe11
-68b3189365025968046f434fab202d9ae6e0a54f2df3a23bb122e18ca1468883
-627de0bc7e77d53ea0bd991cbf022e9638957e84bb909038e72af12255edc69b
-76b9b76ac0a93b05a6ec27ca442ba2cb8a0da8910c281eaffdde5c24d0522438
-aa33889b312e45ec398f7ead409d5c562e68014de7c2d4d75f9c181f6dbaf6d5
-455b99ec218b40b078f0c5aee0bae2205ce69a868c107caf7fdca8221ca29cf1
-7d730f4aa13e605890552dee1e092b6e2b7c060c32c84c706b4884ed3b445729
-e0d425893a63a09107893a9dae4461cfa103a4a45322377f253de10109f0b33d
-176cf13bec9c174ed826744176de84f9a04d505b6502757f7de6c46fc2c649ab
-c6ce33f104ae05c87b9ea81fbd1d17a40a3c86743a0cb124a2441f37471831f0
-820d64a2d230f083b36d3884b831f8b793db77bd65cdd2e45ba3b6dda206dfa0
-2582557674544be0d59da90d2092153e5913b74885fcbf58ef808509a1533030
-3b1ac8c65edea8e64e9144acdc8409beeb3712d0eb972b9169e65a2de53dea89
-3e69ac66c264defab6d9a4470421ead6b0f27df74686ad9d9c0034d62c7931aa
-451c4a82c4fe6bfbd2cb79da008fcc4f6970ab87e1a5702040c0bf5a770255cc
-11cc019079e71b593109cdd2594ed2843bcf4872ed810536109cc6c939fd4a66
-c0ad753fa6f924c594efa9500cfe770de6c5966cebc6858e76c5bf1973fe1cd1
-b33e375c62c8c844f687880688258a0552b2ac68875e264b7d2b0927e37f409e
-f792741804c1ae9110c16bf36cd22521e9abea98cc6a3151e759f31d823873dc
-be8cbc8c54562508cd0d55b1565295970b4c7cb94f0b9d960d7b5a5b10099330
-f9914b89c25655eba70023723976ea31e53428c3b2cb8baf93d77b56ffdbe0dd
-f43904f574b040b2725c72bbfbc716a2624a052d0ea7cf6ca1eda1c559f591b0
-a9b218b76eca6edabee20bfc027ac7d102b7ff910ff11f741077fd2aca3ac620
-a0762495f3e7bf93b4d8dcd4025598cbaaddd840f1d67110f3b30b0cfc313439
-cd0d5edeb858df30c96db1898efafe57c1e364aaf71314fbc4cb5d95c6ad9c96
-846e09b38b1a13e534bbb06d622da308daf856ffcdb86ad624a4ae499fbff17c
-8e77f700412eab675975191d5ebdba69a0418ef1dd81a69f8d6bfe4cccd30827
-7c1b0075e5b612e82523f93341fef8c1197dc5e97911f480398952aa61bfc7b7
-77d05a960164fa8a34f6fc2433c6a249fffa777da51f9cd3ca73091f493b2e66
-11e6e5d2c5b3d8dd3a7f010412970a386e93c13a20bea29c23fc976b7c36bdf6
-db51553e05839357524a2a2eee2d95f00be1fb63fbd2cb39a5b1f491aa2e2766
-b9a7d9281f78e46639bc3c27e1bbc270d7ab1fed1eabf400db81c66c12409fb7
-c70016868b7a2a02f2a6716e98ecf347dccb3280dd6bbe191c804883ad5e2944
-5e40963bec09c3ca1bffd998f20cc9b340611392a59608b74734118cd88559e4
-c61f66a4dde1adc7d7c1d63f3558907e2416f4f3f7df0328b4654ca8969b94fe
-a06a9ca198a478b5e481c851dc7d1722bc46eb18c8f1fd0b093e82e6375b124f
-2142d871b7cf62da5889c49de3d7acb0180e39c8e85f91a34804845a346efed1
-f0b4e00f9f4961b2a27c11236ea5636562a82be3c81f3f1c1ee0a9e30080e323
-cd899aef0ae3130d436263ddcb9b31c8e36b5878e0675a83ffefa39e6b6e2d24
-5b79bfe5d9233b7eee90a558774ea3e08d1e2ad1ef56120441ec34b5be9c149e
-b31de826923c3e086815ae81fc56934f53bb1c324f5ef529243d38b7c30ba44d
-d18695ea8f04fc8b76241aa05f029d27276b6a0d8b27cf8c43a5edb489d38981
-bc5ae649850c607a569e73fa37f96a40b0c052282b065c0664477b46d32342ad
-d170b3bb92fb1230cb12d2114ed4789fbe3d3dae6e4d7b05395ed815e672f265
-b51cb6d7853c6f83e778481fdc9861a2470d4c22165bb0695c98f2a79d337858
-8fbf982a0c243b88e335dcfa917b8dfba901dc79913a5958f16cfd72a26c2aa3
-84ff3138a51af5fbaf09a06b4068fad84dd7b8554d22308bb7cc41c55f494fde
-654fc4e977d61fdd898eba73579537863bb4a9941546796ad1b2d3894011ac64
-de3aa04e5f6adbb9e69f21afa7c7dc0409b6569cf33bd993329cc914e797c5c2
-3b9e3e0ff18ac542f3e850a60e6553614cfa5f2d453c5954a8f74ddfce9d8bbd
-db07bd144dd14138f610139bea9358be42e8a002137be5180a3901de5502f371
-822c1a9d1eb3232de42421387aed207314b032972e72afcbf2f6406c0c62981c
-da0a780b17ed90518d587d3dd4cd14ca36f96c00fa8079b5b748bf51163191c0
-838aeecfbb3025995613e29765b18ce8c14e510d1203467fec6c0a8c63993bf2
-a78b31a639361f79b1f0fb21bafba4bd6e3299d437ab5e7d366ce52f66c92519
-efb631361fd68215f8891cafb5232f000dff4692abe5454fc53adb79a73e392a
-fb00aab08832492d0986c860503a5ace5e2262c048f9a9c07034f128e0e97023
-854ad209b10dd2507da4205c01ea61f99a685b080c2f9bae7011ae456e70143a
-19b4378ee74c69669b73c78f8ec9d19a560a11d81beff9ef717e6d607d52bc05
-a7cda8ff207c86204dc74c107c877348b43285817c42c2b8c32d93ca1ce869ca
-fef4b1ddc4ed4219d3499d2b19941bf4ad75c802cc6895a99837a66be6c14f2a
-c9f1650694389837e40f7df0e56ff3bfc9b1d4140bcf14b266466a3fcc71aa0e
-47fdaf8259a17dbb414b90b05950f5a968d642b2b9b1ff637417566fd3ec9ebb
-bdda5adabeaf41b045020bad7976a423935bd7e08a878cd1f561aa4656564a7a
-777acf608054ff390ad84e4cc40533f8bf8c23885724802bfaa18ab65b544ff2
-09b71d84fe83ad8c1e798857ec5cd79961b9e7ffd609b2cb7a3718c99375bff9
-c0c77370b730aea86c399333a657ba6cdf29e8a1a8a5666a9ef1b8c6a8dadc20
-440a875026917fb74d437b9e2de70030313ef00644c651ded8169b301d08b9fb
-20fa64b4ac404734e82abe89edd2c5ecb4dff4fb6b5113545fdff2f8c038c310
-310773862041a0035e06f4edaefdcf68cd935879d1c9a928d5c62273f230d268
-01d36b1e5cfd8232e40e3436b7194fd9d35121152fe1b8ba7dfa3dc70b8143f8
-bb5fc40f5c1b68d40bd9710a6ba1581778dafd5d064dbf797096b31cea949cdf
-71c4b80eef824b86caf0c22fef4369b212573753b94d3cc5314caae897432c73
-6362ed0071e6b998a7a2bdf62719df7b1c2ca96c1978cb26477b7e1fb47dfaba
-b641c6f9f0ddac69a29452957335c41957c33eb6f2fda4701a9ab06f34b28002
-fc51523581aafa78cb507319a4249723982086e64d632f27edcbd38dd91422ec
-6b77ae3accb6dd86a97caadf760fcb90b7d1ea98f4a01756336728002cc4647a
-476693cbd4ddce577a800a1bdf08a7f8c9cc1c06c32ac2efce853b29391df480
-3adfdb279b73755e96e3c883bea14163e7e29ebc6ec0889ba177da9fa1d531ce
-163984f30a8b015b182f7d4ee4ce95a454d86f4da3ca98e63fca130c934fe682
-267e8975c6472462cbc5915dd0533141f61f083a9e8cc21e7d992fe5f9778cd7
-0d272b613edfad4dd8a4d0cdf328606cf5764e82fcfb9dcac2ed7edc3064f5c4
-5b44db8dee36be5234b91c95711876966948f0bbcac41db838016e2fbc103481
-ed8481af6740ecf42ea20b24eb527188745d5a81785a8017ed15273ef10aa095
-6709a8a72d01663abf4c2043c8a7ecf908fd74ebbc095b55b29c6ea9fcbdbc6e
-728d74def74c0ab7591033adcc16a06f3c8a7f9f08f9d428be5bd3b69316b023
-91ae86585e0d3597002b7bb397559b5bd268c22895ec70171e9dfc8c35057092
-21b3a1bfa7059e21ea90233fb9463ebb7c04b4cb84057c21632db39b59e20c7f
-cbe176ed86419840c67e4ffd4f0afa6af32bc566caa5c8def4ff68d90adb0550
-bd1f16602565cb81285129e6dbfa859a25b82473d56aa05626d28e61330e3c7d
-c4e751df696982dc79ffa912a1b03f5261321528af05853a9af5c2dbc43f1c14
-237a2b0c8b4662b034e4a4b74b6779f4bad37d21e455bcd6256986f243e7e3df
-6a9d12e6e374b0b38c57c41681d7df5199865a5c1fdcf8ae1cf8ce962f969fc7
-3701ca9daedfc1b80fc5569fa5fdb4664e586cc906e051d74625884a6189a619
-ba749f102863f38ba49ccd86d10dcfbe2080d3d6cf95956c77181283791b16ae
-bb69c99cbce0dd2e9c55eb0176269a7abadbb873ae31c7211ba9f746b264b685
-bb7f517264a0df97d469ed4d9599de91b84de95f945ada6d229372546d39be57
-6e505c17ae867880dc86a499c769199a62a16dc9ffc304d6b70dde4971baa0ee
-49eb9956622dfe8c4007e4e536f720929e8c20ea04133a303a71798490ffa2c7
-10c962307b4b20e297af1db45565fa1f0db9c78e231e7b312b778b8b5bb7e6e0
-86bda82d2a253cd28e0a95b04492102fb7b3d1000b6fd1d2c21bc0d09e66502f
-d56ae39b152d60a9dd346d7981268598e718e5f33c0a647b766aa46044b9e82c
-1a83f8e700d1be3cab9e5d945d691039480b8274d8532f4ebab3b906903a3c7e
-96d7af6d3518e3ea6df8b95dc9fdf7cf601a095cd67628dad9a07fe5c67f5c70
-16ad50407ab57749d48f9ddd60f43a795ba180649ef8157da39e584ec6941575
-ee5aa861d67dbf6cb86f0d5f92814f3ff80e846be72be01a86cb72b2895069f4
-64e2f8ee4026989b314990e82c89ef7e2b5db62b94e5f5fd4fadfcab36fe68ee
-fd8f306b9eaf563bbe9794b4412784b440c8dfd5285e742cc8cf6a590b4f2ac2
-83730cc467c2b5f49f47a1df20422d460a9f02d18780c35f9478877a2b4255af
-7c2e782609e134f5ca25ce223deac2b4b2ba441b69246e356e41ac1340b45635
-386ef79aa368773b769da7492d7973f0071df7e407a8d4c7a934ab00fdc050c4
-4e82d23a7e1510f0b451267ce5778ac489f66e94d962b7f151dc50ef87bd1d5c
-4507eb7172da84cab441fd8d5f2b3974a0037b079f8f90a0fa76035cc1797a11
-f19ae567aa19ddf066703dcbcf04c878337fa123bf7ee20186cf4ebb1a3fcb1f
-c893963f72688e5eb31f5acb7e6c3e3e7744c4bd41483fc414144650015e6d98
-c6fa6f081c83c3af3c53a1e26b2fc4aecdee89d0bc0f354be9fce0d1f2bf88b3
-3738897ada4ffec0ecdf56449d251e691b2e7ecbb6e88ff7309abd43f0bfc0cc
-831b0aaf7c779a66346712450737e25ceafc2027bd75d75c5f56702c9ec78ee3
-b73b39147db1d4c0069d80b62f3905adb289f689ed70039a642ba6852f3283a8
-3561854c62e7ce9d65edab9d3dee07bd8d2547054204533bc4ea5b724a6b3cca
-bb12849f5d9b943602385edbb69b2d3ba682547bbbbca8ae62f8dd00848a07db
-688ef33da5533475f4c107abd5264e65ecf318cca84113ceaa8e2febea147a10
-e7c9095a377335be37ca2251f4d5f48cbb62c66f66ef089d31d7e01c50d74100
-d548ed77b07f5865dbfe963fed3d5271d66a787e075ed57938d694d5370f4ed0
-3c76a7b76c454993688bfd5a2043b3cb9c645af5665278fb5787bf29013ea3ee
-25e91cdfd655d093bb0bf2efb800ab7b6ac0010183f24b55e539a2c93882352e
-1d185fdbdfd240f65971933b3e03d4715c4a0ea7dcb26bbc2fb54136fdf93cd8
-32a39b2b4b99e32431a076bd90c7280181babbc729f58329399b161d64cec526
-fb0328ac19c179fc0539c1c4845fddc512438c43e3c5db3cc0b444e7525de4ef
-cce733465ad2e2e606adf1d14885e13c7bd15aaa81810d1b59dc91b113c17e51
-67781cbf3b0a400fe76139ef8583ce12aecb08abc2d86237b3ba47a8196d416e
-80e93f8e59c364ee7426d30f2a11aaa29118b90809998372cb5ded677c13e221
-27864d88f194629bf8c3d577a7aa6638b9637982c375fb15b0b64e8a747713ba
-2eb1e7b7b80a4ab9985d05f6a49cb26e7555d0a0a136d52d1cf028feb1fe3714
-52c6668ef27db0dbef424591b5ab4c18b526eb656ebc30829c558516f8c4d2a3
-eb97053c9cb9dbc810315897fa3ba632fdc76e2ae552d268821baebe0f96f037
-e0f2b8743d36ca24bebfcd7b0d78057009f1ab75998fa9210e54ca67118fec8e
-10ef59c05aaa566752652b6dcf52fddc0daa07f14bc6c28f6334955ba1ebed6a
-eaf5a365f553b2f9359c23aba570a02600e41d2944e140c802669a50be5e1485
-3e4837542b8aa1805e6267a2adf8b640e389c91d1f332cfbfdc2ea20c8249576
-127d420c1d4ff42f8c5c3272c1638666e908db925bd1889f445dde5596eae246
-3ffeb843e8da7dc4820cf72c94056b20e2382f97b5d3f30006fbf7f996df97f0
-dccd9f526d67507526a1c875917ee614d6f10383b71d0f38461ee54d54e12662
-70990f0d58cac89e3ae020307d824812c2e06907f7038b3744a45b9cfc59b4ae
-3554afd96398f265673a554b9aebc334fd481853dcf42b0357d9d29a4fa7b73a
-ece3fd639725bb7030e14194ca5f766fff5fa1a4aa8c76d29ed1f50bfab1b8f1
-583ddc734f22ecced4212458f428c4f386077334f5d00614e3239b5637128c02
-882c7d860f9a5022e1703f1931be1e7daef8d0393078a2896a6fc156dd50f8d5
-38b644ae0e89fd60a3590d686d8e12b3feaf9ab32c570353527d93507c9032c1
-fe6883d2ea1f78a876b85cf29d44328668a1d5169c76fbfcf4faa309370db180
-732af198481f456bcc5ef50bcb2726560eda602eda58f5a42d664f339e7227a9
-f07114ef6e13225d7a41935848702fd9fe5bc7695237e313b7dfd2d2d2ca23dc
-6ccc539a7851397c6ff2d879b49c137f80d3cc648f3330af99aaa6614396a40f
-1ddb3390a55d2486dcd9d89f7415d173f4fbce3596cec0ec245fc727ef549e93
-cb33cad8105b0e8bbe64408f01001ba5c7da7cbee7e9b7f0a7af360cb3be4ed6
-fb425c7839968234828a09a0b78c20d0b0bc8755ac0efb9c8ccb437a985a3982
-26614a5b022c5ab98d75c2391c9c01f9724d2db6c5c72203dc81f3b3c6e6f7ab
-fd96
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMMI5
-%!PS-AdobeFont-1.1: CMMI5 1.100
-%%CreationDate: 1996 Aug 02 08:21:10
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI5) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI5 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 113 /q put
-readonly def
-/FontBBox{37 -250 1349 750}readonly def
-/UniqueXX 5087380 def
-currentdict end
-currentfile eexec
-80347982ab3942d930e069a70d0d48311e252234d51741e18db3a68e8ad10242
-29e5817a10e796a78d2c7f7c1f50961b9a57aa604c9f821dbf5a9295197bc666
-31678d7d2c7e1f8f2151ce0c29efce46270570f4301c5dad1b38884732e53dad
-05dfc36b020e726ca575f71f04abf2b49e1f1d6d2a08a477658ca9a48f1c8cce
-14382f0a42201de56e2821ee2b0e91a818b1b753d810ec2428dae5153b66af66
-9442192024becf743a8f6264a58a0b3aa823510a4957d1bab3e1b83135362888
-3e392f49926471a8021fdb48637baf0abcf31204b1b214f48c99f44af7782323
-69d772ae4f49be53a1bf584747bf29b94f530d59a5be5370b8dd0691e32a21ba
-9d0d592cf3bb50a99a3ecd18d6c4114cb4cfecc49705da90d7edb10e3a28f9eb
-a49347a09d31eec896f2a28e9607d99d42914aea16545c16e136bdd0b75fe486
-61e24c7a9e9b233a76754c760822d0a88c575e08ae3e3f081d7bfb80ec4c03ac
-a08b65fb6474f71fc95c7c2462f2eb3754e647c29498288f2ced0bd3a2bca5c3
-2f80a61fa667802d376cacd34de1f9572d1b3ab09d6f352750db4a768f869638
-a87457889aa502850427b40e1294c5ba33e6b17532b2d13b5f50e71582f93daa
-231e86597872a2a968127afb0f36257a76ce1eb24e6c4f29fce2aaf6532fb5cf
-df84da03f03a45b915209f67d398c7c4f7a3b0623750259087a478dca684b29e
-a8b7f52060bae9394369ed1cecc645d113cca3772a8dc36c6d916b5c5e65454c
-0a188a33395fd3da67ad0a31ddab6a8434dd80f0bd0ea1a2a62eecc331d88b3e
-369552daa1c575a98fe84383548626b65be7c24ae7eb61159f149872cfd87cf7
-6c1a7c155c7186c7600e58cb61b8cb0c5dea98268a39e928bf6fc53985eaa763
-2b28c1eb3d82e4d3fe225223f4266d2b6147e344aad2d4884a9308aadc7801af
-a606838925e3e50ee7aaf73f090baefcfd4e34b795cd92d83c944d91a4940f2f
-c955d727ea5bd76f0c8057b12621eceb0947b0a5dd10dbcbc52957dd978d7db0
-c794660afdd4e946b3d7fc1ba60907fb3f756aab0406c0e7bce5a2238fb3e12e
-07e2c0a7f465e90057642d704434ae0b57bd46c8ea91ab2a386e24c6deaf9cb0
-8cdaa8fc4ec3fadc06bf28659cb878453db16f4b03925b2127b83be8fc240f33
-23ea950b51d70c8fe861e30c346efa0a0125137598caca5478991e35f5bbbc19
-4c787488ba339830bca15f8333431902e82b66a514a41c0bff92719a6a0d9587
-4cff62c622fc61a0308a69f9fb7ef51bb274ce9e059c04b64e817abdbbb39375
-bb4d84ca40de5fa46b84b04f3056d74aecb5c4a207114d9a5a6df3dae68c068b
-a8eac3ce90f11cea03322a18b1486fd2d40cbf112c42389798b819c71671be40
-469fb02a086961899aa8f163c9458603ab61d9bff4cf30447fe852a0ee54074c
-a70c4743a4f4b834f93f9a38a92f5a22713daa7ca2e367a51c37ebe2d879955e
-67b53fd9fc22ba858f47b9c160c48845d0eb4ad008e078fe9518d901d4e609bf
-7e6920bcb1db428a1114552e607fa92b6d0cca4cc7029c7b73f937c2e5169ed1
-484af89fd965b6a96f7a315fc92041494e00af617f6c0f76ee6e2e81a1ba9bd8
-86ff90e811643630b7313c97c2652bd5b1e878434cfd26f1d2828ec210748a7e
-e81ca140d9af69d8404bee469ae0d863542fb878b0025e9698e77c9361c47618
-10009cf766e9a06223dd2f219b70639b7bc7fa8c4bee8310ce8f4ce007213242
-cafdefb30bb05c1476cfcd1bb8f4d193884b1343b6eea03ccc6d87c51f9bbe7a
-7005855330dfbda83d1d6224
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: MSBM7
-%!PS-AdobeFont-1.1: MSBM7 2.1
-%%CreationDate: 1992 Oct 17 08:30:50
-
-% Math Symbol fonts were designed by the American Mathematical Society.
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (2.1) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (MSBM7) readonly def
-/FamilyName (Euler) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /MSBM7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 84 /T put
-readonly def 
-/FontBBox{0 -504 2615 1004}readonly def
-/UniqueXX 5032014 def
-currentdict end
-currentfile eexec
-b5e2457af4a6caaa4536453c498a618ecdce7b5f6f2d5944265309f833bd3d50
-3df8bd14c071f404d2177500681a801856cb8c9c9cf0112c9bd17ccba9ab8944
-1759a320b2078df0fafdd3e357994bd81740d1a7522ddfafb75d58f5def046f7
-084d10fa2f702e570b09a7073d70efe37b48c355a7089772238b7b4538c4912f
-cf6703a14fa416057ea2e1b94455913dd271b42846ee10d78270a8118e7e4bcb
-8deb048bb280c240d59409d47046c890e5f79e5dd4b0be65a28a77aeb53dd33e
-ac506a6da87bb55e329f433627e06c3c94b078838b908538d93f888e504e25e0
-3a8ccf7d2c02122ab3d485525564295390d1154e15fee35edff4eb016fadd32c
-26d1b4c09de87943780954cebc4965aa890fe1f80b03eb07103e13d468245c7b
-c26455f229e8859585c6eeafd9474acdb27290fd62950dc52f893c99a2a614d4
-2a7e3618266f3fb0c68a01a30373e048385ffe7dd5844e208a55d1a9263ab2db
-cb9b19038724f95af00349840157be45cb337871b55a304b87ade64b10ff0eba
-21aa0eaeef74aa01f049303a8b25de0acc26bb3a33fcf267f479a2a73f7dece3
-2aa23083687322b417fe86e8f5afc2136d045ad6b392364811a17630a94ff097
-038eedeedb8da4ebf8fa5a96ce27a2ebf771d14f4a11fb1f9f48cdd207209934
-885ef9118463552984b0fd3cf15d55de967fbb051549dd65f60dfe07f299690e
-58252f032bca78935b7d2df852ed688bd13dd171b91cf7bd46d5433aef9f50f1
-41a2517c4912b837793f84ddcf1116f70f7e9b1e6ec752dbc9183d4791d92602
-397bafe29ac6f879ceb72c673c8a1aa0135d6f92d0db7791f9a2f1a5b55347e0
-3e63723efd258754f5f4a9ad35873a98d54b6c54b17a39892dc1d38660597448
-fdba9258493a0db0d560c01d49f2d889a99eaa8a5b5919cbd33f6b3d97bf27b3
-e0b94b48d5d21d6c29aee4faca71bd775bb9defa37ff627f1e4926f10d59313e
-77d81a511027ef9a8ed5b7fa9b5bd67758cd13bab6ac18411c974a65d0c90085
-67bf5860d0930d7f43e557ee45e76ecb2806d21f4732bb282ac8b591f2b8775d
-4b3ce2a37ebb371cb74a3cc513bdd70a0115de4760c21f034f5080d769f7ff83
-554af524184702a02e534d1eb98dd3f7c5d51900409354dea37de4ac72c4128f
-b7c08af8a17f2033761abc7ce4578d50960ba229f0bbde72a750e61ebf32f961
-f519c386735f979944540cdbe8c8e2ef8a191839e033fffae82e797b6d99eb09
-96caf6191f6824680f0aa167fa3670df501492d493d04da4e0d40c579bc98f69
-1368624f1beefe7c681a84f0122a97651ffc905047fcec9abc49089fd5be8cc2
-aef34559b180555eda5ee38056cb66ff3c179cf5715dacb4b66b8a695434dbd8
-fab68a01da044cba0abe634c035c19d20a8113a66ef4bf6f80b8332f2edca065
-eb99277c1ad03f15837aaa9bb52f5f63c73de2760c253efe0533e75467f968f4
-0847ada5c4e097b1096db482b171b8397131a4d797896ae8361281c3a70e55e5
-71a1c17b23a4203a62adaa8f8bd4491db48f60541846f0776653b8bcfdf845e1
-4197d51ede41b129e79157e9c6597d52ab4460ea133d48d02cd32c43b3f02e97
-19954b9ff25fdf
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: MSBM10
-%!PS-AdobeFont-1.1: MSBM10 2.1
-%%CreationDate: 1993 Sep 17 11:10:37
-
-% Math Symbol fonts were designed by the American Mathematical Society.
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (2.1) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (MSBM10) readonly def
-/FamilyName (Euler) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /MSBM10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 84 /T put
-readonly def
-/FontBBox{-55 -420 2343 920}readonly def
-/UniqueXX 5031982 def
-currentdict end
-currentfile eexec
-80347982ab3942d930e069a70d0d48311d7190fa2d133a583138f76695558e7a
-e9348d37cac6651806d08527c1bb4a062a4835ac37784cc39ad8841404e438b4
-d52d3901e47a1de4f7924e0fb3daf442499175bab1226edf692a4956739f8828
-e80592f450c5d5c22ac88bcfbe9748f61d18243a16f4a4467f084e8e2be46ef4
-7fc51c3a8199e3cda62ff9c4fb73956dab8b6683d2156377808cb35026073e80
-523f59a30d195fcf9b9fce4ffafc6d56491bdecdcafdc988206c5a457a19270b
-37d0ab776e03eaa7eb568eeab6b5e79dec03b0dcbf923a2aa8e4f4deda2cb043
-858d8b430efef0ed914a80ffc9818aba0fb30dae3694e5b31df3855892d59b89
-7f82ff79fce8444c7926ffc4ea008e63bc518936c9098afc2d1c14030a2c15bc
-c9285c1b57e80570d2f6301009e63d9ddeba44e3251c75ca9616a2c5de9ade66
-1a15db37b40b67c1bd71f77343912c62f47dd24be0e03dd833ea60d2eb020407
-eaf042fed30f0c2f01956c83d46d982b50dd979c2026ed5f71979dd98c9c1eee
-25054000a5eed5ce9498b2cb59a7ee55e0538ab47d86e69b2ac79229c8c6bfc9
-3a24e822a2f1c9964fe630344579a25f66646113f73d1315c447f070c575de76
-266c6773b01137e4a039df5e4c2f199e8e3396ef9fd001eebe090e04384c4089
-ec9f13a07ad8733c6af775f432f154ef50ec4477e08760c03c006e4d1eb1c7cd
-acb8955ca4b0d62c7de046ff58d431bb9883d28586552c51809e3ced4dfc2198
-b97ad9e52ea33c91b9e335a80d9b77d3430e0487930f992459664abca5dd9177
-150b0fb502fbb04ccaa94ffe2697ed07906f95fd98e7b325bfbf10ea6b39fd76
-c1e5295022cb39e9cd471b7b0b3f9d72da99deb0615d35cc22f42dbf5cfb70dc
-6279fd520d99f32201abf25e621cfe1d37961d9c0ad36ef3d9264c547638152a
-be30812eae30521c3c775adf1959595a43d8a9c4e12d9f9ece27a0c9b5f45e38
-8e26a39cb0ad4e25ab8f21b25ad1b106ed22af7947ea8ae4dc17b9facbc5e22e
-89a91b046ba4cddde69c1997fa7f4cd949ba3ac4b6e001475daf165b9432dc70
-6e30aeead8cc342d94b20a4045a331175655d6aa279627efc0fb53a4ce66b68f
-a45b5765f0c1368c02c39418366880efada9c81e9dfcee2a9443eadb1aa1b209
-eace5b0fe59ec29ceadcbb5e9902b4cbedc5786ee430d30d2ad87b4cc744296e
-0a6790d555ad3370c4241d355add157a77d9ab97711af34254de54115b4318b6
-528051b275ff76cd466285941b741ccee31bc492d4f92a3281f6dc36cdeb73c2
-ba6eb39ef2ed5e75a795d89c78a49e0c62df0959176e3de1337ec0011eea5841
-4c44f9680262fc604be5d51e04e69668379b034284b2eda1c7495a8032ff6871
-2070880d3da11d49556d625ac9f774a2e5836f36097467c3559ec9db7464cca2
-09f46aeafa09908ed25b3fff86b6a495c2d3e80beeae93b31b9d95e14850d06c
-99e2416db06fc949761a01a98a7445e04de2a89247599e931215ac51c2493912
-bd378c2b98618bf7756fb17992f7b27feb5fedaba21d5fdd0f24d935dac3fedc
-12e6082d19a99b96b8463d0bf33c174d88e687671fe9295f747bfc10b720d62d
-b5ebb3cc1256
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMSY7
-%!PS-AdobeFont-1.1: CMSY7 1.0
-%%CreationDate: 1991 Aug 15 07:21:52
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 50 /element put
-readonly def
-/FontBBox{-15 -951 1252 782}readonly def
-/UniqueXX 5000817 def
-currentdict end
-currentfile eexec
-9b9c1569015f2c1d2bf560f4c0d52257bac8ced9b09a275ab231194ecf829352
-05826f4e975dcecec72b2cf3a18899ccde1fd935d09d813b096cc6b83cdf4f23
-b9a60db41f9976ac333263c908dcefcdbd4c8402ed00a36e7487634d089fd45a
-f4a38a56a4412c3b0baffaeb717bf0de9ffb7a8460bf475a6718b0c73c571145
-d026957276530530a2fbefc6c8f73e9b697ddc0351763500e23c4d170ea8a2d2
-75ad0b6b23097f02fa803c1f46f9ac10fe0e527c431b11b1b9a50e874896cca6
-17fe3e255960846bc319ca68b9b930a45d5d0fc36b352c3443ab6f7793b38d2c
-7fb9c409ab7980ead55e9f8f6b83c70088d1fa6d7f2214da8928e40b96334ad2
-72d1b5db9d1355a579b26a8dac21f021e393d7d837a95deb8de92ed818a8b80b
-98ee9cdd8a3c57ad7d6eb7a82f43eaa6ec520eefa7302e750edc4b495f70bba2
-24a2182eec37f1a1c5dc8e20973007150237daa6bf03d498826777eeebe09014
-ebfe05a8731e1a421cfc513d47d673e3d94d805f5d0668ffa265e0962cb5a75a
-4a93d9b873912be368f3f300b584a7c5dcdc5e3f796d62bd191959cd043bc0a0
-108ac1860e97e05173d3b979ffeaa815405d9db68a72c102cca8b3becc60437a
-946131e0670abd3348ce6dcbd3bdd4797f83472f944778fbeb0a0b93d8a4d446
-9bd54ed42cc57e2736d312a9961d759ffe9b3c98b7b27e4a4f067d1b37e5bb99
-cfd1b895c4bf965c25c21028cf9669c5e8e7e3ee85a5afb8f60e436a84164e91
-ae86ef778ed1f461c1e2f0a520be7297c2f256549c13a73adcd7e18f38d442fc
-97c1a047f71e118e524d7bb28b0b5ccd466b9fae8ad3511a6beebe684eaff350
-12dae83db9f4a4bc77838081b25dfad9a2f9bd4b40091695d05925d5e8c8f975
-d2b1aa768834bc87e3a5f70f1a0c55dea887fee957a15b7a3c26e2467f35369a
-394937b277f888e534406f4d247303f5331a7f435ba5ed3a99ca0b38ba37d619
-ddaccc6dee082b7718fbd1a8be7055914fc63c54b0e69b52742352d7ae51b14a
-c95753b097
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMEX10
-%!PS-AdobeFont-1.1: CMEX10 1.00
-%%CreationDate: 1992 Jul 23 21:22:48
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMEX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMEX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /parenleftbig put
-dup 1 /parenrightbig put
-dup 16 /parenleftBig put
-dup 17 /parenrightBig put
-dup 18 /parenleftbigg put
-dup 19 /parenrightbigg put
-dup 26 /braceleftbigg put
-dup 32 /parenleftBigg put
-dup 33 /parenrightBigg put
-dup 48 /parenlefttp put
-dup 49 /parenrighttp put
-dup 64 /parenleftbt put
-dup 65 /parenrightbt put
-dup 66 /parenleftex put
-dup 67 /parenrightex put
-dup 80 /summationtext put
-dup 88 /summationdisplay put
-dup 90 /integraldisplay put
-readonly def
-/FontBBox{-24 -2960 1454 772}readonly def
-/UniqueXX 5000774 def
-currentdict end
-currentfile eexec
-80347982ab3942d930e069a70d0d48311d7190fa2d133a583138f76695558e7a
-e9348d37cac6651806d08527c1bb4a062a4835ac37784cc39ad8841404e438b4
-d52d3901e47a1de4f7924e0fb3daf442499175bab1226edf692a4956739f8828
-e80592f450c5d5c22ac88bcfbe9748f61d18243a16f4a4467f084e8e2be46ef4
-7fc51c3a8199e3cda62ff9c4fb73956dab8b6683d2156377808cb35026073e80
-523f59a30d195fcf9b9fce4ffafc6d5649664203ab24acb938d58d246707ffe7
-d62f04bec4b70c21ef75beb2b812622b3c74e969d72d3cd11bd7106294a99caf
-0b1629bc7d4de6b96ca82930831d64575f23f4ad06a0e45e315b1d392411be8d
-6d73c998789ff258a07a3c8c2057325784514c845500bfd1a971310cfc11d41c
-1a167dbd5ff012c60add4e87325f6e5299032a839de65fb1473a166aae1876a4
-414a434f22c1d241591fb36f857df6fa930608750ffc0c54f44994662b1f00f1
-400bf752ea8d83ffc4cb77a290bc2d99981ae59a191748ba5c7ba1a9d2583fd2
-1398452b6ff5d83a059f7eadcd2ef744e9dd22bdf9c79d049bf06835e878c32b
-7765c69bdd8ef4deb4ea7cfff4cf9354a4ddffa689de961d16772491c7afbd7f
-ffde42400764c68e954ee5c455a5687959829bc3b319b2147deaab3628662c80
-30c5e02fea09609abe4eaa12e217bc3af673f1bc36a7039eb13fcacb4218fe0f
-c5a3f9452d4edf46cc91db67b624d4f2d37502fb9f11af4da18ca40b61097f95
-d44329375467ed13c5cb585ec53f62b83ef9502cc755af44bf32b87b8ae9f3f2
-f8dbf72dab90acafbacd280db6aaffaefdff6d5eff26669bac56280a950560e3
-d01714ba38659b0e4e28bf8cdc1f15ff7e3ea9d95a6afbbe3d8e6905aa6d531d
-6b6dcab89e2036cc492c65f76ddcc3cfcff33fde3d9ffd10f7a90530fd5c7683
-4329baa902e701ca42717476298c9ff511b1941244bb1dfd0e5cab92a43970cd
-1bdb292eadd055c97972844fdcdb0aa06401e7b2632b9d134f96bce0064860f3
-9859da7a9a82be0a840672a1331212752ae1b521b693b384a72dba8d37a86eaf
-a0341e7fc5f6ef7a8c566aacb91e8bf5005c18837894c4eacff41dba54e071ca
-83fd0f12cbb9773faea8074d8bd9ea37f030d986e98005cbed3f1c881fa23c87
-f911ae5d13f56ff5dd1a25442783ba213bb6a93e276ff63d12d224f4017e5166
-ead00f973cf9db90af1dab42dc6f1d2ae4a284fbd5136f805b3398eb0c50d783
-8c179ad372384b236c64fa4632bfd5bfb64b748442f9d8d0605382b98c4799f3
-ad25c000601c01996c785779c26dff0c1319d9f4bdb375d923d76f226f334476
-2a2ccecd95b30de86ba86f43d999e56e2780acb74ae5b054a428d318260f8e05
-c15e5b0e06815fb1d876d613349d284463895a8a015e976b88cdf1ea950701b7
-8a9d3b6995b674a1a64f7819c1580ef181214231c4da92234b108aab4ea41589
-3ac86480441d5bb9cebb69ee46f8ee3a2e190783243fceec192db6cd794e106b
-47b3e879676a2010cbe354ffad34dd897c5428e65d3e67a73360998776ca3ca8
-9c001e17f5c8c2f38d08e1b4e072384ff64ced8259739fd20ebb12c8e0e58f17
-f8f3ed36866170dcb0321378226d029eeff42a3b2a175677af5602cebace2d36
-37414bc12a8d9e9ff85510db5831bd86ffb9a2feed6acf21dad414f54bebf3b0
-e2f2005878ae109d8d81ec2f7309123fd86f556dc96e7c7e2dc9b2efe3bf2d5a
-1ae7599d61e8c1cb1f2fdbb5636f2da5e6960b0fa3e601de8e3f294b8023984d
-0cf0f61aa9f564fe3a2b647172015362c5b6205190b7d9b7062d3b73b456dd60
-b262b13dec5a283b71627662242f22a6528729bdc457e30807aa62c9c2dbf9b6
-e89de730291405a6e3bd95dd31acde9644840947242ebc7e7c1a77a672cbb56c
-3e791268f2ea6b8e1bb7c64522b22bca05905fdaa697f084238682fda5e667ff
-e27281f1c543157774b65702c675edff440e027fbd3ab5b98878cbf040014455
-e3a872e956fbae99882885060698e64cd81db0abac0a35627dc8ec2e9b704012
-3f99f5dd70b91b7d75826142856becef45c966dc3a845992af89206db8a79289
-497bcb45427c81b5e4e097f7d8d11dfd683f8c191f27710e540bf6172e6a7ea3
-b514070b9d243fc31b9e8b3f9ffa2606314ee8a73d047a612b8b7a2b93e545ea
-a17ed99bd0f39037d33346f55e0c8fce9175767f19da473cdaecae5aed360f30
-86618d84d61ddee6e89f70abeb83199ee6652db67299cf6de6b363f146e554f9
-6b96ca03e351d249163b61aaf8bb9e1d77a0774f30b6967de477539f2c16ac3b
-3047ea940709d5206a8c1cbf82442c9210938d67837e800cfec13d6aa3ba4ad2
-5a663d4959c11e116b65d2331933402bc9d143eb96d53f8cb5a454ef6adf037e
-e4e76ff1189c01ac981e1c2de02e5f76a0389ffe20ecd918ceb3cc14a586c2a6
-f4dc0b563137424e5d3ea7919da8ab8c23e6dc68a0ce743fac5b1eba0acf85db
-bfe31dd949e00cbfdae9f730c871d206a182cdafdbf22e772a29824c7c2ee6c4
-310f08782fe6ba671c5259a4cd45c38493c3fa2fafaa6ec2fd66980b6e0ba7dc
-dd7f9ba303d82be6becedda4c18e351e21a520057b98e217733a6b48585892bf
-2de931c1fb49bb3ff3a6e3f973b4d5bd205d6f9bcd010b2376b1ad08051bb592
-c8cc08ac7a97a281001f43b2ff2f0d99205229b868c4589face968b286aa81bc
-409b9bddc21f9f9855d739d026eeb3ea3477bcd8e30ba144f6ad2942b1f3b629
-e3d73705b734716290087110c76dd324a4f112c49214ec3772a15d6f01cf7147
-8df8bc20d4f0eacb8bf7ddd50f777d790850ca8e8827ffdeddc1bd62e7c8764a
-94f68d42a91fb72d9f23d989219578c03a670f0078df3333cdaa5bea49197cdb
-5ed702f67368ce43f8a2638adfdd95748a4509d6890c7e74b0677298b2332889
-d3ba74402ba802652be2c92f085e45349ca9961097805bdb9cf3a3dab3f9b194
-79f0092c553e381e20f551767b832ffc567462911e4c1422935db29278a2a04c
-dc310d3684dfc3ea1e2d61086689f67f44253d692a91590e498c26903b419ce2
-52f4cc4c4a1e5ba36b4bd8cf80269823c02f860d4715d0d60854f00785986d0c
-334eda7626c27573c6a4e1f1347a76d44c312fc50cf789440a8f70ebb0bfa585
-327e9cac8f3f2bccb844eb0dbda7372a9ae068c4d5fe98e8e84804e93ecf5aff
-88ccd19d794ffb8f9e803a5f10c86f0fd6b3fb3696a9cdeefa810575c563519c
-ee458762f45906ca833195d806efe5d56298b0285596cd4fd4eb31cef8726a5f
-7a8bf001ff24953af1698ab9465d5d2ff9e76470905cf00b6a9a563f38c8e028
-3e19ee598dc848fa01d93321cca6351932efc82bf4057d7dfbd34dfc5ed60a83
-7e325d524dca8dd6f8bf75b994a8ac6740df3ab435cc8358ef7b035f1c8ad7b7
-dd9c4e56969a0f5abb68e04d9bb789294e316c327e71f9ce06fe3175331ddb17
-ed87dac38f8564afd0ddfa7f26b83a30b603d132dd1d960d08cb88815dea42f4
-f0fca10964e343fe8cd754eddbb9a991007b7bc393f08b29d8f2b2adeb88e966
-84bfdc757585689182bbc3352c57a434c7bd5464f151646ca7a78b7af88bab1c
-c66f827183800e2c5c743fb03f4b60d396325cf1cc4a539e32e111eae1c823cc
-8c127a32dbeaf51f5e200dcce6759e13b7bc577055e15772e73772ed0f92410d
-1b2cce55862846f7d990c941b3ddb49a0813172eff3c943fea30e3284e61b671
-9ab9690ab93cd82e8e3aeec31136bfee856e02de3bcfae6fa326e104acfcba6d
-284e01199a2c6522261e0dee189d9eae5b45f8248faa14098be8e10317ce7570
-a2289ae116a72cb868a6f4f3fd00ccef636a0d3a3917e2f50bd2ebb57fecd1d5
-de42f083f032cdb65846d009b02974cf170e42e367c4926b608f52ade9de82ec
-eae10007a15aff196b215c61b1b02a7dd376844fc08c2374586b24ed573e8f31
-30ec15288e4c354a1cee6bf99657f07278933e59b5897e54dc8475ef33a504c5
-1042a6c96a0e003c4cb525dc97f13e62d250c1c07c10b475b18d90ea878b5e09
-5759b686d68609c93263c7db41bedfb61cd3a34585fc843f3b8fca94ac310fd5
-5f1710d2cc9f4a095d9e864e753a36f8bf8ff96c16a078a4175db59c90c0f1b8
-c16ed94bb52b23d5298a60d01c533a5208a4d13414920e53d897e9238b471f18
-e7f6ecffcfca7e2b51e1db7104d55c63e717584dc2d5c578c0f7d772e71a3055
-8bbf8c7273b23cb16855d58ebdef6ed5f61b2b0b77dc52c13906f97b88a12cf8
-3508933a9b9b5ad9d11a359d22710d440cdc903b159df0ccedb27a6835c0a316
-30c642ac68479da45c6ccef48e59a79926299c2670ad3a4d568f153ec3f18148
-f5dbba52bce098e746fb4e45ea65fccc128df496fc70459ad574b2b170c71097
-fb9c2e29e9c20490a98e887fd1a7e31bc129f3f9413bea5f6f0819f9ef443503
-fff7d456194c11d9f4e64d27570fbf2ea3e8f20f67db81b43b7712587ec3f609
-7dc52284a1d3a39d0337f5ae2e8c0a00453d084c190ca8751e677e52c0ce20aa
-bbf4c9392e1abac7708da434ea711fb02382b40dc656d2571ca966201229a503
-730c1dc6b8144738db8a6379bde4fc1cb7a7213951d4d552f78e0fc333adefca
-b15225ac2ae505295da8cc9b735a91c36be16215f4e40fd614956a5e2128c393
-b169c19114c593c591febe162da7a68123ad6a50454a9ade64f70fcc8d7c6ae0
-f8855836b5f3cf596590c785193833ec8b7e214711cc97ea6cf21a27c43d1282
-a0a7bf1d99c6dab4b402af458c1235ba4fbe064e8691b28cf2ffecbf252796e0
-e986c9908178e7061d2c108ea0baa6fb6225824f7aa99b4178482643e3c8649d
-cbcd3d2356136810b0f120680065dcbf6103872151466ca8d8cce2c38e0608a7
-282663e2ca3d7f77f43a272c2723a7e6729f3f6a9a85a7608b935b3853947240
-2b1ee879b65d88515a2753b1277ed0fbc6fd2f57de88e77dc43392ed6a90646c
-00575c25a49372d4ac5cd6efc8c759053d67cdcdec95a674a9d0e47269ca022c
-1c68c6477a0719adce72b223ad6c5fdd795d37fe7b997800863baf27ded8b5c8
-81846ba1b1c1955403ef0201c6fa4a826c1e43cd9c0582798ae58ee10f1ab02b
-44da6ebbacc4aa922d63f64b20d45e269334cc9ab5b2d6c20b6248f4a71cca49
-07183a13e491e1aa14c97e524f12ebf354fbdcfdf4b1ed9367f3b42d32eb20c4
-2cb2837367fa254dc9d599eceeb58a95c9acb60f89157935
-
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMMI7
-%!PS-AdobeFont-1.1: CMMI7 1.100
-%%CreationDate: 1996 Jul 23 07:53:53
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 59 /comma put
-dup 75 /K put
-dup 78 /N put
-dup 84 /T put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 111 /o put
-dup 113 /q put
-readonly def
-/FontBBox{0 -250 1171 750}readonly def
-/UniqueXX 5087382 def
-currentdict end
-currentfile eexec
-80347982ab3942d930e069a70d0d48311d725e830d1c76fba12e12486e989c98
-74c2b527f0925722787027f44470d484262c360cdfdddf3657533a57bb16f730
-48bfbbfcb73a650484015441fdc837add94ac8fbd2022e3ec8f115d4b4bb7b7f
-15388f22cc6198efe768bd9fceb3446ee4a8dc27d6cd152485384ef5f59381ff
-da43f2d20c8fb08aa27ab2015b774db10dacfdcd33e60f178c461553146ab427
-bdd7da12534ba078ad3d780414930f01bdaae649990604a33aa9eaffbe5b5489
-e5c7c9ff9d9be01b08220832c41caac64816b53bbc087ae4b621d2b44b21ae5e
-3f7fe4ddb05c675abfe30510eee4a7c874bb57b2ffe521a6875eddfdfd18c781
-25bfca5a097aad361dd94df46f14026c25ea988194899b95001209cb7009cead
-4b4ea03473ea120e7a7e341d4e3926796347fdb3a124c29660ac09f4648b313c
-b58e824884382f24ce08d2edc686923acace1201c16a07a42803288cd0b946f7
-546510e95b1fa1cc96f0bf72aa823d8e83d7c68c752c82a54c752eed2b1e699d
-e9db1830272ffbf2f4996ccc2d6fe2ae272798989525ef3b67b0d09bffcef749
-a805e5f76578222b9c4a8a09b13189a16ab746ddef7875f1ecf83e568f493d82
-ff729baa1e0834dbec30a35d3c49c9b10c5e1d90c6e3c8fb737df5ceb3299d96
-0fb79632f91f257753b4d2e34e3f54a26c7b950981fb7fe4dee3315db63e75b0
-24b4d318baec8aac9cde186f6d65767df1dba35124287c2e805bc660a3a22772
-0ae4fa097f1d75107441c0a0fbb9eec17d5516fa03b98756b7df7ac7eff9c7a2
-364b9f691ed5cb692dfff9dd80c761e9c4d5d6061782b327302c053ce1cd09ba
-0605ebf761cf9b730524e1994e7dfaa956799d522ec53d5acba27a35c4d28279
-617771938ece58c5ab664aa00c1bc4efba2d15504247a68e3af0f9bd59a387b3
-80db88cca083b06f5af70d768d1699826fb12ce12efc2b4c70923e052dbb964f
-5fa957c3ce225c0fda64d9b5321ee1ade207c1cc93105096cc73118f4082594c
-8ecddeb0d7bfde6f70bc62f10407c26a476ed88be7999d64a15912493829a9de
-62c71f5a34fbf5a843e311873cd98817dc9f8a4aeb7e0738b5de10043f5cfea7
-147c908eaae2af4d09272289231f5d80c37f63f858f713f1348f3519606f2b1c
-b32498b9322c2ec5d38b8d205d10acb61335fb5c8dec41461f5c767e054e691e
-60a73f6ac42bf38f9eeb48ce671ef7fb68a7b136f99f7564d0e3df036ef98ab5
-6819d7c66223c1123930beacf9e67647c427bd78a9f481c2a573a1fd2e21ac71
-65ffd14a7ed14ae0f20425e8b3d861b6373a0ba50fa0afba8e38f2f1fc114dd3
-847975c59686ccea85a507a2f113d40699ff037af8471385851c88304c3044d1
-6ca1ce00e62e97a16057d153e3cc0ec64261f9eca87099af409985d7893aa6cb
-23264f4180e917e1c34f4b68f0f4f93cd078a2f1d842f0e22c728984a3426653
-816cc64fd2e79df4fd3ecf0e4b1a1a13f97435e6b84e7cfb410f2be52cc8e480
-951d13449c8a9631ea081de5e4f4813e58d27e0952638b7d0dd1c7f0a5061ebb
-6aedb99329b63f86b8d052f3eb5769a6a26238d1870daa539daae91f155f8e27
-0120addbb7961f8768261aed2e775a4e620127d67ee977744dcd7a077ea29f02
-1dc28f13980d5a4f3a4e9a4c41768632634c666e0a0788db338f096228d8722f
-74a139d8e665bd8ccf7c3a6ea2a70e39d96d484ae36c56a5537f6bd27d220d6c
-0f1a5ee3276134bfb0d646538878e63ed7f69430dc06bc9be26443174774339f
-c86905b8f5ccf562ad74e8d979da721d9d2cc3ee687b0dac0043238d0cc8b5d4
-6fbfe1340166dc1724f93d19efa5e6e7a8ff6953aa8e9b46e05b87a6cd7a3b50
-a404d9f85977b135ecfd70dad236c147f506b6cc28a19cca657d34696d6d8608
-197d13d2c4b10b83958b6f0ac695ecc01664394a229f527a577f10aeeb3c86b0
-b4ed99ebb0f512ae7287bf94ddaad921f0de9a7a48a9ff73ddc377eb8aaf9e53
-bf810005c4cbb6e9bb6213105b4f93e6a8b70f89b473542cbdbeba27f7979c98
-46995036fe40805dcdb4ff428f8a7501a41b9d90ca7371c55f8a62a581b2eafb
-e2c157da72ea3b988a3c782fc5e7e47bedd9120d9ecd889761cd7c9377ba7b30
-f4f4a21f8524266134f997d5d5dde34697052dfcf2998001e9085e8267cece01
-14a07090a9c397d5dfe1a887e0d565a4258704d6c03466e08e6b806d6d02d78f
-0cd93eae3334d53071af55d544f4582e070cf8dfb0445fa2f521c48eab605075
-208f7ff7d4a9438d4fae0ba803be2bca0d74cc4a95f95e81368bf13e73e8b8e7
-cdbcf86f13d106410e10d52df3c224691cf1bc657d8fc56b25b7b882700724f7
-752127c505ca581679b858a08a70927c4177713140701abbb1e30d616370d823
-e348abe9def37688fb8e314c4f1c5766dfc41d189059d21b6230e971415604f1
-961597c501a354aa14bb4bf5d8dcad5c0efb391e158fc4a823ebd6f6b5599de0
-8e0131ce8b1a6505a08a236241f802966445579969e272e53b2026b6a1d8f663
-2ec2e07a2f4c9fbef5f6d78883075a0b7575ea565315d2e42d1e9f16c99221c7
-da0b77907657aa020e46f9eb4a27248a8bc6de31de22e9db3e4fc7742d865943
-63d56f5ad7fda25741fc9b6c56e07006699e3abb7dc30e9f1cdea74392ceaa6b
-0fff7e52b5a070830e8061c1042a32099096e2acf5a233473c9cf774994d3fa6
-89fd5c965fe943d77ae971488a6878ee12efe60b5bd362cf6730b61cc2e15de0
-cc50d238d0fdc18e30dbfcbd3282cc05621c7954dfdf78a844821994172b861d
-8a064c5ddd8f187121520e9b7591c18b70ca17f658cfa0c11cf5bf3ac68e8187
-8ebbd0b8bb353ac4398452356b6cd309b6d5304e3d40baf9b6603548b18d53c4
-7bf554663751b2900e27ee1e46dd2134992dc683d2790ff48039adca64a9a7af
-9239d64d37b593307b10a3793784853eafe1dc7b53efa215727eb7dbd4dd0e8f
-7f22205c2305c5582aaabbe1e04bfa0f014da5eb4d4db37edfa08ff22102bf02
-25c17ef51f3b29331e5eb582cad31e14a089ca97a1915536b6449d944cbdc23b
-39bcccac5dccce5cf1c0124f1d508ff69303b3f68588851a342c118bd60e170b
-25e7cef0102c2dc4aaf045c339d5e21da358cc6341567a1ceb3d82bd9fb5c6ab
-ba26bbaaac92e2d4808a482f7a86a9b9b7ae64e282a4fa9c8b180dd5a4223995
-f2bb360f43c57dc0001c3bea49e27e65ee4e10365ff2ccfd406ede218e43a0ab
-e95fcb6f6ad1771ed6f1422ecc03bbdd46a86a64664f75fd700775fd9b8b27d4
-6803c6a5c06cbb04b585b5766447870eea063c83969efb11747e5113d559df96
-8f2c27d92e3a237bca8c181fb3c82bd75f4d3ec8296e5adb3273d63b2c124b7b
-22c6941b5709a9e4ad8a771c7cb44ad034b0802ef526b0ed52cab81fe4cb4b3f
-5dc72dc5b86b724d32eccc40def6313bf73bf16cf56ea92c236e3df997a8c4d0
-1f89ddd7b2fcc8981e6731ec8ef80cbf665ba08d41486bb48210e0fe9e8d9601
-5e538a0c7353bc5bb1e6c70cc8a5b2bcbac6a6a1e08b4e8c13b372a8942577dc
-9779de2198b20b7552c4e001adba2b013809f31167c1901a58c1658eede633b5
-214a79bcaed71a86b4414ff4eeb36bdc2bd67cf7c95ca9f01520c718ea59905c
-bb838b367f7b3fdae701df64c3f34fba0dce8c884455d0dea1ab985c9483f91c
-64597df66fd19cd2b1d5aa90d5d0d98326ffb26a59c2c982e8c4b029ceeaec40
-2c106cb40913440d26f8e73d81cc62727c97cf697f81aa040378ef25128968bc
-0ab6acae0ca91d4398fb9c10445d94ecbe315400f42150b2f8cfe8dbefa745f0
-1a4e26e79c189054334bafb83205854136a68fc375f32057f5821ae684d1de32
-4c6d40c5ac0b7da9ab3e04bd51d1e2ed10447dd5a990badb93b04b5d79825f71
-0b21e566fbe8acf3eb06988cad4f2ce3ee7ea67068f475ec6c3313794adbf23d
-51c84dec0cc0568d2860ddf75dfd2f9fad70a71701729d744dd543e7f37497cb
-006694da423d491220598b43240c48fec615c5300d4b9149b8f7754506eed3fb
-d919b8fdab8863f6e224029c939a81ad91b3189823fe93a7a8346404ea422ca2
-120d1dd287e716771fc3d0307f1471a408f987986914d1531dc227adb927906c
-090d360d801b802dc8f14afdb5f85031d77a48f6fc7b4c291bfe77141843c195
-ec2d98eb08c50598b11b57f14cbbb981b385fbf2601ebf0a2193fe3f2a0d016f
-7eda8341c2e842953743dd5303bed4321b6a6086f2529acb942bb4867b601ccb
-0e033f1d9ad071349425abb30fc5c59be2f8de422825a0c65c9af229367d88cb
-e64d10baa696a7d9234f1d9013b0230e3637686f78218d92f3f68c940a9c71cb
-9b9ae607c2531e2d4c0922ee3fccfa919f564d54093fbe4f7a38f35fce87f94e
-1f9852ed10f0e2589366b8b93639187389cd6418b06b0d24f4ae84ccc7a47eae
-11355a44eb6702241553ed7bf24d711a966970efa823fd0741f39b8289ca405f
-89b6778daff3790cdc8b1e3d92d3d3576dd09e9be6a0fd0d7ca5b6b51592e0f4
-74e746db72a8b8ac44e0f1514e20d6fde235ecb35c92da6e3d713617c6cc713f
-e295b2789dab9b86bfb429277a9af1f48caeedfb367a1af6407cfdd6ae871400
-c5f6e4aef1f8a95aded9445aa935e9d029b19912fae49d8c0813537a1f83a397
-5d3d503416962627e7a064486bca01e9be649e9592837808c289347818c56d07
-ed37354b64ab0239f279e8502e086e6d5556db55c78ccc5eaad23fd55f02703e
-3a50318b84528743570cfc45714e4f2a87168298c1730f4882f24542fe34d407
-008cbf83bd09afaee4816427112a5f7764d6dd4ada8711d9a585960dc1d20f4e
-fe80fd13dbdc18d165c8c4b96a523de74b4c6865f1ac55fe63c39be0e10abc3e
-66554aba2b3f1fdedb01dce1aa8652633b6b157c35513cf96db9f75924dadf1f
-ddc6d3e66fe86db851f9ec9bf9eacdfb01e9f82a6f6e1522abac7cdf380372b7
-5b50bf95413a33cac888caf762dbe3e94a6b46a3d64b1bf2666e00cf6afe2c15
-8aca7e1175bdee5978c13492775b0da771a26a3d066674e6451121cbfff3ef13
-67926ecec8cdbc68fb60b2b87dc81f81f3e7f36db93e185b8503716da045b4a2
-92407e0dcac3de6e0421db593d2ab73786f4e5d2b30b52829fb2ac70eec5c9e2
-912dc4915a230c6244e3dd2e88af1c6af60f9b9c390446b459fe1add8171cbd9
-6332b29fcfecf1b968d82a16ed1790dc5fe720b0ef1d69b8a9b84ce4907bd3c3
-0a5624aee58d7bbc275cc6da5cf77e64c9b6ce73b17f03156dad97fd1f5fc095
-ebdc92cb98cd72d097a768835011f83f4a543606e2f58e9264c4a134bb2f1df9
-0632e52a1ebede1ee706d6d0efcbf96943a3be71eab3068862420e57ce79a81b
-a4aae9e6442daa2a4217e2546b29794893e30bb0bc39f53dde14413b308c37e4
-ec9e1419c956f96658cd17ea4fbfb62e4ded3d7047cc88e10bd5a32663ee8ddb
-4e07b6ba4c45026e1281c09f9d4ea975c7158fb8ab
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMR7
-%!PS-AdobeFont-1.1: CMR7 1.0
-%%CreationDate: 1991 Aug 20 16:39:21
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 10 /Omega put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 61 /equal put
-readonly def
-/FontBBox{-27 -250 1122 750}readonly def
-/UniqueXX 5000790 def
-currentdict end
-currentfile eexec
-9b9c1569015f2c1d2bf560f4c0d52257bacdd6500abda5ed9835f6a016cfc8f0
-0b6c052ed76a87856b50f4d80dfaeb508c97f8281f3f88b17e4d3b90c0f65ec3
-79791aacdc162a66cbbc5be2f53aad8de72dd113b55a022fbfee658cb95f5bb3
-2ba0357b5e050fddf264a07470bef1c52119b6fbd5c77ebed964ac5a2bbec9d8
-b3e48ae5bb003a63d545774b922b9d5ff6b0066ece43645a131879b032137d6d
-823385fe55f3402d557fd3b448685940729e6e22f4be0e08c6505cba868f7950
-93f556b64b808dd710eb936d3ac83e5783b5f7e56d363a59a026a5619a357d21
-c4e77bea121eb24b09027d1aad93158edf912940e91cd2f17922b35885894644
-7773730bb19af9e70453e1b78d5edc123b273a979891d6d5e624f4a388f3897e
-13b045e34b4ee2f5e4fc5e996d3549640010c671de14d18b0b3cd300e57dac03
-22e59bfbf7b29422230870f5897fcfaad4b50c7c1c58edcd119218163d6f6e56
-25ccb882db7b6d09a1586508e8cb642a11c29a46915e4a96e282079cb21922c1
-c2e360b487a45302fd22ec8c5fab63e54b5e844d4b17ca2fff37c69c366dd72a
-d02922c14c0932f65ed03e4219c117962edbad2dcdeaa9c10ce8af38a4ae52e2
-b377245b0be19a77d6c936e7530cc4d0b78d0cc4a92698fa2870fa54f2d8503e
-2d17b3d52fb2febb09f2b2af0c2a1892039ebe19a690098799a858e3d39631bd
-6925a154d161df3918074ada6bd52baddd0adc3f07e2d9f15e27cbf7fe8b98c4
-07205c811121fa91e059f2f99322fed63f359ac9da97aec383f067f23e5de331
-51e80f0a88ab50fe8fdae4a5de93c1ae2fdca06150b37246140c0e87cb2325a6
-0d2349162ae3ac93144eee1e665a1289105318fdfe86b6e76251cb25adc967d3
-d0b97fe5e279e1161736ab22b4ca510b964342383a840defd38f96a7280e6ac1
-34e48d740607ff2e7804164a16d47735864db847c97335e6d4215cb99911a1ec
-015a3edaac1f28fedd56d2467130d07bae9416c15f0827d27c6c79f59054282a
-418c12c157c91223a829947f47592f7cafd93ca182b25a73a9419127e3b12a9e
-5167ac3963f2b019b338ac46d63880f94dda4b538835884d2a5538c85528d6bd
-977f844d32b43b0e48caed5a4bdabcefe71695d69ca784d64d476eddddd04fb4
-dd6833f4b71645d7f76cc408f4aab6476e7c58a62af2693158dee00e15147afb
-1ad390821f90872f0ec9c322cc6823a6837c5d9c9506c8dc44144588283e02a6
-db49cc3281594301a76a0573d9c95d986f108e988d3900ebb6edca7b8580d4dd
-500c8d5ce83fa8d80cce38a5a3647ca9a87ce5e1558729e80e20e641cd833d27
-f0f881ee92ed59dcc51d037d4d869189c996959b7a0d6c35f8612381133ebb4a
-608587e67e0fdf52cfaaabee88cd286475815456a89f3885824c1d7ed2e6b7b8
-aeb41c9df9493a8b534f8a8fd885ed7dbcf74f1d9ae9c598e305e82f4dbe9441
-c616cfb31195dc5864171e112804cae020c5ed0162f367d35773680ca20a42f4
-988a84aa9ad085056c3c37f858b8e1e050564539a5e49de198204c46929695d3
-189624e2dbeafae6c84f7554f02a0e6516277a478118a13337e1185c3d23c1e3
-cd1241bfc2454ebcdf3532db75fcbb9d4bdadf41fe191e8a7e73746b6829b5b2
-a8cb0cdf77f6cd864364ee9950fa88796d9eb61bcf21960bb95f6767cd58cd71
-3b8b0af3ff926cdd1d121b391830e040290a961b79b9041dd33e8c6f1712ac21
-92b624389fd7a739320f6bd71987819687cfd66595cbdfd5c2a2f1e908286612
-bd58cfa49b8e2080cbfee7fa1958ee86ad87130976e18d1dee4ecdadbdaa0a85
-d254e8565ea03d7d74baaa2f2ae85307cc4d3f1ab3839e77ce6412508092746e
-e67ea260cf4dda2f5d007e4517a240223050791c2d718c20dc7fb1d285399e18
-91838c7e41450cc88bb3f8a795e38b1b8473b2920c115faa28fdf0a30ce6f41f
-30e3684268deddd1d1d5fb550cb71572bac10d6b3fca6d434ccd1673ac17b5a8
-f9c580d376580fe5da673aa0acda29ca8482169410a8a127f41e590b3b498d47
-a487ec7c434a9e8e8b824fdf56a42759e07b38cc537d6a3a7410a71b003619f5
-9ea1cba489220ede7b504a047df332ba29e44d05a2e91a76bcb5a029d9e6df31
-4e9ba7a5b1127ab0235367ee050e970a3427942dbf20ed1e84c8e30f49592e94
-1e9d98365667a8d6b68cf992d30b9b77bd34815cc5286664e8409d1a5962ce25
-f086658b56a65e9612e4b058d03a7a723b1887928c44b1cfe5bfe1590a6d372f
-e01e354b2a75a782ef19dbf4315c6e2b095a61517da93696503965b720a7ccd9
-ad214caf370fa7a79c4436f7c1a950e8d51a926d26952c82bf312453d1d8e3c9
-b1a14154368db8901987b1c11a39ca2d9b9f9f46d08ccf61099fbd6ff65d9d61
-6c5d04ae92d965d6fbc967e54598465c50e0e652c23d22d3c57dbfd019a45176
-6576335e467c41c024f46b904ed6b9b11e32042406f35207727dde598a53b9a5
-4579f8adc256ca73784fa67691c0c6b265c0bf359f48487bc02555ef8f91fe6b
-5ab927c3df47063731fd04dfc22a45303ed4ddf20623e7909180e2e60cb5d35e
-496ea412c139464656ed52649b1a4c76452fc5a933b0e4d710bbef4806d6f77f
-7744814001ab6781029f2cf5c1330b259f72e60c5f2313972bb5e81afb8e5e54
-ee5bd3df39b998e9821e3787
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMSY10
-%!PS-AdobeFont-1.1: CMSY10 1.0
-%%CreationDate: 1991 Aug 15 07:20:57
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 1 /periodcentered put
-dup 2 /multiply put
-dup 15 /bullet put
-dup 17 /equivalence put
-dup 20 /lessequal put
-dup 25 /approxequal put
-dup 32 /arrowleft put
-dup 33 /arrowright put
-dup 50 /element put
-dup 54 /negationslash put
-dup 56 /universal put
-dup 102 /braceleft put
-dup 103 /braceright put
-dup 106 /bar put
-dup 114 /nabla put
-readonly def
-/FontBBox{-29 -960 1116 775}readonly def
-/UniqueXX 5000820 def
-currentdict end
-currentfile eexec
-9b9c1569015f2c1d2bf560f4c0d52257bac8ced9b09a275ab231194ecf829352
-05826f4e975dcecec72b2cf3a18899ccde1fd935d09d813b096cc6b83cdf4f23
-b9a60db41f9976ac333263c908dcefcdbd4c8402ed00a36e7487634d089fd45a
-f4a38a56a4412c3b0baffaeb717bf0de9ffb7a8460bf475a6718b0c73c571145
-d026957276530530a2fbefc6c8f67052788e6703bb5ee49533870bca1f113ad8
-3750d597b842d8d96c423ba1273ddd32f3a54a912a443fcd44f7c3a6fe3956b0
-aa1e784aaec6fce08dae0c76da9d0a3eba57b98a6233d9e9f0c3f00fcc6b2c6a
-9ba23af389e6dfff4efec3de05d6276c6be417703ce508377f25960ef4ed83b4
-9b01b873f3a639ce00f356229b6477a081933fef3bb80e2b9dffa7f75567b1fa
-4d739b772f8d674e567534c6c5bbf1cf615372be20b18472f7aa58be8c216dbd
-df81cc0a86b6d8318ca68fe22c8af13b54d7576fe4ca5a7af9005ea5cc4edb79
-c0ab668e4fec4b7f5a9eb5f0e4c088cd818ecc4feb4b40ec8bd2981bf2336074
-b64c4302856ef184e72b8e52f8eaeea96d7cc14bca7caa95822ca41fddf44eb0
-3bb40da5b3924d358871e96edff313a6ec2499923dfa1949492a642c97bec26a
-3211dde8eefec916a57acd1e634dadcb6a63d42213c71983d04d3090df55f0a5
-b7c9836900216207d18e17c3db80dab291c185465ec32366f135d7ad7aa76942
-bd63888a2bd5065497d506848893d2a605b26c44783988bb1a8a1bedf197592d
-7a0180e49420396162a13e4a9b59de2d0f38b7dc25f730b461b5da9b221bf3b4
-3d713046ddb4fec29cdc420a8fc6aac27530d5818ab56259fd436bb5a73c7abe
-84c08e6aaef6ce9eeb098643abb517e194f608ef6da255a292f0146fddf5b75a
-c961836d838165d45a52345e9b5da40481ccab1bac422f0e02278f2ddf7a4c1d
-d1bae5851e9372f9b8ea2e29c3c71f455db7642430ba1878df32be678bf5ce0c
-48bb1290d70cf26785d4fb2e6df551b47414d2fb3d85e630cf436b08484817ba
-cac8c295e2c6fb01b523323e40652c04710ce9828743c9aef92bdcc05edbd9c4
-96186ac8f1b4ffda3a6dbfb4ffce69a91afb182ae013027c15abeed6d2075a59
-b0f5662a741702ff73224ffdeaa42d29b9b5b81ac347192325f8a377fe9eb5bc
-acd8204054b335a6d75bab5be98075b720a8f5dbf285b0a267e25bd1a813c353
-82d26725a047419263aec87da1e1aa2a440afd0915e25a8a28485864c1df7b41
-6430c57561e27e10c66002acb8a3edc82d86ca58d58ce24a90ca8e0b12881428
-a5c4cf0eef500dc032c2feb578277a18f3495f5daa3849c9dd04bd513dbb30e8
-644edbc79b64f7c22a8e7590ab84e607fa1e9849c7b5f27e1ef21661898e6fda
-d1271fee8ed88a3bcb0e281458e1c7ff0068a7d94b508e06feb5ae961a2e2f0f
-eb80e8d466152ad24407313fd123ceb54ef1f8ae5b9137a89b4c2c782ccd70d7
-e3eb0b15b87122a6c33af361c19bbf64f7c192f0b3a319bdb5da389ccc0b9ae1
-111cdfbf8bd1bfbd7649cd4d262a9e03714a4ee46a1a48dfdcd87c842659b8a8
-dc474d69d998050f46041693463b558471cff92cdc2c29b60254fad319ac272f
-8f54489b63771bd182b92bb869275e0a4f6ec1de4830f49cdad6d73de04b46d9
-1c62086cede7d96aa1bac32defbec9608f963a0a09bf7c27fc5acf04e52b8889
-bcfa27ec4527cd0a4693fc11d8b52fa742ffcfda7a893e087e4d4e2898383916
-f19b7273cd31fd7bc82d02b3c2c81ad2849e6cdca5a03f18461aa70dbd7f61a3
-6f6461a5e540e95cb0d8d287be12ad032ef029c29d47f15121a52639aad590ce
-c0d83f8f97277a08a67da5085c608b10a1f1cf498e75514c67fc7247cdb4203d
-5d72f12330385154bfec076b07d8e5a3e2a90830dea7e1f3d02b1907476c4c60
-1248af0fa77faea617a3f26a78533702beee40cc156c2cdc025b50c393286db9
-88aa919ea0d1f9d4ff734d98759f56bf9b6377e960485f0412bbfdce01492e8e
-900f22f0b088fea71e6d57e798efab73c11dcd367b7d0e45ca59c806feacef5e
-d257296989838e436b0f6e80bc4b989a7bfa1dee1ab186f0d001e0b50494edd7
-7b6d671a5907e8fe28dddbdcb163000060dd454de2aeb84522b2c047ee2ab0dc
-aa489a2a8affb95a50e4104176ae3dabed9d0ef8128b567bfbb016ad8fb3ca47
-8135f2a8a71fd987d3f9e87f864934756a65cb3f5d6c3f6c9ea796e85aabaf56
-79075315d18f420d037f4a24de26ffb8e1aaaf169665759d74e73c7661ca2723
-4d8c33fd9b5802868360a42d722ad913dd1df87ec624aa643a648fbc66ca9552
-9df1d29fe249d82d5d7654d606b1d6bd814637ee73f38eb1eacc6a46c4908a87
-add4692aaa49f3fffef89366fb74aba70cd115876c9c1fb78930ac59d29921b1
-f5e67d9841ed4651f34bcbabc8781e79d3b2c141ac89b37a079adbc5779d0d94
-b0cb910725b1e4cbeda6a58d99e6571154eedd378c770abd8b7d65b42a135688
-073519669324d73f0891ef83946156642a019cf0ed1ffa216a298399cc7ffb58
-f3d453429a712bca43f77dec8e89078c98e3692925974642309817915f1278b0
-97335251a9be4a6a6569b6252fad51089bbc91facadfb2a473e8df6273c4651b
-12a57f7c2735996642e7524980c5f58c2f651eac4690530a9263b566e4296846
-650f5db14699d6c5c2db390fa85ad243c250bc399b8e67e376bc8f1316d5334b
-e276b3019b932089b95e15db0033a0903a42a701deb64518634b9055cf98bb09
-e54fbb51e31dd69849c00d0c160c2a9a253baecf9c5b055b7568d547635b84d6
-b1f2fe3d074fce320ed79388d034ec570f935dab98c42cfb101c8d1e35e3d36b
-ecb152aaead0dfbad8ff645eef0a8e5f515b45ec3f3ba0cfdca784c16f1934a9
-7b9a8c585434626d2c63b629a0fdb72181d1cb4bf77f19d1753d923de2f2755b
-d2f23f8dca7605741be7d01da13a608fc090077878cda5897bdfab3028041c68
-1107416a6cefadc1758ad359197dfa9da8d57206f48c0e6e8571ac91c7e76392
-8a87c49cc560a8c7e518eb91faf4f9214c8245d5bfb7002bcd15472373095c44
-e41996b4eaca71c31ff1486aadee4fca3ba1c266f897ccce99471647932cff2a
-a6f22eb29c56d7c52eb4d24ea0ce30515349219cb7831428b694ddc0277738b1
-747557b5c500787adfc2ed266c9f754a9ef11b856c05dbe93ab8e8ceaf36b4a8
-c4d658b331bb1c0a39f4a27ee58d7b868ffbee9f2b4a9a04df3aeb2e3b37fce2
-596c681bfbba5efce13ad045eff1a90f6ee3163851c315e0c0644373d187e7db
-0c578df822dd1f4d7f370974da1e49203cfdb96389ad11c3deaff93fff81528b
-fe828923218745b2c0a04b2ef7b3892c3b3c63318cf64ae90ff45508dd1f96a2
-c9e53ee27784c5cb3d400def3b7efcb12b5f3a0666f38ff3a631cbe302d456f1
-3b97d7390591714ec0f4176689808e820e505060c9b1096675b8d9c3bf12dc5b
-3fa883a4264fd03972c298c54ccbb353743c205b257327962b26ef90a7740a82
-34b0e6ffbdf432f78540f02f31975289bc0fe05310329180fa3abb024ed6a8f0
-5cd22238adc7787e0e04731c8e6d14f4a62c6ca364e92d78ce9d6e638fa8471e
-155fdd6a
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMMI10
-%!PS-AdobeFont-1.1: CMMI10 1.100
-%%CreationDate: 1996 Jul 23 07:53:57
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 12 /beta put
-dup 14 /delta put
-dup 21 /lambda put
-dup 22 /mu put
-dup 23 /nu put
-dup 32 /psi put
-dup 39 /phi1 put
-dup 58 /period put
-dup 59 /comma put
-dup 60 /less put
-dup 61 /slash put
-dup 64 /partialdiff put
-dup 65 /A put
-dup 70 /F put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 78 /N put
-dup 81 /Q put
-dup 85 /U put
-dup 86 /V put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 102 /f put
-dup 103 /g put
-dup 105 /i put
-dup 106 /j put
-dup 108 /l put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-readonly def
-/FontBBox{-32 -250 1048 750}readonly def
-/UniqueXX 5087385 def
-currentdict end
-currentfile eexec
-80347982ab3942d930e069a70d0d48311d725e830d1c76fba12e12486e989c98
-74c2b527f0925722787027f44470d484262c360cdfdddf3657533a57bb16f730
-48bfbbfcb73a650484015441fdc837add94ac8fbd2022e3ec8f115d4b4bb7b7f
-15388f22cc6198efe768bd9fceb3446ee4a8dc27d6cd152485384ef5f59381ff
-da43f2d20c8fb08aa27ab2015b774db10dacfdcd33e60f178c461553146ab427
-bdd7da12534ba078ad3d780414930da4f8d58abefd45db119b10eb409dd89792
-3c6e705479464a4b310b58348c4b42393988fef4925cf984423aaf65fea9f0e6
-4629953bcf50b919d968d99bd185f83112b2759cc411764e9bde677f57c5ee5a
-c555448d5f81a16259ded1e11bf4119d53e8ab07a802df900d3a2d5ccc1c6876
-d29c5e9effb7af3ef83400b0910c07873a8c56fa7b1eb1ba426043b00cc95dbe
-dc6e136cbbbcb3f67509964f9f281ebf81fe5b018122eaf66c4a838487e82e18
-6e006093042848a903efb3469ab6b4049767aadb95c30408dfd58d8a10f4cb22
-168decd9f3ee100f07b49aa44c92139b669cc312ba20192454eb2375be6284b0
-26659d964b96ae82d4942e758027fcf23c25ed01115af27ce7f20efe2a822bb6
-84004f20243a49c9e93301fc21b80815c033c3e2ba58ef53da2157d524b395f2
-b37abca13bc6a2f42e824ab7e47106176b0d6db267fbb795ac7425582df2e3dc
-55863468a9200742bd7b552c48f8cf58bc21343bd3b95abfa140f33f37c6f3f7
-8b0d8a5154eb7c1f62ec598267f13e841a3e64172663935ac8b665d86540d316
-ddece329c008049c5e74b27d59022c5515059bc3b89370b1bc6a169c888bb325
-e0b74282d6f053a50da4024ed1e433271a32ab8c17d41c632b41cf9f3ecd5fe1
-24daf7aea7ce8a63047b245822930d517df7baaafa69d2d17f7d93cebd45416d
-f3459365434123a76ccf883a4973bab19807e1f0c4bab03a45f7ed69ff2660ff
-3963e4def11001eec4238c368a39d874fd30b3c14f4186ec7700fbce22abe468
-eb32baf7b0164f8f21a9b5e706b91411faaa44467cb2180ab03de375c1ab93e9
-76e11ab92fdd4a7280a6d1a8dc65c4c89d04c8ed6988045a2a3de9a4c7b1efd3
-75b6c82686e73bb775a43d527131a99f996092d2fd0271cbbd894159d9c4349f
-963f8cad05b7a3474a493fa92e3a4c36c32b4a1491f478ce1cceb9e8afd88e05
-14a1a9794e2f5811abf84a3cb6a981393332eb618459aa41758cc7697276d0ab
-1bd1f12e879020427a05393d90b8b1f3a26b29a774cb303f3a8773b7c8aed695
-ea0a2395efe28a4a42a092ef70fcf011b65b4ef23d10d1a62c09f6d8be7706f9
-e0bea08b0974bfadd7097a11ca757972f639f771dc640894cf69fa1ac8ce20bb
-93a2c420dcb61e408b4c49416756aa9ed8767a73e2b287903e4fa7ea654f6abe
-7dfbe52ec02836ff7c7c0dfd17b12d9ebd36eb04ce62b6fc165094a72a0b64fc
-d4837cc13eb9c1955d8988e89d0fc746d572e45befc8fe20b493a08af05792f3
-3ea5719bb43a6b544868707a12c68e31f85d4a80706451ece8617690d580c991
-f4deb6f83a35116070be36242b3970f90b2b34457c55436f19b5fcf093d07e4a
-19e255f8434ab0395cf2a4f1bc58e6fa989431e13d96633109e04a3f04b8493e
-2e24c0f87e21eec9d88cc43b6af8b3a068c3beb2f0f5182cfb5e56b69526a014
-e6008183f67fded09046ce1221d82ce622e013c4cda54c9f1ae2f58f5e522378
-b584a2eb9401c6ba5780994eb99c35265d454a3aa0b26cefd20d59ecfe4be62d
-ecb8256b056ed27ad45c05ea569de7ee337b19d7df6737d2dcf68eccadb327fd
-51bbfeb958f1b2a0b4450435067a1f8a959b62609ba8830695a97b11b86e5f3f
-67e34832bd1be9fa658d9de712abad8c3282164582efcd03ff8218ea8fc2098e
-95594fc4e08b6edab8d8001fe4bf88bea89df97e63f6382c21887720505f6e8b
-5738b9da76f4acc28cd941ea7fdad45cbcbc274cb24c8805bda158e415a6e3bc
-3c989e6ac3cafed5604f152a9b262ef18e567d0fb0eabc88a8035884671f2e0c
-827d9fdcbec7fbac02b932dbdd788360039c6a6785da78f485aa5a5933ad99fd
-19ee71d6c930b12cce33c7a1563bc1834ea516192246f84d4a6c4e47652cd8f5
-f5ce53dd72198eb90f490434b55ea637a1fb46fa799eb283efb88fd8d12334b0
-83f112b08aebe46f86d092c4e9f8d97ce2a3eb4929cc9aabdfe7c4f67f97d9b6
-6c8d70e99e69e00d7d564cb7f5865b27f99f6aea21379dace806b799291b4c59
-b34557eb14ed4f9196db1a817cf7688d2516379e13525fc8a0cf2b586b55281b
-7f5657606a289f185cb5e9d8ee9ea190f8ee211985cd909beae0288b582f3234
-4e5a0d73d98518ee3279d3d854f16560b20c72346782b8373c030c5e31dd9dca
-40b03970a64ac36006aba1ee3407f38a7bc1d34d17d6eb8280a830b2c2150db3
-c67a8a930aae2928984f9e2456ecd309884e0e276d64a693603cfa01b784338f
-dd0a6fb50a9e2dc18c9a49acfa440f648fac48457dd08ca486705fc8efe3a4b0
-a1b345a521cfd974b35eeafd7668329d89962a7bbe0a5a786fc769d2753cda67
-155a62850252b0dc59c735112058bb713d8bf5c93a143d25c013c84f99cb7c12
-3d813d9d0c3af073db48821b8d9f2da5917a9ef83af8ce94f289cf54716080b6
-784c8e4e6d8f8b4ba8ba62401d8c89ec602cae99746a3918a2b6edbb1d6cf375
-8814b0f2a2f0e9d9934cafee9ef29d8bb70ee46897cbf286ec49dfd85f90f651
-040f82829caf9311242be2f872b789deb0d57c9e9b9ff9e8cf33a556181f6314
-8c19f8c7f015d6f034ad7a70efc91818fcdec1b25535b8e2dfe9d526931b29ea
-8262833ca4bf3213392053aaee02a01faf431717d8a3b93426acdda121ab85ce
-899a758d49d79be5b2af02a9bd1844d972445690f4dc85ac0bd4b4b211859efc
-422121a29126f4381c3fceb9b37dfe526604d9d0a187b68afd703d4f38b3dcd0
-d943c5133add4eeeda2186ea58ab4c28f6233ed8304dd65b5217cd23dda4a449
-6556679cab23280bb49a3af9b763a4c6c8e9dcb3397c47dbaeb139b41091322b
-e4d7e47f611c435945c2ecca69d9146388eb6913616d6d9be7449f5d323311f6
-7b9a95fbe6a4e039b398a806d00a4e71248a6b2e9a6918515cc38bb0a4cfd323
-1c196043a99727f1bfbf46ac0ffbe965bb2c68349874249cd366d8b2ffcfd4a6
-a7c68f9dc77c01bc6e9fbe9531ea5190f6d9e86a310e456ad87862c8f187f5c5
-89320d6d484fdbdc118f9867834b10b4bb5f14693e725524634b5d5f54a5185b
-d9d8f51b0cb2ab963889772ed88d3703646645601d4d1efc080dc7481bf10047
-a9346612b013db61c59267f4fab3f386e03dfd42b1ae58dd2e6e9d70a743ace0
-c0e1722b60ac000099d589df4f6ccb7824e4330f373c20bf17bb17d734e500eb
-72eca1ec8f6cc4c0ab331b1fa5a35f06bc0a8def90217eecac810096d6ecdb77
-ed0a45910059f985f6aa7e47630e370867ce961ace19c447e40720840ab96f4b
-dc61db820841d9d1794a2be4d0dd6e8db366dec26970c7d737832471db257be3
-7457e62aa194dc9a174962dce261053d5514beb305626e77ad1882bd6a153807
-97408a8a6893f83f38cde0297a37f566a83982200abe8ed7c50e01867d5bcbc1
-56f9cfd88f14c42404767057b9a0b4a805429cb6b117aac30cd83ed6c1910444
-f1af8ccdcc5f7d4946f1d48c1849bed26be6562310b4979b6b8161477e2a9993
-09e048100ff85a14332d53ff67e7f056bc894e77b2bf3cc08df4b6d46283b8ec
-fb9cfcabf30c1096eefd39a74d861462317d791f63e5a858b23ce21a0d993a42
-c2b271838aa79762a9efcfd29e9b538b991dc8103ee5255f6286c07aabd47a77
-3521d3ffbc4ad4125b2b4455a8236ff725e61f19986f3adc7fa7b34890b202fc
-1638360144c1e474519f83588585c289a7347c3f3a675a4ff7603dc66d2dd9c7
-681d4bcfe1f4614cfe623a9480eeb51dd1da758fa6f0c1e21acc3095288b4a52
-bcecfd5f590df206d43ce35a81a5c6fa294c3671a540c967b27a70d079d50d2f
-bf688c56e3bcac86db01a8b9058cd06d9ebf8146c9da92a18c6c5ad8a105dc42
-e9b9fb1133cbd9ed62552e9669029b1afe510fc71933190dfe1676b99452d9b2
-b5743f37c581b3348bf5d3e3a9bd81c538162b6a227bfff480165866891c5e7d
-20193bcdf8a5993040bb71e7ae002d27fd34970897385bc1f815286886051bb6
-a0effab4055a3648a2c5eae8fc2e42b5839ca0ea2ec0e150e24c801f7a2d082c
-4c0e37da1e7ce037ab0257591f0303e5a1555a301c32a05288d100b747376654
-29f03f17e078d21da9dc428038e07a80ffcbf5617d8543efbe87b9200b01f0bc
-a133ecf2478973cafdd00404d4a05791cc85c86c2cd2ce6aaa00a84317ee2846
-16c7fa1e142e2f086fb070cf17c48d597d963b53ec82a4f341546b81f6f00b1b
-c05c60f48e3f1bd68b2d4c96d7ac6ba1aebe765a1f50b62b116f5504090882ac
-ce2cea9e38664a5cc60d2d9caa99a2817f1bd9de967dadae69cc73977695a2c3
-501247d1ac73065ea4bea71f5b257ac09b9d76b092209913b166e0ffd0d5f4e7
-1363b74aa8a37f8be3fc1337a60d4615a61ec9308d93b2f70c8d92d6d7fc29a2
-c3064ce24971c2b8e1b07e920d89ed0a044e0050019fd4233d2f57c8f092e836
-fcdf48a441a50da0ec5c38ea137deac64a3d6a527f51750283bbc4783fa58453
-372bd9ad06e9f183570728c2651788e3018e83cf9bcd7badb3279bbd91b1a015
-13e97d9c9e37cbc7ba0b43d7c378be25817b679c1a0574de0927268f9a0435ea
-e49308dc8acbe4312f42924ab3cb66e4111cdcb11f10700825378e5ddfdc8170
-6dccf55d16d3e58ccac7858b11625e9d1965e3effd430df3ba229b0def8062d6
-e916264f306df9ecbed95d08729bb86e1a127a3e8665b42964b96871e361275b
-e0c2d5a8de8fb36fb712ead4548b10623437f0bba56a35bc06eb5915c27aae65
-c367f31e87badcec7b32998ec7c91f62be646140afb28a93ce0518196cabbc93
-73e7de347d342365688035b612def1e5d558370d747b55cda302038d0754fa59
-3ccdd2232b51c0c03b50946a189b29c0d2839e068fb95ea5b4ec54248d67659e
-c4c40e62a9ce197dcb6ba5dfdcd34585c5db5b0326dec02e88705c5b65222503
-0ab1ed366ee0e8a6d0b6e9a21bf3d3522956f9f309c21e79aa78346587d8d478
-718729765ed66668394ec3691dbde3d8062cd7953b48be4fb48c6139d0caf99a
-322099402db1ead0cd282cfba49782ee9ddff07a390dfc0a1d08045608a80f81
-f83de3dda018fe309d2a9084928b99137552bd9b1eecf33c4d275822dad9e448
-a3b1d9d48e2411e2bb0e7ed4cb2029303d6c59e377b0a3c15ffe4b2df0877a6d
-883ee027db89e7a9188d8daf0fcc62020f08727423040a97d0a587c10747789f
-d413d3d55da0a530e49b3b49ded82568d722f681d3010e51d848a27b9b6afd22
-6a6c0e7ed78186727fa4fddf136074b0367bcf3103ea41ce6298f9688ba8547a
-aab453fd860847c3a36584990fc4ec252a3a41ed9e6434a7494c79a2db1626ab
-eb1beb1ddead0e082db5ad0b126b38a4d177e800f18920dcc610a8cd39e705ef
-71e021c18783eacf42d5f1225d3a31d3f1f6c87e1b7703784889f560cb8e5c38
-2163bf533ac305b1efce25cac1cd09dbab5c2e1cbb84a8cfca5c4d35299fba7d
-9d49072d27d04e13c8c1030cfb66960e3d1640c4bdeb0b9652e7a82233c340b8
-0e7dc44597f1f4b25eaa9a392feb61c120a1354b76e3ec1b39bf46bf63c88e42
-53317a6f9e21923cc479ca2837d934b22f3a63de42c16fefd68c25826670d3e3
-9a820d6de32ea20f5f51bb1213686883cda8fdf46e7d0d62c14d80012460a3c8
-c72b2607323ef921eafea39bf61ee401aeaaa277c46a8e9c2f5d93245a3db5e0
-c1a51fce53e31991a5040bf1565762d52b8851e00f27758f3b1dbb1b85709513
-d33e295205802b043603c9565f0921f267d856e111e8609d6dfbc3bdcf742829
-eebb6cd59ace388d30d101aad627f29ac3f0b1eab30de25a35343d227532c512
-75205ecbe9b32f8484e4c1227145c5189ea3c073e40f10e655fe3614921e7a3a
-c4e67229b82438decce9b34ce1d36223abf8eb6d9950603de32bc9e0c7daf092
-a811ec1d1aafa3e3719902976a4b6a055465511cff3744d8b4b546386b89eb9a
-49eedcac3325a1b5001b5b2a162d38c3e12577285c9c489e6482684335189e2c
-0d16ed690dccaecc8979560783e5d50e0a4ad066bd181076859a4416069a387d
-9f776106722ac91fee83013c5877108d83a105a6da1c5b2ee11d09898e40d819
-481fa8ddf7a8f8baf3ad95265f7cefc90bfc55fc09cc2c6f45eddcd0396aecba
-8fc6642379378e674c7e64771b2aa8f709938253f6047b6e8cb6f382c60821d7
-f9803d37900d0afe349e83f0abf2c67955ede557809af6608986e09f895cc37e
-ab14c0a448b29579594c52f06725ad78f8e7f2a0e35b078aa8629509b64f481e
-95cb2195b4c53782a17b55cbcf43f5741c614c7dc57f87afa4ef1239042c3886
-6e8f550f23ae0577ea75e9574e0ac7fca96755a4dfc0eb02bf4c1f3be82f75d7
-ebe47928bf682642bf7f2ce3da842d6275c909572112f8697f7bf8f8fef1b573
-ea68613bf5cd6860512e1092770ec59d14aa4a0794ee60dedc11b0c01c1b261d
-a2a5aed8a3fca15eba32ff78cd4e478acba05b56b042d3126b8a4a005a56791a
-da0f64c80ea855b2ad43b494fe079ad7da3eb1483d7c9d6ae2b57507213e8984
-4251af0f718936ff84ed0a2e7c3ef1abbf9b81a81012a3373eb6e4ca2ad8cb1c
-44376c1e4fa13e994488b4cc638c1541c3c412b7227d1044449838d6734c14a4
-4011f5611d0f31faf52f5f1ad4fdf97bb10851cb0ba814ffb8522b86d194d368
-35f5d9c0ce02b1d9a76dadaf71da54fb2fd8b476e911b62e8646692c2dd5fd23
-14daf09b539067d657f9787de364290877bcde1f721abd316ca19b3fec5fa07d
-da25a63bb94022ec52ab6a858562fd21c282082a78a852e3feb7248860d7aead
-0396cbda56541ea44af11923338cd6ae449136d0899b7f3fc5571d3da6767126
-4daa3b010c01db57960e24ffc4d8b0a73417cfd445a46a73811e32810e1ca950
-4969cf44399d9273ced22912f42479ee954e5c61ed6b52ad655e8731e364e811
-237b645fd6bbcbc7c4222771596f5f9c3ee4f233fb3c3b56746d7fcf8bae3828
-9d1931d6c6977152433c47dbb267b1ca36d1c4468680f309d9a66730bcfa16c4
-3914393cc8c277393fdf4bcc6904bfa118c6765cb56ea4c00c33a96a03fbe5c8
-37dce38171360b07c180c401db9983359c29be4e68297960b2ceaf1f6b55078f
-227dc4dfd50344ae6151f8ffac49a5efe1b454b83317f0315e7b574012e60374
-c677961fe08bf76d1cd6e3865edc3dbd679325ec9e0b20f497d993dda74a9caa
-dcc5b366b48aefd55671ceb8f2236e6df62416fe48f953761d6c515289a16eeb
-9859290e5e389e9c5c7d082c83533b6065ca18b6d06e5678a11ad419e3a6f5a5
-5f459c70372a7f0419766a6d42008e679a207dd7989e941d6d9f543012c1935f
-33a553be813923e9137a2f0d40fbbd1ec98a86195adc0856c0285ace5516c6d0
-bf688e33b1339fd16632f21dae5d2837af15c66054c987dfa62d9808af608851
-e8da8d3be44128ba4bebf5f372b4c4ce8565652d0d7aff995fcd283c20c25103
-2bf1eb8a5fe4b8533f5bbb224239efbdb0dec2d9baaaa030a78d0ce6d9993a77
-7a2888322ccaeaabb2a1d2a501b57c8524e74a778e3d6a80b7b46bdf9780849a
-4d76d6e5f79d5e788b896ba314d6a1da2cf09582656b70100fbd820ac92c66fc
-57cdae03a4b7a2f0ff82c41666bab6b62834e72ee538b74d3d25a0d7c83fd124
-35997adfdb586cfed7e13e59b4cf7f844553fcc563ad85797ae14cb919477716
-0f230aa5dd2f1cfe7e8da916555b8dd4678ad4df107cac2f16a31ffcdfde5003
-4b7f04addb3f69ed1f1af19f2cfcdc439e6c8fef5288c9c310644f6dc78c2d6d
-65289fe2ee32dbe76a81921a7a3e5a2856f7e5dcb848691861928b4233e00093
-ed5b8d6e5b8c83f5a5247e8443a82a85b5961e53b0570abd120d19592168bd7e
-a6b81a245f1c9ae5899eee3d3838018343bdbf8e8c5d90e50880218b021a4474
-842760eeeb4ede9af41a5095baace2582341c422dc36c37e5859aac59aa9b657
-b40c9fd648ef69ba15fc05fbdd1e42d5190caa3b72612c8c7cd31cc3b77cc81b
-0be619df94a3394a1884708c11f904105808fa74b44b08c3151cceac9820b74e
-df6fbfd954e32c09aef856027ee074789a9bb0b16de1a0e8ca1695630657776b
-054b560fff78bd2d9d56887b05f62dd516ce5201d2af5881efad7ed75dc11e78
-cd08cfd65cc1919b038bb338a808ecf6950974accbaa8db694cdf98605775889
-0fd9a047fad18e9bf982555dcff94082919aca04fa1b282efed4965fcaccafe3
-dbbea3ab4fbdd40077acc9d5ad9b3b724e661fc8239522038fe887277df552c6
-3a59e28621a72147d62f90a974689566ea6fa310022680a0999643da14f1268b
-87ed9f07152faef12905c0005c5af753e5b22d68e2112484d315f57c1b602769
-0df965b2d9679e38a68a0edcbd1ce6df9c7864f938426492ff2d71a759389073
-97d577cf45cc7a1b1720fdf93d06d9c1d114b24e05914a36c74e51cfe6f4dcd0
-df6bfa44d8ffe2255c9b7c4d0e01f28fa3e55ab90c544411a418f80f206180c6
-5ea414ef1968df38ca341a53db3b1cdc0bc0419a3d59394061e3e4402a48af65
-3bad74da7231c2d670e8a582d4ca5a7952beed6b211f2e1e187da899ce3fe648
-337e7489e135f78c52d5bfce51b945db0f72415a9f65e73bf15590af07dd2caf
-c1f8f685f9532c5bde13d52df54dfdadc2663ab9a98c9d613b393a561f8551bf
-18cfa630baf1ba0287765716185918346aca6ef21c317fc939f302c7a9084d1e
-c7d328888ef63c03c10aa200f62d779320ebfed643313f806c31bfe4ccaaa706
-36342297e4e6b45817e89d41485c16deb935df0c9614bdbee682a7280ad66b74
-8868b5307e513e969bdb28aebe3bc583fc73008b1876d5d23ef5aee7c65ace41
-9d8d49fea2d233d5787712a06a64507ec5237f88dbfb0796561858eac3dd6f10
-3b02e93ea3d11fc94354ee097540651df89d21738e7abeef2af8cae9c2c66b6b
-c3d4a4608fb8cd7ba6cf4830367353984c2429fd7ca631353233839ec5bcaef0
-f45de8678cd357c3a58581d884db17237183c3cff4f6ad1ab3c90600f1912c27
-23312c05675cf0225ecec06c2f700dd3101e05b62fd990c8a780a7c67d309d15
-4028f3ddf624d5d9e8b6a589d9157765d221fe6b1bd7b937edea1481c0edea60
-b06bd5273563abe4eaffd6cf8a5ef7e15d620f54d13158816c9cf62901c6f4d3
-1b016afba2b5ad5e7312332514957fd0dafd608a45079d90d027c537d28bd038
-080867d10214648a6a97e6c207b488a17db10022e03f8431cd1fa5e1b02ee7cc
-361cca6df87d1ea41f862efd3c271b9a4b4957210d04d55a8fe05f1c3609e81f
-473ad8cb6a83493b23bb3fa4050736f20a54d63a3f2125af5edde712285e1a88
-d810d30e7eb5347a68f68812cd7e518a73127442990b2010abb8f17d3b1f9195
-16ac7b57e79de2d8752de0eee1f0d2a851ae02faf7d72900edddbcb5783cf879
-c6be384891c274431bbc9b07e4525e6e766593401cb0a1fd4c3a2382ce872c62
-3febd440dc183410d697f558644877dd9351e40ab7419fcf19f5f3519cfd1e0d
-87bb2ea2a2c71bc26438047179d2c0bf8ba817b3d0f9296ee7794574283699f3
-4da47462f60a0e6d4720b4668bd94a3a48c93a4ceb4c188400615d640851165b
-53551600e7d60c4e3c6cb3924544e8e64d35d59a17a215828981457a75d9e0f0
-cba401b64eee8beff5d1b584b722590790cb500aa321ed786bc2a9e74ca7b55f
-b35251d034972570ab8ce4452ad3e601d627f4ee61a3524bfa8ee3b1a4e3daac
-394d6577459f14af7f3d98321ff4ef1e9b78aaef8e1f58712921b7da9c5cd7d2
-c0f2384a83dfa4a3f68c475ba1bb955f5f235a1e8da626670f0548f1bf95776d
-f498f5a12ab40a89ea2e927ba3519a7037f5460dea7db73683b9409fa18e4e30
-1971ae782a5dd528adae11a2e275b180009ea11f0b5dafbe0994622683baa049
-9b29426357211d20eaec88b9a70127abb08f9b91ab3388a953f911915a78511a
-baa3389550d5ea1e84340f3444e250af7f43e681700a8123feaf4b06a8b373f5
-43359c89429c1d47e5cc4fcba2f34d7f09ff069d1c7f05f1c1d667729cf6886a
-ae98803fc710c435d5b1e1584f13797163f8c7b113d26adc38512ca90ac0353c
-463f19ba813fc866801c55d1e575bf0a4e97935101774bf87b5fe5c9bf67044a
-9b3e6f7fd46023e352f004a23ab7bf84ac03f4e4342e7b6be5f99900e81e1d60
-d853a2cad61784b62d5d86cf2e535be99f06e079957928bc58d7c7a31c371796
-6853ecb5f85084262498439184e90cebcb52a341f67bc9943a0580100b7c782d
-5c36a61efafa80e3fdf41e4f63d7e01ad53abbfb979afc9dc0f5c2cdc922b747
-2dbffe17403ef2253cc28c8f60c3fc183df0f2db1b108503fdb80565d730c2e7
-39b2214386465f9c2bec07b8e6d64cc210f9f7286e40e8d01e167d4268048ecf
-f068ea80c4303a2de66b651c8166fa314d36453a281026d58b1f9cae623b0df2
-a3d16f1e0404a3e9821efee9a67aa96fd2b3b2ce010ac9ee08751af5e29de43d
-b6b2786fbdc210c7fd1e55591c18672fee9e9c5675184fe56b001be88e23303e
-0b36a1a6fbdc703b768367473bba77eae8cc7214362bed6f503026626e5a7bcd
-960097309cbc19aa795363b696c9d8f23d36c4ae0ccdabb2ca499d26d273f14d
-31bd002c245ac404db88c73e3d9bff37db63bfe1a98339eef889a1d83ee7b511
-49c41c12dd2203cc5a1a2ff4342cccc2173c13da7e4669074be823cd9ec85ed4
-8406e5427360bf9b2008056e1224170d8add21a16ed847e8201cb3b3e066c9ef
-143fbd7152201e003d2f3a542cedd210a0c3e454bc32337d2bad6e47d52990bb
-2f2194e1757206283fcf4dca1c21cddf1004fe8c03f1f99cc3ffcfc5d184f43d
-67b6246168f32e7d1c35399e2fcee1af8ab2a354eb58a8432d1f94e11229d1bb
-d7ad0b8fda04ba5619c0175f99a0c937373523e0cb2e756c504c83ea3a262086
-80
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMTI10
-%!PS-AdobeFont-1.1: CMTI10 1.00B
-%%CreationDate: 1992 Feb 19 19:56:16
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 12 /fi put
-dup 45 /hyphen put
-dup 58 /colon put
-dup 68 /D put
-dup 71 /G put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 122 /z put
-readonly def
-/FontBBox{-163 -250 1146 969}readonly def
-/UniqueXX 5000828 def
-currentdict end
-currentfile eexec
-8053514d28ec28da1630165fab262882d3ffd20326947b1065649b533eb5e9e3
-a88a87fe987918a687950b26f647d6e08bf14d983ed1d4a8ca1e2da8d985f944
-2eb916f5b6ed0697ac7c33e1e36a3bf460d34ce45f1631871097cb04f18e3889
-4cf4ac1538eb19481311d24fe3be7beaa4a3730e8b4831fe59d6d9ce2e46116b
-629c7ba2f9ce3ecba2f43bc162a5a077ca1b2882a42afdcec3f4b75b5d63e0bc
-8e5dc95257766d8ea467ad9cbaf47be60f797580cced6884b3a68f70c91f4fdf
-80fd00ed9139e7f480dc3a76af72ad9b434187730bdfaefe4cbfe5c7edcaaf24
-9204fd703011932e5a3c27be468b7dab69daa18dbbb6335ab8ddfdc607961c7c
-02582763fa069d43563ba17704029945cf42fcb19cf78c51df0ec4d851086d43
-c1ab38e865ef36865fff3a08b01cbcb070ba4893f7482dc7819ad03d337e520e
-7d8cd83bb8ac7aff4df36751f4f12aaaea2b6d7260c09a26e987c904003e0723
-7dbcc4a8e4e85cd3259f40d3caf55c742cbb40ad0db1044c20a4f122a63f7b81
-1d945bfa69662189ce4d089464d2ead9f6ed60b581b04114d5d45e97be27a576
-35154e9b8464f2a0df18da855eb51b8f64d3054b0b2e84621f025a0776d16fed
-b988a43d2d64c32768dd106b9f541ae8e68ac0bb7399e16f4d4ba074b2152d0a
-4e9b5bfc21bfa0d531e28165e518ffc054dd4ed0d74eca079d20e79670419f92
-e03bcbfeecf3554d661596f6f29e12170804d15a250d917ffe7a8b6e8fa53047
-1ed97ba56481589a65ca13619129f1e26affe6c22f0c38540f8ce37efb6e9e9b
-60b51a5a9cb4454fd7c7f92f2f9437159687ab590f35b946a54491a7739c9269
-e0f1fb48b129811c82edb3171cbd5105fe65906974db8a7da92f4f43dc7f6b36
-6981146d86d23613a0b38d9d6191db9fea0172e982cb1cc50e382f69da1b377c
-1be9407f88a2a761b56f398467a057f35d18c01cc377e0061822b94abb98feaf
-33e32c9bc59416e65491cb08cd8de429deca10ec4765d20faea23f130f5226ac
-4d27d24db0385cc31b8b3227812d2c2fd223d0b86eb936ff0bdc45a281c544fb
-d7798b4aa264d33ce1e3eed7c77fc4942637b524a072aaf76b4aa25c250c8496
-d0787d1139a647e7165191dd7ef7d25d830220b8ba0e91b1019c1541cd052faa
-de1157d53f434b7002e6456b12be1b16806309326894d6a0a3485f24ef480e9a
-14342b11ce0fd8891c13c10e390a6fb53c39847f4d08d29b5b7ffe083aebe339
-5b1f4ca06296feea1e03576816fb7c1df7ca971e36c78b30f8721577705a7ab9
-1c9531bda0a59d24edf8e82b31b8bc5a1a12d9c07af1cce3312d00dbf1b771b2
-6c5589abd3ed060751f05846eddb31de522d181687e78299c0ff890ccc069a4b
-371e360c5ffc3d65e8d01215c6126bcb6caef861c1b6a11523eab958ec503309
-818ce93536ef9474838e560e830c527971da10f4a50108a7762127d5f40e2d2a
-5422e2cafb000ffb8e7c99f21996044b88ac6d80ad7f0bf30819ea1ec68bc5fc
-cae4c05f4bf371a1d086241258c581fbfd4de1dc42cc471c13fc760eb996be51
-bc2ea2b9998877d89fdf034d271d5f85d786b7ce92e532e9ef649b2533b45060
-38928fa310feafad7588c7402bca7b7bc26f803c60e9116da753650a88ac7a59
-36b58cefc3228a1e058d3a757690c056bbfceb35bf3a845a938fed86cbd798a3
-9850be5e69c72b913485a89d7347ba1fa91bd36c886402da3f609a6351ca109e
-69fe0506461092f65449e9db2a8d6e5fa4942992a335f740d49ee3daf044e66a
-42fb1f9f8cf3e73772fc63e93490c7990a96218a953e52eab5720a4696a1d8b9
-3d6f986693331a2f656cf7b4b64eb1e4d9e22215f179d33f06fd0db415b65fcf
-e625276719a077e79fb1d92f3211c968549cc645ab67b01b0eee62f9bcba4340
-f39870264e521d39f0ecfd652b7ba7214254091e16458d3b32e51f7db37bb132
-8973e4df7a2f52c7fda7d4d7d8f263ccf85cfe46ff489ed1a5e78e0b534bee9e
-970f7fe9ada93a5f1156e7fc1ad9e513276b55db0a28d34296ca85d28a0832bd
-dcbbd3159784b6628d0ecdd905b431499e45a463fa5609ce615a19caefb2f106
-f0f92db3d6d708da9d3d8d6e0ab1496bee7d77956dae5974a2889df2dc02a921
-f71f4937f15abbb81c9bcd22fdf190530808881a346b22aba6e8b0ff5677cc19
-7e5ccb56a7726450a2cfbd2e5d87a4b6cf8426f18238a23424b3b92d73008998
-1cbc1fcf86c3eb58e3babe6c34129605fbba175f1ee19276a94712bcd620574d
-0b45791aa9914585f5f5506ea6006e8f9482bf1c55201c0bac872bd8ef2f19e3
-58560c111c367c23ab327c5a9059c8481a6f030006616906d920b6a6ecba3a04
-d8bab040337fc81c3cfc7ca06814ceb40de36cacf79d3d4b37859b77436e056d
-29b3ec580d4abf59a8abe4603ba15c6b3562f38b2c85bbe20ab2fbe9cf04c981
-477119b4b670b13873a58a0939aae3a1711a648b09d970abe5cf73f4cd65d61f
-7fd011847173601a50badb334baac5043c9ff088901b23ce8d96519ab03bef3e
-5cd038cbb4e7d5949604c46b8b105724874886457e61b642d3b6de8b469b5d81
-433b9993631720d28ced32b3658228e74f9893d43835fe5e3e0abe338df28e56
-978a375c35f60c974094f40cbf53570c67e121c3596008a179a0729f91d46e5e
-38a8014a08b8b1837f88013a84c5e25d9e997b78dd1a3acacf6ea4b6f22b7633
-498ec8fd01637db6652c8e13a1b2ec63bb7ecc0fc433aa7fe9b98e23399504b1
-63342aec4942dff2e03b10ec2f878aeba8eba0317d18d319565f4a4aa9a8d58d
-3bd5c07574a4a5cb1470c6cdfea2fac23e48070b78efc47f04349d4af2af42be
-5cfcadc6c4486c57e544e915a3716e730bbf0bb0b8f02b7695b5e41e17bff778
-6ec02a8ba75f0ee0ddae7fc2b155821267d1274701c5f115cbc7e4662491289c
-c1a848a53a41989a21635ca76430338179c3a21dc4448b63c921714b98d2dff8
-a56c2cda854064c815de263f52f499c683482cdb1f8ea28627bbc0e2881b507f
-82de8fc1a4fd8edbb842c4b314158d13f50e857b11459c6b327a9d79988f716e
-c53bd57a7aa8b8cf72636750a399a014cf390025b84cad918a077641e93353de
-ccff0916d3a38eb9ec8329349406da403dfe6de263b3fcd64ab8302de5f8311e
-1bf0c82f273dcee0abf0fdf1b7e9ba56258344499e01ce9bc64bb39b114432ad
-0a073a49aced5c1565a4260de577d54e66faf7a25e314fe187e71e6036df0166
-aee19ab0c0f17cef521c6b343e313b7d061c784b796ecde5525364901ac92a69
-9a0be0b1736203a4097182cb3eda67c4ab278d318cb505db11bbc87cd7ee0a0d
-8fa13d5ee0be00d03ecbde7d97eac4bc75c94b46bb1ace9e44261b8f8a592198
-f9602227c06dd68cc227375aee4a18d15ac1ae5f2e7afa89a0c10a916bb9704d
-c9ae1e1487f435db4721e0e878c166d428e0d994a73e22dcda3dcf7fa1c726bd
-33c0a2f2e61c528ecd89d78892ce9880b2b2c9c568795cec45aabcc5d3ca6836
-d7f18cc57705048e484a91f02a1c6582bc7fefe6ae2d3c0ba391da4ce7b4082a
-4f851ada61b157e424271ea88e2e2a7e3ca022753d103ca3ecda78d65b7f33b5
-f65fff1e547a95008cbb1069c2a9ca3f1e8d5cd06a3791a783d5710dd3a2bf45
-1739b6fc37c0b1ff7956d367cd4ec1865068d068364563cb3031ceed51989b77
-161c3fc9267aab57d0e3ef202e4be4fa5ce74b2a215dbacc6b2bdd41e065285c
-10af1569b61d0f0a39195b323b910c9e96cfaa173804d44adf39143652d5e64b
-2acdae6883e2069232d999d27e9fada2e9ef4d1c6b96d4b8e6053665e7e527d4
-68bd7a83390c70bb3dd73b96d517bcb24c5210669507144ed49ccf20d9685696
-ac300384506f8fb34e5151604f3fdeb47e82bb631c42dbffa851ce01092e8bfa
-67e418bca43abe2b9b646cf959af0623d7e19c82c40e50a8f4e2efab94c04084
-852361f4056c6ab42ac9a588128544028c3c4f9f2de2089869aa240698b3276a
-10032049fc4a1633d4dd7702f596bd3267fa8c4862b88e6ae21c5f5b13ebcdeb
-e59e2b8443ee59ef027a2de9bad3151e7dd59581b991b6f86d0dfeffd5bf2e91
-887b1fcb8d8b0cd6e9066588f7f02cb7777cc070004737a24364f993a1e9bcb0
-fad861eabf3747fa629b72018a2dfc17c29894dae3f496ffd0fa11321938222c
-fd9dcc787c782c95c0085d3573c32e90bcd9b7f40efba4138a26286845a5b992
-613bdc8fb07662d52b01d771b03329e94408feea1dd31b9d29f3f14a5e93a5e8
-5e35b2505a0675b0d80f8ed5b726076765a2609eb25466507c97bd200e29f988
-c18c94379764be35369fcc1a9aa08d141973a33af367398e3250712153d082ce
-cb6a1bbc56180f55b99c3d979a2553e52849153029f30dfe86d1bd1b72d7e1bc
-9848c0145f4ccfe1ebf7ef48b85505c71cbe584f6d001bf1310f51ae315478aa
-45ddad248a875fd6588823d483b2425bbd3df516064665cab2d1fd7918916776
-8a79099b4fe239fc338b93eeef026db890c5f2344a87876a56fb8475541b5f3f
-f87eada7eaaaa6f15728c058a6a510990aee9c82cb5bfbc86274dbe1c62c43cd
-e042400665b34b1ada889f40c71028857b2a800a0c3446ba53eb4b33cc22ef3e
-8ff1acb6017e67ac5958dca7c336f5eae73fc79e4c9d4e83e9e31b81c7069af4
-316cc3f1843bb4d8a86c1b64ae5882f3437ff3a3ddd126cf13b66593dda3757b
-0cfbc0dcba28f02ffdbddba82d58d2cb74ecb9f410c989e0e216a16fe0ff291a
-0d7d46635fa780ff107d3d54c5e01fa866132e5c6cc2ce37874a04cf6b980f45
-389f0febb4ac067f31ef51f18f7b8c40f988bbfaf20d9c76b26736eb73293784
-9bbc22210ed0eef68f9d5660f2fa98531668a6ad9f0cf9163cf4d01920428037
-032d7fb7f625561511ff322e508f558ebaab877ae75af7c70ce92a41ba163ec7
-8c0f820b763a408eeb3f315e76715614db10818e6107296ca9ecf1376e0bb5f0
-21538e410ab05f40ae71e7f8f5f9504ab7eb8d9eb75d7969ce1069fab55ef8df
-ad3146e99590a2178f1c6621984070bcb18f16fd8f8dc8adeda9ac3126403f5f
-ef75226bf78a47eb300d56932c20de486b311c668c566cb1227744d0c77593c5
-dbffb4083d710f7344bb4923c39b8ecf375bd2fe7db162151b78f90a836a8f97
-43e16773929ded333b3397875a0dd78824d1428145213d1c36e1ec0a9b3b5da8
-1dd17175bf95c92e3c94812cb18fd213d33399138a8727f97c04f509d90bd238
-9947b0a318e2c124dccfd837926a983e75b171ebd7c51836fde9eab589490bf2
-2c323209a9bc2200c93a0f6ef5a955d9e554c493feaae35f59f58f92d6e5bcef
-3330fc3fd18184c73dcab9708b86462af71733ec25735e725441f0c60e5218d5
-c6f81dd53df7127d3f42dc086b851301ac12b5dbb62640f5ee2c789414fe7372
-6b8012059b5d5d452645d530588f5d56d49de17c5142811cf1c018c950cf6168
-6f1bc25eb90d90cfbd4907ab819293dc308a4534f3d96ba371ccbd69b7eba2a7
-912c74015bd1f9d591909bc89d2b5a18e9cafb94b6a933d124fe9f23e4e206f0
-b2f912cfd850bd9f2241476617e422f7b0a23b2ef4d252d194ef0a5955b0d1ad
-07fdd9b8060157f4e5f70102608b49558a049ebfdc7f1e440046e2576c286d7f
-9b0302e66dbddaeca264b0c76a1c7d5623d74501d52368d3fdf5a5385bc9c2f3
-1e138d11473637b5d709aeda39b929019c5a9045f08f033f180871a4efe28049
-6e44f0e47242ea584327d28c8b5df1d27b55ec763bc4ed21620c00e48c87f821
-98f58c54721946022dc721571ea56d2cadae561b6e0342d90da037ea59f5490a
-89a7237d7693ed06e7de0b915e39265fa960d1fd63aacd44354a1f074bfdbfa1
-89579cee9c5e1b681283711576e0da93f45ef8fdfc6aa3f1c76f5bf0d3a745c0
-901f7bf3af7757ccee7ff8e8aba6c921730b1a048005cd37627ae36cf66ea398
-8d032c87c60efa29c1a70c225c5a62f7f94b963c42770a8eb3c4f78d1ceb8195
-ed8a4ac3372e718fd8fabafcfc9d65576e284e257a679ad56dbfa8d165ccf1d9
-4d6cc68aa9d391c24cf06194ff66822089153f9ef77de9b63bca0c05785252fe
-5b5ba7038692602bb8eea3f9ed9f51f6350a1bcf45b5a19ddf79e41d3a1719a6
-75e539c4708067fb4515e41c5fa12b59ee39c288f25aea40b713adbbf832450e
-ffcc36f837a6f62119e74ccffe60c2d0c1aac2c26872d35bb99cde9efec166f9
-2ae7579be3a972046372898343ce8dae0a0de3276c182d25896bdcfd578119ad
-c8b8d9fac64929e8e350be397b34a02027fd040170c183a71454419dc7061759
-4f83ce2cf137e277b4e222eff5c20c031c70b2824239c753d53152fba0aee6b3
-71f438adc86d941ebef0b20f856ffce6e47a757ff94ad406b0b01cd493dc7117
-7d4b01c9b26c5a443b04ae5dab07b02fad4d39033d02eab89847eb84291cb9aa
-70fb50e54bf9ecd24319cc98c2fb394fb23911fec80dc0cc86294714a1bc45fa
-bf829a3c84f6d1279560b9218eb584ea8d0f066fbb718ba5f3946de4fcf4157f
-b44ebfa718eba3a2f4d666bce59da5e9c16c23fb839e57a307e607047ac3f141
-4c0e3aa8439272367b790f0e48d26b7dfdf080b14f21b24e1d8f4f4088c84d12
-fe5616c430eeb3d01d8f7bd0a2ad86ec14dd7f1d33ecae964d4841952b343bed
-0e1342ec931d1032d72b2b553b6cc139a20934a1616ae8b1bd923e8729d73071
-142a1e977380ecc2e306a1e83fa12f47d3c7159eeaf9a21f703238c578e21c93
-8d3369e2a899902070a0ac5f1df345d83fd9a9b16c12043f3ade6835c837ff7e
-2ceaefe2b346e6ed0ff6e33e07661ee775730eefd22c06aa9ee61297822fb37e
-0c853e9d2687154a17a36f0bd6773f0e954b5a36e1e74123cbb9333b70525435
-b1ab97e5963fd97333fc91a3345de4e293c61ce91f85edaa6d7a9e595421ced7
-1d9d92c2b455d7ad5c319485705102e6dce6679846ca08ce2d513f731a9424f5
-a972e208dbb1ef213044ba7a95f42b85bf95b8596ae9b34783ca50b316668cf8
-96af9bc1e36d0f2f8da7517c72eb8c6df8714e1029c4f3778d6b1cc14d25e767
-5173a678cc11dec825ca3959fcd3250cd49514fc085afafb3f328b844cc1ef54
-20fa4650f154b5d5a13936a0dcebcade7ce08262395a0669d70c97cc9e7a633e
-67ea4d5e1442a460ba734efe47006a8649d6b937cd328c93b8c60578a6eb9418
-e568c5f1f7f40ab1261c21b24be86b5f91c23e6ff04d4c409bdd125d5f8b4c9d
-244401c5bda954df82f45e757e4fc41290043ddf7626e6db4905613aa9211918
-7a2057e4585cfb06894ebb36cdf8a9ee8ce80ae01f91ca4a8bf58c23c6efd2d9
-0923e954464052e5548dd1c2adc3086c5ce99639999bc190af99a1932a2d573f
-7f8543e2334fce16d64336a82e65b6fb24cb61c4bf109cdc82a6b3cd1c7f2774
-f11d8901dbd8757be8acd02d8408d79ebf94fbc3deda82180450b2d331696bfe
-30515d6911749fc31e2f8044e1092ffe73244ff9501393aaed350e9dce07493a
-c3d93ef6c898c707db3d1d533a7795b9eede2849772adfa9136817a3d12940f1
-e42a0e8b67265a113154852d8462e6acc3bc34957555a611931a94dc4dc6e3da
-17eb5d4cf2cfaf833736c1e29303fde272055266bb2ded75461f236987485382
-de077cfa3bc576db7efcea8b99879a703f8915438c7a98f01d5b02161e75feb0
-0ee7eb405ac4a044e6e2f8e06dbbd21acb552620c8dc9cdcd0c5cea48a4d9758
-025373cf9d4acea8de7e8418412748530b496da725e1fa75a7a78cfea5a41e4c
-fc400e6e59c7ba5292812d513dc15e6996a97a431ad6ab7047700f1fa25c312a
-a2947c3fa06019658cd1c322fabb4ea38cdfa6fb047f50e4c805a9fb9df42cee
-b09bdf0d4e9434274fce598ad8e37a158ec4eb4ff59a9d8552ee53fcbd903e3a
-584f45e6d2baeb0273fe2735ef5f0d0fc0b305ba868bc03b055f58837de58d0a
-3a8b2e58412a4fd61e12560a7b25065b0c9f5ddf61c36a2a259b094be5216b5f
-414b2fe72e227ac67f672d59f417c19a87388e0cb7eabdae0fd846bf1f535b8e
-6e669eeeaae681e442773fbdffc27eaaef5dd8c6cdf7674d55e3334b492b6f3a
-208af8d159cd2aadf9a0f89f876ee37fe2a1893b45c487f412ef1a80179a001a
-9efadba5fb13df4fea0d7a5e03bb2c4deaf502a3e2b33dfb238ffc5761f7304b
-64003f6445588fe23d1e4d338689f444639e18bb2f56e57980d0fe2edf951064
-7aafe870ae659b615c8c7a
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMTT10
-%!PS-AdobeFont-1.1: CMTT10 1.00B
-%%CreationDate: 1992 Apr 26 10:42:42
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 38 /ampersand put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 77 /M put
-dup 81 /Q put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 91 /bracketleft put
-dup 93 /bracketright put
-dup 95 /underscore put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 124 /bar put
-dup 125 /braceright put
-readonly def
-/FontBBox{-4 -235 731 800}readonly def
-/UniqueXX 5000832 def
-currentdict end
-currentfile eexec
-8053514d28ec28da1630165fab262882d3fca78881823c5537fe6c3dda8ee5b8
-97e17cb027f5c73fdbb56b0a7c25fc3512b55fe8f3acfbffcc7f4a382d8299cc
-8fd37d3cea49dabdca92847af0560b404ef71134b0f3d99934fc9d0b4e602011
-b9cfb856c23f958f3c5a2fbe0ef8587d1f5774879c324e51fcb22888b74f2415
-50d7401eb990d4f3a7af635198422283cac1b6cd446ddbcbd915db9bff88844e
-784c6bf7389803d9450b0c21756a017306462c563d51ecefaacd079732f12c29
-315e4b9623a5752c6f1d8145869e120d910b2644887cea7e30b15676a92537c2
-9d3aa80dc30082aba94b40990b82fb1a877e805e0c8c48f61e9f2edac05b944e
-e4d8084ec1d5cc517aaeec5b3ea379dd011eeb454cecab3ad2443c887c582789
-72355673e503affe0394fc7db31de364e4f56c24033c7df2265c56445ec63a1d
-5695a6041ea1b94407e1cdb7c5635603a4fd047e6edcaeb2d0da6c9e0e9396d5
-1a4a58e8fdc1578730f992435560a6e2d3e3687703ee2f78f5896389ac8470bc
-806169eb01762e89b6dc9adf857ead656620e2589aae722c37a2ed7a2941c360
-b067ee34d8d5ca3bf68db725614d936bcb207781f4d4ec2ac67b13a5ad161f3f
-059add7b5e3d904831e31c20c04546fae83ca93a35989e65c201756888f727b9
-7e5313c9870ec96e4cec3901ea03a5c744754485e7d169bbc98bf872d0796e18
-9d43b712950c3786257d8be06ab6080b9d9392313298327549a8a41c00a2cea3
-690b4a333e45aa815a64facae1c2b44640860b8b8687afbefdbd5b4a541a7251
-4ee7d3e0752af3e96a88c95d31fa16d34ba2f02fdb0088b165844f02611c734a
-dbcc2037bf741fdea7e8bcdc130c70c33772f777d8bcddf4611db99001ccff14
-d7af2bb05defc3480bdab312a0eff2f375afb4e0df2f803c594b7c93f71ca4af
-861ae1711932fef19bfe2f9b7adb69d68e5a70ea4d1a3d5bd85231b16993f65e
-fb37a0a823f0542f8c2340a073dc1be4a8347f9d3068a6435cd8278b0db1809e
-8af9664c2c989b9f16873c009449b6284b85da4dee11c96a05ba83292f0edbd9
-2cf674aad6ac1a5ff966ffc37e88a66048deed053565b55ef6bdb8c2f2f67832
-f8939a32442ea54f13d003494d6350a2864b427a9126a9c26a031909fe53fa84
-63b80c3ffd536c9a5dd29ceb03148dbc24c0033aea2a574a8c8d945fe4b2a75f
-bfeb92e03e5c29f9fe0ade45bd289affbe6de29b95bdca1b14cfb1029e83ce14
-30e04503100dae953b01334479ddc3994823f4b5af856c2573169189b3b77193
-636afd0a7ef8102205c0ef082d34ef6182bfcc89750be59de2ecb291b918d72e
-06263e4c8aaac685287c997908cbabef64b2604179ce6cc65b05cf6ff8cbb6e3
-57689d43672ad21c31052a01e8df852eb3e9f5771a2e4e976b51492f47aa2f4d
-d71b8e53cde9f398eeb841ca03ce3c20a6452581ef985eb6f91c9a719f3244b5
-ebccf59e740a455f3e1fbf3f8a852b93e620a36eea4487d17cbf625c2b7e2cdb
-4d8504b06fbbfe867bf9fa467927769b39176c24dc5d40e28ca54a2a2999656b
-ed420923bdd64ba1409806066da78637eb81cab9a140ae4422cb00ad9543a3ad
-beea8d4c01a43b0115961fbcefdcb4c22a238466b1f38ecf9f6eac0e72db1021
-32b781408b2de8ed88e9971be38d24937f6c111653c5daadf58b414da78f6251
-6fd3a4b5f6bd21529b55d4fe7620fd2d8d13a7e8604ada78c2c287087a40af79
-5092eadcda6a502dddd06c3d592ea3a752fc60e6b246fc9098cad8c2bd614ea7
-4351e0a5ec9721969b52302327f3f4a2c199db96eb724cff99d86a4af59ff5cd
-15345cc94ceb500b32884427525fbdaefaab12cd7239da224e4234dee5188396
-2192fdfe6935a088bf012b3dd8063663aef6c5487d27affd1a8ea501f4164c66
-986b7674dbcd9fac8223c938286aaefcbad9c5d26b4e744fed12842cb23c3309
-6e1d127d6d1294bc06cc3a0469e2d15bb0c166c962d5fede747e54a18fe66be6
-650e43e1831dbd5fbf39519213291419dc442c30b835e8f0395492f7e21408dc
-d4043ed3cfca51e68bce4a358b2d23e406e1ef34a294b2c41e7bb6c93b989b0b
-c5ab91e6b26c68b371f71e2d895f7db1ced99485edb5f09590c37682dc064a2c
-cb8c2ad1896d45fade7745fc4404d0da5ba23975382930ee860460d6b450a5b7
-8156d3ced15e7b9b50605f830a29333a7645748cfc5b17bf9bb8cfc8219d09fd
-7433484674baf9d5385492cb3402cb3273ccbe121f93838a21ca03395d9772d3
-c30cce1e7c2718f9a825ee7d401fdb733fabb8c9685212fc70afb90dc296bac5
-94c52f8a08b1d1c889807f65f5ed30fdc79c167507e85d42eb5ee579f17e5461
-cf108be5a17c74c533e5929ae8d9ba34b95e4af05696d5bacfc39ae07969cd95
-23c18ddcd9097ebe6e33dd6494f3213c3f4db165174bacf6e742cf03a246bdd3
-ad60d0bc19592eff8335bc7079b3d192b4423c10ea73775681d3e9c3155f5e2a
-4afe36038f1d2fceb44d2f366477c355359e6e764293b4da0ddd1eb9ccfd0033
-0ef6eac0977e873dc902d5a1be235c0a1d777841dad4731ce0e6addac0d0b8b4
-8b645099f3a482aedf8e49b735655adf0eae1d42826369be4a1de71c941f6155
-fe81b5bb7fc5c1e420ee5959cdbb338c4b47c5795183841c18acf75f6f0b7e98
-18e5ffb7a30f1e780ebf8406a247e7ee390c26a8092bfcc32a353b9b57ff9c5c
-d5d7793b54ebf122fcd20a0faae7c2da9c6d67971d1e172cd75778252615c74b
-51c0c113ce1cff124b8c35989d3ba1939f94f1c8e53dc2e56e757a8d775185d9
-71c3b1d75a8866667e6e117e42bc9eb224a2bdb5617e98355c8189b21b718f67
-f88c49011f6098804e4a602299ccffd8a94ad17b13786e234a5dba6db7c46bbd
-d53f6415621363cd1d37477d1f39c256710afaf8e1e37ba56c784e48841cdae5
-91d3bcedcc3a87e948b99741899305ec448f6cb58616d583914e787d7df826a3
-b54a1b93d49393c658656f4fa6e51546a16ae79de1990b74d7e651f7914bc65f
-4e73eef9ea372d04e3cae7b47e73b7b86d38f607a95fa2ec47fcdf365aedfd89
-59c7bd3c55835a7f7794b313b05565b627edd1538b6b6d36d42b287907139991
-2cc88c7c7825e5604e90ce776a20218efb54304e287948af136c8083aada107e
-d50b24cf0cb2d37a45c4e78be8f5b5ebdf59b49c5e75b064c63fcb715652c988
-d6af0e8a221fbbae93cd8a638a4e496cd43b2879e2ee85d502ebc6eec2851d72
-ed5ddca18251a7b9b0da80e4617f6b119461bf40773a4d6aae7ec8c705bf4495
-5557ec37aee0e4622dad05bc78401c7ac15bfd9f86255507162eac66f1262ff1
-efb9d3d08dda78911ab1cbc85163f03109f01b6363bbd353ffdaabf69e4fc0a1
-9f7c5650bea97ffece85ac8f80979ada0ddfe65b78a98f42662dc48947e45287
-539ef183e0014822b99a1437a7691664e3796df1088062631d4e2bb4c467310d
-7c1b1cf7a7a8342b3ed2ad460bbc70b465d7984691706eeca413b9c9ede63d66
-7d9e8627e0fe1fc0207332637365e5097b3c334abf3d8360495372d1c0d3bbb0
-547a7af6022baf5b75721db0b8a56cdfbc47c1381a34f4ebdc84c11e19a7cece
-77fd340652a79d4498390455f5593d71db49b28c09c6a11cd8bdc13d4af8b377
-fc701d17d61af73b872d40aac89e4ff426cf033e9c11db747e2c7a5b19eca754
-fb0fd8c6c96ae9469d411aded314ba294867d1b350403ff9a701577441d7a92e
-638df839b7b04c8430ce91c5f5cf1b0cf1b4541dc598a09216de86112548b086
-c2530169c07efe56992a60ed4e2497f68b29aab7e0f34b93e1f198478de75cb7
-01d9cef4ca847dd6e681dbcb95c8d170191e9fcae9635f334803ea8f66134353
-ab9ea1c5c2a770260ea0d0fddc8904f8ed72ef85901ba992e0116e14d07fc3fe
-a0830fb392a57af8bf658b24e64d84803b3a9e6de15bf921e52bc3f8b8338129
-ef0b43527774e703c00308c0c5ef0f691e14a60fc1cfc084b3ca376229044938
-a61b48d55acf33b8aa6758026ba6072f0336173ba65ffcfa14a0654b76109c68
-b62522e8e21a282446ab955666ae6a23030767ee001a42bcb4363fbddc8beb54
-7e1d10dbf56c1ae64efda30c03a2dbd2b6880c8750a531b570e28017149a7d46
-826d9add7cc098730dcdca1b37e8d5609e8937152cd7defcec52971132ff4aa7
-34be78109fdee933aafa4cd6d68426116796ef1ae30c94d93adc62e757986d99
-fc4b07e3e47d30f2be13da1bae17a360beef8a49801eb2099bc73498e970cf03
-77a7c20696cacdac3c717c3dcf63f43e85d9806d4c172af9755654930d92a801
-4cf9b09e44059e235c7ae1ede6f0cd0e1d900093cdadc235d613b14591ed9fac
-de5c2811b03fbdbbfa3b925293ab300cb6910a30c287b9aaf58d82588307c643
-e2b803d789b59290f0ffaf27dc1f721d28daa2ff71fcdd1ec10f81fedd778d28
-b847b3ca8114fa63a297eeb76c19bca3778df9cadf20ed74ff3a2191ad3780e7
-028eb830f0ba173ed16d2992216e1cba1d1f0451511423e16581862ca92a9c0b
-4ae6ca1dc96a52408b4177930825da5e9dadaa2ab0b3b7cdb99258898eeeb296
-44c48e0163d1df45ab4a4cc861ac108d0487384882f558d5df2d9ee420837009
-f0ae65a8ef75bfddd493afce88aa1d8232c08b71bc50595b6805b54775b2e37a
-b075a319e4d77c04365069cc5f32dc7e8d93599d9ef77a9699d1c2c0a0b5e00f
-324e508e3c240998b5edde1958b7bf7b64cd4eab474e18ba70b6dd8b4ad99cb1
-350ef9449e7594ae133e160b15f84fb85db7aa5ebbfb5e11bd637a5c457d5ab0
-7ab0abb8d36f3194ccc58c8408133897df859cb06615cc1886bf1c52867c1ff6
-7a7089b9136976d9b77421179d249a20cdb51e2d1d4aca8afebd7713f178045b
-04894639e532105e30cc40a33950fa55725ba217251be8f599e125219785597f
-97923cd28893b41dc1000c8fa8df8abb9562950739c727018fe70fb2e6f492cc
-58894d6771347ab57f34c1ff0674360b3686f51e8e16e4d498a6fa8f176cd40e
-3c52039181140f10decd1aecd83dd67425fa2305b58722426922e7a62d8ab16b
-28971f4652fff5a541da6a35ca36b2b81ceedac6e59f5a9cd7b17b5370ba284d
-f53fd469a66ef24ee29bc44dfdb136ddda693b9b4fe42ee044f5d070c6b9199d
-e21dfaccf084c507c76ccb6baca8c95cbae00c572d54e62193581ff4baa4a94d
-8e257a19c2abf7b5f4fcfb60741a9dc2cd2a7efb0797bde78f1b348fbbd6309f
-c30312365613ea45dbfd061400077cc1c112c40714e04b253ac3983836abe40c
-71a6bfca857fd06cf214954dcebd4a04d29462bac446f7601c5c17b976f4d50b
-c930e2e24f9b75e700a02e4ee5c87d222a41808fcdd2131f0cce57bcb0a6cdc1
-985375c08d69938e958ef5ce494e7edaad53fa54d292da30c819a4e22ac60e66
-8f9dc1c65b6c43e016da6a33d75c87f3b80a95cf6fc9f705e5a99e928cd3f576
-8e9d34ef286581a3d315ce142a719ac7901d578702b8d2a9a8306f25be279a9e
-354dacf1e47e4385c53581d5b842180bd2321e9f8f373a145b73eeb999f6da22
-dfd25ab85ce28f9fb48c46925a5f6ab293a038b96b3724e4ea782925f9cfea2c
-1e50cf68bec65ad1764e42265ce9451e00eaaf28095acd40799d59fede1ed725
-55ba65ae6745c420058539e420635dcd0a9a249530c0f2c2e61d1f75fcd8d3e2
-c0aa195bc2a6409820b4f8c2b73c9f79ceddb391780665098a47f3435031655f
-704029ed3b92a0ea56b260a1147767d7b3bb1c724206de6d8cfcabc52de025f9
-0e84c0dfa06a4f72a497181b496c05c10a1b84fde32ab2ca4425cf110ca3f76f
-2ea7a5faf53a860eefe9e5400df45248d0750bc2b2d38c96242c819395558255
-fa71022f72cce154355c0e69b2994f4ebb477a4f9db95d449e8473f2a0e4db43
-4795e45fae17ad46f1ca580e9371f6de778c9e82a1eeb339be6e20c41f5b1ca6
-dcdc9a611b2f7671892abeb642ff6499b52891fc64fcc90b6520017d88618d71
-09a805a9ec3be8d1a65d9b822bb3bd464d4aaa6e1d1912dfda0591aec4092c11
-004520573c20ad0ac2008dd177ae587523f435da621a8ec7b26e9a3b8bf35d08
-a7475a3307f9822e764b7a041002371a2c0c94efb7d74492b6c8fceeb8dcbd55
-4106f5f632611fddf1161533471215da6df575b80fef3bfcf2831772ee8185dc
-8471478f85c118b94cabe4a589291e66d7edfdfd79c61ae5af31a0eb5ae7e96e
-6ef6f3ca607a53ab02758197b021f003f645475d69ec2b3e7bd937687b7b3369
-2caa4317e0638c0c3ebc5b6708b86459820e22c56e1b91e81578b7eb0edbaf54
-615a1d08eca9919ca36a38f2c6057cdb51d42cb509d883d846a30129a2fa59e7
-f8b1974b8e073eff7e6de62317782e4faa62a45dd4def8287ba8a62b8e769833
-21b2b1a9dc2f9e574d696ef0c074592b204981dc6732f355a813175888161f1f
-0e6a22388c0a40194f3223531f13bf340e4afadafe33a5823e30dccbd9be3fb3
-d1e420180f789ce44062baaacfba961aea5b207c408d34563b76eed5f33e3e0f
-50086d0e065d5ee7c4fc8234860c2daf0ac703bf97b30788dd109d84a4db83ca
-ab69f3f1450125990c2eda22549fabaa0b429085d8de9d40ca4f4e2865b5e12a
-74a2cbe57ac8f07d0e7fd170d42f820ebf8a610e52772e4dcb210e817ac0b461
-519777b9151b4770d2d97d9a66a6e40aba0cb7291a517f5b79a8bff03ea1b183
-9b70b9a6d595e87ed2e8a6dad65840b91d58c4d2e5502875716962dd30cde125
-38fefacbc5c5bd2f332bcaac29217b70c5ba18a58796e1a920b7d5f41691d38a
-3e83fbd39e9a8f67f6ebf951ea7a2b23c2901e3c80c9094ae32dccfcb53a497d
-98438de3d7255f7b6cf633a58c6f85a1ec31f95c8410f61cbfa0bf7351e5f43c
-c1e5c88b53a86ae66252c7a0c3fb0570c7ce839c3aa6b59d6ac3d03eca2e77fb
-c0fa3e0c460c30784ab5baf996cfd283d6bbf3a41c11157fdcfa3e41b68545a0
-78509ea3b96175748c65f5391745e5393bcad99be2815d6e51571e38759bdefb
-2f525b0810f541cbf2ecc878250b44ef35a9ec3beb108ca7e523556cb5c6b531
-0e43ba3ed2aae783b05eaf13abf1575d120efa6042e07a5a1eab856fed89d5d7
-5ae59898fb71945cc0cf987635ba73b6a80af4ed58f67652926c75731ff3dfe5
-d0e27501c55eb1a5a004c7545cb674ed642987a11d693efc7c264720e14d771d
-f49b44c5c1714209d94b3a69b54f359e60090d5c0288b80acc8775c0089b66bf
-453c4790dd93dd1550ad38aa9fb6da74ef7c6aebf33f749389433d3372e5bdcd
-3fb5674e1a481a6c8b2db9eeabadb30375857b7220b017747eb63e396ed9049b
-49fc0a4b4d1ff40e9f1383f907cbf2287a066bd376407eaea68e59e1dc5ff56a
-0d5cf12c75b5613986b7c0840ba9695dfdf7d135aa5e75c4bcf17ac3a62ba79d
-9b5bb5180274e8e1e26f6382a2c95f2c0db1914697f21b642aac6c3bf00cc2c2
-a34f2a7db4b4133068ef8e16ee8c39e92ef0cb122e040a216aad5bc871d6d04c
-453e20c8e2f9baf2715b330b22c57d34aed1a309bd76d2a24cd223a04a8530df
-a132bd32dd75fc94db551cdf673057a2b70b61f3fc4380866b003d6edeaa7da3
-1bc95f221600403d0cb233aa552b3c69a0fcbe1fc802758210445f3139e5ed1e
-11b14b0789fa3ea6de0f3ee50c2e039c1f812ad7542820ee2adae97a92e238e7
-33cd732a277f5176d4610d903700215451e822235309edbf5b9e37f3846df85f
-afe4b92ad06e5d4751ae8a8cf976e0e4d46fc222b512958d83c482798f21221a
-96a9dc1de701e9e54438ba55a4dc5eb4ccf206efe8a3cf072f8b9b161c0ffd87
-c509164624562a15eec35008cb0fd5676bcd7b649dcf2715001a1e6c302cd654
-e809ff768da5fff9a3f46de8498c34087fea7d65f70827657170d25e6293b3b8
-6eb825d01dc2181c523da298d3fcfd4afaedbd33b35c80a76df1cd279c6b6f04
-6908c7bf7dbf791a68413c3c9fd2a0f61ee9c94c8817bf9d8332b059c21bfcec
-b055c96aa0ec60207e76ca7160411edcc61a4c7386d53385fe6ab899e0827b1e
-59075be124a25956d21adc79ffeaf0a81a74b65fad7532e6036d033005de0da5
-5d69a8f9ec183a1b003d5fc9652720f016d72ac6d65f0eb6ff4ec9f29a58c1d0
-1684a220e871b2babd7b2288d0f3732ebf71369695e776fe2b38551bc71086b1
-9c245294952185b9e7389713820a1306603d205b67004a56eda30d78a9df0445
-f509467b34115350cea6f72c020a8cc1c6db9ff07aaf234409d34149da781d3f
-61ba459a2e4bf03239eb1fd6f6af118f9aac56d8828feb03da1f26ecc293f715
-f820855e45301c45e70c0fc7a33e17756af3c6828fbfe7bcc9e57d0652c36997
-e45b34e2c1f69c2ffb7baa220347cffc31f70863e86a6c39917f1c007f2d53cd
-741c2bd408844798ea7389eeb68c74c656050a1cb16b4841b015673ade151529
-d7f88af9d7ab1742e453e31c41cc4bf60224e99c2acb846e3c289cfacb4f03ad
-c30ad76cd18390210022cbd1fab91821b28e5306473d861af97f24db321f96c7
-c12ebb6aff8e6f7cf3376409b826de9f1295726b04276ab95f333106c3622353
-952d35cde588e2f0b7256399be37b91409b70e4ff7199a42a4dd68dfbcd0a3c0
-10a7e374b38fa6e21214834c522ba81e46fb0650c629e6f03bbbaf70efb76466
-1f849b71b1208855d40778ec7307d3485275dfcf8d4f6670957929de6a4db8c4
-bf0bf4e33daaa5db5c5da9200d448cb95f0f822757f96b7b0c5409c223c2fc0f
-4e4e66c9741c9fd130616e7c4aa7c77d4e6bfb7b67f5eeb9099681cb5cb3970e
-43c5268e350099030d2d9eb16f26e95e1a4d2d07b755a174c0658d7e17bee09f
-ed08fefdf73f687400cdad541f4d2c42bda687f7799fe2ace66ee662094b7412
-5d7e5d168d191d06788964f3029f6829cb0c13e8999e5705ec65c4ff1a3efdfe
-503beffc00486d214b5d6ee59a24c825283c9522ce88876e5f5be1f239acc55f
-55bb812c38623bd4a1c15a3b89adc53832b048fe10a311f7965cfcb373366d40
-0b6474b276e7b2fb8ef89af3e5192927c80d66ea768739794b48a1a65e55200b
-7eda32472b65bd4ddf4e7c70cfc1a0c5a5d604b9580fe1595eba57de5d3e172c
-07e537eec376e7140f6b3a16b494246a5a5a42591cd2d971c9339930f05807d0
-9681a826ae7c5c68ef28c35fbad4360583198aab1fd8e105da7b8dd1f7c87bb6
-5b97edcc7b48ab797ce989ff7b2dadfe2cb29fc1c8900647f2d9d92e77e034ef
-2e0859cec90429ad0ec54edc771c0b1dcbccedacefbbffe498fd554c25a95684
-2b12b76e7755235a831005ce3a9885306cb9396512dc1f09cf644bd551bc8cfb
-643b7128a558b17755a7386285c295962037a72ef87e1dbd32715262e541f5f9
-b7d3f3ef4125f156de6ae09cc9376e0a5f5849b312573b348e05096b841b8fbf
-aac8942845f67cc2530fcb1a9c5c4187e56a76f46bcabdc8312480bb2543545b
-806c6948d74ed5d6738c2e13a171a583eb1455e07131ee0c9a889a5d2fec5e6b
-72660378fdf2126f2cc8fcdd18da1dc687e9f9839e53f332dbfb953e72ec82e2
-c1974f1aac79a8116c11d0b50478ad3ddb14410e5d49b2fe857b4f323f5e360e
-9765067fb057bc14d1576e678462766afc88dd6f5dcec4332f4ea5a021ee5726
-535f96900e250b579588a43b5bfb210c1585c8f2f261b67f7dc08a8d23e950c0
-dba521bf2300bf603aa1be04d7dccf380dc92d5a64bf3289e44fb5c8a578b39c
-81b340402d996691d284d47cc548010855617eb748b5107a1d316d0cb2958399
-29f6a7f51b153792e1168bfe04f2534830c2ae59d953420aefa0cc0838dc3acc
-4fd00931f97b4d92e237a633e430b6d2645fe03ac5e8cd8652e3bed7dcbb3ddb
-0708618694908567d9a26d17b365d61c051a9f439d8e3a7108bb69385bc621e1
-9b142de584cd65dab71a9fdd5c74ca8f8020cbf9cc9a99b517eeb570ae679dcd
-821c7beefaf8abd0dcfcf40013d067d9861f8764a149a4ab1a4dae073342720c
-ede94ae7987464d8a7499093cec892bf7d549193421752ca9da3d5b8bdf616b9
-99a0c7de11cf30d77d2b114bb430efb34a2ea0e47f8f67cba7b576b432c47a04
-24be8f0734a90752345fbfc58940adaa7cee25fc7f619196fd520d3e3856a9ad
-f8939e6e63d20079f67bbee3206f4a5ec0dbf5274b76008ca45e65b33987183d
-ffac4113eae6a69a4a8ca21f20bc6c550aa7060e910f52dcd630a74918509d38
-d780180cbfd7d75e1cd04e433a8cd8a7a3c6828314120d7f7ea48d55c6a21b03
-a311c8d344f6fd0506d8654203afcfd61c4a0856725fa9793c4aee19c703a7b8
-eeb7bb1e475cbae39b542a556b328267f4953b5706d043388086cb76950bac3a
-405c35b6ae6c286b289a0db03809deb6f32749b2308b9764e4251b1c935a4ad2
-625690f7555991e2d080e0e4755cb88ff582201ac0c874ca84af76bdaa74ba37
-2fed5da2877f1ae1fa7165e3c23c7d3347994ab74ce6f167eb004793284f1d84
-44607ed31bcf584b96a95f8329b35ca823c7774e8ba96541d7c59b42eaeab3f1
-22a292a66f1bb00d4c3f98fcd250935fb842ae3d71e503ee53d177e060be7e39
-4880b982cbc8997b03fa349548056b0b058c00983fa23bc0b0cacf05a67f0d35
-da6268cb29adac2fcd25e14879190779b75883ece69dc7e3790776ea50c8cdcf
-5224d6b8c4bb0ae3f3d5be1a4607f0ccce7658af8c9fbf3a82df3c635cc340e2
-1cede24ed459cb673326ea15b278023de2daa06fc95a211c5b8a6e77c9f59464
-6a1de6ae1058339dba7dc68bc73541daaa1028f70f3a4b004bcda23d15a38262
-02acfba6158243b66c34f23cf62b39f76d0a1e8a1b34eca8302bc4ff10e00fd8
-2175fb9d65bc7bccf9cf62c974b9b1d6ed9dfbaefde1d233b556d8ad0ba98648
-ab896887b4332235e23d4171bd47dac7a158a42086bb510e98437184c1d053e9
-919f04dfc573c234ecae192de9f18d071b91448d1b155edc961192db903e9cd9
-a625b42ad3ac341107afd7d6098d3358980fa8a5fae07b5e55c26f2fbbbe0d43
-26bcc1bbb1112643f9a4679af19bc658b109e97aeca3a3ee2712879a7440c9cc
-a9f327d52d97d421b457580768145a920343c308a1618ef2825198b67f6c0139
-994856cce7bc2a1d6c50de08c482f001c28d569b2fac3beda57e8dc436de14dc
-24d4f987a279a69a00bfe723eceb41f20d3b51feb37ee1d55a600ad072bad704
-60a9922972d22868592836031123789171e3092108bfb04b7635f80fbf11e8ea
-b0c021550e915993313d15d4335f6c828055beb1d7ceaabc6028bc13a6a04501
-cd4519bf60d58b262bf0fb34602f932374e2b2b6d5f35272887ca52b1337f23a
-b45bb11d124a53a360b07a05df562df6b410db2c8e8082f3362ffc275ffd4e86
-e8b79659b871f22568c914f42325004aea280e7ea65947127d6bc9eac7804f39
-80c21af73eee20345481d1b99aedfd3a2ddac74ed8f9324810ff701ddc563419
-3707cd085d8d56c4e667dcc87184d5099576f2698874f418aeadbcfb438fdc96
-b1b9a7376c06aa8aef4478020ea79620176b82e800bb62ba4ebd794fc7263e95
-44c700fa409eeb75aaaf3ce676fc3c8c6a53bcfdae477788c32313dc5ae261c7
-3bb5ed09e54f96e8e456d78adc17bdd2e23161c834162586ebe8d718248a8395
-4695c70159c8ff278dc04bf74923ebc2fe7c4421426dc4a7cd15061fb5e9b7b0
-97fc8bbcc0d24eba72fb300a6ca95288a69d72efebc148b5f0af2a3a1c74f714
-c52767df305417c17dd42fc1d6472dbc995d168820d61f15c1f166fab3e33032
-3cb301f3cc403710e28ceead2eb4bcb73231e69a3b7c5168e2bc9948ea219792
-6040c2739b8f27702be0d7cff735d99bd2a3fec60979169c297093c5168d8dee
-9ccd4710052a67f490137d56819e01f5b6fad259b8e97b4c8221ac60b309a5ed
-38bda4a5e512eb3a62d33dbc87669b332f83c9d24e0fbff384f8d1784c5d96b4
-a423d4fb804741fad0aff9fcccc372bcfff830fb9cb5af0fca777c78bcbbdcd4
-979a1fea1590d3bdeb8123cb111534cf971afc9769e3a7be30eb9c45b3c03760
-159393c9b21d33ebd87d7e07054400ac358e1d110385342f3beaba3a7856b1d7
-3545cb4c0000674d60541aa5c3071974b78449b753720add9330a748a190d6e2
-5a5c522e29e1b8444dbacc886c525fa6765e05ad235cec1ecb53163c1e70d244
-b3d01ef0f8ad22a4bdb5a5fce201ad8f31c109a763cad4b9cad435624255d3b6
-567cb5a0ee78e146d86bf9d1f8e943dec16c8785c73c0f57237f361b5068ba84
-0e60c099eb88158708bb92e4a9146b5fded1952deba9dc874a28df80ef76d8ab
-9e2e673a863a6d56b14da700dd8fd2dd10fbf6844fbf67fd6c5ce970723375f6
-aa21e479917a4ae40118800d85e36bb26770ab1344ea3c4cf424b685a2f310fd
-f31238ff1cd4b6a1aea4b36ccedf1f807ef56a7b38bb6002f9dd1db80253c64c
-700026b8433bcd1a481497171e06dceca3a627cdd0a47a96b1b03d57bc3930f0
-fac24237482cfb88303be384c514fe2b429bcffe7640ffe074b6c4a714f2b3cd
-45d21c3f90bf0cef030a43297057315e477700b3af3e0e698f42b20b263f32e8
-00f34eff7083aed3b7cc610fcf9676d1e19dd76fca9d849f802cbb89eb69d644
-ee28c4eed2648b889bcdf43152a92aa3e631de76988ba8af1e7d45312c458ab3
-50334d7eb6c48cd5f5075d32942b625abae985237be5371667316b59f9af04cd
-987f1ac9f810656fd0e32e411f069aa398b941810fd5cb76adf012a391e88b77
-9c71551751ba9a7c4b48ca076699d8b1363adcc1ddd7804a1332e5d13837265b
-2c52abb97d1dbef6259d038ca5f5be2a1fd833252da9c3af558f07e5ddc87a17
-ec9d015e3763251c325308053e4b5a4b00b8d758cad87add1df483a2afed3b69
-348c0c24d4412faa7b2bcf4fa735f754f07f650c77ac4a35727e11d62b984d2e
-ac7042a03a5b5657cb86d43549f1705beeaf7774ace9ceb6ddba9d17a82cdf41
-e2b7ef4faecc13815d9ccc2303f94d44500b4435fda9d4098e75f1ecf96e15af
-d1ada67ed113133821ece3f646743a6949c683d4c9532042b234dbdf7bd4ec54
-308bafd25b0d611a24a0bc6efb028f83813ab25776d255f39239647623b3f84f
-a2cfc4031e1a3fb112c01762296bdd28bebad061bfac4397e5b8f1946576f734
-40198b709742d45123f4f459f188dd3761fb3893d3928143573fedaddc29c362
-6ba3cf664873eaec3b904af89d59d637359fa1cf8d91542bf698de17756b6ca2
-605a092ce66b490b93a357f29098380ddd201d094682479eb3d4c35355d89898
-9bdbe3ea97a0dec8b2f85486a2355ad0abcb339fc5bb581aa7544da94477b8c4
-9bd9b90ac4be98afeb9ebf23c8bf43e456e54b164e800bc877c04d01548bf8c7
-ebd47fcda4c5092d66f112c5263ba68d8683bd3093b8ad41e2bd51f221a4a791
-c6983fee462bb74e05d604fb8a157212d8932a2d7b6526a70c5d7079a1998ed5
-52a65a948a094b8c48c4b525f9518577344b805cc445afb2809241e94f84f3a1
-6e4d5369daa55f49c8a9516a838000be5e1aa9da892fbf76f427188a8eb14ffb
-5c457989047e7e59f45699a0414f8bdedd54ef0214b78c810271f9ce9e35d955
-977ad6ece2e0fa2f81bb868567615d48e2952f6844801d3843d419a60130f130
-ec3aac418f6b6f7279b1b2fef3f3877532ae2e2892c281f077ce6b34b11d7af7
-b0fd6a12b04dd6fd1bd720eaa5ba7833031c4f8b3cac0db53640fb5ac1b1a19d
-491201a7a7cce0ca8649d2e466ed6cdb7b80ab8d79b39c7a65bf4375c120d9bb
-92a4e95f8e6f167dd23d5b63fa6ff33f53f5ee9d239c1095b5382daf230b3687
-3a20fcf50c9ac92ce9af02a502d5e95a55a8008316ff6a61408bb8ddd90f168c
-c4c7da2aa5114102a6f518ba17d3e476a40b025b0ccff255ba423c5877a555ab
-9cd4ae8d9c329f87c1fd034df388995ef031b1350acc0b6876b51e58e4a2dd9b
-62917e83102b4800f522f983c36bdb468b211c487a7de62e7b21cb510059aa7f
-b1e43af1bbf828c365f7df8ad9afc1a3adae64b68e5fcc1877b9e047091f53d6
-0475f26fd3232f59ab323a644218d4cc5e558ad5790a1cfd134027f00149b8ae
-847294af29dc7bb204e757eb5a7f5a7a9baac629714e7df3f13743db3dca8798
-f0898f428f644a7a6adfcc56267b50ed4268cca5ca59b344e4246e6070e71905
-e6d7156e4766013ad5905c0dfc898085e4d40a5163563090292eb4d8bc909499
-203a1f4231bcb1ccf3240cd2e112fa09964131c0f0e2ba2ecbe9e6e3170ee297
-26c3375a09269703b1819486c008e492ad0b8dc591f43fcbc41c8d76a881b35c
-633a79821509c9e0d8bcf9a9b071c784b019d49f9038d13f51693629c4bf6649
-27e8d99ca2d1d9ca0f1c7f705ceb9044586bb33fbe48f5fa87846cedef53fd8f
-23442daa7ddf41882af3b964a1a4e0a1e4c96b98e26f963829ab158983c6e02d
-810fe3574b6a3ba31c549fec27c0703279e6a0f0c4ef
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMR10
-%!PS-AdobeFont-1.1: CMR10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:52
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 1 /Delta put
-dup 8 /Phi put
-dup 10 /Omega put
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 14 /ffi put
-dup 19 /acute put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 61 /equal put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 78 /N put
-dup 79 /O put
-dup 83 /S put
-dup 84 /T put
-dup 87 /W put
-dup 89 /Y put
-dup 91 /bracketleft put
-dup 92 /quotedblleft put
-dup 93 /bracketright put
-dup 94 /circumflex put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-251 -250 1009 969}readonly def
-/UniqueXX 5000793 def
-currentdict end
-currentfile eexec
-8053514d28ec28da1630165fab262882d3fca78881823c5537fe6c3dda8ee5b8
-97e17cb027f5c73fdbb56b0a7c25fc3512b55fe8f3acfbffcc7f4a382d8299cc
-8fd37d3cea49dabdca92847af0560b404ef71134b0f3d99934fc9d0b4e602011
-b9cfb856c23f958f3c5a2fbe0ef8587d1f5774879c324e51fcb22888b74f2415
-50d7401eb990d4f3a7af635198422283cac1b6cd446ddbcbd915db9bff88844e
-784c6bf7389803d9450b0c21756a017306457c7e62c1d269f306bd3402e266de
-fc3b5e7d8a8d2f5bf0fe6ddd40d07391df4fad4a6018dce29a2b8f692b29f202
-3a7c0e66de8ed85c14f1f8492167357f51a7e84cc5d92e0fee4d81cf7fbc8de5
-2d2e7bb57142033993f9c08c315abade8dbc4a732e84e142d3bee51557910e12
-cd8aa37c459a5e6b7f5269f59078aba3be4641a11ac48d0b625c8325b38ec08e
-4c9e5e7fed976a5650d99d82114f449b9ca14c4ec957702295a39a93ef93f618
-99b8ea06b092c3c1e503e6e436e0a9fa22576c8930ab3dc8c20f5d82b69cddf8
-ff4dacfa9c54bed5a3aa3ea5b129fe96be632843b9b6bc91b615581a985db56b
-1e01ca60ee69ca92cf5c0882ece62edad3e106d835348822400f0b66af658f2a
-e56ed08f8b0010571807009b73ab12a8cf14ca6c71f03c2a48c500f9d62266af
-154a6375ff600d9bac3f05ce34142d6867a79581c533176bb2f3117336671e2e
-44638a97167e2ea9644e31ea16c2ad2990ea33c54001e0c8156e6de8ab6a4d40
-a7137ba275f39589fea2e2db8256adc103d6f9cc038037a47e8fd469c5f98a5e
-3c15bd4ace40d340018b1cff7d1ed8abb0ac57b5b5a2c20a51957b96c453edb7
-dae5affd91a46d938fe0a13363001d844ded4323f1ee6d30012aea19b024a552
-315505535c85dc26bad31e09c50e6512802976d298c4e90d0044c362e6bf3ab3
-62a454ee93de25ce54411090c29e9d75c80ce26a84404bd9de3aee0e3f921ac5
-87f907572b8354a5c3165eea7e8b2ba4e333802132f760b41a900c698eb3d273
-8bea0aaf7aae96a558f08b61aec7c7d65b2889bb7b99800cffee5ba19ac90fce
-11437be1ddfcf0bca5670b543b9644a71c8726d0c1005abdb96f6e0cf7caaa31
-95017ca81519151c2c0b04f81e717c0691b63a76e9b25329ce2625b711cb7bf9
-9d23ec2bb5ec8aefb8c1a3b422ad617b3da4d49685fd44cc21a1fe5e1541163a
-b3e1594601d63c7e98801d7746474377ce93f81404f3570afbd5dbfe77578605
-917ab96963987e6efc2d3f99fa56ecae6422579852567f90cc90e4ef6d6f71d1
-858270205477e221018a375ca83c572b3f972c5181d18643cecb04909d84cf76
-7174b3c0c8ec69bf1e9fdfbc0fc7ed97ec67d878ea4ddac8caa522fdc6932df7
-21b81af837a200e1d96e90a7ad7589fa917658d7a173a511db53af1848892270
-44c4603be1a5ac1893c15a21fe5979a09aed3473a98e06c98356dc01ed3f5e14
-1c3c057c3f97e2f9e8718b12bea7715a3432abe07df50291d1a395e7ba2f06ba
-7cf20988904310104fa43c7a1f6d32f5fd290d4d572cdb5ab4b433bb849dd1a3
-58b292cbd5c762262751c26d8756c7a3c4e6bef14ad9a628fa2ef5c0010ee4a8
-d530f3786bd4e0af07d5587e90e19687d1a31921f975bff26ec2cf07f3efd4fc
-54fd4f92f08a60ce2b3beb2dc8d81a303c8103283e6e5341eaf61191f0122624
-2a4a88caca606438a767277972e2ad7ddc9a36f43d5b2d010b30cac07a383c1f
-9c18c89749e610d026f72e5ee2477286eb57b77567af9c4f20f7454a5719b0f1
-9581ebf64277e8f2ddf1ce08ee33f2a532228509a9ec0d95bec2b7beb23319d4
-236fb1446ff7df90952101435fdb0a0fe7622a6a3972afa4b2cd99b5822b1bbd
-c28f623efa3532adbe2bb8f50ee214454f95d282af029d174edec357747b4d50
-b02e2f47b1e9d736f85d789b58fc9ef2951954f075ea9fe373318b67a917096d
-d42424e1aa676b2a74c3884c66435e9183ba2559d85d0b6324fb4d4762451abc
-740b64a53c5a631b6c07dca48a300620142a53eb735cb766d2498da48f90dbc7
-5fb27ef80da2deddcef6012b8033648f89c18a4ab69d8df089041c5d0673886d
-060e54e6f2ba0562ab6d2acc623b70d9f0942e64b542e609e688dc8d8cba3069
-5a19987b0ae02ec45bbe6af8c5e84e43abaec2b7cdfe89236d857168d424319f
-054dfb95e1abd2445266e279886bc60fd18a05f9c21f684d0874264d933326d9
-c88b9668da837ceb89213019d211e757edc72e2303bb2b40954f254de88622d5
-601e0bcc65d903271fbdc32bcea059e5a0c32b9545a2c6e8262eaa912df734d3
-f46bbadf4640f3957b5c01ed33616319deb18f9f602de5d6fe326269066c3273
-8e9d0f99038be34ba574ad957f6b7a197f66f06956172883849e7ccb21f271bc
-4ee1c357c752886254e0bba6fc13e301986d5cad37ffbdab3069ef8417fd6d1a
-69e26263688b4ca921aef70783041a8abc1c751302f0657fa596dd3724a480b0
-5c037ed88981a99e2443a38cca3fb92c18aab5f67e1228506b4f5c7e99c08a5e
-e87a49811966564caea15d5602f0dd4eb1116048a7e49cc29498a240bc7e9c22
-dfbc699ee270dc8e3aa694ad439469013a0e480a061ac9569f972d5d308337e1
-d433b4f108bdd6af35febd0fec567f249265b5e3ee8868151c943e0eb606ac71
-50378e7c790f3e31b5d22d2e3a143ccdfeda4aac9fa69de57210cdea7ced9e04
-137ecfc978dcbc8fac0baba3de6602b0d0288de3526611c811453fcec09b08b0
-8fb514c6f2db0c8770a1be1be605ce5c851e195d976c33840542d446a3617299
-f99bc6929f70839cf3a27a4cc3c350832b2d9b50b7de3cfd1133c0bdb825b5ef
-b75a1d7194b096f400faedb7ee15327987b28c4a1b96314ed9486755d64799c2
-d0d3ff8503970bdfc9ea099bf06d90fc88bb512e76017c4f3b2a0fed291aad8a
-0f3dc32dd5f08098bc600a30e2f8c170d2c5c0794cd9ad2e01d560c1ff40eab6
-001ef931195705e5d7e8a7cd2f0741b88e3491134d9a28ce6bd5ddf4ea320b95
-4609d24b53fc2587583d6b3daf1dbaf44604d67800b05d966d3423f138eb960e
-a7ceb5c3679c466bb9e59bcbe482eab715398c4e5297a239cc977b61e853694f
-df75728c331dd90a43dc7acc8e752eaeef32e23d24737f6db0227f856c47d726
-fd221115551034baba90738d8a2a832754ea21b4cb437f60d5e9598dc218e2fb
-695c6c789a58eaff7041bdf4fcdc37a128fd6eb9d9ebc22a755e9499f1d0d9ca
-49c008600191dc9cce8783e4afaff581a986dbbec5cbd4e8da639b241cd1f0df
-f70b27d91f152d4e245e9dbf7dccbf4afe8e22d838952a0a2d91642dbd27e176
-9d6d5f90b8fd9bc84b94ab8eb17b0e62cfdc0e78c9e11b294f5f1347c85f4635
-16980766d9c387f0393ff9f532146ec7ff297a7b3000eabd54893383fa030e46
-3211f8f53ab4464e045b48afb0dec9167020dfd4d1cae71ecf32608952c7c3fc
-f1c3be9c6bad89dd019cca32be6efa86214ed1ffb1a6cf4dad9d8f58974028e5
-60f54d16d911ea0da2b257601085f94a642f082262d0cefaec93c2cae7b698fc
-ead0044d713f1f69e6c8835f7d027a4e0cb500bca8bb7eac6801655fcccfab8d
-21e48e2aa8b42f36c1bf4a39b8a8f0c7c8de17d9abad925e2999583b6fa61756
-be51150dce628dfe9d4d05e389b427f062efab63db8aedabe0a50c2dea08f095
-1784a735771e58163e1b083d3a5b8c8db80838d0031fcab2063144d554577e33
-947948cdc0e0818f99868c67c1ba5959cebfc99ca3b4e927c39c92736c54e98f
-2376d88a8e495a0aba0966cc01bb3459d1a9bb16653c59da0f21e214f4e342d7
-d6b35426c09bb71ec93eabde31ff4c3d657e058386f97b5b0d7565c9c6d7e3bc
-486e1086e9824cedfa80c0591e1ac4a0e46b04d1c502a8408f1b399a55f86390
-7717860dcb5e816542b37be544a7ea9f9f3712d3ff986be9961ecb9c927dd27a
-3b7740a8924f572dd2059108990ee3cb5fe87b76425619e02de39966f64a32ca
-26e9daacab48776a9cda828c187c9ed220e7d135468a1b35a49d53a1926e62dd
-528ac0bbeaa882e334a787a1a4580b05c88d4cf648c4dc50ec7ede530916cbe6
-fce2a2ff4f03943adc5ec543268b0833c8e8c0f8d3295da127c51e7e501c3f2c
-02cbc555eb744f42f625ab34a1614921258c2a73c969a076248ec549730929e4
-8d64f7a07e1a150d36ebae24476a34d5e2ec706d19a485ac61a6cb9ac628cafe
-615cd14df7a10d4c0886ca0be8c7c20e2e70862b60a44e147fb1be5684a2288f
-c68ae9287e6bb54ba665d4c01280ae50ebbd2d6f6f2b2716bf16ee7e6ed6775d
-e810af333693469a6e99a33a9533b9b1fe61cd1f962753092a800897883684e2
-db9cd91668b608847c759b7e465373c797770bec3aa5a0cc9073e851ab2f27b3
-c59475c586a264ef263e1003ddcfd2e583fae8bff66b9ea5bcc2e517e87c3227
-1cf7882dd45fe4ab0cc4e8bf8362fa5800dfc3ef240af21753c26f9050d391d6
-b75e22998592a74b06f201429e5285eaf749de5536ccfe75e45b511dcfcd3f29
-6df14a09142477cb83bb0faa20326997551dd1b037e3f973c6b71e123003fd50
-ca395a20f6de9883ea4114fd3cb5ef3bf928e51e203732e9fac0268e740317de
-17cc84c09d6e27c448c027f5424d04b67bb791dce4b40ac66a768a97db358d6f
-c5c32ef9aa1ce68cd5edf9a61005731bf730783501f5c43786724f3d31513947
-04cd43cd4e4adb81edde7c01a22da6f543e55909f4195785d19abece5fe62be6
-2e7ab5c5ced8229b30c229894769c253bb656a53c8ee344d849fdfb20206bedb
-2d5e5a1f3812974f61096fd4c4c87d27b43dbf116ef9c10ede96ddb84ac10819
-eea925d277814713e39984383fc7a0beea3a402360fe8fc256f21f1219793475
-aa4e71afcff1cd1d330a8eaa8c74fb829a9907e6d98a50d9f606fddbc7ffce80
-f136befacedea17d12a1472bab80f42c1dec071774c3789a4e0bb5bbbb1f4f71
-8f1948c09e86b38cb40b4936c3a6267676f101d8789389e7bd365438d1825483
-ca34a740ae7f8cd7ac27e80e559c18892c6452a1a4b4452ae8a314bd03429dad
-9c67c79971a701d789d38a032e39d0abc9dd8ab09633080bd042c53d9e8e449f
-89d09efc7506a1b0d448e561eac8375151f594f1a9b42f71b929ab847a600f54
-3cf0dbd3c1d1a4f39ea3b05fedc6a8d3651ed7dd56a8a54432bfb8728080d2e6
-8d0b61f00d92714a1cc2b64e2c079e09ee3cc866ba5e7ce0364eb0e22833c964
-ea40247c62f0001e8dbe66389fc10f686fb30e9f7702688e35c0c90bd1c53623
-e46f40eb0fb42c12298082c7b4b1e1457d3d76b92a99e0bf5816a10dd22e5568
-3be2d97de2945ec87c16fd9fa240e1c165f56979647b69019f4e3a1519a3a86c
-25d2aab62174af62526706f6c49129733f81e5a63c0aaded9bc746f040da879c
-1348f3022e5c3b39d659aa87d6e7d105b9b7029fb7e8eae4469bc478baf18859
-97cfbc70f1193c8dfce109717d9e576c6c7de2727e8056a6dbebcf91e6ccb2aa
-65af48ac505a3b89f61877065d3fd79fc89bcdb0165f404afa563e81543db19e
-8207fcb26fc3073d265f7c7dd74d7bc4b05a23ec3291f5203b6806c302658c61
-4b7b9b8584eeb2847c1b4b070434e3d50e040b4715d48d06182c5d1c232125ec
-75b72e25bd9ecdb5f8937ae8b92938de5d30fb067e447ff388c1a08d7ef1ef83
-5d3c5ba89aa8edcf2491f41d6d1110fe31019c4adcd3967d6ffe33f1ed8d9d06
-e79aec0f3f95d4417ab16316f66fc7acc8a9082692780d7862043a00ab0689f7
-85fdaa8f4c75752b726ae4c704922f49844483807e16af019b4bd905ca8816cc
-8763718ce3998c4b9f7bd5a6859333774d3f9e8d7aee946cd9d5c6c5846f0030
-44edfabf7006b4f6321f8eb833badf3690dc283623dfa7ee35bab5bc86bc46ea
-beb720e13e21768e551fbde2f003ec3ff6085e54493477844525a6604d256634
-d37daa73e308e13f2f4df915b07f53638514328c6f26acf1321438a140246c4c
-402f8902486d028c3549585efb9b9c58061798977a65efddbc9a4576d26e9772
-629f7ef532c7b18c51d675b84c77329b04c2a23fe0a0f4b9347b8550337127c6
-692e80e365fca46815a6e11754c466f957b7ea8d468545a0af0c1d7a1fc3135a
-83096cfd0bafd397518641011e4756337c5cb7de0e94f2374f2a1cf74d596ad2
-1be06533e630efbc8e27492e4084f08e56ed8687a32c2ce5e0a01f5a8b3598f3
-dc007e8757f64d9bc7f7979a6a36b70a0702ef43ffcaea3d8446bada7f3890db
-f29bbfc459808c8c97fdaaab4bfe6ce2739a2fa52d28580b343d814f3d0529cd
-304011622346d4e9a7fcdded7245bd8417aba90104f24ca493eb2a7ddc6e5df4
-cdf6872f1733f22acdeeca0a660a4f74142b5466ad76747c7f558afa6b997d49
-5bda8b577d70ea0faee81b34eaed8f823ca3fc6a2984a0d207ee8a505011c6cf
-806f7cf37c34b6f1920a27c97144c5b787646a41b73ece348739785b86a1c745
-a0c0475a6c6f82142c6d9e17d6b2b2a544be1738d50381b1ddf9152a393b4cbe
-5cec04679897515b3e3640a775ab3501320cec975e74a52700fa70d9fafff8d1
-254109429a31f1e5674ef72186f10bbb65937d4f4a841a88459d492f21b38458
-74899b49271e52117fb01b2b4e1f4d1236db85acda95fdd60361e7f40e5854cc
-f9fe9b4f2c8a3cee532bcb4bd8a933c30a21d43001907ab21dd7f193d1665c8a
-29b363a9288c3a22c27d4007601a7333b584171a4c8cf62bfb3cfc6dbd691863
-4998e7eda8b657182a82624744e54b6049ff55b982fdba66dddfba783e749a4c
-ba4c187458f30aa4180aec9e6970873d7fbd479bbb623f92ecee1e764d0ada70
-aaef8a65c6f0a12dcf381512a3ed2d7c1fbca9fd4c339f54e9e07751e76bc41e
-076c810d371944ee53550509c36494ac0c721ddd4d4e1e56c2b28255a922f443
-eeb39be4d1d9f3093edf4f50e98ace4710b14664b012adb5bd89a434c686e4f8
-9d08835c0169cbf9208332512f5f54cebf4dea1a226900f93a59cfda627aa736
-33118fdced43b32d602dfa09e3e7dd97f962befa7d3ec4732ab665ca19269c22
-32ca37623967cab87ebc0e883786a3912e6d727ee79b57e12f7e55a82d205ce8
-c6ef96ba1e070a5eaa38864d45d9c3a0c09f0aceff82add96481708e61f49638
-c65e2e97a538c98a9c38d59deef0df54dfd473300f174e8e284c3fed1bba95d5
-6890f49e3f6474248d904ff92aa7310fb9d7ac03bf8762af4f438ad547ee149f
-4bd091747e8692c58798ec4e38b0e127b7adc842aad4ffaf8b516491880643db
-f61bda9628a5b12a9352d2bf0ab476bd551ff2df950ac860d01e56beccced7fb
-89e299a7d14bbaad3986e32599c71cf3152518e8f7227d09349119f21a02388f
-3937e7e7b59c9256865ac867cf6281c08860b5e1a759bb2f5ef45ce8af4e1a44
-ab231b1580d31e740485c269a43e958293386b6620ca3d3a1bde0dd59c5b7009
-b4cd0e307323acd1f3bdfb34f1b064084eab7ade9a97a64f80bd0330708f993e
-5f1cfe25af6736172d974f060effe7450f48112fe515af2e48506dc426fe3ee5
-deee30e475bc8077de4f409beb2449080c32e0f4aa67fe891f05e28ccfaca02e
-7cdd24cafe6fa5c5103c3875c69177d3fda49a3734f56ec1bbc5876854f80d4c
-24583fa83e423f362c1aaf15376ad679fe115ad7b2405958f7d75fe431574a71
-3c0645148e3f5058ca1e2a01480f05a0072e74a7e00e789f7a4e73d9d7a6ca31
-97d549a590ffa592f689aa8f78e5794ada22465fd28fb1f85b2b9e8aebff4478
-515c7a0ee09cee08f5a000e35cbc09aaba9120f68d0d13ab4c6e2ca137c8eeaa
-8797a1500a046eff4b5225c2dcc1a0aece46d4462dc69c0a162425d2ee38e7b5
-d8d0714983a94bef8990267b7e6e4ec61ae03092d3731c96e7de891109b61c1b
-e5e2fe6357aa63ccb881a27b3e4e7c4729cb9ff7daa426c51ca11c0460f41e7c
-adcbab982a9ca4080a62e8fa0486ce7851dbb49b994d6763ce9b7c6f165ce6ea
-0a41ce3dd71e1d9fa393fe69c16de92c952b9f8989cc7a7d1f67d968a29d1f4d
-b5733a3e10bfc89e243e21915220813451969593eb43b00888bf791c0aba7666
-dae91c65a93b8b8cbac730a3ba7ac5c8be74a6b40f6eb7193b68c1a662434f2c
-d6752d8f4e3dfb94f0d74e8e8d4a32880670141dcf5788b8e5ecb6390097b9f0
-dd13e0fdd3cf92e6c9537c927e0f14ea023207a38040a85897939f8616b6db16
-699c46e7fa915cc0f953e6cfe0a6ae224d99e360cf92657009aabcd521bbd7f4
-9907623df385245546ac1aaa54c15438ccc278a2f1b4d542ac2105881f990d67
-a9c17ac10cd1a3734572920d2fbe94305f338a3189b6a33cb226ce1faa107058
-cf2923530ed6ec6b39da94de955f1779f480739c120cdadfd91b62a3d8f132bf
-f9fe42f0c0dbfe83003c4f99872e0ab6bcae9696167fcf36a5c915697944e758
-e74e6980da0c6cfe3572c27bbd2f6dcabf51a7d186085a941286d81c1e0c0a64
-23a287e8ecd11e3618da7a668dcfe8c857bf66cf5ff866517ada4f2fe6b2ae30
-62ace29fb869cb803a8c04149be3157ebadf810d30d223741bf2e464889fc55b
-768322c47a32219645be960d30cd017ad32440ff572d5b6fa13130e448a47e1f
-1a1484a3bb1672aa597f4a3c1056018df3d9382dcac8703f18918a7c513bf42a
-78acadfb1b49e2f6273dbfcb51d06fe631680de7eecbf2b8ef014d720a4da7e6
-c4a3921794f63e402c36d77fe5ba1cc960ac2959ae8e4486e0f2f33630f641c4
-7790b7b689f60775f3eaba5d626b64444751d464a7b88fe5521ce190f5e31ead
-181b5b58ced29c6a2426ac4470130f40576d6da2f8c773cd34fa701843dd5afc
-10561a36404b38b3723adab28205fb5222e86f56fc1980cd966dbd72759603ed
-4e13b12f33ac167ab07e9c9800b5233acf0c2f567dd1581031232b090cad9640
-e98585a183eb9d6baebcd1a41d892c5094d4111c6a9f25fbea8002c5c753bd9d
-04b871bbd040d59e8750dd5c55e196c57457ea5f9419ea5a24357ce7d92fb76f
-38a1733a46e3fb78402041caef0f08e487e356641568ec1ecc6bd9426ca5986f
-af9b3a6e4549cbbb5c862e95fe776f211e8e0ecd7bef5dafea96c0a7eaa1de0c
-0e0b4563e6cad7533ee0bb48221b9a2f1d28452e3b95e5a2b6fe3c988f91a840
-af705a3912ecf67c19b4c70b77d6594e0396a694cb18e3985872e804bcd0199f
-cd6363551578b3e1f8662d0cc4757a2132ea6c0f2fb3c7dd583bd96d37cb77a7
-fb7620d06fba720dcbc7f941f72cbefdbb60b00a533ad2b33ff4a93001dfd876
-510e3dfd5c13ca50b460abdf9f2e62e3f905311fed6075b69857fb6c4375d9bc
-9c7ad3c09b68131600f08c7b65291425ef2860d5342d5b848246db9b566d0f79
-d55c79b7e2050c55f4a4c324d1f90bb612c66cf6dba2ef84964430caf49b3a22
-6f69eda213ab844ba63caa2193801bc69791d9f96b6b341bcd22f90b2479564e
-334bafab111cab39e2b642f40e68142cc117c9c3101107e9f57b0779776ade8e
-64c5b63bbd8417a51887eecded57c88757b03b2d8c7ff443cb7c928f1593a304
-63028099104ac1843fab7a6ae7f766bf98eb2d25cdfdf5849e91456ac3cfd3d7
-ce7377f5470d6730e7c7f8e704b21ce4ccff7552f5789ab3076e43d84bb0c80c
-44eda42bba72d6fe2369097949b4d13d3077149af5ddf5292ed311400ec60624
-abad78a00857e69f9464523ab1791493f62000081a56e2de70e90ea0f21ff005
-b14bbf10a43ef2145e21296bb56689cc3ae5542b364001a1523db41ca5b62687
-95a10ad583d933b5974ad6ab632c79c632e3c59a16142705c8368460faaba9f4
-420071c50a54ef544414dfb71284db6fe4422dfa0df97dc33c9929acaa229d5a
-ce4ba10658d4cc1e6ea26b4f6ec5febd8ab50a6a18df75275407fdf3b31a84b7
-bee9de120e81b1744fb9152ddad1335292a1614a6e70dd33cf9ddc306c60a36c
-c5e1bcb3c3b7685eb5e4d7580273239ceaa84adf57ce1b36d3d7baacf1d58d9e
-4a3925d3b1c2f4af856eed3d237f708993b8f040ef00da03c80f71f1c93f7d2b
-f4248dad2a8a4bba75070b3414be02abcdf60f2f73e055541c1421a154c1dd8c
-cc6fd9c8cd920555137835690111d8b2ffee1bdff793d1bf13923518f170295d
-c52ac34170ffe825564967902a48ed232ca6e1058585b0ffd48b2a540abf3297
-e6738c776100195569fd7a1ee8f99226715aa63950aa8c9e58137faaf049612e
-7dce103f313652c105826fde10e7f3037c3dfda674912c2bd196924f76df04ba
-9400e2b7461e89cf080f76f1f3ffd2b97c11bed972082fe39ac214fc8fd9d893
-c14fef3a2be39537de1128d095feea28d8ca06f23053531d39990febd12746da
-b702467999e01bda59185a9adcd63f2decdfeadbcddff01eb23d61cbe1fe216c
-5ed66953877f5a9fcb924ec7ca78315748a59deee67983f4a609c6b1ab229ffd
-2d1ba3aec6845720695619be40abfc84d27b8d6e5ad0d99186c7751932ebda32
-940f9e644e64959076268deb307e4b7ac71ed9b0c31729c5fc6e0c322ab54af2
-59a99d3c77ddcfff33e22b2c5aba398b7ee54aa3e3ef0ddded70dcec4fbd573b
-52a04f0fdf725fde3ac6be96694869974cd4abba8207dc2ba441d24394ca7352
-56dc9ce701e6dd846f2c3f5438a9421fbe734ece254bf01a9d194e38e99389db
-8b8ac9fdf2937769221483efb16b926891f770adb8f14c8eb08b66470e10def6
-b603a7c6ff985ef6b4d5e70db8f35ef81606665ac243176e1403a87c14f1077e
-9c5f4b9613c0b1ee375779e0b4afafba1837891921a2e0014a153e7dcf384096
-0ddcd16b47917abf6afea23f3995f92d14dd3ea8c2374affa9b8bae577a8f1ed
-c609e6f439950d1812a704017a837fefe028bef8f4ca25239e80a9f9f56a7a68
-d2e709b84458a1be684068f500c1ddbd91068238d6d81bd87152e601cdd6d9f4
-d0e2d8fa8ad851ada277b9b75696d85518a5c05406c4ea28cb9224f4ca07a6d0
-861223396d0e8a672437aa404d1cd3f6492283bd5396ce249aae86e4b36179a7
-0bcd800625d9787f30f73b5b77fe0a89757dea0723c177544a081a4612e9869b
-58b925e25f90790f0970a9a7d8085f8e5f665d26651ea0f8a7e59377536f9039
-b798e1300768d283301bc144646b6cab6908a6b3e6893ff31fdd36682a3ba11a
-25e266a179286413aa0c05ae9f6edb5a7708d5f015eeab9cc2a2029689783367
-790e79989d17ce431ea33c7c6e3dd1ab2f49a7b014fd8190f0f61bd7303d1583
-a850543d9c0f766f00989d82e3e3eb90d3ae0048a743d1d95fc2828d16786d72
-ae0b08f3a6b9e4c886bc569a71e6b0d7b71d99406d12cdcad7d0ac8e722b2e8b
-3cb4e91814c89d0a23784b48ce33902b1013f701c06bfd431bcf8fbcab428b7e
-47baa21e77db69547504d5cd4ad8ca68f6735f75c6007e0a28a56935924a4360
-8a693822857e5e63138fa6f62f5d7213515f503b507c9e9d0bb74225893840d9
-efd0d205c007cca7aef6e26103bd713a790ea0b732fac802a2ed9c8e93ed4687
-193c70e80ef98e91069d20f966b6923aeb0fb2611ad6209d058597095c13d30f
-e4853808c77ac63f9cad98f060248fbbcc341054542cca09b6ee574c03e46f27
-50f58ac2870af9643735162cd9c8ca92b34b06151efa7fa20dfd65943af9c0ce
-93feed224469c7ca8f5019719678e1090f1accb24a506d50c85e96c80c17a3b9
-2f4138b25424da0b47fe69bd87651e0ede08a552d4b561b936654d0e0715ae98
-d21dbc03e82c784c0a05be9b8152a01e4908fa1192234db3fe8528f38fc436ec
-1065fc4000a34d86b06b46d77f8e20fd7abdf2c83797828f4cc7bb6b03a26695
-6f09888fb45e088ad2627e2a8c16600ca022da2d217d4fc84239e0c34d9bc904
-9fa7bdb49b7f2f8516e2b0d14ac6931a5b1c80daf47cb787191833a434950b20
-7f30d7aa23c0a59b2b29b8ef5b8c078df0da796720c684e313a5392c9a0beb92
-1a24c094447dcac8cfe9a33bfa473dcd5c6cf94a59afef957406da114fb248d1
-d81d603413ae224de104081891d6f3e006aec17e09b96d3f2bd5f716edb5a630
-806b15379febac723dd889b850ca28b56bd19fe23106c7da95cee26a87feab90
-d7ebf3bccce37c464757fe7b8b64b7b4e3634f9ca658c762780e7b2c57d3757c
-0eb14ea621c15ad3ad018a2b993ef65189aa2a89702d5e3b4236e502cea8eda6
-795115274c745e87256e2ecced919b7e582dbf8c0115cae9ce8361a771dcb82e
-78fa222875762ccfbe9ccd78ee0999c4a6b6de22506fd878265432f9f533a069
-1028988011964ff7bf5fcf6bbaec121f77594ad8030f88e2cddf8d73904413d7
-1d3e4c5facd19418f866512df9755b5204c3abfaaca69ff92d075a81c2fe299b
-bc8e5254f1a4bf96dbc2aa3e50c53b93344cf7556fd7427b6f7244cb78679157
-287d9ba441c243e4ef4b0ad36c2712c1868ad585d40f6dc0d136d46630b90584
-cec60c100bd93efbd82b0124905000993f1c5bc71031446da0bb1e9d8637b942
-0c98e16a5f755560d7682a46e42513a232d0d1fe1fba77c9ae23eb629d43fcd0
-b1b9c0cfdab678e793d85f0482254acecce4ad807df3c78f5d7cde6c019753bf
-25321ec2005c287e2fda0f13d19e136d98a8c6fc5559704941170a372615dc60
-8d6514e4523cb4c89943699b733b0d8e1eec7c0e1dabadebd3d26cdb3e6e3b8d
-e22509e1337ba480131137daccbe5c7eb0cfdd1d7deebfa378cfd3f958d92700
-2dbae1e3ebb67da61b74352e5ce25d44ee86e0e05a350e10c322006d2bcdc6f9
-cddc111063b9e32f713f75c0e4131c3f0ec7a7756bc6aca09adb5f2600ee4be1
-6baf2ca4943fdba744ef0e25199907aec67c08429a75f47fed8ea4e347d30406
-bd8262e86ea3b2bda3946b47d43aa0ded683e51f10bd89798114324ce0d36d78
-f7d57a1a4f5eab9eed5371eb688ab14e601149dcb7c81e97414fbd18985c6db6
-c4e1d6c830663cb5361ae808dbfad9a799f1aeef5d3931a4461f5fea80c7f1bd
-941247993773007a04b80d1b742754ff1baf845a59aaf397404576d9914bba74
-14d3680b220697a80876648f03cb05dc289410c263e71033f1fb136b899e1ca2
-1ff0f75d78d869e43953b1f48b6feaa8dd9c996d025de3f8e920a601b229f242
-bf1e2dc7c3ccb09609bd6c07dd29f6c4e43467b6a24897c49fc30d9d40d6251b
-5db00a27ac9e3ba31f0674350b0f15a056b151ac22bae56a91767969f6f3eda3
-cd45946a2aa86f594f8e5b3ce08095af6b7e7094e3d8523fe518660a2433da0f
-7b64f687c1803c2f2b9103a4e2898160a954b87a068a6aaa35304771e466e539
-c4a8319310805881e7ffaa319182cd40d9fd98ac7d3f2046080070c505acf070
-d6836b1d6ea48c5cb5d2be8c73f8eaf46fd0d07dec52a96f0a60aaa1eb393799
-b41a5b9d683093d30897ec93537893e7f15ab7086f871bd8593b953dc9492b94
-8a51904ca999bc890bbe92c8cb927aa7321b027086c72bb6d2fc1cb6bdcdb216
-3de7bcebdacdbeed306b0611ecc170712adc01925ca2dd77cbe9d9a3c6a75a5b
-1486e3c736bae26438dcaf9b70819b0ecf90441ec57e6fa7c0d4e5d8df318b42
-de4c4004ba7249649d4b74e5823670ba18dda9f44593c1a941fceb5f8c8b80aa
-4db4a8bf5451b915e1098328ede089f626f8df6445c5057e9b7549b0fd5e2244
-32787f9fc2df42cae9a3d63af3c9c3919f2d49fb278d0af1612d4fc29b89816e
-fd2241bcafef8fee74fcbcb324ef593a2f3df28647d31ae106fe8f844e3344f1
-d731e6de21166fa3fcfdf67fe4395ff214035e21e160c73f1802b68fcb5c8418
-651bfcebf502a3fd68cd49af9ef85d4720026244d76ca085f7db8551659eae38
-8e023c33e20c5837b30220b823178e721d8637a7cda8a4daca9dc5b2e7966568
-bd239ade15729b823f2cc4504b5c5971c82cfb7981a67cfb04befb9a785b2662
-d59f12d909388cc2bdb32b6205f619644c06aa9d15944843084e3d26c6a3855e
-c7ea537fc70cab978545be18dad23fb231ba6e9c94f418550fae668e0397cd38
-913608cb2e273034cf9315eea33b6cb9b3d2313edc6108b24fe84b370babbf28
-102eb92b2dc6abd1a7793f5168153459636a9d7ba34de9d4ad1f5f443e016799
-9f3c08e30731e6fc8ddb830d6c883e84cd88be9be6ed1c6c2ca2abb859bc5239
-3e4cd913e165c8494b622763e3c98956065497111804034094e426585597618f
-377c4787782d96c17397d0161f9c9ad786fc0494ff66c382ec06b67042874d7a
-1a3fac936e74e7a23266451f45a007805f2a7e006c921ee45f8150c48360b167
-f6cd447a4c64cd292c38cc7f8f9e4f2777331122e53e4394eba63f0b6dba76ae
-6099f16377e1fb7c20d090fbc96530db5a4f1c85bfde805809de1539a049635f
-67db71db139500642abf08c8fdbed3e580f08ee07efa1e65f266c02e6071062c
-7d71481d44682bc2409884f072f4df7f213bf4ae2917fd01bd44dc0c4838b11b
-6edc242e4b29a9eff5381c348ec2a43284514fd6c0c74447ab6f507d5f15b7df
-d75da2979228e21e893fd048e2ff74810314399be42edffc133666ab4a198bc9
-54c43faa1608b30cfd16b80766522bba0b9eaead4c7fc78a3fea34bf9c4e7c86
-8165bb285caf76f517ad73210e40942985e6aa8ed9ab2a807d672eba28482fdc
-772a4ce9c0e089e3635c7cc2cc3e7ba917855f22931b20e64966c8e5a05c7a1d
-622a0db3f46e6dcc450ec2307866d5161d90057357b7c4901a06e17b676cca13
-3a5f03e5f4dfcf88cfbbc8dcdb3f082f45738ffe9b945e5d5a24d7c83d241d83
-e6ce0f8d6e2ddaec5c3c8bc4e2bb5fde73b0df392b0a558337a444af1938e394
-057d0d8dab8957643cd51fc771dbc25090cefb656a4d8bc3cb50db3fd73a3f98
-774f6e400363bef02ff40f5c5e01269291e734ec9f48b9de31ce52a0a13d5004
-c46048f354aeeb0c5043da6b741fbb31df61826c99f788c1923a3d8729fee351
-185fd0e451e66aab88193f6fa0f62f915f147e06ed9b2fbb719d20570c00088c
-42a5482774f25d5fa87e1b4958de97a97c4c107ea5ad6b7196c565e75b0a21aa
-1fb06250d80dd99bc74bf099659f5e18b09d151bbcaf12da91c796151450804c
-bcfacf4df761c1ec3fcd0a5f5f18f76d2392be6c7e2ebfbd8bc74d0b9715f92a
-07f39d6bad9404faa4ef401325966717e05d8e9f81f61eff39f52a10f2bdca55
-633967076fafac89f1ac71419a868b8870532a29a10bb5997899e1bff54b6a0e
-f6a4b4992ff286a30105b76a6ec1e01fee2a5fb710332657b68c9a9c04a931b6
-f19ee576da7c07c6a26a60043c48db2f4f181fa7f2c61a15dd0ff8b6844428a4
-024d690d8594c8d55ac5e7194280a06fd45e8a3604d316b9d94934fafed77bb3
-4d1a8a5a7c0074f6bec5f2698cc345bf7f41d65f74987c16edab9f856f156e49
-20282e77d2da027361aacc3fc9b00b054ca46ec3ceabe2d79cd506761941e9d7
-ae6132ecaf19443acecdecda81d7645980a92445a745bad81f23d54ab61a6755
-4246a9e4b500478e3e033f9020ac3a663ba59d1a15f2ee86c714440aa4f78149
-5174c776c560120ab417ba580ce6249d3afff64f6531d682665a8de1712a4fe5
-49d0cc0ad7f274fb1c94712fdf1c8afee5ee5763969042fac16613ade30a41cd
-5812ed4c5cfaf0ed5371e1dd4713101e6a28358408a5a678f4240e2bcf59576b
-e935d2eb8f7b187ef1c3252b4660cf8868883a1e34af76a51e1a2cc298a0d869
-555c14b4f699f7b5ac31be8597bb837d4437d076ac20da918b2bacc74aae016c
-751aac2c883d710f13480505382071d1c575fb5d03fdffd72d6a2094ee88e83a
-25c7722fc2de6bcc7feb52bd518ff005e39768f05c880ddf9ffec733909867ca
-cdde2a2bbb9de48341b46f9196e7f8734c135703f398f53dc2bbf4d682cfa15a
-16c66b2dd9d87baf522ce7fc6995c42c2baf739a7bae0c8c704e7acde6e3b45d
-e63495dba7683cba496577579625c85eaa79d478e28ef698fdf629b9fff7d293
-5dba7e431b288a5826ba7c28c9930d84f1acb4a75d48a8d9d23a27ac7300482c
-132c3daabb5848f0988f89d87f9871391b0c3a5460db1836bf90478ddddf39ea
-87186908e87ac8c455994249c326ed6b96abd204b37cd863070625a7e1eb2542
-3c9a6df27ae269110f020586e7694551ba05c8dd93f2f589585ebcaf8df0f959
-bbaee3aa4dd5d544022b07a9bddc7cfff9c63d28f40dd05433ba65d1f738a045
-c742ef69183e999f0fe3e7694012dcd94f44c02a46d91bc55fee95ffae8c0d11
-3e0d4ebaad6caac508d3feb748fe15c88b617f05f07eaa611edb5fb376335439
-0416fc97aa5903130a846ee8339c05aa28e7e4cd40bbd6e54c65a6075cd40bc6
-11c3b56026dbd648e0a0d81886186ab74ad765b8c962830b353b324853d4da55
-4c3ca93c06bf357edde434e49abe2fa45579d09260ad59664c3585dc51ea473b
-e749f82fedf4e57e6bc8c68ca375fcd8a5eb096036357d9e03429b5e1c87dced
-39b5ccbef31ba751bb0f18ccf31066a591348b9bf0bda45b5c3f9b4f9e44be65
-fd9b07ef18cda6261f09bf80fcc4d7d47a1b875b1b54b6009b342f75741ff79c
-3e9e24f59d2f1b40319d6d34f51731214accda46db534f5eb6ba4cc60ac321e3
-969e1269dfb72916a56af2449049de085626563221b3f59df08b3f0806eeb5b6
-08e143b0972073188d936e34aff2980991b97cde6c2d914cc8983e7ee1ee0932
-216bee4e5c190967d199c0ed6215d760618423221f92cc15b4ba2bb8bb006f35
-e3fa42e74ba98c78b3c2217b4d64727dc036ed148cf29a7bbb6313ecaa0dce49
-91f71f16da69c779241167253922dcd59c5186f2dfb78143df850d6e4260241d
-e677af13010da78ac45610825c97004e929977eafa85283869e5244d10ae08c5
-106474101c7bac56b80339a912bf749aaf8497bffbfd6ceeebde42b536140d16
-c447c40038a77f696745cc8cf78ebbed7d448cebc5f94539af2a28de4621a142
-024191e27431676fde34151137283ee00272a3cb383fb6b62d9c7ff6e525b37c
-76b3cef3c81d3955857833e3fc0bfd561f7b2ec83b0f884602c2e9a07471904e
-6071dd72af32912d4743e3939bf4e215d5edf2a8c0e79d3f26ba239ae6d919fe
-d210388cb6ffa9580568e5f1d277b1c0339c72244c11f071d0d47f10e9258d72
-ece6dcc22f03c783c8901973d69c19a791ad8259c67803c0dca86ceb44903c1c
-117cc5bd0f507c173588a4b6751694c2e2b2c1221da7a9d3fe11c0eb464350c6
-8ff963fb5d14cba8b884dc9244727d1fce9afc93a3e3715428fb0772339943ba
-94e4b54eb0878cac02dd572dd5cc2b3a8aec7e0897316b4192f0cea168086c24
-c96d511f13680490119eef16a0fc8371aa5b9d5fa9749566fa2c0d250c81dd2d
-0cda28f7b32d894bba5f6cb0e33f62e52a2754ca699edb1f4e6afa65ce6dc617
-76b2911081fbf7a1f09d0545f8cf67c548a5e0963f07c42c22410448abb55d05
-38d8d88fa5a6b57188de4110fd3bd87fbdbe613675b3c9196cd630f9b7dc50d5
-2e76f6349a9198a827b4cc3d4610d7ddc6aba586b0c11fb08bd1cf8a1cc0dfb7
-3dbf5d9bbfaffb5c4034275298d4a7956395c1dcac02041c40425217fe8611dd
-9d03663b0832a10a5f4bd7758866856d4d480fddce109c3c26ffe6351f3eb159
-615d69058c32c240c8bbcbf84b828e5b275709c3bef7e8c56a5ce4e11a81b2f6
-5dd400cbaf59226d8753eea61b3a1c05f93993cd26f33e92550a1b5f81801802
-b7e70927fb7e3b476f1b21e21bf6a8b6ceee3f33aee9631ae2c456db548f83ab
-ca6be161038a083611596c361ae607f0e460dfb535b3f19cca6d8dce4f23e056
-e60e1fad2406cee07c5a5c42cfff9adb309a77d9be94e36411ef39f43878f7b9
-bd9b56924f19b1cc64e4c5dd0db62d27c25d3350eb2695d40a4d48d0274d993a
-d4fea893b7ddf6af678801939f33a366f7a47fd309980341a61f119b582322ea
-fb4aae95241ff180ae845a8360ac2c15306c7df0cd0b5dc00372b3e8453fbd62
-3437a8b6736ab8545c1b705f56905448f0149a1ac5f469bf63e856f3efe049ce
-d9ae727f3ec769f044f41c247f244ce7e506658ed068bd14c998f324ecc17ee5
-db9339bc8a48f29de7b8daa2b646c460a36414d0ce257287079f17fcc45c079e
-44a7bc49e67b88e36c728a98f4284153b07635f7ab4ce780c688924f1636427e
-4096935519f8d11ff62b594297a3f1579e403cb18b0945c4701e27870e3e4634
-b35952029cb1a22832402541c96e76393a02096ad4b139a863291255e7a4ba27
-f827485417e8fec67444b11961b5236d0b07a6ae188f8dbb86e81bde1901bc5c
-9e730284787aac89a4f52ace0a4b4aa32fcd943a8d070ce36c38212d0f856e5f
-fd1d55ed7e20cf5216c9a7cfd757e7c4d207c928d10d9d0df854a1f402ad10f4
-41e1ce4ceb76f06d48f91f18ede3be0a15b484bb20b3d2e9f5ff7fc29b05fc66
-53b5fcb100fcc44f97c96f5c5e90bffd6842c44d0e224301c4cf7e387466c5db
-53736ea732e361fd81b55a5cb1040ae1729f05eca2a970dee9c400555490e9a8
-ea1da61cdd0eb81bd11040453f887cb721401c01de8441bc0ee4d5cbc9bae418
-5e4b7a17998de56b9ce921bc1fd4443009b6bc82cae29704a2b798dd17dfd011
-307e888330d1b3ec87081ab27a2b35d21c50c59f75e5a190d6951b0402a4a8f1
-7584474b6407f237bbc2558ca0936a4c4be5d69292860cbd13f7fa609729b196
-1380281ccec11039a4a1df6fe5026ef18c55a665ffe4807de21cb71289048136
-8ff3de1c275e34031ba1d17a540e0d4f5a0b57bbdee87e4825d269962f3de6fb
-8fe75ad356412319592e51fd627d9a395ca4b5f9c3212126c05736f7c0cde20a
-b39165589373dfdec2b54634ee58ecb0465d00249720809620abb99c57307f4c
-0fbea4dcde56b66c9e84de579642221c1e9a9307f79fba1d1b91cadd92381dd4
-51ec2d6c6ff8f077ddbc5da659908ea03b4e2c2392bb40ebf2d7277affe3f61d
-330f55f28b25d06f42c5518a623842675a66bcb6ade4aa8c066038cc37e77364
-a28da5025111315c9a48f3325993e6701623dabbcf072574e23b8e902440e504
-d145f7a786f178e2a9a0568865e5d69c4e944f81281f8ca86dd1dcea53dca3d6
-051c893071c1562dea22b817356bd6307dad57c44d47a0ce248977113107ddc0
-2d994a55263259fdf52b4a0221ce39f39a77a31523ab0c8ac60f6626461a8433
-5f80e50e343dfc8045b407cce1cc61d0d9dffcef085de077ff0b8d11dbd073e9
-7ab09737f12f40d8e602c80d22abca05e68d827aee4451bf466f6205add41e56
-b4fe989b278fdfed8fc086c168c4859307e2104bbb74a2b11c9c08e56c96594a
-8e6f09b504fb5c18dccf956c1fa14c250ad8395fe676d8c2b5bdc8b3fdf34196
-924f0b33188301978635ee2a1a6ec8040f12e34bb2cd15c3716ef2f0edf0a1b6
-79f8b021dd56a95c54719da4189de035cc15da1880a3f7f9844c341f42dcdfb4
-3556e3d300697faf0dbce932875a83d1098890b169f67c1ae3eaa336b2bd0b5d
-27cec749553216cb15552a92e9603bc7a9438244f0143a14474f6e99ee7f6bb8
-e7ecc328f3bc25a54d87ac07922edd1d2cc211a330be20c413d883f38eda69cc
-cd00735409827ea7429dc48e43e5ff22318c6a6b691f18d05837da656db3116f
-11254d292701f6bd92edb8687ab02b15f67213105731b4ec90735c72cd33e17b
-7f701153ef785b1ab39303854e34a63c3da69a10ed9f018d95505aab7d2a6f8e
-bb9b33fee02c4f397a20c80649e9d88e6ae4053bda65690d398e7c6c5bfdd0c5
-4e31bc4d1c8f62369189421378638e0cc24646d0eac6084d53fbff200009a954
-01f4aa6b2c71a84eb5acf649ffe28d775736e6b06dde795a8e6050712b8365df
-47d9cfff08fc36e821398ff092366e1d1d623749bd80ca1a3ffa703174ac8b8f
-017dba3f3d753bb5536b0b40fd9f07de7d
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMR12
-%!PS-AdobeFont-1.1: CMR12 1.0
-%%CreationDate: 1991 Aug 20 16:38:05
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 44 /comma put
-dup 48 /zero put
-dup 50 /two put
-dup 66 /B put
-dup 69 /E put
-dup 72 /H put
-dup 77 /M put
-dup 83 /S put
-dup 84 /T put
-dup 87 /W put
-dup 90 /Z put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 108 /l put
-dup 110 /n put
-dup 111 /o put
-dup 114 /r put
-dup 116 /t put
-dup 117 /u put
-dup 119 /w put
-dup 121 /y put
-dup 122 /z put
-dup 127 /dieresis put
-readonly def
-/FontBBox{-34 -251 988 750}readonly def
-/UniqueXX 5000794 def
-currentdict end
-currentfile eexec
-9b9c1569015f2c1d2bf560f4c0d52257bacdd6500abda5ed9835f6a016cfc8f0
-0b6c052ed76a87856b50f4d80dfaeb508c97f8281f3f88b17e4d3b90c0f65ec3
-79791aacdc162a66cbbc5be2f53aad8de72dd113b55a022fbfee658cb95f5bb3
-2ba0357b5e050fddf264a07470bef1c52119b6fbd5c77ebed964ac5a2bbec9d8
-b3e48ae5bb003a63d545774b922b9d5ff6b0066ece43645a131879b032137d6d
-823385fe55f3402d557fd3b4486858b2a4b5a0cc2e1bf4e2a4a0e748483c3bcf
-5de47cc5260a3a967cac70a7a35b88b54315191d0423b4065c7a432987938c6b
-edad3b72ad63c2918b6e5a2017457e0d4ebc204a520640fd7c4d05e35ea5486f
-a43d0e970787203855daccb1ed0b16325828b13b7c767a1a58c87902f0546ea5
-404440fa6526975783c2d7a9572b8e5d5176bac598b8960609f49016aebf3763
-89c1adfe6a1ffc0c53b3acd9d168ec3a278fd4f1d9b085dc2df701346c9d0887
-3d230a161692b42a45bb5da343b4edd839dd60685a59aaa49fc65cd8e2ad2a9c
-5cab953495172a1a9f40d5f38e922443a519dd96f667201a408bd1d89e35f4ab
-98e2f68c3366efc14b5afe1018d9c845d808d4f8e07ea8168518a171ab4d6e21
-70eeac099eb7ef46eb9781384da1fac3b3133bb718bc80082eaea88759745188
-f266b31d0c7e791d633f16ed94e05517a32163e74cbd96dc5db066f2a5313d6d
-7f09465608cb404613e0f058073af000e5bdfafbbf9da0c0d5c02a3447f2cdc1
-f56481901e34265c26d331ac3f85bdcbc7c51ef9eddf2b9c189c5253f8e74282
-d6f053d7d183ae17ea175e5ebc401e67d21a9fea139cbbf3bb1358c713a75843
-b39a69aa2b1a7b975f53ff22d1dc3bdf7acd17afa1da21568310c68241b31d3d
-03bf404bd30baf9cc19c75b958bce7155f03cb0cfe2cae0327aad4b603284a51
-7c26de75b8c6f6aaa9debe4aec08ca4b646d787a9dfac85b2c01760e9c6c6162
-fbbc67dbd0796831e00c477d8e23c375ffab46d289be9d2328aec2b7534ae4cd
-d782ec2453e7787f6e6b4537b46c01545cba6f90b8e9a1bccac1937bceeaa5e7
-8e9f368ce067a0a31da98bfbb545be555a7270f0031fadd4f9b186629e5d2c5f
-d264f8f24cd5a1c0f68399ff4b29fd77c4a54d82965234121dcfc95e04370c28
-d64929bfeb9ff4f28dfdc4a4652968683eff42d778fcdf289227f64e13bd9292
-68f9acc1a2bc66d018df949d6c794030609fe89bdffe1f5cfd2b51dbe9f1ecf5
-26acc116fa1e5525a59c8ed8973774bed98ca3288cdd22f53604ed47fd53fda3
-c7965e31f5e6f00a589e7712cfac3d361e096ab30fcedfcfd57a556dbcb4d379
-69055e450f37fb7686e482a84a746cad4c03b4adfabd6a5d61fae8a7198daae3
-32309661c3ff3eda6c2909101ca253b91574857f77f6fb002eb81b2476648a3d
-5c0e17349c459cc7bfab1ee2b8d5960c05afb4ed469d1aaeb3b34b8890cffc8d
-d159388c2b0b9021be4e011ddd667a5cb5bc2f9101ee010115adc66d7bfbad78
-a8a6401144a558e4b887caa6ad8283df4794d02738ba4bd8e37529c421354a3d
-1b16027db74965a1ec575cf97d600b3d48c74b12cf547c13b871cf80d216c71f
-cadf111fd83d52c0fc240c49af8c529f6787c9eb582728ccde7508998ed429b1
-98e5b2bf94ecddb566fe81b83a4b33f67069fbcfd1e679361c93c4b90b90d534
-9a81d51d8e2a2a6cf04347511f68b65212e2710c4b76c2b1204e657291988de5
-68a82dfc20c5d49e2d168909a043b6fa258e24e8f0a905de6ef3ce8b7a907360
-1704773886c5db7b088985c809a4905b8c1a7c3bca4e9392d5db6ba1406f6211
-9bc0c0a65a66068916011225b97a77db011a01240e35c04da36e9d898ab7045a
-20d51bc23d88a4d0f24f2029730b48b24695495aac2894de1d91de7401dd53f4
-f7be0487b22168ecc40cea2b4e77b0372ee0cd1e04be810b65ca98c9e5597556
-31837b721446b8dff5b5bdfc8c1978c150bb82901b0bd2b7c03de4e5e298c4f4
-286b58199d564f0c9511c582ad9d11e973d059d72e6018fa19f5ab8bb6ca25b1
-80158e99f095105039447beda3e34a43e863e115d57c76cbe33c8159f4b10fe0
-2a9bfffb4638ec1abee13188b59ca7460a6b6830581eba36ccc2ea6370f19fa5
-b15722fa1dbae99c1c453a2398e07fa3d3503c403f5be341623aa1ace3a2f925
-6e7b7b0e25244c5b45d0df37e4a64af63bc5b7cc60edb7ce1140b356e4c5b1ab
-fe29af3a87fcacfefd6943bb13eb5d5939fbc33b591d8ead4e54bbc9b34f8e00
-671c5b8ea129d609f6f51eab562d3e4f76bd8978ebb4a23707f49639d2f4ed9b
-40787d4a635ffbb531f2c7bb9fe0165d4e471e11e51c0d033121fdda26a5391e
-45203b3fc27d9d34d2f756f45f6409f2b906cc2bc92fc0cb04999d9657982575
-801e4b7c46c6f8561820a3225b8595fe9eb51ee46f66460a6cef9ffaffeae7ef
-f55a86f51b5329bcac4320897c8e1ac4e6d49c649ed4fa6b257a38d777722234
-ff7dea4f248d827dea6cb748cd2fadeaea24bfee1b8ef9146c379b1f14c1c71d
-1815a3d1352b240784e8176f9047a413ac4bfc8af3cf6a2262bad3afe71e9557
-96ed95a9dda893c10d22314314385ae19b2b0b99f401eedb85c973759a2282f7
-0607d1600baaf56c769a1c46ab52e4bfa0c8bba42ca11d4c1b6ce2344a83f9cd
-52fda2de36c880ff7aaacaad5504fd77e549872892aa26ad14a30f6b308de436
-654e447df32cd6dae0bd8123069739131529264427d4730881114d0956344bdb
-78e2998c44bce0bfa4fcf8a926b66b2e8060f3a1d28255021824b3ef0a750080
-75c345add1f28298eefe0c2cd8a8d4bfcee4bb47dca267eff2db6eee52fb618e
-51c41d62d85b2d05826db83819f49ea4934fcb8eb0714532b5f666e24cebc3d1
-8a07c382889758492be197b4cd6659a5b2779a7c843e26a563e53c487b0626c8
-51470da3998e661519706bce94db33f98666eb1450ef37ab7bc49d90b208f56e
-a4bdc356668a0782b0f4cea076733681cbedb623d912b1448e1f6de3dd536977
-8da655f41f580a0f4ddb4b8ae54089b4c4e6952f887034e297ec1abce3e5128c
-c08c2a86232361a18b9daaf9be265cbfc7d4fc743964abac39ea2163cc583bd8
-ba05fc1b0632a412d67e80a812e5bcf4a7a6108f300a19c39fa6ea1c0089b6a2
-35946ced7574cea0a53cb8190e5a99c81bc824b4c15826b7752f530dae60bf5d
-1f2c3b8cc1dd32bae7ab9c6cd3640b07e2a4324f33297ef5b5c1b19ca3fb4647
-1c85c572e400c383d5db5cb4e8f913ed6502ea5dfeeb391cfc002ddd7a6d583d
-38d0d3e5d5a5a985768de91795dde9d98090d7f9f20cc36d1a409eb3f1749666
-2f4853d739792023c85fcc667b7298cfca13474f009c2306be84507faa60063b
-bd395409f5e25a65da18235a4a581802b78891c9c335469e3b942ff555e311e7
-7ee6d1c4ea6ff2a53c70984cd2d19a91d2a3f259bc44baa7158d84e21582d49b
-3ea5bae04d5b32f2831e079f4541276c471c3237fdfc910ad56587c9fabd33b5
-4bbbcc530b71a85573636e30b3a820d6f414fa0b0a45f4314d65ef8f11cce617
-c44e501c8c161d556927c0fee825b1a98aec4afbd10477ae3de0c1418e3d0a63
-e5604e9949db08fee78389f8889925fcc3fd51a324803ba58e299cc584518640
-e44e05080349d59a409d7e4abe33a3128f99da9385b44cbe27c018e5630d3e1e
-8a8b1010a089a4af2ea4a1f1c9b6736e21b3ce7130d5a1ffa44da7752595d038
-6b62d245706b3d0a3b2106953c8d016b59b6a10fb911c74ae6e3059d62b8ddde
-03ca3dbcd47ea4e75843ff144f3f30167797c803ee30d1290e8d2a9bcf899e55
-e75b9b3f5e5ce04a2db7b82f3630c4a2c706809939e8d7d847e69466740001d6
-8fbfa7f9fa4b3093d970b9a6ccfcc82ede0749ae050f99c04025a7b5b4f4d0b1
-0271b628f1e5bfaec70fdd7c80c687b5155874c8a541fd85141519b804a65727
-6d9b125f0280fb01f4ff546e28409c3fa714cd384ef47768dbbdfc038de4ff2a
-c1de9b43e7d9d2d62ba4110596d94a20644420585f735d87697fbe97c639bd48
-5c7225b18acc2034821e136b6a29f4563e8260b7215f53bd83985f0b2b10da60
-6984ade8c9aea46d98dd85c99dbb0fd0eedfbc4fb93898e36c422b49a0c93412
-f1f1e301bc7070a1590b6088e9fad166c553054e1a1ca2441ca2cdf53eb78ec5
-480e70dbed42dde10c85bade30c88edd3fdf9c07d802a8003eb4fef03dacebab
-5a6dd1d8736081a7c3073859655de8db331a902a27be01c358de3a27a7965661
-edb1bd249369470fc41b04f036973a1461fcf24befcffc6a3ea1a7082b821e07
-6343839d66096c448915059e7330b6ed524af20a61d0c528a999786eff1118a1
-1f381fa65e1d98f0be571625217590ef08f68a600f08a4a6d7fbb56d9e199d10
-d81ab1159fa48fed4a40a3cbcec30280451c3163d5ad7110116f378f2d5bbb28
-62babb9c1a72787773601d0dc4b3017c46958d6106acb356d34f04872871aaac
-1aadead00e3c195a83f3c1adbf66c4f140da0daf618285f83e7665b8db6b37a1
-5b7b39686fff8e113b2897952fda0dcf6e6f5fa53936c2ba6f48cfbf33c5e03e
-38d486e3bbc716be6174396f310a3956188879a019fb4bac194041c98e4873aa
-85ad472d97d47d2af2d753ab10ac100d07faeecbe3baa5b4a196b955a7e10b07
-a6230c62bf44cd57519cee73bf3be94bc3730e5037ef6e1400db1209b111a809
-5c5b2b56f748346102f8d97b4ad4d2665a928d468683599f7ae842166e423607
-c7faab073651c771dd47cbbe6730fcc442a76c0272b44caf93e6086fe153336b
-efa41fc52dcefc9e2f7ff514904fa5fb506a54380a1b0f04711115ada32a6fe6
-e68e6c7de7cea029bd8b21fcb83f4bf43d34fc8239ce92fcc1d9a9f86700bd02
-a04eb68511136b9cc47367f62bd601459b08c72b09f4df7a40999332c5be467d
-dd83f7de33741e9b6be82ab6facc7cb8b8da567a16957ebd7f3a694c41b6bb2a
-4b82de1d85b7c28f4a510c4bfada3ebf1cab17ab8efeefc7c2996c6fcb263ce8
-b5868cf2a9a587e74307c8bde142af63601e59de0031b282a075d70e7b18866e
-3725872e224c83571bee2a98e113128cf71fdbab36d8214c4663cc8a8df2caad
-e8a46787c726818f292518ea40838189dc66d55b1862687a794616dfcef2c1cf
-6446f2a20daa5b6f3e059eb222d6e03e7fba92bd3cc56adde303f2478b0f02e0
-d1bcdff34ae31fd15cd4597fc352c0c176db6f75d4d00b5336560c0451453c5f
-57c59cdd66557b3008aa998cfc708a9ca7dfdf160efc978283f6fcf6573d2a6e
-9868dec9689f4269b4e98c061f3adb3a5e16b2487760f493c2593873b124c34f
-21a35ff5ad5faadcd34dc6b50a863a462abe24d9b7aa59e6a03c3db0da0c4894
-011f25345ff3ad6cde3ac2df58607f50aebd4bd2bee95d21eae6b4e0e90cac13
-399c188b7e693d648f2496eb9e406617b1c113eb996f0a7f44fc8c465cdd6c95
-7211fd550935818945cbe984344b5b6d7b87dfd7de82a6521b0923c87fde92de
-3e956348bcd7170858df8780cb4fdae79bca6dc31b40df5b687b4032e005c762
-5b55a08c57cc340681675f708217931a9e3de86fc0b0f0717e1ad38dfb17e8a4
-ab4645c23661c9e9090340403918782660200fd4a3117e3d80587911edd64abe
-b3a2e0a8504269279601bf23d74bcbbf957e5a2f198094854212e712b2948772
-0cb4bb7ea4279736c4a1fb650633ed22b35c33db57c17d5a2a6c1ea3ef4d3425
-49bda52d7a20b521ed657ddd201156caffe6f3e2611193b5639283fe956bb7d6
-ad775c3a9321b5f946cc9380f76fa73e149196bd35e3bb720dae3d8036c915bd
-b7894be538c58f06c4121af00d3b458438d46bd9d0ee6bd1a7a7fcf828192b1d
-90a6085a198345d4e093c748cd53eec4701c949087c125d5db577ed463504b0c
-69afc54eafb1a40d7ae7d2fd899110ab661bead22b0d3f57928cd214fc38b014
-c7cc400b53cd2f559b133e558f5a484ef1ce318d9347c5eb6ad03fe0cc50cdd0
-cd3d3e54c075a4fb923e335bab843b1eb715d120d754315796c6e0c7104f9edf
-f755259ed3a2d9f035976f64c3b3ab3d7f2d3218eb445edd9329477670bfa26b
-d975f9f68d7637d5636fdd82084953f46a7b0e673b099c960c03322acf23e52c
-cb4a963685a952f542110ba4ab174567f8a9db2d1b784624b056026f941fc024
-ffcc8dc32003db5809bd58ba1207265ea496065b05f925b313f06209ef83da94
-b5453533a144350c1c7dede0d5101a513fcad9b5ccb13eca2a53056853464bbd
-fcaf8bf0df1d5d1b389c2972aa00b702e61cd9ab3533a2862d80f9a58b1750b3
-76b4210eb7fd29ad2c1382ddad8631a2926103660d164329309ce99b465fcf55
-f2f33abc0d5063915fe1469e431c0f96e10147f2e7b149de0981330db3f67ed1
-e2947a448b6b0ec1dce097a050149d03de51c49cd467aa5075478b68cb5634f7
-5a3bd0427c88059666bce79c28bd4446484bd194f0329679bef277ad038d7bac
-5a8fa07e6714944b107b54ef8ab7b8be380c5571199cc150beb4148e6ea55471
-d18be0ef4c664e5f974d5c097245059898595b73f36a2ece852cb5c5ed7c3813
-71d91c73df7a0c05746f2b3aef2bba53512fcc4ad6f17dc7c143fba306fc2bce
-bd78503cbfeaedbade60cad708c34912c4b1c01f56c487d22e7ab70dee6f8f58
-266c9a79c5e13db7741608e9a30dbdcacd9ad4272f9760f65e0521873cf28c67
-cfbeae2aeb72df1630832eaefa394de4aa1e48f9a084258a96cc405056682948
-dd02745365d7a581ab43777b213f72569e1e533f845059f53f3914864f2658f2
-80c18f35b8ae1dcf266ccad0b6eb481f6727bcea10c559e261a4fab8bbdda2b2
-bf7e0bd4855c853e0169810d7be61dccd1018cf6622ccdc44ffc59e5a5da0ba7
-b95a860f4c9b3c8f38f878f98c0fdb16871ff0feef442000e2526b66bc02016c
-4e089aec867d9ea5e8200b194ffd9ced0e2da665b044b0466fb4709c3c852598
-3cdea107a21fc9ee3b7d04b8b627a565338c92377c6f53ddad9a66c0f26f3488
-d6fa8389f4f6c58a10df6d2d7ffa9c3b686cd22ed3e6850fe63a29266da60462
-64a3f58bdfbe25d87ce7c73e21e671e77222f4e7d9ae18a51fb2c8b36cd28eb2
-a4bfd6c535e58bef4252261763e120c9536e125d0b6ecc32356dbd865aab0daa
-78606b3f9b5eb84dc79b6df0df9ec2e2130c0091b3aa808a26feef1c0335599a
-a68b23178af27858f7b4c63c411e054d11e92320c033c58c2d3322f01e05a4ec
-d335274085a0768bfef664886a97930624365cd15f3706c259e5a57aa554e348
-6025ef93c878b27dbc676187031bf82fc03f3d6628cc40e0d15ae9a0232eed5f
-c26a21059baad438e80333bdddc245872371030c0b184febcb251b6158403833
-947378ae0a83c254f42d0ad2d92ac2bc5462d316e28550e4b5924764d85aada3
-097409d4f3bf6e115a22ccbe41cde5c611fc69f49e1ed0af55ba24f145e90573
-d60d26b150d542a22262b09599c75e77e55a24b0b6d30764ee423534167fc3d0
-43a1294cb9f6d0bf7d864cec71e84e6436b2278d0fab4cc2fcbbc98434db5099
-68455bf1070758007ebc1d17447eff296faae7c9e0253396c03689b4456a9f55
-aa93a7f75b8d42c17257dab88a3175cc699f9db6f090d02ec3eb535a73
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMTT12
-%!PS-AdobeFont-1.1: CMTT12 1.0
-%%CreationDate: 1991 Aug 20 16:45:46
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 46 /period put
-dup 73 /I put
-dup 97 /a put
-dup 100 /d put
-dup 101 /e put
-dup 108 /l put
-readonly def
-/FontBBox{-1 -234 524 695}readonly def
-/UniqueXX 5000833 def
-currentdict end
-currentfile eexec
-9b9c1569015f2c1d2bf560f4c0d52257bacdd6500abda5ed9835f6a016cfc8f0
-0b6c052ed76a87856b50f4d80dfaeb508c97f8281f3f88b17e4d3b90c0f65ec3
-79791aacdc162a66cbbc5be2f53aad8de72dd113b55a022fbfee658cb95f5bb3
-2ba0357b5e050fddf264a07470bef1c52119b6fbd5c77ebed964ac5a2bbec9d8
-b3e48ae5bb003a63d545774b922b9d5ff6b0066ece43645a131879b032137d6d
-823385fe55f3402d557fd3b4486be79011d1f5b667eed85fade30ab2ec4e1c2f
-4fe750cf9a69506458071de8896261c001b1c290937fa42a1fa87de406e9f86a
-4c9c0f03f69fba719114f8ae51040a4c03a58b6f3de027f6726f32743dce7395
-14c2c6f3c2de1aeddcfa8eed7da56dd68dbcde33c29ff7a694769049e4325ec9
-61b2df16add2ad46f18781fbd63eec62c26f1db41e6a666a09886382dceba91d
-8ff7cedd64ddc8a2f15fe34076a064c46febd1f4dc3707aede0ce8af161bcb8e
-4ada202d0954baca5be71c28ab8bf32fd72029aa07f27d658a68f454a4bf386f
-6314224d16c7f0a8624f6b86319a4e2fd178f596f3b20db032ea28c157a68a69
-fad2bc88881658d2286c0d4ef061bc070c3145f2a37ebec03f51de7cda34cd97
-7eeebd86b00f9758b3a496f41d9a74279ef3c6322dc54945f95062c5f37a1e51
-cf7eaf45f2b3634b2d7d01ec3b298ff35b6616cd3020e096f6c6aa2bf04c4a93
-61c19f3c67a28d936ffc8120f1e46980b29bf54047c5f1fa48e67611a74fa434
-3384f802a4079b28b94681e119ab0c1692de5bbf426440ad1023506cb80732de
-c64d9061869cb34de924d2c26e404b7dbd9be55b9c0c5ae3095c15d278adbb49
-12df1484ed2d73128e5d9c1f1a3b9ac19e2ce5366c96644f5b3d3eea589caedb
-586fd9b8f4df32ec910e9b7434d5bbe57e03892eb03890567df5b811afa0da5e
-929d456af362fda0789aa0cff464e238029294fde86cfc8d7d33d5c98b18c76c
-319811e4d3d49560f2ac39103594ec513e0b1377c2c3e22979866c19b61448d5
-a7201ca4b7538aa370f6347253b0853d4c5d575a7572f93cb73a598e2e26b11a
-d46a1126e44e7e1795dff01562316b6ccc6678663e66a73db285746df3f4405d
-d51714679581946ef7272a38f41798f0c0cb66b7e7b525e0437c12ac8d4568c3
-f37379470d93b09babe1aabd17f20c07908f1908c4177db0d7dc73fce84bfc5e
-8a1daac7004c1c0fc0f1af83e4946f560408efe85dd014668bfff2d51f3442ad
-86e0c4292debd64376ce1aacfc0b21da230958c6a4e4fc75f8ccc09b3bfbffa3
-6d0589e50b5a2c67b299bee3378e33b59dadbc0b5dcb724ac58d274387f2a479
-ecccf173832a3c33b4aaf172c9043af569f5c04b29fe7bcb5aac415e409fba6d
-82ce66e4901498ab8a2b2b6853d1d82e10a0b5d672c65d9b102048137bd2dd49
-d962973a91bd8a1e7e85fa2edc25f24c2d1ed63c138280fe6c7af10ef776224d
-6c8ae754aa2eb851c786f862cb52e58b51630f238f3b2845e4814568e0248017
-cd18639feea7c4f1bc5d21ccd62dee3c822320941e5dbd058f92947ff957258b
-4daa2c24d2541f16811f19babdf0d40c2ee470579c80fbb776784ddb3136ba9c
-d782cb10f699f45658c7e544b8a46a58802ab7ea9c708325d74f03e388d00b87
-f3c8358ba3853155b5e4133946ca165f4ed605e522995cd06752db1406d4bd88
-0685fd14a8c67353056549d3224c18c5e905d61d6fa723b0b85e3cfd16c0dc4a
-9ebc37a4adf757a9a831bafad0a70c27a83de810238f74d2b6056f8be7b00782
-7c151f28f0e77c6f474c649b71803e688a76d12da609a91eece6e266cf6d4ab0
-2fe97321802dc1aac743e0c85b2e08f04d2c46d1db63e7fe8d2c540907be97fd
-a189965832117c499484c6ef64c08d68b7cff9affa39615d880163490f400cea
-f1feac75bed02b3e0a490bf2b73294d8e840aa30c60f2c0034123e8e6c415c2b
-6848f972a4ff965b58a6d2f2b9e94ce50d0b96811d802daf14b4bc9169a4ca0b
-49c78cafa3d78a966cf7a25aacfbcdd0bf914dc95d118f5929e4ddd32c75122d
-43458cd20b237ae3fde46db81222d297801bb4a8d9dd6bec8d2f08f43411b93f
-67b8e72cd3879ff8ac02888e44bfaa85da3035b5b9294280fb6334d05f175d49
-5d32eafaacffe930ba72a16a1be5bf68b1b050e2636efe6cf5039a7618c77f03
-89fbe0cf224beb18b79f54910ca148613d7989a1229f782574f4606079414344
-4794d352a5f431353ce93ff1d5139b2d1067a7b6bccf128f3b57a6c96fba11f1
-9990e2bb9c6ab0315be36fecd6d6b436cc9606384553b5c31341e675286c143e
-170223b1450b26fae16bffbd2a36b414273b04b9a6
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-%%BeginFont: CMR17
-%!PS-AdobeFont-1.1: CMR17 1.0
-%%CreationDate: 1991 Aug 20 16:38:24
-
-% Copyright (C) 1997 American Mathematical Society.  All Rights Reserved.
-
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR17) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR17 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 65 /A put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 101 /e put
-dup 103 /g put
-dup 105 /i put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-readonly def
-/FontBBox{-33 -250 945 749}readonly def
-/UniqueXX 5000795 def
-currentdict end
-currentfile eexec
-9b9c1569015f2c1d2bf560f4c0d52257bacdd6500abda5ed9835f6a016cfc8f0
-0b6c052ed76a87856b50f4d80dfaeb508c97f8281f3f88b17e4d3b90c0f65ec3
-79791aacdc162a66cbbc5be2f53aad8de72dd113b55a022fbfee658cb95f5bb3
-2ba0357b5e050fddf264a07470bef1c52119b6fbd5c77ebed964ac5a2bbec9d8
-b3e48ae5bb003a63d545774b922b9d5ff6b0066ece43645a131879b032137d6d
-823385fe55f3402d557fd3b4486be356c29c3aec91ef17f5d31183b1e489f1fa
-559a6693fbdd04d4f7e99886d8cb7cca13d4aa9ceb34a708af22e69ccef0e504
-c3997075243585edf60b6447c8d01cffb04b6e3ddbaa7da5891286861322a795
-e9d990fd56af2f5c2b35801a0b07874e4ac3170481d232e150443253c92a8b05
-513d4a4154a99d91f629ccd30376500f5d16aaa9b203bad6350e4b19424c0e33
-75f2949bc1927a6f6221252f8a96618e646aa1b0810753c98becc26b37837775
-24bca72b818d314074c1c91f4e1f4148d3d703d12d179ee6970bd55d04aa9a9d
-97f63f2c7dbd129ec2ed3ba5f8080270ea5854ea165dbcc061e2f47f1aaf0997
-2ac9a689a2a9620b91b53f6b5092884372f5f7afca495f331138d85a97c5bb83
-d8072dc88010fc89108b60bc06d4f93c722e8908d7ce3c1ea3c70e9e65edd769
-7db17ce0e012ad37d4030f33d30a73fd655b7a2e572f3378ac933dd75082f2f1
-68702be19bc60cef6bd5f0ada180d21408c04b7f7db9b6dbaefe09e809a80ddf
-a5366d10930d3e68ca53e4721ff525853f4c784f2c2c3aa0129a34d9df00debc
-ae4037e4c0fbdce3989f35964b4c07e7817b805bfe8c15f0c0ebf226cff606b6
-2954f0f42dff8c214a6537ab666d25389c44db7b5866440bbfc137712bcdcc89
-c68cd1adfd85648b1ed29bfb45a564b02172137feef782d604e0d7e1f1737c96
-719cca9e4b9dfdc87e5999b886a15ac572183dfafd8c4176cd98430c204d4e7c
-e989e1dea814d3088a21d9ae6c5fe7ab3d399b2982fd605e65509a8ed6790c21
-a08a23e53dbe70f676d0e7b2e8261b092dc3415ac785635d133d309ac670c0c5
-5868fd863ce42542ff1e83e1fa20a7a0e5d680dec3a22700f7f48d2582b8411d
-757d17ab7530ceec0c6727c6a80f2493196b0b36e727bd6595b5d4f5baef0318
-f3c8107380a2a731f5d5ac8bd86ab3b2d774b8a256e4f52628d6f8d0e40f1163
-6026c69f76f274283931ee02d73937f334b843177f8fbfb051019ecf7a56a07a
-81a3809c71515bbe9c043437a5c1007ca9ba87bc597d1c84d4585de379ed04d4
-c53958e67875f5b49403df15843727ce4199229066016f33ddd7a8cd1ab88c85
-8653e20c90c2304e7dfbfdc69c0267ffa4bb3d605fa3cf9b9f540d115108b370
-a90059c35cb2a7ddbe72d48be3b8b393e03d07b793c0e7ef7566510a3da0af14
-6850f0db2413057385a635c3a412d31689248523e8c872350e0e78e5e455434d
-85bbaae7111b59fa84e5a16ea843f527d3e398d03e09fe3b362056e5e0de9dbe
-059bbc07c0dd42bfd9793e6fb82efe052d2f7a99052933a0496004e8f275da81
-d057d670172a1813d3107c5f41460dd9165420769b7f53979dcb41d6dd227e21
-3f1048b696356a07c96ee32fc18956b3d39953105906ac952d6246617a0eb07d
-13fbc467c5ace362567a8602abbba19346bcbc9af3a68b4d35d6b30c411d4359
-de75bd50920366be8a1d82329766e28aa45ae7b8359d7bc4ea8cf1348b997fc2
-682d84e09e363dd855c07d8eba0ce8641a73fd51555ef8eda75e13d1ab68d0d9
-da5583b935ebe895c27465d55985c3ae229dfbf6e9e97fd240e94344f95996c0
-44d8b46fca2d9e479a46f0c7855a59424d865bddd4b8b2715025b1aa920712b7
-c10d1c1aa764bfea3644d2a36a573728a9e1eef8afb3ec97b83936964577e8b3
-59c15fa4747da752b3b90e70bbb5b864496622ea8cb412f9eb5439c4c587a4e5
-fac054a1a5a1d992f63ff57d4f4281431016f9d3c107fe07ba12b0c5a82dfc31
-f1ccee58266f49e1cb8fe4d11edf30c6d0e52e8bfb183e178b994b27c6a8cb22
-0ae48dfa9834170902b06fc025b1e178d14cda92a496c85d204b17c2df9489a5
-aa1c6b0ebad624dc2b80c55cfef54072a1a3acce666ff043eb8bac830da01ac5
-f46441985156788679836dbc89c54cf97b7cf286b5c81c1a3603dfd2a573a9c2
-ea43e5c0df58037052e36df2039425b26fe8bd5efbfb8f848647197717cc1fa8
-23f52d1530713ed4f598f57c22c51b8d08d14d9a690967a9c17ad6c41215723e
-aac82de701334898d5530664f5d196aeb609eeb7d17eb0e9649fabae457e9db4
-0b92c57c0645a2cc5af867fff332d673361f09d72eb5bc9f4694b8a980a50d19
-e68710f6901aa6666c8274cbe16350efb313b05b1540c59e302402e662e62112
-2d0564795639954f1e56c341e5f2d99379d1164aebd5cd4d85d83644ecd5755a
-1ef9e3f66950207cf657cd339466352e4959d3e0f5ed10730b1fa65a539aec23
-9440bf8dd18ce753221301ed42e234549cb914c8f15324358b1bbdfa162b5e39
-92f2451d67fb403982e74083bfb7eb84b61f04f1621331563e8ed8cc8427afab
-9b2b356e85c23135359cc7dbc798c57c4667be292e8ad7006f55c342a5c4e153
-c175595d93e46763eeecc9b68088f9c732a3fcc2d18d702b96232022ee08c605
-0c07a0f866b917fcda0103d2250ab9cd8eab1067e28bd54331e447583d5cd6cb
-2c395c6ac49826d9077a7560a2b2652b9b3bb296d94089f5b8d2ea10ea46dd69
-c6cd8eb28cdce5a23848f1939be39528e28948d41be8c9a6f33c7656c90859c4
-befdb3eac63fe60893826ae55b8898e537c9856cc945a16b3a6fdf32af252bb0
-c40405f7cb615e9bb17cb6f23a86304faeac7a56f7b85488d3525adc7b9da686
-56d8211b27fc863134ed3a9054fe6bd3d21b59dd6d6c3718f6e64217d8d5e882
-30ec37d8ba92bb638864484082d9530ce9031f8bf15a9a07ba9e3c3cca56267a
-e10c7a3e7c13f449d9b02fa731f52d97c9500151f866b217e3018c5cda7432ee
-2220789a006e298a9ab501eff5ffb6c3079b9e60bffc9127f6c8b9e04df6ebdd
-dae8e9323a5d699dfc0143bf8ed224f2a076850075f5f5665ed82190516be315
-a91fd410679b82443c993a1746cc54d4597cfe722db5e8d0a9b4e5195052ed5f
-422177715c237e4dcb7567a332d011a38a078454d16d323ebcb92186eba23992
-4cd7002933e081b430ee2bc421abbc45fbfd9b41ffaee25a935b20991c377056
-a383d73750cd1d55804bccebe430ce22b16592376f54a18a9cbdfbd1de92ea50
-c77711c69722ff6ddc1a5c6297493ee4cd63c50e8412b4e42b8a5729e87fd435
-54316f57db2792258bfa2f38383558c5d85acd5abf65e54cbcd090eb34554be2
-1734e4374158e800c28050165b81bf94791f8ce24d0f45f05fb2df681ff0181f
-0ac9d37cae93dc938783a3e8a9b20fdfcd2e31d22de9b7fe061f91054a0b32fd
-97069b7cf02150b83bd7cc1d9ba29a5a112be9e28b9349344d535f719822c8b7
-a55d92a1a4084102d110f32ab3b59d1a7493b1bcf549eb583e6cea6744cbaf7f
-436704653e774435ccf84a37faa5443b4969041ef2f16b659527c6f01aa540f3
-5396f7c7c03f4dae8828ab2ad194b5972b2691bd414f5e25246c83918d455fe8
-2c1c4d5f704bf8f95357af4d9ab0155e9f1b9304d67d0ebef9a47827dded45b4
-51339f0fd7a914add1f59c07cf74f7aa0a12549b441e12dd5449bcd1de00ddf3
-13637d693da44cfb22a4e73093d64f9f86328322fc39a343cfe752b904aecf1c
-145c05d133f7d2d8606a3df1bcacfbab34e457e685f459d731ffa68f383a6182
-70edc182d4678152023981b39a150c87cf9cd2603527b80d5a94e9281ac1ea8b
-cb325cbcea7e638b5b43aa0c0ca95d103528c2841667bba973080813ca05ee4b
-96974224c9724ed6a7512451f95b180cae87ab46c61623154d6540c03c616b53
-8251b40c69c57276f72340aa2c83fc6a40fd440dc5aa9ae8fb438f0cc156fa52
-4afb2ed766a7bdf0c7b4f49877448c293ec40d13969da521b68480e6294ae3e7
-ea1ea3cd5ffd766cce3a2e3fe4800e16780c9d89a0f2533aad21c9b78afde506
-f53ed9389830243c250f79daf56551d8bf2d1337e53f31e1f77feb379a3b8fc6
-27fd03a8b30b0cb71b8a6a1c9fa058a8f24631622719fb0a3aed5522c872056e
-40f6c350c8ffd334887feb234ef8f78a09fe93891fe303539f
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-
-%%EndFont 
-TeXDict begin 39158280 55380996 1000 600 600 (assemble.dvi)
-@start /Fa 135[50 69 50 53 37 38 39 1[53 48 53 80 27
-2[27 53 48 29 44 1[42 53 46 25[75 1[63 69[{}22 83.022
-/CMBX10 rf /Fb 138[62 44 44 1[59 1[56 62 1[31 59 1[31
-62 2[51 1[50 1[54 12[78 62 28[56 56 56 1[56 56 2[31 46[{}21
-99.6264 /CMBX12 rf /Fc 142[27 113[{}1 41.511 /CMMI5 rf
-/Fd 171[39 84[{}1 58.1154 /MSBM7 rf /Fe 171[55 84[{}1
-83.022 /MSBM10 rf /Ff 205[45 49[52{}2 58.1154 /CMSY7
-rf /Fg 165[46 1[120 7[88 12[73 73 73 73 14[73 73 14[66
-66 5[62 6[61 61 50 50 14[38 38{}18 83.022 /CMEX10 rf
-/Fh 142[30 1[33 2[21 35 27 23 39 32 3[30 29 36 12[39
-5[53 2[56 15[20 59[{}15 58.1154 /CMMI7 rf /Fi 194[51
-10[33 33 33 6[26 26 29[47 10[{}7 58.1154 /CMR7 rf /Fj
-141[69 7[23 2[42 42 45[46 1[0 3[55 16[83 83 6[65 4[65
-2[65 1[42 12[65 23 65{}16 83.022 /CMSY10 rf /Fk 135[47
-59 40 48 3[37 42 40 2[25 1[34 29 1[40 41 1[43 36 36 44
-10[48 57 3[66 2[67 2[71 46 36 2[53 4[62 44 2[42 65 23
-23 18[54 6[54 8[41 50 48 6[37 1[47 12[{}37 83.022 /CMMI10
-rf /Fl 133[34 2[55 38 45 28 34 35 1[42 42 47 68 21 2[25
-42 38 25 38 42 38 1[42 25[64 2[63 9[25 12[30 32[47 12[{}25
-83.022 /CMTI10 rf /Fm 130[44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 1[44 1[44 1[44 3[44 44 44 44 2[44 3[44 2[44 44
-44 44 44 44 44 4[44 44 44 44 44 44 7[44 44 44 44 44 44
-44 44 44 44 44 1[44 4[44 33[{}64 83.022 /CMTT10 rf /Fn
-133[37 44 44 60 44 46 32 33 33 44 46 42 46 69 23 44 25
-23 46 42 25 37 46 37 46 42 2[42 23 42 23 1[62 1[85 2[60
-46 3[65 62 1[52 65 43 30 62 65 54 1[63 60 59 62 1[39
-1[65 1[23 23 42 42 42 42 42 42 42 42 42 42 42 23 28 23
-65 1[32 32 23 4[42 14[42 4[69 46 46 48 60 1[60 6[69 1[{}78
-83.022 /CMR10 rf /Fo 134[71 2[71 75 52 53 55 1[75 67
-75 112 37 2[37 75 67 41 61 75 60 75 65 10[102 1[94 7[81
-2[50 5[97 1[102 6[37 2[67 67 67 67 67 67 67 3[45 32[75
-12[{}36 119.552 /CMBX12 rf /Fp 128[49 4[43 51 1[70 1[54
-38 1[38 2[49 54 1[27 2[27 54 49 30 43 54 43 1[49 6[60
-2[100 2[70 54 5[89 4[73 2[66 2[69 15[49 1[49 3[27 44[{}29
-99.6264 /CMR12 rf /Fq 147[89 6[89 89 2[89 23[89 26[89
-46[{}6 172.188 /CMTT12 rf /Fr 139[61 62 61 3[88 133 43
-2[43 1[79 1[70 1[70 88 79 31[119 65[{}13 172.188 /CMR17
-rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%BeginPaperSize: a4
-a4
-%%EndPaperSize
-
-%%EndSetup
-%%Page: 1 1
-1 0 bop 670 427 a Fr(Assem)l(bling)51 b(matrices)h(in)g
-Fq(deal.II)1417 661 y Fp(W)-8 b(olfgang)32 b(Bangerth)1293
-777 y(ETH)h(Z)s(\177)-51 b(uric)m(h,)33 b(Switzerland)1623
-977 y(Ma)m(y)g(2002)330 1251 y Fo(1)135 b(In)l(tro)t(duction)330
-1433 y Fn(Assem)n(bling)23 b(the)i(system)e(matrix)h(for)f(\014nite)i
-(elemen)n(t)f(discretizations)e(is)i(standard,)g(at)f(least)330
-1533 y(as)39 b(far)f(as)h(scalar)f(problems)g(are)g(concerned.)71
-b(Ho)n(w)n(ev)n(er,)41 b(things)e(b)r(ecome)g(a)g(little)h(more)330
-1632 y(complicated)26 b(in)g(implemen)n(tations)g(once)f(problems)h
-(are)f(v)n(ector-v)-5 b(alued,)24 b(and)i(in)g(particular)330
-1732 y(if)39 b(\014nite)f(elemen)n(ts)g(are)f(used)h(in)g(whic)n(h)g
-(di\013eren)n(t)g(comp)r(onen)n(ts)g(of)g(v)n(ector-v)-5
-b(alued)36 b(shap)r(e)330 1831 y(functions)28 b(are)f(coupled,)g(suc)n
-(h)g(as)g(for)g(example)g(for)h(div)n(ergence-free)d(elemen)n(ts.)455
-1931 y(It)32 b(is)h(this)f(case)g(that)g(w)n(e)h(are)e(in)n(terested)h
-(in)h(in)f(this)h(rep)r(ort,)g(and)f(w)n(e)g(will)h(discuss)f(the)330
-2031 y(implemen)n(tational)h(details)g(user)g(programs)e(m)n(ust)j
-(follo)n(w)e(if)i(they)g(w)n(an)n(t)f(to)g(use)g(suc)n(h)g(ele-)330
-2130 y(men)n(ts)c(with)g Fm(deal.II)p Fn(.)d(In)j(order)e(to)i(explain)
-f(the)h(problem)g(in)g(a)f(simple)h(w)n(a)n(y)-7 b(,)28
-b(w)n(e)g(start)g(b)n(y)330 2230 y(reviewing)c(the)i(algorithms)e(that)
-h(are)f(used,)i(\014rst)f(for)g(the)g(scalar)f(case,)h(then)g(for)g
-(the)h(case)e(of)330 2330 y(\\simple")j(v)n(ector-v)-5
-b(alued)26 b(\014nite)j(elemen)n(ts,)f(and)f(\014nally)h(for)f(the)i
-(most)e(general)g(case.)37 b(Ho)n(w-)330 2429 y(ev)n(er,)27
-b(w)n(e)h(do)g(not)h(in)n(tend)g(to)f(giv)n(e)f(an)h(in)n(tro)r
-(duction)g(in)n(to)g(the)h(deriv)-5 b(ation)28 b(of)g(\014nite)h
-(elemen)n(t)330 2529 y(metho)r(ds,)f(or)f(of)g(p)r(osing)g(a)g(partial)
-g(di\013eren)n(tial)h(equation)f(in)g(w)n(eak)g(form.)455
-2628 y(The)19 b(in)n(terface)f(for)g(v)n(ector-v)-5 b(alued)18
-b(\014nite)h(elemen)n(t)g(shap)r(e)g(functions)h(with)f(more)f(than)h
-(one)330 2728 y(non-zero)i(comp)r(onen)n(t)i(that)g(is)g(describ)r(ed)f
-(in)h(this)h(rep)r(ort)e(is)g(presen)n(tly)g(b)r(eing)h(implemen)n
-(ted,)330 2828 y(and)d(will)h(b)r(e)g(merged)f(with)h(the)g(library)f
-(after)g(v)n(ersion)f(3.4)h(is)g(released.)34 b(Th)n(us,)22
-b(it)f(will)g(b)r(e)g(part)330 2927 y(of)g(v)n(ersion)e(3.5)h(or)f(4.0)
-h(of)h(the)g(library)-7 b(,)21 b(dep)r(ending)g(on)f(whic)n(h)h(v)n
-(ersion)e(n)n(um)n(b)r(er)h(w)n(e)g(will)h(assign)330
-3027 y(to)33 b(the)h(successor)d(of)i(3.4.)53 b(By)33
-b(then,)i(the)f(library)e(will)h(also)g(con)n(tain)f(an)h(implemen)n
-(tation)330 3127 y(of)j(Nedelec)g(elemen)n(ts,)j(for)c(whic)n(h)i
-(these)f(tec)n(hniques)g(are)f(necessary)-7 b(.)61 b(The)36
-b(in)n(terface)g(for)330 3226 y(primitiv)n(e)g(v)n(ector-v)-5
-b(alued)35 b(shap)r(e)i(functions,)i(for)d(whic)n(h)g(only)g(one)h(v)n
-(ector)e(comp)r(onen)n(t)h(is)330 3326 y(non-zero,)26
-b(has)h(b)r(een)h(part)f(of)h(the)g(library)e(since)h(its)h
-(publication)g(with)g(v)n(ersion)e(3.0.)330 3600 y Fo(2)135
-b(Linear)45 b(systems)h(for)f(\014nite)g(elemen)l(t)i(metho)t(ds)330
-3782 y Fn(W)-7 b(e)30 b(start)f(b)n(y)g(brie\015y)g(in)n(tro)r(ducing)g
-(the)h(w)n(a)n(y)e(\014nite)i(elemen)n(t)f(matrices)g(are)f(assem)n
-(bled)h(\\on)330 3882 y(pap)r(er".)34 b(As)24 b(usual)e(in)h(\014nite)h
-(elemen)n(ts,)g(w)n(e)f(tak)n(e)f(the)h(w)n(eak)f(form)h(of)g(the)g
-(partial)f(di\013eren)n(tial)330 3982 y(equation.)36
-b(In)28 b(the)g(most)f(general)g(case,)f(it)i(reads:)36
-b Fl(\014nd)30 b Fk(u)22 b Fj(2)i Fk(V)48 b Fl(such)30
-b(that)1320 4164 y Fk(a)p Fn(\()p Fk(u;)14 b(v)s Fn(\))23
-b(=)f(\()p Fk(f)t(;)14 b(v)s Fn(\))1855 4176 y Fi(\012)2074
-4164 y Fj(8)p Fk(v)26 b Fj(2)d Fk(V)5 b(;)330 4347 y
-Fn(where)31 b Fk(a)p Fn(\()p Fj(\001)p Fk(;)14 b Fj(\001)p
-Fn(\))32 b(is)f(the)g(bilinear)g(form)g(asso)r(ciated)f(with)i(the)f
-(partial)g(di\013eren)n(tial)g(equations,)330 4446 y(and)26
-b Fk(V)46 b Fn(is)26 b(the)h(space)e(of)i(test)f(functions.)37
-b(F)-7 b(or)26 b(simplicit)n(y)-7 b(,)27 b(w)n(e)f(ha)n(v)n(e)f(here)h
-(assumed)g(that)h(the)330 4546 y(problem)d(is)g(linear)g(and)h(that)g
-(then)g Fk(a)p Fn(\()p Fj(\001)p Fk(;)14 b Fj(\001)p
-Fn(\))25 b(is)f(a)g(bilinear)g(form;)i(if)f(the)g(problem)f(is)g
-(nonlinear,)330 4646 y(it)k(is)g(usually)f(solv)n(ed)f(using)h(a)h
-(sequence)f(of)g(linear)g(problems,)g(so)g(this)h(is)f(no)h
-(restriction.)455 4745 y(In)j(\014nite)g(elemen)n(ts,)h(w)n(e)f
-(de\014ne)g(an)g(appro)n(ximation)e(of)i(the)g(solution)g
-Fk(u)f Fn(b)n(y)h(c)n(ho)r(osing)e(a)330 4845 y(\014nite)g(dimensional)
-f(subspace)g Fk(V)1397 4857 y Fh(h)1468 4845 y Fn(spanned)h(b)n(y)f
-(the)h(basis)e(functions)i Fj(f)p Fk(')2712 4857 y Fh(i)2739
-4845 y Fj(g)p Fn(,)g(and)f(searc)n(hing)330 4945 y Fk(u)378
-4957 y Fh(h)444 4945 y Fj(2)23 b Fk(V)570 4957 y Fh(h)639
-4945 y Fn(b)n(y)i(testing)h(the)g(w)n(eak)f(form)g(b)n(y)g(the)h(test)g
-(functions)g(from)f Fk(V)2576 4957 y Fh(h)2620 4945 y
-Fn(.)36 b(The)25 b(problem)h(then)330 5044 y(reads:)36
-b Fl(\014nd)29 b Fk(u)793 5056 y Fh(h)859 5044 y Fj(2)23
-b Fk(V)985 5056 y Fh(h)1058 5044 y Fl(such)30 b(that)1219
-5227 y Fk(a)p Fn(\()p Fk(u)1343 5239 y Fh(h)1385 5227
-y Fk(;)14 b(v)1462 5239 y Fh(h)1506 5227 y Fn(\))23 b(=)g(\()p
-Fk(f)t(;)14 b(v)1803 5239 y Fh(h)1846 5227 y Fn(\))1878
-5239 y Fi(\012)2096 5227 y Fj(8)p Fk(v)2182 5239 y Fh(h)2248
-5227 y Fj(2)24 b Fk(V)2375 5239 y Fh(h)2418 5227 y Fk(:)455
-5409 y Fn(No)n(w,)39 b Fj(f)p Fk(')775 5421 y Fh(i)802
-5409 y Fj(g)e Fn(is)g(a)f(basis)h(of)g Fk(V)1418 5421
-y Fh(h)1461 5409 y Fn(.)66 b(W)-7 b(e)37 b(denote)g(the)h(dimension)f
-(of)g Fk(V)2686 5421 y Fh(h)2767 5409 y Fn(b)n(y)g Fk(N)9
-b Fn(,)39 b(and)e(will)330 5509 y(henceforth)e(let)h(all)e(sums)h(b)r
-(e)h(o)n(v)n(er)d(the)j(range)e(0)14 b Fk(:)g(:)g(:)f(N)32
-b Fj(\000)23 b Fn(1,)37 b(to)e(k)n(eep)g(with)g(the)h(standard)330
-5609 y(notation)f(of)h(the)h(C/C++)d(programming)g(languages.)60
-b(With)37 b(this,)i(w)n(e)c(can)h(expand)g(the)1809 5919
-y(1)p eop
-%%Page: 2 2
-2 1 bop 330 390 a Fn(solution)25 b Fk(u)690 402 y Fh(h)756
-390 y Fn(=)843 328 y Fg(P)931 348 y Fh(N)6 b Ff(\000)p
-Fi(1)931 415 y Fh(j)s Fi(=0)1093 390 y Fk(U)1150 402
-y Fh(j)1185 390 y Fk(')1239 402 y Fh(j)1274 390 y Fn(,)26
-b(and)g(b)n(y)f(bilinearit)n(y)g(of)h(the)g(form)f Fk(a)p
-Fn(\()p Fj(\001)p Fk(;)14 b Fj(\001)p Fn(\),)27 b(the)f(problem)f(ab)r
-(o)n(v)n(e)330 490 y(is)i(equiv)-5 b(alen)n(t)28 b(to)998
-633 y Fh(N)6 b Ff(\000)p Fi(1)1010 657 y Fg(X)1012 834
-y Fh(j)s Fi(=0)1155 736 y Fk(U)1212 748 y Fh(j)1247 736
-y Fk(a)p Fn(\()p Fk(')1377 748 y Fh(j)1413 736 y Fk(;)14
-b(')1504 748 y Fh(i)1531 736 y Fn(\))24 b(=)e(\()p Fk(f)t(;)14
-b(')1842 748 y Fh(i)1871 736 y Fn(\))166 b Fj(8)p Fk(i)23
-b Fn(=)f(0)14 b Fk(:)g(:)g(:)f(N)28 b Fj(\000)18 b Fn(1)p
-Fk(:)561 b Fn(\(1\))330 989 y(Denoting)1143 1159 y Fk(A)1205
-1171 y Fh(ij)1286 1159 y Fn(=)23 b Fk(a)p Fn(\()p Fk(')1504
-1171 y Fh(j)1539 1159 y Fk(;)14 b(')1630 1171 y Fh(i)1658
-1159 y Fn(\))p Fk(;)347 b(F)2113 1171 y Fh(j)2171 1159
-y Fn(=)23 b(\()p Fk(f)t(;)14 b(')2427 1171 y Fh(j)2462
-1159 y Fn(\))p Fk(;)330 1329 y Fn(the)28 b(equations)f(determining)g
-(the)h(expansion)f(co)r(e\016cien)n(ts)g Fk(U)2312 1341
-y Fh(i)2367 1329 y Fn(are)g(therefore:)1671 1499 y Fk(AU)32
-b Fn(=)23 b Fk(F)r(:)1236 b Fn(\(2\))455 1669 y(Note)26
-b(that)h(w)n(e)g(ha)n(v)n(e)e(tak)n(en)h(a)g(rev)n(erted)g(order)f(of)i
-(indices)f(in)h(the)g(de\014nition)g(of)g Fk(A)p Fn(,)g(since)330
-1768 y(w)n(e)h(w)n(an)n(t)f(the)h(linear)g(system)f(\(2\))i(with)f(the)
-h(solution)e(to)h(the)g(righ)n(t)g(of)g(the)g(matrix,)g(to)g(k)n(eep)
-330 1868 y(with)33 b(standard)e(notation,)i(instead)f(of)g(to)g(the)g
-(left)h(as)e(in)i(\(1\).)50 b(F)-7 b(or)32 b(symmetric)g(problems,)330
-1967 y(there)40 b(is)g(no)f(di\013erence,)k(but)e(for)e(non-symmetric)g
-(ones)h(this)g(is)g(a)f(common)h(source)f(for)330 2067
-y(problems)27 b(and)g(a)g(rather)g(common)g(trap.)455
-2167 y(F)-7 b(or)26 b(partial)h(di\013eren)n(tial)g(equations,)g(the)h
-(bilinear)f(form)g(used)g(in)h(\(1\))f(in)n(v)n(olv)n(es)f(an)h(in)n
-(te-)330 2266 y(gral)20 b(o)n(v)n(er)g(the)i(domain)g(\012)f(on)h(whic)
-n(h)g(the)g(problem)f(is)g(p)r(osed.)35 b(F)-7 b(or)21
-b(example,)i(for)e(the)h(Laplace)330 2366 y(equation)27
-b(w)n(e)g(ha)n(v)n(e)905 2574 y Fk(A)967 2586 y Fh(ij)1049
-2574 y Fn(=)22 b Fk(a)p Fn(\()p Fk(')1266 2586 y Fh(j)1302
-2574 y Fk(;)14 b(')1393 2586 y Fh(i)1421 2574 y Fn(\))23
-b(=)g(\()p Fj(r)p Fk(')1719 2586 y Fh(j)1755 2574 y Fk(;)14
-b Fj(r)p Fk(')1915 2586 y Fh(i)1943 2574 y Fn(\))1975
-2586 y Fi(\012)2049 2574 y Fn(=)2137 2461 y Fg(Z)2183
-2649 y Fi(\012)2249 2574 y Fj(r)p Fk(')2372 2586 y Fh(j)2426
-2574 y Fj(\001)k(r)p Fk(')2590 2586 y Fh(i)2641 2574
-y Fk(dx:)330 2786 y Fn(F)-7 b(or)24 b(practical)g(purp)r(oses,)h(w)n(e)
-f(split)h(this)g(equation)f(in)n(to)h(in)n(tegrals)e(o)n(v)n(er)g(the)i
-(individual)g(cells)330 2885 y Fk(K)35 b Fn(of)30 b(the)g
-(triangulation)e Fe(T)i Fn(w)n(e)g(use)f(for)g(the)h(discretization.)42
-b(In)30 b Fm(deal.II)p Fn(,)d(these)j(cells)f(are)330
-2985 y(alw)n(a)n(ys)d(lines,)h(quadrilaterals,)f(or)g(hexahedra.)36
-b(With)28 b(this,)g(w)n(e)g(ha)n(v)n(e)e(that)721 3167
-y Fk(A)d Fn(=)906 3088 y Fg(X)894 3266 y Fh(K)t Ff(2)p
-Fd(T)1051 3167 y Fk(A)1113 3132 y Fh(K)1177 3167 y Fk(;)346
-b(A)1608 3132 y Fh(K)1608 3187 y(ij)1696 3167 y Fn(=)22
-b Fk(a)1827 3179 y Fh(K)1891 3167 y Fn(\()p Fk(')1977
-3179 y Fh(j)2013 3167 y Fk(;)14 b(')2104 3179 y Fh(i)2132
-3167 y Fn(\))166 b(0)23 b Fj(\024)f Fk(i;)14 b(j)28 b
-Fj(\024)22 b Fk(N)27 b Fj(\000)19 b Fn(1)p Fk(;)330 3420
-y Fn(where)39 b(the)h(bilinear)f(form)g Fk(a)1301 3432
-y Fh(K)1365 3420 y Fn(\()p Fj(\001)p Fk(;)14 b Fj(\001)p
-Fn(\))40 b(only)f(in)n(v)n(olv)n(es)f(an)h(in)n(tegral)f(o)n(v)n(er)g
-(the)i(cell)f Fk(K)6 b Fn(.)72 b(The)330 3519 y(imp)r(ortan)n(t)23
-b(p)r(oin)n(t)h(is)g(that)g(w)n(e)g(do)f(so)g(since)h(for)f(the)h(lo)r
-(calized)g(basis)f(functions)h(used)f(in)i(\014nite)330
-3619 y(elemen)n(ts,)i Fk(A)754 3589 y Fh(K)845 3619 y
-Fn(is)g(a)g(matrix)g(with)g(almost)f(only)h(zeros.)35
-b(The)28 b(only)e(elemen)n(ts)h(whic)n(h)g(are)f(not)330
-3719 y(zero)34 b(are)g(those)g(corresp)r(onding)f(to)i(indices)g
-Fk(i;)14 b(j)39 b Fn(indicating)c(those)g(shap)r(e)g(functions)g(that)
-330 3818 y(ha)n(v)n(e)20 b(supp)r(ort)h(also)g(on)g(the)h(elemen)n(t)f
-Fk(K)6 b Fn(.)35 b(F)-7 b(or)20 b(example,)j(in)e(2d)g(and)h(using)f
-(the)h(usual)f(bilinear)330 3918 y(shap)r(e)26 b(functions)h(for)e(a)h
-(scalar)f(problem,)h(only)g(the)g(four)g(shap)r(e)g(functions)h(asso)r
-(ciated)e(with)330 4017 y(the)33 b(v)n(ertices)e(of)h(the)h(cell)f
-Fk(K)38 b Fn(are)31 b(nonzero)g(on)h Fk(K)6 b Fn(,)33
-b(and)f(th)n(us)g(only)g(the)g(en)n(tries)g(in)g Fk(A)3122
-3987 y Fh(K)3219 4017 y Fn(are)330 4117 y(nonzero)25
-b(where)h(the)h(four)f(ro)n(ws)f(corresp)r(onding)f(to)j(these)f
-(indices)h(and)f(the)h(resp)r(ectiv)n(e)e(four)330 4217
-y(columns)i(in)n(tersect.)455 4316 y(In)j(general,)g(assume)f(that)i
-(there)f(are)f Fk(N)1769 4328 y Fh(K)1863 4316 y Fn(shap)r(e)i
-(functions)f(with)h(supp)r(ort)f(on)g(cell)g Fk(K)6 b
-Fn(,)330 4416 y(and)26 b(let)h(the)g(set)f(of)h(their)f(indices)h(b)r
-(e)g(denoted)f(b)n(y)g Fk(I)2016 4428 y Fh(K)2081 4416
-y Fn(.)36 b(Then)27 b(w)n(e)f(can)g(de\014ne)h(a)f(matrix)3226
-4395 y(^)3204 4416 y Fk(A)3266 4386 y Fh(K)330 4516 y
-Fn(of)33 b(\(small)g(dimension\))g Fk(N)1182 4528 y Fh(K)1268
-4516 y Fj(\002)21 b Fk(N)1421 4528 y Fh(K)1518 4516 y
-Fn(holding)33 b(these)g(nonzero)f(en)n(tries,)h(and)g(w)n(e)g(can)f
-(obtain)330 4615 y(bac)n(k)27 b(the)h(original)e(con)n(tribution)h
-Fk(A)1502 4627 y Fh(K)1594 4615 y Fn(to)g Fk(A)h Fn(b)n(y)f(the)h
-(transformation)585 4840 y Fk(A)647 4806 y Fh(K)647 4861
-y(ij)734 4840 y Fn(=)822 4723 y Fg(\032)925 4780 y Fn(0)568
-b(if)28 b Fk(i)23 b Fj(62)g Fk(I)1777 4792 y Fh(K)1869
-4780 y Fn(or)k Fk(j)h Fj(62)23 b Fk(I)2147 4792 y Fh(K)2212
-4780 y Fn(,)947 4867 y(^)925 4888 y Fk(A)987 4858 y Fh(K)987
-4915 y(local)p Fi(\()p Fh(i)p Fi(\))p Fh(;local)p Fi(\()p
-Fh(j)s Fi(\))1535 4888 y Fn(otherwise)o Fk(;)2466 4840
-y Fn(0)g Fj(\024)f Fk(i;)14 b(j)28 b Fj(\024)23 b Fk(N)k
-Fj(\000)18 b Fn(1)p Fk(:)330 5070 y Fn(Here,)27 b Fk(l)r(ocal)r
-Fn(\()p Fk(i)p Fn(\))f(giv)n(es)g(the)h(n)n(um)n(b)r(er)g(of)g(the)h
-(global)e(degree)g(of)h(freedom)f Fk(i)h Fn(on)g(the)g(cell)g
-Fk(K)6 b Fn(,)27 b(i.e.)330 5170 y(the)i(p)r(osition)f(of)h
-Fk(i)f Fn(in)h(the)g(index)f(set)h Fk(I)1577 5182 y Fh(K)1641
-5170 y Fn(.)40 b(One)28 b(could)g(call)2277 5149 y(^)2256
-5170 y Fk(A)2318 5140 y Fh(K)2410 5170 y Fn(the)h Fm(reduced)d
-Fn(form)i(of)h Fk(A)3243 5140 y Fh(K)3307 5170 y Fn(,)330
-5269 y(since)e(the)h(man)n(y)f(zero)g(ro)n(ws)f(and)h(column)h(ha)n(v)n
-(e)e(b)r(een)i(stripp)r(ed.)455 5369 y(In)k(general,)g(when)h(assem)n
-(bling)e(the)h(global)f(matrix,)i(the)g(rev)n(erse)d(w)n(a)n(y)h(is)i
-(used:)46 b(when)330 5469 y(adding)27 b(up)h Fk(A)784
-5439 y Fh(K)876 5469 y Fn(to)f Fk(A)p Fn(,)h(w)n(e)g(do)f(so)g(only)g
-(with)1823 5448 y(^)1801 5469 y Fk(A)1863 5439 y Fh(K)1955
-5469 y Fn(b)n(y)898 5639 y Fk(A)960 5654 y Fh(g)r(lobal)p
-Fi(\()p Fh(i)p Fi(\))p Fh(;g)r(lobal)p Fi(\()p Fh(j)s
-Fi(\))1492 5639 y Fn(+)-5 b(=)1662 5618 y(^)1640 5639
-y Fk(A)1702 5604 y Fh(K)1702 5659 y(ij)2098 5639 y Fn(0)23
-b Fj(\024)f Fk(i;)14 b(j)28 b Fj(\024)23 b Fk(N)2533
-5651 y Fh(K)2615 5639 y Fj(\000)18 b Fn(1)p Fk(:)1809
-5919 y Fn(2)p eop
-%%Page: 3 3
-3 2 bop 330 390 a Fn(Th)n(us,)34 b(indices)f(only)g(run)f(o)n(v)n(er)f
-(the)j(\(small\))f(range)f(0)14 b Fk(:)g(:)g(:)f(N)2277
-402 y Fh(K)2362 390 y Fj(\000)22 b Fn(1)32 b(instead)h(of)g(0)14
-b Fk(:)g(:)g(:)f(N)31 b Fj(\000)21 b Fn(1.)330 490 y(Here,)30
-b Fk(g)s(l)r(obal)r Fn(\()p Fk(i)p Fn(\))e(denotes)h(the)h(global)f(n)n
-(um)n(b)r(er)g(of)h(the)g(degree)f(of)g(freedom)h(with)g(n)n(um)n(b)r
-(er)f Fk(i)330 589 y Fn(on)34 b(this)g(cell)g Fk(K)6
-b Fn(,)35 b(i.e.)56 b Fk(g)s(l)r(obal)r Fn(\()p Fk(i)p
-Fn(\))31 b(=)j Fk(I)1547 601 y Fh(K)1611 589 y Fn([)p
-Fk(i)p Fn(],)h(where)f(the)g(brac)n(k)n(et)e(op)r(erator)h(returns)g
-(the)h Fk(i)p Fn(th)330 689 y(elemen)n(t)28 b(of)f(the)h(set)g
-Fk(I)1040 701 y Fh(K)1104 689 y Fn(.)455 789 y(The)c(main)g(part)g(of)g
-(assem)n(bling)f(\014nite)h(elemen)n(t)h(matrices)e(is)h(therefore)f
-(to)i(assem)n(ble)e(the)330 888 y(lo)r(cal)35 b(matrix)833
-867 y(^)811 888 y Fk(A)873 858 y Fh(K)937 888 y Fn(.)60
-b(Before)34 b(w)n(e)h(go)f(on)h(with)g(discussing)g(ho)n(w)f(this)i(is)
-f(done)f(in)i Fm(deal.II)p Fn(,)330 988 y(w)n(e)e(w)n(ould)g(lik)n(e)h
-(to)f(commen)n(t)h(on)f(the)h(ev)-5 b(aluation)34 b(of)g(the)h(in)n
-(tegrals)e(in)n(v)n(olv)n(ed.)57 b(Since)35 b(the)330
-1088 y(in)n(tegrals)i(are)g(usually)g(to)r(o)h(complex)f(to)h(b)r(e)h
-(ev)-5 b(aluated)37 b(exactly)h(\(they)g(ma)n(y)g(dep)r(end)g(on)330
-1187 y(co)r(e\016cien)n(ts)24 b(app)r(earing)g(in)h(the)g(equation,)g
-(or)f(the)h(solution)f(of)h(previous)e(steps)i(in)g(nonlinear)330
-1287 y(or)33 b(time-dep)r(enden)n(t)h(problems\),)h(they)f(are)f(appro)
-n(ximated)f(b)n(y)h(quadrature.)54 b(Assume)33 b(w)n(e)330
-1386 y(ha)n(v)n(e)18 b(a)g(quadrature)g(form)n(ula)g(with)h
-Fk(N)1535 1398 y Fh(q)1590 1386 y Fn(p)r(oin)n(ts)g Fk(x)1878
-1398 y Fh(q)1934 1386 y Fn(de\014ned)g(on)g(cell)g(in)g(real)f(space)g
-(\(as)h(opp)r(osed)330 1486 y(to)31 b(the)h(unit)g(cell\))g(and)f(w)n
-(eigh)n(ts)g Fk(w)1469 1498 y Fh(q)1506 1486 y Fn(.)48
-b(Then,)33 b(for)e(example)g(for)f(the)i(Laplace)f(equation,)g(w)n(e)
-330 1586 y(appro)n(ximate)679 1833 y(^)658 1854 y Fk(A)720
-1819 y Fh(K)720 1874 y(ij)807 1854 y Fj(\021)895 1741
-y Fg(Z)941 1929 y Fh(K)1018 1854 y Fj(r)p Fk(')1141 1866
-y Fh(i)1188 1854 y Fj(\001)19 b(r)p Fk(')1353 1866 y
-Fh(j)1411 1854 y Fk(dx)24 b Fj(\031)1612 1741 y Fh(N)1665
-1749 y Fc(q)1698 1741 y Ff(\000)p Fi(1)1638 1775 y Fg(X)1639
-1950 y Fh(q)r Fi(=0)1797 1854 y Fj(r)p Fk(')1920 1866
-y Fh(i)1948 1854 y Fn(\()p Fk(x)2027 1866 y Fh(q)2064
-1854 y Fn(\))19 b Fj(\001)g(r)p Fk(')2280 1866 y Fh(j)2315
-1854 y Fn(\()p Fk(x)2394 1866 y Fh(q)2432 1854 y Fn(\))27
-b Fk(w)2550 1866 y Fh(q)2588 1854 y Fj(j)p Fn(det)h Fk(J)8
-b Fn(\()d(^)-47 b Fk(x)2887 1866 y Fh(q)2924 1854 y Fn(\))p
-Fj(j)p Fk(:)222 b Fn(\(3\))330 2119 y(F)-7 b(or)28 b(other)g(problems,)
-g(the)h(in)n(tegrand)f(is)h(di\013eren)n(t,)g(but)g(the)g(principle)g
-(remains)f(the)h(same.)330 2218 y(det)i Fk(J)8 b Fn(\()d(^)-47
-b Fk(x)609 2230 y Fh(q)647 2218 y Fn(\))31 b(denotes)f(the)h
-(determinan)n(t)f(of)h(the)g(Jacobian)e(of)i(the)g(transformation)e(b)r
-(et)n(w)n(een)330 2318 y(the)e(unit)g(cell)g(on)f(whic)n(h)h(the)g
-(quadrature)e(w)n(eigh)n(ts)h(are)f(de\014ned,)i(and)g(the)g(real)f
-(cell,)g(and)32 b(^)-47 b Fk(x)3293 2330 y Fh(q)330 2417
-y Fn(is)25 b(the)h(p)r(oin)n(t)f(on)h(the)f(unit)h(cell)g(corresp)r
-(onding)d(to)i(the)h(quadrature)e(p)r(oin)n(t)h Fk(x)2796
-2429 y Fh(q)2859 2417 y Fn(in)g(real)g(space.)455 2517
-y(Since)37 b(all)h(matrices)e(and)i(righ)n(t)e(hand)i(side)f(v)n
-(ectors)f(only)i(require)e(kno)n(wledge)g(of)i(the)330
-2617 y(v)-5 b(alues)19 b(and)h(gradien)n(ts)e(of)i(shap)r(e)g
-(functions)g(at)g(quadrature)e(p)r(oin)n(ts,)j(this)g(is)e(all)h(that)g
-Fm(deal.II)330 2716 y Fn(usually)38 b(pro)n(vides.)69
-b(One)38 b(can)g(see)h(this)g(as)f(a)g(kind)h(of)f Fl(view)49
-b Fn(on)39 b(a)f(\014nite)h(elemen)n(t,)j(as)c(it)330
-2816 y(only)f(pro)n(vides)f(a)g(certain)h(p)r(ersp)r(ectiv)n(e)g(on)g
-(the)g(actual)g(de\014nition)h(of)f(a)f(shap)r(e)h(function.)330
-2916 y(Nev)n(ertheless,)21 b(this)f(is)g(en)n(tirely)f(su\016cien)n(t)i
-(for)e(all)h(purp)r(oses)f(of)h(programming)e(\014nite)j(elemen)n(t)330
-3015 y(programs.)455 3115 y(In)g Fm(deal.II)d Fn(the)j
-Fm(FEValues)d Fn(class)i(do)r(es)g(this:)34 b(y)n(ou)20
-b(giv)n(e)g(it)i(a)e(\014nite)i(elemen)n(t)f(de\014nition,)h(a)330
-3214 y(quadrature)i(form)n(ula)g(ob)5 b(ject,)25 b(and)g(an)g(ob)5
-b(ject)24 b(de\014ning)i(the)f(transformation)e(b)r(et)n(w)n(een)i
-(unit)330 3314 y(and)j(real)g(cell,)g(and)h(it)f(pro)n(vides)f(y)n(ou)h
-(with)h(the)g(v)-5 b(alues,)28 b(gradien)n(t,)f(and)h(second)g(deriv)-5
-b(ativ)n(es)330 3414 y(of)25 b(shap)r(e)g(functions)h(at)f(the)g
-(quadrature)f(p)r(oin)n(ts.)36 b(It)26 b(also)e(giv)n(es)g(access)g(to)
-h(the)g(determinan)n(t)330 3513 y(of)k(the)h(Jacobian,)e(although)g
-(only)h(m)n(ultiplied)h(with)g Fk(w)2120 3525 y Fh(q)2186
-3513 y Fn(as)f(these)g(t)n(w)n(o)f(are)g(alw)n(a)n(ys)g(used)h(in)330
-3613 y(conjunction.)55 b(It)33 b(also)g(pro)n(vides)f(y)n(ou)h(with)g
-(man)n(y)g(other)g(\014elds,)i(suc)n(h)e(as)g(normal)g(v)n(ectors)330
-3713 y(to)i(the)h(outer)f(b)r(oundary)-7 b(.)59 b(In)35
-b(practice)g(y)n(ou)g(do)g(not)g(need)g(them)h(all)f(computed)h(on)f
-(eac)n(h)330 3812 y(cell;)44 b(th)n(us,)d(y)n(ou)d(ha)n(v)n(e)f(to)i
-(sp)r(ecify)g(explicitly)f(in)h(whic)n(h)g(data)f(y)n(ou)f(are)h(in)n
-(terested)g(when)330 3912 y(constructing)28 b Fm(FEValues)c
-Fn(ob)5 b(jects.)455 4011 y(In)20 b(the)i(follo)n(wing,)f(w)n(e)f(pro)n
-(vide)g(a)g(list)h(of)g(connections)f(b)r(et)n(w)n(een)g(the)h(sym)n(b)
-r(ols)f(in)n(tro)r(duced)330 4111 y(ab)r(o)n(v)n(e,)38
-b(and)e(the)h(resp)r(ectiv)n(e)f(functions)h(and)g(v)-5
-b(ariable)36 b(names)g(used)h(in)g(t)n(ypical)f Fm(deal.II)330
-4211 y Fn(programs.)e(With)27 b(this,)g(w)n(e)f(will)h(subsequen)n(tly)
-e(sho)n(w)h(the)h(basic)e(structure)h(of)g(an)g(assem)n(bly)330
-4310 y(routine.)45 b(If)31 b(y)n(ou)f(ha)n(v)n(e)f(already)g(tak)n(en)h
-(a)h(lo)r(ok)e(at)i(the)g(example)f(programs)e(pro)n(vided)i(with)330
-4410 y Fm(deal.II)p Fn(,)d(y)n(ou)i(will)i(recognize)d(all)i(these)g
-(names.)43 b(If)31 b(y)n(ou)e(ha)n(v)n(en't,)h(this)g(w)n(ould)g(b)r(e)
-g(a)g(go)r(o)r(d)330 4510 y(time)e(to)g(lo)r(ok)e(at)i(the)g(\014rst)f
-(three)h(of)f(them.)p 690 4604 2280 4 v 688 4703 4 100
-v 740 4674 a Fk(A)498 b Fm(system)p 1569 4674 27 4 v
-29 w(matrix)p 2968 4703 4 100 v 688 4812 4 109 v 762
-4761 a Fn(^)740 4782 y Fk(A)802 4752 y Fh(K)1300 4782
-y Fm(cell)p 1481 4782 27 4 v 30 w(matrix)p 2968 4812
-4 109 v 688 4912 4 100 v 740 4882 a Fk(K)489 b Fm(cell)p
-2968 4912 V 688 5011 V 740 4981 a Fk(N)k Fm(dof)p 1437
-4981 27 4 v 30 w(handler.n)p 1863 4981 V 28 w(dofs\(\))p
-2968 5011 4 100 v 688 5111 V 740 5081 a Fk(N)807 5093
-y Fh(K)1300 5081 y Fm(fe.dofs)p 1613 5081 27 4 v 29 w(per)p
-1774 5081 V 30 w(cell)p 2968 5111 4 100 v 688 5210 V
-740 5181 a Fk(I)776 5193 y Fh(K)1300 5181 y Fm(local)p
-1525 5181 27 4 v 29 w(dof)p 1686 5181 V 31 w(indices)p
-2968 5210 4 100 v 688 5310 V 740 5280 a Fk(N)807 5292
-y Fh(q)1300 5280 y Fm(quadrature)p 1745 5280 27 4 v 27
-w(formula.n)p 2168 5280 V 28 w(quadrature)p 2636 5280
-V 27 w(points)p 2968 5310 4 100 v 688 5410 V 740 5380
-a Fk(')794 5392 y Fh(i)822 5380 y Fn(\()p Fk(x)901 5392
-y Fh(q)939 5380 y Fn(\))329 b Fm(fe)p 1393 5380 27 4
-v 31 w(values.shape)p 1952 5380 V 26 w(value\(i,q\))p
-2968 5410 4 100 v 688 5509 V 740 5479 a Fj(r)p Fk(')863
-5491 y Fh(i)891 5479 y Fn(\()p Fk(x)970 5491 y Fh(q)1008
-5479 y Fn(\))260 b Fm(fe)p 1393 5479 27 4 v 31 w(values.shape)p
-1952 5479 V 26 w(grad\(i,q\))p 2968 5509 4 100 v 688
-5609 V 740 5579 a Fk(x)787 5591 y Fh(q)1300 5579 y Fm(fe)p
-1393 5579 27 4 v 31 w(values.quadratu)o(re)p 2171 5579
-V 25 w(point\(q\))p 2968 5609 4 100 v 688 5709 V 740
-5679 a Fj(j)p Fn(det)q Fk(J)8 b Fn(\()d(^)-47 b Fk(x)1012
-5691 y Fh(q)1049 5679 y Fn(\))p Fj(j)p Fk(w)1163 5691
-y Fh(q)1300 5679 y Fm(fe)p 1393 5679 27 4 v 31 w(values.JxW\(q\))p
-2968 5709 4 100 v 690 5712 2280 4 v 1809 5919 a Fn(3)p
-eop
-%%Page: 4 4
-4 3 bop 455 390 a Fn(With)41 b(this)g(v)n(o)r(cabulary)-7
-b(,)42 b(the)f(t)n(ypical)f(matrix)g(assem)n(bly)g(lo)r(op)g(in)h
-Fm(deal.II)d Fn(has)i(the)330 490 y(follo)n(wing)27 b(form:)38
-b(\014rst)29 b(declare)e(a)h(quadrature)f(ob)5 b(ject)28
-b(and)g(use)h(it)f(for)g(the)h(initialization)f(of)330
-589 y(a)f Fm(FEValues)e Fn(ob)5 b(ject)27 b(as)g(discussed)g(ab)r(o)n
-(v)n(e:)417 743 y Fm(QGauss2<2>)83 b(quadrature_formul)o(a;)417
-842 y(FEValues<2>)39 b(fe_values)h(\(fe,)i(quadrature_formu)o(la,)1420
-942 y(UpdateFlags\(upd)o(ate)o(_v)o(alu)o(es)168 b(|)1943
-1042 y(update_gradient)o(s)38 b(|)1943 1141 y(update_JxW_valu)o(es\))o
-(\);)330 1295 y Fn(In)e(practice,)g(y)n(ou)f(ma)n(y)g(w)n(an)n(t)f(to)i
-(use)f(a)g(di\013eren)n(t)g(set)h(of)f(\014elds)h(to)f(b)r(e)h(up)r
-(dated)g(on)f(eac)n(h)330 1394 y(cell.)53 b(F)-7 b(or)32
-b(example)g(if)i(y)n(ou)e(do)g(not)h(need)g(the)g(v)-5
-b(alues)33 b(of)g(shap)r(e)f(functions)i(on)e(a)h(cell,)h(y)n(ou)330
-1494 y(ma)n(y)25 b(omit)h Fm(update)p 969 1494 27 4 v
-29 w(values)d Fn(from)i(the)h(list.)37 b(Also)25 b(note)g(that)h(b)n(y)
-g(default)g(a)f(bi-)h(or)e(tri-linear)330 1593 y(\(dep)r(ending)j(on)e
-(space)g(dimension\))i(mapping)e(b)r(et)n(w)n(een)h(unit)h(and)f(real)f
-(cell)g(is)h(used.)37 b(Other)330 1693 y(mappings)32
-b(are)g(p)r(ossible,)h(for)f(example)h(quadratic)e(ones,)i(or)f(a)g
-(mapping)h(that)g(mak)n(es)e(use)330 1793 y(of)e(the)h(fact)f(that)h
-(in)f(man)n(y)g(cases)f(cells)h(are)f(actually)h(rectangular,)f(rather)
-g(than)h(arbitrary)330 1892 y(quadrilaterals;)24 b(in)j(order)d(to)i
-(use)g(them,)h(another)e(constructor)f(of)i(the)h Fm(FEValues)22
-b Fn(class)j(can)330 1992 y(b)r(e)c(used,)h(whic)n(h)e(tak)n(es)f(a)h
-(mapping)g(ob)5 b(ject)20 b(as)g(\014rst)g(argumen)n(t,)h(b)r(efore)f
-(the)h(other)e(argumen)n(ts)330 2092 y(listed)28 b(ab)r(o)n(v)n(e.)455
-2191 y(Next)f(w)n(e)h(de\014ne)g(abbreviations)e(for)h(the)h(v)-5
-b(alues)27 b(of)g Fk(N)2213 2203 y Fh(K)2305 2191 y Fn(and)g
-Fk(N)2533 2203 y Fh(q)2570 2191 y Fn(:)417 2344 y Fm(const)42
-b(unsigned)e(int)592 2444 y(dofs_per_cell)e(=)43 b(fe.dofs_per_cell)o
-(,)592 2544 y(n_q_points)170 b(=)43 b(quadrature_formu)o(la)o(.n_)o(qu)
-o(adr)o(at)o(ur)o(e_p)o(oi)o(nts)o(;)330 2697 y Fn(Then)28
-b(ha)n(v)n(e)e(an)i(ob)5 b(ject)27 b(to)g(store)g(the)h(matrix)1845
-2676 y(^)1823 2697 y Fk(A)1885 2667 y Fh(K)1949 2697
-y Fn(,)g(whic)n(h)g(is)f(of)h(size)f Fk(N)2640 2709 y
-Fh(K)2722 2697 y Fj(\002)18 b Fk(N)2872 2709 y Fh(K)2936
-2697 y Fn(:)417 2850 y Fm(FullMatrix<double)o(>)124 b(cell_matrix)40
-b(\(dofs_per_cell,)d(dofs_per_cell\);)330 3003 y Fn(And)21
-b(an)f(ob)5 b(ject)20 b(represen)n(ting)f(the)i(set)g(of)f(global)f
-(indices)i(of)f(degrees)f(of)i(freedom,)g(previously)330
-3103 y(denoted)27 b(b)n(y)f Fk(I)793 3115 y Fh(K)858
-3103 y Fn(,)h(that)g(ha)n(v)n(e)e(supp)r(ort)i(on)f(the)h(presen)n(t)f
-(cell,)h(i.e.)37 b(those)26 b(degrees)g(of)h(freedom)330
-3203 y(lo)r(cal)g(to)g(the)h(presen)n(t)f(cell:)417 3356
-y Fm(std::vector<unsig)o(ne)o(d)37 b(int>)42 b(local_dof_indices)37
-b(\(dofs_per_cell\);)330 3509 y Fn(The)28 b(next)f(step)h(is)g(then)g
-(to)f(lo)r(op)g(o)n(v)n(er)f(all)i(cells:)417 3663 y
-Fm(typename)40 b(DoFHandler<dim>::)o(act)o(iv)o(e_c)o(el)o(l_)o(ite)o
-(ra)o(tor)635 3762 y(cell)i(=)h(dof_handler.begin)o(_a)o(cti)o(ve)o
-(\(\))o(,)635 3862 y(endc)f(=)h(dof_handler.end\(\))o(;)417
-3961 y(for)g(\(;)f(cell!=endc;)d(++cell\))504 4061 y({)330
-4214 y Fn(On)34 b(eac)n(h)g(cell,)i(\014rst)e(tell)h(the)f
-Fm(FEValues)e Fn(ob)5 b(ject)34 b(to)g(compute)g(the)h(v)-5
-b(alues)34 b(of)h(the)f(v)-5 b(arious)330 4314 y(\014elds)26
-b(for)f(this)h(particular)e(cell,)i(and)g(do)f(not)h(forget)f(to)g
-(reset)g(the)h(lo)r(cal)f(matrix)2953 4293 y(^)2931 4314
-y Fk(A)2993 4284 y Fh(K)3083 4314 y Fn(to)g(zero)330
-4414 y(b)r(efore)i(adding)g(it)h(up:)592 4567 y Fm(fe_values.reini)o(t)
-37 b(\(cell\);)592 4666 y(cell_matrix.cle)o(ar)g(\(\);)330
-4820 y Fn(No)n(w)32 b(comes)g(the)i(main)e(part,)i(assem)n(bling)e(the)
-h(lo)r(cal)f(matrix)2415 4799 y(^)2393 4820 y Fk(A)2455
-4790 y Fh(K)2520 4820 y Fn(.)52 b(It)33 b(consists)f(of)h(a)f(lo)r(op)
-330 4919 y(o)n(v)n(er)26 b(all)i(indices)g(0)23 b Fj(\024)g
-Fk(i;)14 b(j)28 b Fj(\024)c Fk(N)1334 4931 y Fh(K)1425
-4919 y Fn(and)k(all)g(quadrature)e(p)r(oin)n(ts)i(0)23
-b Fj(\024)h Fk(q)i Fj(\024)e Fk(N)2753 4931 y Fh(q)2789
-4919 y Fn(,)k(and)g(summing)330 5019 y(up)35 b(the)h(con)n(tributions.)
-59 b(As)35 b(this)g(is)g(what)g(w)n(e)g(will)g(discuss)g(in)g(detail)g
-(later)g(on,)i(w)n(e)d(only)330 5119 y(denote)28 b(it)g(here)f(b)n(y)g
-(an)g(ellipse:)592 5272 y Fm(for)42 b(\(unsigned)e(int)i(i=0;)g
-(i<dofs_per_cell;)37 b(++i\))679 5372 y(for)42 b(\(unsigned)e(int)i
-(j=0;)g(j<dofs_per_cell;)37 b(++j\))766 5471 y(for)42
-b(\(unsigned)e(int)i(q=0;)g(q<n_q_points;)d(++q\))853
-5571 y(cell_matrix\(i,j\))e(+=)43 b(...;)1809 5919 y
-Fn(4)p eop
-%%Page: 5 5
-5 4 bop 330 390 a Fn(After)25 b(w)n(e)f(ha)n(v)n(e)874
-369 y(^)852 390 y Fk(A)914 360 y Fh(K)978 390 y Fn(,)h(w)n(e)g(still)g
-(ha)n(v)n(e)e(to)i(sum)f(it)i(in)n(to)e(the)h(global)e(matrix)i
-Fk(A)p Fn(.)36 b(This)24 b(is)h(done)f(b)n(y)330 490
-y(\014rst)i(getting)g(the)h(set)f Fk(I)1086 502 y Fh(K)1177
-490 y Fn(of)g(the)g(global)f(indices)i(of)f(the)g(shap)r(e)h(functions)
-f(that)h(w)n(ere)e(activ)n(e)330 589 y(on)i(this)h(cell,)g(and)f(then)h
-(distributing)1603 568 y(^)1581 589 y Fk(A)1643 559 y
-Fh(K)1707 589 y Fn(:)592 750 y Fm(cell->get_dof_i)o(nd)o(ice)o(s)37
-b(\(local_dof_indice)o(s\);)592 950 y(for)42 b(\(unsigned)e(int)i(i=0;)
-g(i<dofs_per_cell;)37 b(++i\))679 1049 y(for)42 b(\(unsigned)e(int)i
-(j=0;)g(j<dofs_per_cell;)37 b(++j\))766 1149 y(system_matrix.ad)o(d)g
-(\(local_dof_indice)o(s[i)o(],)1594 1248 y(local_dof_indice)o(s[j)o(],)
-1594 1348 y(cell_matrix\(i,j\))o(\);)504 1448 y(};)330
-1608 y Fn(When)28 b(this)g(is)g(done,)f(w)n(e)g(go)g(on)g(to)h(the)g
-(next)f(cell.)455 1708 y(Within)c(this)f(framew)n(ork,)f(the)h(only)g
-(op)r(en)g(p)r(oin)n(t)g(is)g(assem)n(bling)2548 1687
-y(^)2526 1708 y Fk(A)2588 1678 y Fh(K)2674 1708 y Fn(on)g(one)g
-(quadrature)330 1808 y(p)r(oin)n(t.)37 b(This)28 b(will)f(b)r(e)h(sub)5
-b(ject)28 b(of)g(the)g(rest)f(of)g(this)h(rep)r(ort.)330
-2081 y Fo(3)135 b(Assem)l(bling)45 b(scalar)h(problems)330
-2274 y Fn(F)-7 b(or)22 b(scalar)f(problems,)i(assem)n(bling)1516
-2253 y(^)1494 2274 y Fk(A)1556 2243 y Fh(K)1643 2274
-y Fn(is)f(relativ)n(ely)g(simple.)35 b(With)24 b(the)f(terms)f(in)n
-(tro)r(duced)330 2373 y(ab)r(o)n(v)n(e,)k(and)i(for)f(the)h(Laplace)e
-(equation,)h(this)h(lo)r(oks)f(as)g(follo)n(ws:)417 2534
-y Fm(local_matrix\(i,j\))37 b(+=)42 b(\(fe_values.shape_)o(gra)o(d\()o
-(i,q)o(_p)o(oi)o(nt\))37 b(*)1376 2634 y(fe_values.shape_)o(gra)o(d\()o
-(j,q)o(_p)o(oi)o(nt\))g(*)1376 2733 y(fe_values.JxW)h(\(q_point\)\);)
-330 2894 y Fn(This)28 b(term)g(is)g(placed)g(in)g(the)h(innermost)f(lo)
-r(op,)g(i.e.)38 b(is)28 b(p)r(erformed)g(for)f(all)h(indices)g
-Fk(i;)14 b(j)5 b Fn(,)28 b(and)330 2994 y(all)f(quadrature)f(p)r(oin)n
-(ts)i Fm(q)p 1171 2994 27 4 v 31 w(point)p Fn(.)455 3093
-y(F)-7 b(or)30 b(nonsymmetric)h(problems,)h(the)g(order)e(of)i(terms)f
-(has)g(to)h(b)r(e)g(considered,)f(as)g(men-)330 3193
-y(tioned)d(ab)r(o)n(v)n(e.)35 b(F)-7 b(or)27 b(example,)g(for)g(the)h
-(adv)n(ection)f(equation)1627 3369 y Fk(\014)22 b Fj(\001)d(r)p
-Fk(u)k Fn(=)f Fk(f)t(;)330 3545 y Fn(with)28 b(whic)n(h)g(the)g
-(bilinear)f(form)1444 3721 y Fk(a)p Fn(\()p Fk(u;)14
-b(v)s Fn(\))24 b(=)e(\()p Fk(\014)h Fj(\001)c(r)p Fk(u;)14
-b(v)s Fn(\))2164 3733 y Fi(\012)330 3897 y Fn(is)27 b(asso)r(ciated,)g
-(the)h(lo)r(cal)f(matrix)g(is)g(assem)n(bled)g(as)417
-4058 y Fm(local_matrix\(i,j\))37 b(+=)42 b(\(fe_values.shape_)o(val)o
-(ue)o(s\(i)o(,q)o(_p)o(oin)o(t\))37 b(*)1376 4158 y(\()43
-b(beta)f(*)h(fe_values.shape_g)o(ra)o(d\(j)o(,q)o(_po)o(in)o(t\))37
-b(\))43 b(*)1376 4257 y(fe_values.JxW)38 b(\(q_point\)\);)330
-4418 y Fn(Here,)30 b Fm(beta)d Fn(is)j(an)f(ob)5 b(ject)29
-b(of)g(t)n(yp)r(e)h Fm(Tensor<1,dim>)p Fn(,)24 b(whic)n(h)29
-b(represen)n(ts)f(a)h(tensor)g(of)g(rank)330 4518 y(1)e(in)h
-Fm(dim)e Fn(space)h(dimensions.)455 4617 y(Assem)n(bling)d(matrices)h
-(for)g(scalar)e(problems)i(is)g(also)g(sho)n(wn)f(from)h(a)g(practical)
-g(p)r(ersp)r(ec-)330 4717 y(tiv)n(e)32 b(in)h(man)n(y)f(of)g(the)h
-(example)f(programs)f(of)38 b Fm(deal.II)p Fn(,)30 b(where)i(it)h(is)f
-(also)g(demonstrated)330 4817 y(ho)n(w)e(to)h(do)g(this)h(for)e(the)i
-(righ)n(t)e(hand)h(side)g(v)n(ectors.)46 b(Th)n(us,)31
-b(scalar)f(problems)g(are)g(not)h(to)r(o)330 4916 y(in)n(teresting,)c
-(and)g(w)n(e)h(no)n(w)f(turn)g(to)h(v)n(ector-v)-5 b(alued)26
-b(problems.)330 5190 y Fo(4)135 b(V)-11 b(ector-v)k(alued)44
-b(problems)330 5372 y Fn(Since)33 b(w)n(e)f(need)h(some)f(problems)g
-(at)h(whic)n(h)f(w)n(e)h(will)g(explain)f(assem)n(bling)f(the)i(matrix)
-g(for)330 5471 y(the)24 b(v)n(ector-v)-5 b(alued)22 b(case,)h(w)n(e)h
-(no)n(w)f(brie\015y)g(in)n(tro)r(duce)g(t)n(w)n(o)g(simple)g
-(equations.)35 b(The)24 b(\014rst)f(are)330 5571 y(the)31
-b(Lam)n(\023)-39 b(e)29 b(equations)g(of)i(elasticit)n(y)-7
-b(,)30 b(whic)n(h)g(are)g(tak)n(en)g(for)f(the)i(symmetric)f(case,)h
-(then)f(w)n(e)330 5670 y(brie\015y)d(in)n(tro)r(duce)g(the)h(Stok)n(es)
-f(equations)g(as)g(a)g(nonsymmetric)g(problem.)1809 5919
-y(5)p eop
-%%Page: 6 6
-6 5 bop 330 390 a Fb(4.1)112 b(The)38 b(elastic)g(equations)330
-543 y Fn(As)22 b(\014rst)g(example)f(for)g(the)i(metho)r(ds)f(w)n(e)f
-(are)g(going)g(to)h(discuss)f(for)h(v)n(ector-v)-5 b(alued)20
-b(problems,)330 643 y(w)n(e)k(consider)g(the)h(elastic)f(Lam)n(\023)-39
-b(e)23 b(equations)h(for)g(isotropic)f(materials,)h(whic)n(h)h(read)e
-(in)i(strong)330 743 y(form:)1188 842 y Fj(\000r)p Fn(\()p
-Fk(\025)19 b Fn(+)f Fk(\026)p Fn(\)\()p Fj(r)h(\001)f
-Fa(u)p Fn(\))h Fj(\000)f Fn(\()p Fj(r)h(\001)g Fk(\026)p
-Fj(r)p Fn(\))p Fa(u)k Fn(=)g Fa(f)9 b Fk(:)330 987 y
-Fn(These)34 b(equations)f(describ)r(e)g(the)i(three-dimensional)e
-(deformation)g Fa(u)h Fn(of)g(an)f(elastic)h(b)r(o)r(dy)330
-1087 y(under)27 b(a)g(b)r(o)r(dy)h(force)e Fa(f)9 b Fn(.)37
-b(The)28 b(resp)r(ectiv)n(e)e(bilinear)h(form)g(asso)r(ciated)f(with)i
-(this)g(op)r(erator)d(is)330 1186 y(then)868 1286 y Fk(a)p
-Fn(\()p Fa(u)p Fk(;)14 b Fa(v)q Fn(\))24 b(=)f(\(\()p
-Fk(\025)c Fn(+)f Fk(\026)p Fn(\))p Fj(r)h(\001)g Fa(u)p
-Fk(;)14 b Fj(r)k(\001)h Fa(v)q Fn(\))1958 1311 y Fi(\012)2028
-1286 y Fn(+)2111 1207 y Fg(X)2152 1386 y Fh(k)2244 1286
-y Fn(\()q Fk(\026)p Fj(r)p Fk(u)2444 1298 y Fh(k)2484
-1286 y Fk(;)14 b Fj(r)p Fk(v)2630 1298 y Fh(k)2671 1286
-y Fn(\))2704 1311 y Fi(\012)2769 1286 y Fk(;)330 1499
-y Fn(or)27 b(as)g(a)g(sum)h(o)n(v)n(er)d(comp)r(onen)n(ts:)828
-1685 y Fk(a)p Fn(\()p Fa(u)p Fk(;)14 b Fa(v)q Fn(\))24
-b(=)1189 1606 y Fg(X)1210 1785 y Fh(k)q(;l)1322 1685
-y Fn(\()q(\()p Fk(\025)19 b Fn(+)f Fk(\026)p Fn(\))p
-Fk(@)1663 1697 y Fh(l)1689 1685 y Fk(u)1737 1697 y Fh(l)1762
-1685 y Fk(;)c(@)1843 1697 y Fh(k)1884 1685 y Fk(v)1924
-1697 y Fh(k)1965 1685 y Fn(\))1997 1710 y Fi(\012)2067
-1685 y Fn(+)2150 1606 y Fg(X)2171 1785 y Fh(k)q(;l)2284
-1685 y Fn(\()p Fk(\026@)2410 1697 y Fh(l)2436 1685 y
-Fk(u)2484 1697 y Fh(k)2524 1685 y Fk(;)g(@)2605 1697
-y Fh(l)2630 1685 y Fk(v)2670 1697 y Fh(k)2711 1685 y
-Fn(\))2744 1710 y Fi(\012)2809 1685 y Fk(:)455 1951 y
-Fn(When)25 b(assem)n(bling)g(matrices,)g(it)h(is)f(adv)-5
-b(an)n(tageous)23 b(to)i(write)h(the)f(w)n(eak)g(form)g(\(i.e.)36
-b(after)330 2050 y(in)n(tegration)g(b)n(y)h(parts\))f(as)h(a)g(kind)g
-(of)g(op)r(erator.)64 b(This)37 b(is)g(since)g(matrix)f(elemen)n(ts)h
-(after)330 2150 y(discretization)27 b(are)f(de\014ned)i(as)1519
-2325 y Fk(A)1581 2337 y Fh(ij)1662 2325 y Fn(=)23 b Fk(a)p
-Fn(\()p Fk(')1880 2337 y Fh(j)1916 2325 y Fk(;)14 b(')2007
-2337 y Fh(i)2034 2325 y Fn(\))2066 2337 y Fi(\012)2118
-2325 y Fk(;)330 2499 y Fn(where)27 b Fk(')624 2511 y
-Fh(i)652 2499 y Fk(;)14 b(')743 2511 y Fh(j)805 2499
-y Fn(are)26 b(t)n(w)n(o)h(v)n(ector-v)-5 b(alued)26 b(trial)g
-(functions,)i(and)f(it)h(w)n(ould)f(b)r(e)g(nice)h(if)f(w)n(e)g(could)
-330 2599 y(write)33 b(the)g(bilinear)g(form)f Fk(a)p
-Fn(\()p Fj(\001)p Fk(;)14 b Fj(\001)p Fn(\))34 b(as)e(a)g(kind)i(of)f
-(scalar)e(pro)r(duct)i(\()p Fk(')2546 2611 y Fh(i)2574
-2599 y Fk(;)14 b(Q')2731 2611 y Fh(j)2766 2599 y Fn(\),)35
-b(where)d Fk(Q)h Fn(is)f(a)330 2699 y(di\013eren)n(tial)25
-b(op)r(erator.)34 b(This)25 b(is)g(trivial)f(if)i(w)n(e)e(tak)n(e)h
-Fk(Q)f Fn(as)h(the)g(op)r(erator)e(of)i(the)h(strong)d(form,)330
-2798 y Fk(Q)g Fn(=)f Fj(\000r)p Fn(\()p Fk(\025)11 b
-Fn(+)g Fk(\026)p Fn(\))p Fj(r)g(\001)g(\000)p Fn(\()p
-Fj(r)g(\001)g Fk(\026)p Fj(r)p Fn(\),)28 b(but)c(w)n(e)g(w)n(an)n(ted)f
-(to)h(do)g(this)g(for)g(the)g(w)n(eak)f(form.)35 b(F)-7
-b(or)24 b(this,)330 2898 y(w)n(e)33 b(in)n(tro)r(duce)h(some)f
-(notation)g(that)h(is)g(used)g(in)g(quan)n(tum)g(\014eld)g(theory:)48
-b(for)33 b(di\013eren)n(tial)330 2998 y(op)r(erators,)i(w)n(e)h
-(indicate)f(b)n(y)g(an)g(arro)n(w)f(placed)h(atop)g(of)g(it)h(whether)f
-(it)h(shall)f(act)h(on)f(the)330 3109 y(ob)5 b(ject)26
-b(to)h(the)g(left)g(or)f(to)h(the)g(righ)n(t)f(of)g(it.)37
-b(Th)n(us,)27 b Fk(')2006 3052 y Fj( )-65 b(\000)2013
-3109 y(r)24 b(\001)2145 3052 y(\000)-65 b(!)2152 3109
-y(r)7 b Fk( )26 b Fn(=)d(\()p Fj(r)p Fk(')p Fn(\))18
-b Fj(\001)e Fn(\()p Fj(r)p Fk( )s Fn(\).)38 b(With)27
-b(this,)g(a)330 3209 y(simple)h(computation)f(sho)n(ws)g(that)413
-3479 y Fk(a)p Fn(\()p Fa(u)p Fk(;)14 b Fa(v)q Fn(\))24
-b(=)f(\()p Fk(\025)c Fn(+)f Fk(\026)p Fn(\))1052 3337
-y Fg( )1118 3362 y(\022)1179 3428 y Fk(u)1227 3440 y
-Fi(1)1179 3528 y Fk(u)1227 3540 y Fi(2)1264 3362 y Fg(\023)1348
-3479 y Fj(j)1394 3337 y Fg( )1460 3370 y Fj( )-65 b(\000)1477
-3428 y Fk(@)1543 3440 y Fi(1)1580 3370 y Fj(\000)g(!)1597
-3428 y Fk(@)1663 3440 y Fi(1)1783 3370 y Fj( )g(\000)1801
-3428 y Fk(@)1866 3440 y Fi(1)1904 3370 y Fj(\000)g(!)1921
-3428 y Fk(@)1987 3440 y Fi(2)1460 3488 y Fj( )g(\000)1477
-3546 y Fk(@)1543 3558 y Fi(2)1580 3488 y Fj(\000)g(!)1597
-3546 y Fk(@)1663 3558 y Fi(1)1783 3488 y Fj( )g(\000)1801
-3546 y Fk(@)1866 3558 y Fi(2)1904 3488 y Fj(\000)g(!)1921
-3546 y Fk(@)1987 3558 y Fi(2)2024 3337 y Fg(!)2113 3479
-y Fj(j)2159 3362 y Fg(\022)2220 3428 y Fk(v)2260 3440
-y Fi(1)2220 3528 y Fk(v)2260 3540 y Fi(2)2297 3362 y
-Fg(\023)2359 3337 y(!)2424 3587 y Fi(\012)1361 3740 y
-Fn(+)18 b Fk(\026)1508 3623 y Fg(\022\022)1630 3690 y
-Fk(u)1678 3702 y Fi(1)1630 3789 y Fk(u)1678 3801 y Fi(2)1714
-3623 y Fg(\023)1799 3740 y Fj(j)1845 3648 y Fg(\020)1894
-3683 y Fj( )-65 b(\000)1911 3740 y Fk(@)1977 3752 y Fi(1)2015
-3683 y Fj(\000)g(!)2032 3740 y Fk(@)2098 3752 y Fi(1)2153
-3740 y Fn(+)2236 3683 y Fj( )g(\000)2253 3740 y Fk(@)2319
-3752 y Fi(2)2357 3683 y Fj(\000)g(!)2374 3740 y Fk(@)2440
-3752 y Fi(2)2477 3648 y Fg(\021)2540 3623 y(\022)2601
-3690 y Fn(1)83 b(0)2601 3789 y(0)g(1)2767 3623 y Fg(\023)2852
-3740 y Fj(j)2898 3623 y Fg(\022)2959 3690 y Fk(v)2999
-3702 y Fi(1)2959 3789 y Fk(v)2999 3801 y Fi(2)3036 3623
-y Fg(\023\023)3159 3823 y Fi(\012)3224 3740 y Fk(:)330
-3964 y Fn(The)28 b(sough)n(t)e(op)r(erator)g Fk(Q)h Fn(is)h(then)464
-4209 y Fk(Q)23 b Fn(=)f(\()p Fk(\025)d Fn(+)g Fk(\026)p
-Fn(\))919 4067 y Fg( )984 4101 y Fj( )-65 b(\000)1002
-4159 y Fk(@)1067 4171 y Fi(1)1105 4101 y Fj(\000)g(!)1122
-4159 y Fk(@)1188 4171 y Fi(1)1308 4101 y Fj( )g(\000)1325
-4159 y Fk(@)1391 4171 y Fi(1)1428 4101 y Fj(\000)g(!)1445
-4159 y Fk(@)1511 4171 y Fi(2)984 4219 y Fj( )g(\000)1002
-4277 y Fk(@)1067 4289 y Fi(2)1105 4219 y Fj(\000)g(!)1122
-4277 y Fk(@)1188 4289 y Fi(1)1308 4219 y Fj( )g(\000)1325
-4277 y Fk(@)1391 4289 y Fi(2)1428 4219 y Fj(\000)g(!)1445
-4277 y Fk(@)1511 4289 y Fi(2)1548 4067 y Fg(!)1633 4209
-y Fn(+)18 b Fk(\026)1780 4067 y Fg( )1845 4101 y Fj( )-65
-b(\000)1862 4159 y Fk(@)1928 4171 y Fi(1)1966 4101 y
-Fj(\000)g(!)1983 4159 y Fk(@)2049 4171 y Fi(1)2104 4159
-y Fn(+)2187 4101 y Fj( )g(\000)2204 4159 y Fk(@)2270
-4171 y Fi(2)2308 4101 y Fj(\000)g(!)2325 4159 y Fk(@)2391
-4171 y Fi(2)2781 4159 y Fn(0)2116 4277 y(0)2511 4219
-y Fj( )g(\000)2528 4277 y Fk(@)2594 4289 y Fi(1)2631
-4219 y Fj(\000)g(!)2648 4277 y Fk(@)2714 4289 y Fi(1)2770
-4277 y Fn(+)2853 4219 y Fj( )g(\000)2870 4277 y Fk(@)2936
-4289 y Fi(2)2973 4219 y Fj(\000)g(!)2990 4277 y Fk(@)3056
-4289 y Fi(2)3093 4067 y Fg(!)3173 4209 y Fk(;)330 4459
-y Fn(and)38 b Fk(a)p Fn(\()p Fa(u)p Fk(;)14 b Fa(v)q
-Fn(\))42 b(=)e(\()p Fa(u)p Fj(j)p Fk(Q)p Fj(j)p Fa(v)q
-Fn(\).)70 b(W)-7 b(e)38 b(demonstrate)f(the)i(fact)f(that)h
-Fk(Q)e Fn(acts)h(to)g(b)r(oth)h(sides)e(b)n(y)330 4558
-y(placing)e(it)h(in)f(the)h(middle)g(of)g(the)f(scalar)f(pro)r(duct,)k
-(just)e(as)f(in)g(the)h(bra-k)n(et)e(notation)h(of)330
-4658 y(quan)n(tum)28 b(ph)n(ysics.)455 4758 y(The)20
-b(adv)-5 b(an)n(tages)18 b(of)j(this)f(form)n(ulation)f(will)i(b)r
-(ecome)f(clear)f(when)i(discussing)e(assem)n(bling)330
-4857 y(matrices)k(b)r(elo)n(w.)36 b(F)-7 b(or)23 b(no)n(w,)h(w)n(e)g
-(remark)f(that)h(the)h(symmetry)e(of)h(the)h(w)n(eak)e(form)h(is)g
-(equally)330 4957 y(apparen)n(t)i(from)i(the)g(form)f(of)h
-Fk(Q)f Fn(as)g(w)n(ell)g(as)g(from)g(the)h(initial)g(de\014nition)g(of)
-g Fk(a)p Fn(\()p Fj(\001)p Fk(;)14 b Fj(\001)p Fn(\).)330
-5188 y Fb(4.2)112 b(The)38 b(Stok)m(es)g(equations)330
-5341 y Fn(F)-7 b(or)27 b(a)g(nonsymmetric)g(problem,)g(w)n(e)h(tak)n(e)
-e(the)i(Stok)n(es)f(equations:)1543 5516 y Fj(\000)p
-Fn(\001)p Fa(u)18 b Fn(+)g Fj(r)p Fk(p)23 b Fn(=)g(0)p
-Fk(;)1748 5641 y Fn(div)28 b Fa(u)23 b Fn(=)g(0)p Fk(:)1809
-5919 y Fn(6)p eop
-%%Page: 7 7
-7 6 bop 330 390 a Fn(W)-7 b(e)31 b(denote)f(b)n(y)h Fa(w)e
-Fn(=)e Fj(f)p Fa(u)p Fk(;)14 b(p)p Fj(g)30 b Fn(the)h(en)n(tire)f
-(solution)g(v)n(ector.)44 b(In)31 b(the)g(w)n(eak)f(form,)h(the)f(ab)r
-(o)n(v)n(e)330 490 y(equations)d(read)620 645 y Fk(a)p
-Fn(\()p Fa(u)p Fk(;)14 b(p)p Fn(;)g Fa(v)q Fk(;)g(q)s
-Fn(\))24 b(=)f Fk(\027)5 b Fn(\()p Fj(r)p Fa(u)1337 657
-y Fi(1)1375 645 y Fk(;)14 b Fj(r)p Fa(v)1531 657 y Fi(1)1568
-645 y Fn(\))19 b(+)f Fk(\027)5 b Fn(\()p Fj(r)p Fa(u)1902
-657 y Fi(2)1940 645 y Fk(;)14 b Fj(r)p Fa(v)2096 657
-y Fi(2)2134 645 y Fn(\))19 b Fj(\000)f Fn(\()p Fk(p;)c
-Fj(r)k(\001)h Fa(v)q Fn(\))g(+)f(\()p Fj(r)h(\001)g Fa(u)p
-Fk(;)14 b(q)s Fn(\))p Fk(:)330 799 y Fn(Since)34 b(w)n(e)f(in)n
-(tegrated)f(the)i(gradien)n(t)e(term)h(in)h(the)g(\014rst)f(equation)g
-(b)n(y)g(parts,)h(but)g(not)g(the)330 899 y(div)n(ergence)c(term)h(in)h
-(the)g(second)f(equation,)h(the)g(problem)e(is)i(no)n(w)f
-(nonsymmetric.)48 b(If)31 b(w)n(e)330 999 y(w)n(ould)g(ha)n(v)n(e)g
-(lik)n(ed,)h(w)n(e)f(could)h(ha)n(v)n(e)e(made)i(the)g(problem)f
-(symmetric)g(again)g(b)n(y)g(m)n(ultiply-)330 1098 y(ing)k(the)g(en)n
-(tire)f(second)g(equation)g(b)n(y)h Fj(\000)p Fn(1,)g(but)h(w)n(e)e
-(don't)h(w)n(an)n(t)f(to)h(do)f(that)h(for)f(no)n(w)h(for)330
-1198 y(illustrational)27 b(purp)r(oses.)455 1298 y(Again,)g(w)n(e)h(in)
-n(tro)r(duce)f(the)h(op)r(erator)e Fk(Q)i Fn(for)f(this)h(problem,)g
-(whic)n(h)g(after)f(some)g(compu-)330 1397 y(tations)g(turns)h(out)f
-(to)h(b)r(e)782 1658 y Fk(Q)23 b Fn(=)958 1467 y Fg(0)958
-1613 y(B)958 1666 y(@)1031 1549 y Fk(\027)5 b Fn(\()1109
-1491 y Fj( )-65 b(\000)1127 1549 y Fk(@)1192 1561 y Fi(1)1230
-1491 y Fj(\000)g(!)1247 1549 y Fk(@)1313 1561 y Fi(1)1368
-1549 y Fn(+)1451 1491 y Fj( )g(\000)1469 1549 y Fk(@)1534
-1561 y Fi(2)1572 1491 y Fj(\000)g(!)1589 1549 y Fk(@)1655
-1561 y Fi(2)1692 1549 y Fn(\))409 b(0)g Fj(\000)2649
-1491 y( )-65 b(\000)2665 1549 y Fk(@)2731 1561 y Fi(1)1357
-1667 y Fn(0)408 b Fk(\027)5 b Fn(\()1885 1609 y Fj( )-65
-b(\000)1903 1667 y Fk(@)1969 1679 y Fi(1)2006 1609 y
-Fj(\000)g(!)2023 1667 y Fk(@)2089 1679 y Fi(1)2145 1667
-y Fn(+)2228 1609 y Fj( )g(\000)2245 1667 y Fk(@)2311
-1679 y Fi(2)2348 1609 y Fj(\000)g(!)2365 1667 y Fk(@)2431
-1679 y Fi(2)2468 1667 y Fn(\))84 b Fj(\000)2649 1609
-y( )-65 b(\000)2665 1667 y Fk(@)2731 1679 y Fi(2)1317
-1727 y Fj(\000)g(!)1335 1785 y Fk(@)1400 1797 y Fi(1)2094
-1727 y Fj(\000)g(!)2111 1785 y Fk(@)2177 1797 y Fi(2)2655
-1785 y Fn(0)2769 1467 y Fg(1)2769 1613 y(C)2769 1666
-y(A)2855 1658 y Fk(:)330 1936 y Fn(Again,)22 b(it)g(is)g(clear)e(from)h
-(this)h(form)f(that)h(w)n(e)f(could)g(ha)n(v)n(e)f(made)i(the)g(op)r
-(erator)d(symmetric)i(b)n(y)330 2035 y(m)n(ultiplying)i(the)g(last)g
-(ro)n(w)f(b)n(y)g Fj(\000)p Fn(1.)35 b(Note)23 b(when)g(c)n(hec)n(king)
-e(the)j(symmetry)e(of)h Fk(Q)g Fn(that)g(taking)330 2135
-y(the)j(transp)r(ose)e(of)h(suc)n(h)h(an)f(op)r(erator)e(means)i(rev)n
-(erting)f(the)i(directions)f(of)g(the)h(arro)n(ws)d(o)n(v)n(er)330
-2235 y(the)k(op)r(erators,)e(and)i(exc)n(hanging)e(their)i(order.)36
-b(F)-7 b(or)26 b(example,)g(using)h(the)g(\014rst)g(term,)g(these)330
-2347 y(t)n(w)n(o)g(steps)g(are)834 2290 y Fj( )-65 b(\000)851
-2347 y Fk(@)917 2359 y Fi(1)954 2290 y Fj(\000)g(!)971
-2347 y Fk(@)1037 2359 y Fi(1)1097 2347 y Fj(!)1204 2290
-y(\000)g(!)1221 2347 y Fk(@)1287 2359 y Fi(1)1324 2290
-y Fj( )g(\000)1341 2347 y Fk(@)1407 2359 y Fi(1)1467
-2347 y Fj(!)1573 2290 y( )g(\000)1590 2347 y Fk(@)1656
-2359 y Fi(1)1694 2290 y Fj(\000)g(!)1711 2347 y Fk(@)1777
-2359 y Fi(1)1814 2347 y Fn(.)330 2617 y Fo(5)135 b(Assem)l(bling)37
-b(v)l(ector-v)-7 b(alued)38 b(problems:)57 b(The)36 b(simple)532
-2766 y(case)330 2948 y Fn(The)j(simple)g(case)f(in)h(assem)n(bling)e(v)
-n(ector-v)-5 b(alued)37 b(problems)h(is)h(when)g(the)g(\(also)f(v)n
-(ector-)330 3048 y(v)-5 b(alued\))31 b(shap)r(e)g(functions)g(are)e(c)n
-(hosen)h(suc)n(h)h(that)g(only)f(one)g(comp)r(onen)n(t)h(in)g(the)g(v)n
-(ector)e(is)330 3148 y(nonzero.)38 b(This)29 b(is)f(usually)h(the)f
-(case,)g(if)i(w)n(e)e(c)n(ho)r(ose)f(the)i(shap)r(e)f(functions)h(to)g
-(b)r(e)g(the)g(outer)330 3247 y(pro)r(duct)34 b(of)g(scalar)e(shap)r(e)
-i(functions,)i(suc)n(h)d(as)g(indep)r(enden)n(t)i(bilinear)f(ansatz)f
-(spaces)g(for)330 3347 y(eac)n(h)27 b(comp)r(onen)n(t)g(of)h(a)f
-(\014nite)h(elemen)n(t)g(space.)455 3446 y(In)f(this)h(case,)f(eac)n(h)
-g(shap)r(e)g(function)h(\010)1724 3458 y Fh(i)1780 3446
-y Fn(has)f(the)h(represen)n(tation)1194 3601 y(\010)1254
-3613 y Fh(i)1281 3601 y Fn(\()p Fa(x)p Fn(\))c(=)f(\(0)p
-Fk(;)14 b(:)g(:)g(:)f(;)h Fn(0)p Fk(;)g(')1898 3613 y
-Fh(i)1926 3601 y Fn(\()p Fa(x)p Fn(\))p Fk(;)g Fn(0)p
-Fk(;)g(:)g(:)g(:)f(;)h Fn(0\))2377 3559 y Fh(T)2443 3601
-y Fk(;)330 3756 y Fn(where)27 b(\010)630 3768 y Fh(i)686
-3756 y Fn(is)g(the)h(v)n(ector-v)-5 b(alued)26 b(shap)r(e)i(function,)g
-(and)f Fk(')2219 3768 y Fh(i)2275 3756 y Fn(its)h(only)f(non-zero)f
-(comp)r(onen)n(t.)330 3856 y(Let)34 b(us)f(denote)g(b)n(y)h
-Fk(c)p Fn(\()p Fk(i)p Fn(\))f(the)h(index)g(of)f(this)h(non-zero)d
-(comp)r(onen)n(t,)k(then)f(\010)2853 3868 y Fh(i)2914
-3856 y Fn(can)f(also)g(b)r(e)330 3955 y(written)28 b(as)1425
-4110 y(\(\010)1517 4122 y Fh(i)1545 4110 y Fn(\()p Fa(x)p
-Fn(\)\))1692 4135 y Fh(l)1740 4110 y Fn(=)23 b Fk(')1882
-4122 y Fh(i)1910 4110 y Fn(\()p Fa(x)p Fn(\))p Fk(\016)2061
-4125 y Fh(c)p Fi(\()p Fh(i)p Fi(\))p Fh(;l)2212 4110
-y Fk(;)330 4265 y Fn(with)28 b(the)g(Kronec)n(k)n(er)d(delta)i
-(function)i Fk(\016)1627 4277 y Fh(j)s(k)1698 4265 y
-Fn(.)455 4365 y(With)f(this)g(simple)g(form,)f(the)h(cell)g(matrix)f
-(on)g(cell)h Fk(K)33 b Fn(has)27 b(a)g(simple)h(form:)751
-4519 y Fk(A)813 4485 y Fh(K)813 4540 y(ij)900 4519 y
-Fn(=)22 b Fk(a)1031 4531 y Fh(K)1095 4519 y Fn(\(\010)1187
-4531 y Fh(i)1215 4519 y Fk(;)14 b Fn(\010)1312 4531 y
-Fh(j)1347 4519 y Fn(\))23 b(=)g(\(\010)1582 4531 y Fh(i)1633
-4519 y Fj(j)g Fk(Q)g Fj(j)g Fn(\010)1874 4531 y Fh(j)1909
-4519 y Fn(\))1941 4547 y Fh(K)2028 4519 y Fn(=)2116 4452
-y Fg(\000)2154 4519 y Fk(')2208 4531 y Fh(i)2259 4519
-y Fj(j)g Fk(Q)2371 4534 y Fh(c)p Fi(\()p Fh(i)p Fi(\))p
-Fh(;c)p Fi(\()p Fh(j)s Fi(\))2635 4519 y Fj(j)g Fk(')2735
-4531 y Fh(j)2771 4452 y Fg(\001)2809 4553 y Fh(K)2886
-4519 y Fk(:)330 4674 y Fn(Th)n(us,)35 b(in)e(assem)n(bling)f(the)i(lo)r
-(cal)f(cell)g(matrices,)h(w)n(e)f(only)g(ha)n(v)n(e)f(to)h(determine)h
-(the)g(single)330 4774 y(comp)r(onen)n(ts)d(in)h(whic)n(h)g(the)g(t)n
-(w)n(o)f(shap)r(e)h(functions)g(are)e(non-zero,)i(and)f(pic)n(k)h(one)f
-(elemen)n(t)330 4873 y(from)h(the)g(matrix)g Fk(Q)f Fn(to)h(assem)n
-(ble)f(eac)n(h)g(en)n(try)h(of)g(the)g(cell)g(matrix)g(with)g(the)g
-(help)h(of)f(the)330 4973 y(v)-5 b(alues)29 b(of)f(the)i(functions)f
-Fk(')1232 4985 y Fh(i)1289 4973 y Fn(at)g(the)g(quadrature)e(p)r(oin)n
-(ts.)41 b(Here,)29 b(it)g(comes)g(handy)f(that)h(w)n(e)330
-5073 y(ha)n(v)n(e)k(written)i(the)f(op)r(erator)f(as)h(a)g(matrix)g(op)
-r(erator)e Fk(Q)p Fn(,)k(since)e(this)h(mak)n(es)e(it)i(v)n(ery)e
-(clear)330 5172 y(ho)n(w)27 b(shap)r(e)g(functions)h
-Fk(i)f Fn(and)g Fk(j)32 b Fn(couple:)37 b(if)28 b Fk(Q)1810
-5187 y Fh(c)p Fi(\()p Fh(i)p Fi(\))p Fh(;c)p Fi(\()p
-Fh(j)s Fi(\))2078 5172 y Fn(is)g(zero,)e(then)i(they)g(do)f(not)g
-(couple)g(at)330 5272 y(all)j(for)g(this)h(op)r(erator.)45
-b(Otherwise,)30 b(it)h(is)g(easily)f(visible)g(whic)n(h)h(deriv)-5
-b(ativ)n(e)30 b(acts)g(on)g(whic)n(h)330 5372 y(shap)r(e)d(function)i
-(for)e(this)h(com)n(bination)e(of)i(shap)r(e)f(functions.)455
-5471 y(In)21 b Fm(deal.II)p Fn(,)d(these)j(t)n(w)n(o)g(actions)f(men)n
-(tioned)h(ab)r(o)n(v)n(e)f(\(getting)h(the)h(non-zero)d(comp)r(onen)n
-(t)330 5571 y(of)29 b(a)f(shap)r(e)h(function,)h(and)f(the)g(v)-5
-b(alue)29 b(of)g(this)g(comp)r(onen)n(t)g(at)g(a)f(giv)n(en)g
-(quadrature)g(p)r(oin)n(t\))330 5670 y(are)f(done)g(as)g(follo)n(ws:)
-1809 5919 y(7)p eop
-%%Page: 8 8
-8 7 bop 455 390 a Fj(\017)41 b Fl(Determining)27 b(the)g(non-zer)l(o)f
-(c)l(omp)l(onent:)41 b Fn(Giv)n(en)25 b(the)g(shap)r(e)f(function)h
-(with)g(n)n(um)n(b)r(er)538 490 y Fk(i)30 b Fn(\(i.e.)48
-b(its)31 b(index)g(lo)r(cal)f(to)h(the)h(degrees)d(of)i(freedom)g(on)f
-(the)i(presen)n(t)e(cell\),)i(its)f(only)538 589 y(non-zero)25
-b(comp)r(onen)n(t)j(is)f(obtained)h(b)n(y)f(the)h(function)g(call)625
-789 y Fm(const)41 b(unsigned)g(int)h(nonzero_componen)o(t_)o(i)755
-888 y(=)i(fe.system_to_co)o(mpo)o(ne)o(nt_)o(in)o(de)o(x\(i)o(\).)o
-(fir)o(st)o(;)538 1088 y Fn(The)20 b Fm(FiniteElement::sy)o(st)o(em)p
-1628 1088 27 4 v 25 w(to)p 1741 1088 V 31 w(component)p
-2168 1088 V 27 w(index)f Fn(returns)h(a)g(pair)g(of)h(n)n(um)n(b)r(ers)
-538 1187 y(for)38 b(eac)n(h)g(index)h(0)i Fj(\024)g Fk(i)h(<)f(N)1542
-1199 y Fh(K)1606 1187 y Fn(,)g(the)f(\014rst)e(of)h(whic)n(h)g(denotes)
-f(the)h(only)g(non-zero)538 1287 y(comp)r(onen)n(t)21
-b(of)g(the)g(shap)r(e)h(function)f Fk(i)p Fn(.)35 b(Since)21
-b(for)g(the)h(case)e(describ)r(ed)h(in)h(this)f(section,)538
-1386 y(the)f(individual)g(comp)r(onen)n(ts)g(of)g(the)g(v)n(ector-v)-5
-b(alued)18 b(\014nite)j(elemen)n(t)f(are)f(indep)r(enden)n(t,)538
-1486 y(w)n(e)35 b(consider)g(eac)n(h)h(comp)r(onen)n(t)g(as)f(a)h(set)g
-(of)g(scalar)e(shap)r(e)i(functions;)41 b(the)c(second)538
-1586 y(n)n(um)n(b)r(er)d(of)h(the)g(pair)g(returned)f(b)n(y)h(the)g
-(function)g(then)h(denotes)f(the)g(index)g(of)g(the)538
-1685 y(shap)r(e)18 b(function)i Fk(')1133 1697 y Fh(i)1180
-1685 y Fn(within)g(the)f(shap)r(e)g(functions)h(corresp)r(onding)d(to)i
-(this)g(comp)r(onen)n(t.)538 1818 y(If,)40 b(for)e(example,)i(our)d
-(\014nite)h(elemen)n(t)g(in)g(use)g(is)f(a)h Fk(Q)2352
-1788 y Fi(2)2389 1818 y Fk(=Q)2497 1788 y Fi(2)2533 1818
-y Fk(=Q)2641 1788 y Fi(1)2715 1818 y Fn(com)n(bination)f(\(for)538
-1918 y(example)30 b(for)h(2d)g(\015o)n(w)g(computations:)44
-b(bi-quadratic)30 b(ansatz)h(functions)g(for)g(the)h(v)n(e-)538
-2017 y(lo)r(cities,)25 b(bi-linear)g(for)g(the)h(pressure\),)f(then)h
-(w)n(e)f(ha)n(v)n(e)f(a)h(total)g(of)h(22)e(shap)r(e)i(functions)538
-2117 y(\(9+9+4\).)34 b(F)-7 b(or)25 b(eac)n(h)f(0)f Fj(\024)g
-Fk(i)f(<)h Fn(22,)i(the)g(\014rst)h(part)e(of)i(the)f(pair)g(returned)g
-(b)n(y)g(the)h(func-)538 2217 y(tion)31 b(describ)r(ed)f(ab)r(o)n(v)n
-(e,)h Fk(c)p Fn(\()p Fk(i)p Fn(\),)h(ma)n(y)e(then)i(either)e(b)r(e)i
-(0,)f(1,)h(or)e(2,)h(denoting)g(the)g(three)538 2316
-y(p)r(ossible)i(comp)r(onen)n(ts)h(of)g(the)h(\014nite)g(elemen)n(t.)57
-b(If)35 b Fk(c)p Fn(\()p Fk(i)p Fn(\))f(is)g(either)g(0)g(or)f(1,)j
-(then)f(the)538 2416 y(comp)r(onen)n(t)30 b(to)h(whic)n(h)g(the)h(shap)
-r(e)f(function)h Fk(i)e Fn(b)r(elongs)h(is)g(a)g(bi-quadratic)f(one,)h
-(and)538 2516 y(the)24 b(second)f(index)i(is)f(b)r(et)n(w)n(een)g(0)f
-(and)h(8)g(\(inclusiv)n(e\))g(as)f(the)i Fk(Q)2550 2485
-y Fi(2)2611 2516 y Fn(elemen)n(t)f(has)g(9)f(shap)r(e)538
-2615 y(functions.)37 b(If)28 b Fk(c)p Fn(\()p Fk(i)p
-Fn(\))23 b(==)f(2,)27 b(then)i(the)e(second)g(part)h(is)f(b)r(et)n(w)n
-(een)h(0)f(and)g(3)g(\(inclusiv)n(e\).)455 2781 y Fj(\017)41
-b Fl(Getting)f(the)g(value)h(of)f Fk(')1380 2793 y Fh(i)1408
-2781 y Fn(\()p Fa(x)1490 2793 y Fh(q)1528 2781 y Fn(\))p
-Fl(:)65 b Fn(Since)39 b(only)f(one)h(comp)r(onen)n(t)g(of)f(\010)2836
-2793 y Fh(i)2903 2781 y Fn(is)h(non-zero,)538 2881 y(w)n(e)30
-b(can)h(use)f(the)i(same)e(function)h(as)g(b)r(efore,)g(i.e.)47
-b Fm(FEValues::shape)p 2851 2881 V 25 w(value\(i,q\))p
-Fn(,)538 2980 y(whic)n(h)36 b(in)h(the)g(scalar)e(case)h(returned)h
-(the)g(v)-5 b(alue)36 b(of)h(shap)r(e)f(function)i Fk(i)e
-Fn(at)h(quadra-)538 3080 y(ture)23 b(p)r(oin)n(t)g Fk(q)s
-Fn(.)35 b(Lik)n(ewise,)24 b(the)f Fm(FEValues::shape)p
-2176 3080 V 25 w(grad\(i,q\))d Fn(function)j(returns)g(the)538
-3180 y(gradien)n(t)j(of)i(this)f(particular)g(comp)r(onen)n(t.)538
-3313 y(In)h(other)f(w)n(ords,)g(whether)h(the)h(\014nite)f(elemen)n(t)g
-(is)g(scalar)f(or)g(not,)h(the)h(t)n(w)n(o)e(indicated)538
-3412 y(functions)22 b(return)f(v)-5 b(alue)21 b(and)h(gradien)n(t)e(of)
-i(the)g(only)f(non-zero)f(comp)r(onen)n(t)h(of)h(a)f(shap)r(e)538
-3512 y(function.)36 b(If)23 b(the)h(\014nite)f(elemen)n(t)h(is)f
-(scalar,)f(then)i(it)f(is)h(of)f(course)f(clear)g(whic)n(h)h(comp)r(o-)
-538 3611 y(nen)n(t)k(this)g(is)f(\(since)h(there)g Fk(c)p
-Fn(\()p Fk(i)p Fn(\))c(==)f(0)k(for)h(all)f(v)-5 b(alid)27
-b(indices)g Fk(i)p Fn(\),)g(in)g(the)g(v)n(ector-v)-5
-b(alued)538 3711 y(case,)26 b(it)i(is)g(comp)r(onen)n(t)f
-Fk(c)p Fn(\()p Fk(i)p Fn(\).)330 3943 y Fb(5.1)112 b(The)38
-b(elastic)g(equations)330 4097 y Fn(With)29 b(this,)g(and)g(the)f
-(de\014nition)h(of)g(the)f(\\bi-directional")f(op)r(erator)g
-Fk(Q)h Fn(in)g(Section)h(4.1,)f(the)330 4196 y(lo)r(cal)d(matrix)g
-(assem)n(bly)f(function)j(for)e(the)g(elastic)h(equations)e(w)n(ould)h
-(then)h(read)f(as)g(follo)n(ws:)417 4362 y Fm(for)43
-b(\(unsigned)c(int)k(i=0;)f(i<fe.dofs_per_c)o(ell)o(;)37
-b(++i\))504 4462 y(for)43 b(\(unsigned)d(int)i(j=0;)g(j<fe.dofs_per_ce)
-o(ll)o(;)c(++j\))592 4562 y(for)k(\(unsigned)e(int)i(q=0;)g
-(q<n_q_points;)c(++q\))679 4661 y({)766 4761 y(const)j(unsigned)g(int)
-853 4861 y(comp_i)g(=)i(fe.system_to_comp)o(on)o(ent)o(_i)o(nde)o(x\()o
-(i\))o(.fi)o(rs)o(t,)853 4960 y(comp_j)e(=)i(fe.system_to_comp)o(on)o
-(ent)o(_i)o(nde)o(x\()o(j\))o(.fi)o(rs)o(t;)1507 5159
-y(//)g(first)e(assemble)f(part)i(with)g(lambda+mu)766
-5259 y(cell_matrix\(i,j\))37 b(+=)43 b(\(\(lambda+mu\))997
-b(*)1681 5359 y(fe_values.shape_g)o(ra)o(d\()o(i,q)o(\)[)o(com)o(p_)o
-(i])37 b(*)1681 5458 y(fe_values.shape_g)o(ra)o(d\()o(j,q)o(\)[)o(com)o
-(p_)o(j])g(*)1681 5558 y(fe_values.JxW\(q\)\))o(;)1809
-5919 y Fn(8)p eop
-%%Page: 9 9
-9 8 bop 1507 390 a Fm(//)43 b(then)f(part)f(with)h(mu)h(only)766
-490 y(if)g(\(comp_i)d(==)j(comp_j\))853 589 y(cell_matrix\(i,j\))37
-b(+=)43 b(\(mu)1175 b(*)1768 689 y(\(fe_values.shape_)o(gr)o(ad\()o(i,)
-o(q\))37 b(*)1812 789 y(fe_values.shape_)o(gr)o(ad\()o(j,)o(q\))81
-b(\)*)1768 888 y(fe_values.JxW\(q\)\))o(;)679 988 y(};)330
-1154 y Fn(Note)27 b(that)h(this)g(co)r(de)f(w)n(orks)e(in)j(an)n(y)e
-(space)h(dimension,)g(not)h(only)e(for)h Fm(dim==2)p
-Fn(.)35 b(Optimiza-)330 1254 y(tion)25 b(of)g(this)g(is)g(p)r(ossible)g
-(b)n(y)g(hoisting)f(the)i(computation)f(of)31 b Fm(comp)p
-2466 1254 27 4 v 30 w(i)24 b Fn(and)h Fm(comp)p 2899
-1254 V 30 w(j)p Fn(,)g(denoting)330 1353 y Fk(c)p Fn(\()p
-Fk(i)p Fn(\))k(and)h Fk(c)p Fn(\()p Fk(j)5 b Fn(\),)30
-b(resp)r(ectiv)n(ely)-7 b(,)29 b(out)g(of)g(the)h(inner)f(lo)r(ops.)41
-b(Also,)30 b(if)g(the)f(co)r(e\016cien)n(ts)g(are)g(non-)330
-1453 y(constan)n(t,)35 b(they)e(need)h(to)g(b)r(e)g(computed)g(at)f
-(eac)n(h)g(quadrature)f(p)r(oin)n(t;)37 b(this)d(ma)n(y)f(b)r(e)h(done)
-330 1553 y(using)27 b(this)h(fragmen)n(t)f(in)h(the)g(innermost)f(lo)r
-(op:)417 1719 y Fm(const)42 b(double)504 1818 y(lambda_value)d(=)k
-(lambda.value\(fe_v)o(al)o(ue)o(s.q)o(ua)o(dra)o(tu)o(re)o(_po)o(in)o
-(t\(q)o(\)\))o(,)504 1918 y(mu_value)215 b(=)43 b(mu.value\(fe_value)o
-(s.)o(qu)o(adr)o(at)o(ure)o(_p)o(oi)o(nt\()o(q\))o(\);)330
-2084 y Fn(assuming)27 b(that)h Fm(lambda,mu)23 b Fn(are)k(v)-5
-b(ariables)26 b(of)i(classes)e(describing)h(space)g(dep)r(enden)n(t)h
-(func-)330 2183 y(tions,)f(and)h(whic)n(h)f(are)g(deriv)n(ed)g(from)g
-(the)h Fm(Function<dim>)22 b Fn(class.)330 2416 y Fb(5.2)112
-b(The)38 b(Stok)m(es)g(equations)330 2569 y Fn(F)-7 b(or)27
-b(the)i(Stok)n(es)e(equation,)h(things)f(are)g(sligh)n(tly)h(more)f
-(complicated)h(since)g(the)g(three)g(com-)330 2669 y(p)r(onen)n(ts)23
-b(denote)g(di\013eren)n(t)g(quan)n(tities,)h(and)f(the)g(op)r(erator)f
-Fk(Q)h Fn(do)r(es)f(not)i(ha)n(v)n(e)d(suc)n(h)i(a)g(simple)330
-2768 y(form,)29 b(but)g(the)h(case)e(is)h(still)g(simple)g(enough.)40
-b(W)-7 b(e)29 b(presen)n(t)g(its)g(generalization)e(to)h(an)h(arbi-)330
-2868 y(trary)c(n)n(um)n(b)r(er)g(of)h(space)f(dimensions,)h(i.e.)36
-b(assume)25 b(that)h(there)g(are)f Fm(dim)f Fn(v)n(elo)r(cit)n(y)h(v)-5
-b(ariables)330 2968 y(and)27 b(one)h(scalar)e(pressure:)417
-3134 y Fm(for)43 b(\(unsigned)c(int)k(i=0;)f(i<fe.dofs_per_c)o(ell)o(;)
-37 b(++i\))504 3233 y(for)43 b(\(unsigned)d(int)i(j=0;)g
-(j<fe.dofs_per_ce)o(ll)o(;)c(++j\))592 3333 y(for)k(\(unsigned)e(int)i
-(q=0;)g(q<n_q_points;)c(++q\))679 3433 y({)766 3532 y(const)j(unsigned)
-g(int)853 3632 y(comp_i)g(=)i(fe.system_to_comp)o(on)o(ent)o(_i)o(nde)o
-(x\()o(i\))o(.fi)o(rs)o(t,)853 3731 y(comp_j)e(=)i(fe.system_to_comp)o
-(on)o(ent)o(_i)o(nde)o(x\()o(j\))o(.fi)o(rs)o(t;)1507
-3931 y(//)g(velocity-veloci)o(ty)37 b(coupling?)766 4030
-y(if)43 b(\(\(comp_i<dim\))38 b(&&)43 b(\(comp_j<dim\)\))853
-4130 y(if)g(\(comp_i)d(==)j(comp_j\))940 4230 y(cell_matrix\(i,j\))37
-b(+=)43 b(\(nu)f(*)1856 4329 y(\(fe_values.shap)o(e_)o(gra)o(d\()o(i,q)
-o(\))37 b(*)1899 4429 y(fe_values.shape_)o(gra)o(d\()o(j,q)o(\))81
-b(\))43 b(*)1856 4528 y(fe_values.JxW\(q)o(\)\))o(;)1507
-4728 y(//)g(velocity-pressu)o(re)37 b(coupling)766 4827
-y(if)43 b(\(\(comp_i<dim\))38 b(&&)43 b(\(comp_j==dim\)\))853
-4927 y(cell_matrix\(i,j\))37 b(+=)43 b(\(-fe_values.shap)o(e_)o(gr)o
-(ad\()o(i,)o(q\)[)o(co)o(mp_)o(i])37 b(*)1812 5027 y(fe_values.shape_)o
-(va)o(lue)o(\(j)o(,q\))342 b(*)1768 5126 y(fe_values.JxW\(q\)\))o(;)
-1507 5325 y(//)43 b(pressure-veloci)o(ty)37 b(coupling)766
-5425 y(if)43 b(\(\(comp_i==dim\))37 b(&&)43 b(\(comp_j<dim\)\))853
-5525 y(cell_matrix\(i,j\))37 b(+=)43 b(\(fe_values.shape)o(_v)o(al)o
-(ue\()o(i,)o(q\))37 b(*)1768 5624 y(fe_values.shape_g)o(ra)o(d\(j)o(,q)
-o(\)[c)o(om)o(p_j)o(])g(*)1809 5919 y Fn(9)p eop
-%%Page: 10 10
-10 9 bop 1768 390 a Fm(fe_values.JxW\(q\)\))o(;)679 490
-y(};)330 628 y Fn(Again,)31 b(optimization)f(is)g(p)r(ossible)g(b)n(y)g
-(observing)f(that)h(only)g(one)g(of)g(the)h(outer)f Fm(if)p
-Fn(s)f(in)i(the)330 727 y(b)r(o)r(dy)d(can)f(b)r(e)h(true,)g(for)f
-(example)g(using)h Fm(else)e Fn(clauses,)h(or)g Fm(break)e
-Fn(statemen)n(ts.)330 996 y Fo(6)135 b(Assem)l(bling)58
-b(v)l(ector-v)-7 b(alued)59 b(problems:)86 b(The)57 b(com-)532
-1145 y(plicated)46 b(case)330 1327 y Fn(The)33 b(more)e(complicated)i
-(case)f(is)g(when)h(more)f(than)g(one)h(comp)r(onen)n(t)f(of)h(a)f(v)n
-(ector-v)-5 b(alued)330 1426 y(shap)r(e)27 b(function)i(is)e(non-zero,)
-f(i.e.)37 b(the)28 b(represen)n(tation)1194 1574 y(\010)1254
-1586 y Fh(i)1281 1574 y Fn(\()p Fa(x)p Fn(\))c(=)f(\(0)p
-Fk(;)14 b(:)g(:)g(:)f(;)h Fn(0)p Fk(;)g(')1898 1586 y
-Fh(i)1926 1574 y Fn(\()p Fa(x)p Fn(\))p Fk(;)g Fn(0)p
-Fk(;)g(:)g(:)g(:)f(;)h Fn(0\))2377 1532 y Fh(T)2443 1574
-y Fk(;)330 1721 y Fn(do)r(es)22 b(not)g(hold)g(an)n(y)g(more.)34
-b(The)22 b(usual)g(case)g(where)f(this)i(happ)r(ens)f(is)g(when)h(shap)
-r(e)f(functions)330 1821 y(ha)n(v)n(e)31 b(to)i(satisfy)f(certain)g
-(constrain)n(ts,)g(suc)n(h)g(as)g(that)h(they)g(should)f(ha)n(v)n(e)f
-(zero)h(div)n(ergence)330 1920 y(or)i(curl,)h(or)f(when)g(the)h(normal)
-f(\015uxes)g(at)g(some)g(p)r(oin)n(ts,)i(e.g.)57 b(the)35
-b(face)f(cen)n(ters,)h(are)f(the)330 2020 y(degrees)29
-b(of)h(freedom:)42 b Fa(n)20 b Fj(\001)h Fn(\010)1252
-2032 y Fh(i)1279 2020 y Fn(\()p Fk(x)1358 2032 y Fh(a)1399
-2020 y Fn(\))28 b(=)f Fk(\016)1588 2032 y Fh(ia)1652
-2020 y Fn(.)45 b(In)30 b(this)h(case,)f(the)h(individual)f(comp)r(onen)
-n(ts)g(of)g(a)330 2119 y(shap)r(e)25 b(function)h(are)e(no)h(more)f
-(indep)r(enden)n(t,)j(and)e(th)n(us)g(cannot)g(b)r(e)h(c)n(hosen)e(suc)
-n(h)h(that)g(only)330 2219 y(one)i(comp)r(onen)n(t)h(is)f(non-zero.)455
-2319 y(What)k(happ)r(ens)f(in)h(this)g(case?)45 b(First,)32
-b(the)f(function)g Fm(FiniteElement::sy)o(st)o(em)p 3147
-2319 27 4 v 25 w(to)p 3261 2319 V 30 w(-)330 2418 y(component)p
-731 2418 V 28 w(index)d Fn(do)r(es)j(not)f(mak)n(e)g(m)n(uc)n(h)h
-(sense)f(an)n(y)g(more,)h(since)f(a)h(shap)r(e)f(function)h(\010)3302
-2430 y Fh(i)330 2518 y Fn(cannot)c(b)r(e)g(asso)r(ciated)f(with)i(only)
-f(one)g(v)n(ector)e(comp)r(onen)n(t)i(an)n(y)g(more.)36
-b(Calling)26 b(this)i(func-)330 2618 y(tion)h(for)g(basis)f(functions)i
-(\010)1256 2630 y Fh(i)1312 2618 y Fn(that)g(are)e(not)h(restricted)f
-(to)h(only)g(one)g(non-zero)e(comp)r(onen)n(t)330 2717
-y(will)h(th)n(us)f(yield)h(an)f(exception)h(b)r(eing)f(thro)n(wn.)455
-2817 y(Second,)f(the)h(functions)g Fm(FEValues::shape)p
-1922 2817 V 25 w(value)d Fn(and)j Fm(FEValues::shape)p
-3012 2817 V 25 w(grad)e Fn(re-)330 2916 y(turning)c(the)h(v)-5
-b(alues)21 b(and)g(gradien)n(ts)f(of)h(the)h(only)f(non-zero)f(comp)r
-(onen)n(t)h(of)g(a)g(shap)r(e)h(function)330 3016 y(at)30
-b(a)g(quadrature)f(p)r(oin)n(t)i(cannot)e(w)n(ork)g(an)n(y)h(more,)g
-(since)g(there)g(are)g(no)n(w)f(more)h(than)g(only)330
-3116 y(one)g(non-zero)f(comp)r(onen)n(ts)h(for)g(some)g(or)g(all)g(v)-5
-b(alues)30 b(of)h Fk(i)p Fn(.)45 b(F)-7 b(or)30 b(those)g(shap)r(e)g
-(function)i(for)330 3215 y(whic)n(h)c(this)f(holds,)h(y)n(ou)f(will)g
-(again)g(get)g(an)g(exception)h(up)r(on)g(calling)f(these)g(functions.)
-330 3425 y Fa(Getting)k(information)g(ab)s(out)h(shap)s(e)f(functions)
-330 3578 y Fn(So)22 b(ho)n(w)h(do)f(y)n(ou)g(\014nd)h(out)g(whether)f
-(calling)h(these)f(functions)h(is)g(ok)f(or)g(not?)35
-b(In)23 b(other)f(w)n(ords,)330 3678 y(ho)n(w)36 b(do)g(y)n(ou)g(kno)n
-(w)f(whether)i(shap)r(e)f(function)h(\010)1991 3690 y
-Fh(i)2055 3678 y Fn(has)f(only)g(one)g(non-zero)f(comp)r(onen)n(t,)330
-3778 y(or)i(more?)67 b(F)-7 b(or)37 b(this,)k(there)c(are)g(t)n(w)n(o)g
-(functions:)58 b Fm(FiniteElement::)o(is)p 2787 3778
-V 25 w(primitive\(i\))330 3877 y Fn(returns)34 b(as)f(a)h
-Fm(bool)f Fn(whether)h(the)h(shap)r(e)f(function)h(has)f(only)g(one)g
-(non-zero)e(comp)r(onen)n(t.)330 3977 y(F)-7 b(or)20
-b(example,)h(for)e(a)h Fk(Q)1061 3947 y Fi(2)1098 3977
-y Fk(=Q)1206 3947 y Fi(2)1242 3977 y Fk(=Q)1350 3947
-y Fi(1)1407 3977 y Fn(elemen)n(t,)i(this)e(w)n(ould)g(b)r(e)g
-Fm(true)f Fn(for)h(all)g(22)f(shap)r(e)h(functions.)330
-4076 y(F)-7 b(or)32 b(a)h(\014nite)h(elemen)n(t)f(for)g(whic)n(h)g(ev)n
-(ery)f(shap)r(e)g(function)i(is)f(non-zero)f(in)h(more)f(than)h(one)330
-4176 y(comp)r(onen)n(t,)26 b(it)f(w)n(ould)g(b)r(e)h
-Fm(false)e Fn(for)g(all)i(indices)f Fk(i)p Fn(.)36 b(It)26
-b(migh)n(t)f(also)f(b)r(e)i Fm(true)e Fn(for)h(only)g(some)330
-4276 y(shap)r(e)g(functions,)g(for)f(example)h(if)g(the)g(v)n(elo)r
-(cit)n(y)f(comp)r(onen)n(ts)g(of)h(the)g(Stok)n(es)f(discretization)330
-4375 y(are)30 b(done)g(using)g(some)g(more)g(complicated)g(elemen)n(t,)
-i(but)f(the)g(pressure)e(comp)r(onen)n(t)i(with)330 4475
-y(a)25 b Fk(Q)463 4445 y Fi(1)500 4475 y Fn(,)i(then)f(it)g(w)n(ould)g
-(b)r(e)g Fm(true)e Fn(for)i(the)g(pressure)e(shap)r(e)i(functions,)h
-(but)f Fm(false)e Fn(otherwise.)455 4575 y(Second,)48
-b(the)c Fm(FiniteElement::n)p 1648 4575 V 25 w(nonzero)p
-1981 4575 V 29 w(components\(i\))39 b Fn(function)44
-b(returns)g(in)330 4674 y(ho)n(w)21 b(man)n(y)f(comp)r(onen)n(ts)h(the)
-g Fk(i)p Fn(th)g(shap)r(e)g(function)h(is)f(non-zero.)33
-b(Again,)22 b(for)f(the)g Fk(Q)3004 4644 y Fi(2)3041
-4674 y Fk(=Q)3149 4644 y Fi(2)3186 4674 y Fk(=Q)3294
-4644 y Fi(1)330 4774 y Fn(com)n(bination,)27 b(this)g(w)n(ould)g(yield)
-g(the)h(v)-5 b(alue)27 b(1)g(for)g(all)g(allo)n(w)n(ed)f(indices)h
-Fk(i)p Fn(.)37 b(F)-7 b(or)26 b(coupled)h(ele-)330 4873
-y(men)n(ts,)h(it)g(w)n(ould)f(b)r(e)h(greater)e(than)h(1.)455
-4973 y(Third,)h(y)n(ou)g(ma)n(y)g(sometimes)h(w)n(an)n(t)f(to)g(kno)n
-(w)g(in)h(whic)n(h)g(comp)r(onen)n(ts)f(a)g(certain)g(shap)r(e)330
-5073 y(function)j(is)g(non-zero.)45 b(F)-7 b(or)30 b(this,)i(the)f
-Fm(FiniteElement::g)o(et)p 2407 5073 V 25 w(nonzero)p
-2740 5073 V 28 w(components\(i\))330 5172 y Fn(function)38
-b(is)f(the)h(righ)n(t)e(thing:)56 b(it)38 b(returns)f(a)f(reference)h
-(to)g(a)g(v)n(ector)f(of)h(b)r(o)r(olean)f(v)-5 b(alues,)330
-5272 y(one)26 b(for)f(eac)n(h)h(comp)r(onen)n(t)g(of)g(the)g(v)n
-(ector-v)-5 b(alued)25 b(\014nite)h(elemen)n(t,)h(and)f(the)g(v)-5
-b(alues)26 b(indicate)330 5372 y(whether)h(the)h(shap)r(e)g(function)g
-(is)g(non-zero)d(for)j(eac)n(h)e(of)i(them.)455 5471
-y(Note)18 b(that)h(if)f(y)n(ou)g(ha)n(v)n(e)f(the)i(result)f(of)25
-b Fm(FiniteElement::g)o(et)p 2456 5471 V 25 w(nonzero)p
-2790 5471 V 28 w(components\(i\))p Fn(,)330 5571 y(then)j(the)f(result)
-g(of)34 b Fm(FiniteElement::n)p 1701 5571 V 25 w(nonzero)p
-2035 5571 V 28 w(components\(i\))22 b Fn(is)27 b(simply)h(the)f(n)n
-(um-)330 5670 y(b)r(er)34 b(of)41 b Fm(true)32 b Fn(v)-5
-b(alues)34 b(in)g(the)h(arra)n(y)d(returned)h(b)n(y)h(the)h(\014rst)f
-(function.)57 b(In)34 b(the)h(same)e(w)n(a)n(y)-7 b(,)1788
-5919 y(10)p eop
-%%Page: 11 11
-11 10 bop 330 390 a Fm(FiniteElement::i)o(s)p 1082 390
-27 4 v 25 w(primitive\(i\))14 b Fn(is)k(simply)h(whether)f
-Fm(FiniteElement::n)p 2992 390 V 25 w(nonzero)p 3326
-390 V 28 w(-)330 490 y(components\(i\))g Fn(returned)23
-b(a)h(v)-5 b(alue)23 b(other)g(than)h(1.)35 b(The)24
-b(functions)f(are)g(th)n(us)h(redundan)n(t)f(in)330 589
-y(some)k(w)n(a)n(y)-7 b(,)27 b(but)h(useful)g(nev)n(ertheless.)37
-b(Of)27 b(course,)g(the)h(v)-5 b(alues)28 b(of)f(the)i
-Fm(FiniteElement::)o(-)330 689 y(is)p 423 689 V 31 w(primitive\(i\))j
-Fn(and)38 b Fm(FiniteElement::n)p 1890 689 V 25 w(nonzero)p
-2223 689 V 28 w(components\(i\))33 b Fn(functions)38
-b(are)330 789 y(not)g(recomputed)g(ev)n(ery)f(time)i(based)e(on)h(the)h
-(result)f(of)g(some)f(other)h(function,)j(but)e(are)330
-888 y(cac)n(hed)27 b(once)g(at)g(the)h(time)g(of)g(construction)f(of)g
-(a)h(\014nite)g(elemen)n(t)f(ob)5 b(ject.)330 1103 y
-Fa(Ev)-5 b(aluating)31 b(shap)s(e)h(functions)330 1256
-y Fn(No)n(w,)d(w)n(e)g(ha)n(v)n(e)f(seen)h(whic)n(h)g(functions)g
-(cannot)g(b)r(e)g(called)g(for)g(non-primitiv)n(e)f(shap)r(e)h(func-)
-330 1356 y(tions,)21 b(and)f(also)f(ho)n(w)h(to)g(\014nd)g(out)g(ab)r
-(out)g(shap)r(e)g(functions)g(and)g(whether)g(they)g(are)f(primitiv)n
-(e)330 1455 y(and)g(the)g(lik)n(e.)34 b(Y)-7 b(et,)21
-b(w)n(e)d(don't)h(ha)n(v)n(e)f(replacemen)n(ts)g(for)g(the)h(functions)
-h(that)f(cannot)f(b)r(e)h(called,)330 1555 y(so)27 b(here)g(they)g
-(are:)36 b(instead)27 b(of)34 b Fm(FEValues::shape)p
-2021 1555 V 25 w(value)25 b Fn(and)i Fm(FEValues::shape)p
-3112 1555 V 26 w(grad)p Fn(,)330 1655 y(call)36 b Fm(FEValues::shape)p
-1156 1655 V 25 w(value)p 1401 1655 V 29 w(component)d
-Fn(and)j Fm(FEValues::shape)p 2689 1655 V 25 w(grad)p
-2890 1655 V 30 w(component)p Fn(.)330 1754 y(These)26
-b(functions)h(tak)n(e)e(as)h(argumen)n(ts)f(\014rst)h(the)h(n)n(um)n(b)
-r(er)f(of)g(the)h(shap)r(e)f(function,)i(and)e(sec-)330
-1854 y(ond)21 b(the)g(n)n(um)n(b)r(er)f(of)h(the)g(quadrature)f(p)r
-(oin)n(t)h(\(these)g(are)e(also)h(the)h(argumen)n(ts)f(of)g(the)i
-(original)330 1953 y(functions\),)28 b(but)g(no)n(w)f(as)g(additional)g
-(third)h(argumen)n(t)f(the)h(v)n(ector)e(comp)r(onen)n(t.)455
-2053 y(Of)f(course,)f(these)h(functions)g(can)g(b)r(e)g(called)g(on)g
-(primitiv)n(e)g(shap)r(e)f(functions)i(as)e(w)n(ell.)36
-b(In)330 2153 y(that)28 b(case,)f(the)h(follo)n(wing)e(holds:)455
-2313 y Fj(\017)41 b Fn(The)18 b(v)-5 b(alue)18 b(of)25
-b Fm(FEValues::shape)p 1661 2313 V 25 w(value)p 1906
-2313 V 30 w(component\(i,q,c)o(\))12 b Fn(is)19 b(equal)e(to)i
-Fm(FEValues::-)538 2412 y(shape)p 763 2412 V 29 w(value\(i,q\))g
-Fn(if)24 b(and)g(only)f(if)h(the)g(comp)r(onen)n(t)f
-Fm(c)g Fn(is)h(equal)f(to)g Fm(fe.system)p 3145 2412
-V 28 w(to)p 3261 2412 V 30 w(-)538 2512 y(component)p
-939 2512 V 27 w(index\(i\).first)p Fn(,)i(i.e.)45 b(if)37
-b Fm(c)30 b Fn(is)g(the)g(only)g(non-zero)f(comp)r(onen)n(t)h(of)g(the)
-538 2611 y(shap)r(e)d(function)h Fm(i)p Fn(.)455 2774
-y Fj(\017)41 b Fn(F)-7 b(or)25 b(all)h(other)f(comp)r(onen)n(ts)h
-Fm(c)p Fn(,)g(the)g(returned)g(v)-5 b(alue)26 b(of)32
-b Fm(FEValues::shape)p 3017 2774 V 25 w(value)p 3262
-2774 V 29 w(-)538 2874 y(component\(i,q,c)o(\))22 b Fn(is)27
-b(zero.)330 3034 y(The)i(same)g(of)g(course)f(also)g(holds)g(for)h
-Fm(FEValues::shape)p 2244 3034 V 25 w(grad)p 2445 3034
-V 30 w(component\(i,q,c)o(\))23 b Fn(and)330 3134 y Fm(FEValues::shape)
-p 995 3134 V 25 w(2nd)p 1152 3134 V 30 w(derivative)p
-1622 3134 V 28 w(component\(i,q,c)o(\))p Fn(.)330 3365
-y Fb(6.1)112 b(The)38 b(elastic)g(equations)330 3518
-y Fn(With)27 b(the)f(ab)r(o)n(v)n(e,)f(w)n(e)h(can)f(no)n(w)g(assem)n
-(ble)g(the)h(matrix)g(for)f(the)h(elastic)g(equation)f(in)h(mostly)330
-3618 y(the)i(same)g(w)n(a)n(y)f(as)g(b)r(efore.)38 b(The)29
-b(di\013erence)f(is)g(that)g(for)g(eac)n(h)f(shap)r(e)h(function,)h(w)n
-(e)e(ha)n(v)n(e)g(to)330 3717 y(lo)r(op)e(o)n(v)n(er)f(all)i(comp)r
-(onen)n(ts.)35 b(The)26 b(co)r(de)f(then)i(lo)r(oks)d(lik)n(e)i(this)g
-(\(compare)e(this)i(with)g(the)g(one)330 3817 y(in)i(Section)f(5.1\):)
-417 3977 y Fm(for)43 b(\(unsigned)c(int)k(i=0;)f(i<fe.dofs_per_c)o(ell)
-o(;)37 b(++i\))461 4076 y(for)42 b(\(unsigned)e(int)i(comp_i=0;)e
-(comp_i<fe.n_compo)o(ne)o(nt)o(s\(\))o(;)d(++comp_i\))504
-4176 y(for)43 b(\(unsigned)d(int)i(j=0;)g(j<fe.dofs_per_ce)o(ll)o(;)c
-(++j\))548 4276 y(for)k(\(unsigned)e(int)i(comp_j=0;)e
-(comp_j<fe.n_compo)o(ne)o(nts)o(\(\))o(;)e(++comp_j\))592
-4375 y(for)k(\(unsigned)e(int)i(q=0;)g(q<n_q_points;)c(++q\))679
-4475 y({)1332 4575 y(//)43 b(first)f(assemble)e(part)i(with)g
-(lambda+mu)766 4674 y(cell_matrix\(i,j\))897 4774 y(+=)g
-(\(\(lambda+mu\))998 b(*)1071 4873 y(fe_values.shape_)o(gra)o(d_)o(co)o
-(mpo)o(ne)o(nt\()o(i,)o(q,)o(com)o(p_)o(i\)[)o(co)o(mp_)o(i])37
-b(*)1071 4973 y(fe_values.shape_)o(gra)o(d_)o(co)o(mpo)o(ne)o(nt\()o
-(j,)o(q,)o(com)o(p_)o(j\)[)o(co)o(mp_)o(j])g(*)1071 5073
-y(fe_values.JxW\(q\))o(\);)1332 5272 y(//)43 b(then)f(part)g(with)g(mu)
-h(only)766 5372 y(if)g(\(comp_i)d(==)j(comp_j\))853 5471
-y(cell_matrix\(i,j\))940 5571 y(+=)g(\(mu)1176 b(*)1115
-5670 y(\(fe_values.shap)o(e_g)o(ra)o(d_)o(com)o(po)o(nen)o(t\()o(i,)o
-(q,c)o(om)o(p_i)o(\))37 b(*)1788 5919 y Fn(11)p eop
-%%Page: 12 12
-12 11 bop 1158 390 a Fm(fe_values.shape_g)o(ra)o(d_)o(com)o(po)o(nen)o
-(t\()o(j,)o(q,c)o(om)o(p_j)o(\))81 b(\)*)1158 490 y
-(fe_values.JxW\(q\)\))o(;)679 589 y(};)330 756 y Fn(If)32
-b(y)n(ou)e(dislik)n(e)h(this)g(particular)f(order)g(of)h(the)g(lo)r
-(ops,)h(y)n(ou)e(can)h(reorder)e(them)j(as)e(y)n(ou)g(lik)n(e,)330
-855 y(as)d(they)h(are)e(indep)r(enden)n(t.)455 955 y(The)19
-b(co)r(de)g(as)g(sho)n(wn)g(ab)r(o)n(v)n(e)f(can)h(b)r(e)h(optimized.)
-34 b(F)-7 b(or)19 b(example,)i(instead)e(of)g(uncondition-)330
-1054 y(ally)i(p)r(erforming)g(the)h(lo)r(op)f(o)n(v)n(er)f(all)h(comp)r
-(onen)n(ts)g(of)h(shap)r(e)f(functions)h Fk(i)f Fn(of)h
-Fk(j)5 b Fn(,)23 b(w)n(e)e(migh)n(t)g(\014rst)330 1154
-y(ask)31 b(whether)h(these)f(shap)r(e)h(functions)g(are)f(primitiv)n
-(e,)h(using)h Fm(fe.is)p 2593 1154 27 4 v 29 w(primitive\(i\))p
-Fn(,)28 b(and)330 1254 y(use)20 b(the)h(lo)r(op)f(only)f(if)i(the)g
-(result)f(is)g(false;)i(if,)g(on)e(the)h(other)f(hand,)h(the)g(result)f
-(is)g(true,)i(w)n(e)d(only)330 1353 y(need)33 b(to)f(set)h
-Fm(comp)p 951 1353 V 29 w(i)g Fn(to)f(the)h(\014xed)f(v)-5
-b(alue)33 b Fm(fe.system)p 2132 1353 V 28 w(to)p 2248
-1353 V 30 w(component)p 2674 1353 V 28 w(index\(i\).first)p
-Fn(,)330 1453 y(and)27 b(lik)n(ewise)g(for)g(shap)r(e)h(function)g
-Fk(j)5 b Fn(.)455 1553 y(Another)28 b(p)r(ossibilit)n(y)g(for)g
-(optimization)h(w)n(ould)f(b)r(e)h(to)f(ask)g(whether)h(a)f(certain)g
-(comp)r(o-)330 1652 y(nen)n(t)37 b(o)n(v)n(er)e(whic)n(h)i(w)n(e)f(lo)r
-(op)h(is)f(actually)h(non-zero,)g(or)f(if)h(the)g(shap)r(e)g(function)g
-(is)g(a)g(non-)330 1752 y(primitiv)n(e)31 b(one)h(but)g(happ)r(ens)f
-(to)h(b)r(e)g(zero)e(in)i(the)g(presen)n(t)f(comp)r(onen)n(t)g(nev)n
-(ertheless.)48 b(F)-7 b(or)330 1851 y(this,)28 b(w)n(e)f(could)h
-(replace)e(the)i(lo)r(op)f(o)n(v)n(er)f Fm(comp)p 1824
-1851 V 30 w(i)h Fn(b)n(y)g(this:)504 2017 y Fm(for)43
-b(\(unsigned)d(int)i(comp_i=0;)e(comp_i<fe.n_comp)o(on)o(en)o(ts\()o
-(\);)d(++comp_i\))592 2117 y(if)42 b(\(fe.get_nonzero_c)o(om)o(pon)o
-(en)o(ts\()o(i\))o([c)o(omp)o(_i)o(])c(==)k(true\))330
-2283 y Fn(If)30 b(the)g(if-clause)f(do)r(es)g(not)g(succeed)h(then)g
-(this)g(comp)r(onen)n(t)f(of)g(the)h(shap)r(e)f(function)i(is)e(def-)
-330 2383 y(initely)h(zero,)g(and)f(there)h(will)g(not)g(b)r(e)g(a)g
-(con)n(tribution)f(to)h(the)g(matrix)f(an)n(yw)n(a)n(y)-7
-b(,)29 b(so)g(w)n(e)g(can)330 2482 y(also)e(skip)g(the)h(computations.)
-330 2715 y Fb(6.2)112 b(The)38 b(Stok)m(es)g(equations)330
-2868 y Fn(Lik)n(ewise,)27 b(this)h(is)f(no)n(w)g(the)h(co)r(de)f(for)h
-(the)g(Stok)n(es)e(equations:)417 3034 y Fm(for)43 b(\(unsigned)c(int)k
-(i=0;)f(i<fe.dofs_per_c)o(ell)o(;)37 b(++i\))461 3134
-y(for)42 b(\(unsigned)e(int)i(comp_i=0;)e(comp_i<fe.n_compo)o(ne)o(nt)o
-(s\(\))o(;)d(++comp_i\))504 3233 y(for)43 b(\(unsigned)d(int)i(j=0;)g
-(j<fe.dofs_per_ce)o(ll)o(;)c(++j\))548 3333 y(for)k(\(unsigned)e(int)i
-(comp_j=0;)e(comp_j<fe.n_compo)o(ne)o(nts)o(\(\))o(;)e(++comp_j\))592
-3433 y(for)k(\(unsigned)e(int)i(q=0;)g(q<n_q_points;)c(++q\))679
-3532 y({)1332 3632 y(//)43 b(velocity-velocity)37 b(coupling?)766
-3731 y(if)43 b(\(\(comp_i<dim\))38 b(&&)43 b(\(comp_j<dim\)\))853
-3831 y(if)g(\(comp_i)d(==)j(comp_j\))940 3931 y(cell_matrix\(i,j\))1115
-4030 y(+=)f(\(nu)h(*)1289 4130 y(\(fe_values.shape)o(_g)o(rad)o(_c)o
-(omp)o(on)o(en)o(t\(i)o(,q)o(,co)o(mp)o(_i\))37 b(*)1332
-4230 y(fe_values.shape_g)o(rad)o(_c)o(omp)o(on)o(en)o(t\(j)o(,q)o(,co)o
-(mp)o(_j\))80 b(\))43 b(*)1289 4329 y(fe_values.JxW\(q\))o(\);)1332
-4528 y(//)g(velocity-pressure)37 b(coupling)766 4628
-y(if)43 b(\(\(comp_i<dim\))38 b(&&)43 b(\(comp_j==dim\)\))853
-4728 y(cell_matrix\(i,j\))1027 4827 y(+=)g(\(-fe_values.shape)o(_g)o
-(ra)o(d_c)o(om)o(pon)o(en)o(t\()o(i,q)o(,c)o(omp)o(_i)o(\)[c)o(om)o(p_)
-o(i])37 b(*)1202 4927 y(fe_values.shape_)o(va)o(lu)o(e_c)o(om)o(pon)o
-(en)o(t\()o(j,q)o(,c)o(omp)o(_j)o(\))343 b(*)1202 5027
-y(fe_values.JxW\(q\))o(\);)1332 5226 y(//)43 b(pressure-velocity)37
-b(coupling)766 5325 y(if)43 b(\(\(comp_i==dim\))37 b(&&)43
-b(\(comp_j<dim\)\))853 5425 y(cell_matrix\(i,j\))1027
-5525 y(+=)g(\(fe_values.shape_)o(va)o(lu)o(e_c)o(om)o(pon)o(en)o(t\()o
-(i,q)o(,c)o(omp)o(_i)o(\))38 b(*)1202 5624 y(fe_values.shape_)o(gr)o
-(ad)o(_co)o(mp)o(one)o(nt)o(\(j)o(,q,)o(co)o(mp_)o(j\))o([co)o(mp)o(_j)
-o(])g(*)1788 5919 y Fn(12)p eop
-%%Page: 13 13
-13 12 bop 1202 390 a Fm(fe_values.JxW\(q\))o(\);)679
-490 y(};)330 656 y Fn(Again,)28 b(the)h(same)e(optimizations)h(as)g(ab)
-r(o)n(v)n(e)f(are)g(p)r(ossible.)39 b(Here,)28 b(they)g(ev)n(en)g(seem)
-g(w)n(orth-)330 756 y(while,)35 b(since)e(it)g(is)g(often)h(the)f(case)
-g(that)g(the)h(v)n(elo)r(cit)n(y)e(v)-5 b(ariables)32
-b(are)g(discretized)h(using)f(a)330 855 y(non-primitiv)n(e)f(\014nite)i
-(elemen)n(t,)h(while)e(the)h(pressure)e(uses)h(a)f(primitiv)n(e)h
-(elemen)n(t.)51 b(In)33 b(that)330 955 y(case,)e(some)g(shap)r(e)g
-(functions)g(are)f(primitiv)n(e)h(\(namely)g(those)g(discretizing)g
-(the)g(pressure\),)330 1054 y(and)37 b(of)h(the)g(non-primitiv)n(e)f
-(shap)r(e)g(functions)h(\(those)f(for)g(the)h(v)n(elo)r(cit)n(y)f(v)-5
-b(ariables\))37 b(some)330 1154 y(v)n(ector)d(comp)r(onen)n(ts)h(\(the)
-g(pressure)f(comp)r(onen)n(ts\))h(are)f(alw)n(a)n(ys)f(zero.)59
-b(Th)n(us,)37 b(b)r(oth)e(opti-)330 1254 y(mizations)26
-b(describ)r(ed)g(ab)r(o)n(v)n(e)e(w)n(ould)i(b)r(e)h(useful.)36
-b(W)-7 b(e)27 b(lea)n(v)n(e)e(the)h(implemen)n(tation)h(of)f(this)g(to)
-330 1353 y(the)i(reader.)330 1628 y Fo(7)135 b(Conclusions)330
-1810 y Fn(W)-7 b(e)23 b(ha)n(v)n(e)f(sho)n(wn)h(ho)n(w)f(\014nite)i
-(elemen)n(t)f(matrices)f(are)h(assem)n(bled)f(using)h(the)g
-(functionalit)n(y)g(of)330 1909 y(the)i Fm(deal.II)d
-Fn(library)-7 b(.)35 b(F)-7 b(or)24 b(the)i(scalar)d(case,)h(and,)i(in)
-f(the)g(v)n(ector-v)-5 b(alued)23 b(case,)i(if)g(the)h(\014nite)330
-2009 y(elemen)n(t)36 b(shap)r(e)g(functions)g(are)f(suc)n(h)h(that)g
-(only)g(one)g(v)n(ector)e(comp)r(onen)n(t)i(of)g(eac)n(h)f(shap)r(e)330
-2109 y(function)29 b(is)f(non-zero,)f(assem)n(bling)h(is)g(relativ)n
-(ely)f(simple.)40 b(In)28 b(the)h(other)f(case,)g(when)g(there)330
-2208 y(are)34 b(shap)r(e)i(functions)f(with)h(more)f(than)g(one)g
-(non-zero)f(comp)r(onen)n(t,)j(some)e(more)g(care)f(is)330
-2308 y(necessary)-7 b(,)33 b(but)g(assem)n(bling)f(is)h(still)g
-(straigh)n(tforw)n(ard)d(and)j(follo)n(ws)f(the)i(same)e(pattern)h(as)
-330 2407 y(b)r(efore.)1788 5919 y(13)p eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/deal.II/doc/reports/assemble/assemble.tex b/deal.II/doc/reports/assemble/assemble.tex
deleted file mode 100644 (file)
index 6e0e966..0000000
+++ /dev/null
@@ -1,948 +0,0 @@
-\documentclass{article}
-\usepackage{times}
-\usepackage{amsmath}
-\usepackage{amsfonts}
-\usepackage{a4}
-\newcommand{\leftpartial}{\overleftarrow \partial}
-\newcommand{\rightpartial}{\overrightarrow \partial}
-\renewcommand{\div}{\nabla\cdot}
-\renewcommand{\vec}[1]{{\mathbf #1}}
-\begin{document}
-
-
-\begin{center}
-  \begin{huge}
-    Assembling matrices in \texttt{deal.II}
-  \end{huge}
-
-  \vspace*{0.5cm}
-
-  \begin{large}
-    Wolfgang Bangerth\\
-    ETH Z\"urich, Switzerland\\[12pt]
-    May 2002
-  \end{large}
-\end{center}
-
-
-\section{Introduction}
-
-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. 
-
-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 \texttt{deal.II}. 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.
-
-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.
-
-
-
-
-\section{Linear systems for finite element methods}
-
-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: \textit{find $u\in
-  V$ such that}
-\begin{gather*}
-  a(u, v) = (f,v)_\Omega \qquad \forall v\in V,
-\end{gather*}
-where $a(\cdot,\cdot)$ is the bilinear form associated with the partial
-differential equations, and $V$ is the space of test functions. For
-simplicity, we have here assumed that the problem is linear and that then
-$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.
-
-In finite elements, we define an approximation of the solution $u$ by choosing
-a finite dimensional subspace $V_h$ spanned by the basis functions
-$\{\varphi_i\}$, and searching $u_h\in V_h$ by testing the weak form by the
-test functions from $V_h$. The problem then reads: \textit{find $u_h\in V_h$
-such that}
-\begin{gather*}
-  a(u_h, v_h) = (f,v_h)_\Omega \qquad \forall v_h\in V_h.
-\end{gather*}
-
-Now, $\{\varphi_i\}$ is a basis of $V_h$. We denote the dimension of $V_h$ by
-$N$, and will henceforth let all sums be over the range $0\ldots N-1$, to keep
-with the standard notation of the C/C++ programming languages. With this, we
-can expand the solution $u_h=\sum_{j=0}^{N-1} U_j \varphi_j$, and by
-bilinearity of the form $a(\cdot,\cdot)$, the problem above is equivalent to
-\begin{gather}
-  \label{eq:lin-1}
-  \sum_{j=0}^{N-1} U_j a(\varphi_j,\varphi_i) = (f, \varphi_i)
-  \qquad
-  \forall i=0\ldots N-1.
-\end{gather}
-Denoting
-\begin{gather*}
-  A_{ij} = a(\varphi_j,\varphi_i),
-  \qquad
-  \qquad
-  F_j = (f, \varphi_j),
-\end{gather*}
-the equations determining the expansion coefficients $U_i$ are therefore:
-\begin{gather}
-  \label{eq:lin-2}
-  A U = F.
-\end{gather}
-
-Note that we have taken a reverted order of indices in the definition of $A$,
-since we want the linear system \eqref{eq:lin-2} with the solution to the
-right of the matrix, to keep with standard notation, instead of to the left as
-in \eqref{eq:lin-1}. For symmetric problems, there is no difference, but for
-non-symmetric ones this is a common source for problems and a rather common
-trap. 
-
-For partial differential equations, the bilinear form used in \eqref{eq:lin-1}
-involves an integral over the domain $\Omega$ on which the problem is
-posed. For example, for the Laplace equation we have
-\begin{gather*}
-  A_{ij}
-  =
-  a(\varphi_j, \varphi_i)
-  =
-  (\nabla \varphi_j, \nabla \varphi_i)_\Omega
-  =
-  \int_\Omega \nabla \varphi_j \cdot \nabla \varphi_i \; dx.
-\end{gather*}
-For practical purposes, we split this equation into integrals over the
-individual cells $K$ of the triangulation $\mathbb T$ we use for the
-discretization. In \texttt{deal.II}, these cells are always lines,
-quadrilaterals, or hexahedra. With this, we have that
-\begin{gather*}
-  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,
-\end{gather*}
-where the bilinear form $a_K(\cdot,\cdot)$ only involves an integral over the
-cell $K$. The important point is that we do so since for the localized basis
-functions used in finite elements, $A^K$ is a matrix with almost only zeros.
-The only elements which are not zero are those corresponding to indices $i,j$
-indicating those shape functions that have support also on the element $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 $K$ are nonzero on $K$, and thus only the entries in $A^K$ are nonzero
-where the four rows corresponding to these indices and the respective four
-columns intersect.
-
-In general, assume that there are $N_K$ shape functions with support on cell
-$K$, and let the set of their indices be denoted by $I_K$. Then we can define
-a matrix $\hat A^K$ of (small dimension) $N_K\times N_K$ holding these nonzero
-entries, and we can obtain back the original contribution $A_K$ to $A$ by the
-transformation
-\begin{gather*}
-  A^K_{ij} = 
-  \left\{
-    \begin{array}{ll}
-      0 & \text{if $i\not\in I_K$ or $j\not\in I_K$,} \\
-      \hat A^K_{local(i),local(j)} & \text{otherwise},
-    \end{array}
-  \right.
-  \qquad 0\le i,j\le N-1.
-\end{gather*}
-Here, $local(i)$ gives the number of the global degree of freedom $i$ on the
-cell $K$, i.e. the position of $i$ in the index set $I_K$. One could call
-$\hat A^K$ the \texttt{reduced} form of $A^K$, since the many zero rows and
-column have been stripped.
-
-In general, when assembling the global matrix, the reverse way is used: when
-adding up $A^K$ to $A$, we do so only with $\hat A^K$ by
-\begin{gather*}
-  A_{global(i),global(j)} 
-  +\!\!=
-  \hat A^K_{ij}
-  \qquad
-  \qquad
-  0\le i,j\le N_K-1.
-\end{gather*}
-Thus, indices only run over the (small) range $0\ldots N_K-1$ instead of
-$0\ldots N-1$. Here, $global(i)$ denotes the global number of the degree of
-freedom with number $i$ on this cell $K$, i.e. $global(i)=I_K[i]$, where the
-bracket operator returns the $i$th element of the set $I_K$.
-
-The main part of assembling finite element matrices is therefore to assemble
-the local matrix $\hat A^K$. Before we go on with discussing how this is done
-in \texttt{deal.II}, 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
-$N_q$ points $x_q$ defined on cell in real space (as opposed to the unit cell)
-and weights $w_q$. Then, for example for the Laplace equation, we approximate
-\begin{gather}
-  \hat A^K_{ij}
-  \equiv
-  \int_K \nabla\varphi_i \cdot \nabla \varphi_j \; dx
-  \approx
-  \sum_{q=0}^{N_q-1} 
-  \nabla\varphi_i(x_q) \cdot \nabla \varphi_j(x_q)
-  \ w_q |\text{det} \ J(\hat x_q)|.
-\end{gather}
-For other problems, the integrand is different, but the principle remains the
-same. $\text{det}\ 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 $\hat x_q$ is the point on the unit cell
-corresponding to the quadrature point $x_q$ in real space.
-
-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
-\texttt{deal.II} usually provides. One can see this as a kind of \textit{view}
-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. 
-
-In \texttt{deal.II} the \texttt{FEValues} 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 $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 \texttt{FEValues} objects.
-
-In the following, we provide a list of connections between the symbols introduced
-above, and the respective functions and variable names used in typical
-\texttt{deal.II} 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 \texttt{deal.II}, you will recognize all these
-names. If you haven't, this would be a good time to look at the first
-three of them.
-
-
-\begin{center}
-  \begin{tabular}{|ll|}
-    \hline
-    $A$ & \texttt{system\_matrix} \\
-    $\hat A^K$ & \texttt{cell\_matrix} \\
-    $K$ & \texttt{cell} \\
-    $N$ & \texttt{dof\_handler.n\_dofs()} \\
-    $N_K$ & \texttt{fe.dofs\_per\_cell} \\
-    $I_K$ & \texttt{local\_dof\_indices} \\
-    $N_q$ & \texttt{quadrature\_formula.n\_quadrature\_points} \\
-    $\varphi_i(x_q)$ & \texttt{fe\_values.shape\_value(i,q)} \\
-    $\nabla\varphi_i(x_q)$ & \texttt{fe\_values.shape\_grad(i,q)} \\
-    $x_q$ & \texttt{fe\_values.quadrature\_point(q)} \\
-    $|\text{det} J(\hat x_q)| w_q$ & \texttt{fe\_values.JxW(q)} \\
-    \hline
-  \end{tabular}  
-\end{center}
-
-With this vocabulary, the typical matrix assembly loop in \texttt{deal.II} has
-the following form: first declare a quadrature object and use it for the
-initialization of a \texttt{FEValues} object as discussed above:
-\begin{verbatim}
-  QGauss2<2>  quadrature_formula;
-  FEValues<2> fe_values (fe, quadrature_formula, 
-                         UpdateFlags(update_values    |
-                                     update_gradients |
-                                     update_JxW_values));
-\end{verbatim}
-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 \texttt{update\_values} 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 \texttt{FEValues} class can be used, which
-takes a mapping object as first argument, before the other arguments listed
-above.
-
-Next we define abbreviations for the values of $N_K$ and $N_q$:
-\begin{verbatim}
-  const unsigned int 
-      dofs_per_cell = fe.dofs_per_cell,
-      n_q_points    = quadrature_formula.n_quadrature_points;
-\end{verbatim}
-Then have an object to store the matrix $\hat A^K$, which is of size
-$N_K\times N_K$:
-\begin{verbatim}
-  FullMatrix<double>   cell_matrix (dofs_per_cell, dofs_per_cell);
-\end{verbatim}
-And an object representing the set of global indices of degrees of freedom,
-previously denoted by $I_K$, that have support on the present cell, i.e. those
-degrees of freedom local to the present cell:
-\begin{verbatim}
-  std::vector<unsigned int> local_dof_indices (dofs_per_cell);
-\end{verbatim}
-The next step is then to loop over all cells:
-\begin{verbatim}
-  typename DoFHandler<dim>::active_cell_iterator
-       cell = dof_handler.begin_active(),
-       endc = dof_handler.end();
-  for (; cell!=endc; ++cell)
-    {
-\end{verbatim}
-On each cell, first tell the \texttt{FEValues} object to compute the values of
-the various fields for this particular cell, and do not forget to reset the
-local matrix $\hat A^K$ to zero before adding it up:
-\begin{verbatim}
-      fe_values.reinit (cell);
-      cell_matrix.clear ();
-\end{verbatim}
-Now comes the main part, assembling the local matrix $\hat A^K$. It consists
-of a loop over all indices $0\le i,j \le N_K$ and all quadrature points $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:
-\begin{verbatim}
-      for (unsigned int i=0; i<dofs_per_cell; ++i)
-        for (unsigned int j=0; j<dofs_per_cell; ++j)
-          for (unsigned int q=0; q<n_q_points; ++q)
-            cell_matrix(i,j) += ...;
-
-\end{verbatim}
-After we have $\hat A^K$, we still have to sum it into the global matrix
-$A$. This is done by first getting the set $I_K$ of the global indices of the
-shape functions that were active on this cell, and then distributing $\hat
-A^K$: 
-\begin{verbatim}
-      cell->get_dof_indices (local_dof_indices);
-
-      for (unsigned int i=0; i<dofs_per_cell; ++i)
-        for (unsigned int j=0; j<dofs_per_cell; ++j)
-          system_matrix.add (local_dof_indices[i],
-                             local_dof_indices[j],
-                             cell_matrix(i,j));
-    };
-\end{verbatim}
-When this is done, we go on to the next cell.
-
-Within this framework, the only open point is assembling $\hat A^K$ on one
-quadrature point. This will be subject of the rest of this report.
-
-
-\section{Assembling scalar problems}
-
-For scalar problems, assembling $\hat A^K$ is relatively simple. With the
-terms introduced above, and for the Laplace equation, this looks as follows:
-\begin{verbatim}
-  local_matrix(i,j) += (fe_values.shape_grad(i,q_point) *
-                        fe_values.shape_grad(j,q_point) *
-                        fe_values.JxW (q_point));
-\end{verbatim}
-This term is placed in the innermost loop, i.e. is performed for all indices
-$i,j$, and all quadrature points \texttt{q\_point}.
-
-For nonsymmetric problems, the order of terms has to be considered, as
-mentioned above. For example, for the advection equation
-\begin{gather*}
-  \beta \cdot \nabla u = f,
-\end{gather*}
-with which the bilinear form
-\begin{gather*}
-  a(u,v) = (\beta \cdot \nabla u, v)_\Omega
-\end{gather*}
-is associated, the local matrix is assembled as
-\begin{verbatim}
-  local_matrix(i,j) += (fe_values.shape_values(i,q_point) *
-                        ( beta * fe_values.shape_grad(j,q_point) ) *
-                        fe_values.JxW (q_point));
-\end{verbatim}
-Here, \texttt{beta} is an object of type \texttt{Tensor<1,dim>}, which
-represents a tensor of rank 1 in \texttt{dim} space dimensions.
-
-Assembling matrices for scalar problems is also shown from a practical
-perspective in many of the example programs of \texttt{deal.II}, 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.
-
-
-
-\section{Vector-valued problems}
-
-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\'e equations of elasticity, which are taken for the symmetric
-case, then we briefly introduce the Stokes equations as a nonsymmetric problem.
-
-\subsection{The elastic equations}
-\label{sec:elastic}
-
-As first example for the methods we are going to discuss for vector-valued
-problems, we consider the elastic Lam\'e equations for isotropic materials,
-which read in strong form:
-$$
-   -
-   \nabla (\lambda+\mu) (\div \vec u)
-   -
-   (\nabla \cdot \mu \nabla) \vec u
-   =
-   \vec f.
-$$
-These equations describe the three-dimensional deformation $\vec u$ of an
-elastic body under a body force $\vec f$. The respective bilinear form
-associated with this operator is then
-$$
-  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,
-$$
-or as a sum over components:
-$$
-  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.
-$$
-
-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
-\begin{gather*}
-  A_{ij} = a(\varphi_j,\varphi_i)_\Omega,
-\end{gather*}
-where $\varphi_i,\varphi_j$ are two vector-valued trial functions, and it
-would be nice if we could write the bilinear form $a(\cdot,\cdot)$ as a kind
-of scalar product $(\varphi_i, Q \varphi_j)$, where $Q$ is a differential
-operator. This is trivial if we take $Q$ as the operator of the strong form,
-$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, 
-$\varphi \overleftarrow\nabla \cdot \overrightarrow\nabla \psi
-=(\nabla\varphi)\cdot(\nabla\psi)$. With this, a simple computation shows 
-that 
-\begin{multline*}
-  a(\vec u,\vec v)
-  =
-  (\lambda+\mu)
-  \left(
-    \begin{pmatrix}
-      u_1 \\ u_2
-    \end{pmatrix}
-    \mid
-    \begin{pmatrix}
-      \leftpartial_1 \rightpartial_1 &
-      \leftpartial_1 \rightpartial_2 \\
-      \leftpartial_2 \rightpartial_1 &
-      \leftpartial_2 \rightpartial_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(
-      \leftpartial_1 \rightpartial_1 + 
-      \leftpartial_2 \rightpartial_2
-    \right)
-    \begin{pmatrix}
-      1 & 0 \\
-      0 & 1
-    \end{pmatrix}
-    \mid
-    \begin{pmatrix}
-      v_1 \\ v_2
-    \end{pmatrix}
-  \right)_\Omega.
-\end{multline*}
-The sought operator $Q$ is then
-\begin{gather*}
-  Q
-  =
-  (\lambda+\mu)
-  \begin{pmatrix}
-    \leftpartial_1 \rightpartial_1 &
-    \leftpartial_1 \rightpartial_2 \\
-    \leftpartial_2 \rightpartial_1 &
-    \leftpartial_2 \rightpartial_2
-  \end{pmatrix}
-  +
-  \mu
-  \begin{pmatrix}
-    \leftpartial_1 \rightpartial_1 + 
-    \leftpartial_2 \rightpartial_2 & 0 \\
-    0 & \leftpartial_1 \rightpartial_1 + 
-    \leftpartial_2 \rightpartial_2
-  \end{pmatrix},
-\end{gather*}
-and $a(\vec u,\vec v)=(\vec u | Q | \vec v)$. We demonstrate the fact that $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. 
-
-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 $Q$ as well as from the initial
-definition of $a(\cdot,\cdot)$.
-
-
-
-\subsection{The Stokes equations}
-\label{sec:stokes}
-
-For a nonsymmetric problem, we take the Stokes equations: 
-\begin{align*}
-  -\Delta \vec u + \nabla p &= 0,
-  \\
-  \text{div } \vec u &= 0.
-\end{align*}
-We denote by $\vec w=\{\vec u,p\}$ the entire solution vector. In the weak
-form, the above equations read
-\begin{gather*}
-  a(\vec u,p; \vec v, q)
-  =
-  \nu(\nabla \vec u_1, \nabla \vec v_1)
-  +\nu(\nabla \vec u_2, \nabla \vec v_2)
-  - (p, \nabla\cdot \vec v)
-  + (\nabla\cdot\vec u, q).
-\end{gather*}
-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 $-1$, but we don't want to
-do that for now for illustrational purposes.
-
-Again, we introduce the operator $Q$ for this problem, which after some
-computations turns out to be
-\begin{gather*}
-  Q
-  =
-  \begin{pmatrix}
-    \nu(\leftpartial_1 \rightpartial_1 +
-    \leftpartial_2 \rightpartial_2)     & 0 & -\leftpartial_1 \\
-    0 & \nu(\leftpartial_1 \rightpartial_1 +
-        \leftpartial_2 \rightpartial_2) & -\leftpartial_2 \\
-    \rightpartial_1 & \rightpartial_2 & 0
-  \end{pmatrix}.
-\end{gather*}
-Again, it is clear from this form that we could have made the operator
-symmetric by multiplying the last row by $-1$. Note when checking the symmetry
-of $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 
-$\leftpartial_1 \rightpartial_1 \rightarrow \rightpartial_1 \leftpartial_1
-\rightarrow \leftpartial_1 \rightpartial_1$.
-
-
-\section{Assembling vector-valued problems: The simple case}
-
-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.
-
-In this case, each shape function $\Phi_i$ has the representation
-\begin{gather*}
-  \Phi_i(\vec x) = 
-  \left( 0, \dots, 0, \varphi_i(\vec x), 0, \ldots, 0\right)^T,
-\end{gather*}
-where $\Phi_i$ is the vector-valued shape function, and $\varphi_i$ its
-only non-zero component. Let us denote by $c(i)$ the index of this non-zero
-component, then $\Phi_i$ can also be written as 
-\begin{gather*}
-  \left(\Phi_i(\vec x)\right)_l
-  =
-  \varphi_i(\vec x) \delta_{c(i),l},
-\end{gather*}
-with the Kronecker delta function $\delta_{jk}$.
-
-With this simple form, the cell matrix on cell $K$ has a simple form:
-\begin{gather*}
-  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.
-\end{gather*}
-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 $Q$ to assemble each entry of the cell
-matrix with the help of the values of the functions $\varphi_i$ at the
-quadrature points. Here, it comes handy that we have written the operator as a
-matrix operator $Q$, since this makes it very clear how shape functions $i$
-and $j$ couple: if $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.
-
-In \texttt{deal.II}, 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:
-\begin{itemize}
-\item \textit{Determining the non-zero component:} Given the shape function
-  with number $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 
-\begin{verbatim}
-  const unsigned int nonzero_component_i
-     = fe.system_to_component_index(i).first;
-\end{verbatim}
-  The \texttt{FiniteElement::system\_to\_component\_index} returns a pair of
-  numbers for each index $0\le i < N_K$, the first of which denotes the only
-  non-zero component of the shape function $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 $\varphi_i$ within the shape
-  functions corresponding to this component.
-  
-  If, for example, our finite element in use is a $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 $0\le i < 22$, the first part of the pair
-  returned by the function described above, $c(i)$, may then either be 0, 1,
-  or 2, denoting the three possible components of the finite element. If
-  $c(i)$ is either 0 or 1, then the component to which the shape function $i$
-  belongs is a bi-quadratic one, and the second index is between $0$ and $8$
-  (inclusive) as the $Q^2$ element has 9 shape functions. If $c(i)==2$, then
-  the second part is between 0 and 3 (inclusive).
-
-\item \textit{Getting the value of $\varphi_i(\vec x_q)$:} Since only one
-  component of $\Phi_i$ is non-zero, we can use the same function as before,
-  i.e. \texttt{FEValues::shape\_value(i,q)}, which in the scalar case returned
-  the value of shape function $i$ at quadrature point $q$. Likewise, the 
-  \texttt{FEValues::shape\_grad(i,q)} function returns the gradient of this
-  particular component.
-
-  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 $c(i)==0$ for all valid indices
-  $i$), in the vector-valued case, it is component $c(i)$.
-\end{itemize}
-
-
-\subsection{The elastic equations}
-\label{sec:elastic-simple}
-
-With this, and the definition of the ``bi-directional'' operator $Q$ in
-Section~\ref{sec:elastic}, the local matrix assembly function for the elastic
-equations would then read as follows:
-\begin{verbatim}
-  for (unsigned int i=0; i<fe.dofs_per_cell; ++i)
-    for (unsigned int j=0; j<fe.dofs_per_cell; ++j)
-      for (unsigned int q=0; q<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)); 
-        };
-\end{verbatim}
-Note that this code works in any space dimension, not only for
-\texttt{dim==2}. Optimization of this is possible by hoisting the computation
-of \texttt{comp\_i} and \texttt{comp\_j}, denoting $c(i)$ and $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:
-\begin{verbatim}
-  const double
-    lambda_value = lambda.value(fe_values.quadrature_point(q)),
-    mu_value     = mu.value(fe_values.quadrature_point(q));
-\end{verbatim}
-assuming that \texttt{lambda,mu} are variables of classes describing space
-dependent functions, and which are derived
-from the \texttt{Function<dim>} class.
-
-
-\subsection{The Stokes equations}
-\label{sec:stokes-simple}
-
-For the Stokes equation, things are slightly more complicated since the three
-components denote different quantities, and the operator $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 \texttt{dim} velocity variables and one scalar pressure:
-\begin{verbatim}
-  for (unsigned int i=0; i<fe.dofs_per_cell; ++i)
-    for (unsigned int j=0; j<fe.dofs_per_cell; ++j)
-      for (unsigned int q=0; q<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<dim) && (comp_j<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<dim) && (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) && (comp_j<dim))
-            cell_matrix(i,j) += (fe_values.shape_value(i,q) * 
-                                 fe_values.shape_grad(j,q)[comp_j] *
-                                 fe_values.JxW(q)); 
-        };
-\end{verbatim}
-Again, optimization is possible by observing that only one of the outer
-\texttt{if}s in the body can be true, for example using \texttt{else} clauses,
-or \texttt{break} statements.
-
-
-\section{Assembling vector-valued problems: The complicated case}
-
-The more complicated case is when more than one component of a vector-valued
-shape function is non-zero, i.e. the representation
-\begin{gather*}
-  \Phi_i(\vec x) = 
-  \left( 0, \dots, 0, \varphi_i(\vec x), 0, \ldots, 0\right)^T,
-\end{gather*}
-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: 
-$\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.
-
-What happens in this case? First, the function
-\texttt{FiniteElement::system\_\-to\_\-component\_\-index} does not make much sense
-any more, since a shape function $\Phi_i$ cannot be associated with only one
-vector component any more. Calling this function for basis functions $\Phi_i$
-that are not restricted to only one non-zero component will thus yield an
-exception being thrown.
-
-Second, the functions \texttt{FEValues::shape\_value} and
-\texttt{FEValues::shape\_grad} 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 $i$. For those shape function for which this holds, you will
-again get an exception upon calling these functions.
-
-
-\subsubsection*{Getting information about shape functions}
-
-So how do you find out whether calling these functions is ok or not? In other
-words, how do you know whether shape function $\Phi_i$ has only one non-zero
-component, or more? For this, there are two functions:
-\texttt{FiniteElement::is\_primitive(i)} returns as a \texttt{bool} whether
-the shape function has only one non-zero component. For example, for a
-$Q^2/Q^2/Q^1$ element, this would be \texttt{true} 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 \texttt{false} for all indices $i$. It might also
-be \texttt{true} 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 $Q^1$, then it would be
-\texttt{true} for the pressure shape functions, but \texttt{false} otherwise.
-
-Second, the \texttt{FiniteElement::n\_nonzero\_components(i)} function returns
-in how many components the $i$th shape function is non-zero. Again, for the
-$Q^2/Q^2/Q^1$ combination, this would yield the value 1 for all allowed
-indices $i$. For coupled elements, it would be greater than 1.
-
-Third, you may sometimes want to know in which components a certain shape
-function is non-zero. For this, the
-\texttt{FiniteElement::get\_nonzero\_components(i)} 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.
-
-Note that if you have the result of
-\texttt{FiniteElement::get\_\-nonzero\_\-components(i)}, then the result of
-\texttt{FiniteElement::n\_nonzero\_components(i)} is simply the number of
-\texttt{true} values in the array returned by the first function. In the same
-way,
-\texttt{FiniteElement::\-is\_primitive(i)} is simply whether
-\texttt{FiniteElement::\-n\_nonzero\_\-components(i)} returned a value other than
-1. The functions are thus redundant in some way, but useful nevertheless. Of
-course, the values of the  \texttt{FiniteElement::\-is\_primitive(i)}
-and  \texttt{FiniteElement::n\_nonzero\_components(i)} 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.
-
-
-\subsubsection*{Evaluating shape functions}
-
-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 \texttt{FEValues::shape\_value}
-and \texttt{FEValues::shape\_grad}, call
-\texttt{FEValues::shape\_value\_component} and
-\texttt{FEValues::shape\_grad\_component}. 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.
-
-Of course, these functions can be called on primitive shape functions as
-well. In that case, the following holds:
-\begin{itemize}
-\item The value of \texttt{FEValues::shape\_value\_component(i,q,c)} is equal
-  to \texttt{FEValues::\-shape\_value(i,q)} if and only if the component
-  \texttt{c} is equal to \texttt{fe.system\_to\_\-component\_\-index(i).first},
-  i.e. if \texttt{c} is the only non-zero component of the shape function
-  \texttt{i}.
-\item For all other components \texttt{c}, the returned value of
-  \texttt{FEValues::shape\_\-value\_\-component(i,q,c)} is zero.
-\end{itemize}
-The same of course also holds for
-\texttt{FEValues::shape\_grad\_component(i,q,c)} and
-\texttt{FEValues::shape\_2nd\_derivative\_component(i,q,c)}.
-
-
-\subsection{The elastic equations}
-
-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~\ref{sec:elastic-simple}):
-\begin{verbatim}
-  for (unsigned int i=0; i<fe.dofs_per_cell; ++i)
-   for (unsigned int comp_i=0; comp_i<fe.n_components(); ++comp_i)
-    for (unsigned int j=0; j<fe.dofs_per_cell; ++j)
-     for (unsigned int comp_j=0; comp_j<fe.n_components(); ++comp_j)
-      for (unsigned int q=0; q<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)); 
-        };
-\end{verbatim}
-If you dislike this particular order of the loops, you can reorder them as you
-like, as they are independent.
-
-The code as shown above can be optimized. For example, instead of
-unconditionally performing the loop over all components of shape functions $i$
-of $j$, we might first ask whether these shape functions are primitive, using
-\texttt{fe.is\_primitive(i)}, and use the loop only if the result is false;
-if, on the other hand, the result is true, we only need to set
-\texttt{comp\_i} to the fixed value
-\texttt{fe.system\_to\_component\_index(i).first}, and likewise for shape
-function $j$.
-
-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 \texttt{comp\_i} by
-this:
-\begin{verbatim}
-    for (unsigned int comp_i=0; comp_i<fe.n_components(); ++comp_i)
-      if (fe.get_nonzero_components(i)[comp_i] == true)
-\end{verbatim}
-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.
-
-
-\subsection{The Stokes equations}
-
-Likewise, this is now the code for the Stokes equations:
-\begin{verbatim}
-  for (unsigned int i=0; i<fe.dofs_per_cell; ++i)
-   for (unsigned int comp_i=0; comp_i<fe.n_components(); ++comp_i)
-    for (unsigned int j=0; j<fe.dofs_per_cell; ++j)
-     for (unsigned int comp_j=0; comp_j<fe.n_components(); ++comp_j)
-      for (unsigned int q=0; q<n_q_points; ++q) 
-        {
-                       // velocity-velocity coupling?
-          if ((comp_i<dim) && (comp_j<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<dim) && (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) && (comp_j<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)); 
-        };
-\end{verbatim}
-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.
-
-
-\section{Conclusions}
-
-We have shown how finite element matrices are assembled using the
-functionality of the \texttt{deal.II} 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.
-
-\end{document}
diff --git a/deal.II/doc/reports/class-hierarchies/1d-dof.eps b/deal.II/doc/reports/class-hierarchies/1d-dof.eps
deleted file mode 100644 (file)
index f97f3b5..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: 1d-dof.eps
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Dec 19 16:17:22 1999
-%%For: wolf@adaptive (Wolfgang Bangerth)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 514 239
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--8.0 258.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Roman /Times-Roman-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 5287 m -1000 -1000 l 9692 -1000 l 9692 5287 l cp clip
- 0.06000 0.06000 sc
-% Polyline
-7.500 slw
-n 3705 1500 m 3600 1500 3600 1770 105 arcto 4 {pop} repeat
-  3600 1875 5895 1875 105 arcto 4 {pop} repeat
-  6000 1875 6000 1605 105 arcto 4 {pop} repeat
-  6000 1500 3705 1500 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-15.000 slw
-n 4800 1875 m 2400 2700 l gs col0 s gr 
-% Polyline
-n 2400 3075 m 2400 3900 l gs col0 s gr 
-% Polyline
-7.500 slw
-n 255 1500 m 150 1500 150 1770 105 arcto 4 {pop} repeat
-  150 1875 2145 1875 105 arcto 4 {pop} repeat
-  2250 1875 2250 1605 105 arcto 4 {pop} repeat
-  2250 1500 255 1500 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-15.000 slw
-n 1200 1875 m 2400 2700 l gs col0 s gr 
-% Polyline
-7.500 slw
-n 1155 3900 m 1050 3900 1050 4170 105 arcto 4 {pop} repeat
-  1050 4275 3645 4275 105 arcto 4 {pop} repeat
-  3750 4275 3750 4005 105 arcto 4 {pop} repeat
-  3750 3900 1155 3900 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 955 2700 m 850 2700 850 2970 105 arcto 4 {pop} repeat
-  850 3075 3845 3075 105 arcto 4 {pop} repeat
-  3950 3075 3950 2805 105 arcto 4 {pop} repeat
-  3950 2700 955 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-/Times-Roman-iso ff 375.00 scf sf
-4800 600 m
-gs 1 -1 sc (Class Hierarchy for the 1-dimensional Case, Part 2) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-4800 1800 m
-gs 1 -1 sc (DoFAccessor<1>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-1200 1800 m
-gs 1 -1 sc (CellAccessor<1>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-2400 3000 m
-gs 1 -1 sc (DoFObjectAccessor<1,1>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-2400 4200 m
-gs 1 -1 sc (DoFCellAccessor<1>) dup sw pop 2 div neg 0 rm  col0 sh gr
-$F2psEnd
-rs
diff --git a/deal.II/doc/reports/class-hierarchies/1d-dof.fig b/deal.II/doc/reports/class-hierarchies/1d-dof.fig
deleted file mode 100644 (file)
index 6d1e056..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
-0
-1200 2
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        6000 1875 6000 1500 3600 1500 3600 1875 6000 1875
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        4800 1875 2400 2700
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        2400 3075 2400 3900
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        2250 1875 2250 1500 150 1500 150 1875 2250 1875
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        1200 1875 2400 2700
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        3750 4275 3750 3900 1050 3900 1050 4275 3750 4275
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        3950 3075 850 3075 850 2700 3950 2700 3950 3075
-4 1 0 0 0 0 25 0.0000 4 345 7590 4800 600 Class Hierarchy for the 1-dimensional Case, Part 2\001
-4 1 0 0 0 0 20 0.0000 4 195 1995 4800 1800 DoFAccessor<1>\001
-4 1 0 0 0 0 20 0.0000 4 195 1950 1200 1800 CellAccessor<1>\001
-4 1 0 0 0 0 20 0.0000 4 255 2940 2400 3000 DoFObjectAccessor<1,1>\001
-4 1 0 0 0 0 20 0.0000 4 195 2460 2400 4200 DoFCellAccessor<1>\001
diff --git a/deal.II/doc/reports/class-hierarchies/1d-dof.jpg b/deal.II/doc/reports/class-hierarchies/1d-dof.jpg
deleted file mode 100644 (file)
index d443b95..0000000
Binary files a/deal.II/doc/reports/class-hierarchies/1d-dof.jpg and /dev/null differ
diff --git a/deal.II/doc/reports/class-hierarchies/1d-tria.eps b/deal.II/doc/reports/class-hierarchies/1d-tria.eps
deleted file mode 100644 (file)
index 5670f0c..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: 1d-tria.eps
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Dec 19 15:49:56 1999
-%%For: wolf@adaptive (Wolfgang Bangerth)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 513 239
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--9.0 258.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Roman /Times-Roman-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 5287 m -1000 -1000 l 9692 -1000 l 9692 5287 l cp clip
- 0.06000 0.06000 sc
-% Polyline
-7.500 slw
-n 3705 1500 m 3600 1500 3600 1770 105 arcto 4 {pop} repeat
-  3600 1875 5895 1875 105 arcto 4 {pop} repeat
-  6000 1875 6000 1605 105 arcto 4 {pop} repeat
-  6000 1500 3705 1500 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-15.000 slw
-n 4800 1875 m 1800 2700 l gs col0 s gr 
-% Polyline
-n 1800 3075 m 1800 3900 l gs col0 s gr 
-% Polyline
-7.500 slw
-n 280 2700 m 175 2700 175 2970 105 arcto 4 {pop} repeat
-  175 3075 3345 3075 105 arcto 4 {pop} repeat
-  3450 3075 3450 2805 105 arcto 4 {pop} repeat
-  3450 2700 280 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 755 3900 m 650 3900 650 4170 105 arcto 4 {pop} repeat
-  650 4275 2845 4275 105 arcto 4 {pop} repeat
-  2950 4275 2950 4005 105 arcto 4 {pop} repeat
-  2950 3900 755 3900 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-/Times-Roman-iso ff 300.00 scf sf
-4800 1800 m
-gs 1 -1 sc (TriaAccessor<1>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 375.00 scf sf
-4800 600 m
-gs 1 -1 sc (Class Hierarchy for the 1-dimensional Case, Part 1) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-1800 3000 m
-gs 1 -1 sc (TriaObjectAccessor<1,1>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-1800 4200 m
-gs 1 -1 sc (CellAccessor<1>) dup sw pop 2 div neg 0 rm  col0 sh gr
-$F2psEnd
-rs
diff --git a/deal.II/doc/reports/class-hierarchies/1d-tria.fig b/deal.II/doc/reports/class-hierarchies/1d-tria.fig
deleted file mode 100644 (file)
index 3f46e3c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
-0
-1200 2
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        6000 1875 6000 1500 3600 1500 3600 1875 6000 1875
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        4800 1875 1800 2700
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        1800 3075 1800 3900
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        3450 3075 175 3075 175 2700 3450 2700 3450 3075
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        2950 4275 650 4275 650 3900 2950 3900 2950 4275
-4 1 0 0 0 0 20 0.0000 4 195 1980 4800 1800 TriaAccessor<1>\001
-4 1 0 0 0 0 25 0.0000 4 345 7590 4800 600 Class Hierarchy for the 1-dimensional Case, Part 1\001
-4 1 0 0 0 0 20 0.0000 4 255 2925 1800 3000 TriaObjectAccessor<1,1>\001
-4 1 0 0 0 0 20 0.0000 4 195 1950 1800 4200 CellAccessor<1>\001
diff --git a/deal.II/doc/reports/class-hierarchies/1d-tria.jpg b/deal.II/doc/reports/class-hierarchies/1d-tria.jpg
deleted file mode 100644 (file)
index c074ca3..0000000
Binary files a/deal.II/doc/reports/class-hierarchies/1d-tria.jpg and /dev/null differ
diff --git a/deal.II/doc/reports/class-hierarchies/2d-dof.eps b/deal.II/doc/reports/class-hierarchies/2d-dof.eps
deleted file mode 100644 (file)
index 6d185a7..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: 2d-dof.eps
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Dec 19 16:24:04 1999
-%%For: wolf@adaptive (Wolfgang Bangerth)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 560 239
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--8.0 258.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Roman /Times-Roman-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 5287 m -1000 -1000 l 10462 -1000 l 10462 5287 l cp clip
- 0.06000 0.06000 sc
-% Polyline
-15.000 slw
-n 6825 3075 m 6825 3900 l gs col0 s gr 
-% Polyline
-7.500 slw
-n 5380 2700 m 5275 2700 5275 2970 105 arcto 4 {pop} repeat
-  5275 3075 8270 3075 105 arcto 4 {pop} repeat
-  8375 3075 8375 2805 105 arcto 4 {pop} repeat
-  8375 2700 5380 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 5580 3900 m 5475 3900 5475 4170 105 arcto 4 {pop} repeat
-  5475 4275 8070 4275 105 arcto 4 {pop} repeat
-  8175 4275 8175 4005 105 arcto 4 {pop} repeat
-  8175 3900 5580 3900 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-/Times-Roman-iso ff 300.00 scf sf
-6825 3000 m
-gs 1 -1 sc (DoFObjectAccessor<2,2>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-6825 4200 m
-gs 1 -1 sc (DoFCellAccessor<2>) dup sw pop 2 div neg 0 rm  col0 sh gr
-% Polyline
-n 1480 2700 m 1375 2700 1375 2970 105 arcto 4 {pop} repeat
-  1375 3075 4370 3075 105 arcto 4 {pop} repeat
-  4475 3075 4475 2805 105 arcto 4 {pop} repeat
-  4475 2700 1480 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-/Times-Roman-iso ff 300.00 scf sf
-2925 3000 m
-gs 1 -1 sc (DoFObjectAccessor<1,2>) dup sw pop 2 div neg 0 rm  col0 sh gr
-% Polyline
-n 3705 1500 m 3600 1500 3600 1770 105 arcto 4 {pop} repeat
-  3600 1875 5895 1875 105 arcto 4 {pop} repeat
-  6000 1875 6000 1605 105 arcto 4 {pop} repeat
-  6000 1500 3705 1500 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 7455 1500 m 7350 1500 7350 1770 105 arcto 4 {pop} repeat
-  7350 1875 9345 1875 105 arcto 4 {pop} repeat
-  9450 1875 9450 1605 105 arcto 4 {pop} repeat
-  9450 1500 7455 1500 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 255 1500 m 150 1500 150 1770 105 arcto 4 {pop} repeat
-  150 1875 3045 1875 105 arcto 4 {pop} repeat
-  3150 1875 3150 1605 105 arcto 4 {pop} repeat
-  3150 1500 255 1500 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-15.000 slw
-n 4800 1875 m 2800 2700 l gs col0 s gr 
-% Polyline
-n 1200 1875 m 2800 2700 l gs col0 s gr 
-% Polyline
-n 4800 1875 m 6800 2700 l gs col0 s gr 
-% Polyline
-n 8400 1875 m 6800 2700 l gs col0 s gr 
-/Times-Roman-iso ff 375.00 scf sf
-4800 600 m
-gs 1 -1 sc (Class Hierarchy for the 2-dimensional Case, Part 2) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-4800 1800 m
-gs 1 -1 sc (DoFAccessor<2>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-8400 1800 m
-gs 1 -1 sc (CellAccessor<2>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-1650 1800 m
-gs 1 -1 sc (TriaObjectAccessor<1,2>) dup sw pop 2 div neg 0 rm  col0 sh gr
-$F2psEnd
-rs
diff --git a/deal.II/doc/reports/class-hierarchies/2d-dof.fig b/deal.II/doc/reports/class-hierarchies/2d-dof.fig
deleted file mode 100644 (file)
index ba45b2c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
-0
-1200 2
-6 5250 2700 8400 4275
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        6825 3075 6825 3900
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        8375 3075 5275 3075 5275 2700 8375 2700 8375 3075
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        8175 4275 8175 3900 5475 3900 5475 4275 8175 4275
-4 1 0 0 0 0 20 0.0000 4 255 2940 6825 3000 DoFObjectAccessor<2,2>\001
-4 1 0 0 0 0 20 0.0000 4 195 2460 6825 4200 DoFCellAccessor<2>\001
--6
-6 1350 2700 4500 3075
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        4475 3075 1375 3075 1375 2700 4475 2700 4475 3075
-4 1 0 0 0 0 20 0.0000 4 255 2940 2925 3000 DoFObjectAccessor<1,2>\001
--6
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        6000 1875 6000 1500 3600 1500 3600 1875 6000 1875
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        9450 1875 9450 1500 7350 1500 7350 1875 9450 1875
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        3150 1875 150 1875 150 1500 3150 1500 3150 1875
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        4800 1875 2800 2700
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        1200 1875 2800 2700
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        4800 1875 6800 2700
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        8400 1875 6800 2700
-4 1 0 0 0 0 25 0.0000 4 345 7590 4800 600 Class Hierarchy for the 2-dimensional Case, Part 2\001
-4 1 0 0 0 0 20 0.0000 4 195 1995 4800 1800 DoFAccessor<2>\001
-4 1 0 0 0 0 20 0.0000 4 195 1950 8400 1800 CellAccessor<2>\001
-4 1 0 0 0 0 20 0.0000 4 255 2925 1650 1800 TriaObjectAccessor<1,2>\001
diff --git a/deal.II/doc/reports/class-hierarchies/2d-dof.jpg b/deal.II/doc/reports/class-hierarchies/2d-dof.jpg
deleted file mode 100644 (file)
index caf1cc2..0000000
Binary files a/deal.II/doc/reports/class-hierarchies/2d-dof.jpg and /dev/null differ
diff --git a/deal.II/doc/reports/class-hierarchies/2d-tria.eps b/deal.II/doc/reports/class-hierarchies/2d-tria.eps
deleted file mode 100644 (file)
index ec95b92..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: 2d-tria.eps
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Dec 19 15:59:56 1999
-%%For: wolf@adaptive (Wolfgang Bangerth)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 552 239
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--15.0 258.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Roman /Times-Roman-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 5287 m -1000 -1000 l 10437 -1000 l 10437 5287 l cp clip
- 0.06000 0.06000 sc
-% Polyline
-7.500 slw
-n 3705 1500 m 3600 1500 3600 1770 105 arcto 4 {pop} repeat
-  3600 1875 5895 1875 105 arcto 4 {pop} repeat
-  6000 1875 6000 1605 105 arcto 4 {pop} repeat
-  6000 1500 3705 1500 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-15.000 slw
-n 4800 1875 m 1800 2700 l gs col0 s gr 
-% Polyline
-n 4800 1875 m 7800 2700 l gs col0 s gr 
-% Polyline
-n 7800 3075 m 7800 3900 l gs col0 s gr 
-% Polyline
-7.500 slw
-n 6855 3900 m 6750 3900 6750 4170 105 arcto 4 {pop} repeat
-  6750 4275 8745 4275 105 arcto 4 {pop} repeat
-  8850 4275 8850 4005 105 arcto 4 {pop} repeat
-  8850 3900 6855 3900 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 380 2700 m 275 2700 275 2970 105 arcto 4 {pop} repeat
-  275 3075 3245 3075 105 arcto 4 {pop} repeat
-  3350 3075 3350 2805 105 arcto 4 {pop} repeat
-  3350 2700 380 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 6330 2700 m 6225 2700 6225 2970 105 arcto 4 {pop} repeat
-  6225 3075 9320 3075 105 arcto 4 {pop} repeat
-  9425 3075 9425 2805 105 arcto 4 {pop} repeat
-  9425 2700 6330 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-/Times-Roman-iso ff 300.00 scf sf
-4800 1800 m
-gs 1 -1 sc (TriaAccessor<2>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 375.00 scf sf
-4800 600 m
-gs 1 -1 sc (Class Hierarchy for the 2-dimensional Case, Part 1) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-1800 3000 m
-gs 1 -1 sc (TriaObjectAccessor<1,2>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-7800 3000 m
-gs 1 -1 sc (TriaObjectAccessor<2,2>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-7800 4200 m
-gs 1 -1 sc (CellAccessor<2>) dup sw pop 2 div neg 0 rm  col0 sh gr
-$F2psEnd
-rs
diff --git a/deal.II/doc/reports/class-hierarchies/2d-tria.fig b/deal.II/doc/reports/class-hierarchies/2d-tria.fig
deleted file mode 100644 (file)
index b5276f0..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
-0
-1200 2
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        6000 1875 6000 1500 3600 1500 3600 1875 6000 1875
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        4800 1875 1800 2700
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        4800 1875 7800 2700
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        7800 3075 7800 3900
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        8850 4275 8850 3900 6750 3900 6750 4275 8850 4275
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        3350 3075 275 3075 275 2700 3350 2700 3350 3075
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        9425 3075 6225 3075 6225 2700 9425 2700 9425 3075
-4 1 0 0 0 0 20 0.0000 4 195 1980 4800 1800 TriaAccessor<2>\001
-4 1 0 0 0 0 25 0.0000 4 345 7590 4800 600 Class Hierarchy for the 2-dimensional Case, Part 1\001
-4 1 0 0 0 0 20 0.0000 4 255 2925 1800 3000 TriaObjectAccessor<1,2>\001
-4 1 0 0 0 0 20 0.0000 4 255 2925 7800 3000 TriaObjectAccessor<2,2>\001
-4 1 0 0 0 0 20 0.0000 4 195 1950 7800 4200 CellAccessor<2>\001
diff --git a/deal.II/doc/reports/class-hierarchies/2d-tria.jpg b/deal.II/doc/reports/class-hierarchies/2d-tria.jpg
deleted file mode 100644 (file)
index 93a7c4d..0000000
Binary files a/deal.II/doc/reports/class-hierarchies/2d-tria.jpg and /dev/null differ
diff --git a/deal.II/doc/reports/class-hierarchies/3d-dof.eps b/deal.II/doc/reports/class-hierarchies/3d-dof.eps
deleted file mode 100644 (file)
index 7dffc7b..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: 3d-dof.eps
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Dec 19 16:33:48 1999
-%%For: wolf@adaptive (Wolfgang Bangerth)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 592 239
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--12.0 258.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Roman /Times-Roman-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 5287 m -1000 -1000 l 11062 -1000 l 11062 5287 l cp clip
- 0.06000 0.06000 sc
-% Polyline
-15.000 slw
-n 1500 1125 m 1875 2700 l 6525 1875 l gs col0 s gr 
-% Polyline
-n 3375 1575 m 5250 2700 l 6525 1875 l gs col0 s gr 
-% Polyline
-n 6525 1875 m 8400 2700 l 8925 1350 l gs col0 s gr 
-% Polyline
-7.500 slw
-n 5430 1500 m 5325 1500 5325 1770 105 arcto 4 {pop} repeat
-  5325 1875 7620 1875 105 arcto 4 {pop} repeat
-  7725 1875 7725 1605 105 arcto 4 {pop} repeat
-  7725 1500 5430 1500 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-/Times-Roman-iso ff 300.00 scf sf
-6525 1800 m
-gs 1 -1 sc (DoFAccessor<3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-% Polyline
-n 330 750 m 225 750 225 1020 105 arcto 4 {pop} repeat
-  225 1125 3120 1125 105 arcto 4 {pop} repeat
-  3225 1125 3225 855 105 arcto 4 {pop} repeat
-  3225 750 330 750 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-/Times-Roman-iso ff 300.00 scf sf
-1725 1050 m
-gs 1 -1 sc (TriaObjectAccessor<1,3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-% Polyline
-n 2130 1200 m 2025 1200 2025 1470 105 arcto 4 {pop} repeat
-  2025 1575 4920 1575 105 arcto 4 {pop} repeat
-  5025 1575 5025 1305 105 arcto 4 {pop} repeat
-  5025 1200 2130 1200 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-/Times-Roman-iso ff 300.00 scf sf
-3525 1500 m
-gs 1 -1 sc (TriaObjectAccessor<1,3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-% Polyline
-n 8055 975 m 7950 975 7950 1245 105 arcto 4 {pop} repeat
-  7950 1350 9945 1350 105 arcto 4 {pop} repeat
-  10050 1350 10050 1080 105 arcto 4 {pop} repeat
-  10050 975 8055 975 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-/Times-Roman-iso ff 300.00 scf sf
-9000 1275 m
-gs 1 -1 sc (CellAccessor<3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-% Polyline
-n 3805 2700 m 3700 2700 3700 2970 105 arcto 4 {pop} repeat
-  3700 3075 6695 3075 105 arcto 4 {pop} repeat
-  6800 3075 6800 2805 105 arcto 4 {pop} repeat
-  6800 2700 3805 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 580 2700 m 475 2700 475 2970 105 arcto 4 {pop} repeat
-  475 3075 3470 3075 105 arcto 4 {pop} repeat
-  3575 3075 3575 2805 105 arcto 4 {pop} repeat
-  3575 2700 580 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 6980 2700 m 6875 2700 6875 2970 105 arcto 4 {pop} repeat
-  6875 3075 9870 3075 105 arcto 4 {pop} repeat
-  9975 3075 9975 2805 105 arcto 4 {pop} repeat
-  9975 2700 6980 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 7155 3900 m 7050 3900 7050 4170 105 arcto 4 {pop} repeat
-  7050 4275 9645 4275 105 arcto 4 {pop} repeat
-  9750 4275 9750 4005 105 arcto 4 {pop} repeat
-  9750 3900 7155 3900 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-15.000 slw
-n 8400 3075 m 8400 3900 l gs col0 s gr 
-/Times-Roman-iso ff 300.00 scf sf
-2025 3000 m
-gs 1 -1 sc (DoFObjectAccessor<1,3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-5250 3000 m
-gs 1 -1 sc (DoFObjectAccessor<2,3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-8400 3000 m
-gs 1 -1 sc (DoFObjectAccessor<3,3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-8400 4200 m
-gs 1 -1 sc (DoFCellAccessor<3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 375.00 scf sf
-4800 600 m
-gs 1 -1 sc (Class Hierarchy for the 3-dimensional Case, Part 2) dup sw pop 2 div neg 0 rm  col0 sh gr
-$F2psEnd
-rs
diff --git a/deal.II/doc/reports/class-hierarchies/3d-dof.fig b/deal.II/doc/reports/class-hierarchies/3d-dof.fig
deleted file mode 100644 (file)
index fc810f6..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
-0
-1200 2
-6 5325 1500 7725 1875
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        7725 1875 7725 1500 5325 1500 5325 1875 7725 1875
-4 1 0 0 0 0 20 0.0000 4 195 1995 6525 1800 DoFAccessor<3>\001
--6
-6 225 750 3225 1125
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        3225 1125 225 1125 225 750 3225 750 3225 1125
-4 1 0 0 0 0 20 0.0000 4 255 2925 1725 1050 TriaObjectAccessor<1,3>\001
--6
-6 2025 1200 5025 1575
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        5025 1575 2025 1575 2025 1200 5025 1200 5025 1575
-4 1 0 0 0 0 20 0.0000 4 255 2925 3525 1500 TriaObjectAccessor<1,3>\001
--6
-6 7950 975 10050 1350
-6 7950 975 10050 1350
-6 7950 975 10050 1350
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        10050 1350 10050 975 7950 975 7950 1350 10050 1350
--6
--6
-4 1 0 0 0 0 20 0.0000 4 195 1950 9000 1275 CellAccessor<3>\001
--6
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        6800 3075 3700 3075 3700 2700 6800 2700 6800 3075
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        3575 3075 475 3075 475 2700 3575 2700 3575 3075
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        9975 3075 6875 3075 6875 2700 9975 2700 9975 3075
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        9750 4275 9750 3900 7050 3900 7050 4275 9750 4275
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        8400 3075 8400 3900
-2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
-        1500 1125 1875 2700 6525 1875
-2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
-        3375 1575 5250 2700 6525 1875
-2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
-        6525 1875 8400 2700 8925 1350
-4 1 0 0 0 0 20 0.0000 4 255 2940 2025 3000 DoFObjectAccessor<1,3>\001
-4 1 0 0 0 0 20 0.0000 4 255 2940 5250 3000 DoFObjectAccessor<2,3>\001
-4 1 0 0 0 0 20 0.0000 4 255 2940 8400 3000 DoFObjectAccessor<3,3>\001
-4 1 0 0 0 0 20 0.0000 4 195 2460 8400 4200 DoFCellAccessor<3>\001
-4 1 0 0 0 0 25 0.0000 4 345 7590 4800 600 Class Hierarchy for the 3-dimensional Case, Part 2\001
diff --git a/deal.II/doc/reports/class-hierarchies/3d-dof.jpg b/deal.II/doc/reports/class-hierarchies/3d-dof.jpg
deleted file mode 100644 (file)
index b69962d..0000000
Binary files a/deal.II/doc/reports/class-hierarchies/3d-dof.jpg and /dev/null differ
diff --git a/deal.II/doc/reports/class-hierarchies/3d-tria.eps b/deal.II/doc/reports/class-hierarchies/3d-tria.eps
deleted file mode 100644 (file)
index 75ea137..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: 3d-tria.eps
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Sun Dec 19 16:06:42 1999
-%%For: wolf@adaptive (Wolfgang Bangerth)
-%%Orientation: Portrait
-%%BoundingBox: 0 0 576 239
-%%Pages: 0
-%%BeginSetup
-%%EndSetup
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
--15.0 258.0 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Roman /Times-Roman-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 5287 m -1000 -1000 l 10837 -1000 l 10837 5287 l cp clip
- 0.06000 0.06000 sc
-% Polyline
-15.000 slw
-n 5100 1875 m 5100 2700 l gs col0 s gr 
-% Polyline
-7.500 slw
-n 380 2700 m 275 2700 275 2970 105 arcto 4 {pop} repeat
-  275 3075 3245 3075 105 arcto 4 {pop} repeat
-  3350 3075 3350 2805 105 arcto 4 {pop} repeat
-  3350 2700 380 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 3480 2700 m 3375 2700 3375 2970 105 arcto 4 {pop} repeat
-  3375 3075 6470 3075 105 arcto 4 {pop} repeat
-  6575 3075 6575 2805 105 arcto 4 {pop} repeat
-  6575 2700 3480 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 6730 2700 m 6625 2700 6625 2970 105 arcto 4 {pop} repeat
-  6625 3075 9720 3075 105 arcto 4 {pop} repeat
-  9825 3075 9825 2805 105 arcto 4 {pop} repeat
-  9825 2700 6730 2700 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-n 4005 1500 m 3900 1500 3900 1770 105 arcto 4 {pop} repeat
-  3900 1875 6195 1875 105 arcto 4 {pop} repeat
-  6300 1875 6300 1605 105 arcto 4 {pop} repeat
-  6300 1500 4005 1500 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-% Polyline
-15.000 slw
-n 5100 1875 m 1800 2700 l gs col0 s gr 
-% Polyline
-n 5100 1875 m 8200 2700 l gs col0 s gr 
-% Polyline
-n 8250 3075 m 8250 3900 l gs col0 s gr 
-% Polyline
-7.500 slw
-n 7305 3900 m 7200 3900 7200 4170 105 arcto 4 {pop} repeat
-  7200 4275 9195 4275 105 arcto 4 {pop} repeat
-  9300 4275 9300 4005 105 arcto 4 {pop} repeat
-  9300 3900 7305 3900 105 arcto 4 {pop} repeat
- cp gs col0 s gr 
-/Times-Roman-iso ff 300.00 scf sf
-1800 3000 m
-gs 1 -1 sc (TriaObjectAccessor<1,3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-8250 3000 m
-gs 1 -1 sc (TriaObjectAccessor<3,3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-5100 1800 m
-gs 1 -1 sc (TriaAccessor<3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-8250 4200 m
-gs 1 -1 sc (CellAccessor<3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 300.00 scf sf
-5025 3000 m
-gs 1 -1 sc (TriaObjectAccessor<2,3>) dup sw pop 2 div neg 0 rm  col0 sh gr
-/Times-Roman-iso ff 375.00 scf sf
-4800 600 m
-gs 1 -1 sc (Class Hierarchy for the 3-dimensional Case, Part 1) dup sw pop 2 div neg 0 rm  col0 sh gr
-$F2psEnd
-rs
diff --git a/deal.II/doc/reports/class-hierarchies/3d-tria.fig b/deal.II/doc/reports/class-hierarchies/3d-tria.fig
deleted file mode 100644 (file)
index 784a1a4..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
-0
-1200 2
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        3350 3075 275 3075 275 2700 3350 2700 3350 3075
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        6575 3075 3375 3075 3375 2700 6575 2700 6575 3075
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        9825 3075 6625 3075 6625 2700 9825 2700 9825 3075
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        6300 1875 6300 1500 3900 1500 3900 1875 6300 1875
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        5100 1875 1800 2700
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        5100 1875 8200 2700
-2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 2
-        8250 3075 8250 3900
-2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5
-        9300 4275 9300 3900 7200 3900 7200 4275 9300 4275
-2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 2
-        5100 1875 5100 2700
-4 1 0 0 0 0 20 0.0000 4 255 2925 1800 3000 TriaObjectAccessor<1,3>\001
-4 1 0 0 0 0 20 0.0000 4 255 2925 8250 3000 TriaObjectAccessor<3,3>\001
-4 1 0 0 0 0 20 0.0000 4 195 1980 5100 1800 TriaAccessor<3>\001
-4 1 0 0 0 0 20 0.0000 4 195 1950 8250 4200 CellAccessor<3>\001
-4 1 0 0 0 0 20 0.0000 4 255 2925 5025 3000 TriaObjectAccessor<2,3>\001
-4 1 0 0 0 0 25 0.0000 4 345 7590 4800 600 Class Hierarchy for the 3-dimensional Case, Part 1\001
diff --git a/deal.II/doc/reports/class-hierarchies/3d-tria.jpg b/deal.II/doc/reports/class-hierarchies/3d-tria.jpg
deleted file mode 100644 (file)
index 6aa0d0b..0000000
Binary files a/deal.II/doc/reports/class-hierarchies/3d-tria.jpg and /dev/null differ
diff --git a/deal.II/doc/reports/class-hierarchies/index.html b/deal.II/doc/reports/class-hierarchies/index.html
deleted file mode 100644 (file)
index f2c3ac5..0000000
+++ /dev/null
@@ -1,996 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"
-   "http://www.w3.org/TR/REC-html40/frameset.dtd">
-<html>
-  <head>
-    <link href="../../screen.css" rel="StyleSheet" media="screen">
-    <title>The deal.II Homepage</title>
-    <meta name="author" content="the deal.II authors <authors@dealii.org>">
-    <meta name="keywords" content="deal.II"></head>
-
-   </head>
-<BODY LINK="#0000ff" VLINK="#800080">
-
-<H1 ALIGN="CENTER">
-Description of the C++ class hierarchy for the
-accessor classes
-</H1>
-
-
-<p ALIGN="CENTER">
-  <strong> Wolfgang Bangerth, 1998, 1999, 2000</strong>
-</p>
-
-
-<p>
-The class hierarchy of the accessor classes used to retrieve and store
-data in the triangulation and degree of freedom handler objects is one
-of  the more complicated parts of  the library. It  makes heavy use of
-class templates with  integers  as template parameters  as  well as of
-explicit specialization  of classes and  member functions.  Therefore,
-it is not so  easy to  see the  connections and  inheritance relations
-within this part of the class tree; this  document tries to shed a bit
-of light onto this.
-</p>
-
-<p>
-Furthermore, it lists the member functions that can be queried to
-obtain information from an iterator.
-</p>
-
-
-<strong>Table of contents</strong>
-<ul>
-  <li> <a href="#intro" target="body">What iterators and accessors
-       are</a> 
-  <li> <a href="#tria-accessors" target="body">The triangulation
-       accessor hierarchy</a> 
-  <li> <a href="#tria-typedefs" target="body">Typedefs of the
-       Triangulation class to iterators and accessors</a>
-  <li> <a href="#tria-functions" target="body">Functions offered by
-       triangulation accessors</a> 
-  <li> <a href="#dof-accessors" target="body">The degree of freedom
-       accessor hierarchy</a> 
-  <li> <a href="#dof-typedefs" target="body">Typedefs of the
-       DoFHandler class to iterators and accessors</a>
-  <li> <a href="#dof-functions" target="body">Functions offered by
-       degree of freedom accessors</a> 
-</ul>
-
-
-<a name="intro"></a>
-<H3>
-What iterators and accessors are
-</H3>
-
-<p>
-When  using  adative finite elements,   the data structures  often are
-extremely complex, requiring   multiply indirected access  and complex
-relationships between  the different places  where data is stored. The
-traditional way  to  handle this is  to  put  all  data which  belongs
-together somehow into  a structure or  object; however, sometimes this
-can  not  be done  efficiently,    leading  to either higher    memory
-consumption (when you have to store many small data pieces and because
-you have to store a lot of pointers to other objects) or higher coding
-requirements (when you want to follow all those pointers to the object
-you desire).
-</p>
-
-<p>
-Therefore, we took  over a concept  which was already  used in the C++
-standard template library, namely iterators and accessors. An accessor
-is an object that looks like if it  had all the information stored but
-really only delegates the access to the right  places; in fact, within
-this library, accessor store almost  no information but know where  to
-get   everything   from the complex  and   nested  data structures the
-triangulation object offers. They have a simple interface which allows
-to     extract any desired   information   from  the triangulation and
-therefore makes access  much easier and safer in  three ways: first it
-performs range and parameter checking  when in debugging mode; second,
-it encapsulates the access to the real data  from the user, hiding the
-true data structures and thus allowing  them without changing the user
-programs as well as those parts of the  library which only act through
-accessors; and third by reducing the coding  errors because of reduced
-complexity, since the chains of indirect access are replaces by simple
-commands.
-</p>
-
-<p>
-Iterators are a  related concept: while  accessors act as if they were
-structures with data contained in them, iterators act  as if they were
-pointers pointing to   accessors. You can  dereference  them using the
--&gt; and * operators  as with any  other pointer, but they have  more
-functionality. Essentially, they  have overloaded ++ and -- operators,
-which  allow the next  or previous object  pointed to to be just about
-anywhere  in memory. A good introductory  example are the iterators of
-the STL  <CODE>list&lt;T&gt;</CODE> class, which  act on a linked list
-as if it  were a contiguous  array. The  iterators in  this library go
-even a step further: they do not point to different objects but rather
-tell  the   associated  accessor   object which   data   to  look   at
-next.
-</p>
-
-<p>
-Additionally, there  are different  versions  of the   iterators which
-behave  differently   when  being  incremented or   decremented: while
-<I>raw</I> iterators let the  associated accessor point  to any of the
-objects it   is  made for,  <I>normal</I>  iterators   always point to
-objects which are in use.  Usually, you will not want  to see cells or
-lines which are there but are unused by the triangulation (these cells
-are  somewhat like  holes in  the   arrays of the triangulation;  such
-things happen  when unrefining a cell,  the freed memory  is then kept
-for a while  because of better efficiency), so  you will  almost never
-want to use raw iterators;  they are mostly there  for internal use in
-the    library. Normal iterators are   almost  like raw iterators, but
-whenever you call the ++  or -- operator,  the  look at what they  are
-pointing at  and skip all unused  elements by increasing or decreasing
-the pointer as often as necessary to reach the next used object.
-</p>
-
-<p>
-Finally,    there are <I>active</I>  iterators,    which are the  most
-important ones. They  are  like normal   iterators but  only point  to
-active cells or lines.  By active we  mean that they have no children;
-in  the context in which this  library is used,  this is equivalent to
-the  fact   that   we  do  computations   on these   cells,   lines or
-whatever. Active iterators  are normal iterators  which  skip over all
-non-active cells, lines, etc when being incremented or decremented.
-</p>
-
-
-
-<a name="tria-accessors"></a>
-<H3>
-The triangulation accessor hierarchy
-</H3>
-
-<p>
-The triangulation accessors are used to retrieve and store data in the
-triangulation.  There  exist accessors  for  lines  in one and  higher
-dimensions, accessors for  quads in two  and higher dimensions, and so
-on. The general naming scheme is as follows:
-<ul>
-<li> <code>TriaAccessor&lt;dim&gt;</code> is a general base class
-     which is of not much interest.
-<li> <code>TriaObjectAccessor&lt;objectdim,spacedim&gt;</code> denotes
-     an accessor for an object with dimension
-     <code>objectdim</code> in a <code>spacedim</code> dimensional
-     space. It is derived from <code>TriaAccessor&lt;spacedim&gt;</code>.
-<li> <code>CellAccessor&lt;dim&gt;</code> presents the special
-     properties that a cell has. It is therefore derived from
-     <code>TriaObjectAccessor&lt;spacedimdim,spacedim&gt;</code>.
-</ul>
-</p>
-
-<p>
-Their inheritance trees in the different space dimensions therefore
-look like this:
-</p>
-
-<hr>
-
-<CENTER>
-<IMG SRC="1d-tria.jpg" ALIGN="CENTER" WIDTH="80%"> 
-</CENTER>
-<p>
-
-<hr>
-
-<CENTER>
-<IMG SRC="2d-tria.jpg" ALIGN="CENTER" WIDTH="80%"> 
-</CENTER>
-<p>
-
-<hr>
-
-<CENTER>
-<IMG SRC="3d-tria.jpg" ALIGN="CENTER" WIDTH="80%"> 
-</CENTER>
-<p>
-
-<hr>
-
-<p>
-Some of the data is only  useful if an object is  a cell. For example,
-neighborship is only accessible for cells,  while faces (e.g. lines in
-2D) can't access their neighbors (neither the  adjacent cells, nor the
-other   faces it touches).    Therefore, the CellAccessor classes  are
-derived from whatever  object a cell  is in the respective  dimension,
-i.e. from lines  in 1D, from quads  in 2D,  and  so on. 
-</p>
-
-
-
-<a name="tria-typedefs"></a>
-<H4>
-Typedefs of the Triangulation class to iterators and accessors
-</H4>
-
-<p>
-The <CODE>Triangulation<1></CODE> class declares the following data
-types which involve accessors:
-<PRE>
-    typedef TriaRawIterator   <1,CellAccessor<1> >    raw_line_iterator;
-    typedef TriaIterator      <1,CellAccessor<1> >        line_iterator;
-    typedef TriaActiveIterator<1,CellAccessor<1> > active_line_iterator;
-
-    typedef    raw_line_iterator    raw_cell_iterator;
-    typedef        line_iterator        cell_iterator;
-    typedef active_line_iterator active_cell_iterator; 
-</PRE>
-Since lines are cells in one space dimension, all line iterators are
-cell iterators as well.
-</p>
-
-<p>
-In two space dimensions, the following types are declared by the
-<CODE>Triangulation<2></CODE> class:
-<PRE>
-    typedef TriaRawIterator   <2,TriaObjectAccessor<1, 2> >    raw_line_iterator;
-    typedef TriaIterator      <2,TriaObjectAccessor<1, 2> >        line_iterator;
-    typedef TriaActiveIterator<2,TriaObjectAccessor<1, 2> > active_line_iterator;
-    
-    typedef TriaRawIterator   <2,CellAccessor<2> >    raw_quad_iterator;
-    typedef TriaIterator      <2,CellAccessor<2> >        quad_iterator;
-    typedef TriaActiveIterator<2,CellAccessor<2> > active_quad_iterator;
-
-    typedef    raw_quad_iterator    raw_cell_iterator;
-    typedef        quad_iterator        cell_iterator;
-    typedef active_quad_iterator active_cell_iterator;
-
-    typedef    raw_line_iterator    raw_face_iterator;
-    typedef        line_iterator        face_iterator;
-    typedef active_line_iterator active_face_iterator;    
-</PRE>
-Since in this space dimension, quads are cells and lines are the faces
-of  cells, the  appropriate face  and  cell iterators  are declared in
-terms of the underlying accessor types.
-</p>
-
-
-<p>
-In three space dimensions, the following types are declared by the
-<CODE>Triangulation<3></CODE> class:
-<PRE>
-    typedef TriaRawIterator   <3,TriaObjectAccessor<1, 3> >    raw_line_iterator;
-    typedef TriaIterator      <3,TriaObjectAccessor<1, 3> >        line_iterator;
-    typedef TriaActiveIterator<3,TriaObjectAccessor<1, 3> > active_line_iterator;
-    
-    typedef TriaRawIterator   <3,TriaObjectAccessor<2, 3> >    raw_quad_iterator;
-    typedef TriaIterator      <3,TriaObjectAccessor<2, 3> >        quad_iterator;
-    typedef TriaActiveIterator<3,TriaObjectAccessor<2, 3> > active_quad_iterator;
-
-    typedef TriaRawIterator   <3,CellAccessor<3> >    raw_hex_iterator;
-    typedef TriaIterator      <3,CellAccessor<3> >        hex_iterator;
-    typedef TriaActiveIterator<3,CellAccessor<3> > active_hex_iterator;
-
-    typedef    raw_hex_iterator    raw_cell_iterator;
-    typedef        hex_iterator        cell_iterator;
-    typedef active_hex_iterator active_cell_iterator;
-
-    typedef    raw_quad_iterator    raw_face_iterator;
-    typedef        quad_iterator        face_iterator;
-    typedef active_quad_iterator active_face_iterator;    
-</PRE>
-Since in this space dimension, hexes are cells and quads are the faces
-of  cells, the  appropriate face  and  cell iterators  are declared in
-terms of the underlying accessor types.
-</p>
-
-
-
-<a name="tria-functions"></a>
-<h4>Functions offered by triangulation accessors</h4>
-
-<p>
-We briefly state a short list of the functions offered by the
-triangulation accessors. For a more complete discussion of these
-functions, please refer to the online 
-<a href="../../documentation.html" target="body">API
-documentation of the `grid' classes</a>. These functions can be
-accessed by <code>iterator->function()</code> if <code>iterator</code>
-is a cell-, face-, hex-, quad-, or line-iterator. Some functions are
-not available for all iterator types, which is noted for the
-individual entries.
-</p>
-
-<dl>
-  <dt><em>
-  level ()
-  </em></dt>
-
-  <dd>
-  Return the hierarchical refinement level on 
-  which this object lives.
-  </dd>
-
-
-  <dt><em>
-  index ()
-  </em></dt>
-
-  <dd>
-  Return the index within the hierarchical refinement level on 
-  which this object lives.
-  </dd>
-
-
-  <dt><em>
-  get_triangulation ()
-  </em></dt>
-
-  <dd>
-  Return a reference to the triangulation to which this object belongs.
-  </dd>
-
-
-  <dt><em>
-  vertex_index (vertex_number)
-  </em></dt>
-
-  <dd>
-  Return the global index of one of the vertices of this object.
-  </dd>
-
-
-  <dt><em>
-  vertex (vertex_number)
-  </em></dt>
-
-  <dd>
-  Return the position of the respective vertex in space.
-  </dd>
-
-
-  <dt><em>
-  used ()
-  </em></dt>
-
-  <dd>
-  Return whether the object is used. The return value is
-  <code>true</code> for all iterators that are either normal iterators
-  or active iterators, only raw iterators can return
-  <code>false</code>. Since raw iterators are only used in the
-  interiors of the library, you will not usually need this function.
-  </dd>
-
-
-  <dt><em>
-  set_used () / clear_used ()
-  </em></dt>
-
-  <dd>
-  Set or clear the flag that describes whether the object is used by
-  the triangulation. Only for internal use.
-  </dd>
-
-
-  <dt><em>
-  user_flag_set ()
-  </em></dt>
-
-  <dd>
-  Return whether the user flag is set.
-  </dd>
-
-
-  <dt><em>
-  set_user_flag () / clear_user_flag ()
-  </em></dt>
-
-  <dd>
-  Set or clear the flag that might be used by a user to indicate that
-  something should happen with this object.
-  </dd>
-
-
-  <dt><em>
-  recursively_set_user_flag () / recursively_clear_user_flag ()
-  </em></dt>
-
-  <dd>
-  Set or clear the user flag for this cell and all its descendants.
-  </dd>
-
-
-  <dt><em>
-  user_pointer ()
-  </em></dt>
-
-  <dd>
-  Query the pointer belonging to this object which may be used by
-  the user to store additional information with this object.
-  </dd>
-
-
-  <dt><em>
-  set_user_pointer () / clear_user_pointer ()
-  </em></dt>
-
-  <dd>
-  Set or clear a pointer belonging to this object which may be used by
-  the user to store additional information with this object.
-  </dd>
-
-
-  <dt><em>
-  child (child_number)
-  </em></dt>
-
-  <dd>
-  Return an iterator to one of the children of this object.
-  </dd>
-
-
-  <dt><em>
-  child_index (child_number)
-  </em></dt>
-
-  <dd>
-  Return the index of the child within the next finer level of the
-  triangulation. 
-  </dd>
-
-
-  <dt><em>
-  set_children (index), clear_children ()
-  </em></dt>
-
-  <dd>
-  Only for internal use.
-  </dd>
-
-
-  <dt><em>
-  has_children ()
-  </em></dt>
-
-  <dd>
-  Return whether an object has children, i.e. whether it is further
-  refined. If it has children, then it is not active.
-  </dd>
-
-
-  <dt><em>
-  max_refinement_depth ()
-  </em></dt>
-
-  <dd>
-  Return how often this cell or one of its children is refined.
-  </dd>
-
-
-  <dt><em>
-  boundary_indicator
-  </em></dt>
-
-  <dd>
-  Return the number of the boundary at which this object lies, if the
-  object has a dimension less than the space dimension.
-  </dd>
-
-
-  <dt><em>
-  set_boundary_indicator (boundary_id)
-  </em></dt>
-
-  <dd>
-  Set the number of the boundary to which this object belongs.
-  </dd>
-
-
-  <dt><em>
-  at_boundary ()
-  </em></dt>
-
-  <dd>
-  Return whether this object is at the boundary (if the dimension of
-  the object is less than the space dimension), or one of its faces is
-  at the boundary for cells.
-  </dd>
-
-
-  <dt><em>
-  has_boundary_lines ()
-  </em></dt>
-
-  <dd>
-  Return whether one of the lines bounding this cell is at the
-  boundary. For 1d and 2d this is equivalent to <em>at_boundary</em>,
-  in 3d, there are cases where bounding lines of a hex are at the
-  boundary, while the faces are in the interior. (Only for cell
-  iterators.)
-  </dd>
-
-
-  <dt><em>
-  diameter ()
-  </em></dt>
-
-  <dd>
-  Return the diameter of the object.
-  </dd>
-
-
-  <dt><em>
-  center ()
-  </em></dt>
-
-  <dd>
-  Return the coordinates of the center of the object.
-  </dd>
-
-
-  <dt><em>
-  barycenter ()
-  </em></dt>
-
-  <dd>
-  Return the coordinates of the barycenter of the object.
-  </dd>
-
-
-  <dt><em>
-  measure ()
-  </em></dt>
-
-  <dd>
-  Return the length, area, or volume of an object, depending on the
-  dimension of the object.
-  </dd>
-
-
-  <dt><em>
-  point_inside (point)
-  </em></dt>
-
-  <dd>
-  Return whether the given point is inside this cell, or rather the
-  (bi-, tri-)linearly mapped image of the unit cell with the vertices
-  of this cell. (Only for cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  number_of_children ()
-  </em></dt>
-
-  <dd>
-  Accumulated number of children and their children.
-  </dd>
-
-
-  <dt><em>
-  line (line_number)
-  </em></dt>
-
-  <dd>
-  Return an iterator to one of the bounding lines of this object. (Only
-  for iterators to quadrilaterals and hexahedra.)
-  </dd>
-
-
-  <dt><em>
-  line_index (line_number)
-  </em></dt>
-
-  <dd>
-  Return the index of one of the bounding lines of this object. The
-  level index is the same as that of the present object. (Only
-  for iterators to quadrilaterals and hexahedra.)
-  </dd>
-
-
-  <dt><em>
-  quad (quad_number)
-  </em></dt>
-
-  <dd>
-  Return an iterator to one of the bounding quadrilaterals of this
-  object. (Only for iterators to hexahedra.)
-  </dd>
-
-
-  <dt><em>
-  line_index (line_number)
-  </em></dt>
-
-  <dd>
-  Return the index of one of the bounding quadrilaterals of this
-  object. The level index is the same as that of the present
-  object. (Only for iterators to hexahedra.)
-  </dd>
-
-
-  <dt><em>
-  neighbor (neighbor_number)
-  </em></dt>
-
-  <dd>
-  Return iterator to one of the neighbors. (Only for cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  neighbor_index (neighbor_number) / neighbor_level (neighbor_number)
-  </em></dt>
-
-  <dd>
-  Return number and level of one of the neighbors. (Only for cell
-  iterators.)
-  </dd>
-
-
-  <dt><em>
-  set_neighbor ()
-  </em></dt>
-
-  <dd>
-  Set a neighbor. Only for internal use. (Only for cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  neighbor_of_neighbor (neighbor_number)
-  </em></dt>
-
-  <dd>
-  Return the how-manyth neighbor the present cell is of the neighbor
-  specified by the argument. (Only for cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  at_boundary (face_number)
-  </em></dt>
-
-  <dd>
-  Return whether this cell's given face is at the boundary. (Only for
-  cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  refine_flag_set ()
-  </em></dt>
-
-  <dd>
-  Return whether the refinement flag is set or not for the present
-  cell. (Only for cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  set_refine_flag () / clear_refine_flag ()
-  </em></dt>
-
-  <dd>
-  Set/clear the flag indicating refinement. (Only for cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  coarsen_flag_set ()
-  </em></dt>
-
-  <dd>
-  Query whether the flag indicating coarsening is set for this
-  object. (Only for cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  set_coarsen_flag () / claer_coarsen_flag ()
-  </em></dt>
-
-  <dd>
-  Set/clear the flag indicating coarsening. (Only for cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  face (face_number)
-  </em></dt>
-
-  <dd>
-  Return an iterator to one of the faces of this cell, if dimension is
-  greater than one. (Only for cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  material_id ()
-  </em></dt>
-
-  <dd>
-  Return the material number of this cell. (Only for cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  set_material_id (id)
-  </em></dt>
-
-  <dd>
-  Set the material number of this cell. (Only for cell iterators.)
-  </dd>
-
-
-  <dt><em>
-  active ()
-  </em></dt>
-
-  <dd>
-  Return whether this cell is active, i.e. has no children. (Only for
-  cell iterators.)
-  </dd>
-</dl>
-
-
-
-<a name="dof-accessors"></a>
-<H3>
-The degree of freedom accessor hierarchy
-</H3>
-
-<p>
-The DoFAccessor classes    provide access to  the   degree  of freedom
-information associated  with  cells,   lines, etc.   The   inheritance
-relationship is much the    same  as for the   triangulation  accessor
-classes, as can  be seen from the  following  pictures.
-
-<hr>
-
-<CENTER>
-<IMG SRC="1d-dof.jpg" ALIGN="CENTER" WIDTH="80%"> 
-</CENTER>
-<p>
-
-
-<hr>
-
-<CENTER>
-<IMG SRC="2d-dof.jpg" ALIGN="CENTER" WIDTH="80%"> 
-</CENTER>
-<p>
-
-
-<hr>
-
-<CENTER>
-<IMG SRC="3d-dof.jpg" ALIGN="CENTER" WIDTH="80%"> 
-</CENTER>
-<p>
-
-<hr>
-
-<p>
-The main difference to the triangulation accessor hierarchy is that we
-want the DoF accessors to provide the information about the degrees of
-freedom, but for convenience also that of the triangulation. This way,
-we can get all the information from one object rather than needing two
-which  work in  parallel, and  the  class hierarchy  shown above  does
-exactly this.
-</p>
-
-<p>
-For the named reason, it is necessary to derive the
-<code>DoFObjectAccessor&lt;1,dim&gt;</code> from the
-<code>TriaObjectAccessor&lt;1,dim&gt;</code> class of the
-triangulation accessor hierarchy, as well as the
-<code>DoFObjectAccessor&lt;2,dim&gt;</code> from the
-<code>TriaObjectAccessor&lt;2,dim&gt;</code>. However, we would also
-like to include the functionality added by the CellAccessor class;
-this is done through some template magic: when in one space dimension,
-the <code>DoFObjectAccessor&lt;1,1&gt;</code> is derived from
-CellAccessor&lt;1&gt;, while when in higher dimensions, it is derived
-from <code>DoFObjectAccessor&lt;1,dim&gt;</code>; the same applies for
-the <code>DoFObjectAccessor&lt;2,dim&gt;</code> class.  Note that this
-way, CellAccessor is always a base class to DoFCellAccessor and the
-inheritance lattice is dimension dependant; the exact way of achieving
-this is complicated but not of interest here.
-</p>
-
-
-<a name="dof-typedefs"></a>
-<H4>
-Typedefs of the DoFHandler class to iterators and accessors
-</H4>
-
-<p>
-The typedefs done by the DoFHandler class are much alike those done by
-the Triangulation class. They could be summarized as follows:
-</p>
-
-<p>
-For one space dimension:
-<PRE>
-    typedef TriaRawIterator   <1,DoFCellAccessor<1> >    raw_line_iterator;
-    typedef TriaIterator      <1,DoFCellAccessor<1> >        line_iterator;
-    typedef TriaActiveIterator<1,DoFCellAccessor<1> > active_line_iterator;
-
-    typedef    raw_line_iterator    raw_cell_iterator;
-    typedef        line_iterator        cell_iterator;
-    typedef active_line_iterator active_cell_iterator; 
-</PRE>
-Since lines are cells in one space dimension, all line iterators are
-cell iterators as well.
-</p>
-
-<p>
-For two space dimensions:
-<PRE>
-    typedef TriaRawIterator   <2,DoFObjectAccessor<1, 2> >    raw_line_iterator;
-    typedef TriaIterator      <2,DoFObjectAccessor<1, 2> >        line_iterator;
-    typedef TriaActiveIterator<2,DoFObjectAccessor<1, 2> > active_line_iterator;
-    
-    typedef TriaRawIterator   <2,DoFCellAccessor<2> >    raw_quad_iterator;
-    typedef TriaIterator      <2,DoFCellAccessor<2> >        quad_iterator;
-    typedef TriaActiveIterator<2,DoFCellAccessor<2> > active_quad_iterator;
-
-    typedef    raw_quad_iterator    raw_cell_iterator;
-    typedef        quad_iterator        cell_iterator;
-    typedef active_quad_iterator active_cell_iterator;
-
-    typedef    raw_line_iterator    raw_face_iterator;
-    typedef        line_iterator        face_iterator;
-    typedef active_line_iterator active_face_iterator;    
-</PRE>
-</p>
-
-<p>
-For three space dimensions:
-<PRE>
-    typedef TriaRawIterator   <3,DoFObjectAccessor<1, 3> >    raw_line_iterator;
-    typedef TriaIterator      <3,DoFObjectAccessor<1, 3> >        line_iterator;
-    typedef TriaActiveIterator<3,DoFObjectAccessor<1, 3> > active_line_iterator;
-
-    typedef TriaRawIterator   <3,DoFObjectAccessor<2, 3> >    raw_quad_iterator;
-    typedef TriaIterator      <3,DoFObjectAccessor<2, 3> >        quad_iterator;
-    typedef TriaActiveIterator<3,DoFObjectAccessor<2, 3> > active_quad_iterator;
-
-    typedef TriaRawIterator   <3,DoFCellAccessor<3> >         raw_hex_iterator;
-    typedef TriaIterator      <3,DoFCellAccessor<3> >             hex_iterator;
-    typedef TriaActiveIterator<3,DoFCellAccessor<3> >      active_hex_iterator;
-
-    typedef    raw_hex_iterator    raw_cell_iterator;
-    typedef        hex_iterator        cell_iterator;
-    typedef active_hex_iterator active_cell_iterator;
-
-    typedef    raw_quad_iterator    raw_face_iterator;
-    typedef        quad_iterator        face_iterator;
-    typedef active_quad_iterator active_face_iterator;    
-</PRE>
-</p>
-
-
-
-<a name="dof-functions"></a>
-<h4>Functions offered by degree of freedom accessors</h4>
-
-<p>
-Since degree of freedom accessors are derived from triangulation
-accessors, they inherit the functionality of these accessors, but add
-some of their own. We only list the additional functionality
-below. For a full reference, including data types of parameters and
-return values, please refer to the general
-<a href="../../documentation.html" target="body">API
-documentation of the `DoF' classes</a>.
-</p>
-
-
-<dl>
-  <dt><em>
-  dof_index (dof_number)
-  </em></dt>
-
-  <dd>
-  Return the global index of one of the DoFs on this object.
-  </dd>
-
-
-  <dt><em>
-  set_dof_index (dof_number, index)
-  </em></dt>
-
-  <dd>
-  Set the index of a DoF. Only for internal use.
-  </dd>
-
-
-  <dt><em>
-  vertex_dof_index (vertex_number, dof_number)
-  </em></dt>
-
-  <dd>
-  Return the index of one of the DoFs on one of the vertices of this
-  object.
-  </dd>
-
-
-  <dt><em>
-  set_vertex_dof_index (...)
-  </em></dt>
-
-  <dd>
-  Set the vertex DoF index. Only for internal use.
-  </dd>
-
-
-  <dt><em>
-  get_dof_indices (vector_of_indices)
-  </em></dt>
-
-  <dd>
-  Return a vector of the indices of the DoFs on this object.
-  </dd>
-
-
-  <dt><em>
-  get_dof_values (global_values, local_values)
-  </em></dt>
-
-  <dd>
-  Extract and return the values of the DoFs on this object from a data
-  vector defined on all DoFs.
-  </dd>
-
-
-  <dt><em>
-  set_dof_values (local_values, global_values)
-  </em></dt>
-
-  <dd>
-  Reverse operation: take values of DoFs on this object, and set them
-  into a global data vector.
-  </dd>
-
-
-  <dt><em>
-  distribute_local_to_global (local_source, global_destination)  
-  </em></dt>
-
-  <dd>
-  Add the elements of local_source, defining values of the degrees of
-  freedom on this object, to the elements of the global data
-  vector. The two parameters may be either vectors or matrices.
-  </dd>
-
-
-  <dt><em>
-  get_interpolated_dof_values (global_values, local_interpolation)
-  </em></dt>
-
-  <dd>
-  Interpolate the global field to this cell. If this cell is active,
-  then this is the restriction of the global field to this cell,
-  but when this cell is not active then it is the interpolation of the
-  restriction of the field to the child cells and the interpolation to
-  the present one. (For cell iterators only.)
-  </dd>
-
-
-  <dt><em>
-  set_dof_values_by_interpolation (local_values, global_interpolation)
-  </em></dt>
-  
-  <dd>
-  Inverse operation: interpolate the local values to the children (if
-  this cell is not active) and set the respective values in the global
-  vector. (For cell iterators only.)
-  </dd>
-</dl>
-
-
-<HR>
-
-<div ALIGN="RIGHT">
-Wolfgang Bangerth, 1998, 1999, 2000
-</div>
-<p>&nbsp;</P></BODY>
-</HTML>
-
-
-
-</BODY>
-</HTML>
-
diff --git a/deal.II/doc/reports/codimension-one/desimone-heltai-manigrasso.pdf b/deal.II/doc/reports/codimension-one/desimone-heltai-manigrasso.pdf
deleted file mode 100644 (file)
index d64a5e5..0000000
Binary files a/deal.II/doc/reports/codimension-one/desimone-heltai-manigrasso.pdf and /dev/null differ
index f7ca37206ead1c0866d4e974b0af7582e89374dd..9a2246b474d9f56230d5b0be99ff400e3619cab6 100644 (file)
@@ -24,7 +24,7 @@
   <ul>
     <li>
       A brief report about the classes involved in the
-      <a href="class-hierarchies/index.html"
+      <a href="http://www.dealii.org/reports/class-hierarchies/index.html"
          target="body">iterators and accessors</a>
       used to access cells in the triangulations and the data
       thereon, such as their geometry, the number of the
@@ -35,7 +35,7 @@
     </li>
 
     <li>
-      A brief report on <a href="mapping_q/index.html"
+      A brief report on <a href="http://www.dealii.org/reports/mapping_q/index.html"
                           target="body">mapping</a> functions of higher polynomial
       degrees (by Ralf Hartmann). These allow the realisation
       of higher order boundary approximations. This report
 
     <li>
       A report on
-      <a href="assemble/assemble.pdf"
+      <a href="http://www.dealii.org/reports/assemble/assemble.pdf"
          target="body">assembling matrices</a> (by Wolfgang
       Bangerth). This report looks in particular at how
       matrices are assembled for vector-valued problems, and
       how things change if vector-valued finite elements are
       used for which the shape functions have more than one
       non-zero vector component, such as Nedelec or
-      Raviart-Thomas elements. There are printable
-      versions of the report
-      <a href="assemble/assemble.ps"
-         target="body">in postscript</a> and
-      <a href="assemble/assemble.pdf"
-         target="body">PDF format</a>.
+      Raviart-Thomas elements.
     </li>
 
     <li>
       A very detailed report on
-      <a href="nedelec/nedelec.pdf"
+      <a href="http://www.dealii.org/reports/nedelec/nedelec.pdf"
          target="body">Nedelec elements</a> (by Anna
       Schneebeli, University of Basel, Switzerland). It
       explains the construction and application of Nedelec
       edge elements for H-curl spaces, as used, for example,
       in the numerical solution of the Maxwell equations. It
       also gives numerical results obtained with deal.II.
-      There is also a <a href="nedelec/nedelec.ps"
-                        target="body">postscript version of the report</a>.
     </li>
 
     <li>
       A report on the
-      <a href="codimension-one/desimone-heltai-manigrasso.pdf"
+      <a href="http://www.dealii.org/reports/codimension-one/desimone-heltai-manigrasso.pdf"
          target="body">codimension one</a> capabilities of the library
          (by Antonio DeSimone, Luca Heltai and Cataldo Manigrasso,
          SISSA, Trieste, Italy). It explains in detail how to use the
diff --git a/deal.II/doc/reports/mapping_q/img1.gif b/deal.II/doc/reports/mapping_q/img1.gif
deleted file mode 100644 (file)
index 3afa2db..0000000
Binary files a/deal.II/doc/reports/mapping_q/img1.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img10.gif b/deal.II/doc/reports/mapping_q/img10.gif
deleted file mode 100644 (file)
index f1b1253..0000000
Binary files a/deal.II/doc/reports/mapping_q/img10.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img11.gif b/deal.II/doc/reports/mapping_q/img11.gif
deleted file mode 100644 (file)
index f3a7034..0000000
Binary files a/deal.II/doc/reports/mapping_q/img11.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img12.gif b/deal.II/doc/reports/mapping_q/img12.gif
deleted file mode 100644 (file)
index 7e40605..0000000
Binary files a/deal.II/doc/reports/mapping_q/img12.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img13.gif b/deal.II/doc/reports/mapping_q/img13.gif
deleted file mode 100644 (file)
index c7a3aea..0000000
Binary files a/deal.II/doc/reports/mapping_q/img13.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img14.gif b/deal.II/doc/reports/mapping_q/img14.gif
deleted file mode 100644 (file)
index e9c184c..0000000
Binary files a/deal.II/doc/reports/mapping_q/img14.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img15.gif b/deal.II/doc/reports/mapping_q/img15.gif
deleted file mode 100644 (file)
index 0bab0d5..0000000
Binary files a/deal.II/doc/reports/mapping_q/img15.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img16.gif b/deal.II/doc/reports/mapping_q/img16.gif
deleted file mode 100644 (file)
index 655453f..0000000
Binary files a/deal.II/doc/reports/mapping_q/img16.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img17.gif b/deal.II/doc/reports/mapping_q/img17.gif
deleted file mode 100644 (file)
index d16cfa2..0000000
Binary files a/deal.II/doc/reports/mapping_q/img17.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img18.gif b/deal.II/doc/reports/mapping_q/img18.gif
deleted file mode 100644 (file)
index 273a7d4..0000000
Binary files a/deal.II/doc/reports/mapping_q/img18.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img19.gif b/deal.II/doc/reports/mapping_q/img19.gif
deleted file mode 100644 (file)
index 7254199..0000000
Binary files a/deal.II/doc/reports/mapping_q/img19.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img2.gif b/deal.II/doc/reports/mapping_q/img2.gif
deleted file mode 100644 (file)
index 91c5ff7..0000000
Binary files a/deal.II/doc/reports/mapping_q/img2.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img20.gif b/deal.II/doc/reports/mapping_q/img20.gif
deleted file mode 100644 (file)
index 5535696..0000000
Binary files a/deal.II/doc/reports/mapping_q/img20.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img21.gif b/deal.II/doc/reports/mapping_q/img21.gif
deleted file mode 100644 (file)
index 0398f35..0000000
Binary files a/deal.II/doc/reports/mapping_q/img21.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img22.gif b/deal.II/doc/reports/mapping_q/img22.gif
deleted file mode 100644 (file)
index de29603..0000000
Binary files a/deal.II/doc/reports/mapping_q/img22.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img23.gif b/deal.II/doc/reports/mapping_q/img23.gif
deleted file mode 100644 (file)
index af5f661..0000000
Binary files a/deal.II/doc/reports/mapping_q/img23.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img24.gif b/deal.II/doc/reports/mapping_q/img24.gif
deleted file mode 100644 (file)
index 8725fa8..0000000
Binary files a/deal.II/doc/reports/mapping_q/img24.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img25.gif b/deal.II/doc/reports/mapping_q/img25.gif
deleted file mode 100644 (file)
index 4a18c7e..0000000
Binary files a/deal.II/doc/reports/mapping_q/img25.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img26.gif b/deal.II/doc/reports/mapping_q/img26.gif
deleted file mode 100644 (file)
index 3a9ba08..0000000
Binary files a/deal.II/doc/reports/mapping_q/img26.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img27.gif b/deal.II/doc/reports/mapping_q/img27.gif
deleted file mode 100644 (file)
index 99087f0..0000000
Binary files a/deal.II/doc/reports/mapping_q/img27.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img28.gif b/deal.II/doc/reports/mapping_q/img28.gif
deleted file mode 100644 (file)
index 707c7df..0000000
Binary files a/deal.II/doc/reports/mapping_q/img28.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img29.gif b/deal.II/doc/reports/mapping_q/img29.gif
deleted file mode 100644 (file)
index edd5bfb..0000000
Binary files a/deal.II/doc/reports/mapping_q/img29.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img3.gif b/deal.II/doc/reports/mapping_q/img3.gif
deleted file mode 100644 (file)
index 5535696..0000000
Binary files a/deal.II/doc/reports/mapping_q/img3.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img30.gif b/deal.II/doc/reports/mapping_q/img30.gif
deleted file mode 100644 (file)
index cd04d32..0000000
Binary files a/deal.II/doc/reports/mapping_q/img30.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img31.gif b/deal.II/doc/reports/mapping_q/img31.gif
deleted file mode 100644 (file)
index e9a9003..0000000
Binary files a/deal.II/doc/reports/mapping_q/img31.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img32.gif b/deal.II/doc/reports/mapping_q/img32.gif
deleted file mode 100644 (file)
index 38306f0..0000000
Binary files a/deal.II/doc/reports/mapping_q/img32.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img33.gif b/deal.II/doc/reports/mapping_q/img33.gif
deleted file mode 100644 (file)
index b8d2b50..0000000
Binary files a/deal.II/doc/reports/mapping_q/img33.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img34.gif b/deal.II/doc/reports/mapping_q/img34.gif
deleted file mode 100644 (file)
index aea6c3e..0000000
Binary files a/deal.II/doc/reports/mapping_q/img34.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img35.gif b/deal.II/doc/reports/mapping_q/img35.gif
deleted file mode 100644 (file)
index 2dbcd81..0000000
Binary files a/deal.II/doc/reports/mapping_q/img35.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img36.gif b/deal.II/doc/reports/mapping_q/img36.gif
deleted file mode 100644 (file)
index f8bfdf0..0000000
Binary files a/deal.II/doc/reports/mapping_q/img36.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img37.gif b/deal.II/doc/reports/mapping_q/img37.gif
deleted file mode 100644 (file)
index 65d5c07..0000000
Binary files a/deal.II/doc/reports/mapping_q/img37.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img38.gif b/deal.II/doc/reports/mapping_q/img38.gif
deleted file mode 100644 (file)
index 231b0e8..0000000
Binary files a/deal.II/doc/reports/mapping_q/img38.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img39.gif b/deal.II/doc/reports/mapping_q/img39.gif
deleted file mode 100644 (file)
index ff944c6..0000000
Binary files a/deal.II/doc/reports/mapping_q/img39.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img4.gif b/deal.II/doc/reports/mapping_q/img4.gif
deleted file mode 100644 (file)
index 3ebda31..0000000
Binary files a/deal.II/doc/reports/mapping_q/img4.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img40.gif b/deal.II/doc/reports/mapping_q/img40.gif
deleted file mode 100644 (file)
index b4a8f2a..0000000
Binary files a/deal.II/doc/reports/mapping_q/img40.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img41.gif b/deal.II/doc/reports/mapping_q/img41.gif
deleted file mode 100644 (file)
index d95a0f0..0000000
Binary files a/deal.II/doc/reports/mapping_q/img41.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img42.gif b/deal.II/doc/reports/mapping_q/img42.gif
deleted file mode 100644 (file)
index d28a084..0000000
Binary files a/deal.II/doc/reports/mapping_q/img42.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img43.gif b/deal.II/doc/reports/mapping_q/img43.gif
deleted file mode 100644 (file)
index b3d5a1a..0000000
Binary files a/deal.II/doc/reports/mapping_q/img43.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img44.gif b/deal.II/doc/reports/mapping_q/img44.gif
deleted file mode 100644 (file)
index 86cc117..0000000
Binary files a/deal.II/doc/reports/mapping_q/img44.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img45.gif b/deal.II/doc/reports/mapping_q/img45.gif
deleted file mode 100644 (file)
index 09dcfea..0000000
Binary files a/deal.II/doc/reports/mapping_q/img45.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img46.gif b/deal.II/doc/reports/mapping_q/img46.gif
deleted file mode 100644 (file)
index 1e1590e..0000000
Binary files a/deal.II/doc/reports/mapping_q/img46.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img47.gif b/deal.II/doc/reports/mapping_q/img47.gif
deleted file mode 100644 (file)
index 0239071..0000000
Binary files a/deal.II/doc/reports/mapping_q/img47.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img48.gif b/deal.II/doc/reports/mapping_q/img48.gif
deleted file mode 100644 (file)
index 15674c4..0000000
Binary files a/deal.II/doc/reports/mapping_q/img48.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img49.gif b/deal.II/doc/reports/mapping_q/img49.gif
deleted file mode 100644 (file)
index ad5cc2d..0000000
Binary files a/deal.II/doc/reports/mapping_q/img49.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img5.gif b/deal.II/doc/reports/mapping_q/img5.gif
deleted file mode 100644 (file)
index 95d2ce6..0000000
Binary files a/deal.II/doc/reports/mapping_q/img5.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img50.gif b/deal.II/doc/reports/mapping_q/img50.gif
deleted file mode 100644 (file)
index 6f0caf5..0000000
Binary files a/deal.II/doc/reports/mapping_q/img50.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img51.gif b/deal.II/doc/reports/mapping_q/img51.gif
deleted file mode 100644 (file)
index fd296a6..0000000
Binary files a/deal.II/doc/reports/mapping_q/img51.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img6.gif b/deal.II/doc/reports/mapping_q/img6.gif
deleted file mode 100644 (file)
index 2d477da..0000000
Binary files a/deal.II/doc/reports/mapping_q/img6.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img7.gif b/deal.II/doc/reports/mapping_q/img7.gif
deleted file mode 100644 (file)
index 18070cf..0000000
Binary files a/deal.II/doc/reports/mapping_q/img7.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img8.gif b/deal.II/doc/reports/mapping_q/img8.gif
deleted file mode 100644 (file)
index 91c5ff7..0000000
Binary files a/deal.II/doc/reports/mapping_q/img8.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/img9.gif b/deal.II/doc/reports/mapping_q/img9.gif
deleted file mode 100644 (file)
index 5e6633a..0000000
Binary files a/deal.II/doc/reports/mapping_q/img9.gif and /dev/null differ
diff --git a/deal.II/doc/reports/mapping_q/index.html b/deal.II/doc/reports/mapping_q/index.html
deleted file mode 100644 (file)
index 487a4d7..0000000
+++ /dev/null
@@ -1,867 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--Converted with LaTeX2HTML 98.1p1 release (March 2nd, 1998)
-originally by Nikos Drakos (nikos@cbl.leeds.ac.uk), 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>No Title</TITLE>
-<META NAME="description" CONTENT="No Title">
-<META NAME="keywords" CONTENT="mapping">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
-<LINK REL="STYLESHEET" HREF="../../screen.css">
-<LINK REL="next" HREF="node1.html">
-</HEAD>
-<BODY >
-<p>
-In modified form taken from
-<br>
-<br>
-<a href="http://ganymed.iwr.uni-heidelberg.de/~hartmann/" target="_top">Ralf Hartmann</a>
-<br>
-Adaptive Finite Element Methods for the Compressible Euler Equations
-<br>
-PhD thesis, University of Heidelberg, 2002.
-</p>
-
-
-<P>
-<DIV ALIGN="CENTER">
-<FONT SIZE="+4"><B>Higher order Boundary approximation</B></FONT>
-
-</DIV>
-<P>
-<B>Introduction:</B> In many numerical applications the domain
-
-<!-- MATH: $\Omega\subset\mathbb R^d$ -->
-<IMG
- WIDTH="61" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
- SRC="img6.gif"
- ALT="$\Omega\subset\mathbb R^d$">,
-<IMG
- WIDTH="46" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img7.gif"
- ALT="$d\geq 2$">
-is not a polygonal domain but includes
-curved boundaries. For these cases the boundary cannot be represented
-exactly by the discretised boundary. Approximating the boundary by a
-piecewise linear boundary interpolation, i.e. by a polygonal boundary,
-may in some applications not be sufficient. In these cases a higher
-order boundary approximation, for example by piecewise quadratic or
-cubic boundary interpolation, must be employed.  In the finite element
-framework this higher order boundary approximation is realized by
-mapping the reference element <IMG
- WIDTH="21" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
- SRC="img8.gif"
- ALT="$\hat K$">
-to the element
-
-<!-- MATH: $K=\sigma_K(\hat K)$ -->
-<IMG
- WIDTH="96" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
- SRC="img9.gif"
- ALT="$K=\sigma_K(\hat K)$">
-in real space, whereas on cells <I>K</I> at the
-boundary, i.e.
-<!-- MATH: $\partial K\cap\Gamma=\emptyset$ -->
-<IMG
- WIDTH="93" HEIGHT="34" ALIGN="MIDDLE" BORDER="0"
- SRC="img10.gif"
- ALT="$\partial K\cap\Gamma=\emptyset$">,
-the mappings
-<IMG
- WIDTH="28" HEIGHT="30" ALIGN="MIDDLE" BORDER="0"
- SRC="img11.gif"
- ALT="$\sigma_K$">
-are given by polynomial functions of higher degree.
-
-<P>
-<B>Elements with general mapping functions <IMG
- WIDTH="28" HEIGHT="30" ALIGN="MIDDLE" BORDER="0"
- SRC="img11.gif"
- ALT="$\sigma_K$">.</B>  We begin
-by first introducing some notation. Let <IMG
- WIDTH="61" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
- SRC="img12.gif"
- ALT="$K\in T_h$">
-be a cell of the
-triangulation <I>T</I><SUB><I>h</I></SUB> with
-<!-- MATH: $K=\sigma_K(\hat K)$ -->
-<IMG
- WIDTH="96" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
- SRC="img9.gif"
- ALT="$K=\sigma_K(\hat K)$">,
-where <IMG
- WIDTH="28" HEIGHT="30" ALIGN="MIDDLE" BORDER="0"
- SRC="img11.gif"
- ALT="$\sigma_K$">is a smooth bijective mapping of the reference element (unit square)
-<IMG
- WIDTH="21" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
- SRC="img8.gif"
- ALT="$\hat K$">
-to the element <I>K</I> in real space, see Figure
-<A HREF="index.html#fig:mapping">1</A>.
-<BR>
-<DIV ALIGN="CENTER"><A NAME="fig:mapping">&#160;</A><A NAME="183">&#160;</A>
-<TABLE WIDTH="50%">
-<CAPTION><STRONG>Figure:</STRONG>
-Mapping <IMG
- WIDTH="15" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
- SRC="img1.gif"
- ALT="$\sigma $">
-of reference element <IMG
- WIDTH="21" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
- SRC="img8.gif"
- ALT="$\hat K$">
-to the element <I>K</I> in real space.</CAPTION>
-<TR><TD>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: $\includegraphics[scale=0.3]{figures/m1.ps}$ -->
-<IMG
- WIDTH="660" ALIGN="BOTTOM" BORDER="0"
- SRC="img13.gif"
- ALT="\includegraphics[scale=0.3]{figures/m1.ps}"></DIV></TD></TR>
-</TABLE>
-</DIV>
-<BR>
-<P>
-In the following and for the sake of simplicity we suppress the letter
-<I>K</I> in the subscript and write <IMG
- WIDTH="15" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
- SRC="img1.gif"
- ALT="$\sigma $">
-instead of <IMG
- WIDTH="28" HEIGHT="30" ALIGN="MIDDLE" BORDER="0"
- SRC="img11.gif"
- ALT="$\sigma_K$">.
-
-<P>
-<B>Mapping functions of higher polynomial degree.</B>  A mapping
-function <IMG
- WIDTH="15" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
- SRC="img1.gif"
- ALT="$\sigma $">,
-that maps the reference element <IMG
- WIDTH="21" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
- SRC="img8.gif"
- ALT="$\hat K$">
-to an
-arbitrary quadrilateral cell <I>K</I> with straight boundaries, can in
-general be represented by a bilinear function, i.e.  by a
-<I>Q</I><SUB>1</SUB>-mapping. For the case that the cell <I>K</I> includes curved
-boundaries it might be necessary to employ polynomial mapping
-functions of higher degree.
-
-<P>
-Given a degree <I>p</I>&gt;0, a cell <IMG
- WIDTH="61" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
- SRC="img12.gif"
- ALT="$K\in T_h$">,
-and (<I>p</I>+1)<SUP><I>d</I></SUP> mapping
-support points <IMG
- WIDTH="56" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
- SRC="img14.gif"
- ALT="$p_i\in K$">,
-
-<!-- MATH: $i=0,\ldots,(p+1)^d-1$ -->
-<IMG
- WIDTH="174" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
- SRC="img15.gif"
- ALT="$i=0,\ldots,(p+1)^d-1$">,
-we define a
-<I>Q</I><SUB><I>p</I></SUB>-mapping
-<!-- MATH: $\sigma\in [Q_p]^d$ -->
-<IMG
- WIDTH="75" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
- SRC="img16.gif"
- ALT="$\sigma\in [Q_p]^d$">
-as follows
-<BR><P></P>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: \begin{equation}
-\sigma(\hat x)=\sum_{i=0}^{(p+1)^d-1}p_i\phi_i(\hat x).
-\end{equation} -->
-
-<TABLE WIDTH="100%" ALIGN="CENTER">
-<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:def-mapping-q">&#160;</A><IMG
- WIDTH="176" HEIGHT="66"
- SRC="img17.gif"
- ALT="\begin{displaymath}
-\sigma(\hat x)=\sum_{i=0}^{(p+1)^d-1}p_i\phi_i(\hat x).
-\end{displaymath}"></TD>
-<TD WIDTH=10 ALIGN="RIGHT">
-(1)</TD></TR>
-</TABLE>
-</DIV>
-<BR CLEAR="ALL"><P></P>
-Here, <IMG
- WIDTH="20" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img18.gif"
- ALT="$\phi_i$">,
-
-<!-- MATH: $i=0,\ldots,(p+1)^d-1$ -->
-<IMG
- WIDTH="174" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
- SRC="img15.gif"
- ALT="$i=0,\ldots,(p+1)^d-1$">
-denote the Lagrange interpolation
-basis functions, that satisfy
-<BR><P></P>
-<DIV ALIGN="CENTER">
-<!-- MATH: \begin{displaymath}
-\phi_i(\hat p_j)=\delta_{ij}, \quad i,j=0,\ldots,(p+1)^d-1,
-\end{displaymath} -->
-
-
-<IMG
- WIDTH="302" HEIGHT="32"
- SRC="img19.gif"
- ALT="\begin{displaymath}\phi_i(\hat p_j)=\delta_{ij}, \quad i,j=0,\ldots,(p+1)^d-1,
-\end{displaymath}">
-</DIV>
-<BR CLEAR="ALL">
-<P></P>
-where <IMG
- WIDTH="19" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img20.gif"
- ALT="$\hat p_i$">,
-
-<!-- MATH: $i=0,\ldots,(p+1)^d-1$ -->
-<IMG
- WIDTH="174" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
- SRC="img15.gif"
- ALT="$i=0,\ldots,(p+1)^d-1$">
-denote the Lagrange support
-points on the unit cell <IMG
- WIDTH="21" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
- SRC="img8.gif"
- ALT="$\hat K$">.
-The definition of <IMG
- WIDTH="15" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
- SRC="img1.gif"
- ALT="$\sigma $">(<A HREF="index.html#eq:def-mapping-q">1</A>) ensures that each of the unit support points
-<IMG
- WIDTH="19" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img20.gif"
- ALT="$\hat p_i$">
-is mapped onto the corresponding mapping support points
-<I>p</I><SUB><I>i</I></SUB>, i.e.
-<BR><P></P>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: \begin{equation}
-\sigma(\hat p_i)=p_i, \quad i=0,\ldots,(p+1)^d-1
-\end{equation} -->
-
-<TABLE WIDTH="100%" ALIGN="CENTER">
-<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:point-mappings">&#160;</A><IMG
- WIDTH="270" HEIGHT="31"
- SRC="img21.gif"
- ALT="\begin{displaymath}
-\sigma(\hat p_i)=p_i, \quad i=0,\ldots,(p+1)^d-1
-\end{displaymath}"></TD>
-<TD WIDTH=10 ALIGN="RIGHT">
-(2)</TD></TR>
-</TABLE>
-</DIV>
-<BR CLEAR="ALL"><P></P>
-Analogous to Lagrange finite elements the unit Lagrange support points
-<IMG
- WIDTH="19" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img20.gif"
- ALT="$\hat p_i$">
-are equidistantly distributed on <IMG
- WIDTH="21" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
- SRC="img8.gif"
- ALT="$\hat K$">
-based on a tensor
-product mesh. In the following we only consider the two-dimensional
-case, <I>d</I>=2.  For that case, Figure <A HREF="index.html#fig:unit-mapping-points">2</A>
-shows the distributions of the unit support points <IMG
- WIDTH="19" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img20.gif"
- ALT="$\hat p_i$">,
-
-<!-- MATH: $i=0,\ldots,(p+1)^2-1$ -->
-<IMG
- WIDTH="174" HEIGHT="37" ALIGN="MIDDLE" BORDER="0"
- SRC="img22.gif"
- ALT="$i=0,\ldots,(p+1)^2-1$">
-for degrees
-<!-- MATH: $p=1,\ldots,4$ -->
-<IMG
- WIDTH="96" HEIGHT="30" ALIGN="MIDDLE" BORDER="0"
- SRC="img5.gif"
- ALT="$p=1,\ldots ,4$">.
-<BR>
-<DIV ALIGN="CENTER"><A NAME="fig:unit-mapping-points">&#160;</A><A NAME="184">&#160;</A>
-<TABLE WIDTH="50%">
-<CAPTION><STRONG>Figure:</STRONG>
-Unit support points <IMG
- WIDTH="19" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img20.gif"
- ALT="$\hat p_i$">,
-
-<!-- MATH: $0\leq i<(p+1)^2$ -->
-<IMG
- WIDTH="126" HEIGHT="37" ALIGN="MIDDLE" BORDER="0"
- SRC="img4.gif"
- ALT="$0\leq i<(p+1)^2$">,
-for degrees
-<!-- MATH: $p=1,\ldots,4$ -->
-<IMG
- WIDTH="96" HEIGHT="30" ALIGN="MIDDLE" BORDER="0"
- SRC="img5.gif"
- ALT="$p=1,\ldots ,4$">.</CAPTION>
-<TR><TD>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: $\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q1_n.eps}$ -->
-<IMG
- WIDTH="180" ALIGN="BOTTOM" BORDER="0"
- SRC="img23.gif"
- ALT="\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q1_n.eps}">
-
-<!-- MATH: $\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q2_n.eps}$ -->
-<IMG
- WIDTH="180" ALIGN="BOTTOM" BORDER="0"
- SRC="img24.gif"
- ALT="\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q2_n.eps}">
-
-<!-- MATH: $\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q3_n.eps}$ -->
-<IMG
- WIDTH="180" ALIGN="BOTTOM" BORDER="0"
- SRC="img25.gif"
- ALT="\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q3_n.eps}">
-
-<!-- MATH: $\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q4_n.eps}$ -->
-<IMG
- WIDTH="180" ALIGN="BOTTOM" BORDER="0"
- SRC="img26.gif"
- ALT="\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q4_n.eps}"></DIV></TD></TR>
-</TABLE>
-</DIV>
-<BR>
-Let the ordering and numbering of the unit support points be as
-follows: first the corners, then the points on the edges and finally
-the inner support points, see also Figure
-<A HREF="index.html#fig:unit-mapping-points">2</A>.  Thus the first 4<I>p</I> points are placed
-on the boundary
-<!-- MATH: $\partial\hat K$ -->
-<IMG
- WIDTH="31" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
- SRC="img27.gif"
- ALT="$\partial\hat K$">
-of the reference cell, i.e.
-<BR><P></P>
-<DIV ALIGN="CENTER">
-<!-- MATH: \begin{displaymath}
-\hat p_k\in\partial\hat K, \quad k=0,\ldots,4p-1.
-\end{displaymath} -->
-
-
-<IMG
- WIDTH="225" HEIGHT="30"
- SRC="img28.gif"
- ALT="\begin{displaymath}\hat p_k\in\partial\hat K, \quad k=0,\ldots,4p-1.
-\end{displaymath}">
-</DIV>
-<BR CLEAR="ALL">
-<P></P>
-According to (<A HREF="index.html#eq:point-mappings">2</A>) these points are mapped to the
-mapping support points <I>p</I><SUB><I>k</I></SUB>,
-<!-- MATH: $k=0,\ldots,4p-1$ -->
-<IMG
- WIDTH="135" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img29.gif"
- ALT="$k=0,\ldots,4p-1$">
-that are chosen to be
-placed on the boundary of the real cell in approximatively equal
-distances, i.e.
-<BR><P></P>
-<DIV ALIGN="CENTER">
-<!-- MATH: \begin{displaymath}
-p_k\in\partial K, \quad k=0,\ldots,4p-1.
-\end{displaymath} -->
-
-
-<IMG
- WIDTH="224" HEIGHT="30"
- SRC="img30.gif"
- ALT="\begin{displaymath}p_k\in\partial K, \quad k=0,\ldots,4p-1.
-\end{displaymath}">
-</DIV>
-<BR CLEAR="ALL">
-<P></P>
-While the support points <I>p</I><SUB><I>k</I></SUB>,
-<!-- MATH: $k=0,\ldots,4p-1$ -->
-<IMG
- WIDTH="135" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img29.gif"
- ALT="$k=0,\ldots,4p-1$">
-on the boundary are
-given by the boundary description of the real cell <I>K</I>, the <EM>inner
-  mapping support points</EM>
-<BR><P></P>
-<DIV ALIGN="CENTER">
-<!-- MATH: \begin{displaymath}
-p_i\in K\setminus\partial K, \quad i=4p,\ldots,(p+1)^2-1
-\end{displaymath} -->
-
-
-<IMG
- WIDTH="297" HEIGHT="31"
- SRC="img31.gif"
- ALT="\begin{displaymath}p_i\in K\setminus\partial K, \quad i=4p,\ldots,(p+1)^2-1
-\end{displaymath}">
-</DIV>
-<BR CLEAR="ALL">
-<P></P>
-are not uniquely determined. Numerical tests show that it is not a
-trivial task to define the positions of the inner mapping support
-points appropriately. If they are not chosen appropriately the
-resulting mapping <IMG
- WIDTH="15" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
- SRC="img1.gif"
- ALT="$\sigma $">
-for a cell <I>K</I> may degenerate, i.e. the
-mapping <IMG
- WIDTH="15" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
- SRC="img1.gif"
- ALT="$\sigma $">
-for some cell <I>K</I> may not be bijective.
-
-<P>
-<B>Computation of inner support points by smooth transformation.</B>
-In the following we will define the positions of the inner mapping
-support points so that the mapping does - in all practical cases - <I>not</I>
-degenerate. To this end, we employ an approach for the mapping of the
-support points, that is in the style of the smooth transformations
-that is used to transform structured triangulations to match complex
-boundary discriptions. In the following, again for notational
-convenience, we consider only the two-dimensional case.
-
-<P>
-The smooth transformation mentioned above is based on solutions to the
-Laplace equation that is solved on the reference cell <IMG
- WIDTH="21" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
- SRC="img8.gif"
- ALT="$\hat K$">.
-Discrete boundary conditions are imposed that are given by the
-coordinates of the mapping support points <I>p</I><SUB><I>k</I></SUB>,
-<!-- MATH: $k=0,\ldots,4p-1$ -->
-<IMG
- WIDTH="135" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img29.gif"
- ALT="$k=0,\ldots,4p-1$">,
-on
-the boundary of the cell <I>K</I> in real space.
-
-<P>
-To be more explicite we define a Laplace problem on the unit
-cell <IMG
- WIDTH="21" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
- SRC="img8.gif"
- ALT="$\hat K$">
-<BR><P></P>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: \begin{equation}
-\begin{array}{rcll}
--\hat\Delta \sigma_l(\hat x)&=&0, \quad &\hat x\in \hat K,\\
-  \sigma_l(\hat x)&=&{g_l}|_{\partial \hat K}(\hat x), \quad &\hat x\in \partial\hat K,
-\end{array}
-\end{equation} -->
-
-<TABLE WIDTH="100%" ALIGN="CENTER">
-<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:local-laplace-problem">&#160;</A><IMG
- WIDTH="273" HEIGHT="53"
- SRC="img32.gif"
- ALT="\begin{displaymath}
-\begin{array}{rcll}
--\hat\Delta \sigma_l(\hat x)&=&0, \quad...
-...l \hat K}(\hat x), \quad &\hat x\in \partial\hat K,
-\end{array}\end{displaymath}"></TD>
-<TD WIDTH=10 ALIGN="RIGHT">
-(3)</TD></TR>
-</TABLE>
-</DIV>
-<BR CLEAR="ALL"><P></P>
-for each component <IMG
- WIDTH="20" HEIGHT="30" ALIGN="MIDDLE" BORDER="0"
- SRC="img33.gif"
- ALT="$\sigma_l$">,
-<I>l</I>=1,2, of the <I>Q</I><SUB><I>p</I></SUB> mapping
-<IMG
- WIDTH="15" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
- SRC="img1.gif"
- ALT="$\sigma $">.
-Here, the discrete boundary function
-<!-- MATH: $g\in [Q_p]^2$ -->
-<IMG
- WIDTH="73" HEIGHT="37" ALIGN="MIDDLE" BORDER="0"
- SRC="img34.gif"
- ALT="$g\in [Q_p]^2$">
-is
-given by
-<BR><P></P>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: \begin{equation}
-g_l(\hat x)=\sum_{i=0}^{4p-1}(p_i)_l\phi_i(\hat x), \quad l=1,\ldots,d
-\end{equation} -->
-
-<TABLE WIDTH="100%" ALIGN="CENTER">
-<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:discrete-boundary-function">&#160;</A><IMG
- WIDTH="277" HEIGHT="62"
- SRC="img35.gif"
- ALT="\begin{displaymath}
-g_l(\hat x)=\sum_{i=0}^{4p-1}(p_i)_l\phi_i(\hat x), \quad l=1,\ldots,d
-\end{displaymath}"></TD>
-<TD WIDTH=10 ALIGN="RIGHT">
-(4)</TD></TR>
-</TABLE>
-</DIV>
-<BR CLEAR="ALL"><P></P>
-where (<I>p</I><SUB><I>i</I></SUB>)<SUB><I>l</I></SUB> denotes the <I>l</I>th component of the support point <I>p</I><SUB><I>i</I></SUB>,
-and <IMG
- WIDTH="20" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img18.gif"
- ALT="$\phi_i$">
-the corresponding Lagrangian interpolation basis
-function.  We recall that the numbering of the mapping support points
-involves
-<!-- MATH: $p_k\in\partial K$ -->
-<IMG
- WIDTH="69" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img36.gif"
- ALT="$p_k\in\partial K$">
-for
-<!-- MATH: $k=0,\ldots, 4p-1$ -->
-<IMG
- WIDTH="135" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img29.gif"
- ALT="$k=0,\ldots,4p-1$">.
-Substituting
-<BR><P></P>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: \begin{equation}
-\tilde \sigma_l:=\sigma_l-g_l, \quad l=1,2,
-\end{equation} -->
-
-<TABLE WIDTH="100%" ALIGN="CENTER">
-<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:def-tilde-sigma">&#160;</A><IMG
- WIDTH="176" HEIGHT="30"
- SRC="img37.gif"
- ALT="\begin{displaymath}
-\tilde \sigma_l:=\sigma_l-g_l, \quad l=1,2,
-\end{displaymath}"></TD>
-<TD WIDTH=10 ALIGN="RIGHT">
-(5)</TD></TR>
-</TABLE>
-</DIV>
-<BR CLEAR="ALL"><P></P>
-into the Laplace problem (<A HREF="index.html#eq:local-laplace-problem">3</A>) yields the
-zero boundary value problem,
-<BR><P></P>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: \begin{equation}
-\begin{array}{rcll}
--\hat\Delta \tilde\sigma_l(\hat x)&=&\hat\Delta g_l(\hat x), \quad &\hat x\in \hat K,\\
-  \tilde\sigma_l(\hat x)&=&0, \quad &\hat x\in \partial\hat K,
-\end{array}
-\end{equation} -->
-
-<TABLE WIDTH="100%" ALIGN="CENTER">
-<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:transformed-local-laplace-problem">&#160;</A><IMG
- WIDTH="262" HEIGHT="53"
- SRC="img38.gif"
- ALT="\begin{displaymath}
-\begin{array}{rcll}
--\hat\Delta \tilde\sigma_l(\hat x)&=&\h...
-...gma_l(\hat x)&=&0, \quad &\hat x\in \partial\hat K,
-\end{array}\end{displaymath}"></TD>
-<TD WIDTH=10 ALIGN="RIGHT">
-(6)</TD></TR>
-</TABLE>
-</DIV>
-<BR CLEAR="ALL"><P></P>
-that is equivalent to the following variational formulation
-<BR><P></P>
-<DIV ALIGN="CENTER">
-<!-- MATH: \begin{displaymath}
-\tilde\sigma_l\in H^1_0(\hat K):\qquad
-(\hat\nabla \tilde\sigma_l, \hat\nabla \phi)_{\hat K}
-    = -(\hat\nabla g_l, \hat\nabla \phi)_{\hat K} \quad \forall \phi\in  H^1_0(\hat K).
-\end{displaymath} -->
-
-
-<IMG
- WIDTH="467" HEIGHT="33"
- SRC="img39.gif"
- ALT="\begin{displaymath}\tilde\sigma_l\in H^1_0(\hat K):\qquad
-(\hat\nabla \tilde\si...
-...\hat\nabla \phi)_{\hat K} \quad \forall \phi\in H^1_0(\hat K). \end{displaymath}">
-</DIV>
-<BR CLEAR="ALL">
-<P></P>
-Discretisation of this problem
-<BR><P></P>
-<DIV ALIGN="CENTER">
-<!-- MATH: \begin{displaymath}
-\tilde\sigma_l\in Q_p(\hat K):\qquad
-(\hat\nabla \tilde\sigma_l, \hat\nabla \phi_{4p+i})_{\hat K}
-    = -(\hat\nabla g_l, \hat\nabla \phi_{4p+i})_{\hat K} \quad \forall i=0,\ldots, (p-1)^2-1,
-\end{displaymath} -->
-
-
-<IMG
- WIDTH="609" HEIGHT="33"
- SRC="img40.gif"
- ALT="\begin{displaymath}\tilde\sigma_l\in Q_p(\hat K):\qquad
-(\hat\nabla \tilde\sigm...
-...bla \phi_{4p+i})_{\hat K} \quad \forall i=0,\ldots, (p-1)^2-1, \end{displaymath}">
-</DIV>
-<BR CLEAR="ALL">
-<P></P>
-and recalling definitions (<A HREF="index.html#eq:def-mapping-q">1</A>), (<A HREF="index.html#eq:def-tilde-sigma">5</A>) and (<A HREF="index.html#eq:discrete-boundary-function">4</A>) gives
-<BR><P></P>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: \begin{equation}
-\sum_{j=1}^{(p-1)^2}S_{ij}(p_{4p+j})_l=-\sum_{k=0}^{4p-1}T_{ik}(p_k)_l, \quad i=0, \ldots, (p-1)^2-1,
-\end{equation} -->
-
-<TABLE WIDTH="100%" ALIGN="CENTER">
-<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:discrete-local-laplace">&#160;</A><IMG
- WIDTH="455" HEIGHT="68"
- SRC="img41.gif"
- ALT="\begin{displaymath}
-\sum_{j=1}^{(p-1)^2}S_{ij}(p_{4p+j})_l=-\sum_{k=0}^{4p-1}T_{ik}(p_k)_l, \quad i=0, \ldots, (p-1)^2-1,
-\end{displaymath}"></TD>
-<TD WIDTH=10 ALIGN="RIGHT">
-(7)</TD></TR>
-</TABLE>
-</DIV>
-<BR CLEAR="ALL"><P></P>
-with the matrices
-<!-- MATH: $S_{ij}\in\mathbb R^{(p-1)^2\times(p-1)^2}$ -->
-<IMG
- WIDTH="155" HEIGHT="42" ALIGN="MIDDLE" BORDER="0"
- SRC="img42.gif"
- ALT="$S_{ij}\in\mathbb R^{(p-1)^2\times(p-1)^2}$">
-and
-<!-- MATH: $T_{ik}\in\mathbb R^{(p-1)^2\times 4p}$ -->
-<IMG
- WIDTH="128" HEIGHT="42" ALIGN="MIDDLE" BORDER="0"
- SRC="img43.gif"
- ALT="$T_{ik}\in\mathbb R^{(p-1)^2\times 4p}$">
-given by
-<BR><P></P>
-<DIV ALIGN="CENTER">
-<!-- MATH: \begin{displaymath}
-S_{ij}=(\hat\nabla \phi_{4p+i}, \hat\nabla \phi_{4p+j})_{\hat K}, \quad i,j=0,\ldots,(p-1)^2-1,
-\end{displaymath} -->
-
-
-<IMG
- WIDTH="404" HEIGHT="33"
- SRC="img44.gif"
- ALT="\begin{displaymath}S_{ij}=(\hat\nabla \phi_{4p+i}, \hat\nabla \phi_{4p+j})_{\hat K}, \quad i,j=0,\ldots,(p-1)^2-1,
-\end{displaymath}">
-</DIV>
-<BR CLEAR="ALL">
-<P></P>
-and
-<BR><P></P>
-<DIV ALIGN="CENTER">
-<!-- MATH: \begin{displaymath}
-T_{ik}=(\hat\nabla \phi_{4p+i}, \hat\nabla \phi_k)_{\hat K}, \quad i=0,\ldots,(p-1)^2-1,\quad k=0,\ldots,4p-1.
-\end{displaymath} -->
-
-
-<IMG
- WIDTH="522" HEIGHT="33"
- SRC="img45.gif"
- ALT="\begin{displaymath}T_{ik}=(\hat\nabla \phi_{4p+i}, \hat\nabla \phi_k)_{\hat K}, \quad i=0,\ldots,(p-1)^2-1,\quad k=0,\ldots,4p-1.
-\end{displaymath}">
-</DIV>
-<BR CLEAR="ALL">
-<P></P>
-The solutions to problem (<A HREF="index.html#eq:discrete-local-laplace">7</A>) for <I>l</I>=1,2 are
-<BR><P></P>
-<DIV ALIGN="CENTER">
-<!-- MATH: \begin{displaymath}
-(p_{4p+j})_l=-\sum_{i=0}^{(p-1)^2-1}\sum_{k=0}^{4p-1}S^{-1}_{ji}T_{ik}(p_k)_l, \quad j=0,\ldots,(p-1)^2-1,
-\end{displaymath} -->
-
-
-<IMG
- WIDTH="481" HEIGHT="66"
- SRC="img46.gif"
- ALT="\begin{displaymath}(p_{4p+j})_l=-\sum_{i=0}^{(p-1)^2-1}\sum_{k=0}^{4p-1}S^{-1}_{ji}T_{ik}(p_k)_l, \quad j=0,\ldots,(p-1)^2-1,
-\end{displaymath}">
-</DIV>
-<BR CLEAR="ALL">
-<P></P>
-that may be written in compact form:
-<BR><P></P>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: \begin{equation}
-p_{4p+j}=\sum_{k=0}^{4p-1}c_{jk}p_k, \quad j=0,\ldots,(p-1)^2-1,
-\end{equation} -->
-
-<TABLE WIDTH="100%" ALIGN="CENTER">
-<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:linear-combination-laplace">&#160;</A><IMG
- WIDTH="337" HEIGHT="62"
- SRC="img47.gif"
- ALT="\begin{displaymath}
-p_{4p+j}=\sum_{k=0}^{4p-1}c_{jk}p_k, \quad j=0,\ldots,(p-1)^2-1,
-\end{displaymath}"></TD>
-<TD WIDTH=10 ALIGN="RIGHT">
-(8)</TD></TR>
-</TABLE>
-</DIV>
-<BR CLEAR="ALL"><P></P>
-where <I>c</I><SUB><I>jk</I></SUB> represents the coefficient
-<BR><P></P>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: \begin{equation}
-c_{jk}=-\sum_{i=0}^{(p-1)^2-1}S^{-1}_{ji}T_{ik}.
-\end{equation} -->
-
-<TABLE WIDTH="100%" ALIGN="CENTER">
-<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:coefficients">&#160;</A><IMG
- WIDTH="180" HEIGHT="65"
- SRC="img48.gif"
- ALT="\begin{displaymath}
-c_{jk}=-\sum_{i=0}^{(p-1)^2-1}S^{-1}_{ji}T_{ik}.
-\end{displaymath}"></TD>
-<TD WIDTH=10 ALIGN="RIGHT">
-(9)</TD></TR>
-</TABLE>
-</DIV>
-<BR CLEAR="ALL"><P></P>
-of the linear combination (<A HREF="index.html#eq:linear-combination-laplace">8</A>), that
-represents the dependency of the <I>j</I>th inner mapping support point
-<I>p</I><SUB>4<I>p</I>+<I>j</I></SUB> on the support points <I>p</I><SUB><I>k</I></SUB>,
-<!-- MATH: $k=0,\ldots,4p-1$ -->
-<IMG
- WIDTH="135" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
- SRC="img29.gif"
- ALT="$k=0,\ldots,4p-1$">,
-that are
-placed on the boundary of the cell <I>K</I>. For a fixed degree <I>p</I>, these
-coefficients <I>c</I><SUB><I>jk</I></SUB> are the same for the mapping of <EM>all</EM> cells
-<I>K</I> in real space because the <I>c</I><SUB><I>jk</I></SUB> depend only on the reference
-element <IMG
- WIDTH="21" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
- SRC="img8.gif"
- ALT="$\hat K$">.
-Therefore the coefficients <I>c</I><SUB><I>jk</I></SUB> can be
-precomputed and result in following linear combinations:
-
-<P>
-For <I>p</I>=2 the linear combination turns out to be
-<BR><P></P>
-<DIV ALIGN="CENTER">
-<!-- MATH: \begin{displaymath}
-p_8=\tfrac{1}{16}\sum_{k=0}^3p_k+\tfrac{3}{16}\sum_{k=4}^7p_k,
-\end{displaymath} -->
-
-
-<IMG
- WIDTH="196" HEIGHT="61"
- SRC="img49.gif"
- ALT="\begin{displaymath}p_8=\tfrac{1}{16}\sum_{k=0}^3p_k+\tfrac{3}{16}\sum_{k=4}^7p_k,
-\end{displaymath}">
-</DIV>
-<BR CLEAR="ALL">
-<P></P>
-see also Figure <A HREF="index.html#fig:coefficients-q2-q3">3</A>, left.
-<BR>
-<DIV ALIGN="CENTER"><A NAME="fig:coefficients-q2-q3">&#160;</A><A NAME="185">&#160;</A>
-<TABLE WIDTH="50%">
-<CAPTION><STRONG>Figure 3:</STRONG>
-Left: Coefficients <I>c</I><SUB>8,<I>k</I></SUB> for <I>Q</I><SUB>2</SUB> mapping. Right: Coefficients <I>c</I><SUB>12,<I>k</I></SUB> for <I>Q</I><SUB>3</SUB> mapping.</CAPTION>
-<TR><TD>
-<DIV ALIGN="CENTER">
-
-<!-- MATH: $\includegraphics*[scale=0.4]{figures/m2.ps}$ -->
-<IMG
- WIDTH="700" ALIGN="BOTTOM" BORDER="0"
- SRC="img50.gif"
- ALT="\includegraphics*[scale=0.4]{figures/m2.ps}"></DIV></TD></TR>
-</TABLE>
-</DIV>
-<BR>
-For the case that <I>p</I>=3, Figure <A HREF="index.html#fig:coefficients-q2-q3">3</A>, right, shows the coefficients <I>c</I><SUB>12,<I>k</I></SUB> of the linear combination for the inner mapping support point <I>p</I><SUB>12</SUB>. The coefficents for the points <I>p</I><SUB>13</SUB>, <I>p</I><SUB>14</SUB> and <I>p</I><SUB>15</SUB> can be obtain by rotation of the coefficients.
-
-<P>
-<B>Implementation in deal.II.</B>  The coefficients <I>c</I><SUB><I>jk</I></SUB>, see
-(<A HREF="index.html#eq:coefficients">9</A>), are represented in the <I>MappingQ</I>
-class by the <I>laplace_on_quad_vector</I> as follows
-<BR><P></P>
-<DIV ALIGN="CENTER">
-<!-- MATH: \begin{displaymath}
-\mbox{\textit{laplace\_on\_quad\_vector}[j][k]}=c_{jk}
-\end{displaymath} -->
-
-
-<IMG
- WIDTH="247" HEIGHT="32"
- SRC="img51.gif"
- ALT="\begin{displaymath}\mbox{\textit{laplace\_on\_quad\_vector}[j][k]}=c_{jk}
-\end{displaymath}">
-</DIV>
-<BR CLEAR="ALL">
-<P></P>
-These coefficients are the same for the mapping of <EM>all</EM> cells
-<I>K</I> in real space because the <I>c</I><SUB><I>jk</I></SUB> depend only on the reference
-element <IMG
- WIDTH="21" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
- SRC="img8.gif"
- ALT="$\hat K$">.
-Hence for a given degree <I>p</I> the
-<I>laplace_on_quad_vector</I> can be filled by the constructor of
-the <I>MappingQ</I> class. This is done by calling the
-<I>MappingQ::set_laplace_on_quad_vector</I> function that
-includes the coefficients hardcoded for <I>p</I>=2 and <I>p</I>=3 in <I>d</I>=2 dimensions, and a routine for computing the coefficients according to
-(<A HREF="index.html#eq:coefficients">9</A>) for all other cases.  The mapping support
-points <IMG
- WIDTH="56" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
- SRC="img14.gif"
- ALT="$p_i\in K$">,
-
-<!-- MATH: $i=0,\ldots,(p+1)^d-1$ -->
-<IMG
- WIDTH="174" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
- SRC="img15.gif"
- ALT="$i=0,\ldots,(p+1)^d-1$">
-are computed once for each
-MappingQ object by the
-<I>MappingQ::compute_support_points_laplace</I> that is invoked
-by the virtual <I>compute_mapping_support_points</I> function of
-the base <I>Mapping</I> class. In
-<I>MappingQ::compute_support_points_laplace</I>, first the 4<I>p</I> points on the boundary of the cell are computed (by calling
-<I>MappingQ::add_line_support_points</I>), then by calling
-<I>MappingQ::apply_laplace_vector</I> the remaining (<I>p</I>-1)<SUP>2</SUP> inner mapping supports points are computed, where
-<I>MappingQ::apply_laplace_vector</I> just performs the linear
-combination given in (<A HREF="index.html#eq:linear-combination-laplace">8</A>).
-<BR><HR>
-</FONT>
-<ADDRESS>
-<I>Ralf Hartmann</I>
-<BR><I>2001-09-03</I>
-</ADDRESS>
-</BODY>
-</HTML>
diff --git a/deal.II/doc/reports/nedelec/nedelec.pdf b/deal.II/doc/reports/nedelec/nedelec.pdf
deleted file mode 100644 (file)
index 1ed9f2e..0000000
Binary files a/deal.II/doc/reports/nedelec/nedelec.pdf and /dev/null differ
diff --git a/deal.II/doc/reports/nedelec/nedelec.ps b/deal.II/doc/reports/nedelec/nedelec.ps
deleted file mode 100644 (file)
index 3baeec4..0000000
+++ /dev/null
@@ -1,7851 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
-%%Title: main.dvi
-%%Pages: 23
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 596 842
-%%DocumentFonts: Helvetica
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips main -o nedelec.ps
-%DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2003.05.02:0909
-%%BeginProcSet: texc.pro
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
-1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
-0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
-sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
-forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: special.pro
-%!
-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
-save N userdict maxlength dict begin/magscale true def normalscale
-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
-TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
-psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
-roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
-moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
-begin/SpecialSave save N gsave normalscale currentpoint TR
-@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
-CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
-closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
-sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
-}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
-CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
-lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
-/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
-repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
-/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
-currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
-moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
-/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
-1 startangle endangle arc savematrix setmatrix}N end
-
-%%EndProcSet
-TeXDict begin 39158280 55380996 1000 600 600 (main.dvi)
-@start
-%DVIPSBitmapFont: Fa cmtt10 10.95 11
-/Fa 11 109 df<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C6E8B30>
-46 D<147F4A7EA2497FA4497F14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F
-80FEA590387F007FA4498049133F90B6FCA34881A39038FC001F00038149130FA4000781
-491307A2D87FFFEB7FFFB56CB51280A46C496C130029397DB830>65
-D<007FB512F0B612FE6F7E82826C813A03F8001FF815076F7E1501A26F7EA615015EA24B
-5A1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E0829039F8000FF8ED03FC6F7E1500167F
-A3EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6FCB75A5E16C05E6C02FCC7FC29387E
-B730>I<007FB6FCB71280A46C1500260007F0C7FCB3B3A8007FB6FCB71280A46C150021
-3879B730>73 D<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80EE1FC0A9003F
-B7FC5AB8FCA27E6C16802A387EB730>76 D<D83FF8ECFFE0486C4913F0486C4913F8A200
-7F16F06C6C4913E00007160001EF14BFEC800FA39039E7C01F3FA4ECE03F01E3133EA2EC
-F07EA201E1137CA2ECF8FCA201E013F8A214FDEC7DF0A3147FEC3FE0A3EC1FC0A2EC0700
-91C7FCADD83FFC903801FFE0486C4913F0B54913F8A26C486D13F06C486D13E02D387FB7
-30>I<003FB712C04816E0B8FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC
-4980A46D91C7FC2B387EB730>84 D<EB7FF80003B5FC4814C04880488048809038E01FFC
-9038C003FE14016E7E6C487F6CC77FC8123FA491B5FC130F137F48B6FC12075A48EB803F
-383FF800EA7FE0138048C7FC5AA4157F7E6C6C13FFEBC003263FF01FEBFF8090B712C07E
-6C14EF000314876CD9FE01138026003FE0C8FC2A2A7BA830>97 D<913801FFE04A7F5CA2
-8080EC0007AAEB03FE90381FFF874913E790B6FC5A5A481303380FFC00D81FF0133F4913
-1F485A150F4848130790C7FCA25AA25AA87E6C140FA27F003F141F6D133F6C7E6D137F39
-0FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01C713E0011F010313C0D907FCC8
-FC2C397DB730>100 D<49B4FC010713E0011F13F8017F7F90B57E488048018113803A07
-FC007FC04848133FD81FE0EB1FE0150F484814F0491307127F90C7FCED03F85A5AB7FCA5
-16F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307D807FEEB1FF03A03FFC07F
-E06C90B5FC6C15C0013F14806DEBFE00010713F8010013C0252A7CA830>I<387FFFF8B5
-7EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB730>108
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fb cmr8 8 1
-/Fb 1 51 df<EB7F803801FFF0380780FC380E003F48EB1F8048EB0FC05A0060EB07E012
-F000FC14F07E1403A3007C1307C7FCA215E0140F15C0141F1580EC3F00147E147C5C495A
-495A495A495A011EC7FC5B5B4913305B485A4848136048C7FC000E14E0001FB5FC5A4814
-C0B6FCA21C2C7DAB23>50 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc cmmi10 10.95 2
-/Fc 2 77 df<49B6D8C03FB512F81BF01780D900010180C7383FF00093C85B4B5EA2197F
-14034B5EA219FF14074B93C7FCA260140F4B5DA21803141F4B5DA21807143F4B5DA2180F
-4AB7FC61A20380C7121F14FF92C85BA2183F5B4A5EA2187F13034A5EA218FF13074A93C8
-FCA25F130F4A5DA21703131F4A5DA2013F1507A24A5D496C4A7EB6D8E01FB512FCA2614D
-3E7DBD4C>72 D<49B612F0A3D900010180C7FC93C8FC5DA314035DA314075DA3140F5DA3
-141F5DA3143F5DA3147F5DA314FF92C9FCA35B5C180C181E0103161C5C183C183813074A
-1578187018F0130F4AEC01E0A21703011FED07C04A140F171F013FED3F8017FF4A130301
-7F021F1300B9FCA25F373E7DBD3E>76 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd cmtt10 10 30
-/Fd 30 121 df<007FB6FCB71280A46C150021067B9B2C>45 D<121FEA3F80EA7FC0EAFF
-E0A5EA7FC0EA3F80EA1F000B0B708A2C>I<1507ED0F80151FA2153F16005D157E15FE5D
-14015D14035DA214075D140F5D141F5D143F92C7FC5C147E14FE5CA213015C13035C1307
-5C130F5C131F5CA2133F91C8FC5B137E13FE5B12015B12035B12075BA2120F5B121F5B12
-3F90C9FC5A127E12FE5AA25A127821417BB92C>I<121FEA3F80EA7FC0EAFFE0A5EA7FC0
-EA3F80EA1F00C7FCAE121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B2470A32C>
-58 D<14FE497EA4497FA214EFA2130781A214C7A2010F7FA314C390381F83F0A590383F
-01F8A490387E00FCA549137E90B512FEA34880A29038F8003FA34848EB1F80A4000715C0
-49130FD87FFEEBFFFC6D5AB514FE6C15FC497E27347EB32C>65 D<007FB512E015F8B612
-FE6C8016C03903F0003FED0FE0ED07F01503A2ED01F8A6ED03F0A21507ED0FE0ED1FC0ED
-FF8090B612005D5D15FF16C09039F0001FE0ED07F0ED03F81501ED00FCA216FE167EA616
-FE16FC1501ED03F8150FED3FF0007FB612E016C0B712806CECFE0015F027337FB22C>I<
-007FB5FCB612C015F0816C803907E003FEEC00FFED7F80153FED1FC0ED0FE0A2150716F0
-150316F81501A4ED00FCACED01F8A3150316F0A2150716E0150FED1FC0153FED7F80EDFF
-00EC03FE007FB55AB65A5D15C06C91C7FC26337EB22C>68 D<007FB612F0B712F8A37E39
-03F00001A7ED00F01600A4EC01E04A7EA490B5FCA5EBF003A46E5A91C8FCA5163C167EA8
-007FB612FEB7FCA36C15FC27337EB22C>I<007FB512F8B612FCA36C14F839000FC000B3
-B3A5007FB512F8B612FCA36C14F81E3379B22C>73 D<387FFFE0B57EA36C5BD803F0C8FC
-B3AE16F0ED01F8A8007FB6FCB7FCA36C15F025337DB22C>76 D<D87FE0EB0FFC486CEB1F
-FEA26D133F007F15FC000F15E001BC137BA4019E13F3A3EB9F01A2018F13E3A21483A201
-8713C314C7A201831383A214EFA201811303A214FFEB80FEA3147C14381400ACD87FF0EB
-1FFC486CEB3FFEA36C48EB1FFC27337EB22C>I<007FB512C0B612F88115FF6C15802603
-F00013C0153FED0FE0ED07F0A2150316F81501A6150316F01507A2ED0FE0ED3FC015FF90
-B61280160015FC5D15C001F0C8FCB0387FFF80B57EA36C5B25337EB22C>80
-D<007FB612FCB712FEA43AFC007E007EA70078153CC71400B3AF90383FFFFCA2497F6D5B
-A227337EB22C>84 D<3801FFF0000713FE001F6D7E15E048809038C01FF81407EC01FC38
-1F80000006C77EC8127EA3ECFFFE131F90B5FC1203120F48EB807E383FF800EA7FC090C7
-FC12FE5AA47E007F14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EBFE1F3A003FF0
-07FC27247CA32C>97 D<EA7FF0487EA3127F1201AAEC1FE0ECFFF801FB13FE90B6FC1680
-9138F07FC09138801FE091380007F049EB03F85BED01FC491300A216FE167EA816FE6D14
-FCA2ED01F86D13036DEB07F0150F9138801FE09138E07FC091B51280160001FB5B01F813
-F83900F03FC027337FB22C>I<903803FFE0011F13F8017F13FE48B5FC48804848C6FCEA
-0FF0485A49137E4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB1F806C7E6D13
-3F6C6CEB7F003907FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC21247AA32C>I<EC
-0FFE4A7EA380EC003FAAEB07F8EB3FFE90B512BF4814FF5A3807FC0F380FF00348487E49
-7E48487F90C7FC007E80A212FE5AA87E007E5CA2007F5C6C7E5C6C6C5A380FF0073807FC
-1F6CB612FC6CECBFFE6C143FEB3FFC90390FF01FFC27337DB22C>I<EB03FE90381FFFC0
-017F13F048B57E48803907FE03FE390FF800FFD81FE0EB3F805B4848EB1FC090C7120F5A
-007E15E015075AB7FCA416C000FCC9FC7E127EA2127F6CEC03C06DEB07E06C7ED80FF013
-0F6C6CEB3FC001FF13FF000190B512806C1500013F13FC010F13F00101138023247CA32C
->I<EC0FF8EC3FFE91B5FC4914805B903807FC7F14F090390FE03F0014C092C7FCA6007F
-B512FEB7FCA36C5C26000FC0C7FCB3A8003FB512F04880A36C5C21337DB22C>I<ED03F8
-903907F80FFC90391FFE3FFE017FB6FC48B7FC48ECFE7F9038FC0FF82607F003133E3A0F
-E001FC1CD9C0001300001F8049137EA66D13FE000F5CEBE0016C6C485A3903FC0FF048B5
-FC5D481480D99FFEC7FCEB87F80180C8FCA37F6C7E90B512F06C14FE48ECFF804815E048
-15F03A3FC0001FF848C7EA03FC007E1400007C157C00FC157E48153EA46C157E007E15FC
-D87F801303D83FE0EB0FF8D81FFCEB7FF06CB612E0000315806C1500D8003F13F8010713
-C028387EA42C>I<EA7FF0487EA3127F1201AAEC1FE0EC7FFC9038F9FFFE01FB7F90B6FC
-9138F03F80ECC01F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A36C01E01400
-29337FB22C>I<1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFFC080B5FC7EA2
-EA0007B3A8007FB512FCB612FEA36C14FC1F3479B32C>I<387FFFE0B57EA37EEA0003B3
-B3A5007FB61280B712C0A36C158022337BB22C>108 D<397FF01FE039FFF87FFC9038F9
-FFFE01FB7F6CB6FC00019038F03F80ECC01F02807FEC000F5B5BA25BB3267FFFE0B5FCB5
-00F11480A36C01E0140029247FA32C>110 D<EB07FCEB1FFF017F13C048B512F0488039
-07FC07FC390FF001FE48486C7E0180133F003F158090C7121F007EEC0FC0A348EC07E0A7
-6C140F007E15C0A2007F141F6C15806D133F6C6CEB7F006D5B6C6C485A3907FC07FC6CB5
-5A6C5C6C6C13C0011F90C7FCEB07FC23247CA32C>I<397FF01FE039FFF8FFF801FB13FE
-90B6FC6C158000019038F07FC09138801FE091380007F049EB03F85BED01FC491300A216
-FE167EA816FE6D14FCA2ED01F86D13036DEB07F0150F9138801FE09138E07FC091B51280
-160001FB5B01F813F8EC3FC091C8FCAD387FFFE0B57EA36C5B27367FA32C>I<D87FFEEB
-3FC0B53801FFF0020713F8021F13FC6C5B39003F7FE1ECFF019138FC00F84A13704A1300
-5CA25C5CA391C8FCAF007FB512E0B67EA36C5C26247EA32C>114
-D<131E133FA9007FB6FCB71280A36C1500D8003FC8FCB1ED03C0ED07E0A5EC800F011FEB
-1FC0ECE07F6DB51280160001035B6D13F89038003FE0232E7EAD2C>116
-D<D87FFFEB7FFF6EB5FCB515806C16004A7ED807C0EB01F0A66C6C495AA3143E147FA2D8
-01F0495AECFF87A214F7A201F113C700005D9038F9E3CFA201FB13EFA3D97BC190C7FC01
-7F13FFA21480A2013F5B90381F007C29247FA32C>119 D<3A3FFF03FFF048018713F8A3
-6C010313F03A00FC007E005D90387E01F8013F5BEB1F83EC87E090380FCFC0903807EF80
-EB03FF6D90C7FC5C6D5A147C14FE130180903803EF80903807CFC0EB0FC7EC83E090381F
-01F0013F7FEB7E00017C137C49137E0001803A7FFF01FFFC1483B514FE6C15FC14012724
-7EA32C>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fe cmsy5 5 1
-/Fe 1 1 df<B612FEA31F037A8B2D>0 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ff cmmi5 5 5
-/Ff 5 115 df<EA1FE0A212035BA4485AA4380F0FC0EB3FF0EB70F8EBC078EA1F801300
-121EA2485BA3903801E080007813E1EB03C1ECC30014C738F001FE386000F8191D7C9C22
->104 D<137013F8A213F013E01300A6EA0F80EA1FC0EA31E01261A2EAC3C01203EA0780
-A3EA0F001308EA1E18A213301370EA0FE0EA07800D1D7D9C16>I<EB0180EB03C01307A2
-EB038090C7FCA6137CEA01FEEA038FEA070F1206120C1200A2131EA45BA45BA4EA70F012
-F8EAF9E0485AB45A007EC7FC12257E9C18>I<EA1FE0A212035BA4485AA4380F00F8EB01
-FCEB070CEB0C1C381E383CEB607CEA1FC0EBE038383FF800EA3C7C131E14040078130CA2
-1418130F00F013F0386003E0161D7C9C1F>I<380F07E0383F8FF83833D81CEA63F038C3
-E03CEBC07C1203143838078000A448C7FCA4121E120C16127D911C>114
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg msam10 10 1
-/Fg 1 4 df<007FB812F8B912FCA300F0CA123CB3B3ACB912FCA36C17F836387BB741>3
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fh cmsy7 7 8
-/Fh 8 107 df<B712FEA327037A8F34>0 D<0060140600F0140E0078141E6C143C6C1478
-6C14F039078001E03903C003C03901E007803900F00F00EB781E6D5A6D5A6D5A6D5A6D5A
-497E497EEB1E78497E497E497E3901E007803903C003C039078001E048C712F0001E1478
-48143C48141E48140E006014061F1F769D34>2 D<017F157F2601FFE0903803FFC00007
-01F890380FF1F0260F83FC90381F0038261E00FF013C7F001890263F8078130C4890261F
-C0E07F007090260FE1C07F0060EB07E3913803F780486DB4C7EA01806E5A157E157F8182
-4B7E0060DAF7E0EB0300913801E3F0DBC3F85B6C90260381FC13066C90260F00FE5B001C
-011E90387F803C6C017C90381FE0F82607C7F86DB45A2601FFE0010313C06C6CC86CC7FC
-391B7C9942>49 D<49B5FC130F133F01FFC7FCEA01F8EA03E0EA078048C8FC121E121C12
-3C123812781270A212F05AA2B7FCA300E0C8FCA27E1270A212781238123C121C121E7E6C
-7EEA03E0EA01F86CB4FC013FB5FC130F130120277AA12D>I<1406140EB3B2007FB712E0
-B8FC7E2B287CA734>63 D<147EEB03FEEB0FE0EB1F00133E5BB35BA2485AEA07E0EAFF80
-00FCC7FCB47EEA07E0EA01F06C7EA2137CB37F7FEB0FE0EB03FEEB007E173B7BAB22>
-102 D<12FCB47EEA0FE0EA01F06C7E137CB37FA27FEB0FC0EB03FEEB007EEB03FEEB0FC0
-EB1F00133EA25BB35B485AEA0FE0EAFF8000FCC7FC173B7BAB22>I<12E0B3B3B3A5033B
-78AB14>106 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fi cmr5 5 3
-/Fi 3 51 df<14E0B0B712C0A3C700E0C7FCB022237C9B2B>43 D<1360EA01E0120F12FF
-12F11201B3A3387FFF80A2111C7B9B1C>49 D<EA03FCEA0FFF383C0FC0387003E0387801
-F0EAFC0014F8A214781278C712F814F0A2EB01E0EB03C0EB0780EB0F00131C5B13E03801
-C018EA0380EA0600481338383FFFF05AB5FCA2151C7D9B1C>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fj cmmib10 10 1
-/Fj 1 83 df<0103B712E04916FEF0FFC085D90007D9800113F89438003FFCF00FFE5C93
-C76C7EA21A805C5DA3023F4B13005DA24E5A147F4B5D4E5A4E5A02FF4B5A4B495B050790
-C7FCEF3FFC4990B612F0188018E0DBE0017F496E6C7E4B6D7E717EA2496F7E5DA25F495E
-92C7FCA2173F5B4A5DA3013F037F14604A4B13F0A21901017F033F14E04A1603B600F890
-391FFC07C094390FFE1F8071B51200050113FCCBEA3FF0443A7CB848>82
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fk cmr10 10.95 51
-/Fk 51 124 df<913801FFC0021F13FC9139FF007F80D903F8EB0FE0D90FF0EB07F8D91F
-C0EB01FCD97F806DB4FC49C86C7E48486F7E00038348486F7E000F8349150F001F834915
-07003F83A348486F7EAA6C6C4B5AA3001F5FA26C6C4B5AA200075F6D151F00035FA26C6C
-4B5A00005FA2017F4BC7FC6D157EA26D6C5C010F5DA26D6C495A00E0EF0380010315E0D8
-70019238C007006E130301001580A36C0160EC000E003C017049131E263FFFF0ECFFFEA3
-6C5FA339407CBF42>10 D<EC03FE91383FFF809138FE03E0903903F800F0D90FE0133849
-48137C90393F8001FE90387F00035B5BA2485A6F5AED007093C7FCAA16FEB7FCA33901FC
-000315011500B3AC486C497EB5D8F87F13FCA32E407EBF33>12 D<DA03FE49B4FC91273F
-FF801F13C0913BFE03E07F01F0903C03F000F1FC0078D90FE0D97FF0131C49484948133E
-4948484913FF494848495A5B491500A248485C03016E5A0300153896C7FCAA197FBBFCA3
-D801FCC738FE00018485B3AC486C496CECFF80B5D8F87FD9FC3F13FEA347407EBF4C>14
-D<4B6C130C4B6C131EA20307143EA24C133CA2030F147CA293C71278A24B14F8A2031E5C
-A2033E1301A2033C5CA3037C1303A203785CA203F81307A24B5CA20201140F007FBAFCBB
-1280A26C1900C72707C0003EC8FC4B133CA3020F147CA292C71278A24A14F8A2021E5CA3
-023E1301007FBAFCBB1280A26C1900C727F80007C0C8FC4A5CA20101140FA24A91C9FCA3
-01035CA24A131EA20107143EA24A133CA2010F147CA291C71278A34914F8A2011E5CA201
-3E1301A2013C5CA201186D5A41517BBE4C>35 D<1430147014E0EB01C0EB03801307EB0F
-00131E133E133C5B13F85B12015B1203A2485AA2120F5BA2121F90C7FCA25AA3123E127E
-A6127C12FCB2127C127EA6123E123FA37EA27F120FA27F1207A26C7EA212017F12007F13
-787F133E131E7FEB07801303EB01C0EB00E014701430145A77C323>40
-D<12C07E12707E7E121E7E6C7E7F12036C7E7F12007F1378137CA27FA2133F7FA2148013
-0FA214C0A3130714E0A6130314F0B214E01307A614C0130FA31480A2131F1400A25B133E
-A25BA2137813F85B12015B485A12075B48C7FC121E121C5A5A5A5A145A7BC323>I<1506
-150FB3A9007FB912E0BA12F0A26C18E0C8000FC9FCB3A915063C3C7BB447>43
-D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A
-120E5A1218123812300B1C798919>I<B512FEA617067F961E>I<121EEA7F80A2EAFFC0A4
-EA7F80A2EA1E000A0A798919>I<EB01FE90380FFFC090383F03F090387C00F849137C48
-487F48487F4848EB0F80A2000F15C04848EB07E0A3003F15F0A290C712034815F8A64815
-FCB3A26C15F8A56C6CEB07F0A3001F15E0A36C6CEB0FC0A26C6CEB1F80000315006C6C13
-3E6C6C5B017C5B90383F03F090380FFFC0D901FEC7FC263F7DBC2D>48
-D<EB01C013031307131F137FEA07FFB5FC139FEAF81F1200B3B3ACEB7FF0B612F8A31D3D
-78BC2D>I<EB07FC90383FFF8090B512E03903F01FF83907C007FC390F0001FE001E6D7E
-001C1580003CEC7FC05AED3FE01270B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0153FA2
-16C0157F168015FF16004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC147E147C5C495A495A495A
-495A49C71270133E133C5B4914E0485A485A485A48C7120148B6FCA25A4815C0B7FCA324
-3D7CBC2D>I<EB07FC90383FFF809038F80FE03901E003F839078001FCD80F007F000E6D
-7E001E1580D81F80137F486C14C07FA27F5BA2121F6C5AC8138015FF1600A24A5AA24A5A
-5DEC07E04A5A023FC7FCEB1FFCECFF809038000FE0EC07F86E7E6E7E6E7E1680ED7FC0A2
-16E0153FA216F0A2120C123F487E487EA316E0A249137F6CC713C01278EDFF807E6C4913
-006C495A3907C007FC3903F80FF0C6B55A013F1380D907F8C7FC243F7CBC2D>I<150E15
-1E153EA2157EA215FE1401A21403EC077E1406140E141CA214381470A214E0EB01C0A2EB
-0380EB0700A2130E5BA25B5BA25B5B1201485A90C7FC5A120E120C121C5AA25A5AB8FCA3
-C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<00061403D80780131F01F813FE90B5FC5D5D
-5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E03E090387001F8496C7E
-49137E497F90C713800006141FC813C0A216E0150FA316F0A3120C127F7F12FFA416E090
-C7121F12FC007015C012780038EC3F80123C6CEC7F00001F14FE6C6C485A6C6C485A3903
-F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>I<EC1FE0ECFFF8903803F03E90380FC0
-0F90391F000780133E017EEB1FC049133F4848137F12035B12074848EB3F80ED1F00001F
-91C7FC5BA2123FA3485AA214FE903887FF8039FF8F07E090389C01F09038B800FC01B013
-7E13F0497F16804914C0A2ED1FE0A34914F0A5127FA6123F6D14E0A2121FED3FC0A26C6C
-1480A20007EC7F006C6C137E6C6C5B6C6C485A90387E07F06DB45A010F1380D903FCC7FC
-243F7CBC2D>I<1238123C123F90B612FCA316F85A16F016E00078C712010070EC03C0ED
-078016005D48141E151C153C5DC8127015F04A5A5D14034A5A92C7FC5C141EA25CA2147C
-147814F8A213015C1303A31307A3130F5CA2131FA6133FAA6D5A0107C8FC26407BBD2D>
-I<EB03FC90381FFF8090387C07E09038F001F83901E0007C48487F48487F48C7FCED0F80
-121E16C0003E1407A4123FA26DEB0F807F6C6C131F6D140001FC133E6C6C5B9038FF8078
-6C6D5A6CEBF3E06CEBFF806C91C7FC133F6D13C06D7F013F13F801787F48486C7E3903E0
-1FFF48486C1380260F800313C048487E489038007FE0003E143F007E141F007CEC0FF015
-07481403A31501A46C15E0007C1403A2007E15C06C14076CEC0F806DEB1F006C6C133ED8
-07F05B3901FC03F86CB512E0011F1380D903FCC7FC243F7CBC2D>I<EB03FCEB1FFF9038
-7E07C09038FC03F048486C7E48486C7E4848137C000F147E4848137F81003F15805B007F
-15C0A2151F12FF16E0A516F0A5127F153FA36C7EA2001F147F120F6C6C13FF6D13DF0003
-13013900F8039F90387E0F1FD91FFE13E0EB07F090C7FCA2ED3FC0A41680157FD80F8014
-00487E486C13FEA24A5A5D49485AEB8007391E000FE0001F495A260FC07FC7FC3803FFFE
-6C13F838003FC0243F7CBC2D>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121E
-EA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F80A2EAFFC0A4EA7F80A2
-EA1E00C7FCB3121E127FEAFF80A213C0A4127F121E1200A412011380A3120313005A1206
-120E120C121C5A1230A20A3979A619>I<DB3FF01306912603FFFE130E020F9038FF801E
-913A3FF007E03E9139FF8000F8D903FEC7EA7C7ED907F8EC1EFE4948140FD93FE0140749
-481403495A91C812014848150012034848167E5B000F173EA24848161EA2123F5B180E12
-7FA349160012FFAC127F7F180EA2123FA27F001F171E181C6C7EA20007173C6D16386C6C
-1678000117706C6C16F06EEC01E06D6C15C06D6C1403D90FF0EC07806D6CEC1F00D903FE
-143E902600FF8013F891393FF007F0020FB512C0020391C7FC9138003FF037427BBF42>
-67 D<B912E0A300019038C000016C6C48EB001FEF0FF01703A217011700A31870A41838
-1638A41800A21678A216F81501150791B5FCA3EC8007150115001678A21638A2180EA318
-1C93C7FCA4183C1838A21878A318F8EF01F0A21707170F173F48486CEB03FFB912E0A337
-3E7DBD3E>69 D<B91280A300019038C000036C6C48EB007FEF1FC0170F1707A21703A317
-01A4EF00E0A21638A31800A31678A216F81501150791B5FCA3EC8007150115001678A216
-38A693C8FCAF3801FFE0B612F0A3333E7DBD3B>I<B56C91B512F88080D8007F03071300
-6EEC01FC6E6E5A1870EB77FCEB73FEA2EB71FF01707FA26E7E6E7EA26E7E6E7EA26E7E6E
-7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2EE7FC0EE3FE0A2EE
-1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A2177F173FA2171F170FA2170701F81503
-487ED807FF1501B500F81400A218703D3E7DBD44>78 D<003FB91280A3903AF0007FE001
-018090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00E0A5C816
-00B3B14B7E4B7E0107B612FEA33B3D7DBC42>84 D<B691380FFFFEA3000301E0020113E0
-6C01809138007F806CEF3F00017F163E181C6E153C013F1638A26E1578011F1670A26D6C
-5DA26E140101075EA26E140301035EA26D6C4AC7FCA2806D150EA26F131E027F141CA26F
-133C023F1438A26E6C5BA26F13F0020F5CA2EDF80102075CA26E6C485AA2EDFE07020191
-C8FCA26F5A6E130EA2ED7F9CA216DCED3FF8A36F5AA36F5AA26F5AA36F5A3F407EBD44>
-86 D<EB0FF8EBFFFE3903F01F8039078007E0000F6D7E9038E001F8D81FF07F6E7EA315
-7F6C5AEA0380C8FCA4EC1FFF0103B5FC90381FF87FEB7F803801FC00EA07F8EA0FE0485A
-485AA248C7FCEE038012FEA315FFA3007F5BEC03BF3B3F80071F8700261FC00E13CF3A07
-F03C0FFE3A01FFF807FC3A003FC001F0292A7DA82D>97 D<EA01FC12FFA3120712031201
-B1EC03FC91381FFF8091387C07E09039FDE001F09039FFC000FC4A137E91C77E49158049
-141F17C0EE0FE0A217F0A2160717F8AA17F0A2160FA217E0161F17C06D1580EE3F006D5C
-6E13FE9039F3C001F89039F1E003F09039E0780FC09026C03FFFC7FCC7EA07F82D407EBE
-33>I<49B4FC010F13E090383F00F8017C131E4848131F4848137F0007ECFF80485A5B12
-1FA24848EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3003FEC01C07F001F140316806C
-6C13076C6C14000003140E6C6C131E6C6C137890383F01F090380FFFC0D901FEC7FC222A
-7DA828>I<ED01FC15FFA3150715031501B114FF010713E190381F80F990387E003D4913
-1FD803F81307485A49130348481301121F123F5B127FA290C7FCA25AAA7E7FA2123FA26C
-7E000F14037F000714076C6C497E6C6C497ED8007C017913F890383F01F190380FFFC190
-3A01FE01FC002D407DBE33>I<EB01FE90380FFFC090383F03F09038FC01F848486C7E48
-48137E48487F000F158049131F001F15C04848130FA2127F16E090C7FCA25AA290B6FCA2
-90C9FCA67EA27F123F16E06C7E1501000F15C06C6C13036DEB07806C6C1400C66C131E01
-7E5B90381F80F8903807FFE0010090C7FC232A7EA828>I<EC1FC0EC7FF8903801F83C90
-3807E07E90380FC0FFEB1FC1EB3F811401137FEC00FE01FE137C1500AEB6FCA3C648C7FC
-B3AE487E007F13FFA320407EBF1C>I<167C903903F801FF903A1FFF078F8090397E0FDE
-1F9038F803F83803F001A23B07E000FC0600000F6EC7FC49137E001F147FA8000F147E6D
-13FE00075C6C6C485AA23901F803E03903FE0FC026071FFFC8FCEB03F80006CAFC120EA3
-120FA27F7F6CB512E015FE6C6E7E6C15E06C810003813A0FC0001FFC48C7EA01FE003E14
-0048157E825A82A46C5D007C153E007E157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800
-FE017FC7FC90383FFFFC010313C0293D7EA82D>I<EA01FC12FFA3120712031201B1EC01
-FE913807FFC091381E07E091387803F09138E001F8D9FDC07F148001FF6D7E91C7FCA25B
-A25BB3A6486C497EB5D8F87F13FCA32E3F7DBE33>I<EA01E0EA07F8A2487EA46C5AA2EA
-01E0C8FCACEA01FC127FA3120712031201B3AC487EB512F0A3143E7DBD1A>I<EA01FC12
-FFA3120712031201B3B3B1487EB512F8A3153F7DBE1A>108 D<2701F801FE14FF00FF90
-2707FFC00313E0913B1E07E00F03F0913B7803F03C01F80007903BE001F87000FC2603F9
-C06D487F000101805C01FBD900FF147F91C75B13FF4992C7FCA2495CB3A6486C496CECFF
-80B5D8F87FD9FC3F13FEA347287DA74C>I<3901F801FE00FF903807FFC091381E07E091
-387803F000079038E001F82603F9C07F0001138001FB6D7E91C7FC13FF5BA25BB3A6486C
-497EB5D8F87F13FCA32E287DA733>I<14FF010713E090381F81F890387E007E01F8131F
-4848EB0F804848EB07C04848EB03E0000F15F04848EB01F8A2003F15FCA248C812FEA448
-15FFA96C15FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB
-1F80D8007EEB7E0090383F81FC90380FFFF0010090C7FC282A7EA82D>I<3901FC03FC00
-FF90381FFF8091387C0FE09039FDE003F03A07FFC001FC6C496C7E6C90C7127F49EC3F80
-5BEE1FC017E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE
-9138C001F89039FDE007F09039FC780FC0DA3FFFC7FCEC07F891C9FCAD487EB512F8A32D
-3A7EA733>I<3901F807E000FFEB1FF8EC787CECE1FE3807F9C100031381EA01FB1401EC
-00FC01FF1330491300A35BB3A5487EB512FEA31F287EA724>114
-D<90383FC0603901FFF8E03807C03F381F000F003E1307003C1303127C0078130112F814
-00A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F6C1480000114C0D8003F13E00103
-13F0EB001FEC0FF800E01303A214017E1400A27E15F07E14016C14E06CEB03C090388007
-8039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<131CA6133CA4137CA213FCA2120112
-031207001FB512C0B6FCA2D801FCC7FCB3A215E0A912009038FE01C0A2EB7F03013F1380
-90381F8700EB07FEEB01F81B397EB723>I<D801FC14FE00FF147FA30007140300031401
-00011400B3A51501A31503120015076DEB06FF017E010E13806D4913FC90381FC0789038
-07FFE00100903880FE002E297DA733>I<B539E00FFFE0A32707FE000313006C48EB00FC
-5E00015D7F00005DA26D13016D5CA26D6C485AA2ECC007011F91C7FCA290380FE00EA2EC
-F01E0107131CA26D6C5AA2ECFC7801011370A2ECFEF001005BA2EC7FC0A36E5AA26EC8FC
-A3140E2B287EA630>I<B53BC3FFFE03FFF8A3290FFE003FE00013C06C486D48EB3F806C
-4817006D010F141E00016F131C15076D163C00004A6C1338A2017F5E4B7E151DD93F805D
-ED3DFC1538D91FC04A5AED78FE9238707E03D90FE0017F5BEDE03F02F0140701070387C7
-FC9138F1C01F02F9148F010315CE9138FB800F02FF14DE6D15FCED00076D5DA24A130302
-7E5CA2027C1301023C5C023813003D287EA642>I<B539F01FFFE0A30003D9C00F1300C6
-90388007F8D97F0013E002805BD93FC05B011F49C7FC90380FE00EECF01E6D6C5A01035B
-6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147BECF1FC903801E1FEECC0FF01037F49
-486C7ED90F007F011E6D7E013E130F496D7E01FC80486C80000F4A7EB539803FFFF8A32D
-277FA630>I<B539E00FFFE0A32707FE000313006C48EB01FC6F5A00015D7F00005DA201
-7F495AA2EC8003013F5CA26D6C48C7FCA26E5A010F130EA26D6C5AA2ECF83C01031338A2
-6D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36EC8FCA2140EA2141E141C143C1438A21478
-00181370127EB45BA2495AA248485AD87E07C9FCEA780EEA3C3CEA1FF8EA07E02B3A7EA6
-30>I<B812F0A22C0280982D>123 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fl cmex10 10 31
-/Fl 31 101 df<1430147014E0EB01C01303EB0780EB0F00A2131E5BA25B13F85B12015B
-1203A2485AA3485AA3121F90C7FCA25AA3123EA2127EA6127C12FCB3A2127C127EA6123E
-A2123FA37EA27F120FA36C7EA36C7EA212017F12007F13787FA27F7FA2EB0780EB03C013
-01EB00E0147014301462738226>0 D<12C07E12707E123C7E7EA26C7E6C7EA26C7E7F12
-007F1378137CA27FA37FA31480130FA214C0A31307A214E0A6130314F0B3A214E01307A6
-14C0A2130FA31480A2131F1400A3133EA35BA2137813F85B12015B485AA2485A48C7FCA2
-121E5A12385A5A5A14627C8226>I<1538EC01F8EC07E0EC1F80EC7E005CEB03F85C495A
-A2495AB3AB131F5CA249C7FC137E5BEA03F8EA07E0EA3F8000FCC8FCA2EA3F80EA07E0EA
-03F8C67E137E7F6D7EA280130FB3AB6D7EA26D7E80EB00FC147EEC1F80EC07E0EC01F8EC
-00381D62778230>8 D<12E012FCEA3F80EA07E0EA03F8C67E137E7F6D7EA280130FB3AB
-6D7EA26D7E80EB00FC147EEC1F80EC07E0EC01F8A2EC07E0EC1F80EC7E005CEB03F85C49
-5AA2495AB3AB131F5CA249C7FC137E5BEA03F8EA07E0EA3F8000FCC8FC12E01D62778230
->I<151E153E157C15F8EC01F0EC03E01407EC0FC0EC1F8015005C147E5CA2495A495AA2
-495AA2495AA2495AA249C7FCA2137EA213FE5B12015BA212035BA21207A25B120FA35B12
-1FA45B123FA548C8FCA912FEB3A8127FA96C7EA5121F7FA4120F7FA312077FA21203A27F
-1201A27F12007F137EA27FA26D7EA26D7EA26D7EA26D7EA26D7E6D7EA2147E80801580EC
-0FC0EC07E01403EC01F0EC00F8157C153E151E1F94718232>16 D<12F07E127C7E7E6C7E
-7F6C7E6C7E12017F6C7E137EA27F6D7EA26D7EA26D7EA26D7EA26D7EA26D7EA280147E14
-7F80A21580141FA215C0A2140F15E0A3140715F0A4140315F8A5EC01FCA9EC00FEB3A8EC
-01FCA9EC03F8A515F01407A415E0140FA315C0141FA21580A2143F1500A25C147E14FE5C
-A2495AA2495AA2495AA2495AA2495AA249C7FC137EA25B485A5B1203485A485A5B48C8FC
-123E5A5A5A1F947D8232>I<160F161F163E167C16F8ED01F0ED03E0ED07C0150FED1F80
-1600153E157E5D4A5A5D14034A5A5D140F4A5AA24AC7FC143E147E5CA2495AA2495AA249
-5AA2130F5CA2495AA2133F91C8FCA25B137E13FEA25B1201A25B1203A35B1207A35B120F
-A35BA2121FA45B123FA690C9FC5AAA12FEB3AC127FAA7E7FA6121F7FA4120FA27FA31207
-7FA312037FA312017FA212007FA2137E137F7FA280131FA26D7EA2801307A26D7EA26D7E
-A26D7EA2147E143E143F6E7EA26E7E1407816E7E1401816E7E157E153E811680ED0FC015
-07ED03E0ED01F0ED00F8167C163E161F160F28C66E823D>I<12F07E127C7E7E6C7E6C7E
-6C7E7F6C7E1200137C137E7F6D7E130F806D7E1303806D7EA26D7E147C147E80A26E7EA2
-6E7EA26E7EA2811403A26E7EA2811400A281157E157FA2811680A2151F16C0A3150F16E0
-A3150716F0A31503A216F8A4150116FCA6150016FEAA167FB3AC16FEAA16FC1501A616F8
-1503A416F0A21507A316E0150FA316C0151FA31680153FA216005DA2157E15FE5DA21401
-5DA24A5AA214075DA24A5AA24A5AA24AC7FCA2147E147C14FC495AA2495A5C1307495A5C
-131F49C8FC137E137C5B1201485A5B485A485A48C9FC123E5A5A5A28C67E823D>I<161E
-167EED01FE1507ED0FF8ED3FE0ED7FC0EDFF80913801FE004A5A4A5A5D140F4A5A5D143F
-5D147F92C7FCA25C5CB3B3B3A313015CA3495AA213075C495AA2495A495A137F49C8FC48
-5A485AEA07F0EA1FE0485AB4C9FC12FCA2B4FCEA3FC06C7EEA07F0EA03FC6C7E6C7E6D7E
-133F6D7E6D7EA26D7E801303A26D7EA3801300B3B3B3A38080A281143F81141F816E7E14
-07816E7E6E7E913800FF80ED7FC0ED3FE0ED0FF8ED07FE1501ED007E161E27C675823E>
-26 D<12F012FCB4FC13C0EA3FE0EA0FF86C7E6C7EC67E6D7E6D7E131F806D7E13078013
-03801301A2801300B3B3B3A38080A36E7EA281141F6E7EA26E7E6E7E816E7E6E7EED7F80
-ED1FC0ED0FF0ED07F8ED01FEED007EA2ED01FEED07F8ED0FF0ED1FC0ED7F80EDFF004A5A
-4A5A5D4A5A4A5AA24A5A143F5DA24AC7FCA35C5CB3B3B3A313015CA213035C13075C130F
-495A5C133F495A49C8FCEA03FE485A485AEA3FE0B45A90C9FC12FC12F027C675823E>I<
-EE01C0EE03E0A2160717C0A2160F1780161F1700A25E163E167E167CA216FC5EA215015E
-15035EA215075E150F5EA2151F93C7FC5D153EA2157E157C15FC5DA214015DA214035D14
-075DA2140F5D141F92C8FCA25C143E147E147CA214FC5C13015CA213035CA213075C130F
-5CA2131F91C9FC5B133EA2137E137C13FC5BA212015B12035BA212075BA2120F5B121F90
-CAFCA25A123E127E127CA212FC5A7E127CA2127E123E123F7EA27F120F7F1207A27F1203
-A27F12017F1200A27F137C137E133EA2133F7F80130FA2801307801303A2801301A28013
-0080147CA2147E143E143F80A281140F811407A2811403811401A2811400A281157C157E
-153EA2153F8182150FA2821507821503A2821501821500A282167CA2167E163E163F82A2
-1780160F17C01607A217E01603A2EE01C02BC776823E>I<127012F8A27E127CA2127E12
-3E123F7EA27F120F7F1207A27F1203A27F12017F1200A27F137C137E133EA2133F7F8013
-0FA2801307801303A2801301A280130080147CA2147E143E143F80A281140F811407A281
-1403811401A2811400A281157C157E153EA2153F8182150FA2821507821503A282150182
-1500A282167CA2167E163E163F82A21780160F17C01607A217E01603160717C0A2160F17
-80161F1700A25E163E167E167CA216FC5EA215015E15035EA215075E150F5EA2151F93C7
-FC5D153EA2157E157C15FC5DA214015DA214035D14075DA2140F5D141F92C8FCA25C143E
-147E147CA214FC5C13015CA213035CA213075C130F5CA2131F91C9FC5B133EA2137E137C
-13FC5BA212015B12035BA212075BA2120F5B121F90CAFCA25A123E127E127CA212FC5AA2
-12702BC778823E>I<176017F0EE01F8A3EE03F0A3EE07E0A3EE0FC0A3EE1F80A3EE3F00
-A3167EA35EA34B5AA34B5AA34B5AA44B5AA34B5AA34BC7FCA3157EA35DA34A5AA34A5AA3
-4A5AA34A5AA34A5AA44AC8FCA3147EA35CA3495AA3495AA3495AA3495AA3495AA349C9FC
-A4137EA35BA3485AA3485AA3485AA3485AA3485AA348CAFCA3127EA35AA4127EA37EA36C
-7EA36C7EA36C7EA36C7EA36C7EA36C7EA3137EA37FA46D7EA36D7EA36D7EA36D7EA36D7E
-A36D7EA3147EA380A36E7EA46E7EA36E7EA36E7EA36E7EA36E7EA3157EA381A36F7EA36F
-7EA36F7EA46F7EA36F7EA36F7EA3167EA382A3EE1F80A3EE0FC0A3EE07E0A3EE03F0A3EE
-01F8A3EE00F017602DF8748243>42 D<1230127812FCA3127EA37EA36C7EA36C7EA36C7E
-A36C7EA36C7EA36C7EA3137EA37FA46D7EA36D7EA36D7EA36D7EA36D7EA36D7EA3147EA3
-80A36E7EA36E7EA46E7EA36E7EA36E7EA36E7EA3157EA381A36F7EA36F7EA36F7EA46F7E
-A36F7EA36F7EA3167EA382A3EE1F80A3EE0FC0A3EE07E0A3EE03F0A3EE01F8A4EE03F0A3
-EE07E0A3EE0FC0A3EE1F80A3EE3F00A3167EA35EA34B5AA34B5AA34B5AA44B5AA34B5AA3
-4BC7FCA3157EA35DA34A5AA34A5AA34A5AA34A5AA44A5AA34AC8FCA3147EA35CA3495AA3
-495AA3495AA3495AA3495AA349C9FCA4137EA35BA3485AA3485AA3485AA3485AA3485AA3
-48CAFCA3127EA35AA3127812302DF8778243>I<177C17FCEE01F8A2EE03F0EE07E0EE0F
-C0A2EE1F80EE3F005E167E5E15015E15034B5A5E150F5E151F4B5AA24BC7FCA215FEA24A
-5AA24A5AA24A5AA2140F5D141F5D143F5DA2147F92C8FC5CA25C13015C1303A25C1307A3
-495AA3495AA3133F5CA3137F5CA313FF91C9FCA35A5BA31203A25BA31207A35BA3120FA4
-5BA2121FA65BA2123FA85BA2127FAE5B12FFB3A62E95688149>48
-D<12F87E127EA27E6C7E6C7EA26C7E6C7E7F12016C7E7F137E137F6D7E131F80130F806D
-7EA26D7EA26D7EA26D7EA2147FA26E7EA281141F81140F811407A281140381A214018114
-0081A28182A36F7EA36F7EA382150FA3821507A3821503A3821501A382A281A31780A316
-7FA317C0A4163FA217E0A6161FA217F0A8160FA217F8AE160717FCB3A62E957E8149>I<
-EC01F01407140F143F147F903801FFC0491380491300495A495A495A495A5C495A485B5A
-91C7FC485AA2485AA2485AA2123F5BA2127F5BA412FF5BB3B3A71C4B607E4A>56
-D<12F812FE6C7E7F13F0EA3FF86C7E6C7EEA03FF6C7F6C7F6D7E6D7E806D7E130F6D7E80
-7F15807F15C07FA2EC7FE0A3EC3FF0A415F8141FB3B3A71D4B737E4A>I<EAFFC0B3B3A7
-7F127FA47F123FA27F121FA26C7EA26C7EA26C7E807E6C7F6D7E806D7E6D7E6D7E6D7E6D
-13806D13C09038007FF0143F140F140714011C4B60804A>I<EC1FF8B3B3A7143F15F0A4
-EC7FE0A3ECFFC0A25B15805B15005B5C495A131F495A5C495A495A485B4890C7FCEA0FFE
-485A485AB45A13C05B48C8FC12F81D4B73804A>I<EC1FF8B3B3A7143F15F0A4EC7FE0A3
-15C014FFA2491380A215005B5C1307495A5C131F495A5C495A495A4890C7FC485A485A48
-5A485AEA7FE0EAFF8090C8FC12FCB4FC7FEA7FE0EA1FF06C7E6C7E6C7E6C7E6C7F6D7E6D
-7E806D7E130F806D7E1303807F1580A26D13C0A2147F15E0A3EC3FF0A415F8141FB3B3A7
-1D9773804A>I<EAFFC0B3B3A86C7EA56C7EA36C7EA2120F7FA26C7E12037F7E807E6D7E
-6D7E80131F6D7E6D7E6D7E6D7E6D1380EC3FE0EC1FF0140714031407141FEC3FE0ECFF80
-491300495A495A495A495A133F5C495A495A5A91C7FC5A5B1207485AA25B121FA2485AA3
-485AA5485AB3B3A81C9760804A>I<B47EB3A6127F7FAE123FA27FA8121FA27FA6120FA2
-7FA41207A37FA31203A37FA21201A37F7EA380137FA380133FA380131FA36D7EA36D7EA3
-130380A2130180130080A28081143FA281141F81140F811407A26E7EA26E7EA26E7EA215
-7FA26F7EA26F7E150F821507826F7E1501821500167E167F82EE1F80EE0FC0A2EE07E0EE
-03F0EE01F8A2EE00FC177C2E95688349>64 D<EE07FCB3A617F8160FAE17F0A2161FA817
-E0A2163FA617C0A2167FA41780A316FFA31700A35DA25EA315035EA315075EA3150F5EA3
-151F5EA34B5AA34B5AA393C7FC5DA25D14015D1403A25D14075DA2140F5D141F5D143F5D
-A24AC8FCA214FEA2495AA2495AA2495AA2495A5C131F5C133F49C9FC137E13FE5B485A12
-035B485A485AA2485A48CAFC127EA25A5A2E957E8349>I<EAFF80B3B3B00934688049>I<
-EAFF80B3B3B00934598049>I<167F923801FFC0923803C0F0923807803892380F007892
-381F01FC151E153EA2157E92387C0070170015FCA44A5AA81403A45DA41407A94A5AAA4A
-5AA95DA4143FA492C8FCA7143E147EA4147C123800FE13FC5CA2495A5CEA7803387007C0
-383C0F80D80FFEC9FCEA03F82E5C7C7F27>82 D<BF12E08AA38A6C90CCFC0900806C6D19
-076C6D07007F6C6D1A1F1D076C6DF201FF6C6D747E6C6DF33F801E0F6C6D1B076D6CF303
-C06D6D1A01F600E06D7F6D6D1B706D1D30816D6D1B186D6D1B007F816E7E6E7FA26E7F6E
-7F6E7FA26E7F6E7F6E7FA26F7E6F7F6F7FA26F7F6F7F81836F7F6F7F167F83707F707F82
-84707F707FA2707F82715A60173F715A604D5A4DCDFC17FEA24C5A4C5A4C5A4C5A4C5A5F
-163F4CCEFC16FE4B5A4B5A4B5AA24B5A4B5A4B5A4BCFFC15FEA24A5A4A5A4A481B184A48
-1B304A5A4B1B70023F1C604ACF12E002FE1B014948F303C049481B074948F30F801E1F49
-481B7F4948F3FF0049481A0349CE120F01FEF37FFEF403FF48481A7F4848077FB55A48BE
-FC48655AA248655ABFFC666D747B7F78>88 D<BE12FEA5000302E0C9000F1480C66CF2FC
-00011F1AF06D626D62A26D62B3B3B3B3B3A4496D4C7FA2496D4C7F496D4C7F017F01FF4B
-B512FC0003B600E0020FECFF80B8D88003B712FEA55F747B7F6A>I<F107C0F11FF0F17C
-3CF1F80E0601133EF1F07F953803E0FF1807A24E5A1A7E95381F803C1A00A24EC7FCA260
-A2187E18FEA3601701A34D5AA4170760A3170FA260A2171FA260A3173FA360177FA44DC8
-FCA55E5FA31603A35FA21607A35FA2160FA44C5AA5163F5FA4167F5FA416FF5FA45D94C9
-FCA45D5EA54B5AA54B5AA45EA2151FA35EA2153FA35EA3157F5EA54BCAFCA45D1401A35D
-A31403A25DA21407A25DA3140F5DA44A5AA35D143FA392CBFC5CA2147E14FE5CA2383C01
-F8127E12FF495A5C130700FE5B387C0F80D8701FCCFCEA3C3EEA0FFCEA03F048B87B7F2E
->I<197C953807FFC0067F13FC0507B612C0057F15FC040FB50083EBFFE093B526F0001F
-13FE030F01FCC8387FFFE092B50080030313FE020F01F0CA381FFFE0DAFFFCCCEA7FFE01
-1F0180963803FFF02601FFF0CEEA1FFFD81FFED013F0D8FF80F503FE00F0D2121E771080
-BF78>100 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fm cmti10 10 68
-/Fm 68 123 df<04FFEB03F003039038E00FFC923A0FC0F01F1E923A3F00783E0F923A7E
-01F87C3FDB7C03EBFC7F03FC14F8DA01F813F905F1137EDC01E1133C913B03F00003F000
-A314074B130760A3140F4B130F60A3010FB812C0A3903C001F80001F8000A3023F143F92
-C790C7FCA44A5C027E147EA402FE14FE4A5CA413014A13015FA313034A13035FA313074A
-495AA44948495AA44948495AA3001CD9038090C8FC007E90380FC03F013E143E00FE011F
-5B133C017C5C3AF8780F01E0D878F0EB07C0273FE003FFC9FC390F8000FC404C82BA33>
-11 D<EE3FFC4BB51280923907E007C092391F8001E0DB3F0013F0037E13034B1307A24A
-5A18E04A48EB038094C7FCA314075DA4140F5DA3010FB7FCA25F903A001F80007EA217FE
-023F5C92C7FCA216015F5C147E16035FA214FE4A13075FA30101140F5F4AECC1C0A2161F
-1783010316805CA2EF870013074A5CEE0F8EEE079EEE03FC010FEC00F04A91C7FCA35C13
-1FA2001C90CAFC127E5BEAFE3E133C137CEAF878EA78F0EA3FE0EA0F80344C82BA2F>I<
-DC7FC0EB1FFF922603FFF890B512E0923C0FC07C03F801F0923C1F001E0FC00078033E90
-267E1F80137C4BD9FE3FC712FC03FC027E13015D02014A5A057815F84A48D901F8EB00E0
-1B00A302074A5A5DA31707020F5D5DA3010FBA12C0A21B80903D001F80000FC0001FA21A
-3F023F021F150092C75BA2621A7E4A143F027E92C7FC1AFE62A25F02FE027E13014A5FA3
-05FE130301014B5C4A1870A219070401EDE0F001034B15E05CA2F2E1C0010714034D14C3
-4A933803E380F101E7963800FF00010F4A48143C4A94C7FCA34A495A131F5F001CEB0380
-007E90380FC01F013F92CAFC26FE3E1F133E013C5C5E3AF8780F01F0D878F0EB83E03A3F
-E003FF80270F8000FECBFC4E4C82BA49>14 D<130FEB1F80133F137FEBFF00485A5BEA03
-F0485A485A485A003EC7FC5A5A12E05A111064B92A>19 D<3901E003C03907F00FE0000F
-131F01F813F0001F133FA3000F131F3907B00F6038003000A2017013E0016013C0EBE001
-01C01380000113030180130000035B3807000E000E5B485B485B485B48485A00C05B1C19
-71B92B>34 D<EA01E0EA07F0120F13F8121FA3120FEA07B0EA0030A21370136013E013C0
-120113801203EA0700120E5A5A5A5A5A0D196EB919>39 D<150C151C153815F0EC01E0EC
-03C0EC0780EC0F00141E5C147C5C5C495A1303495A5C130F49C7FCA2133EA25BA25BA248
-5AA212035B12075BA2120F5BA2121FA290C8FCA25AA2123EA2127EA2127CA412FC5AAD12
-78A57EA3121C121EA2120E7EA26C7E6C7EA212001E5274BD22>I<140C140E80EC0380A2
-EC01C015E0A2140015F0A21578A4157C153CAB157CA715FCA215F8A21401A215F0A21403
-A215E0A21407A215C0140F1580A2141F1500A2143EA25CA25CA2495AA2495A5C1307495A
-91C7FC5B133E133C5B5B485A12035B48C8FC120E5A12785A12C01E527FBD22>I<EA03C0
-EA07F0120F121F13F8A313F0EA07B0EA003013701360A213E013C01201EA038013005A12
-0E5A5A5A5A5A0D197A8819>44 D<387FFFF8A2B5FCA214F0150579941E>I<120EEA3F80
-127F12FFA31300127E123C0909778819>I<EC03F8EC1FFEEC7C1F9138F80780D901E013
-C0903903C003E0EB0780010F1301D91F0013F0A2133E137E017C130313FCA2485AA20003
-14075BA2120716E049130F120FA34848EB1FC0A44848EB3F80A448C7EA7F00A3157E007E
-14FEA25D00FE13015DA248495AA25D007C13075D4A5AA24AC7FC6C133E5C6C5B380F83E0
-3807FF80C648C8FC243A77B72A>48 D<15181538157815F0140114031407EC0FE0141F14
-7FEB03FF90383FEFC0148FEB1C1F13001580A2143FA21500A25CA2147EA214FEA25CA213
-01A25CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C7FC497EB61280A3
-1D3877B72A>I<EC03F8EC0FFE91383C0F809138F007C0903901E003E0D903C013F09038
-078001020013F8130E131E90391C6000FCEB3870EC30011370A213F013E0EC7003000101
-6013F813C014E0ECC00701C114F0903881800F018314E09039C7001FC001FEEB3F80D800
-78140090C7127E5D4A5A4A5AEC07C0EC1F80023EC7FC14FCEB01F0EB07C0495A011EC8FC
-137C4914C0484813015B485A4848130348C71380000E1407001E140F48EC1F00D83FF85B
-397FFFC07E39783FFFFCEA700FD8F0075BD8E0015B6D13C0021FC7FC263A79B72A>I<EC
-03FCEC1FFF91387E07C09138F003E0903903C001F0D9078013F849C7FC131E011C14FC13
-3CEB38C0EB78E0EB7060150101F014F813E0A2ECE003D971C013F090387F8007D91E0013
-E090C7EA0FC0ED1F80ED3F00157E5D49B45A4913E092C7FC9038000FC0EC03F014016E7E
-81A381A5007E130100FE5CA31403485C00E05C14074A5A5D4A5A007049C7FC0078137E6C
-13F8381E07F03807FF80D801FCC8FC263A78B72A>I<16E0ED01F01503A3150716E0A315
-0F16C0A2151F1680A2ED3F00A3157EA2157C15FC5D14015D14035D14075D140F5D141F92
-C7FC143EA25CECF81C153E903801F07EEB03E014C090380780FE130F49485A133EEB7C01
-137801F05BEA01E03803C003EA0FFE391FFFC3F04813FB267C01FF13403AF0003FFFE000
-601307C71400EC0FE05DA3141F5DA3143F92C7FCA4143E141C24487DB72A>I<157F9138
-03FFC0020F13E0EC3F8191387E00F002F81370903903F003F0903807E007EB0FC0EB1F80
-020013E04914C0017E90C7FC13FE5B485AA21203485AA2380FE07E9038E1FF809038E783
-E0391FCE01F09038DC00F813F84848137C5B157E5B485AA390C712FE5A5AA214015D5AA2
-14035DA348495A5D140F5D4A5A6C49C7FC127C147C6C485A6C485A6CB45A6C1380D801FC
-C8FC243A76B72A>54 D<D9707C130ED9F3FE131E496C133C48B5133816784815F0EC0F01
-9039FC0703E03A07F00307C001E0138F3A0FC001FF80497E48C7EA0F00001E5C48141E15
-3E48143C157C485C5A4A5AC7FC4A5AA24A5A140FA24A5AA24AC7FCA25C147E14FE5C1301
-A25C1303A2495AA3130F5CA2131F5CA2133FA25C137FA391C8FC137E133C273A74B72A>
-I<EC01FCEC0FFF023F13C091387E07E0903901F803F0903803E001D907C013F890380F80
-00A249C7FCA2133EA21501017E14F0A21503017F14E0ED07C09138800F809138C01F0090
-383FF03E6E5A90381FFCF0ECFFE06D138013036D7F497F90380F7FF890383E3FFCEB781F
-48486C7E3803E0073907C001FF48487E001F8090C7FC003E80127E127CA200FC143E5AA2
-5DA25DA24A5A6C495A007C495A007E495A6C013FC7FC381F80FE380FFFF8000313E0C66C
-C8FC253A78B72A>I<EC01FCEC0FFF023F138091387E07C0903901F803E0EB03F0903907
-E001F0EB0FC0EB1F80013F14F814005B137E13FEA2485AA2150312035BA2ED07F012075B
-150FA216E00003141FA2153FED7FC0120115FF6C6C5A90397803BF8090383C0F3FD91FFC
-1300903807F07F90C7FC157E15FE5D14015D4A5AA2003E495A007F495A5D4AC7FC00FE5B
-48137E007013F8387803F0387C0FE0383FFF806C48C8FCEA03F8253A78B72A>I<133C13
-7E13FF5AA313FE13FCEA00701300B2120EEA3F80127F12FFA31300127E123C102477A319
->I<EE01C01603A21607160FA2161F83163FA2167F16FF16EF150116CFED038FA2ED070F
-A2150E151E151C1538A203707FA2EDE007A2EC01C014031580EC0700A2140EA25CA25C02
-7FB5FCA291B6FC9139E00007F849481303A2495A130791C7FC5B130E5BA25B1378137013
-F0EA03F8486C4A7EB56C48B512F0A3343C7BBB3E>65 D<0107B612FCEFFF8018C0903B00
-0FF0001FF04BEB07F81703021F15FC17014B14FEA2023F1400A24B1301A2147F18FC92C7
-120318F84A140718F04AEC0FE0EF1FC00101ED3F80EF7F004AEB01FEEE07F849B612E05F
-9139F80007F0EE01FC01076E7E177F4AEC3F80A2010F16C0171F5CA2131F173F5CA2133F
-EF7F805C1800017F5D4C5A91C7485A5F49140FEE1FE0494A5A00014AB45AB748C7FC16F8
-16C037397BB83A>I<DB03FE130E92393FFF801E92B5EAE03C913903FE01F0913A0FF000
-787CDA3FC0EB3CFC4AC7EA1FF802FE140FEB03FC49481407494815F049481403495A5C49
-C813E05B485A5B000317C0485AA2485A1880485A94C7FCA2485AA3127F5BA312FF90CBFC
-A41738A217784816707E17F06C5E16015F16036C6C4A5A94C7FC001F150E6D141E000F5D
-6D5C6C6C495A6C6CEB03C0D801FEEB0F8027007F807EC8FC6DB45A010F13E0010090C9FC
-373D74BA3B>I<0103B612FEEFFFC018F0903B0007F8000FF84BEB03FCEF00FE020F157F
-F03F804B141F19C0021F150F19E05D1807143F19F05DA2147FA292C8FCA25C180F5CA213
-0119E04A151FA2130319C04A153FA201071780187F4A1600A2010F16FEA24A4A5A60011F
-15034D5A4A5D4D5A013F4B5A173F4A4AC7FC17FC017FEC03F84C5A91C7EA1FC04949B45A
-007F90B548C8FCB712F016803C397CB83F>I<0107B8FCA3903A000FF000034BEB007F18
-3E141F181E5DA2143FA25D181C147FA29238000380A24A130718004A91C7FC5E13015E4A
-133E167E49B512FEA25EECF8000107147C163C4A1338A2010F147818E04A13701701011F
-16C016004A14031880013F150718004A5CA2017F151E173E91C8123C177C4915FC4C5A49
-14070001ED7FF0B8FCA25F38397BB838>I<0107B712FEA3903A000FF000074B1300187C
-021F153CA25DA2143FA25D1838147FA292C8FCEE03804A130718004A91C7FCA201015CA2
-4A131E163E010314FE91B5FC5EA2903807F800167C4A1378A2130FA24A1370A2011F14F0
-A24A90C8FCA2133FA25CA2137FA291CAFCA25BA25B487EB6FCA337397BB836>I<0103B5
-D8F80FB512E0A390260007F8C7381FE0004B5DA2020F153F615DA2021F157F96C7FC5DA2
-023F5D605DA2027F14016092C7FCA24A1403605CA249B7FC60A202FCC712070103150F60
-5CA20107151F605CA2010F153F605CA2011F157F95C8FC5CA2013F5D5F5CA2017F14015F
-91C7FC491403007FD9FE01B512F8B55BA243397CB83E>72 D<0103B512F8A390390007F8
-005DA2140FA25DA2141FA25DA2143FA25DA2147FA292C7FCA25CA25CA21301A25CA21303
-A25CA21307A25CA2130FA25CA2131FA25CA2133FA25CA2137FA291C8FC497EB6FCA25C25
-397CB820>I<0207B512F0A391390007FC006F5AA215075EA3150F5EA3151F5EA3153F5E
-A3157F93C7FCA35D5DA314015DA314035DA31407A25DA2140FA2003F5C5A141F485CA24A
-5A12FC00E049C8FC14FE00705B495A6C485A381E0FC06CB4C9FCEA01F82C3B78B82C>I<
-0107B512FCA25E9026000FF8C7FC5D5D141FA25DA2143FA25DA2147FA292C8FCA25CA25C
-A21301A25CA21303A25CA21307A25CA2130F170C4A141CA2011F153C17384A1478A2013F
-157017F04A14E01601017F140317C091C71207160F49EC1F80163F4914FF000102071300
-B8FCA25E2E397BB834>76 D<902607FFF8923807FFF0614F13E0D9000FEFF0004F5AA202
-1F167FF1EFC0141DDA1CFCEC01CF023C16DF9538039F800238ED071FA20278ED0E3F97C7
-FC0270151CA202F04B5AF0707E14E0037E14E0010117FE4D485A02C0EC0380A20103ED07
-01610280140EA20107ED1C0305385B14006F137049160705E05B010EEC01C0A2011E9138
-03800F61011CEC0700A2013C020E131F4C5C1338ED1FB80178163F04F091C8FC01705CA2
-01F04A5B187E00015DD807F816FEB500C09039007FFFFC151E150E4C397AB84A>I<9026
-03FFF891B512E0A281D90007923807F8006F6E5A61020F5E81DA0E7F5DA2021E6D130703
-3F92C7FC141C82DA3C1F5C70130EEC380FA202786D131E0307141C147082DAF003143C70
-133814E0150101016E1378030014705C8201036E13F0604A1480163F010715C1041F5B91
-C7FC17E149EC0FE360010E15F31607011E15FF95C8FC011C80A2013C805F133816001378
-5F01F8157CEA03FC267FFFE0143CB51538A243397CB83E>I<ED03FE92383FFFC09238FC
-07F0913903E001F891390F80007C023FC77E027E8002F815804948EC0FC0EB07E04948EC
-07E0131F4A15F049C81203137E01FE16F8485AA2485AA2485AA2120F5B001F16075B123F
-A34848ED0FF0A448C9EA1FE0A3EF3FC0A21880177F18005F5F16015F6C4B5A4C5AA24C5A
-6C4B5A6D4A5A001F93C7FC6D147E000F5D6C6CEB03F06C6C495A6C6CEB0F806C6C013FC8
-FC90383F01FC90381FFFE0010190C9FC353D74BA40>I<0107B612F817FF1880903B000F
-F0003FE04BEB0FF0EF03F8141FEF01FC5DA2023F15FEA25DA2147FEF03FC92C7FCA24A15
-F817074A15F0EF0FE01301EF1FC04AEC3F80EFFE0001034A5AEE0FF091B612C04CC7FCD9
-07F8C9FCA25CA2130FA25CA2131FA25CA2133FA25CA2137FA291CAFCA25BA25B1201B512
-FCA337397BB838>I<0103B612F017FEEFFF80903B0007F8003FC04BEB0FF01707020FEC
-03F8EF01FC5DA2021F15FEA25DA2143FEF03FC5DA2027FEC07F818F092C7120F18E04AEC
-1FC0EF3F004A14FEEE01F80101EC0FE091B6128004FCC7FC9138FC003F0103EC0F80834A
-6D7E8301071403A25C83010F14075F5CA2011F140FA25CA2133F161F4AECE007A2017F16
-0F180E91C7FC49020F131C007F01FE153CB5913807F078040313F0CAEAFFE0EF3F80383B
-7CB83D>82 D<92383FC00E913901FFF01C020713FC91391FC07E3C91393F001F7C027CEB
-0FF84A130749481303495A4948EB01F0A2495AA2011F15E091C7FCA34915C0A36E90C7FC
-A2806D7E14FCECFF806D13F015FE6D6D7E6D14E0010080023F7F14079138007FFC150F15
-031501A21500A2167C120EA3001E15FC5EA3003E4A5AA24B5AA2007F4A5A4B5A6D49C7FC
-6D133ED8F9F013FC39F8FC03F839F07FFFE0D8E01F138026C003FCC8FC2F3D7ABA2F>I<
-0007B812E0A25AD9F800EB001F01C049EB07C0485AD900011403121E001C5C003C178014
-03123800785C00701607140700F01700485CA2140FC792C7FC5DA2141FA25DA2143FA25D
-A2147FA292C9FCA25CA25CA21301A25CA21303A25CA21307A25CA2130FA25CEB3FF0007F
-B512F8B6FCA2333971B83B>I<003FB539800FFFFEA326007F80C7EA7F8091C8EA3F0017
-3E49153CA2491538A20001167817705BA2000316F05F5BA2000715015F5BA2000F15035F
-5BA2001F150794C7FC5BA2003F5D160E5BA2007F151E161C90C8FCA2163C4815385A1678
-1670A216F04B5A5E1503007E4A5A4BC8FC150E6C143E6C6C5B15F0390FC003E03907F01F
-C00001B5C9FC38007FFCEB1FE0373B70B83E>I<B5D8F80FB590381FFFF06102F018E0D8
-07FEC7D87FE0903803FE00D803F8DA3F806D5AF100F0A24F5A621903621907047F92C7FC
-190E16FF4B5DA2DB03BF5C7F0001DA073F5CA2030E5D83DB1C1F495A180303385D4EC8FC
-157003F0140E15E0DA01C05CA2DA03805CA2DA07005CA2020E5D17C14A5DEFC3805C0278
-02C7C9FC14704A14CE13FE6C6C4814DCA24A14F8A291C75B160F495D5F5B5F5B4992CAFC
-A249140E4C3B6FB853>87 D<EC0FFFA35C1500141EA2143EA2143CA2147CA21478A214F8
-A25CA21301A25CA21303A25CA21307A25CA2130FA291C7FCA25BA2131EA2133EA2133CA2
-137CA21378A213F8A25BA21201A25BA21203A25BA21207A25BA2120FA290C8FCA25AA212
-1EA2123EA2123CA2127CA21278A2EAFFF8A25BA220537CBD19>91
-D<EC0FFFA4EC001F151EA3153E153CA3157C1578A315F815F0A3140115E0A3140315C0A3
-14071580A3140F1500A35C141EA3143E143CA3147C1478A314F85CA313015CA313035CA3
-13075CA3130F91C7FCA35B131EA3133E133CA3137C1378A2EAFFF8A25BA2205382BD19>
-93 D<14F8EB07FE90381F871C90383E03FE137CEBF801120148486C5A485A120FEBC001
-001F5CA2EA3F801403007F5C1300A21407485C5AA2140F5D48ECC1C0A2141F1583168014
-3F1587007C017F1300ECFF076C485B9038038F8E391F0F079E3907FE03FC3901F000F022
-2677A42A>97 D<133FEA1FFFA3C67E137EA313FE5BA312015BA312035BA31207EBE0F8EB
-E7FE9038EF0F80390FFC07C013F89038F003E013E0D81FC013F0A21380A2123F1300A214
-075A127EA2140F12FE4814E0A2141F15C05AEC3F80A215005C147E5C387801F8007C5B38
-3C03E0383E07C0381E1F80D80FFEC7FCEA01F01C3B77B926>I<147F903803FFC090380F
-C1E090381F0070017E13784913383901F801F83803F003120713E0120FD81FC013F091C7
-FC485AA2127F90C8FCA35A5AA45AA3153015381578007C14F0007EEB01E0003EEB03C0EC
-0F806CEB3E00380F81F83803FFE0C690C7FC1D2677A426>I<ED01F815FFA3150316F0A2
-1507A216E0A2150FA216C0A2151FA21680A2153FA202F81300EB07FE90381F877F90383E
-03FF017C5BEBF80112013803F00048485B120FEBC001121F5DEA3F801403127F01005BA2
-14075A485CA2140FA248ECC1C0A2141F15C3ED8380143F1587007C017F1300ECFF076C48
-5B9038038F8E391F0F079E3907FE03FC3901F000F0253B77B92A>I<147F903803FFC090
-380FC1E090383F00F0017E13785B485A485A485A120F4913F8001F14F0383F8001EC07E0
-EC1F80397F81FF00EBFFF891C7FC90C8FC5A5AA55AA21530007C14381578007E14F0003E
-EB01E0EC03C06CEB0F806CEB3E00380781F83803FFE0C690C7FC1D2677A426>I<ED07C0
-ED1FF0ED3E38ED7C3CEDF8FC15F9140115F1020313F8EDF0F0160014075DA4140F5DA414
-1F5D010FB512C05B16809039003F800092C7FCA45C147EA414FE5CA413015CA413035CA4
-13075CA4130F5CA3131F5CA391C8FC5B121CEA7E3EA2EAFE3C137C1378EAF8F01278EA3F
-C0EA0F80264C82BA19>I<EC07C0EC3FF09138FC38E0903901F01FF0EB03E0903807C00F
-EB0F80011F1307D93F0013E05B017E130F13FE4914C01201151F1203491480A2153F1207
-491400A25DA249137EA215FEA25D00031301140314076C6C485A0000131FEB787BEB3FF3
-90380FC3F0EB00031407A25DA2140F5D121C007E131F5D00FE49C7FC147E5C387801F838
-7C07E0381FFF80D803FEC8FC24367CA426>I<EB03F0EA01FFA3EA00075CA3130F5CA313
-1F5CA3133F91C8FCA35B90387E07F0EC1FFCEC783E9038FFE01F02C01380EC800F140048
-5A16C05B49EB1F8012035BA2153F000715005BA25D000F147E5B15FE5D121FD98001131C
-15F8163C003F01031338010013F0A216704814E0007E15F016E0EDE1C000FE903801E380
-48903800FF000038143C263B7BB92A>I<EB01C0EB07E014F0130F14E01307EB038090C7
-FCAB13F0EA03FCEA071EEA0E1F121CA212385B1270A25BEAF07E12E013FEC65AA212015B
-1203A25B12075BA2000F13E013C013C1001F13C01381A2EB83801303EB0700A2130E6C5A
-EA07F8EA01E0143879B619>I<150E153F157FA3157E151C1500ABEC1F80EC7FC0ECF1F0
-EB01C090380380F813071401130F130E131EEB1C03133C013813F0A2EB0007A215E0A214
-0FA215C0A2141FA21580A2143FA21500A25CA2147EA214FEA25CA21301A25CA213035C12
-1C387E07E0A238FE0FC05C49C7FCEAF83EEA787CEA3FF0EA0FC0204883B619>I<EB03F0
-EA01FFA3EA00075CA3130F5CA3131F5CA3133F91C8FCA35B017EEB0F80ED3FE015F09039
-FE01C1F09038FC0387EC0707140E0001011C13E0EBF83891383003800270C7FC00035BEB
-F1C0EBF38001FFC8FCEA07FC7FEBFFC0EBE7F8380FE1FCEBC07E147F80001F809039801F
-81C0A21583003F013F138001001303A21507481500007E133EEC1E0E151E00FE6D5A48EB
-07F80038EB01E0243B7BB926>I<EB0FC0EA07FFA3EA001F1480A2133FA21400A25BA213
-7EA213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121FA25BA2123FA290
-C7FCA25AA2EA7E0EA212FE131EEAFC1CA2133C133812F81378EA7870EA7CE0121FEA0F80
-123B79B915>I<D801E001FEEB07F03C07F803FF801FFC3C0E3C0F07C0783E3C1E3E3C03
-E1E01F261C1F78D9F3C013803C383FF001F7800F02E01400007801C013FE007018C00280
-5B4A4848EB1F80EAF07FD8E07E5CA200000207143F01FE1700495CA2030F5C0001177E49
-5C18FE031F5C120349DA8001131C18F8033F153C00070403133849020013F0A24B157000
-0F17E049017E15F019E003FEECE1C0001FEE01E34949903800FF000007C70038143C3E26
-79A444>I<D801E013FE3A07F803FF803A0E3C0F07C03A1E3E3C03E0261C1F787F39383F
-F00114E0007813C000708114804A485AEAF07FEAE07EA20000140701FE5C5BA2150F0001
-5D5B151F5E12034990383F8380160316070007027F130049137EA2160E000F147C49141E
-161C5E001FEC3C7849EB1FE00007C7EA0780292679A42F>I<147F903803FFC090380FC1
-F090381F00F8017E137C5B4848137E4848133E0007143F5B120F485AA2485A157F127F90
-C7FCA215FF5A4814FEA2140115FC5AEC03F8A2EC07F015E0140F007C14C0007EEB1F8000
-3EEB3F00147E6C13F8380F83F03803FFC0C648C7FC202677A42A>I<9039078007C09039
-1FE03FF090393CF0787C903938F8E03E9038787FC00170497EECFF00D9F0FE148013E05C
-EA01E113C15CA2D80003143FA25CA20107147FA24A1400A2010F5C5E5C4B5A131F5EEC80
-035E013F495A6E485A5E6E48C7FC017F133EEC70FC90387E3FF0EC0F8001FEC9FCA25BA2
-1201A25BA21203A25B1207B512C0A3293580A42A>I<ECF803903807FE0790381F871F90
-383E03BF017C13FEEBF80112013803F000484813FC120F5B001F130115F8EA3F80A2007F
-1303010013F0A34813074814E0A3140F4814C0A3141F1580143FA2007C137FECFF006C5A
-EB03BF381F0F7F3807FE7EEA01F0C7FC14FE5CA313015CA313035C130748B512C0A32035
-77A426>I<3903C003F0390FF01FFC391E783C0F381C7C703A3C3EE03F8038383FC0EB7F
-800078150000701300151CD8F07E90C7FCEAE0FE5BA2120012015BA312035BA312075BA3
-120F5BA3121F5BA3123F90C9FC120E212679A423>I<14FE903807FF8090380F83C09038
-3E00E04913F00178137001F813F00001130313F0A215E00003EB01C06DC7FC7FEBFFC06C
-13F814FE6C7F6D13807F010F13C01300143F141F140F123E127E00FE1480A348EB1F0012
-E06C133E00705B6C5B381E03E06CB45AD801FEC7FC1C267AA422>I<EB0380EB07C0130F
-A4131F1480A3133F1400A35B137E007FB5FCA2B6FC3800FC00A312015BA312035BA31207
-5BA3120F5BA3121FEB801CA2143C003F1338EB0078147014F014E0EB01C0EA3E03381F07
-80380F0F00EA07FCEA01F0183579B31C>I<13F8D803FEEB01C0D8078FEB03E0390E0F80
-07121E121C0038140F131F007815C01270013F131F00F0130000E015805BD8007E133FA2
-01FE14005B5D120149137EA215FE120349EBFC0EA20201131E161C15F813E0163CD9F003
-133814070001ECF07091381EF8F03A00F83C78E090393FF03FC090390FC00F00272679A4
-2D>I<01F0130ED803FC133FD8071EEB7F80EA0E1F121C123C0038143F49131F0070140F
-A25BD8F07E140000E08013FEC6485B150E12015B151E0003141C5BA2153C000714385B5D
-A35DA24A5A140300035C6D48C7FC0001130E3800F83CEB7FF8EB0FC0212679A426>I<01
-F01507D803FC903903801F80D8071E903907C03FC0D80E1F130F121C123C0038021F131F
-49EC800F00701607A249133FD8F07E168000E0ED000313FEC64849130718000001147E5B
-03FE5B0003160E495BA2171E00070101141C01E05B173C1738A217781770020314F05F00
-03010713016D486C485A000190391E7C07802800FC3C3E0FC7FC90393FF81FFE90390FE0
-03F0322679A437>I<903907E007C090391FF81FF89039787C383C9038F03E703A01E01E
-E0FE3803C01F018013C0D8070014FC481480000E1570023F1300001E91C7FC121CA2C75A
-A2147EA214FEA25CA21301A24A1370A2010314F016E0001C5B007E1401010714C000FEEC
-0380010F1307010EEB0F0039781CF81E9038387C3C393FF03FF03907C00FC027267CA427
->I<13F0D803FCEB01C0D8071EEB03E0D80E1F1307121C123C0038140F4914C01270A249
-131FD8F07E148012E013FEC648133F160012015B5D0003147E5BA215FE00075C5BA21401
-5DA314035D14070003130FEBF01F3901F87FE038007FF7EB1FC7EB000F5DA2141F003F5C
-48133F92C7FC147E147C007E13FC387001F8EB03E06C485A383C1F80D80FFEC8FCEA03F0
-233679A428>I<903903C0038090380FF007D91FF81300496C5A017F130E9038FFFE1E90
-38F83FFC3901F007F849C65A495B1401C7485A4A5A4AC7FC141E5C5C5C495A495A495A49
-C8FC131E5B49131C5B4848133C48481338491378000714F8390FF801F0391FFF07E0383E
-1FFFD83C0F5B00785CD8700790C7FC38F003FC38E000F021267BA422>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fn cmcsc10 10 25
-/Fn 25 122 df<121C127FEAFF80A5EA7F00121C090977881B>46
-D<DB7FC01330912607FFF81370023F13FE913AFFC01F80F0903A03FE0003E1D907F8EB00
-F3D91FE0147B4948143F4948141F49C8120F4848150748481503A24848150148481500A2
-485A1870123F5B1830127FA349160012FFAB127F7F1830A2123FA27F001F177018606C7E
-18E06C6C16C06C6C150118806C6C15036C6CED07006D6C5C6D6C141E6D6C5CD907F85CD9
-03FEEB01E0903A00FFC00FC0023FB5C7FC020713FC9138007FE0343D7ABA41>67
-D<B712F816FF17C00001903980003FF06C90C7EA07FCEE01FEEE007F717E717E717E717E
-841703717EA284170084A21980187FA319C0AB1980A4F0FF00A3601701601703604D5A4D
-5A171F4D5A4D5ADC01FEC7FCEE07FC486DEB3FF0B85A94C8FC16F83A397CB845>I<B912
-C0A3C601C0C7FC6D48141FEF07E017031701A21700A21860A3187018301618A31800A316
-38A21678ED03F891B5FCA3EC8003ED00781638A21618A21806A3180E93C7120CA4181CA3
-1838A2187818F817011703170F496CEC7FF0B9FCA337397DB83E>I<B612E0A3000101C0
-C8FC6C90C9FCB3AD1706A5170E170CA3171CA3173C177CA217FC1603EE0FF8486D137FB8
-FCA32F397CB839>76 D<B712F816FF17E0C69039C0003FF86D48EB07FCEE01FE707EEF7F
-80EF3FC0A2EF1FE0A218F0A718E0A2EF3FC0A2EF7F80EFFF004C5AEE07F8EE3FF091B612
-C04CC7FC0280C9FCB3A5497EB612C0A334397DB83E>80 D<B7FC16F016FE000190398001
-FF806C90C7EA3FE0EE0FF0707E707E707EA2838284A695C7FC5E5F5F1603EE07F04C5AEE
-3F80DB01FEC8FC91B512F816E091380003FCED00FEEE7F80707E707E707EA2160783A583
-A61930A28316031970486D6D6C1360B66D14E094387F81C094383FC380CA380FFF00EF01
-FC3C3B7CB842>82 D<003FB812FCA3D9C001EB800390C790C7FC007C173E0078171E0070
-170EA300601706A400E01707481703A4C81500B3B0020313C0010FB612F0A338397CB841
->84 D<1407A24A7EA34A7EA3EC37E0A2EC77F01463A2ECC1F8A201017F1480A290380300
-7EA301067FA2010E80010C131FA2496D7EA2013FB57EA29038300007496D7EA3496D7EA2
-00018149130012036D801207D81FE0903801FF80D8FFF8010F13F8A22D2C7DAB33>97
-D<B712E0A23907F8000F6C481303ED00F01670A21630A41618A215C01600A31401A21407
-90B5FCA2EBF0071401A21400A21606A21500A2160CA4161CA2163C167C16F8486C1307B7
-FCA2272B7CAA2E>101 D<B712C0A23907F8001F6C481303ED01E01500A21660A41630A2
-15C01600A31401A2140790B5FCA2EBF0071401A21400A492C7FCAB487EB512E0A2242B7C
-AA2C>I<B539C07FFFE0A23B07F80003FC006C486D5AB190B6FCA29038F00001B2486C49
-7EB539C07FFFE0A22B2B7CAA33>104 D<B512C0A23807F8006C5AB3B3487EB512C0A212
-2B7CAA19>I<B500C0EBFFF8A2D807F8C7EA7FC06C481500167C167816E04B5A4B5A4BC7
-FC150E5D5D15F0EC01C04A5A4AC8FC5C4A7E4A7E4A7EEBF1E79038F387F09038F703F890
-38FE01FC13FC496C7E49137F6F7EA26F7E6F7E1507826F7E6F7EA26F7E82EE7F80486CEC
-FFC0B5D8C00313FCA22E2B7CAA35>107 D<B512E0A2D807F8C8FC6C5AB3A61660A416C0
-A31501A21503A21507ED1F80486C13FFB7FCA2232B7CAA2B>I<D8FFF0ED3FFC6D157F00
-07178000031700017C15DFA26DEC019FA36DEC031FA26D6C1306A36D6C130CA26D6C1318
-A26D6C1330A36D6C1360A2027C13C0A391383E0180A291381F0300A3EC0F86A2EC07CCA3
-EC03F8A2486C6C5AA2D81FE0ED3F803CFFFC00E007FFFCA2362B7CAA3E>I<D8FFF09038
-07FFE07F0007020013006C6C143C7F017F14187F806D7E130F806D7E6D7EA26D7E6D7E14
-7E147FEC3F80141F15C0EC0FE0EC07F0140315F8EC01FC140015FE157FED3F98151F16D8
-ED0FF81507A215031501A2486C13001678D81FE01438EAFFFC16182B2B7CAA33>I<EC7F
-C0903803FFF890380FC07E90393F001F80017CEB07C04848EB03F048486D7E4913004848
-147C000F157E484880A248C8EA1F80A24816C0A2007E150FA200FE16E0AA007FED1FC0A3
-6C16806D143F001F1600A26C6C147E6C6C5CA26C6C495A6C6C495AD8007CEB07C0013FEB
-1F8090260FC07EC7FC903803FFF89038007FC02B2D7BAB35>I<B612E015FC3907F800FE
-6C48EB1F80ED0FC0ED07E016F01503A216F8A516F0A2150716E0ED0FC0ED1F80EDFE0090
-B55A15E001F0C8FCB1487EB512C0A2252B7CAA2E>I<B67E15F03907F800FE6C48133FED
-0FC06F7EA26F7E82A65E4B5AA24B5A033FC7FC15FE90B512F05D9038F001F8EC007E816F
-7EA26F7EA582A4171816F015071738486C903803F830B5D8C00113709238007FE0C9EA1F
-802D2C7CAA32>114 D<017F13603901FFE0E0380780F9380E001F481307481303127800
-70130100F01300A315607EA26C14007E127F13C0EA3FFEEBFFE06C13F8000713FE6C7FC6
-1480010F13C01300EC0FE01407EC03F01401A212C01400A37E15E06C1301A26CEB03C06C
-EB0780B4EB0F0038F3E01E38E0FFF838C01FE01C2D7BAB26>I<007FB712C0A23A7E003F
-C00F007890381F8003007015011600126000E016E0A2481660A5C71500B3A8EC7FE0011F
-B57EA22B2B7DAA31>I<B56CEB3FFEA2D80FFCC7EA0FF06C48EC07E00003ED03C0178000
-0116006D5C00001506A2017E5CA2017F141C6D141880011F5CA26D6C5BA28001075CA26D
-6C485AA2ECF803010191C7FCA2903800FC06A2ECFE0EEC7E0C147F6E5AA2EC1FB0A215F0
-6E5AA26E5AA36E5AA22F2C7EAA33>118 D<3B7FFF800FFFC0A2000790390003FE006C48
-EB01F800015D000015C0017F13036D5C6E48C7FC90381FC0066D6C5A151C6D6C5A903803
-F83001015BECFCE06D6C5AEC7F80A2143F6E7E140F4A7E4A7E1433EC63F8ECE1FCECC0FE
-903801807E0103137F49486C7E0106131F4980011C6D7E496D7E0130130301708001F06D
-7E000181000781D81FF8491380B46C4913F8A22D2B7DAA33>120
-D<B56CEB1FFEA2D80FFCC7EA0FF00003ED07C01780000116006C6C1406017F140E160C6D
-6C5B6D6C133816306D6C5B6D6C13E05E6D6C485A903801FC0393C7FC903800FE06EC7F0E
-150CEC3F9CEC1FF85D140F6E5AAF4A7E49B57EA22F2B7EAA33>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fo cmbx10 10.95 41
-/Fo 41 122 df<EDFFF8020F13FF027F8049B612E001079038C01FF090390FFE0007D91F
-F8497ED93FE0131F4948497E13FF5C5A91C7FCA2705A705AEE03C093C8FCA6EE03FCB8FC
-A50001903880001F160FB3AB007FD9FE03B512F0A534407EBF3A>12
-D<130FEB1FC0EB3FE0137FEBFFF05A5AA24813E05A481380481300EA7FFC13F0EAFFC06C
-C7FC123C123814126BBF34>19 D<EA0FC0EA1FE0EA3FF0EA7FF8EAFFFCA313FEA3127F12
-3F121FEA0FDEEA001EA2133E133CA2137C1378A213F8EA01F0A2EA03E0EA07C0EA0F8012
-1FEA3F00121E120C0F20798D1D>44 D<B612E0A91B097F9823>I<EA0FC0EA1FE0EA3FF0
-EA7FF8EAFFFCA6EA7FF8EA3FF0EA1FE0EA0FC00E0E798D1D>I<140F143F5C495A130F48
-B5FCB6FCA313F7EAFE071200B3B3A8007FB612F0A5243C78BB34>49
-D<903803FF80013F13F890B512FE00036E7E4881260FF80F7F261FC0037F4848C67F486C
-6D7E6D6D7E487E6D6D7EA26F1380A46C5A6C5A6C5A0007C7FCC8FC4B1300A25E153F5E4B
-5AA24B5A5E4A5B4A5B4A48C7FC5D4A5AEC1FE04A5A4A5A9139FF000F80EB01FC495A4948
-EB1F00495AEB1F8049C7FC017E5C5B48B7FC485D5A5A5A5A5AB7FC5EA4293C7BBB34>I<
-903801FFE0010F13FE013F6D7E90B612E04801817F3A03FC007FF8D807F06D7E82D80FFC
-131F6D80121F7FA56C5A5E6C48133FD801F05CC8FC4B5A5E4B5A4A5B020F5B902607FFFE
-C7FC15F815FEEDFFC0D9000113F06E6C7E6F7E6F7E6F7E1780A26F13C0A217E0EA0FC048
-7E487E487E487EA317C0A25D491580127F49491300D83FC0495A6C6C495A3A0FFE01FFF8
-6CB65A6C5DC61580013F49C7FC010313E02B3D7CBB34>I<ED01F815031507A2150F151F
-153FA2157F15FF5C5CA25C5CEC1FBFEC3F3F143E147C14FCEB01F814F0EB03E01307EB0F
-C0EB1F801400133E137E5B485A5B485A1207485A5B48C7FC5A127E5AB812F8A5C8387FF8
-00AA49B612F8A52D3C7DBB34>I<00071538D80FE0EB01F801FE133F90B6FC5E5E5E5E93
-C7FC5D15F85D15C04AC8FC0180C9FCA9ECFFC0018713FC019F13FF90B67E020113E09039
-F8007FF0496D7E01C06D7E5B6CC77FC8120F82A31780A21207EA1FC0487E487E12FF7FA2
-1700A25B4B5A6C5A01805C6CC7123F6D495AD81FE0495A260FFC075B6CB65A6C92C7FCC6
-14FC013F13F0010790C8FC293D7BBB34>I<16FCA24B7EA24B7EA34B7FA24B7FA34B7FA2
-4B7FA34B7F157C03FC7FEDF87FA2020180EDF03F0203804B7E02078115C082020F814B7E
-021F811500824A81023E7F027E81027C7FA202FC814A147F49B77EA34982A2D907E0C700
-1F7F4A80010F835C83011F8391C87E4983133E83017E83017C81B500FC91B612FCA5463F
-7CBE4F>65 D<B812F8EFFF8018F018FC8426003FFCC7EA3FFF050F13807113C07113E083
-19F0A27113F8A719F05FA24D13E019C04D13804D1300EF3FFE933801FFF891B712E01880
-18F818FE02FCC7380FFF80050313C07113E07113F019F8F07FFCA2F03FFEA219FFA38460
-A419FE187FA2F0FFFC4D13F85F4D13F0053F13E0BA12C0190018FC18F095C7FC403E7DBD
-4A>I<922607FFC0130E92B500FC131E020702FF133E023FEDC07E91B7EAE1FE01039138
-803FFB499039F80003FF4901C01300013F90C8127F4948151FD9FFF8150F48491507485B
-4A1503481701485B18004890CAFC197E5A5B193E127FA349170012FFAC127F7F193EA212
-3FA27F6C187E197C6C7F19FC6C6D16F86C6D150119F06C6D15036C6DED07E0D97FFEED0F
-C06D6CED3F80010F01C0ECFF006D01F8EB03FE6D9039FF801FFC010091B55A023F15E002
-071580020002FCC7FC030713C03F407ABE4C>I<B812F8EFFF8018F018FC18FF26003FFC
-C76C13C005077F05017F716C7E727E727E727E721380A27213C0A27213E0A21AF084A21A
-F8A41AFCA5197FA319FFA51AF8A41AF0A2601AE0A24E13C0A24E13804E1300604E5A4E5A
-4D485A050713E0057F5BBA5A4EC7FC18F818C005F8C8FC463E7DBD50>I<B6037FB512E0
-A2818181D8003F6D9139001F800081A281816E7E6E7F6E7F80826E7F6E7F6E7F6E7F157F
-826F7F6F7F6F7F6F7F81836F7F6F7F707E701380A27013C07013E07013F07013F87013FC
-A27013FEEF7FFF71139F7113DF8319FF8383838384A28484848484A284B600C080197F19
-3F191FA24B3E7DBD52>78 D<B812F017FF18C018F018FC26003FFCC77FEF1FFF71138071
-13C07113E0A27113F0A319F8A819F0A34D13E019C05F4D1380053F1300EFFFFE91B712F8
-60188005FCC7FC4ACAFCB3A4B77EA53D3E7DBD47>80 D<003FB912FCA5903BFE003FFE00
-3FD87FF0EE0FFE01C0160349160190C71500197E127EA2007C183EA400FC183F48181FA5
-C81600B3AF010FB712F8A5403D7CBC49>84 D<B600FC020FB512C0A5C66C48C9381F8000
-013F95C7FC80616D173E6F157E6D177C6F15FC6D5F8118016D6D5D18036D5F6F14076D5F
-6F140F027F5E81181F023F93C8FC6F5C6E153E70137E6E157C8218FC6E6D5B17016E5DEE
-F0036E5DEEF8076E5D16FC170F037F5CEEFE1F033F91C9FC705A6F133E17BE17FE6F5BA2
-6F5BA26F5BA26F5BA36F5BA2705AA270CAFCA24A3F7EBD4F>86 D<903807FFC0013F13F8
-48B6FC48812607FE037F260FF8007F6DEB3FF0486C806F7EA36F7EA26C5A6C5AEA01E0C8
-FC153F91B5FC130F137F3901FFFE0F4813E0000F1380381FFE00485A5B485A12FF5BA415
-1F7F007F143F6D90387BFF806C6C01FB13FE391FFF07F36CEBFFE100031480C6EC003FD9
-1FF890C7FC2F2B7DA933>97 D<13FFB5FCA512077EAFEDFFE0020713FC021FEBFF80027F
-80DAFF8113F09139FC003FF802F06D7E4A6D7E4A13074A80701380A218C082A318E0AA18
-C0A25E1880A218005E6E5C6E495A6E495A02FCEB7FF0903AFCFF01FFE0496CB55AD9F01F
-91C7FCD9E00713FCC7000113C033407DBE3A>I<EC7FF00107B5FC011F14C0017F14E090
-39FFF01FF0489038800FF848EB001F4848EB3FFC120F485AA2485AA2007FEC1FF849EB0F
-F0ED03C000FF91C7FCAB127F7FA3003F153E7F001F157E6C6C147C6C6C14FC91388001F8
-6C9038C003F0C69038F81FE06DB512C0011F14800107EBFE009038007FF0272B7DA92E>
-I<EE07F8ED07FFA5ED003F161FAFEC7FF0903807FFFE011FEBFF9F017F14DF9039FFF01F
-FF48EBC00348EB00014848EB007F485A001F153F5B123FA2127F5BA212FFAA127FA37F12
-3FA26C6C147F120F6D14FF6C6C01037F6C6D48EBFFE06CEBF03F6C6CB512BF6D143F0107
-13FC010001E0EBE00033407DBE3A>I<ECFFF0010713FE011F6D7E017F809039FFE07FE0
-489038801FF048496C7E48486D7E48486D7E121F491301003F81A2485A6F1380A212FFA2
-90B7FCA401F0C9FCA5127FA27F123FEE0F806C7E161F6C6C15006C6C5C6C6D137E6C9038
-E001FC6C9038F80FF8013FB55A6D14C0010391C7FC9038007FF8292B7DA930>I<EC07FE
-91387FFF8049B512C0010714E090390FFE3FF0EB1FF090393FE07FF8EB7FC013FF1480A2
-489038003FF0ED1FE0ED0FC092C7FCAAB612E0A500010180C7FCB3AC007FEBFF80A52540
-7DBF20>I<903A03FF8007F0013F9038F83FF8499038FCFFFC48B712FE48018313F93A07
-FC007FC34848EB3FE1001FEDF1FC4990381FF0F81700003F81A7001F5DA26D133F000F5D
-6C6C495A3A03FF83FF8091B5C7FC4814FC01BF5BD80F03138090CAFCA2487EA27F13F06C
-B6FC16F016FC6C15FF17806C16C06C16E01207001F16F0393FE000034848EB003F49EC1F
-F800FF150F90C81207A56C6CEC0FF06D141F003F16E001F0147FD81FFC903801FFC02707
-FF800F13006C90B55AC615F8013F14E0010101FCC7FC2F3D7DA834>I<13FFB5FCA51207
-7EAFED1FF8EDFFFE02036D7E4A80DA0FE07F91381F007F023C805C4A6D7E5CA25CA35CB3
-A4B5D8FE0FB512E0A5333F7CBE3A>I<EA01F8487E487E487E481380A66C13006C5A6C5A
-6C5AC8FCA913FFB5FCA512077EB3ABB512F8A515407CBF1D>I<13FFB5FCA512077EB3B3
-AFB512FCA5163F7CBE1D>108 D<01FFD91FF8ECFFC0B590B5010713F80203DAC01F13FE
-4A6E487FDA0FE09026F07F077F91261F003FEBF8010007013EDAF9F0806C0178ECFBC04A
-6DB4486C7FA24A92C7FC4A5CA34A5CB3A4B5D8FE07B5D8F03FEBFF80A551297CA858>I<
-01FFEB1FF8B5EBFFFE02036D7E4A80DA0FE07F91381F007F0007013C806C5B4A6D7E5CA2
-5CA35CB3A4B5D8FE0FB512E0A533297CA83A>I<EC7FF0903803FFFE011FEBFFC0017F14
-F09039FFE03FF8489038800FFC3A03FE0003FE48486D7E000F168048486D13C0A2003F16
-E049147F007F16F0A400FF16F8AA007F16F0A46C6CECFFE0A2001F16C06C6C491380A26C
-6C4913003A03FF800FFE6C9038E03FFC6C6CB512F0011F14C0010791C7FC9038007FF02D
-2B7DA934>I<01FFEBFFE0B5000713FC021FEBFF80027F80DAFF8113F09139FC007FF800
-0701F06D7E6C496D7E4A130F4A6D7E1880A27013C0A38218E0AA4C13C0A318805E18005E
-6E5C6E495A6E495A02FCEBFFF0DAFF035B92B55A029F91C7FC028713FC028113C00280C9
-FCACB512FEA5333B7DA83A>I<DA7FE01378902607FFFC13F8011FEBFF01017F14819039
-FFF81FC3489038E007E74890388003F74890380001FF48487F001F157F5B003F153F5B12
-7F161FA2485AAA127F7FA36C6C143F167F121F6C6C14FF6D5B6C6D5A6CEBC00F6CEBF03F
-6C6CB512BF6DEBFE3F010713F8010013C091C7FCAC030FB512E0A5333B7DA837>I<3901
-FE01FE00FF903807FF804A13E04A13F0EC3F1F91387C3FF8000713F8000313F0EBFFE0A2
-9138C01FF0ED0FE091388007C092C7FCA391C8FCB3A2B6FCA525297DA82B>I<90383FFC
-1E48B512BE000714FE5A381FF00F383F800148C7FC007E147EA200FE143EA27E7F6D90C7
-FC13F8EBFFE06C13FF15C06C14F06C806C806C806C80C61580131F1300020713C0140000
-78147F00F8143F151F7EA27E16806C143F6D140001E013FF9038F803FE90B55A15F0D8F8
-7F13C026E00FFEC7FC222B7DA929>I<EB07C0A5130FA4131FA3133F137FA213FF5A1207
-001FEBFFFEB6FCA40001EBC000B3151FA96CEBE03EA2017F137EECF8FC90383FFFF86D13
-F0010713E001001380203B7EB929>I<D9FF80EB0FF8B5EB0FFFA50007EC007F6C153FB3
-A5167FA316FF6C5C4B7F6C903AC007DFFFE09138F01F9F6DB5121F6D13FE010F13F80101
-01E0EBE000332A7CA83A>I<B500FC90383FFFC0A5000101C0903803E0006E1307A26C5E
-6E130F017F5D6E131F013F92C7FC6E5B011F143E6E137E010F147C6E13FCA26D5C15816D
-5C15C36D5C15E76D5C15FF6E5BA36E90C8FCA26E5AA26E5AA26E5AA26E5AA232287EA737
->I<B53CFC3FFFFC03FFFEA50003D980009039C0000F806E161F6C037F15006E496C5B6C
-183E836E48157E017F177C6E486D13FC013F02EF5C83DAFC071401011F02C75CDAFE0FEB
-FE03010F02835C17FFDAFF1F14076D02015C03BF148F6DD9BE005C18CF03FE14DF6D4901
-7F90C7FC18FF6D496D5AA36E486D5AA26E486D5AA36E486D5AA26E486D5A47287EA74C>
-I<B5D8FC03B51280A5C69026E0007FC7FC6E13FE6D6C5B6D6C485A6D6C485A010F13076D
-6C485AED9FC06DEBFF806D91C8FC6D5B6E5AA2143F6E7E140F814A7F4A7F4A7F02FE7F90
-3801FC7F49486C7E02F07F49486C7E49486C7E011F7F49486C7FD97F008001FE6D7FB5D8
-C007EBFFC0A532287EA737>I<B500FC90383FFFC0A5000101C0903803E0006E1307A26C
-5E6E130F017F5D6E131F013F92C7FC6E5B011F143E6E137E010F147C6E13FCA26D5C1581
-6D5C15C36D5C15E76D5C15FF6E5BA36E90C8FCA26E5AA26E5AA26E5AA26E5AA35D14075D
-000E130FD83F805B387FC01FD8FFE090C9FC5C143E147E5CEBC1F8387FC3F0387E0FE06C
-B45A6C5B6C48CAFCEA03F8323B7EA737>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fp cmr7 7 22
-/Fp 22 127 df<903803FF80011F13F090387E00FCD801F8133FD807E0EB0FC04848EB07
-E04848EB03F048C7EA01F8A2007EEC00FCA248157EA7007E15FCA36CEC01F8A26C6CEB03
-F0000F15E0A26C6CEB07C0000315806C6CEB0F00A26C6C131ED8C070EB1C060178133CD8
-6038EB380C01181330011C13700070151CD87FFCEB7FFC003F15F8A327297DA82F>10
-D<1306130C13181330136013E0EA01C0EA0380A2EA07005A120E121EA2121C123CA35AA5
-12F85AAB7E1278A57EA3121C121EA2120E120F7EEA0380A2EA01C0EA00E0136013301318
-130C13060F3B7AAB1A>40 D<12C012607E7E7E120E7EEA0380A2EA01C013E0120013F0A2
-13701378A3133CA5133E131EAB133E133CA51378A3137013F0A213E0120113C0EA0380A2
-EA0700120E120C5A5A5A5A0F3B7DAB1A>I<140EB3A2B812E0A3C7000EC8FCB3A22B2B7D
-A333>43 D<EB3F803801FFF03803E0F83807803C48487E001E7F003E1480A2003C130700
-7C14C0A400FC14E0AE007C14C0A36CEB0F80A36CEB1F006C131E6C6C5A3803E0F86CB45A
-38003F801B277EA521>48 D<13381378EA01F8121F12FE12E01200B3AB487EB512F8A215
-267BA521>I<13FF000313E0380E03F0381800F848137C48137E00787F12FC6CEB1F80A4
-127CC7FC15005C143E147E147C5C495A495A5C495A010EC7FC5B5B903870018013E0EA01
-80390300030012065A001FB5FC5A485BB5FCA219267DA521>I<13FF000313E0380F01F8
-381C007C0030137E003C133E007E133FA4123CC7123E147E147C5C495AEB07E03801FF80
-91C7FC380001E06D7E147C80143F801580A21238127C12FEA21500485B0078133E00705B
-6C5B381F01F03807FFC0C690C7FC19277DA521>I<0018130C001F137CEBFFF85C5C1480
-D819FCC7FC0018C8FCA7137F3819FFE0381F81F0381E0078001C7F0018133EC7FC80A215
-80A21230127C12FCA3150012F00060133E127000305B001C5B380F03E03803FFC0C648C7
-FC19277DA521>53 D<1238127C12FEA3127C12381200AB1238127C12FC12FEA2127E123E
-1206A3120CA31218A212301270122007247B9813>59 D<B812E0A3CBFCABB812E0A32B11
-7D9633>61 D<EAFFC0A3EAE000B3B3B1EAFFC0A30A3B7AAB13>91
-D<EAFFC0A31201B3B3B112FFA30A3B7FAB13>93 D<5AEA0380EA07C0EA0FE0EA1EF0EA3C
-78EA701CEAE00EEAC0060F0978A721>I<EB3FC0EBFFF83803E03C3807C00E380F801F38
-1F003F123EA2007E131E007C1300A212FCA7127C127E1403123E6C1306EA0F803807C00C
-3803F0383800FFE0EB3F80181C7E9A1E>99 D<120EEA3F80A5EA0E00C7FCA7EA078012FF
-A2121F120FB3121FEAFFF8A20D287EA713>105 D<EA0F8012FFA2121F120FB3AFEA1FC0
-EAFFF8A20D287EA713>108 D<260F81FC137F3BFF8FFF03FFC0903A9C0F8703E03B1FB0
-07CC01F0D80FE013D8903AC003F000F8A301805BAF486C486C487E3CFFF83FFE0FFF80A2
-311A7E9937>I<380F81FC38FF8FFF90389C0F80391FB007C0EA0FE09038C003E0A31380
-AF391FC007F039FFF83FFEA21F1A7E9925>I<380F07C038FF1FF0EB38F8EA1F71EA0F61
-13C1EBC0F014005BAF487EEAFFFCA2151A7E991A>114 D<390F8003E000FF133FA2001F
-1307000F1303B01407A20007130F9038C01BF03903E073FE3801FFE339007F83E01F1B7E
-9925>117 D<380F8010381FF038383FFFF04813E038E07FC038400F8015067BA621>126
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fq cmmi7 7 27
-/Fq 27 123 df<1238127C12FE12FFA2127F123B1203A31206A3120C1218123812701220
-08127A8614>59 D<12E012F812FEEA3F80EA0FE0EA03F8EA00FEEB3F80EB0FE0EB03F8EB
-00FEEC3F80EC0FE0EC03F8EC00FEED3F80ED0FE0ED03F8ED00FE163E16FEED03F8ED0FE0
-ED3F80EDFE00EC03F8EC0FE0EC3F8002FEC7FCEB03F8EB0FE0EB3F8001FEC8FCEA03F8EA
-0FE0EA3F8000FEC9FC12F812E027277AA134>62 D<EB03FCEB0FFF90383C07C090387001
-E09038E00070491378486C1338486C133C151EA25B6C5AC8121FA3EB1FF8EB7FFEEBF007
-3901E0019ED8038013FE000FC7FCA2001E147E003E147C123C127C15F85A15F0A2140148
-14E0EC03C0A2EC078000781400140E00385B6C1378380F01F03807FFC0D801FEC7FC202A
-7CA823>64 D<4AB41308020FEBE01891397F80F038903A01F8001870D903E0EB0CF0D90F
-80130749C71203013E15E05B491401485A484815C0485A120F5B001F168090C8FC4892C7
-FCA2127EA4127C12FCA21606007C5DA35E007E5D123E5E6C5D6C6C495A00074AC7FCD803
-E0130E6C6C13383900FE01F090383FFFC0D907FCC8FC2D2A7DA830>67
-D<903B3FFFF01FFFF8A2D901FCC7EAFE004A5CA2010314015F5CA2010714035F5CA2010F
-14075F5CA2011F140F91B65AA2913880000F013F141F5F91C7FCA249143F94C7FC137EA2
-01FE5C167E5BA2000115FE5E5BA200031401B539C07FFFE0A235287DA736>72
-D<90263FFFF0EB7FF8A2D901FCC7EA1FC04AEC1E005F010315704C5A4AEB03804CC7FC01
-07141C5E4A13E04B5A010FEB0780030EC8FC4A5A157C011F13FE14C3EC877F149E90393F
-B83F8014F09138C01FC0148049486C7EA2017E6D7EA201FE6D7EA2496D7EA200016E7EA2
-49147FA2000382B539C007FFF8A235287DA738>75 D<90383FFFF8A2D901FCC7FC5CA213
-03A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C8FCA249141C1618137E163801
-FE1430167049146016E000011401ED03C0491307ED0F800003147FB7FC160026287DA72E
->I<D93FFC903801FFF88001019138001F006E141E170C902603BF80131C1718EC1FC0A2
-496C6C1338173090380607F0A290260E03F81370176090380C01FCA290261C00FE13E05F
-0118137FA20138EB3F81031F5B013014C1150F017014E3030790C7FC016014F3150301E0
-14FF6F5A5B15001201167C5B486C143C1207D8FFFC1418A235287DA735>78
-D<000FB712E05A9039800FE007D81E009038C001C05A0038011F1300123000705C006015
-01023F148012E0481400A2C74890C7FCA2147EA214FEA25CA21301A25CA21303A25CA213
-07A25CA2130FA25CA2131F001FB57EA22B287DA727>84 D<B5ECFFF0A2D80FF0EC1F806C
-48EC0E005E16186D5CA200035D5EA24B5A6D49C7FC120115065DA25D6D5B12005D5DA24A
-5A6D48C8FC137E14065CA25CEB7F30133F5C5CA25C91C9FC7F131E131CA22C297BA727>
-86 D<15F8141FA2EC01F0A21403A215E0A21407A215C0A2140FEB1F8F90387FCF80EBF0
-EF3803C03FEA0780390F001F00A2001E5B123E003C133E127C147E5A147CA214FC5AECF8
-30A3903801F060A2EA7803010E13C0393C1CF980381FF07F3907C01E001D297CA723>
-100 D<EB0FC0EB7FF0EBF0383803C01CEA0780EA0F005A121E003E1338481370EB07E038
-7FFF8038FFFC0000F8C7FCA45AA214040078130C141800381330003C13E0381E07C0380F
-FF00EA03F8161B7C991F>I<EC03E0EC0FF0EC1E38EC3C3C157CEC7CFC1478ECF8F81570
-1500A2495AA590B512E0A2903803E000A4495AA5495AA649C7FCA5133EA4133C137C123C
-EA7C78127EEAFC7013F0EA78E0EA71C0EA3F80001EC8FC1E357CA820>I<133EEA07FEA2
-EA007CA213FCA25BA21201A25BA2120314FCEBE3FF9038EF0780D807FC13C0EBF00313E0
-A2EA0FC014071380A2121FEC0F801300A248EB1F00A2003E1406143E127EEC7C0C127C15
-1800FCEB3C30157048EB1FE00070EB0F801F297CA727>104 D<130E131F5BA2133E131C
-90C7FCA7EA03E0487EEA0C78EA187C1230A212605B12C0A2EA01F0A3485AA2485AA2EBC1
-80EA0F81A2381F0300A213066C5A131CEA07F06C5A11287DA617>I<1407EC0F80141FA2
-1500140E91C7FCA7EB03E0EB07F8EB0C3C1318EB303E136013C0A248485AA2C7FCA25CA4
-495AA4495AA4495AA4495AA21238D87C1FC7FC12FC133E485AEA70F8EA7FE0EA1F801933
-80A61B>I<133EEA07FEA2EA007CA213FCA25BA21201A25BA21203EC07809038E01FC0EC
-38600007EB61E014C3EBC187EBC307D80FC613C09038CC038001B8C7FC13E0487E13FEEB
-3F80EB0FC0486C7E1303003E1460A2127EECC0C0127CECC18012FC903801E30038F800FE
-0070137C1B297CA723>I<137CEA0FFCA2EA00F8A21201A213F0A21203A213E0A21207A2
-13C0A2120FA21380A2121FA21300A25AA2123EA2127EA2EA7C18A3EAF830A21320EA7860
-13C0EA3F80EA0F000E297EA715>I<3B07801FC007E03B0FE07FF01FF83B18F0E0F8783C
-3B30F1807CE03E903AFB007D801ED860FEEB3F005B49133E00C14A133E5B1201A2484849
-5BA35F4848485A1830EE01F0A23C0F8003E003E060A218C0933801E180271F0007C013E3
-933800FF00000E6D48137C341B7D993B>I<3907801FC0390FE07FF03918F0E0F83930F1
-807CEBFB00D860FE133C5B5B00C1147C5B1201A248485BA34A5AEA07C01660EC03E0A23A
-0F8007C0C0A2EDC180913803C300D81F0013C7EC01FE000EEB00F8231B7D9929>I<3807
-803E390FE0FF803818F3C13930F703C0EBFE073860FC0F13F8158039C1F0070091C7FC12
-01A2485AA4485AA4485AA448C8FCA2120E1A1B7D991F>114 D<EB0FE0EB7FF8EBF03C38
-01C00E0003131E3807803EA2143C000F1318EBE0006CB4FC14C06C13E06C13F06C13F813
-071301EA3C00007E1378A24813F05A387001E0EB03C0383C0F80381FFE00EA07F8171B7C
-991F>I<3903E001C03907F003E0380C7807EA187C0030130314011260EBF80000C014C0
-A2EA01F0A2EC0180EA03E0A2EC0300EA07C0A21406A25CA200035B6D5A3801F0E06CB45A
-013FC7FC1B1B7D9921>118 D<D803E0EC0380486CEB7007D80C789038F80FC0EA187C00
-30903801F0071603126001F8140100C0D903E01380A2EA01F0A2913907C00300EA03E0A3
-3A07C00F8006A25EA2160816180003011F5B01E0EBC0703A01F073E0E03A00FFE1FF8090
-261F807FC7FC2A1B7D9930>I<90387C03C03901FF0FF03907079C30390E03B078000CEB
-F0F8001813E1123015F0396007C0E015001200A2495AA449C7FC15301238007C1460EAFC
-3E15C0EAF87E39F06F03803970C70700383F83FE381F01F81D1B7D9926>I<EA03E0486C
-1370D80C7813F8EA187C0030EB01F0A2126013F800C0EB03E0A2EA01F0A2EC07C0EA03E0
-A33907C00F80A4EC1F00A25C00035B3801E0FE3800FFBEEB3F3E13005C121E003F5B5C38
-7E01E0383C03C038300780D81C1FC7FCEA0FFCEA07F01D267D9922>I<013E13C0137F90
-38FF818048EBC3004813FF380701FE3806000C00045BC75A5C5CEB03800106C7FC5B5B5B
-5B9038C00180EA038039060003005C380FF81E381FFFFE38383FFC38601FF86D5A38C007
-C01A1B7D9920>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fr msbm10 10 3
-/Fr 3 83 df<020FB6128091B712C01303010F1680D91FF8C9FCEB7F8001FECAFCEA01F8
-485A485A485A5B48CBFCA2123EA25AA2127812F8A25AA87EA21278127CA27EA27EA26C7E
-7F6C7E6C7E6C7EEA00FEEB7F80EB1FF86DB71280010316C01300020F158091CAFCA51630
-16F815014B5A4B5A4B5A4B5A4BC8FC157E001FB812804817C0A26C1780C7D81F80C8FC4A
-C9FC147E5C495A495A495A5C6DCAFC324D79B441>40 D<007FB612C0B712FC6C15FF2703
-C01E071380000190393C01C7E00238EBE1F0923800E0F81738EEF03CEE701C171E170EA7
-171E171CEEF03CEEE03817F8923801E1F0EEC7E0923803FF80023FB5120016FC16E00238
-C8FCB3A60003133C007FB512F0B6FC7E2F397EB834>80 D<007FB612E0B712FE6C6F7E27
-03C01E0313E0000190393C00F3F00238EB70F8EE783CEE381E83EE3C07161C18801703A6
-17071800EE3C0FEE380E173EEE78FCEEF7F892380FFFE0023FB5128004FCC7FC16B89138
-38F03CED701CED781EED380EED3C0FED1C07031E7FED0E03030F7FED0701EE81E0ED0380
-707E030113701778EEE0380300133C707EEE700EEE780F9338380780EE3C03041C13C093
-381E01E00003013C90380E00F0007FB539F00FFFFEB67F6C8137397DB836>82
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fs cmsy10 10 39
-/Fs 39 115 df<007FB81280B912C0A26C17803204799641>0 D<121C127FEAFF80A5EA
-7F00121C0909799917>I<0060150600F8150F6C151F007E153F6C157E6C6C14FC6C6CEB
-01F86C6CEB03F06C6CEB07E06C6CEB0FC06C6CEB1F80017EEB3F006D137E6D6C5A90380F
-C1F8903807E3F0903803F7E06DB45A6D5B6EC7FCA24A7E497F903803F7E0903807E3F090
-380FC1F890381F80FC90383F007E017E7F49EB1F804848EB0FC04848EB07E04848EB03F0
-4848EB01F84848EB00FC48C8127E007E153F48151F48150F00601506282874A841>I<EC
-03FF023F13F09138FC30FCD903C0130FD90F00EB03C0013CEC00F0017015384981484881
-48488148C7EC038000061601000E17C048EE00E0001817600038177000301730A2007017
-3800601718A200E0171C48170CA4B912FCA200C0C70030C7120CA46C171C00601718A200
-70173800301730A20038177000181760001C17E06CEE01C000061780000716036C6CED07
-006C6C150E6C6C5D01705D013C15F0010FEC03C0D903C0010FC7FCD900FC13FC91383FFF
-F0020390C8FC36367BAF41>8 D<EB1FF0EBFFFE487F000714C0390FF01FE0391F8003F0
-393F0001F8003E130048147CA20078143C00F8143EA248141EA56C143EA20078143C007C
-147CA26C14F8003F1301391F8003F0390FF01FE06CB512C0000114006C5BEB1FF01F1F7B
-A42A>14 D<007FB812F8B912FCA26C17F8CCFCAE007FB812F8B912FCA26C17F8CCFCAE00
-7FB812F8B912FCA26C17F836287BA841>17 D<020FB6128091B712C01303010F1680D91F
-F8C9FCEB7F8001FECAFCEA01F8485A485A485A5B48CBFCA2123EA25AA2127812F8A25AA8
-7EA21278127CA27EA27EA26C7E7F6C7E6C7E6C7EEA00FEEB7F80EB1FF86DB71280010316
-C01300020F158091CAFCAE001FB812804817C0A26C1780324479B441>I<EF0180EF07C0
-171FEF7F80933801FF00EE07FCEE1FF0EE7FC04B48C7FCED07FCED1FF0ED7FC04A48C8FC
-EC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848CAFCEA07FCEA3FF0EA7FC048
-CBFC5AEA7F80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC
-0FF8EC03FE913800FF80ED3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800
-FF80EF3FC0170FEF038094C7FCAE007FB81280B912C0A26C1780324479B441>20
-D<020FB6128091B712C01303010F1680D91FF8C9FCEB7F8001FECAFCEA01F8485A485A48
-5A5B48CBFCA2123EA25AA2127812F8A25AA87EA21278127CA27EA27EA26C7E7F6C7E6C7E
-6C7EEA00FEEB7F80EB1FF86DB71280010316C01300020F1580323279AD41>26
-D<05041402051E140F057E143FDC01FE14FF4C48EB01FEDC0FF0EB07F8DC3FC0EB1FE04C
-C7EA3F80DB01FEECFF00DB07F8EB03FCDB0FE0EB07F0DB3FC0EB1FE003FFC7EA7F80DA01
-FC02FEC7FCDA07F8EB03FCDA1FE0EB0FF0DA3F80EB1FC002FFC7EA7F80D903FCD901FEC8
-FCD90FF0EB07F84948495AD97F80EB3FC0D801FEC7B4C9FCD803F8EB01FCD80FF0EB07F8
-D83FC0EB1FE048C7EA3F8000FE4ACAFCA2007F6E7ED83FC0EB1FE0D80FF0EB07F8D803F8
-EB01FCD801FE6DB4FC26007F80EB3FC0D91FE0EB0FF06D6C6D7ED903FCEB01FED900FF90
-38007F80DA3F80EB1FC0DA1FE0EB0FF0DA07F8EB03FCDA01FCEB00FE6EB4EC7F80DB3FC0
-EB1FE0DB0FE0EB07F0DB07F8EB03FCDB01FEEB00FFDB007FEC3F80DC3FC0EB1FE0DC0FF0
-EB07F8DC03FCEB01FE706CEB00FFDC007E143F051E140F48377BB053>28
-D<181EA4181F84A285180785727EA2727E727E85197E85F11F80F10FC0F107F0007FBA12
-FCBCFCA26C19FCCCEA07F0F10FC0F11F80F13F00197E61614E5A4E5AA24E5A61180F96C7
-FCA260181EA4482C7BAA53>33 D<173CA2173E171E171F8384717E170384717E717E187C
-007FB812FEBAFC856C84CBEA03F0727EF000FEF13F80F11FE0F107F8F101FFA2F107F8F1
-1FE0F13F80F1FE00F001F84E5A007FB912C0BA5A96C7FC6C5FCB127C604D5A4D5A601707
-4D5A95C8FC5F171E173E173CA248307BAC53>41 D<D90FF0ED07F0D93FFEED3FFE90B56C
-91B5FC00036E903903F807C02707F07FF0903907C001E0270F801FF890390F8000F09026
-0007FC013EC71270001E6D6C491438486D6C0178141C00386D6D5A48DA7FC1150E92383F
-E3E0006091261FF3C01406EEF78000E0DA0FFF1507486E90C812036F5AA26F7E6F7F707E
-A24C7E6C4A6D14070060DBEFF81406ED03CF0070912607C7FC140E92380F83FE6CDB01FF
-141CDB1E006D133C6C023E6D6C13786C4A6D6C13F0000FD901F090381FF8016C6C484890
-390FFE0FE02703E01FC00103B512C0C6B5C76C1400D97FFC9138007FFCD90FE0ED0FF048
-267BA453>49 D<91381FFFFE91B6FC1303010F14FED91FF0C7FCEB7F8001FEC8FCEA01F8
-485A485A485A5B48C9FCA2123EA25AA2127812F8A25AA2B712FE16FFA216FE00F0C9FCA2
-7EA21278127CA27EA27EA26C7E7F6C7E6C7E6C7EEA00FEEB7F80EB1FF06DB512FE010314
-FF1300021F13FE283279AD37>I<387FFFF8B6FC15C06C14F0C7EA0FF8EC01FEEC007FED
-1F80ED0FC0ED07E0ED03F01501ED00F8A2167CA2163EA2161E161FA2160FA2007FB7FCB8
-FCA27EC9120FA2161FA2161E163EA2167CA216F8A2ED01F01503ED07E0ED0FC0ED1F80ED
-7F00EC01FEEC0FF8007FB55AB612C092C7FC6C13F8283279AD37>I<EE0180EE03C01607
-A2EE0F80A2EE1F00A2163EA25EA25EA24B5AA24B5AA24B5A150F5E4BC7FCA2153EA25DA2
-5DA24A5AA24A5AA24A5AA24A5AA24AC8FCA2143EA25CA25CA2495AA2495AA2495AA2495A
-A249C9FCA2133EA25B13FC5B485AA2485AA2485AA2485AA248CAFCA2123EA25AA25AA25A
-12602A4E75BB00>54 D<126012F0AD12FCA412F0AD126006207BA400>I<0060161800F0
-163C6C167CA200781678007C16F8A2003C16F0003E1501A26CED03E0A26C16C06D1407A2
-000716806D140FA26C6CEC1F00A26CB612FEA36C5D01F8C7127CA2017C5CA2013C5C013E
-1301A2011E5C011F1303A26D6C485AA201075CECC00FA2010391C7FC6E5AA2903801F03E
-A20100133CECF87CA2EC7878EC7CF8A2EC3FF0A26E5AA36E5AA36E5A6EC8FC2E3C80B92F
->I<156015F0A21401EB07F190383FFFE0EB7C1FEBF00748486C5AD803C07F4848487ED8
-0F007FA248497E001E14BC153C003E143E141FA248EB1E1F143EA2143CA2147C00FC1580
-147814F8A214F0A21301A214E01303A214C0A21307A21480A2130FA214005B007C150013
-1EA2D87E3E5BA2D83E3C133E137CA21378001F5C13F8000F14784913F800075C0003495A
-EBE0033901F007802603FC1FC7FCEBFFFEEBC7F0D807C0C8FCA25BA26CC9FC21477CBF2A
->59 D<18F017011707A3170FA2171F60173F1737177F176F17EF17CF04017F178F160317
-0FEE0707160EA2161C161816381630167016E0A2ED01C016801503ED0700A2150E5DA25D
-157815705D02018103CFB5FCEC03BF4AB6FCA2020EC71203141E5C143802788100205B38
-6001E0EAF0036C4848140126FE1F8081B5C8FC190C49EEFF3C496F13F06C4817E06C4817
-806C48EE7E00D8078093C7FC3E407DBB42>65 D<0238EB07FC02F890383FFF80010391B5
-12C0010F010314E0011FEB0F81017B90391E003FF09026E3F078131F010349130FECF1E0
-902607F3C0130714F7DAFF8014E092C7FC18C04A140F49481580EF1F004A141E5F4A5CEE
-01E0011F4A5A4A010FC7FC163E9138C001F8ED0FFC013F90383FFF804AB57E028114F0DA
-83017F91C7EA3FFC496E7E1607017E6E7E8201FE6E1380A249157FA2173F12015BA21800
-485AA2177E4848157CA25F48484A5A01C75D019F4A5A261FBF80495A496C011EC7FC003F
-01F0137C9138FC03F0D87E3FB512C0D87C1F91C8FCD8780713F8D8E00113C0343D7EBA37
->I<0203B512F0027F14FF49B712E0010F16F890273FC3F00713FED978039038007FFF26
-01E007020F1380D803C0030313C0D80780030013E0000F177FD81F00EE3FF048EF1FF800
-3E4A140F5A0078EF07FC00C0010F1503C7FCA24B1401A3141F5DA3023F16F8A292C8FCF0
-03F0A25C027EED07E0A219C04A150F1980F01F00495A183E6049481578604D5A49484A5A
-4D5A050EC7FC4948143C5FEE01E04948EB07C0043FC8FC91380001FC49EB3FF049B51280
-48B500FCC9FC4814E04801FCCAFC3E397FB840>68 D<ED03FE92383FFFC092B512E00203
-14F0EC0FC091381E001F0278130F4A1307494814E0010315C049481480010FEC0F00161E
-494890C7FCA3133FA380A280806D7E14FE90380FFFC06D13FE6D5B01005B15E0D901F8C8
-FCEB078049C9FC133C5B5B485A1203485A485AA248CAFC5AA2127EA2163C00FE5D4B5AA2
-6C4A5A4B5A6D5C6D49C7FC6C6C131E01F81378393FFF03F06CEBFFC06C91C8FC000313FC
-38007FC02C3D7EBA2C>I<DA0FF81507DAFFFC151E01036D153E010F177ED93F035EEB78
-013801E00048484C5A485A000F5C48C74B5A5A003E1301484D5A127812C0C7494A5AA302
-034B5AA25D4EC7FCA214074B5C187EA24A5A49B75A13075B4915FD903B001F800001F8A2
-4AC7FC170360147EA2170714FE4A5DA34948140FA25C130360495AA2051FEB07804948EE
-0F00193F4AEDE03E011F705A91C8EBFFF8013E17E0013C6F138090C9D807F8C7FC413D7F
-B846>72 D<0370EBFF80912601E00713E0912603C01F13F891260F007F7F021E9038F03F
-FE913A7803C00FFF9139F0078003494848486C1380902603C01E7F902607803EEC7FC049
-485A011E49143F013E17E0494848141FEBF8035D2601F007150F00035CEBE00F00075CD9
-C01EC8FC000F131C49C9FC121FA248CA13C0A348171F1980127EA2183F00FE1800A2183E
-187E187C18FC6017016C5F4D5A6017076C6C4B5A4DC7FC171E6D5D6C6C5D5F6D4A5A6C6C
-EC03806C6C020FC8FC01FF143E6C01C013F86C9038F807E06C90B512806C6C49C9FC011F
-13F0010313803B3D7BBA42>79 D<0203B512F8027FECFF8049B712F0010F8290273FC3F0
-0313FED978039038003FFF2601E00702071380D803C06F13C0D807801500000F177FD81F
-00EE3FE0484A141F123E5A0078010F150F12C0C7FC4B15C0A3021FED1F80A24B1500183E
-A2023F5D6092C85A4D5A4D5A4A4A5A027E020EC7FC173C17F84AEB03E0EE3F80DB1FFEC8
-FC0101EB7FF89138F8FFC0DAF9FCC9FC02F8CAFC495AA3495AA3495AA3495AA291CBFC5B
-A2137EA35B13F013C03B3D7FB83A>I<923801FFC0031F13F8037F13FE0203B6FC91260F
-E01F138091261E000313C00278010013E04A147FD903C0EC3FF04948141F49C8EA0FF813
-1E491507137C49ED03FC485AA2485A48481501A2120F485AA290C9FC5AA24817F8127EA2
-170312FE18F0A3EF07E0A26C17C0170F18806DED1F00127F6D153E6D5D6C6C130F01FC01
-3E5B3B1FFF01F801F06CD9FFE05B6C91388003C000014948485A26007FE049C7FC90C812
-1E163816F0ED03E0ED0780033EC8FCEC0FFC0003B500E0140E000F0280143E4801FCC812
-7C48D9FF8014FC000102F014F8D8000F01FEEB01F00101D9FFC013E0D9003F9038FC03C0
-020790B5120002005C031F13F8030113C0374577BA44>I<0203B512FE027FECFFF049B7
-12FC010F16FF90273FC3F00080D9780302077F2601E0071401D803C06F6C7ED80780163F
-000F171FEA1F00484A140F123E5A0078010F5E12C0C7FC4B4A5AA296C7FC021F5D183E4B
-5C187860023F4A5A4D5A92C7000FC8FC173EEE03F84AEBFFE0DA7E0313804B48C9FC4B7E
-ECFC036F7F6F7F0101147F4A80163F707E495A707EA249481307830403151049486E14F0
-F101E04A6D6CEB03C0011F933880078070EC0F0049C8EBC01E716C5A013E92383FF0F001
-7EEEFFE0017C6F1380496F48C7FC01E0ED07F0443B7FB846>I<EE3FF0923803FFFE030F
-EBFF80033F14C0DBFC0713E0913801E000DA0780EB3FF04AC7121F4A140F143E027E1407
-027C15E014FC18800101ED0F0094C7FCA280A280816D7F81EC7FF86E7E6EB4FC6E13C002
-0313F06E13FC6E6C7E92381FFF8003077F03017F6F7FEE3FF8161F160F01706E7E484814
-03EA07C048C8FC4815015A127E5FA200FE5E16036C5E4C5A6D5D6D4AC7FC6C6C141E6D5C
-D83FFC14F06CB4EB03E06C9038E03F806CD9FFFEC8FC000114F86C6C13C0D90FFCC9FC34
-3D7FBA32>I<1A801907F10F00023FB712FE49B85A010F17F0013F17C0494CC7FC2801E0
-0003F0C9FC48481307485A120F48C7485A5A5AA200FE4A5A5A12F01280C8485AA44BCAFC
-A415FEA44A5AA44A5AA44A5AA4140F5DA35D141FA25D143FA292CBFC5CA2147E14FE5CA2
-495A5C495A5C0102CCFC41427DBB2D>I<0060161800F0163CB3B26C167CA2007C16F8A2
-6CED01F0003F15036C6CEC07E06C6CEC0FC0D807F0EC3F80D803FE903801FF003A00FFC0
-0FFC6DB55A011F14E0010391C7FC9038007FF82E347CB137>91 D<EC7FF80103B5FC011F
-14E0017F14F89039FFC00FFC3A03FE0001FFD807F09038003F80D80FC0EC0FC04848EC07
-E048C8EA03F0003E150148ED00F8A248167CA248163CB3B2006016182E347CB137>I<14
-034A7E4A7EA24A7EA34A7EA2EC7CF8A2ECF87CA2ECF03C0101133EA249487EA249486C7E
-A249486C7EA2EC00034980A2013E6D7EA2496D7EA20178147801F8147CA2484880A24848
-80A24848EC0F80A2491407000F16C0A248C8EA03E0A2003EED01F0A2003C1500007C16F8
-A248167CA248163C006016182E347CB137>94 D<EC01F8140FEC3F80ECFC00495A495A49
-5AA2130F5CB3A7131F5C133F49C7FC13FEEA03F8EA7FE048C8FCEA7FE0EA03F8EA00FE13
-7F6D7E131F80130FB3A7801307A26D7E6D7E6D7EEC3F80EC0FF814011D537ABD2A>102
-D<12FCEAFFC0EA07F0EA01FCEA007E7F80131F80130FB3A7801307806D7E6D7EEB007EEC
-1FF0EC07F8EC1FF0EC7E00495A495A495A5C130F5CB3A7131F5C133F91C7FC137E485AEA
-07F0EAFFC000FCC8FC1D537ABD2A>I<126012F0B3B3B3B3A91260045377BD17>106
-D<0070131C00F0131EB3B3B3B3A80070131C175277BD2A>I<F10180F103C01907A2F10F
-80A2F11F00A2193EA261A261A24E5AA24E5AA24E5AA24E5AA296C7FC60A2183EA260A260
-A24D5AA24D5AA24D5AA24D5AA24DC8FCA20130153E13F000015EEA07F8000F5E487E0079
-4B5AEAE1FE00C04B5AC67E6D4A5AA26E495A133F6E49C9FC131F6E133E130F6E5B13076E
-1378010314F8A26E485A13016E485A13006E485A147FED8F80143F039FCAFC15DFEC1FFE
-A26E5AA26E5AA26E5AA26E5A5D42547B8345>112 D<BA12F0A26C18E0A26C18C0A2D81F
-C0C9EA01807F000FEF03007F000717067F00035F7F00015F7F00005F7F18706D6C156018
-E06D6C5D17016D6C5D17036D6C92C7FC5F6D6C1406170E6D6C140C171C6D6C141817386D
-6C143017706E6C136017E06E6C5B1601DA1FE05B1603DA0FF090C8FC5E913807F806A26E
-6C5AA26E6C5AA26E6C5AA2ED7FE0A26F5AA26F5AA26FC9FCA215063C3C7CB845>114
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ft cmr12 12 8
-/Ft 8 118 df<ED7FF0020FB57E91393FC01FE09139FE0003F8D903F8EB00FED90FE0EC
-3F8049486E7ED97F80EC0FF049C86C7E48486F7E48486F7E00078349814848EE7F80A200
-1F18C049163F003F18E0A34848EE1FF0AA6C6CEE3FE0A4001F18C06D167F000F1880A26C
-6CEEFF00A200035F6D150100015F00005F6D1503017E5E017F15076D5E6D5E6E140F010F
-5E010793C7FC6E5C0103151E00C018186D6C5CA2D86000033813306E147802701470A200
-70013002601370003018600038013802E013E0263FFFF891B5FCA36C18C0A33D467CC546
->10 D<140C141C1438147014E0EB01C01303EB0780EB0F00A2131E5BA25B13F85B12015B
-1203A2485AA3485AA348C7FCA35AA2123EA2127EA4127CA312FCB3A2127CA3127EA4123E
-A2123FA27EA36C7EA36C7EA36C7EA212017F12007F13787FA27F7FA2EB0780EB03C01301
-EB00E014701438141C140C166476CA26>40 D<12C07E12707E7E7E120F6C7E6C7EA26C7E
-6C7EA21378137C133C133E131E131FA2EB0F80A3EB07C0A3EB03E0A314F0A21301A214F8
-A41300A314FCB3A214F8A31301A414F0A21303A214E0A3EB07C0A3EB0F80A3EB1F00A213
-1E133E133C137C13785BA2485A485AA2485A48C7FC120E5A5A5A5A5A16647BCA26>I<12
-1EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3A5121E127FEAFF80A213C0A4127F121E12
-00A512011380A3120313005A1206120E120C121C5A5A12600A3E78AA1B>59
-D<EC7F80903803FFF090380FC07C90383F000F01FCEB03804848EB01C00003140F4848EB
-1FE049133F120F485AA2485AED1FC0007FEC070092C7FCA290C9FC5AAB7E7FA2123F1630
-7F001F15706C6C146016E06C6C14C06C6C13010001EC03806C6CEB0700013F131E90381F
-C078903807FFF001001380242E7DAC2B>99 D<EA01FC12FFA3120712031201B3B3B3A548
-7EB512F8A315457DC41C>108 D<3903F803F000FFEB1FFCEC3C3EEC707F0007EBE0FF38
-03F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3202C7DAB26>
-114 D<D801FC147F00FFEC3FFFA300071401000380000181B3A85EA35DA212006D5B017E
-9038077F80017F010E13C06D011C13FE90380FC078903803FFF09026007F8013002F2D7D
-AB36>117 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fu cmmi12 12 1
-/Fu 1 73 df<91B6D8E003B61280A3020001E0C70003EB8000DB7F806E48C7FC03FF1503
-A293C85BA219075C4B5EA2190F14034B5EA2191F14074B5EA2193F140F4B5EA2197F141F
-4B5EA219FF143F92B8C8FCA3DA7FC0C712014B5DA2180314FF92C85BA218075B4A5EA218
-0F13034A5EA2181F13074A5EA2183F130F4A5EA2187F131F4A5EA2013F16FFA24A93C9FC
-D9FFE002037FB6D8E003B67EA351447CC351>72 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fv cmbx12 12 38
-/Fv 38 122 df<ED0FFF4AB512C0020F14F0027F80903A01FFF803FC499038C000FE010F
-EB00034948497E49485B5C495A4C138001FF6E13005CA3705AEE01F893C8FCA74BB51280
-B9FCA5C69038E00003B3B0007FD9FFC1B6FCA538467EC53E>12 D<DB0FFFEC1FFE4AB5D8
-E003B57E020FDAF01F14E0027F02FCB67E902701FFF803B538F007F8499026C0007F9038
-8001FC010F903B0001FFFE00074948010749497E49484B131F4A495B49485D507E01FF72
-5A4A5DA282706F5A70ED03F097C8FCA70703B5FCBDFCA5C69026E000019038C00007B3B0
-007FD9FFC0B60083B512FEA557467EC55D>14 D<EB07C0EB0FE0EB1FF0EB3FF8137F13FF
-A25A4813F05A4813C01480381FFE00EA3FF8EA7FE0EAFF8048C7FC127C1230151369C538
->19 D<EA07C0EA1FF0487E487E487E7FA31480A37E7EEA1FF7EA07C7EA0007130FA21400
-A25B131E133EA25B13FC5B485A485A1207485A485A90C7FC120C112278C41F>39
-D<B612F8A91D097F9A25>45 D<EA07C0EA1FF0EA3FF8EA7FFCEAFFFEA7EA7FFCEA3FF8EA
-1FF0EA07C00F0F788E1F>I<EC03C01407141F147FEB03FF133FB6FCA413C3EA0003B3B3
-ADB712FCA5264177C038>49 D<ECFFE0010F13FE013F6D7E90B612E0000315F82607FC03
-13FE3A0FE0007FFFD81F806D138048C7000F13C0488001C015E001F07F00FF6E13F07F17
-F881A46C5A6C5A6C5AC9FC17F05DA217E05D17C04B13804B1300A2ED1FFC4B5A5E4B5A4B
-5A4A90C7FC4A5A4A5AEC0FF04A5AEC3F804AC7127814FE495A494814F8D907E014F0495A
-495A49C8FC017C140149140348B7FC4816E05A5A5A5A5AB8FC17C0A42D417BC038>I<EC
-FFF0010713FF011F14C0017F14F049C66C7ED803F8EB3FFED807E06D7E81D80FF86D1380
-13FE001F16C07FA66C5A6C4815806C485BC814005D5E4B5A4B5A4B5A4A5B020F13809026
-07FFFEC7FC15F815FF16C090C713F0ED3FFCED0FFEEEFF80816F13C017E0A26F13F0A217
-F8A3EA0FC0EA3FF0487EA2487EA217F0A25D17E06C5A494913C05BD83F80491380D81FF0
-491300D80FFEEBFFFE6CB612F800015D6C6C14C0011F49C7FC010113E02D427BC038>I<
-163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F87EC1F07143E14
-7E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A485A485A120F5B48
-C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038>I<0007150301
-E0143F01FFEB07FF91B6FC5E5E5E5E5E16804BC7FC5D15E092C8FC01C0C9FCAAEC3FF001
-C1B5FC01C714C001DF14F09039FFE03FFC9138000FFE01FC6D7E01F06D13804915C0497F
-6C4815E0C8FC6F13F0A317F8A4EA0F80EA3FE0487E12FF7FA317F05B5D6C4815E05B007E
-C74813C0123E003F4A1380D81FC0491300D80FF0495AD807FEEBFFFC6CB612F0C65D013F
-1480010F01FCC7FC010113C02D427BC038>I<DCFFF01470031F01FF14F04AB6EAE00102
-07EDF803023FEDFE0791B539E001FF0F4949C7EA3F9F010701F0EC0FFF4901C0804990C8
-7E4948814948814948167F4849163F4849161F5A4A160F485B19074890CAFC19035A5BA2
-007F1801A34994C7FC12FFAE127F7F1AF0A2123FA27F6C18011AE06C7F19036C6D17C06E
-16077E6C6DEE0F806C6DEE1F006D6C5E6D6C167E6D6C6C5D6D6D4A5A6D01F0EC07F00101
-01FEEC1FE06D903AFFF001FF80023F90B6C7FC020715FC020115F0DA001F1480030001F8
-C8FC44467AC451>67 D<BA12F8A485D8001F90C71201EF003F180F180318011800A2197E
-193EA3191EA21778A285A405F890C7FCA316011603161F92B5FCA5ED001F160316011600
-A2F101E01778A2F103C0A494C7FC1907A21A80A2190FA2191FA2193FF17F006160180718
-1F4DB5FCBBFC61A443447DC34A>69 D<B500FE067FB512806E95B6FCA26F5EA2D8003F50
-C7FC013D6DEE03DFA2013C6DEE079FA26E6CEE0F1FA26E6C161EA26E6C163CA36E6C1678
-A26E6C16F0A26E6DEC01E0A26E6DEC03C0A36E6DEC0780A26F6CEC0F00A26F6C141EA26F
-6C5CA36F6C5CA26F6C5CA26F6D485AA26F6D485AA26F6D485AA3706C48C7FCA293383FF8
-1EA2706C5AA2706C5AA3706C5AA2705BA2705BA2705BA2B6057FB6128071C7FCA2173E17
-1C61447CC36A>77 D<B64BB512FE8181A281D8003F6D91C7EA780081013D7F81133C6E7E
-6E7F6E7F6E7F6E7F82806E7F6E7F6F7E6F7F83816F7F6F7F6F7F6F7F6F7F8382707F707F
-707F707F8482707F707F717E7113807113C019E0837113F07113F87113FC7113FE19FF84
-7213F884848484A28484197F193F191FA2190F1907B61603190119001A78A24F447CC358
->I<003FBA12E0A59026FE000FEB8003D87FE09338003FF049171F90C71607A2007E1803
-007C1801A300781800A400F819F8481978A5C81700B3B3A20107B8FCA545437CC24E>84
-D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E
-A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100
-0313E0000F1380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013E
-EBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97
-D<EB7FC0B5FCA512037EB1ED0FF892B57E02C314E002CF14F89139DFC03FFC9139FF000F
-FE02FCEB03FF4A6D13804A15C04A6D13E05CEF7FF0A218F8173FA318FCAC18F8A2177F18
-F0A3EFFFE06E15C06E5B6E491380027C491300496C495A903AFC1FC07FFC496CB512F0D9
-F00314C049C691C7FCC8EA1FF036467DC43E>I<EC3FFC49B512C0010F14F0013F14FC90
-397FF003FE9039FFC001FF0003495A48494813805B120F485AA2485A6F1300007F6E5AED
-00784991C7FCA212FFAC6C7EA3123F6DEC03C0A26C6C1407000F16806D140F6C6DEB1F00
-6C6D133E6C01F05B3A007FFC03F86DB55A010F14C0010391C7FC9038003FF82A2F7CAD32
->I<EE03FEED07FFA5ED001F160FB1EC3FE0903803FFFC010FEBFF8F013F14CF9039FFF8
-07FF48EBC00148903880007F4890C7123F4848141F49140F121F485AA3127F5BA212FFAC
-127FA37F123FA26C6C141FA26C6C143F0007157F6C6C91B5FC6CD9C00314FC6C9038F01F
-EF6DB5128F011FEBFE0F010713F89026007FC0EBF80036467CC43E>I<EC3FF80103B57E
-010F14E0013F8090397FF83FF89039FFC007FC48496C7E48496C7E48486D1380485A001F
-ED7FC05B003FED3FE0A2127F5B17F0161F12FFA290B7FCA401F0C9FCA5127FA27FA2123F
-17F06C7E16016C6C15E06C6C14036C6DEB07C06C6DEB0F806C01F0EB3F0090397FFE01FE
-011FB55A010714F0010114C09026001FFEC7FC2C2F7DAD33>I<EDFF80020F13E0027F13
-F049B512F849EB8FFC90390FFE0FFE90381FFC1F14F8133FEB7FF0A2ED0FFCEBFFE0ED03
-F0ED00C01600ABB612F8A5C601E0C7FCB3B0007FEBFFE0A527467DC522>I<DAFFE0137E
-010F9039FE03FF80013FEBFF8F90B812C048D9C07F133F489038001FF84848EB0FFC4848
-903907FE1F80001F9238FF0F00496D90C7FCA2003F82A8001F93C7FCA26D5B000F5D6C6C
-495A6C6C495A6C9038C07FF04890B55A1680D8078F49C8FC018013E0000F90CAFCA47F7F
-7F90B612C016FC6CEDFF8017E06C826C16FC7E000382000F82D81FF0C77ED83FC0140748
-48020113808248C9FC177FA46D15FF007F17006D5C6C6C4A5A6C6C4A5AD80FFEEC3FF83B
-07FFC001FFF0000190B612C06C6C92C7FC010F14F8D9007F90C8FC32427DAC38>I<EB7F
-C0B5FCA512037EB1ED07FE92383FFF8092B512E002C114F89139C7F03FFC9138CF801F91
-39DF000FFE14DE14FC4A6D7E5CA25CA35CB3A7B60083B512FEA537457CC43E>I<137C48
-B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7FCAAEB7FC0EA7FFF
-A512037EB3AFB6FCA518467CC520>I<EB7FC0B5FCA512037EB3B3B3A3B61280A519457C
-C420>108 D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B512E00281
-6E4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E007F6C01
-9E6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B512FEA557
-2D7CAC5E>I<90397F8007FEB590383FFF8092B512E0028114F8913987F03FFC91388F80
-1F000390399F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FEA5372D7CAC
-3E>I<EC1FFC49B512C0010714F0011F14FC90397FF80FFF9026FFC0017F48496C7F4848
-C7EA3FE000078248486E7E49140F001F82A2003F82491407007F82A400FF1780AA007F17
-00A46C6C4A5AA2001F5E6D141F000F5E6C6C4A5AA26C6C6CEBFFE06C6D485B27007FF80F
-90C7FC6DB55A010F14F8010114C09026001FFCC8FC312F7DAD38>I<90397FC00FF8B590
-B57E02C314E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07FF6C496D13804A15
-C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E15C06E5B6E
-4913806E4913006E495A9139DFC07FFC02CFB512F002C314C002C091C7FCED1FF092C9FC
-ADB67EA536407DAC3E>I<DA3FE0131E902603FFFC133E010F01FF137E013F1480903AFF
-F80FE0FE489038E003F148EBC0014890388000FB4890C7127F49143F001F151F485A160F
-5B127FA3485AAC6C7EA46C7EA26C6C141F163F6C6C147F6C15FF6C6D5A6C9038E003EF6C
-9038F01FCF6DB5128F011FEBFE0F010313F89038007FC091C7FCAD0307B512FCA536407C
-AC3B>I<90387F807FB53881FFE0028313F0028F13F8ED8FFC91389F1FFE000313BE6C13
-BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B612E0A5272D7DAC2E>I<90
-391FFC038090B51287000314FF120F381FF003383FC00049133F48C7121F127E00FE140F
-A215077EA27F01E090C7FC13FE387FFFF014FF6C14C015F06C14FC6C800003806C15806C
-7E010F14C0EB003F020313E0140000F0143FA26C141F150FA27EA26C15C06C141FA26DEB
-3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E026E007FEC7FC232F7CAD2C>I<
-EB01E0A51303A41307A2130FA2131FA2133F137F13FF1203000F90B51280B7FCA4C601E0
-C7FCB3A3ED01E0A9150302F013C0137F150790393FF80F8090391FFC1F006DB5FC6D13FC
-01015B9038003FE023407EBE2C>I<D97FC049B4FCB50103B5FCA50003EC000F6C81B3A8
-5EA25EA25E7E6E491380017FD901F713FE9138F807E76DB512C7010F1407010313FE9026
-007FF0EBFC00372E7CAC3E>I<B5D8FE1FB539801FFFF0A500019027C0003FE0C7EA7C00
-7114786E17F86C6F6C5C6E1601017F6E6C5CA26E011F1403013F6F5C6E013F1407011F6F
-5CA26E0179140F010F048090C7FC6E01F95C6D02F0EBC01E15806D902681E07F5B18E003
-C3157C6D9139C03FF07815E76DDA801F5B18F803FF14F96E9039000FFDE018FF6E486D5B
-A36E486D5BA26E486D90C8FCA24B7F02075DA26E48147C4B143C4C2C7EAB51>119
-D<B500FE90383FFFF0A5C601F0903803E0006D6C495A013F4A5A6D6C49C7FC6E5B6D6C13
-7E6DEB807C6D6D5A6DEBC1F0EDE3E06DEBF7C06EB45A806E90C8FC5D6E7E6E7F6E7FA24A
-7F4A7F8291381F3FFCEC3E1F027C7F4A6C7E49486C7F01036D7F49487E02C08049486C7F
-49C76C7E013E6E7E017E141FB500E090B512FCA5362C7EAB3B>I<B6903803FFFCA50001
-01E09038003E006C163C80017F5D8017F8013F5D6E1301011F5D6E1303010F5D6E13076D
-5DED800F6D92C7FC15C05E6DEBE01E163E6D143CEDF07C027F1378EDF8F8023F5B15FD02
-1F5B15FF6E5BA36E5BA26E90C8FCA26E5AA26E5AA21578A215F85D14015D001F1303D83F
-805B387FC007D8FFE05B140F92C9FC5C143E495A387FC1F8EB07F06CB45A6C5B000790CA
-FCEA01FC36407EAB3B>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fw cmbx12 14.4 12
-/Fw 12 116 df<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF800C7
-FCB3B3B3A6007FB712FEA52F4E76CD43>49 D<EC3FFE0103B512E0010F14FC013F14FF90
-B712C048D9C07F7F2703FE000F13F8D807F801037FD80FE06D7F48486D7F48488001F016
-80486C6E13C07F486C6E13E07FA27013F0A56C5AA26C5AEA0FF0EA03C0C914E05EA218C0
-5E1880A24C13005F4C5A4B5B5F4B5B5F4B5B4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A48
-C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC02FEEC03E0495A495A495A495AD91F801407
-49C8FC013E150F017FB7FC90B812C05A5A5A5A5A5A5AB9FC1880A4344E79CD43>I<9138
-0FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED803
-F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC16
-80C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80DA
-000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218FE
-A2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001F0
-4A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F15800103
-02FCC7FCD9001F1380374F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C
-7FA24C7FA34C8083047F80167E8304FE804C7E03018116F8830303814C7E03078116E083
-030F814C7E031F81168083033F8293C77E4B82157E8403FE824B800201835D840203834B
-800207835D844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A2
-4A820103854A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547B
-D366>65 D<BA12C019FEF1FFC01AF01AFCD8000701F0C7000313FFDE007F7F737F070F7F
-737F878587858785A287A84F5BA263616361634F5B4F5B077F90C7FC4E485A060713F892
-B812E097C8FC861AF003F0C7000313FE9539003FFF80070F13E0737F07017F87737F747E
-1C807413C0A27413E0A31CF0A386A362A31CE0A2621CC0A250138097B5FC1C004F5B1907
-4F5B073F13F04EB55ABC128098C7FC1AF81AC007F8C8FC54527CD160>I<B912F0F0FF80
-19F819FF1AC0D8000701F0C714F0060F7F060113FE727F737F737F85737F87A2737FA387
-A863A2616363A24F5B4F5B4F90C8FC4F5A06035B060F13F095B512C092B8C9FC19F819E0
-19F89226F0000313FE9439007FFF80727F727F727F727F727F8684A28684A787A71D1C75
-133EA38575137E73157C7513FC731401B86C6D9038F803F807039038FE07F07390B512E0
-736C14C0080F1400CEEA7FFC5F537CD164>82 D<913801FFF8021FEBFF8091B612F00103
-15FC010F9038C00FFE903A1FFE0001FFD97FFC491380D9FFF05B4817C048495B5C5A485B
-A2486F138091C7FC486F1300705A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F1707
-6C6D15C07E6E140F6CEE1F806C6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01F
-F0010390B55A01001580023F49C7FC020113E033387CB63C>99 D<913803FFC0023F13FC
-49B6FC010715C04901817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E4817
-8048497F18C0488191C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127F
-A27F7EA218E06CEE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6C
-ECFF00D91FFEEB03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F03438
-7CB63D>101 D<ED3FFC0203B5FC020F14C0023F14E09139FFF81FF0499038C03FF849EB
-807F49903800FFFC495A495AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB712E0A526
-007FF8C8FCB3B3A7007FB512FEA52E547CD329>I<D93FF0EB1FFCB591B512C0030314F0
-030F8092391FE07FFC92393F001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F85
-02FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542367BB54B>110
-D<90397FE003FEB590380FFF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E0
-13FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB6
-12FCA52F367CB537>114 D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF813
-07D81FE0130148487F4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF
-15F86C14FF16C06C15F06C816C816C81C681013F1580010F15C01300020714E0EC003F03
-0713F015010078EC007F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8
-EC7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387C
-B635>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fx cmmi10 10 50
-/Fx 50 123 df<EC3FC0ECFFF8903807E07C90380F801FD93F00EB800C017E130F499038
-07C01C4848ECE018485A484801031338000FEDF0305B001F16704848156017E0007F16C0
-90C713F1178016F34816004815F716FE5EA2485D5EA4007E1407150F003E91381DF81800
-3F14796C02E11338270F8007C013303B07E03F007CF02601FFF8EB3FC026003FC0EB0F80
-2E267DA435>11 D<EB07F0D91FFC1430D97FFE147090B5146000036E13E0486E13C0D9F0
-1F1301270F8007E01380261F00011303001CD900F0130048EC7007160648EC300E0060EC
-380CED181C00E01518C8121CED0C3816301670166016E05EA2150D5EA2150F93C7FCA215
-0EA3150CA3151CA215181538A45DA45DA44A5AA35D2C377FA42B>13
-D<1403EC3FF891387FFF80D901E313C014800103133F9138001F80ED070092C7FC80A280
-A2808013018080130080147F81143F8149B47E130790380F8FF0EB3E0F496C7E13F83801
-F003D803E07F1207380FC0011380121FEA3F0014005A127EA212FE5D481301A35DA24813
-035D6C13075D127C4A5A6C91C7FC5C6C133E6C6C5A3807C0F03801FFE0D8003FC8FC223D
-7DBB25>I<133F14C0EB07F06D7E801301A26D7EA3147FA36E7EA36E7EA36E7EA36E7EA3
-6E7EA36E7EA26E7EA214014A7E5C4A7E91381E3F80143C14784A6C7E1301EB03E049486C
-7EEB0F80EB1F00496D7E137E5B48486D7E485A485A000F6E7E485A485A48C87E12FE167F
-4816800070151F293B7CB930>21 D<EB0380D907E01307010FEC0F80161F5CA2011F143F
-A24A1400A2013F5CA291C7127EA24914FEA2017E5CA201FE1301A2495CA200011403A249
-ECF018A2000314071738EEE030150F00071670031F1360153F6D017713E0486C9038E3E1
-C0903AFF03C1F380903ACFFF00FF00D9C3FC133ED81FC0C9FCA25BA2123FA290CAFCA25A
-A2127EA212FEA25AA212702D377EA432>I<013FB612E090B712F05A120717E0270F8070
-06C7FC391E00600E48140C003813E04813C048141CEAC0011200148001035BA213071400
-A25B1578011E137CA3133E133C137C157E13FC5B1201157F1203497FA3D801C0131C2C25
-7EA32F>25 D<027FB512C00103B612E0130F5B017F15C09026FF81FEC7FC3901FC007E48
-487F485A497F484880485AA248C7FCA2127EA2153F00FE92C7FC5AA25D157E5A5DA24A5A
-A24A5A007C495A5D003C495A003E013FC8FC6C137C380F81F83803FFE0C66CC9FC2B257D
-A32F>27 D<0140151E01E0153F00015E484816805B120790C9123F000E161F170F5A1707
-481700A2003014C014010070010314061260A2170E00E04948130C5A171C92C7FC5FA26C
-495C4A14F04A7E6C017F495A4A6C485A3AF801F7E00F3BFE0FF3F83F80267FFFE3B5FC02
-C191C7FC6C01815B02005BD80FFCEB7FF0D803F0EB0FC031267FA434>33
-D<EC3FE0903801FFFC010713FF011F148090397F801FC09038F80007D801E01303484890
-C7FC48C9FCA21206A5000713F038039FFF3801FF0F14FF38039FFE48C9FC120E5A5A1230
-12701260A212E0A215080060141C00701418007814386C14F0391F8007E06CB55A6C91C7
-FC000113FC38003FE022287FA527>I<EE1F8001C0EC7FE00001913801FFF848484913FC
-90C75A4891380FC07E000691381F003E000E023E131E000C023C130F001C4A1307001814
-7000385C00305C4A5AA2007049C7120612601406170E170C00E049141CA2173800605B00
-70167017E00078013813016CED03C0003E0130EB0F806C0170EB1F0001C0147ED80FF049
-5A3A07FFF01FF8000190B512E06C1580013F49C7FC010F13F8010113C0D903E0C8FCA25C
-1307A4495AA3131FA349C9FCA3131E30377DA436>39 D<121C127FEAFF80A5EA7F00121C
-0909798817>58 D<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A
-1206120E5A5A5A12600A19798817>I<EF0380EF0FC0173FEFFF80933803FE00EE0FF8EE
-3FE0EEFF80DB03FEC7FCED0FF8ED3FE0EDFF80DA03FEC8FCEC0FF8EC3FE0ECFF80D903FE
-C9FCEB0FF8EB3FE0EBFF80D803FECAFCEA0FF8EA3FE0EA7F8000FECBFCA2EA7F80EA3FE0
-EA0FF8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF
-80ED3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FC0170FEF03
-80323279AD41>I<126012FCB4FCEA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FC
-EB01FF9038007FC0EC1FF0EC07FCEC01FF9138007FC0ED1FF0ED07FCED01FF9238007FC0
-EE1FF0EE07FCEE01FF9338007F80EF1FC0A2EF7F80933801FF00EE07FCEE1FF0EE7FC04B
-48C7FCED07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB
-7FC04848CAFCEA07FCEA3FF0EA7FC048CBFC12FC1270323279AD41>62
-D<EC03FC91381FFF80027F7F903901F807F0903903C001F890390780007C91C7127E010E
-804980011F1580D93FC0130F17C01607A24A14E0A2011EC7FC90C8FCA5EC0FF0ECFFFC90
-3803F00E903907C0078F90381F8001D93E0013CF491300484814FF0003ED7FC05B485A12
-0F48481580A2485AA2007F160090C8FC167E16FE5A485D15015E1503485D15075E4B5AA2
-007E4A5A4BC7FC003E147E003F5C6C6C485A390FC007F03907F01FC06CB5C8FCC613FCEB
-1FE02B3E7DBB2C>64 D<1760177017F01601A21603A21607160FA24C7EA2163316731663
-16C3A2ED0183A2ED0303150683150C160115181530A21560A215C014011580DA03007FA2
-02061300140E140C5C021FB5FC5CA20260C7FC5C83495A8349C8FC1306A25BA25B13385B
-01F01680487E000716FFB56C013F13FF5EA2383C7DBB3E>I<0103B77E4916F018FC903B
-0007F80003FE4BEB00FFF07F80020FED3FC0181F4B15E0A2141FA25DA2143F19C04B143F
-1980027F157F190092C812FE4D5A4A4A5AEF0FF04AEC1FC005FFC7FC49B612FC5F02FCC7
-B4FCEF3FC00103ED0FE0717E5C717E1307844A1401A2130F17035CA2131F4D5A5C4D5A13
-3F4D5A4A4A5A4D5A017F4BC7FC4C5A91C7EA07FC49EC3FF0B812C094C8FC16F83B397DB8
-3F>I<9339FF8001C0030F13E0037F9038F80380913A01FF807E07913A07F8000F0FDA1F
-E0EB079FDA3F80903803BF0002FFC76CB4FCD901FC80495A4948157E495A495A4948153E
-017F163C49C9FC5B1201484816385B1207485A1830121F4993C7FCA2485AA3127F5BA312
-FF90CCFCA41703A25F1706A26C160E170C171C5F6C7E5F001F5E6D4A5A6C6C4A5A16076C
-6C020EC8FC6C6C143C6C6C5C6CB4495A90393FE00FC0010FB5C9FC010313FC9038007FC0
-3A3D7CBA3B>I<0103B7FC4916E018F8903B0007F80007FE4BEB00FFF03F80020FED1FC0
-180F4B15E0F007F0021F1503A24B15F81801143F19FC5DA2147FA292C8FCA25C18035CA2
-130119F84A1507A2130319F04A150FA2010717E0181F4A16C0A2010FEE3F80A24AED7F00
-187E011F16FE4D5A4A5D4D5A013F4B5A4D5A4A4A5A057FC7FC017F15FEEE03FC91C7EA0F
-F049EC7FC0B8C8FC16FC16C03E397DB845>I<0103B812F05BA290260007F8C7123F4B14
-07F003E0020F150118005DA2141FA25D19C0143FA24B1330A2027F1470190092C7126017
-E05C16014A495A160F49B6FCA25F9138FC000F01031407A24A6DC8FCA201075C18034A13
-0660010F160693C7FC4A150E180C011F161C18184A1538A2013F5E18F04A4A5AA2017F15
-074D5A91C8123F49913803FF80B9FCA295C7FC3C397DB83D>I<0103B812E05BA2902600
-07F8C7123F4B140FF003C0140F18015DA2141FA25D1980143FA25D1760027F14E095C7FC
-92C75AA24A1301A24A495A16070101141F91B6FC94C8FCA2903903FC001F824A130EA213
-07A24A130CA2010F141CA24A90C9FCA2131FA25CA2133FA25CA2137FA291CBFC497EB612
-C0A33B397DB835>I<0103B5D8F803B512F8495DA290260007F8C73807F8004B5DA2020F
-150F615DA2021F151F615DA2023F153F615DA2027F157F96C7FC92C8FCA24A5D605CA249
-B7FC60A202FCC7120101031503605CA201071507605CA2010F150F605CA2011F151F605C
-A2013F153F605CA2017F157F95C8FC91C8FC496C4A7EB690B6FCA345397DB845>72
-D<0103B500F8903807FFFC5BA290260007F8C813804BEDFC0019F0020F4B5AF003804B4A
-C7FC180E021F1538604B5CEF0380023F4AC8FC170E4B133C1770027F5C4C5ADB0007C9FC
-160E4A5B167E4A13FE4B7E01015B92380E7F80ECFC1CED383F010301E07FECFDC04A486C
-7EECFF00D907FC6D7E5C4A130783130F707E5C1601011F81A24A6D7EA2013F6F7EA24A14
-3F84137F717E91C8123F496C81B60107B512C0A26146397DB847>75
-D<0103B6FC5B5E90260007FCC8FC5D5D140FA25DA2141FA25DA2143FA25DA2147FA292C9
-FCA25CA25CA21301A25CA21303A25CA2130718404A15C0A2010F150118804A1403A2011F
-16005F4A1406170E013F151E171C4A143C177C017F5D160391C7120F49EC7FF0B8FCA25F
-32397DB839>I<902603FFF891381FFFF8496D5CA2D90007030113006FEC007C02061678
-DA0EFF157081020C6D1460A2DA1C3F15E0705CEC181F82023815016F6C5C143015070270
-6D1303030392C7FC02607FA2DAE0015C701306ECC0008201016E130EEF800C5C163F0103
-EDC01C041F131891C713E0160F49EDF03818300106140717F8010E02031370EFFC60130C
-EE01FE011C16E004005B011815FF177F1338600130153FA20170151F95C8FC01F081EA07
-FCB512E01706A245397DB843>78 D<0103B612F849EDFF8018E0903B0007F8001FF84BEB
-03FCEF00FE020F157FA24BEC3F80A2021F16C0A25DA2143FF07F805DA2027FEDFF006092
-C7485A4D5A4A4A5A4D5A4AEC1F80057FC7FC0101EC07F891B612E094C8FC9139FC000FC0
-0103EC03F0707E4A6D7E831307177E5C177F010F5D5F5CA2011F1401A25CA2133F16034A
-4A1360A2017F17E019C091C71401496C01011480B61503933900FE0700EF7E0ECAEA1FFC
-EF07F03B3B7DB83F>82 D<267FFFFC91383FFFC0B55DA2000390C83807FC006C48ED03E0
-6060000094C7FC5F17065FA25F6D5DA26D5D17E05F4C5AA24CC8FC6E1306A2013F5C161C
-16185EA25E6E5BA2011F495A150393C9FC1506A25D6E5AA2010F5B157015605DA2ECE180
-02E3CAFC14F3EB07F614FE5C5CA25C5CA26D5AA25C91CBFC3A3B7CB830>86
-D<147E903803FF8090390FC1C38090391F00EFC0017E137F49133F485A4848EB1F801207
-5B000F143F48481400A2485A5D007F147E90C7FCA215FE485C5AA214015D48150CA21403
-EDF01C16181407007C1538007E010F1330003E131F027B13706C01E113E03A0F83C0F9C0
-3A03FF007F80D800FCEB1F0026267DA42C>97 D<133FEA1FFFA3C67E137EA313FE5BA312
-015BA312035BA31207EBE0FCEBE3FF9038E707C0390FFE03E09038F801F001F013F8EBE0
-00485A15FC5BA2123F90C7FCA214015A127EA2140312FE4814F8A2140715F05AEC0FE0A2
-15C0EC1F80143F00781400007C137E5C383C01F86C485A380F07C06CB4C7FCEA01FC1E3B
-7CB924>I<EC3FC0903801FFF0903807E03C90380F800E90383F0007017E131F49137F48
-4813FF485A485A120F4913FE001F143848481300A2127F90C8FCA35A5AA45AA315031507
-007E1406150E003E143C003F14706C14E0390F8007C03907C03F003801FFF838003FC020
-267DA424>I<163FED1FFFA3ED007F167EA216FEA216FCA21501A216F8A21503A216F0A2
-1507A2027E13E0903803FF8790380FC1CF90381F00EF017EEB7FC049133F485A4848131F
-000715805B000F143F485A1600485A5D127F90C7127EA215FE5A485CA21401A248ECF80C
-A21403161CEDF0181407007C1538007E010F1330003E131F027B13706C01E113E03A0F83
-C0F9C03A03FF007F80D800FCEB1F00283B7DB92B>I<EC3FC0903801FFF0903807E07890
-381F801C90387E001E49130E485A485A1207485A49131E001F141C153C484813F8EC03E0
-007FEB3FC09038FFFE0014E090C8FC5A5AA7007E140315071506003E140E153C6C14706C
-6C13E0EC07C03903E03F003801FFF838003FC020267DA427>I<16F8ED03FEED0F879238
-1F0F80ED3E3F167F157CA215FC1700161C4A48C7FCA414035DA414075DA20107B512F0A3
-9026000FE0C7FC5DA4141F5DA4143F92C8FCA45C147EA514FE5CA413015CA4495AA45C13
-07A25C121E123F387F8F80A200FF90C9FC131E12FEEA7C3CEA7878EA1FF0EA07C0294C7C
-BA29>I<EB03F0EA01FFA3EA00075CA3130F5CA3131F5CA3133F91C9FCA35B90387E03F8
-EC0FFF91383C0F809039FEF007C0D9FDC07FEBFF80EC0003485A5BA249130712035BA215
-0F00075D5BA2151F000F5D5B153F93C7FC121F4990387F0180157EEDFE03003F02FC1300
-90C7FC5EEDF80648150E007E150C161C5E00FEEC787048EC3FE00038EC0F80293B7CB930
->104 D<14E0EB03F8A21307A314F0EB01C090C7FCAB13F8EA03FEEA070F000E1380121C
-121812381230EA701F1260133F00E0130012C05BEA007EA213FE5B1201A25B12035BA200
-07131813E01438000F133013C01470EB806014E014C01381EB838038078700EA03FEEA00
-F815397EB71D>I<150FED3F80A2157FA31600151C92C7FCABEC0F80EC3FE0ECF0F09038
-01C0F849487E14005B130E130C131CEB1801133801305BA2EB0003A25DA21407A25DA214
-0FA25DA2141FA25DA2143FA292C7FCA25CA2147EA214FEA25CA21301001E5B123F387F83
-F0A238FF87E0495A00FE5BD87C1FC8FCEA707EEA3FF8EA0FC0214981B722>I<EB03F0EA
-01FFA3EA00075CA3130F5CA3131F5CA3133F91C8FCA35B017EEB07C0ED1FF0ED783801FE
-EBE0F89039FC01C1FCEC0383EC07070001130ED9F81C13F891383803F091387001E00003
-49C7FCEBF1C0EBF38001F7C8FCEA07FEA2EBFFE0EBE7F8380FE0FEEBC07F6E7E141F001F
-80D9800F1330A21670003F011F136001001380A216E04815C0007E1481020F1380158300
-FE903807870048EB03FE0038EB00F8263B7CB92B>I<EB0FC0EA03FF5AA2EA001F1480A2
-133FA21400A25BA2137EA213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2
-121FA25BA2123FA290C7FCA25AA2EA7E03A2EAFE07130612FCA2130E130C131C1318EA7C
-38EA3C70EA1FE0EA0780123B7DB919>I<D803E0017F14FE3D07F801FFE003FFC03D0E3C
-0781F00F03E03D1C3E1E00F83C01F026383F38D9FC707F00304914E04A90387DC0000070
-49EB7F8000604991C7FCA200E090C700FE1301485A017E5CA200000201140301FE5F495C
-A203031407000160495C180F03075D1203494A011F13601980030F023F13E00007F000C0
-495C1901031F023E1380000F1803494A150061033F150E001FEF1E1C4991C7EA0FF80007
-C7000EEC03E043267EA449>I<D803E0137F3A07F801FFE03A0E3C0781F03A1C3E1E00F8
-26383F387F00305B4A137C00705B00605BA200E090C712FC485A137EA20000140101FE5C
-5BA2150300015D5B15075E120349010F133016C0031F13700007ED80605B17E0EE00C000
-0F15014915801603EE0700001FEC0F0E49EB07FC0007C7EA01F02C267EA432>I<90390F
-8003F090391FE00FFC903939F03C1F903A70F8700F80903AE0FDE007C09038C0FF800300
-13E00001491303018015F05CEA038113015CA2D800031407A25CA20107140FA24A14E0A2
-010F141F17C05CEE3F80131FEE7F004A137E16FE013F5C6E485A4B5A6E485A90397F700F
-80DA383FC7FC90387E1FFCEC07E001FEC9FCA25BA21201A25BA21203A25B1207B512C0A3
-2C3583A42A>112 D<3903E001F83907F807FE390E3C1E07391C3E381F3A183F703F8000
-38EBE07F0030EBC0FF00705B00601500EC007E153CD8E07F90C7FCEAC07EA2120013FE5B
-A312015BA312035BA312075BA3120F5BA3121F5B0007C9FC21267EA425>114
-D<14FF010313C090380F80F090383E00380178131C153C4913FC0001130113E0A33903F0
-00F06D13007F3801FFE014FC14FF6C14806D13C0011F13E013039038003FF01407140300
-1E1301127FA24814E0A348EB03C012F800E0EB07800070EB0F006C133E001E13F83807FF
-E0000190C7FC1E267CA427>I<EB01C0497E1307A4130F5CA3131F5CA3133F91C7FC007F
-B51280A2B6FCD8007EC7FCA313FE5BA312015BA312035BA312075BA3120FEBC006A2140E
-001F130CEB801C141814385C146014E0380F81C038078780D803FEC7FCEA00F819357EB3
-1E>I<13F8D803FE1438D8070F147C000E6D13FC121C1218003814011230D8701F5C1260
-1503EAE03F00C001005B5BD8007E1307A201FE5C5B150F1201495CA2151F120349EC80C0
-A2153F1681EE0180A2ED7F0303FF130012014A5B3A00F8079F0E90397C0E0F1C90393FFC
-07F8903907F001F02A267EA430>I<01F8EB03C0D803FEEB07E0D8070F130F000E018013
-F0121C12180038140700301403D8701F130112601500D8E03F14E000C090C7FC5BEA007E
-16C013FE5B1501000115805B150316001203495B1506150E150C151C151815385D00015C
-6D485A6C6C485AD97E0FC7FCEB1FFEEB07F024267EA428>I<01F816F0D803FE9138E001
-F8D8070F903801F003000ED9800314FC121C12180038020713010030EDE000D8701F167C
-1260030F143CD8E03F163800C001005B5BD8007E131F183001FE5C5B033F147000011760
-4991C7FCA218E000034A14C049137E17011880170318005F03FE1306170E000101015C01
-F801BF5B3B00FC039F8070903A7E0F0FC0E0903A1FFC03FFC0902703F0007FC7FC36267E
-A43B>I<903907E001F090391FF807FC9039783E0E0F9039E01F1C1FD801C09038383F80
-3A03800FF07F0100EBE0FF5A000E4A1300000C157E021F133C001C4AC7FC1218A2C7123F
-A292C8FCA25CA2147EA214FEA24A130CA20101141C001E1518003F5BD87F81143801835C
-00FF1560010714E03AFE0E7C01C0D87C1C495A2778383E0FC7FC391FF00FFC3907C003F0
-29267EA42F>I<13F8D803FE1470D8070F14F8000EEB8001121C121800381403003015F0
-EA701F1260013F130700E0010013E012C05BD8007E130F16C013FE5B151F000115805BA2
-153F000315005BA25D157EA315FE5D1401000113033800F80790387C1FF8EB3FF9EB0FE1
-EB00035DA2000E1307D83F805B007F495AA24A5A92C7FCEB003E007C5B00705B6C485A38
-1E07C06CB4C8FCEA01FC25367EA429>I<D901E01360D90FF813E0496C13C090383FFE01
-90397FFF038090B5EA07009038F81FFF3901E003FE9038C0001C495B5DC85A4A5A4A5A4A
-C7FC140E5C5C14F0495AEB038049C8FC130E5B4913035B495B484813064848130E48C75A
-D80FFC137C391FFF81F8381E0FFFD838075B486C5B00605CD8E00190C7FC38C0007C2326
-7DA427>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fy cmbx10 10 20
-/Fy 20 122 df<EA0F80EA3FE0EA7FF0A2EAFFF8A5EA7FF0A2EA3FE0EA0F80C7FCABEA0F
-80EA3FE0EA7FF0A2EAFFF8A5EA7FF0A2EA3FE0EA0F800D2579A41B>58
-D<ED03E04B7EA24B7EA34B7EA24B7EA34B7EA292B57EA34A8015F302038015E1A2020780
-15C0020F80ED807FA2021F80ED003F4A80023E131FA2027E80027C7F02FC814A7FA20101
-824A7F49B77EA3498202C0C7FC010F824A147FA2011F8291C8123F4982013E151FA2017E
-82017C8101FE83B500F80107B61280A4413A7DB948>65 D<EB3FFE0003B512E0000F14F8
-391FF00FFE003FEB03FF6D6C7F6E7FA26F7EA26C5A6C5AEA0380C8FCA2EC3FFF010FB5FC
-137F3901FFF87F00071380380FFE00EA3FF85B485A12FF5BA415FF6D5A127F263FF00713
-F83B1FFC1FBFFFC0390FFFFE1F0003EBF80F39003FE0032A257DA42E>97
-D<13FFB5FCA412077EAF4AB47E020F13F0023F13FC9138FE03FFDAF00013804AEB7FC002
-80EB3FE091C713F0EE1FF8A217FC160FA217FEAA17FCA3EE1FF8A217F06E133F6EEB7FE0
-6E14C0903AFDF001FF80903AF8FC07FE009039F03FFFF8D9E00F13E0D9C00390C7FC2F3A
-7EB935>I<903801FFC0010F13FC017F13FFD9FF8013802603FE0013C048485AEA0FF812
-1F13F0123F6E13804848EB7F00151C92C7FC12FFA9127FA27F123FED01E06C7E15036C6C
-EB07C06C6C14806C6C131FC69038C07E006DB45A010F13F00101138023257DA42A>I<EE
-7F80ED7FFFA4150381AF903801FF81010F13F1013F13FD9038FFC07F0003EB001FD807FC
-1307000F8048487F5B123FA2485AA312FFAA127FA27F123FA26C6C5B000F5C6C6C5B6C6C
-4913C02701FF80FD13FE39007FFFF9011F13E1010313012F3A7DB935>I<903803FF8001
-1F13F0017F13FC3901FF83FE3A03FE007F804848133F484814C0001FEC1FE05B003FEC0F
-F0A2485A16F8150712FFA290B6FCA301E0C8FCA4127FA36C7E1678121F6C6C14F86D14F0
-00071403D801FFEB0FE06C9038C07FC06DB51200010F13FC010113E025257DA42C>I<EC
-1FF0903801FFFC010713FF90391FF87F8090383FE0FFD9FFC113C0A2481381A24813016E
-1380A2ED3E0092C7FCA8B6FCA4000390C8FCB3ABB512FEA4223A7DB91D>I<161FD907FE
-EBFFC090387FFFE348B6EAEFE02607FE07138F260FF801131F48486C138F003F15CF4990
-387FC7C0EEC000007F81A6003F5DA26D13FF001F5D6C6C4890C7FC3907FE07FE48B512F8
-6D13E0261E07FEC8FC90CAFCA2123E123F7F6C7E90B512F8EDFF8016E06C15F86C816C81
-5A001F81393FC0000F48C8138048157F5A163FA36C157F6C16006D5C6C6C495AD81FF0EB
-07FCD807FEEB3FF00001B612C06C6C91C7FC010713F02B377DA530>I<13FFB5FCA41207
-7EAFED7FC0913803FFF8020F13FE91381F03FFDA3C01138014784A7E4A14C05CA25CA291
-C7FCB3A3B5D8FC3F13FFA4303A7DB935>I<EA01F0EA07FC487EA2487EA56C5AA26C5AEA
-01F0C8FCA913FF127FA412077EB3A9B512F8A4153B7DBA1B>I<01FED97FE0EB0FFC00FF
-902601FFFC90383FFF80020701FF90B512E0DA1F81903983F03FF0DA3C00903887801F00
-0749DACF007F00034914DE6D48D97FFC6D7E4A5CA24A5CA291C75BB3A3B5D8FC1FB50083
-B512F0A44C257DA451>109 D<01FEEB7FC000FF903803FFF8020F13FE91381F03FFDA3C
-011380000713780003497E6D4814C05CA25CA291C7FCB3A3B5D8FC3F13FFA430257DA435
->I<903801FFC0010F13F8017F13FFD9FF807F3A03FE003FE048486D7E48486D7E48486D
-7EA2003F81491303007F81A300FF1680A9007F1600A3003F5D6D1307001F5DA26C6C495A
-6C6C495A6C6C495A6C6C6CB45A6C6CB5C7FC011F13FC010113C029257DA430>I<9039FF
-01FF80B5000F13F0023F13FC9138FE07FFDAF00113800007496C13C06C0180EB7FE091C7
-13F0EE3FF8A2EE1FFCA3EE0FFEAA17FC161FA217F8163F17F06E137F6E14E06EEBFFC0DA
-F00313809139FC07FE0091383FFFF8020F13E0020390C7FC91C9FCACB512FCA42F357EA4
-35>I<9038FE03F000FFEB0FFEEC3FFF91387C7F809138F8FFC000075B6C6C5A5CA29138
-807F80ED3F00150C92C7FC91C8FCB3A2B512FEA422257EA427>114
-D<90383FF0383903FFFEF8000F13FF381FC00F383F0003007E1301007C130012FC15787E
-7E6D130013FCEBFFE06C13FCECFF806C14C06C14F06C14F81203C614FC131F9038007FFE
-140700F0130114007E157E7E157C6C14FC6C14F8EB80019038F007F090B512C000F81400
-38E01FF81F257DA426>I<130FA55BA45BA25B5BA25A1207001FEBFFE0B6FCA3000390C7
-FCB21578A815F86CEB80F014816CEBC3E090383FFFC06D1380903803FE001D357EB425>
-I<01FFEC3FC0B5EB3FFFA4000714016C80B3A35DA25DA26C5C6E4813E06CD9C03E13FF90
-387FFFFC011F13F00103138030257DA435>I<B539F001FFF8A4000390C7EA3F00161E6E
-133E6C153C6E137C6C15786E13F8017F5CECF001013F5C14F8011F495AA2ECFC07010F5C
-ECFE0F010791C7FC6E5A6D131E15BE6D13BC15FC6D5BA36E5AA26E5AA26E5AA26E5AA292
-C8FCA25C141E003F133E387F803C38FFC07C147814F8EBC1F0EBC3E06C485A387D1F80D8
-3FFFC9FCEA1FFCEA07F02D357EA432>121 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fz cmr10 10 88
-/Fz 88 128 df<1506150FA24B7EA24B7EA24B7EA2EDDFF0A29138018FF8A291380307FC
-A291380603FEA291380E01FF140CDA1C007F141802386D7E143002706D7E146002E06D7E
-5C01016E7E5C01036E7E91C7FC496E7E1306010E6E7E130C011C6E7F131801386F7E1330
-01706F7E136001E06F7E5B170F484882170748C97F17030006831701488383481880001F
-B9FC4818C0A24818E0A2BA12F0A23C3C7CBB45>1 D<B912FEA3000190C7000113006C5E
-B3B3AD486D497EB648B512FEA337397DB83E>5 D<B812FEA3D87FE0C7121F16016C6CEC
-007F6C6C151FA26C6C816C6C81A26C6C816C7F7E6E15806D6C14016D7EA26D7E6D6C91C7
-FCA26D7E6D7EA26D7F6D7FA26E7E143FA26E5A6E5A6EC9FC140E5C5C14300270EC01805C
-495A495A49C81203010E16005B5B495D5B48485D48485D90C95A485E000E4B5A48ED1FFE
-003FB7FC5AB8FCA231397BB83C>I<011FB512FEA39026001FFEC8FCEC07F8A8EC3FFE01
-03B512E0D91FF713FC90397F07F87F01FCEC1F80D803F8EC0FE0D807F06E7ED80FE06E7E
-001F82D83FC06E7EA2007F8201808000FF1780A7007F170001C05C003F5EA2D81FE04A5A
-000F5ED807F04A5AD803F84A5AD800FCEC1F80017F027FC7FC90391FF7FFFC0103B512E0
-9026003FFEC8FCEC07F8A8EC1FFE011FB512FEA331397BB83C>8
-D<EC0FFE91387FFFC0903903FC07F890390FE000FED93F80EB3F8049C76C7E01FE6E7E48
-486E7E00038248486E7E48486E7EA248486E7E003F1780A34848ED7FC0AA003F17806D15
-FFA2001F1700A36C6C4A5AA200075E6D140300035E00015EA26C6C4A5AA2017C5DA26D4A
-5A011E92C7FC00C017606D141E006017C06D141CA326700380EB38010038EE0380D83FFF
-EC3FFFA46C1700A2333B7CBA3C>10 D<DA0FF813FC91397FFF07FF903B01F807DF83C090
-3A07E001FF0F903B1F8007FE1FE090393F000FFC137E16F85B9338F007804848010790C7
-FC1503ACB812F8A32801F80003F0C7FCB3AB486C497E267FFFE0B512F0A3333B7FBA30>
-I<EC0FF8EC7FFE903901F80780903907E001C090391F8000E090383F0007017E497EA25B
-A2485A6F5AED018092C8FCA9ED03F0B7FCA33901F8000F1503B3AA486C497E267FFFE0B5
-12C0A32A3B7FBA2E>I<DA0FF0EB1FF0DA7FFEEBFFFC903B01F80F83F00F903C07E001CF
-C00380903C1F8000FF0001C090273F0007FE130F017E4948497EA2495CA248485C03076E
-5A03030203C7FC95C8FCA9F007E0BAFCA33C01F80003F0001F1807B3AA486C496C497E26
-7FFFE0B500C1B51280A3413B7FBA45>14 D<133C137EA213FE1201EA03FC13F0EA07E0EA
-0FC0EA1F80EA1E005A5A5A12C00F0F6FB92A>19 D<001C131C007F137F39FF80FF80A26D
-13C0A3007F137F001C131C00001300A40001130101801380A20003130301001300485B00
-061306000E130E485B485B485B006013601A197DB92A>34 D<141FEC7FC0903801F0E090
-3803C0600107137090380F803090381F00381518A25BA2133E133F15381530A215705D5D
-140190381F838092CAFC1487148E02DC49B51280EB0FF85C4A9039003FF8000107ED0FC0
-6E5D71C7FC6E140E010F150CD91DFC141C01391518D970FE143801E015302601C07F1470
-D803805D00076D6C5BD80F00EBC00148011F5C4890380FE003003E6E48C8FC007E903807
-F8060203130E00FE6E5A6E6C5A1400ED7F706C4B13036F5A6F7E6C6C6D6C5B7013066C6C
-496C130E6DD979FE5B281FF001F07F133C3C07F80FE03FC0F86CB539800FFFF0C69026FE
-000313C0D91FF0D9007FC7FC393E7DBB41>38 D<121C127FEAFF80A213C0A3127F121C12
-00A412011380A2120313005A1206120E5A5A5A12600A1979B917>I<146014E0EB01C0EB
-0380EB0700130E131E5B5BA25B485AA2485AA212075B120F90C7FCA25A121EA2123EA35A
-A65AB2127CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E1378A27F7F130E7FEB
-0380EB01C0EB00E01460135278BD20>I<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7E
-A21378A2137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0B2EB07C0A6EB0F80A3
-1400A25B131EA2133E133C137C1378A25BA2485A485AA2485A48C7FC120E5A5A5A5A5A13
-527CBD20>I<15301578B3A6007FB812F8B912FCA26C17F8C80078C8FCB3A6153036367B
-AF41>43 D<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A120612
-0E5A5A5A12600A19798817>I<B512FCA516057F941C>I<121C127FEAFF80A5EA7F00121C
-0909798817>I<150C151E153EA2153C157CA2157815F8A215F01401A215E01403A215C0
-1407A21580140FA215005CA2141E143EA2143C147CA2147814F8A25C1301A25C1303A249
-5AA25C130FA291C7FC5BA2131E133EA2133C137CA2137813F8A25B1201A25B1203A25B12
-07A25B120FA290C8FC5AA2121E123EA2123C127CA2127812F8A25A12601F537BBD2A>I<
-EB03F8EB1FFF90387E0FC09038F803E03901E000F0484813780007147C48487FA248C77E
-A2481580A3007EEC0FC0A600FE15E0B3007E15C0A4007F141F6C1580A36C15006D5B000F
-143EA26C6C5B6C6C5B6C6C485A6C6C485A90387E0FC0D91FFFC7FCEB03F8233A7DB72A>
-I<EB01C013031307131F13FFB5FCA2131F1200B3B3A8497E007FB512F0A31C3879B72A>
-I<EB0FF0EB7FFE48B57E3903E03FE0390F000FF0000E6D7E486D7E486D7E123000706D7E
-126012FCB4EC7F807FA56CC7FC121CC8FCEDFF00A34A5A5D14035D4A5A5D140F4A5A4A5A
-92C7FC147C5C495A495A495A495A91C8FC011EEB01805B5B49130348481400485A485A00
-0EC75A000FB6FC5A5A485CB6FCA321387CB72A>I<EB07F8EB3FFF4913C03901F80FF039
-03C007F848486C7E380E0001000F80381FE0006D7FA56C5A6C5AC85A1401A25D4A5AA24A
-5A5DEC0F80027EC7FCEB1FFCECFF809038000FE06E7EEC01FC816E7EED7F80A216C0A215
-3F16E0A2121EEA7F80487EA416C049137F007F1580007EC7FC0070ECFF006C495A121E39
-0F8003F83907F00FF00001B512C06C6C90C7FCEB0FF8233A7DB72A>I<1538A2157815F8
-A2140114031407A2140F141F141B14331473146314C313011483EB030313071306130C13
-1C131813301370136013C01201EA038013005A120E120C5A123812305A12E0B712F8A3C7
-3803F800AB4A7E0103B512F8A325397EB82A>I<0006140CD80780133C9038F003F890B5
-FC5D5D158092C7FC14FC38067FE090C9FCABEB07F8EB3FFE9038780F803907E007E09038
-8003F0496C7E12066E7EC87EA28181A21680A4123E127F487EA490C71300485C12E00060
-5C12700030495A00385C6C1303001E495A6C6C485A3907E03F800001B5C7FC38007FFCEB
-1FE0213A7CB72A>I<EC3FC0903801FFF0010713FC90380FE03E90383F800790387E001F
-49EB3F804848137F485AA2485A000FEC3F0049131E001F91C7FCA2485AA3127F90C9FCEB
-01FC903807FF8039FF1E07E090383801F0496C7E01607F01E0137E497FA249148016C015
-1FA290C713E0A57EA56C7E16C0A2121FED3F807F000F15006C6C5B15FE6C6C5B6C6C485A
-3900FE07F090383FFFC06D90C7FCEB03FC233A7DB72A>I<12301238123E003FB612E0A3
-16C05A168016000070C712060060140E5D151800E01438485C5D5DC712014A5A92C7FC5C
-140E140C141C5CA25CA214F0495AA21303A25C1307A2130FA3495AA3133FA5137FA96DC8
-FC131E233B7BB82A>I<EB03F8EB1FFF017F13C09038FC07F03901E001F848486C7E4848
-137C90C77E48141E000E141F001E80A3121FA27F5D01E0131E6C6C133E01FC133C6D5B6C
-6C6C5AECC1E06CEBF3C06C01FFC7FC6C5BEB3FFF6D13C081017F13F801F07F3903E07FFE
-3907801FFF48486C1380481303003E6D13C0003CEB007F007C143F0078EC0FE000F81407
-5A1503A21501A36C15C012781503007C15806CEC07006C5C6C6C131ED807E0137C3903F8
-03F0C6B55A013F1380D907FCC7FC233A7DB72A>I<EB03F8EB1FFF017F13C09038FC07E0
-3903F803F048486C7E48486C7E49137E121F48487FA2007F158090C7FCA248EC1FC0A616
-E0A56C143FA27F123F001F147FA26C6C13FF3907E001DF0003149F3801F0033900FC0F1F
-D93FFC13C0EB07F090C7FC153F1680A316005D000F147E487E486C5BA24A5A4A5A49485A
-6C48485A001C495A260F807FC7FC3807FFFC000113F038003FC0233A7DB72A>I<121C12
-7FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C092479A317>I<121C12
-7FEAFF80A5EA7F00121CC7FCB2121C127F5A1380A4127F121D1201A412031300A25A1206
-A2120E5A121812385A1260093479A317>I<007FB812F8B912FCA26C17F8CCFCAE007FB8
-12F8B912FCA26C17F836167B9F41>61 D<1538A3157CA315FEA34A7EA34A6C7EA202077F
-EC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A202C07F15
-01A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7121FA2496E7EA3496E
-7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7DBB3E>65
-D<B712E016FC16FF0001903980007FC06C90C7EA1FE0707E707E707EA2707EA283A75F16
-035F4C5A4C5A4C5A4C5AEEFF8091B500FCC7FCA291C7EA7F80EE1FE0EE07F0707E707E83
-707EA21880177F18C0A7188017FFA24C13005F16034C5AEE1FF8486DEB7FF0B812C094C7
-FC16F832397DB83B>I<913A01FF800180020FEBE003027F13F8903A01FF807E07903A03
-FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE153F12014848151F48
-48150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED0180A312
-3F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5CD91FE0
-5C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F13F002011380313D
-7BBA3C>I<B712C016F816FE000190398001FF806C90C7EA3FE0EE0FF0EE03F8707E707E
-177FA2EF3F8018C0171F18E0170F18F0A3EF07F8A418FCAC18F8A4EF0FF0A218E0A2171F
-18C0EF3F80A2EF7F0017FE4C5A4C5AEE0FF0EE3FE0486DEBFF80B8C7FC16F816C036397D
-B83F>I<B812FCA30001903880000F6C90C71201EE007E173E171E170EA31706A3170783
-16C0A394C7FCA31501A21503150F91B5FCA3EC000F15031501A21500A21860A318E093C7
-12C0A41701A3EF0380A21707A2170F173F177F486D903807FF00B9FCA333397DB839>I<
-B812F8A30001903880001F6C90C71201EE00FC177C173C171CA2170CA4170E1706A2ED01
-80A21700A41503A21507151F91B5FCA3EC001F15071503A21501A692C8FCAD4813C0B612
-C0A32F397DB836>I<DBFF8013C0020FEBF001023F13FC9139FF803F03903A03FC000787
-D90FF0EB03CF4948EB00EF4948147F4948143F49C8121F485A4848150F48481507A24848
-1503A2485A1701123F5B007F1600A448481600AB93B6FCA26C7E9338007FE0EF3FC0A212
-3F7F121FA26C7EA26C7EA26C7E6C7E6C6C157F6D7E6D6C14FF6D6C14EFD90FF8EB03C7D9
-03FEEB0783903A00FFC03F0191393FFFFC00020F01F0130002001380383D7CBA41>I<B6
-48B512FEA30001902680000313006C90C76C5AB3A491B6FCA391C71201B3A6486D497EB6
-48B512FEA337397DB83E>I<B612C0A3C6EBC0006D5AB3B3AD497EB612C0A31A397EB81E>
-I<013FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D87F005B
-0070131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B7DB82B>I<B649B5FC
-A3000101809038007FF06C90C8EA3F80053EC7FC173C17385F5F4C5A4C5A4CC8FC160E5E
-5E5E5E4B5AED0780030EC9FC5D153E157E15FF5C4A7F4A6C7E140E4A6C7E4A6C7E14704A
-6C7E4A6C7E14804A6C7E6F7EA26F7F707EA2707E707EA2707EA2707E707EA2707E707F84
-84486D497FB6011FEBFF80A339397DB841>I<B612E0A3000101C0C8FC6C90C9FCB3AD17
-18A517381730A31770A317F0A216011603160FEE1FE0486D13FFB8FCA32D397DB834>I<
-B5933807FFF86E5DA20001F0FC002600DFC0ED1BF8A2D9CFE01533A3D9C7F01563A3D9C3
-F815C3A2D9C1FCEC0183A3D9C0FEEC0303A2027F1406A36E6C130CA36E6C1318A26E6C13
-30A36E6C1360A26E6C13C0A3913901FC0180A3913900FE0300A2ED7F06A3ED3F8CA2ED1F
-D8A3ED0FF0A3486C6D5A487ED80FFC6D48497EB500C00203B512F8A2ED018045397DB84C
->I<B5913807FFFE8080C69238007FE06EEC1F80D9DFF0EC0F001706EBCFF8EBC7FCA2EB
-C3FEEBC1FFA201C07F6E7EA26E7E6E7E81140F6E7E8114036E7E168080ED7FC016E0153F
-ED1FF0ED0FF8A2ED07FCED03FEA2ED01FF6F1386A2EE7FC6EE3FE6A2EE1FF6EE0FFEA216
-071603A216011600A2177E486C153E487ED80FFC151EB500C0140EA2170637397DB83E>
-I<EC03FF021F13E09138FE01FC903901F8007ED907E0EB1F8049486D7ED93F80EB07F049
-C76C7E01FE6E7E48486E7E49157E0003167F4848ED3F80A24848ED1FC0A2001F17E04915
-0F003F17F0A3007F17F8491507A300FF17FCAC007F17F86D150FA3003F17F0A26C6CED1F
-E0A36C6CED3FC0000717806D157F000317006C6C15FEA26C6C4A5A017F4A5A6D6C495A6D
-6C495AD907E0EB1F80D903F8017FC7FC903900FE01FC91381FFFE0020390C8FC363D7BBA
-41>I<B712C016F816FE000190398001FF806C90C7EA3FC0EE0FE0EE07F0EE03F817FC17
-FE1601A217FFA717FEA2EE03FCA2EE07F817F0EE0FE0EE3FC0923801FF0091B512FC16F0
-91C9FCB3A5487FB6FCA330397DB839>I<B612FEEDFFE016F8000190388007FE6C90C76C
-7EEE3FC0707E707E707EA2707EA283A65FA24C5AA24C5A4C5AEE3F8004FFC8FCED07FC91
-B512E05E9138000FF0ED03F8ED00FE82707E707EA2161F83A583A6F00180A217F8160F18
-03486D01071400B66D6C5A04011306933800FE0ECAEA3FFCEF07F0393B7DB83D>82
-D<D90FF813C090383FFE0190B512813903F807E33907E000F74848137F4848133F48C712
-1F003E140F007E1407A2007C140312FC1501A36C1400A37E6D14006C7E7F13F86CB47E6C
-13F8ECFF806C14E06C14F86C14FEC680013F1480010714C0EB007F020713E0EC007FED3F
-F0151F150FED07F8A200C01403A21501A37EA216F07E15036C15E06C14076C15C06C140F
-6DEB1F80D8FBF0EB3F00D8F0FE13FE39E03FFFF8010F13E0D8C00190C7FC253D7CBA2E>
-I<003FB812E0A3D9C003EB001F273E0001FE130348EE01F00078160000701770A3006017
-30A400E01738481718A4C71600B3B0913807FF80011FB612E0A335397DB83C>I<B69038
-07FFFEA3000101809038007FE06C90C8EA1F80EF0F001706B3B2170E6D150C80171C133F
-17186D6C14385F6D6C14F06D6C5C6D6C495A6D6CEB07806D6C49C7FC91387F807E91381F
-FFF8020713E09138007F80373B7DB83E>I<B500FC91387FFF80A30003018091380FFC00
-6C90C8EA07E0715A6C705A6E1403017F93C7FCA280013F1506A26E140E011F150C80010F
-5DA28001075DA26E147001031560A26D6C5CA2806D4A5AA2ED8003027F91C8FCA291383F
-C006A215E0021F5BA2EDF01C020F1318A26E6C5AA215FC02035BA2EDFEE002015BA26E6C
-5AA36FC9FCA3153EA2151CA3393B7EB83E>I<B5D8FC07B5D8F001B5FCA3000790278000
-1FFEC7EA1FF86C48C7D80FF8EC07E000010307ED03C01B807F6C6F6C1500A26E5F017F6E
-6C1406A280013F4A6C5CA280011F4A6D5BEE067FA26D6C010E6D5BEE0C3FA26D6C011C6D
-5BEE181FA26D6C6F5BEE300FA26D6C6F485AEE6007A26D6C4CC7FC9338C003FCA203805D
-913B7F818001FE06A203C1150EDA3FC3C7EAFF0CA203E3151CDA1FE6EC7F98A215F6DA0F
-FCEC3FF0A302075E4B141FA202035E4B140FA202015E4B1407A2020093C8FC4B80503B7E
-B855>I<B500FE91383FFFE0A3000301E0913807FE00C649EC03F0017F6F5A606D6C5D6D
-6C140395C7FC6D6C1406A26D6C5C6D6C141C17186D6C143817306D6D5B6E6C13E05F9138
-3FE0015F91381FF003DA0FF890C8FC1606913807FC0E160C913803FE1C913801FF185E6E
-13B016E0157F6F5AB3A24B7E023FB512C0A33B397FB83E>89 D<EAFFF8A4EAF000B3B3B3
-B3A3EAFFF8A40D5378BD17>91 D<EAFFF8A4EA0078B3B3B3B3A3EAFFF8A40D537FBD17>
-93 D<13101338137C13FE487E3803C780380783C0380F01E0381E00F04813780070131C
-48130E00401304170D77B92A>I<EA01801203EA0700120E5A12181238123012701260A2
-12E05AA412CEEAFF8013C0A3127FA2EA3F80EA0E000A197AB917>96
-D<EB1FE0EBFFFC3803E03F3907000F80390F8007E0486C6C7E13E06E7EA26E7E6C5A6C5A
-C8FCA4147FEB07FFEB3FE0EBFE00EA03F8EA0FF0EA1FC0123F485A90C7FC160C12FEA314
-01A26C13036CEB077C903980063E18383FC01E3A0FE0781FF03A03FFF00FE03A007F8007
-C026277DA52A>I<EA03F012FFA3120F1203B0EC1FE0EC7FF89038F1E03E9039F3801F80
-9039F7000FC001FEEB07E049EB03F049EB01F85BED00FCA216FEA2167E167FAA167E16FE
-A216FC15016D14F8ED03F07F01EEEB07E001C6EB0FC09039C7801F00903881E07E903800
-FFF8C7EA1FC0283B7EB92E>I<EB03FC90381FFF8090387E03E03901F80070484813F839
-07E001FC380FC003A2EA1F80123F90380001F848EB00F01500A2127E12FEAA127E127FA2
-6C14067F001F140E6D130C000F141C6C6C13386C6C13706C6C13E039007C07C090381FFF
-00EB07F81F277DA525>I<ED0FC0EC03FFA3EC003F150FB0EB03F8EB1FFF90387E078F90
-38F801EF3903F0007F4848133F4848131FA24848130F123F90C7FC5AA2127E12FEAA127E
-127FA27EA26C6C131FA26C6C133F6C6C137F6C6CEBEFF03A01F801CFFF39007C078F9038
-1FFE0FD907F813C0283B7DB92E>I<EB07F8EB1FFF90387C0FC03901F803E03903F001F0
-D807E013F8380FC0004848137CA248C7127E153E5A153F127E12FEA3B7FCA248C8FCA512
-7EA2127FA26C14037F001F14076C6C13060007140E6D131CD801F013386C6C137090387E
-03E090381FFF80903803FC0020277EA525>I<147E903803FF8090380FC1E0EB1F879038
-3F0FF0137EA213FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387FFFF8A3
-1C3B7FBA19>I<ED03F090390FF00FF890393FFC3C3C9039F81F707C3901F00FE03903E0
-07C03A07C003E010000FECF000A248486C7EA86C6C485AA200075C6C6C485A6D485A6D48
-C7FC38073FFC38060FF0000EC9FCA4120FA213C06CB512C015F86C14FE6CECFF804815C0
-3A0F80007FE048C7EA0FF0003E140348140116F8481400A56C1401007C15F06CEC03E000
-3F1407D80F80EB0F80D807E0EB3F003901FC01FC39007FFFF0010790C7FC26387EA52A>
-I<EA03F012FFA3120F1203B0EC0FF0EC3FFCECF03F9039F1C01F809039F3800FC0EBF700
-13FE496D7EA25BA35BB3A3486C497EB500C1B51280A3293A7EB92E>I<EA0380EA0FE048
-7EA56C5AEA0380C8FCAAEA03F012FFA312071203B3AA487EB512C0A312387EB717>I<EB
-01C0EB07F0EB0FF8A5EB07F0EB01C090C7FCAAEB01F813FFA313071301B3B3A2123C127E
-00FF13F01303A214E038FE07C0127C383C0F00EA0FFEEA03F8154984B719>I<EA03F012
-FFA3120F1203B1913801FFFCA39138007FC01600157C15705D4A5A4A5A4AC7FC141E1438
-147814FC13F1EBF3FEEBF73F01FE7FEBF81F496C7E8114076E7E6E7E811400157E157F81
-1680ED1FC0486CEB3FF0B500C0B5FCA3283A7EB92C>I<EA03F012FFA3120F1203B3B3AD
-487EB512C0A3123A7EB917>I<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F01E07E
-903BF1C01F83803F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0FC0A249
-5CA3495CB3A3486C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00FF000FF
-EB3FFCECF03F9039F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3486C49
-7EB500C1B51280A329257EA42E>I<EB03FE90380FFF8090383E03E09038F800F8484813
-7C48487F48487F4848EB0F80001F15C090C712074815E0A2007EEC03F0A400FE15F8A900
-7E15F0A2007F14076C15E0A26C6CEB0FC0000F15806D131F6C6CEB3F006C6C137EC66C13
-F890387E03F090381FFFC0D903FEC7FC25277EA52A>I<3903F01FE000FFEB7FF89038F1
-E07E9039F3801F803A0FF7000FC0D803FEEB07E049EB03F04914F849130116FC150016FE
-A3167FAA16FEA3ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F009038
-F1E07E9038F0FFF8EC1FC091C8FCAB487EB512C0A328357EA42E>I<D903F813C090381F
-FE0190387E07819038FC01C33903F000E3000714774848133749133F001F141F485A150F
-48C7FCA312FEAA127FA37E6D131F121F6D133F120F6C6C137F6C6C13EF3901F801CF3900
-7E078F90381FFE0FEB07F890C7FCABED1FE00203B5FCA328357DA42C>I<3807E01F00FF
-EB7FC09038E1E3E09038E387F0380FE707EA03E613EE9038EC03E09038FC0080491300A4
-5BB3A2487EB512F0A31C257EA421>I<EBFF03000313E7380F80FF381E003F487F487F00
-707F12F0A2807EA27EB490C7FCEA7FE013FF6C13E06C13F86C7F00037FC67F01071380EB
-007F141F00C0EB0FC01407A26C1303A37E15806C13077EEC0F00B4131E38F3C07C38E1FF
-F038C03F801A277DA521>I<1318A51338A31378A313F8120112031207001FB5FCB6FCA2
-D801F8C7FCB215C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347FB220>
-I<D803F0EB07E000FFEB01FFA3000FEB001F00031407B3A4150FA3151F12016D133F0000
-EC77F86D9038E7FF8090383F03C790381FFF87903A03FC07E00029267EA42E>I<B53880
-3FFEA33A0FF8000FF06C48EB07E00003EC03C06D148000011500A26C6C1306A26D130E01
-7E130CA26D5BA2EC8038011F1330A26D6C5AA214E001075BA2903803F180A3D901FBC7FC
-A214FF6D5AA2147CA31438A227257EA32C>I<B53A1FFFE03FFEA3260FF8009038000FF8
-6C48017EEB03E018C00003023EEB0180A26C6C013FEB0300A36C6CEC8006156FA2017E90
-38EFC00C15C7A2D93F016D5A15830281EBF038D91F831430150102C3EBF87090260FC600
-1360A2D907E66D5A02EC137CA2D903FCEB7F804A133FA2010192C7FC4A7FA20100141E4A
-130E0260130C37257EA33C>I<B538807FFFA33A03FE003FF00001EC1F80000092C7FC01
-7E131C6D13186D6C5AECC070010F5B6D6C5AECF180EB03FB6DB4C8FC6D5AA2147F804A7E
-8114CF903801C7E090380383F090380703F8EB0601496C7E011C137E49137F01787F496D
-7E486C80000FEC3FF0D8FFFE90B51280A329247FA32C>I<B538803FFEA33A0FF8000FF0
-6C48EB07C00003EC03806C7E16007F00001406A2017E5BA2137F6D5BA26D6C5AA2ECC070
-010F1360A26D6C5AA214F101035BA2D901FBC7FCA214FF6D5AA2147CA31438A21430A214
-701460A25CA2EA7C0100FE5B130391C8FC1306EAFC0EEA701C6C5AEA1FF0EA0FC027357E
-A32C>I<003FB512FCA2EB8003D83E0013F8003CEB07F00038EB0FE012300070EB1FC0EC
-3F800060137F150014FE495AA2C6485A495AA2495A495A495AA290387F000613FEA2485A
-485A0007140E5B4848130C4848131CA24848133C48C7127C48EB03FC90B5FCA21F247EA3
-25>I<B81280A2290280962A>I<D801E01340D807F813E0390FFE01C0391FFF8780393C3F
-FF0038700FFE38E003FC384000F01B0879B62A>126 D<001C131C007F137F39FF80FF80
-A5397F007F00001C131C190978B72A>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: FA cmmi12 14.4 1
-/FA 1 73 df<020FB600E090B612FEA4DA00070180C8387FF8006F90C96C5A4C5F030717
-7F645EA2030F17FF645EA2031F5E99C7FC5EA2033F5E635EA2037F1607635EA203FF160F
-635EA24A171F6393C9FCA24A173F6393B8FCA25C6303FCC9127FA2020F17FF635DA2021F
-5E98C8FC5DA2023F5E625DA2027F1607625DA202FF160F625DA249171F6292C9FCA24917
-3F625CA20107177F625CA2010F17FFA2D93FFE03037F007FB60107B612F0B75BA24B5F5F
-527AD161>72 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: FB cmr12 14.4 30
-/FB 30 122 df<923803FFF0033F13FF4AB612E0020F9038003FFCDA3FF0EB03FFDAFFC0
-010013C0010390C8EA3FF0D907FCED0FF849486F7ED93FF06FB4FC49486F7F49486F7F48
-49707EA24890CA6C7E4848717EA24848717E001F85A2491707003F85A34848711380AB6C
-6C4D1300A4001F616D170FA2000F61A26C6C4D5AA20003616D173F6C616E167F6C61017F
-606E16FF013F95C7FC6D6C4B5AA2010F5F6D6C4B5AA26D6C4B5AA201015F6D6C4B5AA200
-E0017C93388001C06EED1F000070F10380021E151E021F153E6E153CA26C6E027CEB0700
-02071578A2003C010303705B003E616CB56C91B512FEA56C61A34A547BD355>10
-D<ED03FF033F13E04AB512F8913907FE01FC91391FE0003E4A48130F02FFC76C7E494814
-3F49484A7E494814FF130F5C495AA2715A49486EC7FC170C94C8FCAFEF3FC0B9FCA43A00
-3FC00001EE007F173FB3B3A4D9FFF0ECFFF0007F9026FFE07FEBFFE0A43B547ED341>12
-D<EB01F0EB03F81307130FA2131FEB3FF0EB7FE014C0EBFF80481300EA03FC5B485A485A
-485A5B48C7FC127C12785A1260151668D23B>19 D<120FEA3FC0EA7FE0EAFFF013F8A313
-FCA2127FEA3FDCEA0F1C1200A5133C1338A31378137013F0A2EA01E0A2EA03C0EA0780A2
-EA0F00121E5A5A12300E2376D221>39 D<15E01401EC03C0EC0780EC0F00141E5C147C5C
-495A13035C495A130F5C131F91C7FC133E137EA25BA2485AA25B1203A2485AA3120F5BA2
-121FA25BA2123FA290C8FCA35AA5127EA312FEB3A3127EA3127FA57EA37FA2121FA27FA2
-120FA27F1207A36C7EA212017FA26C7EA2137EA2133E7F80130F8013076D7E8013016D7E
-147C143C8080EC0780EC03C0EC01E014001B7974D92E>I<12E07E12787E7E7E6C7E7F6C
-7E6C7E7F1200137C137E133E133F7F6D7E80A26D7EA26D7EA2130180A26D7EA380147EA2
-147FA280A21580A2141FA315C0A5140FA315E0B3A315C0A3141FA51580A3143FA21500A2
-5CA2147EA214FE5CA3495AA25C1303A2495AA2495AA25C49C7FC5B133E137E137C5B1201
-5B485A485A5B48C8FC121E5A5A5A5A1B797AD92E>I<B612FEA71F077F9C27>45
-D<120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3FC0EA0F00C7FCB3A9120FEA3FC0EA7FE0EAFF
-F0A6EA7FE0EA3FC0EA0F000C3376B221>58 D<120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3F
-C0EA0F00C7FCB3A9120FEA3FC0127FEAFFE0A213F0A4127F123FEA0F701200A513F0A213
-E0A3120113C01203A213801207EA0F00A2121E5AA25A12300C4A76B221>I<EE03804C7E
-A34C7EA34C7EA34C7EA34C7EA24C7E16E7A203017F16C3A20303801681A2DB07017F82A2
-030E80177FA24B80173FA24B6D7EA20378800370130FA203F0804B1307A20201814B7FA2
-4A488183A24AC78083A2020E82187FA24A6F7E021FB7FC4A82A30278C8EA1FFC0270150F
-A202F0824A1507A249488284A249488384A249CA7FA24984010E177FA2011E84193F133E
-017F8448486C4C7E000F01E04B487EB500FE037FEBFFFEA44F557CD458>65
-D<BB1280A426007FFCC8123F6D48030313C0011F1600193F191F190F1907A21903A2F101
-E0A31900A6050E1470A41A00A3171EA3173E177E17FE160791B6FCA49138F80007160017
-7E173E171EA3170EA31A0EA31A1C94C8FCA41A3C1A38A31A78A31AF0A21901A21903A219
-07F10FE0193F19FF013F1603496C153FBBFC1AC0A347527BD150>69
-D<BA12FCA426007FFCC712016D489138001FFE011F160318011800197E193EA2191EA285
-A385A6F10380A2171CA296C7FCA5173CA3177C17FC1601160F91B6FCA49138F8000F1601
-1600177C173CA3171CA794C9FCB3497E49B4FCB712E0A441527BD14C>I<B500FC95B512
-FCA36E5FD8007FF2F800D93DFF943803BFF0011D62A2011C6DEE073FA36E6C160EA36E6C
-161CA26E6C1638A36E6C1670A36E6C16E0A36E6CED01C0A26E6CED0380A36E6DEC0700A3
-6F6C140EA36F6C5CA26F6C5CA36F6C5CA36F6C5CA26F6C495AA36F6C495AA36F6D48C7FC
-A393387FC00EA2706C5AA3706C5AA3706C5AA3706C5AA270B45AA3705BA3013E6E90C8FC
-137F496C4E7E000701F0027E4B7EB66C4BB612FC173CA35E527AD16B>77
-D<B500FC030FB512F8A28080D8003FDC007F13006D6DED0FF8735A011D6D6F5A011C6D6F
-5AA26E7E81143F6E7E81140F6E7E82806E7F82806F7E82153F6F7EA26F7E6F7EA26F7F83
-816F7F83167F707E83161F707E838270138018C0827013E0A2EF7FF0EF3FF8A2EF1FFC18
-FE170FEF07FF1981837113C119E183F07FF119F9183FF01FFD19FF8484A28484A284A219
-7F193F133E017F171F496C160F000713F0B66C15071903A219014D527BD158>I<EC0FFE
-91387FFFE049B512F8903907F801FE90391FE0001FD93F80EB078049C7EA0FC001FE143F
-484815E00003157F485A485AA2485AEE3FC0003FED0F004991C7FCA2127FA35B12FFAB12
-7F7FA3123F6D1570121F6D15F0000F16E06D140112076C6CEC03C06D15806C6C14076C6D
-EB0F00D93FC0131E6D6C137C903907FC03F06DB55AD9007F1380DA0FF8C7FC2C367CB434
->99 D<17FF4BB5FCA4ED0007160182B3A6EC0FF8EC7FFF49B512E0903907FC03F090391F
-E0007C49487F49C7120F01FE80484880485A000781484880A2485AA2485AA2127FA35B12
-FFAB127FA27FA2123FA27F121FA26C6C5C00075D7F6C6C5C6C6C5C6C6C021E7F6D6C017C
-13E0D91FC049EBFF8090390FF807E00103B512800100495ADA1FF091C7FC39547CD241>
-I<EC0FF891B5FC010314C090390FF80FF090391FC003FC90397F8001FE49C77E4848EC7F
-804848143F49EC1FC0485A000FED0FE05B001F16F01607485AA2007F16F8A25B160312FF
-90B7FCA30180C9FCA8127F7FA2123FA26D1538121F17786C6C1570000716F06D15E06C6C
-14016C6CEC03C06C6C15806D6C130F6D6CEB1F00D90FF0133C903907FE01F80101B512E0
-6D6C1380DA07FCC7FC2D367DB434>I<157F913803FFE0020F13F091383FC0F891387F01
-FC903901FE03FE903803FC0714F81307EB0FF0A290391FE003FCED01F892C7FC495AB3B6
-12FEA426003FC0C7FCB3B3A580EBFFF0007FEBFFF8A427547DD324>I<EF1FC0DA3FE0EB
-FFE0902701FFFC0313F001079039FF07E1F8903A1FE03FCF01903A3F800FFC03903A7F00
-07F80101FE010314F04848903901FC004000036F1300491300000781A24980000F82A800
-0793C7FC6D5CA200035D6D130100015D6C6C495A017F495A6E485A9039FFE03FC0D801C7
-B5C8FC01C113FC3903803FE091CAFCA57FA27F7F7F6CB612E016FF6C16C017F0013F15FC
-8390B8FCD803F8C7001F1380D80FE0020113C04848EC007F4848ED1FE090C9120F127EEF
-07F012FE481603A56C1607007E17E0007F160F6C6CED1FC06C6CED3F806C6CED7F006C6C
-15FED803FCEC03FCC6B4EC0FF0D93FF0EBFFC0010FB6C7FC010114F8D9001F1380354E7D
-B43B>I<1378EA01FE487E487FA66C90C7FC6C5AEA007890C8FCB0EB7F80B5FCA41203C6
-FC137FB3B3A43801FFE0B61280A419507CCF21>105 D<EB7F80B5FCA41203C6FC137FB3
-B3B3B13801FFE0B612C0A41A537CD221>108 D<01FFD907FEEC03FFB590261FFFC0010F
-13E0037F01F0013F13F8912701F80FFC9038FC07FE913D03C003FE01E001FF0003902607
-00019038038000C6010E6D6C48C76C7E6D48DA7F8E6E7E4A159CA24ADA3FF86E7E02605D
-14E04A5DA34A5DB3AD2601FFE0DAFFF0EC7FF8B6D8C07F9026FFE03FB512F0A45C347CB3
-63>I<01FFEB07FCB590383FFF8092B512E0913901F00FF8913903C007FC000349C66C7E
-C6010E13016D486D7E5C143002706E7E146014E05CA35CB3AD2601FFE0903801FFE0B600
-C0B612C0A43A347CB341>I<EC0FFC91387FFF8049B512E0903907F807F890391FE001FE
-90393F80007F017EC7EA1F80496E7E48486E7E00038248486E7EA248486E7EA248486E7E
-A2003F82A24848ED7F80A400FF17C0AB007F1780A26D15FFA2003F1700A2001F5E6D1401
-000F5E6D140300075E6C6C4A5A6C6C4A5AA2D8007FEC3F806D6C49C7FC90391FE001FE90
-3907F807F86DB55AD9007F1380DA0FFCC8FC32367CB43B>I<90397F8007FCB590387FFF
-800281B512E0913987F00FF891398F8003FC000390399E0001FFC601BC6D7FD97FF86E7E
-4A6E7E4A6E7E4A140F844A6E7EA2717EA3717EA4711380AB4D1300A44D5AA24D5AA2606E
-140F4D5A6E5D6E4A5A6E4A5A02BC4AC7FC029E495A028FEB07FC913987E01FF00281B512
-C0DA807F90C8FCED0FF892CAFCB13801FFE0B612C0A4394B7DB341>I<01FFEB1F80B5EB
-7FF0913801FFF8913803E1FC91380783FE0003EB0F07C6131EEB7F1C1438143091387003
-FC91386000F0160014E05CA45CB3AA8048487EB612F0A427347DB32E>114
-D<D907FE13C090387FFF8148B512E33907F803FF390FC0007F4848133F48C7121F003E14
-0F007E1407127C00FC1403A315017EA27E7F6C6C90C7FC13F013FF6C13F86CEBFF806C14
-E06C14F86C14FEC680013F1480010714C0D9003F13E014039138007FF0151F00E0140FED
-07F8A26C1403A215017EA36C15F0A26C14036C15E015076DEB0FC06DEB1F80D8FDF0EB3F
-0039F8FC01FE39F07FFFF8D8E01F13E0D8C00390C7FC25367CB42E>I<EB01C0A71303A4
-1307A3130FA2131FA2133F137F13FF5A5A001F90B512E0B7FCA326003FC0C7FCB3A71638
-AC6E1378011F1470A26D6C13F016E0903807F801903903FC03C0903901FE07806DB51200
-EC3FFCEC07F0254B7EC92E>I<D97F80EC7F80B591B5FCA400031503C61500017F157FB3
-AC17FFA35EA3013F5C6EEB077FA2011F020E7F6D6C011C13F06E0178EBFFC0903903FC01
-F06DB512E06D6C1380912607FC00EB80003A357CB341>I<B60103B51280A4000301F090
-39007FF800C601C0EC3FE0017FED1F8095C7FC133F6E141E131F171C6E143C010F153880
-01075DA26E14F001035D8001014A5AA26E13036D5D1580027F49C8FCA26F5A023F130E15
-E0021F5BA2EDF03C020F133815F802075BA2EDFCF002035B15FE6E6C5AA36E5BA26FC9FC
-A3153EA2151CA2153C153815781570A215F05D14015DA2003E495A127F486C48CAFCA214
-0E141E495A6C5B007C5B383F03E06CB45A00075BD801FCCBFC394B7EB23E>121
-D E
-%EndDVIPSBitmapFont
-end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
-
-%%EndSetup
-%%Page: 1 1
-1 0 bop 1162 531 a FB(An)39 b FA(H)9 b FB(\(curl)o(;)20
-b(\012\)-conforming)34 b(FEM:)1200 680 y(N)m(\023)-55
-b(ed)m(\023)g(elec's)36 b(elemen)m(ts)h(of)h(\014rst)g(t)m(yp)s(e)1446
-933 y Fz(Anna)27 b(Sc)n(hneeb)r(eli,)h(Ma)n(y)f(2,)g(2003)28
-1223 y Fy(Abstract:)35 b Fz(The)23 b(aim)f(of)h(this)g(rep)r(ort)e(is)i
-(to)f(giv)n(e)g(an)h(in)n(tro)r(duction)f(to)g(N)n(\023)-39
-b(ed)n(\023)g(elec's)21 b Fx(H)7 b Fz(\(curl;)14 b(\012\)-conforming)21
-b(\014nite)i(elemen)n(t)28 1322 y(metho)r(d)j(of)g(\014rst)f(t)n(yp)r
-(e.)36 b(As)26 b(the)g(name)g(suggests,)f(this)h(metho)r(d)g(has)f(b)r
-(een)h(in)n(tro)r(duced)g(in)g(1980)e(b)n(y)h(J.)h(C.)g(N)n(\023)-39
-b(ed)n(\023)g(elec)24 b(in)i([8)o(].)28 1422 y(In)c(the)g(\014rst)g
-(section,)g(w)n(e)g(presen)n(t)f(the)h(mo)r(del)g(problem)g(and)g(in)n
-(tro)r(duce)f(the)h(framew)n(ork)e(for)i(its)g(v)-5 b(ariational)20
-b(form)n(ulation.)28 1522 y(In)26 b(the)h(second)f(section,)h(w)n(e)f
-(presen)n(t)g(N)n(\023)-39 b(ed)n(\023)g(elec's)24 b(elemen)n(ts)j(of)f
-(\014rst)g(t)n(yp)r(e)h(for)f Fx(H)7 b Fz(\(curl;)14
-b(\012\).)37 b(W)-7 b(e)26 b(start)g(b)n(y)h(considering)e(the)28
-1621 y(case)d(of)i(a\016ne)f(grids)g(in)h(t)n(w)n(o)f(and)g(three)h
-(space)f(dimensions.)35 b(W)-7 b(e)24 b(in)n(tro)r(duce)f(the)h(Piola)f
-(transformation)f(for)h(v)n(ector)f(\014elds)28 1721
-y(and)33 b(discuss)f(the)i(c)n(hoice)e(of)h(function)h(spaces)e(and)h
-(degrees)f(of)h(freedom.)53 b(These)33 b(results)f(are)g(then)i
-(extendend)f(to)g(bi-)28 1821 y(and)26 b(trilinear)f(grids.)36
-b(W)-7 b(e)26 b(explain)g(the)h(practical)e(construction)h(of)g(global)
-f(shap)r(e)h(functions)h(and)f(conclude)g(this)h(section)28
-1920 y(with)h(some)f(remarks)f(on)h(appro)n(ximation)f(results.)28
-2020 y(Numerical)e(results,)g(whic)n(h)h(serv)n(e)e(to)i(illustrate)f
-(the)h(con)n(v)n(ergence)d(of)j(the)g(metho)r(d,)g(are)f(presen)n(ted)g
-(in)h(the)g(third)g(section.)28 2119 y(In)35 b(App)r(endix)i(A,)f(w)n
-(e)f(demonstrate)g(ho)n(w)g(solutions)f(of)i(the)g(t)n(w)n
-(o-dimensional)e(mo)r(del)i(problem)f(can)g(b)r(e)h(constructed)28
-2219 y(from)27 b(solutions)g(of)g(the)h(scalar)e(Laplace)h(equation.)28
-2319 y(In)40 b(App)r(endix)g(B)g(w)n(e)f(motiv)-5 b(ate)40
-b(the)g(mo)r(del)g(problem)g(studied)g(in)g(the)g(rep)r(ort)f(b)n(y)h
-(considering)e(the)i(time-harmonic)28 2418 y(Maxw)n(ell's)26
-b(equations)h(in)h(the)g(lo)n(w-frequency)e(case.)28
-2653 y Fw(1)134 b Fv(The)38 b(mo)s(del)e(problem)h(and)h(the)g(space)g
-Fu(H)8 b Ft(\(curl)o(;)17 b(\012\))28 2835 y Fz(Consider)26
-b(the)i(v)n(ector-v)-5 b(alued)26 b(mo)r(del)i(problem)f(in)h(a)f
-(Lipsc)n(hitz)g(domain)h(\012)23 b Fs(2)g Fr(R)2628 2805
-y Fq(d)2673 2835 y Fz(,)k Fx(d)d Fz(=)e(2)p Fx(;)14 b
-Fz(3:)1424 2980 y(curl)f(curl)g Fx(u)p 1728 2993 48 4
-v 18 w Fz(+)18 b Fx(c)p Fz(\()p Fx(x)p Fz(\))p Fx(u)p
-2024 2993 V 24 w Fz(=)23 b Fx(f)p 2184 3009 50 4 v 91
-w Fz(in)83 b(\012)14 b Fx(;)1290 b Fz(\(1\))28 3136 y(with)28
-b(righ)n(t)f(hand)g(side)h Fx(f)p 792 3166 V 31 w Fs(2)c
-Fx(L)1000 3106 y Fp(2)1036 3136 y Fz(\(\012\))1160 3106
-y Fq(d)1200 3136 y Fz(.)28 3236 y(W)-7 b(e)28 b(assume)e(a)i
-(homogeneous)d(Diric)n(hlet)j(b)r(oundary)f(condition)g(on)h(the)g
-(tangen)n(tial)e(trace)1824 3381 y Fx(u)p 1824 3394 48
-4 v 17 w Fs(^)19 b Fx(n)p 1963 3394 50 4 v 23 w Fz(=)k(0)1689
-b(\(2\))28 3526 y(on)27 b(the)h(b)r(oundary)f Fx(@)5
-b Fz(\012)27 b(of)h(\012.)28 3625 y(The)f(co)r(e\016cien)n(t)h
-Fx(c)p Fz(\()p Fx(x)p Fz(\))g(is)g(assumed)f(to)g(b)r(e)h(b)r(ounded)g
-(and)g(uniform)f(p)r(ositiv)n(e)g(de\014nite.)28 3725
-y(This)i(t)n(yp)r(e)g(of)g(problem)f(t)n(ypically)h(arises)e(in)j
-(particular)d(settings)i(of)g(Maxw)n(ell`s)f(equations.)40
-b(The)29 b(b)r(oundary)g(condition)28 3825 y(\(2\))36
-b(then)g(applies)f(to)h(a)f(p)r(erfectly)h(conducting)g(b)r(oundary)-7
-b(.)61 b(F)-7 b(or)35 b(a)g(deriv)-5 b(ation)35 b(of)h(the)g(mo)r(del)g
-(problem)f(\(1\),)j(refer)d(to)28 3924 y(App)r(endix)28
-b(B.)28 4123 y(The)f(sub)5 b(ject)28 b(of)g(this)f(section)h(is)f(to)h
-(giv)n(e)e(an)i(appropriate)d(setting)j(for)f(a)g(v)-5
-b(ariational)26 b(form)n(ulation)h(of)g(\(1\).)28 4223
-y(A)h(more)e(detailed)i(treatmen)n(t)f(of)h(the)g(follo)n(wing)e
-(notions)h(and)h(pro)r(ofs)f(can)g(b)r(e)h(found)g(in)g([4)o(].)28
-4446 y Fv(1.1)112 b Fo(De\014nitions)28 4599 y Fn(Convention)27
-b Fz(1)45 b Fm(In)26 b(the)h(fol)t(lowing,)j(the)d(ve)l(ctor)g
-Fx(t)p 1629 4612 30 4 v 27 w Fm(wil)t(l)h(denote)f(the)g(unit)e
-(tangent)h(ve)l(ctor)h(w.)h(r.)f(t.)37 b(an)27 b(e)l(dge)g(of)g(a)g
-(triangle)28 4699 y(or)38 b(quadrilater)l(al,)44 b(oriente)l(d)39
-b(c)l(ounter)l(clo)l(ckwise)g(with)g(r)l(esp)l(e)l(ct)g(to)f(the)h(c)l
-(orr)l(esp)l(onding)h(triangle)f(or)g(quadrilater)l(al.)67
-b(\(In)28 4798 y(3d,)36 b(the)f(c)l(onsider)l(e)l(d)g(triangles)g(or)g
-(quadrilater)l(als)h(wil)t(l)g(always)g(b)l(e)e(fac)l(es)h(of)h(a)e(p)l
-(olyhe)l(dr)l(on,)k(and)d(the)f(c)l(ounter)l(clo)l(ckwise)28
-4898 y(orientation)c(has)h(to)e(b)l(e)h(understo)l(o)l(d)g(as)g(induc)l
-(e)l(d)g(by)h("outwar)l(d)e(unit)g(normal)i(of)f(the)g(fac)l(e,)h(plus)
-f(right)h(hand)f(rule")g(\).)28 5101 y Fz(Let)f(us)h(\014rst)f
-(consider)f(the)i(case)f(of)g Fx(d)d Fz(=)g(2.)42 b(F)-7
-b(or)29 b Fx(v)p 1622 5114 44 4 v 29 w Fz(=)1782 4984
-y Fl(\022)1885 5051 y Fx(v)1925 5063 y Fp(1)1962 5051
-y Fz(\()p Fx(x;)14 b(y)s Fz(\))1885 5150 y Fx(v)1925
-5162 y Fp(2)1962 5150 y Fz(\()p Fx(x;)g(y)s Fz(\))2196
-4984 y Fl(\023)2284 5101 y Fs(2)26 b Fz([)p Fs(D)r Fz(\()p
-2486 5035 60 4 v(\012)q(\)])2602 5071 y Fp(2)2669 5101
-y Fz(and)j Fx(')e Fs(2)f(D)r Fz(\()p 3092 5035 V(\012)q(\))k(w)n(e)f
-(de\014ne)g(the)h(scalar-)28 5246 y(and)d(the)h(v)n(ector-v)-5
-b(alued)26 b(curl-op)r(erators:)1059 5436 y(curl)14 b
-Fx(v)p 1212 5449 44 4 v 26 w Fz(:=)23 b Fx(@)1433 5448
-y Fq(x)1474 5436 y Fx(v)1514 5448 y Fp(2)1570 5436 y
-Fs(\000)18 b Fx(@)1697 5448 y Fq(y)1737 5436 y Fx(v)1777
-5448 y Fp(1)1898 5436 y Fz(and)96 b(curl)p 2128 5449
-139 4 v 14 w Fx(')23 b Fz(:=)2469 5319 y Fl(\022)2605
-5386 y Fx(@)2649 5398 y Fq(y)2689 5386 y Fx(')2572 5485
-y Fs(\000)p Fx(@)2681 5497 y Fq(x)2722 5485 y Fx(')2818
-5319 y Fl(\023)2907 5436 y Fx(:)1972 5719 y Fk(1)p eop
-%%Page: 2 2
-2 1 bop 28 207 a Fz(W)-7 b(e)28 b(note)f(that)h(the)g(curl)13
-b(curl-op)r(erator)25 b(in)j(t)n(w)n(o)f(dimensions)g(has)g(to)h(b)r(e)
-g(understo)r(o)r(d)f(as)g(curl)p 2909 220 139 4 v 14
-w(curl)o(.)28 462 y Fn(Remark)h Fz(1)45 b Fm(In)38 b(the)h(two)f
-(dimensional)j(c)l(ase,)g(the)e Fz(curl)f Fm(op)l(er)l(ator)i(is)f
-(simply)g(the)g(diver)l(genc)l(e)h(of)f(the)g(r)l(otate)l(d)g(\014eld)g
-Fx(v)p 3893 475 44 4 v 3 w Fm(.)28 561 y(Similarly,)31
-b(the)f Fz(curl)p 546 574 139 4 v 30 w Fm(op)l(er)l(ator)g(is)g(the)g
-(r)l(otate)l(d)g(gr)l(adient)h(\014eld)f(of)g Fx(')p
-Fm(.)39 b(Setting)1659 770 y Fj(R)24 b Fz(=)1843 653
-y Fl(\022)1978 720 y Fz(0)115 b(1)1945 819 y Fs(\000)p
-Fz(1)83 b(0)2218 653 y Fl(\023)2306 770 y Fx(;)28 979
-y Fm(we)30 b(have)1687 1079 y Fz(curl)13 b Fx(v)p 1839
-1092 44 4 v 27 w Fz(=)22 b(div)15 b(\()q Fj(R)p Fx(v)p
-2226 1092 V 4 w Fz(\))28 1216 y Fm(and)1719 1316 y Fz(curl)p
-1719 1329 139 4 v 14 w Fx(')23 b Fz(=)g Fj(R)p Fs(r)p
-Fx(')14 b(:)28 1454 y Fm(We)26 b(further)g(note)g(that)h(the)f
-(tangential)h(ve)l(ctor)f Fx(t)p 1555 1467 30 4 v 27
-w Fm(is)g(just)g(the)g(r)l(otate)l(d)h(outwar)l(d)f(unit)g(normal)h(ve)
-l(ctor)f Fx(t)p 3268 1467 V 23 w Fz(=)d Fj(R)3482 1417
-y Fq(T)3534 1454 y Fx(n)p 3534 1467 50 4 v Fm(.)37 b(This)28
-b(wil)t(l)28 1554 y(enable)35 b(us)f(to)g(derive)i(statements)d(for)j
-(the)e Fz(curl)p Fm(-op)l(er)l(ators)h(in)g(two)f(dimensions)i(fr)l(om)
-f(statements)e(for)i(the)g(diver)l(genc)l(e)28 1653 y(and)30
-b(gr)l(adient)g(op)l(er)l(ators)h(in)f(two)g(dimensions.)28
-1808 y Fz(F)-7 b(or)27 b(the)h(case)e(of)i Fx(d)23 b
-Fz(=)g(3)k(and)g(a)h(v)n(ector)e(\014eld)i Fx(v)p 1473
-1821 44 4 v 26 w Fs(2)23 b Fz([)p Fs(D)r Fz(\()p 1738
-1742 60 4 v(\012)q(\)])1854 1778 y Fp(3)1919 1808 y Fz(w)n(e)28
-b(write)1333 2071 y(curl)14 b Fx(v)p 1486 2084 44 4 v
-26 w Fz(:=)23 b Fs(r)18 b(^)h Fx(v)p 1824 2084 V 26 w
-Fz(:=)2001 1904 y Fl(0)2001 2054 y(@)2117 1971 y Fx(@)2161
-1983 y Fq(y)2201 1971 y Fx(v)2241 1983 y Fp(3)2297 1971
-y Fs(\000)f Fx(@)2424 1983 y Fq(z)2462 1971 y Fx(v)2502
-1983 y Fp(2)2116 2070 y Fx(@)2160 2082 y Fq(z)2198 2070
-y Fx(v)2238 2082 y Fp(1)2294 2070 y Fs(\000)g Fx(@)2421
-2082 y Fq(x)2463 2070 y Fx(v)2503 2082 y Fp(3)2115 2170
-y Fx(@)2159 2182 y Fq(x)2201 2170 y Fx(v)2241 2182 y
-Fp(2)2297 2170 y Fs(\000)g Fx(@)2424 2182 y Fq(y)2464
-2170 y Fx(v)2504 2182 y Fp(1)2583 1904 y Fl(1)2583 2054
-y(A)28 2349 y Fn(Definition)28 b Fz(1)45 b Fm(F)-6 b(or)30
-b Fx(d)23 b Fz(=)g(2)p Fx(;)14 b Fz(3)28 b Fm(we)i(write)1388
-2327 y Fz(~)1373 2349 y Fx(d)24 b Fz(=)e(1)30 b Fm(if)g
-Fx(d)23 b Fz(=)g(2)29 b Fm(and)2080 2327 y Fz(~)2066
-2349 y Fx(d)23 b Fz(=)f(3)30 b Fm(if)g Fx(d)24 b Fz(=)e(3)p
-Fm(,)30 b(and)g(we)g(de\014ne)1140 2526 y Fx(H)7 b Fz(\(curl)o(;)14
-b(\012\))23 b(:=)g Fs(f)p Fx(v)p 1691 2539 V 26 w Fs(2)g
-Fz([)p Fx(L)1915 2492 y Fp(2)1952 2526 y Fz(\(\012\)])2099
-2492 y Fq(d)2161 2526 y Fz(:)h(curl)13 b Fx(v)p 2360
-2539 V 26 w Fs(2)24 b Fz([)p Fx(L)2585 2492 y Fp(2)2621
-2526 y Fz(\(\012\)])2779 2476 y Fp(~)2768 2492 y Fq(d)2808
-2526 y Fs(g)28 2689 y Fx(H)7 b Fz(\(curl)o(;)14 b(\012\))28
-b(endo)n(w)n(ed)f(with)h(the)g(inner)f(pro)r(duct)1109
-2853 y(\()p Fx(v)p 1141 2866 V 3 w(;)14 b(u)p 1221 2866
-48 4 v Fz(\))1301 2868 y Fq(H)t Fp(\(curl;\012\))1616
-2853 y Fz(:=)23 b(\()p Fx(v)p 1759 2866 44 4 v 3 w(;)14
-b(u)p 1839 2866 48 4 v Fz(\))1919 2868 y Fq(L)1965 2851
-y Fi(2)1997 2868 y Fp(\(\012\))2119 2853 y Fz(+)k(\(curl)13
-b Fx(v)p 2386 2866 44 4 v 4 w(;)h Fz(curl)f Fx(u)p 2619
-2866 48 4 v -1 w Fz(\))2698 2868 y Fq(L)2744 2851 y Fi(2)2777
-2868 y Fp(\(\012\))28 3016 y Fz(is)27 b(a)g(Hilb)r(ert)h(space.)28
-3342 y Fv(1.2)112 b Fo(T)-9 b(race)35 b(theorem,)f(in)m(tegration)h(b)m
-(y)g(parts)28 3495 y Fz(The)e(space)g Fx(H)7 b Fz(\(curl)o(;)14
-b(\012\))34 b(will)f(b)r(e)h(the)g(appropriate)d(Sob)r(olev)i(space)g
-(for)g(a)g(w)n(eak)f(form)n(ulation)g(of)i(the)f(mo)r(del)h(problem.)28
-3594 y(In)g(this)g(section)g(w)n(e)f(pro)n(vide)g(a)h(notion)f(of)h
-(trace)g(of)f(a)h Fx(H)7 b Fz(\(curl;)14 b(\012\)-function)34
-b(on)n(to)f(the)i(b)r(oundary)e Fx(@)5 b Fz(\012)34 b(and)f(w)n(e)h
-(de\014ne)28 3694 y(in)n(tergation)26 b(b)n(y)h(parts)g(on)g(the)h
-(space)f Fx(H)7 b Fz(\(curl;)14 b(\012\).)28 3870 y Fn(Theorem)28
-b Fz(1)f(\(Appro)n(ximation)g(Prop)r(ert)n(y\))44 b Fm(F)-6
-b(or)30 b Fx(d)23 b Fz(=)g(2)p Fx(;)14 b Fz(3)p Fm(,)29
-b Fz([)p Fs(D)r Fz(\()p 2110 3803 60 4 v(\012\)])2225
-3840 y Fq(d)2294 3870 y Fm(is)h(dense)g(in)g Fx(H)7 b
-Fz(\(curl;)14 b(\012\))p Fm(.)28 4046 y Fz(See)27 b([4)o(])h(p.13,)e
-(p.20)h(for)f(the)i(pro)r(of)f(in)g(the)h(2d-case)d(and)i(p.20)g(for)f
-(a)h(reference)f(to)h(the)h(pro)r(of)f(in)g(3d)g(prop)r(osed)f(in)i
-(Duv)-5 b(aut)28 4146 y(&)27 b(Lions,)g(1971.)28 4345
-y(Equipp)r(ed)g(with)h(this)g(appro)n(ximation)e(prop)r(ert)n(y)h(of)g
-(smo)r(oth)g(functions)h(to)g(elemen)n(ts)f(of)h Fx(H)7
-b Fz(\(curl)o(;)14 b(\012\),)28 b(w)n(e)g(can)f(state)28
-4521 y Fn(Theorem)h Fz(2)f(\(Green's)g(F)-7 b(orm)n(ula\))45
-b Fm(F)-6 b(or)29 b(the)g(2d)h(c)l(ase,)g(let)f Fx(u)p
-1932 4534 48 4 v 29 w Fm(b)l(e)g(in)g Fz([)p Fx(H)7 b
-Fz(\(curl)o(;)14 b(\012\)])2632 4491 y Fp(2)2699 4521
-y Fm(and)29 b Fx(')h Fm(b)l(e)f(a)g(test)f(function)h(in)g
-Fx(H)3774 4491 y Fp(1)3811 4521 y Fz(\(\012\))p Fm(.)28
-4621 y(We)g(have)1102 4629 y Fl(Z)1148 4818 y Fp(\012)1214
-4742 y Fz(curl)13 b Fx(u)p 1366 4755 V 27 w(')h(dx)24
-b Fz(=)1711 4629 y Fl(Z)1757 4818 y Fp(\012)1822 4742
-y Fx(u)p 1822 4755 V 18 w Fs(\001)19 b Fz(curl)p 1930
-4755 139 4 v 13 w Fx(')14 b(dx)19 b Fz(+)2342 4629 y
-Fl(Z)2389 4818 y Fq(@)t Fp(\012)2479 4742 y Fz(\()p Fx(u)p
-2511 4755 48 4 v 18 w Fs(\001)g Fx(t)p 2619 4755 30 4
-v Fz(\))14 b Fx(')g(ds)19 b(;)28 4932 y Fm(F)-6 b(or)30
-b(the)f(3d)i(c)l(ase,)g(let)e Fx(u)p 755 4945 48 4 v
-30 w Fm(b)l(e)g(in)h Fz([)p Fx(H)7 b Fz(\(curl;)14 b(\012\)])1458
-4902 y Fp(3)1525 4932 y Fm(and)30 b Fx(v)p 1686 4945
-44 4 v 33 w Fm(b)l(e)g(a)g(test)f(function)h(in)g Fz([)p
-Fx(H)2618 4902 y Fp(1)2655 4932 y Fz(\(\012\)])2802 4902
-y Fp(3)2840 4932 y Fm(.)38 b(We)30 b(then)g(have)1053
-5025 y Fl(Z)1100 5213 y Fp(\012)1165 5138 y Fx(v)p 1165
-5151 V 22 w Fs(\001)18 b Fz(curl)c Fx(u)p 1421 5151 48
-4 v 13 w(dx)24 b Fz(=)1683 5025 y Fl(Z)1729 5213 y Fp(\012)1795
-5138 y Fx(u)p 1795 5151 V 18 w Fs(\001)18 b Fz(curl)c
-Fx(v)p 2055 5151 44 4 v 17 w(dx)19 b Fz(+)2304 5025 y
-Fl(Z)2350 5213 y Fq(@)t Fp(\012)2441 5138 y Fz(\()p Fx(v)p
-2473 5151 V 22 w Fs(^)f Fx(n)p 2608 5151 50 4 v Fz(\))h
-Fs(\001)f Fx(u)p 2750 5151 48 4 v 14 w(ds)g(;)28 5370
-y Fm(The)30 b(b)l(oundary)h(inte)l(gr)l(als)f(ar)l(e)g(understo)l(o)l
-(d)g(as)g(duality)g(p)l(airings)i(in)d Fz([)p Fx(H)2338
-5340 y Fh(\000)2400 5317 y Fi(1)p 2400 5326 29 3 v 2400
-5360 a(2)2442 5370 y Fz(\()p Fx(@)5 b Fz(\012\)])2649
-5324 y Fp(~)2638 5340 y Fq(d)2696 5370 y Fs(\002)18 b
-Fx(H)2865 5317 y Fi(1)p 2865 5326 V 2865 5360 a(2)2907
-5370 y Fz(\()p Fx(@)5 b Fz(\012\))30 b Fm(.)1972 5719
-y Fk(2)p eop
-%%Page: 3 3
-3 2 bop 28 207 a Fn(Pr)n(oof.)55 b Fz(F)-7 b(or)32 b(smo)r(oth)g
-(functions,)i(it)f(is)f(easy)g(to)g(see)g(that)h(the)g(ab)r(o)n(v)n(e)e
-(Green's)g(form)n(ula)h(holds.)51 b(In)33 b(the)f(2d)g(case)g(this)28
-307 y(follo)n(ws)26 b(just)i(from)g(Gauss')f(div)n(ergence)f(theorem)h
-(and)g(remark)f(1.)28 406 y(F)-7 b(or)27 b(the)h(3d)f(case)g(w)n(e)g
-(use)g(the)h(iden)n(tit)n(y)1397 563 y(div)15 b(\()p
-Fx(u)p 1557 576 48 4 v 19 w Fs(^)j Fx(v)p 1697 576 44
-4 v 4 w Fz(\))23 b(=)g Fx(v)p 1884 576 V 21 w Fs(\001)c
-Fz(curl)13 b Fx(u)p 2139 576 48 4 v 18 w Fs(\000)18 b
-Fx(u)p 2288 576 V 18 w Fs(\001)h Fz(curl)13 b Fx(v)p
-2548 576 44 4 v 28 719 a Fz(together)26 b(with)i(Gauss')f(Div)n
-(ergence)g(Theorem)g(and)g(the)h(prop)r(erties)f(of)g(the)h(mixed)g
-(pro)r(duct)g(\()p Fx(a)p 3111 732 V 18 w Fs(^)19 b Fx(b)p
-3247 732 36 4 v Fz(\))f Fs(\001)h Fx(c)p 3375 732 V 27
-w Fz(to)28 b(obtain)455 805 y Fl(Z)501 994 y Fp(\012)567
-918 y Fx(v)p 567 931 44 4 v 21 w Fs(\001)19 b Fz(curl)13
-b Fx(u)p 822 931 48 4 v 18 w Fs(\000)18 b Fx(u)p 971
-931 V 18 w Fs(\001)h Fz(curl)13 b Fx(v)p 1231 931 44
-4 v 17 w(dx)24 b Fz(=)1490 805 y Fl(Z)1536 994 y Fp(\012)1601
-918 y Fz(div)15 b(\()p Fx(u)p 1761 931 48 4 v 19 w Fs(^)j
-Fx(v)p 1901 931 44 4 v 4 w Fz(\))c Fx(dx)23 b Fz(=)2192
-805 y Fl(Z)2238 994 y Fq(@)t Fp(\012)2329 918 y Fz(\()p
-Fx(u)p 2361 931 48 4 v 18 w Fs(^)c Fx(v)p 2501 931 44
-4 v 3 w Fz(\))g Fs(\001)f Fx(n)p 2636 931 50 4 v 14 w(ds)23
-b Fz(=)2893 805 y Fl(Z)2939 994 y Fq(@)t Fp(\012)3029
-918 y Fz(\()p Fx(v)p 3061 931 44 4 v 22 w Fs(^)c Fx(n)p
-3197 931 50 4 v Fz(\))g Fs(\001)f Fx(u)p 3339 931 48
-4 v 14 w(ds)27 b(:)28 1127 y Fz(The)k(exten)n(tion)g(to)g(a)g(pairing)g
-(of)g Fx(H)7 b Fz(\(curl\))31 b(and)h Fx(H)1684 1097
-y Fp(1)1721 1127 y Fz(\(\012\))g(functions)f(follo)n(ws)g(with)h
-(Theorem)e(1)h(b)n(y)g(a)g(densit)n(y)g(argumen)n(t)28
-1226 y(and)c(is)g(a)h(result)f(of)h(the)g(pro)r(of)f(of)g(the)h(T)-7
-b(race)27 b(Theorem.)36 b(See)27 b([4])h(p.21)e(for)i(details.)3897
-1375 y Fg(\003)28 1543 y Fn(Theorem)g Fz(3)f(\(T)-7 b(race)27
-b(Theorem\))45 b Fm(F)-6 b(or)36 b Fx(d)g Fz(=)f(3)p
-Fm(,)k(let)d Fx(n)p 1729 1556 50 4 v 36 w Fm(denote)i(the)e(outwar)l(d)
-h(unit)f(normal)h(to)g(the)g(b)l(oundary)g Fx(@)5 b Fz(\012)p
-Fm(.)59 b(F)-6 b(or)28 1642 y Fx(d)23 b Fz(=)f(2)p Fm(,)30
-b(let)g Fx(t)p 395 1655 30 4 v 30 w Fm(b)l(e)f(as)h(in)g(c)l(onvention)
-g(1)28 1742 y(F)-6 b(or)30 b Fx(d)23 b Fz(=)f(2)30 b
-Fm(the)g(mapping)1685 1841 y Fx(\015)d Fz(:)108 b Fx(v)p
-1886 1854 44 4 v 27 w Fs(7!)23 b Fx(\015)5 b Fz(\()p
-Fx(v)p 2139 1854 V 3 w Fz(\))19 b Fs(\001)f Fx(t)p 2274
-1854 30 4 v 28 1975 a Fm(and)30 b(for)g Fx(d)24 b Fz(=)e(3)30
-b Fm(the)f(mapping)1659 2075 y Fx(\015)e Fz(:)108 b Fx(v)p
-1860 2088 44 4 v 27 w Fs(7!)23 b Fx(\015)5 b Fz(\()p
-Fx(v)p 2113 2088 V 3 w Fz(\))19 b Fs(^)f Fx(n)p 2280
-2088 50 4 v 28 2223 a Fm(is)30 b(c)l(ontiuous)f(and)h(line)l(ar)h(fr)l
-(om)f Fx(H)7 b Fz(\(curl;)14 b(\012\))29 b Fm(to)h Fz([)p
-Fx(H)1684 2193 y Fh(\000)1746 2170 y Fi(1)p 1746 2179
-29 3 v 1746 2213 a(2)1788 2223 y Fz(\()p Fx(@)5 b Fz(\012\)])1995
-2177 y Fp(~)1984 2193 y Fq(d)2023 2223 y Fm(.)28 2391
-y Fz(Note,)31 b(that)g(the)g(trace)e(of)i(a)f Fx(H)7
-b Fz(\(curl;)14 b(\012\)-function)31 b(is)f(only)g(de\014ned)h(in)g
-(tangen)n(tial)f(direction.)45 b(Its)31 b(trace)e(is)i(in)f(the)h(dual)
-28 2504 y(space)c(of)h(traces)f(of)h([)p Fx(H)780 2474
-y Fp(1)817 2504 y Fz(\(\012\)])975 2459 y Fp(~)964 2474
-y Fq(d)1032 2504 y Fz(functions.)39 b(Recall)28 b(that)g(traces)f(of)h
-(suc)n(h)g(functions)h(are)e(de\014ned)h(in)h(ev)n(ery)e(direction)g
-(and)28 2618 y(are)f(functions)i(in)g([)p Fx(H)730 2565
-y Fi(1)p 730 2574 V 730 2608 a(2)772 2618 y Fz(\()p Fx(@)5
-b Fz(\012\)])979 2572 y Fp(~)968 2588 y Fq(d)1007 2618
-y Fz(.)28 2817 y Fn(Pr)n(oof.)39 b Fz(The)27 b(pro)r(of)f(of)g(the)h
-(trace)e(theorem)h(follo)n(ws)f(from)h(Green's)g(form)n(ula)f(stated)i
-(in)f(theorem)g(2)g(applied)g(to)h(smo)r(oth)28 2917
-y(functions)g(and)h(then)g(b)n(y)f(densit)n(y)h(argumen)n(ts.)35
-b(See)28 b([4)o(])g(p.21)f(for)g(details.)3897 3065 y
-Fg(\003)28 3213 y Fz(Due)33 b(to)f(the)h(T)-7 b(race)32
-b(Theorem)g(it)h(mak)n(es)e(sense)h(to)h(de\014ne)g(a)f(space)g(of)g
-Fx(H)7 b Fz(\(curl\)-functions)33 b(with)g(v)-5 b(anishing)32
-b(tangen)n(tial)28 3313 y(comp)r(onen)n(ts)27 b(on)g(the)h(b)r(oundary)
--7 b(.)28 3461 y Fn(Definition)28 b Fz(2)1042 3561 y
-Fx(H)1111 3573 y Fp(0)1148 3561 y Fz(\(curl;)14 b(\012\))23
-b(:=)g Fs(f)o Fx(v)p 1623 3574 44 4 v 27 w Fs(2)g Fx(H)7
-b Fz(\(curl;)14 b(\012\))23 b(:)108 b Fx(v)p 2298 3574
-V 22 w Fs(^)18 b Fx(n)p 2433 3574 50 4 v 23 w Fz(=)23
-b(0)36 b(on)h Fx(@)5 b Fz(\012)p Fs(g)28 3729 y Fn(Remark)28
-b Fz(2)45 b Fm(F)-6 b(or)30 b Fx(d)23 b Fz(=)f(2)p Fx(;)14
-b Fz(3)p Fm(,)30 b Fz([)p Fs(D)r Fz(\(\012\)])1191 3698
-y Fq(d)1260 3729 y Fm(is)g(dense)g(in)g Fx(H)1749 3741
-y Fp(0)1786 3729 y Fz(\(curl;)14 b(\012\))p Fm(.)28 3896
-y Fz(A)28 b(consequence)e(of)i(Green's)f(form)n(ula)f(is)i(the)g(follo)
-n(wing)e(imp)r(ortan)n(t)i(regularit)n(y)d(prop)r(ert)n(y)i(of)g
-Fx(H)7 b Fz(\(curl;)14 b(\012\)-functions:)28 4064 y
-Fn(Pr)n(oposition)27 b Fz(1)45 b Fm(L)l(et)24 b Fx(K)854
-4076 y Fh(\000)934 4064 y Fm(and)h Fx(K)1161 4076 y Fp(+)1240
-4064 y Fm(b)l(e)g(two)g(p)l(olygonal)h(\(r)l(esp.)38
-b(p)l(olyhe)l(dr)l(al\))26 b(Lipschitz)h(domains)e(in)g
-Fr(R)3322 4034 y Fq(d)3367 4064 y Fm(,)h(with)f(a)g(c)l(ommon)28
-4164 y(e)l(dge)f(\(r)l(esp.)37 b(c)l(ommon)25 b(e)l(dge)f(or)h(fac)l
-(e\))g Fx(e)d Fz(=)h Fx(@)5 b(K)1516 4176 y Fh(\000)1577
-4164 y Fs(\\)h Fx(@)f(K)1758 4176 y Fp(+)1836 4164 y
-Fs(6)p Fz(=)23 b Fs(;)g Fm(and)i(denote)f(by)h Fz(\012)e(=)f
-Fx(@)5 b(K)2797 4176 y Fh(\000)2859 4164 y Fs([)h Fx(@)f(K)3040
-4176 y Fp(+)3118 4164 y Fm(their)25 b(union.)37 b(A)23
-b(function)28 4264 y Fx(v)32 b Fm(is)d(in)g Fx(H)7 b
-Fz(\(curl)o(;)14 b(\012\))29 b Fm(if)h(and)f(only)g(if)h(the)f(r)l
-(estricion)g Fx(v)1741 4276 y Fh(\000)1826 4264 y Fm(of)h
-Fx(v)i Fm(to)d Fx(K)2165 4276 y Fh(\000)2249 4264 y Fm(is)g(in)g
-Fx(H)7 b Fz(\(curl;)14 b Fx(K)2793 4276 y Fh(\000)2848
-4264 y Fz(\))p Fm(,)30 b(the)f(r)l(estricion)g Fx(v)3484
-4276 y Fp(+)3568 4264 y Fm(of)h Fx(v)i Fm(to)d Fx(K)3907
-4276 y Fp(+)28 4363 y Fm(is)h(in)g Fx(H)7 b Fz(\(curl)o(;)14
-b Fx(K)573 4375 y Fp(+)628 4363 y Fz(\))30 b(and)f Fm(the)36
-b Fz(tangen)n(tial)29 b Fm(jump)h(over)h Fx(e)e Fm(vanishes:)40
-b Fx(v)2256 4375 y Fh(\000)2331 4363 y Fs(^)18 b Fx(n)2454
-4375 y Fh(\000)2529 4363 y Fz(+)g Fx(v)2652 4375 y Fp(+)2726
-4363 y Fs(^)g Fx(n)2849 4375 y Fp(+)2927 4363 y Fz(=)23
-b(0)29 b Fm(on)h Fx(e)p Fm(.)28 4531 y Fn(Pr)n(oof.)39
-b Fz(The)27 b(prop)r(osition)e(follo)n(ws)g(from)h(c)n(ho)r(osing)f(an)
-h(appropriate)e(test)j(function)g(and)f(in)n(tegrating)f(b)n(y)h(parts)
-f(\(global)28 4631 y(and)e(lo)r(cal\).)36 b(In)24 b(order)e(to)i
-Fm(lo)l(c)l(alise)32 b Fz(the)24 b(result)g(of)g(the)g(T)-7
-b(race)23 b(Theorem,)h(w)n(e)f(m)n(ust)h(c)n(ho)r(ose)f(a)g
-(testfunction)i(from)f(the)g(space)28 4758 y Fx(H)113
-4687 y Fi(1)p 113 4696 29 3 v 113 4729 a(2)97 4780 y
-Fp(00)167 4758 y Fz(\()p Fx(e)p Fz(\).)48 b(These)31
-b(functions)h(v)-5 b(anish)31 b(at)g(the)h(endp)r(oin)n(ts)f(of)g
-Fx(e)g Fz(and)h(can)e(therefore)h(b)r(e)g(extended)h(b)n(y)f(zero)f(to)
-h(a)g Fx(H)3718 4705 y Fi(1)p 3718 4714 V 3718 4747 a(2)3760
-4758 y Fz(\()p Fx(@)5 b Fz(\012\)-)28 4857 y(function.)44
-b(F)-7 b(rom)30 b(the)g(comparison)e(of)i(lo)r(cal)g(\(on)g
-Fx(K)1716 4869 y Fh(\000)1801 4857 y Fz(and)g Fx(K)2036
-4869 y Fp(+)2121 4857 y Fz(separately\))f(and)h(global)e(\(on)i(\012\))
-h(in)n(tegration)d(b)n(y)i(parts)28 4984 y(it)36 b(follo)n(w)n(as)e
-(then)i(that)g(the)g(tangen)n(tial)f(jump)h(v)-5 b(anishes)35
-b(in)h(the)g(dual)g(space)f(of)h Fx(H)2796 4913 y Fi(1)p
-2796 4922 V 2796 4955 a(2)2780 5006 y Fp(00)2850 4984
-y Fz(\()p Fx(e)p Fz(\).)61 b(By)36 b(densitiy)g(prop)r(erties)e(of)28
-5112 y Fx(H)113 5041 y Fi(1)p 113 5050 V 113 5083 a(2)97
-5134 y Fp(00)167 5112 y Fz(\()p Fx(e)p Fz(\))28 b(it)h(follo)n(ws)d
-(that)j(the)f(tangen)n(tial)f(traces)g(v)-5 b(anish)28
-b(in)g(the)g("correct)e(space")h(as)g(w)n(ell.)38 b(The)28
-b("correct)e(space")h(w)n(ould)28 5222 y(b)r(e)32 b Fx(H)221
-5192 y Fh(\000)282 5169 y Fi(1)p 282 5178 V 282 5212
-a(2)325 5222 y Fz(\()p Fx(e)p Fz(\))g(if)g(w)n(e)f(ha)n(v)n(e)g(no)h
-(further)f(regularit)n(y)f(of)i Fx(v)p 1747 5235 44 4
-v 1790 5242 a Fh(\000)1878 5222 y Fz(and)g Fx(v)p 2044
-5235 V 2087 5242 a Fp(+)2142 5222 y Fz(,)h(and)e(it)i(w)n(ould)e(b)r(e)
-h Fx(L)2871 5192 y Fp(2)2908 5222 y Fz(\()p Fx(e)p Fz(\))g(if)g
-Fx(v)p 3123 5235 V 35 w Fz(is)g(elemen)n(t)n(wise)f(in)h
-Fx(H)3924 5192 y Fp(1)28 5321 y Fz(\(e.)27 b(g.)65 b(for)27
-b(piecewise)g(p)r(olynomial)g Fx(v)p 1193 5334 V 3 w
-Fz(\).)3897 5469 y Fg(\003)1972 5719 y Fk(3)p eop
-%%Page: 4 4
-4 3 bop 28 214 a Fv(1.3)112 b Fo(V)-9 b(ariational)35
-b(form)m(ulation)f(of)h(the)g(mo)s(del)f(problem)28 367
-y Fz(In)28 b(the)h(previous)e(sections)h(w)n(e)g(in)n(tro)r(duced)g
-(the)h(space)f Fx(H)7 b Fz(\(curl;)14 b(\012\),)29 b(an)f(in)n
-(tegration-b)n(y-parts)d(form)n(ula)j(and)g(the)h(notion)28
-467 y(of)f(trace)f(for)h(an)g Fx(H)7 b Fz(\(curl;)14
-b(\012\)-function.)40 b(In)28 b(this)h(framew)n(ork,)e(the)h(v)-5
-b(ariational)27 b(form)n(ulation)h(of)g(the)h(mo)r(del)f(problem)g
-(\(1\))28 566 y(reads:)255 716 y(Find)g Fx(u)p 452 729
-48 4 v 23 w Fs(2)23 b Fx(H)670 728 y Fp(0)707 716 y Fz(\(curl;)14
-b(\012\))28 b(suc)n(h)f(that)h(for)f(all)h(test)f(functions)h
-Fx(v)p 2164 729 44 4 v 27 w Fs(2)23 b Fx(H)2378 728 y
-Fp(0)2415 716 y Fz(\(curl;)14 b(\012\))28 b(holds)1220
-828 y Fl(Z)1266 1016 y Fp(\012)1331 941 y Fz(curl)14
-b Fx(u)p 1484 954 48 4 v 27 w Fz(curl)f Fx(v)p 1711 954
-44 4 v 17 w(dx)20 b Fz(+)1961 828 y Fl(Z)2007 1016 y
-Fp(\012)2072 941 y Fx(c)p Fz(\()p Fx(x)p Fz(\))14 b Fx(u)p
-2233 954 48 4 v 33 w Fs(\001)k Fx(v)p 2355 954 44 4 v
-17 w(dx)24 b Fz(=)2614 828 y Fl(Z)2660 1016 y Fp(\012)2725
-941 y Fx(f)p 2725 970 50 4 v 41 w Fs(\001)19 b Fx(v)p
-2849 954 44 4 v 17 w(dx)859 b Fz(\(3\))28 1190 y(With)28
-b(our)f(assumptions)g(on)g(the)h(data,)f(the)h(forms)1168
-1411 y Fx(a)p Fz(\()p Fx(u)p 1244 1424 48 4 v(;)14 b(v)p
-1329 1424 44 4 v 3 w Fz(\))23 b(:=)1538 1298 y Fl(Z)1584
-1486 y Fp(\012)1649 1411 y Fz(curl)14 b Fx(u)p 1802 1424
-48 4 v 27 w Fz(curl)f Fx(v)p 2029 1424 44 4 v 17 w(dx)20
-b Fz(+)2279 1298 y Fl(Z)2325 1486 y Fp(\012)2390 1411
-y Fx(c)p Fz(\()p Fx(x)p Fz(\))14 b Fx(u)p 2551 1424 48
-4 v 33 w Fs(\001)k Fx(v)p 2673 1424 44 4 v 17 w(dx)1270
-1633 y(l)r Fz(\()p Fx(v)p 1329 1646 V 3 w Fz(\))23 b(:=)1538
-1520 y Fl(Z)1584 1708 y Fp(\012)1649 1633 y Fx(f)p 1649
-1662 50 4 v 41 w Fs(\001)c Fx(v)p 1773 1646 44 4 v 17
-w(dx)28 1862 y Fz(are)34 b(con)n(tin)n(uous)g(and)h(the)h(bilinear)f
-(form)g Fx(a)p Fz(\()p Fs(\001)p Fx(;)14 b Fs(\001)p
-Fz(\))35 b(is)h(co)r(erciv)n(e)d(on)i Fx(H)2262 1874
-y Fp(0)2300 1862 y Fz(\(curl;)14 b(\012\))23 b Fs(\002)g
-Fx(H)2780 1874 y Fp(0)2818 1862 y Fz(\(curl;)14 b(\012\).)60
-b(By)35 b(the)g(Lax-Milgram)28 1961 y(lemma)27 b(it)h(follo)n(ws,)f
-(that)h(there)f(exists)g(a)g(unique)h(solution)f Fx(u)p
-1948 1974 48 4 v 23 w Fs(2)c Fx(H)2166 1973 y Fp(0)2204
-1961 y Fz(\(curl;)14 b(\012\))27 b(of)h(\(3\).)28 2203
-y Fw(2)134 b Fv(N)n(\023)-54 b(ed)n(\023)g(elec's)37
-b(elemen)m(ts)g(of)g(\014rst)g(t)m(yp)s(e)h(for)f Fu(H)8
-b Ft(\(curl)o(;)17 b(\012\))28 2385 y Fz(In)30 b(this)h(section)g(w)n
-(e)f(will)h(presen)n(t)f(presen)n(t)g Fx(H)7 b Fz(\(curl)o(;)14
-b(\012\)-conforming)30 b(v)n(ector-v)-5 b(alued)28 b(\014nite)k(elemen)
-n(ts,)f(the)g(N)n(\023)-39 b(ed)n(\023)g(elec)29 b(ele-)28
-2484 y(men)n(ts)e(of)h(\014rst)f(t)n(yp)r(e)h(\(cf.)g([8]\),)g(whic)n
-(h)f(can)h(b)r(e)g(used)f(to)h(discretize)f(the)h(v)-5
-b(ariational)26 b(problem)h(\(3\).)28 2683 y(In)g(order)g(to)g
-(de\014ne)h(a)f(\014nite)h(elemen)n(t)g(w)n(e)f(m)n(ust)h(sp)r(ecify)28
-2833 y Fy(the)j(geometry)44 b Fz(W)-7 b(e)26 b(c)n(ho)r(ose)e(a)g
-(reference)g(elemen)n(t)1769 2812 y(^)1747 2833 y Fx(K)30
-b Fz(and)25 b(a)g(c)n(hange)f(of)h(v)-5 b(ariables)24
-b Fx(F)2833 2845 y Fq(K)2897 2833 y Fz(\()5 b(^)-47 b
-Fx(x)q Fz(\),)26 b(the)g(elemen)n(t)f(map.)36 b(W)-7
-b(e)25 b(set)255 2933 y Fx(K)j Fz(=)23 b Fx(F)495 2945
-y Fq(K)559 2933 y Fz(\()614 2912 y(^)591 2933 y Fx(K)6
-b Fz(\).)28 3082 y Fy(a)32 b(function)g(space)46 b Fz(W)-7
-b(e)29 b(need)g(a)g Fm(\014nite)i(dimensional)39 b Fz(function)30
-b(space)2413 3061 y(^)2395 3082 y Fx(R)q Fz(,)g(t)n(ypically)e(a)h
-(space)f(of)h(p)r(olynomials,)g(on)g(the)255 3182 y(reference)e(cell,)g
-(plus)h(a)f(transformation)f(of)1698 3161 y(^)1680 3182
-y Fx(R)i Fz(to)f(a)h(function)g(space)f Fx(R)2552 3194
-y Fq(K)2643 3182 y Fz(on)h(a)f(general)f(cell)i Fx(K)6
-b Fz(.)28 3331 y Fy(dofs)45 b Fz(W)-7 b(e)31 b(ha)n(v)n(e)e(to)i
-(de\014ne)g(a)f(set)h(of)f(dofs)h Fs(A)d Fz(=)g Fs(f)p
-Fx(\013)1690 3343 y Fq(i)1717 3331 y Fz(\()p Fs(\001)p
-Fz(\))p Fs(g)1846 3301 y Fq(N)1846 3353 y(i)p Fp(=1)1958
-3331 y Fz(.)46 b(These)31 b(are)e(linear)h(functionals)h(on)3208
-3310 y(^)3190 3331 y Fx(R)g Fz(and)g Fx(N)37 b(<)28 b
-Fs(1)i Fz(is)h(the)255 3440 y(dimension)c(of)760 3419
-y(^)742 3440 y Fx(R)q Fz(.)37 b Fs(A)28 b Fz(should)f(b)r(e)h
-Fm(unisolvent)p Fz(,)g(that)f(is,)h(the)g(dofs)f Fx(\013)2407
-3452 y Fq(i)2435 3440 y Fz(\()p Fs(\001)p Fz(\))h(are)f(linearly)g
-(indep)r(enden)n(t.)28 3589 y(First,)e(w)n(e)f(observ)n(e)f(that)i(for)
-f(a)g(conforming)g(discretization)g(of)g(\(3\))h(w)n(e)f(cannot)g(tak)n
-(e)g(v)n(ector-v)-5 b(alued)23 b(\014nite)j(elemen)n(ts)e(that)28
-3689 y(are)j(build)h(b)n(y)g(taking)f(the)h(standard)f(no)r(dal)h
-(\014nite)g(elemen)n(t)g(spaces)f(of)h(globally)f(con)n(tin)n(uous)g
-(functions)h(for)f(eac)n(h)h(v)n(ector)28 3788 y(comp)r(onen)n(t.)35
-b(F)-7 b(or)23 b Fx(H)7 b Fz(\(curl)o(;)14 b(\012\)-functions,)25
-b(the)f(only)f(con)n(tin)n(uit)n(y)g(condition)g(is)h(the)g(con)n(tin)n
-(uit)n(y)f(of)g(the)h(tangen)n(tial)f(comp)r(o-)28 3888
-y(nen)n(t)29 b(o)n(v)n(er)d(cell)j(b)r(oundaries.)40
-b(This)28 b(fact)h(will)g(motiv)-5 b(ate)29 b(the)g(c)n(hoice)f(of)h
-(appropriate)e(degrees)g(of)i(freedom)f(\(abbreviated)28
-3988 y(b)n(y)f(dofs)g(in)h(the)g(follo)n(wing\).)28 4087
-y(W)-7 b(e)27 b(will)h(giv)n(e)e(an)h(outline)g(of)g(the)h
-(construction)e(of)h(the)h(\014nite)f(elemen)n(t)h(spaces)e(describ)r
-(ed)h(b)n(y)g(N)n(\023)-39 b(ed)n(\023)g(elec)25 b(in)i([8].)37
-b(In)27 b(litera-)28 4187 y(ture,)g(they)h(are)f(also)f(referred)g(to)i
-(as)f Fm(N)n(\023)-40 b(ed)n(\023)g(ele)l(c's)31 b(elements)e(of)i
-(\014rst)e(typ)l(e)p Fz(.)28 4515 y Fv(2.1)112 b Fo(Construction)35
-b(of)g(N)n(\023)-50 b(ed)n(\023)g(elec)35 b(elemen)m(ts)f(on)h
-(tetrahedral)f(grids)28 4669 y Fz(In)27 b(this)h(section,)g(w)n(e)f
-(denote)g(b)n(y)1121 4648 y(^)1099 4669 y Fx(K)33 b Fz(the)28
-b(standard)e(triangular)g(or)h(tetrahedral)f(reference)h(elemen)n(t.)28
-4898 y Fo(2.1.1)105 b(P)m(olynomial)35 b(spaces)h(on)f(the)g(reference)
-g(elemen)m(t)28 5051 y Fz(In)22 b([8],)i(N)n(\023)-39
-b(ed)n(\023)g(elec)21 b(in)n(tro)r(duces)h(the)h(function)g(spaces)1686
-5030 y(^)1668 5051 y Fx(R)h Fz(=)e Fs(R)1912 5021 y Fq(k)1953
-5051 y Fz(,)i(on)f(whic)n(h)f(his)h(\014nite)g(elemen)n(t)g(will)g(b)r
-(e)g(based.)35 b(These)22 b(spaces)28 5151 y(are)k(sub)5
-b(ject)28 b(to)f(this)h(section.)37 b(F)-7 b(or)27 b(more)g(details,)g
-(consult)g([8].)28 5250 y(W)-7 b(e)26 b(denote)f(b)n(y)g
-Fr(P)599 5262 y Fq(k)639 5250 y Fz(\()680 5229 y(^)671
-5250 y(\006\))h(the)g(space)f(of)g(p)r(olynomials)g(of)g(degree)g
-Fx(k)j Fz(on)2245 5229 y(^)2236 5250 y(\006,)e(where)2592
-5229 y(^)2583 5250 y(\006)f(is)h(an)f(edge,)h(a)f(face)g(of)h(or)e(the)
-i(reference)28 5350 y(elemen)n(t)c(itself..)36 b(The)23
-b(space)971 5328 y(~)967 5350 y Fr(P)1019 5362 y Fq(k)1081
-5350 y Fz(of)f(homogeneous)f(p)r(olynomials)h(of)h(degree)e
-Fx(k)26 b Fz(is)c(the)h(span)f(of)h(monomials)e(of)i(total)f(degree)28
-5450 y Fx(k)30 b Fz(in)e Fx(d)g Fz(v)-5 b(ariables)26
-b(on)751 5429 y(^)728 5450 y Fx(K)6 b Fz(.)1972 5719
-y Fk(4)p eop
-%%Page: 5 5
-5 4 bop 28 207 a Fn(Definition)28 b Fz(3)45 b Fm(We)30
-b(de\014ne)f(the)h(auxiliary)h(sp)l(ac)l(e)1249 461 y
-Fs(S)1305 427 y Fq(k)1370 461 y Fz(:=)22 b Fs(f)14 b
-Fx(p)p 1536 491 42 4 v 23 w Fs(2)23 b Fz(\()1716 440
-y(~)1711 461 y Fr(P)1763 473 y Fq(k)1803 461 y Fz(\))1835
-427 y Fq(d)1897 461 y Fz(:)g Fx(p)p 1943 491 V 18 w Fs(\001)f
-Fz(^)-45 b Fx(x)p 2045 474 48 4 v 23 w Fz(=)2246 357
-y Fq(d)2203 382 y Fl(X)2209 559 y Fq(i)p Fp(=1)2337 461
-y Fx(p)2379 473 y Fq(i)2425 461 y Fz(^)e Fx(x)2467 473
-y Fq(i)2518 461 y Fs(\021)23 b Fz(0)14 b Fs(g)g Fx(;)1114
-b Fz(\(4\))28 731 y Fm(with)35 b Fz(^)-47 b Fx(x)23 b
-Fs(2)379 710 y Fz(^)357 731 y Fx(K)5 b Fm(.)28 831 y(The)30
-b(dimension)h(of)g(this)f(sp)l(ac)l(e)g(is)g Fx(k)j Fm(in)d(the)g(c)l
-(ase)g Fx(d)23 b Fz(=)g(2)29 b Fm(and)h Fx(k)s Fz(\()p
-Fx(k)22 b Fz(+)c(2\))29 b Fm(for)i Fx(d)23 b Fz(=)g(3)p
-Fm(.)28 1023 y Fz(N)n(\023)-39 b(ed)n(\023)g(elec's)25
-b(\014rst)i(family)h(of)g Fx(H)7 b Fz(\(curl)o(;)14 b
-(\012\)-conforming)27 b(\014nite)h(elemen)n(ts)f(is)h(based)f(on)g(the)
-h(p)r(olynomial)f(spaces)28 1192 y Fn(Definition)h Fz(4)1538
-1315 y Fs(R)1608 1281 y Fq(k)1672 1315 y Fz(=)1760 1223
-y Fl(\020)1809 1315 y Fr(P)1861 1327 y Fq(k)q Fh(\000)p
-Fp(1)1986 1315 y Fz(\()2040 1294 y(^)2018 1315 y Fx(K)6
-b Fz(\))2127 1223 y Fl(\021)2177 1240 y Fq(d)2234 1315
-y Fs(\010)18 b(S)2373 1281 y Fq(k)2428 1315 y Fx(:)1404
-b Fz(\(5\))28 1481 y Fm(These)30 b(sp)l(ac)l(es)h(have)g(dimension)1201
-1658 y Fz(dim\()p Fs(R)1441 1623 y Fq(k)1483 1658 y Fz(\))23
-b(=)g Fx(k)s Fz(\()p Fx(k)e Fz(+)d(2\))170 b Fm(for)85
-b Fx(d)24 b Fz(=)e(2)14 b Fx(;)1201 1839 y Fz(dim\()p
-Fs(R)1441 1805 y Fq(k)1483 1839 y Fz(\))23 b(=)1636 1783
-y(\()p Fx(k)e Fz(+)d(3\)\()p Fx(k)k Fz(+)c(2\))p Fx(k)p
-1636 1820 553 4 v 1891 1896 a Fz(2)2368 1839 y Fm(for)86
-b Fx(d)23 b Fz(=)g(3)14 b Fx(:)28 2052 y Fz(In)27 b(the)h(t)n(w)n
-(o-dimensional)e(case,)h(an)g(equiv)-5 b(alen)n(t)28
-b(c)n(haracterization)d(of)i(the)h(space)f Fs(R)2733
-2022 y Fq(k)2802 2052 y Fz(is)1301 2280 y Fs(R)1371 2246
-y Fq(k)1435 2280 y Fz(=)1523 2188 y Fl(\020)1572 2280
-y Fr(P)1624 2292 y Fq(k)q Fh(\000)p Fp(1)1749 2280 y
-Fz(\()1803 2259 y(^)1781 2280 y Fx(K)6 b Fz(\))1890 2188
-y Fl(\021)1940 2205 y Fp(2)1995 2280 y Fs(\010)2083 2259
-y Fz(~)2078 2280 y Fr(P)2130 2292 y Fq(k)q Fh(\000)p
-Fp(1)2283 2163 y Fl(\022)2423 2230 y Fz(^)-48 b Fx(x)2464
-2242 y Fp(2)2385 2329 y Fs(\000)5 b Fz(^)-47 b Fx(x)2497
-2341 y Fp(1)2576 2163 y Fl(\023)2665 2280 y Fx(:)1167
-b Fz(\(6\))28 2471 y(This)27 b(can)g(b)r(e)h(seen)g(b)n(y)f(noting)g
-(that)h(for)f Fx(d)d Fz(=)e(2)1616 2672 y(~)1611 2693
-y Fr(P)1663 2705 y Fq(k)q Fh(\000)p Fp(1)1815 2576 y
-Fl(\022)1955 2643 y Fz(^)-47 b Fx(x)1997 2655 y Fp(2)1918
-2742 y Fs(\000)5 b Fz(^)-47 b Fx(x)2030 2754 y Fp(1)2109
-2576 y Fl(\023)2193 2693 y Fs(\022)22 b(S)2336 2659 y
-Fq(k)28 2934 y Fz(ob)n(viously)27 b(holds.)41 b(Moreo)n(v)n(er,)27
-b(the)i(dimension)g(of)g(the)h(space)2047 2913 y(~)2042
-2934 y Fr(P)2094 2946 y Fq(k)q Fh(\000)p Fp(1)2248 2934
-y Fz(of)f(homogeneous)e(p)r(olynomials)h(of)h(degree)f
-Fx(k)22 b Fs(\000)d Fz(1)29 b(in)28 3034 y(t)n(w)n(o)f(v)-5
-b(ariables)27 b(is)i Fx(k)i Fz(and)e(this)g(is)g(also)e(the)j
-(dimension)e Fs(S)1862 3004 y Fq(k)1904 3034 y Fz(.)40
-b(This)29 b(pro)n(v)n(es)e(the)i(stated)g(equiv)-5 b(alen)n(t)28
-b(represen)n(tation)f(of)i(the)28 3134 y(space)d Fs(S)305
-3104 y Fq(k)347 3134 y Fz(.)28 3333 y(W)-7 b(e)28 b(illustrate)g(these)
-g(de\014nitions)h(with)g(some)e(examples.)39 b(W)-7 b(e)28
-b(start)g(with)h(the)g(case)e Fx(d)d Fz(=)g(2)k(and)g(consider)f(the)i
-(spaces)e(of)28 3433 y(p)r(olynomials)f(of)i(degree)e
-Fx(k)g Fz(=)d(1)k(and)g Fx(k)f Fz(=)d(2:)28 3625 y Fn(Example)k
-Fz(1)1334 3753 y Fs(R)1404 3719 y Fp(1)1464 3753 y Fz(=)1552
-3636 y Fl(\034\022)1717 3703 y Fz(1)1717 3802 y(0)1800
-3636 y Fl(\023)1889 3765 y Fq(;)1926 3636 y Fl(\022)2029
-3703 y Fz(0)2029 3802 y(1)2112 3636 y Fl(\023)2201 3765
-y Fq(;)2238 3636 y Fl(\022)2379 3703 y Fz(^)-48 b Fx(x)2420
-3715 y Fp(2)2341 3802 y Fs(\000)5 b Fz(^)-47 b Fx(x)2453
-3814 y Fp(1)2532 3636 y Fl(\023\035)3855 3753 y Fz(\(7\))1136
-4028 y Fs(R)1206 3994 y Fp(2)1267 4028 y Fz(=)1354 3936
-y Fl(\020)1404 4028 y Fr(P)1456 4040 y Fp(1)1492 4028
-y Fz(\()1546 4007 y(^)1524 4028 y Fx(K)6 b Fz(\))1633
-3936 y Fl(\021)1683 3953 y Fp(2)1738 4028 y Fs(\010)1821
-3911 y Fl(\034)q(\022)1991 3977 y Fz(^)-47 b Fx(x)2033
-3989 y Fp(1)2090 3977 y Fz(^)g Fx(x)2132 3989 y Fp(2)2003
-4077 y Fs(\000)5 b Fz(^)-47 b Fx(x)2115 4047 y Fp(2)2115
-4098 y(1)2211 3911 y Fl(\023)2300 4040 y Fq(;)2337 3911
-y Fl(\022)2527 3977 y Fz(^)g Fx(x)2569 3947 y Fp(2)2569
-3998 y(2)2440 4077 y Fs(\000)5 b Fz(^)-47 b Fx(x)2552
-4089 y Fp(1)2608 4077 y Fz(^)g Fx(x)2650 4089 y Fp(2)2729
-3911 y Fl(\023\035)28 4265 y Fz(T)-7 b(o)27 b(illustrate)g(a)g(case)g
-(for)g Fx(d)c Fz(=)g(3,)k(w)n(e)g(consider)g(the)h(lo)n(w)n(est)e(p)r
-(olynomial)h(degree)g Fx(k)f Fz(=)c(1:)28 4434 y Fn(Example)27
-b Fz(2)45 b Fm(We)30 b(have)h(to)e(sp)l(e)l(cify)j(a)e(b)l(asis)g(for)h
-Fs(S)1670 4404 y Fp(1)1707 4434 y Fm(:)28 4533 y(L)l(et)e
-Fx(p)p 171 4563 42 4 v 29 w Fm(b)l(e)h(a)g(p)l(olynomial)i(in)e
-Fz(\()p Fr(P)1020 4545 y Fp(1)1056 4533 y Fz(\()1111
-4512 y(^)1088 4533 y Fx(K)6 b Fz(\)\))1229 4503 y Fp(3)1297
-4533 y Fm(with)30 b(c)l(omp)l(onentwise)g(r)l(epr)l(esentation)1448
-4801 y Fx(p)1490 4813 y Fq(i)1540 4801 y Fz(=)1671 4697
-y Fp(3)1628 4722 y Fl(X)1630 4899 y Fq(j)s Fp(=1)1761
-4801 y Fx(a)1805 4813 y Fq(ij)1869 4801 y Fz(^)-47 b
-Fx(x)1911 4813 y Fq(j)1960 4801 y Fx(;)184 b(i)22 b Fz(=)h(1)p
-Fx(;)14 b Fz(2)p Fx(;)g Fz(3)g Fx(:)28 5072 y Fm(The)30
-b(c)l(ondition)h(for)g Fx(p)p 693 5101 V 29 w Fm(b)l(eing)f(in)g
-Fs(S)1134 5042 y Fp(1)1202 5072 y Fm(is)1219 5339 y Fx(p)p
-1219 5369 V 18 w Fs(\001)22 b Fz(^)-45 b Fx(x)p 1321
-5352 48 4 v 24 w Fz(=)1523 5236 y Fp(3)1479 5261 y Fl(X)1485
-5437 y Fq(i)p Fp(=1)1613 5339 y Fx(a)1657 5351 y Fq(ii)1713
-5339 y Fz(^)e Fx(x)1755 5305 y Fp(2)1755 5360 y Fq(i)1811
-5339 y Fz(+)1957 5236 y Fp(3)1913 5261 y Fl(X)1894 5437
-y Fq(i;j)s Fp(=1)1920 5496 y Fq(j)s(>i)2052 5339 y Fz(\()p
-Fx(a)2128 5351 y Fq(ij)2205 5339 y Fz(+)18 b Fx(a)2332
-5351 y Fq(j)s(i)2391 5339 y Fz(\))5 b(^)-47 b Fx(x)2470
-5351 y Fq(i)2503 5339 y Fz(^)g Fx(x)2545 5351 y Fq(j)2604
-5339 y Fs(\021)22 b Fz(0)14 b Fx(:)1972 5719 y Fk(5)p
-eop
-%%Page: 6 6
-6 5 bop 28 217 a Fm(This)31 b(le)l(ads)f(to)g(the)g(c)l(ondition)h(on)e
-(the)h(c)l(o)l(e\016cients)h(of)f(a)g(p)l(olynomial)i(in)e
-Fs(S)2448 187 y Fp(1)2486 217 y Fm(:)1235 385 y Fx(a)1279
-397 y Fp(11)1372 385 y Fz(=)23 b Fx(a)1504 397 y Fp(22)1597
-385 y Fz(=)g Fx(a)1729 397 y Fp(33)1822 385 y Fz(=)g(0)1235
-509 y Fx(a)1279 521 y Fp(12)1372 509 y Fz(=)g Fs(\000)p
-Fx(a)1569 521 y Fp(21)1652 509 y Fx(;)99 b(a)1818 521
-y Fp(13)1911 509 y Fz(=)23 b Fs(\000)p Fx(a)2108 521
-y Fp(31)2192 509 y Fx(;)98 b(a)2357 521 y Fp(23)2451
-509 y Fz(=)22 b Fs(\000)p Fx(a)2647 521 y Fp(32)2731
-509 y Fx(:)28 688 y Fm(With)40 b(the)g(b)l(asis)h(of)g
-Fs(S)768 658 y Fp(1)845 688 y Fm(which)h(is)e(obtaine)l(d)h(by)g(cho)l
-(osing)g Fx(a)2035 700 y Fq(ij)2135 688 y Fz(=)h(1)p
-Fm(,)g Fx(i)f Fz(=)h(1)p Fx(;)14 b Fz(2)p Fx(;)g Fz(3)p
-Fm(,)41 b Fx(j)46 b(>)c(i)d Fm(and)i(setting)e(al)t(l)i(the)g(other)28
-788 y(c)l(o)l(e\016cients)30 b(to)g(zer)l(o,)g(we)g(get)1036
-1056 y Fs(R)1106 1022 y Fp(1)1167 1056 y Fz(=)1255 964
-y Fl(\020)1304 1056 y Fr(P)1356 1068 y Fp(0)1392 1056
-y Fz(\()1446 1035 y(^)1424 1056 y Fx(K)6 b Fz(\))1533
-964 y Fl(\021)1583 981 y Fp(3)1638 1056 y Fs(\010)1721
-914 y Fl(*)1788 889 y(0)1788 1039 y(@)1924 956 y Fz(0)1908
-1055 y(^)-48 b Fx(x)1949 1067 y Fp(3)1908 1155 y Fz(^)g
-Fx(x)1949 1167 y Fp(2)2029 889 y Fl(1)2029 1039 y(A)2129
-1068 y Fq(;)2180 889 y Fl(0)2180 1039 y(@)2300 956 y
-Fz(^)h Fx(x)2342 968 y Fp(3)2316 1055 y Fz(0)2300 1155
-y(^)g Fx(x)2342 1167 y Fp(1)2421 889 y Fl(1)2421 1039
-y(A)2521 1068 y Fq(;)2573 889 y Fl(0)2573 1039 y(@)2692
-956 y Fz(^)g Fx(x)2734 968 y Fp(2)2692 1055 y Fz(^)g
-Fx(x)2734 1067 y Fp(1)2708 1155 y Fz(0)2813 889 y Fl(1)2813
-1039 y(A)2886 914 y(+)28 1345 y Fz(W)-7 b(e)35 b(remark)f(at)h(this)g
-(p)r(oin)n(t)g(that)h(the)f(spaces)g Fs(R)1643 1315 y
-Fq(k)1719 1345 y Fz(do)g(not)g(span)g(the)g(whole)g(\()p
-Fr(P)2676 1357 y Fq(k)2716 1345 y Fz(\()2770 1324 y(^)2748
-1345 y Fx(K)6 b Fz(\)\))2889 1315 y Fq(d)2928 1345 y
-Fz(.)59 b(An)36 b Fx(H)7 b Fz(\(curl;)14 b(\012\)-conforming)28
-1445 y(FEM)27 b(based)g(on)h(full)g(p)r(olynomial)f(spaces,)g(the)h(so)
-f(called)h Fm(N)n(\023)-40 b(ed)n(\023)g(ele)l(c)30 b(elements)g(of)h
-(se)l(c)l(ond)f(typ)l(e)p Fz(,)e(w)n(as)f(in)n(tro)r(duced)g(in)h(1986)
-28 1545 y(b)n(y)f(N)n(\023)-39 b(ed)n(\023)g(elec)26
-b(in)h([10].)28 1732 y Fn(Remark)h Fz(3)45 b Fm(The)38
-b(original,)j(r)l(ather)d(te)l(chnic)l(al,)i(r)l(epr)l(esentation)e(of)
-g(the)f(sp)l(ac)l(es)h Fs(R)2746 1702 y Fq(k)2825 1732
-y Fm(is)f(given)h(in)f(De\014nition)g(2)h(in)f([8)q(].)28
-1832 y(N)n(\023)-40 b(ed)n(\023)g(ele)l(c)30 b(uses)f(this)i(r)l(epr)l
-(esentation)f(in)f(most)h(of)h(his)f(pr)l(o)l(ofs.)40
-b(We)30 b(wil)t(l)h(not)e(r)l(efer)i(to)e(it)h(her)l(e.)28
-2059 y Fo(2.1.2)105 b(Degrees)35 b(of)g(freedom)g(on)g(the)f(reference)
-h(elemen)m(t)28 2213 y Fz(In)27 b(this)h(section)f(w)n(e)h(de\014ne)g
-(the)f(set)h Fs(A)g Fz(of)g(dofs,)f(whic)n(h)h(is)f(a)g(set)h(of)f
-(linear)g(functionals)h(on)f Fs(R)3043 2182 y Fq(k)3084
-2213 y Fz(.)28 2377 y Fn(Remark)h Fz(4)45 b Fm(R)l(e)l(c)l(al)t(l)30
-b(that)f(the)h(dimension)h(of)g(the)f(sp)l(ac)l(es)g(of)h(p)l
-(olynomials)h(of)e(de)l(gr)l(e)l(e)g Fx(k)j Fm(in)d Fx(n)f
-Fm(variables)j(is)3491 2310 y Fl(\000)3529 2341 y Fq(n)p
-Fp(+)p Fq(k)q Fp(+2)3615 2406 y Fq(n)3742 2310 y Fl(\001)3780
-2377 y Fm(.)28 2582 y Fn(Definition)c Fz(5)45 b Fm(L)l(et)742
-2561 y Fz(^)719 2582 y Fx(K)31 b Fm(b)l(e)25 b(the)h(r)l(efer)l(enc)l
-(e)f(triangle)h(and)1848 2566 y Fz(^)1854 2582 y Fx(t)p
-1854 2595 30 4 v 25 w Fm(the)f(tangent)g(as)g(de\014ne)l(d)h(in)f(c)l
-(onvention)g(1.)38 b(The)26 b(set)f(of)h(de)l(gr)l(e)l(es)28
-2681 y(of)k(fr)l(e)l(e)l(dom)h Fs(A)f Fm(on)g Fs(R)717
-2651 y Fq(k)787 2681 y Fm(in)g(the)g(2d)h(c)l(ase)f(c)l(onsists)g(of)g
-(the)g(line)l(ar)h(functionals)28 2827 y Fy(edge)g(dofs)1441
-2964 y Fz(^)-50 b Fx(\013)p Fz(\()s(^)-45 b Fx(u)p 1518
-2977 48 4 v Fz(\))23 b(:=)1732 2851 y Fl(Z)1781 3040
-y Fp(^)-36 b Fq(e)1814 2964 y Fz(\()1840 2949 y(^)1846
-2964 y Fx(t)p 1846 2977 30 4 v 18 w Fs(\001)22 b Fz(^)-45
-b Fx(u)p 1936 2977 48 4 v Fz(\))27 b(^)-55 b Fx(')14
-b(d)s Fz(^)-45 b Fx(s)85 b Fs(8)13 b Fz(^)-55 b Fx(')22
-b Fs(2)i Fr(P)2519 2976 y Fq(k)q Fh(\000)p Fp(1)2643
-2964 y Fz(\()s(^)-45 b Fx(e)p Fz(\))14 b Fx(;)255 3171
-y Fm(for)30 b(every)h(e)l(dge)j Fz(^)-45 b Fx(e)29 b
-Fm(of)978 3150 y Fz(^)955 3171 y Fx(K)6 b Fm(.)39 b(We)29
-b(have)i(a)f(total)g(of)h Fz(3)p Fx(k)h Fm(of)f(e)l(dge)f(dofs.)28
-3317 y Fy(inner)h(dofs)1400 3438 y Fz(^)-50 b Fx(\013)p
-Fz(\()s(^)-45 b Fx(u)p 1477 3451 V Fz(\))23 b(:=)1691
-3325 y Fl(Z)1754 3499 y Fp(^)1737 3514 y Fq(K)1818 3438
-y Fz(^)-45 b Fx(u)p 1815 3451 V 18 w Fs(\001)25 b Fz(^)-49
-b Fx(')p 1922 3467 55 4 v 15 w(d)5 b Fz(^)-47 b Fx(x)85
-b Fs(8)6 b Fz(^)-48 b Fx(')p 2213 3467 V 23 w Fs(2)23
-b Fz(\()p Fr(P)2452 3450 y Fq(k)q Fh(\000)p Fp(2)2577
-3438 y Fz(\()2631 3417 y(^)2609 3438 y Fx(K)6 b Fz(\)\))2750
-3404 y Fp(2)2801 3438 y Fx(:)255 3628 y Fm(We)30 b(have)h(a)f(total)g
-(of)g Fx(k)s Fz(\()p Fx(k)22 b Fs(\000)c Fz(1\))29 b
-Fm(of)i(inner)f(dofs.)28 3816 y Fn(Definition)e Fz(6)45
-b Fm(L)l(et)746 3795 y Fz(^)724 3816 y Fx(K)35 b Fm(b)l(e)29
-b(the)h(r)l(efer)l(enc)l(e)g(tetr)l(ahe)l(dr)l(on,)1873
-3801 y Fz(^)1879 3816 y Fx(t)p 1879 3829 30 4 v 30 w
-Fm(the)f(tangent)g(to)h(an)f(e)l(dge)h(as)g(de\014ne)l(d)g(in)g(c)l
-(onvention)f(1)h(and)35 b Fz(^)-47 b Fx(n)p 3911 3829
-50 4 v 28 3916 a Fm(the)32 b(outwar)l(d)g(unit)f(normal)i(ve)l(ctor)f
-(to)g(a)h(fac)l(e.)46 b(The)33 b(set)f(of)h(de)l(gr)l(e)l(es)f(of)h(fr)
-l(e)l(e)l(dom)g Fs(A)f Fm(on)h Fs(R)2969 3885 y Fq(k)3042
-3916 y Fm(in)f(the)g(3d)h(c)l(ase)f(c)l(onsists)g(of)28
-4015 y(the)d(line)l(ar)i(functionals)28 4161 y Fy(edge)g(dofs)1441
-4298 y Fz(^)-50 b Fx(\013)p Fz(\()s(^)-45 b Fx(u)p 1518
-4311 48 4 v Fz(\))23 b(:=)1732 4185 y Fl(Z)1781 4374
-y Fp(^)-36 b Fq(e)1814 4298 y Fz(\()1840 4283 y(^)1846
-4298 y Fx(t)p 1846 4311 30 4 v 18 w Fs(\001)22 b Fz(^)-45
-b Fx(u)p 1936 4311 48 4 v Fz(\))27 b(^)-55 b Fx(')14
-b(d)s Fz(^)-45 b Fx(s)85 b Fs(8)13 b Fz(^)-55 b Fx(')22
-b Fs(2)i Fr(P)2519 4310 y Fq(k)q Fh(\000)p Fp(1)2643
-4298 y Fz(\()s(^)-45 b Fx(e)p Fz(\))14 b Fx(;)255 4505
-y Fm(for)30 b(every)h(e)l(dge)j Fz(^)-45 b Fx(e)29 b
-Fm(of)h(the)g(tetr)l(ahe)l(dr)l(on)1550 4484 y Fz(^)1528
-4505 y Fx(K)6 b Fm(.)38 b(We)30 b(have)h(a)f(total)g(of)h
-Fz(6)p Fx(k)h Fm(of)f(e)l(dge)f(dofs.)28 4651 y Fy(face)i(dofs)1329
-4772 y Fz(^)-50 b Fx(\013)p Fz(\()s(^)-45 b Fx(u)p 1406
-4785 V Fz(\))24 b(:=)1620 4659 y Fl(Z)1680 4832 y Fp(^)1666
-4847 y Fq(f)1709 4772 y Fz(\()s(^)-45 b Fx(u)p 1741 4785
-V 19 w Fs(^)23 b Fz(^)-46 b Fx(n)p 1882 4785 50 4 v -1
-w Fz(\))19 b Fs(\001)25 b Fz(^)-48 b Fx(')p 2024 4801
-55 4 v 14 w(d)q Fz(^)-43 b Fx(a)85 b Fs(8)13 b Fz(^)-55
-b Fx(')22 b Fs(2)i Fz(\()p Fr(P)2550 4784 y Fq(k)q Fh(\000)p
-Fp(2)2674 4772 y Fz(\()2725 4750 y(^)2706 4772 y Fx(f)9
-b Fz(\)\))2820 4738 y Fp(2)2872 4772 y Fx(;)255 4991
-y Fm(for)30 b(every)h(fac)l(e)795 4969 y Fz(^)777 4991
-y Fx(f)38 b Fm(of)31 b(the)f(tetr)l(ahe)l(dr)l(on)1549
-4970 y Fz(^)1527 4991 y Fx(K)5 b Fm(.)39 b(We)29 b(have)i(a)g(total)e
-(of)i Fz(4)p Fx(k)s Fz(\()p Fx(k)21 b Fs(\000)d Fz(1\))29
-b Fm(of)i(fac)l(e)g(dofs.)28 5136 y Fy(inner)g(dofs)1400
-5258 y Fz(^)-50 b Fx(\013)p Fz(\()s(^)-45 b Fx(u)p 1477
-5271 48 4 v Fz(\))23 b(:=)1691 5145 y Fl(Z)1754 5319
-y Fp(^)1737 5334 y Fq(K)1818 5258 y Fz(^)-45 b Fx(u)p
-1815 5271 V 18 w Fs(\001)25 b Fz(^)-49 b Fx(')p 1922
-5287 55 4 v 15 w(d)5 b Fz(^)-47 b Fx(x)85 b Fs(8)6 b
-Fz(^)-48 b Fx(')p 2213 5287 V 23 w Fs(2)23 b Fz(\()p
-Fr(P)2452 5270 y Fq(k)q Fh(\000)p Fp(3)2577 5258 y Fz(\()2631
-5237 y(^)2609 5258 y Fx(K)6 b Fz(\)\))2750 5223 y Fp(3)2801
-5258 y Fx(:)255 5469 y Fm(We)30 b(have)h(a)f(total)g(of)967
-5429 y Fq(k)q Fp(\()p Fq(k)q Fh(\000)p Fp(1\)\()p Fq(k)q
-Fh(\000)p Fp(2\))p 967 5450 384 4 v 1143 5498 a(2)1391
-5469 y Fm(of)g(inner)g(dofs.)1972 5719 y Fk(6)p eop
-%%Page: 7 7
-7 6 bop 28 207 a Fz(W)-7 b(e)27 b(note)g(that)h(in)f(the)g(case)g(of)g
-(lo)n(w)n(est)f(order)g(elemen)n(ts,)h(i.)g(e.)37 b Fx(k)26
-b Fz(=)c(1,)27 b(only)g(edge)g(dofs)g(o)r(ccur.)36 b(This)27
-b(is)g(not)g(so)f(for)h(higher)28 307 y(order)i(elemen)n(ts.)47
-b(F)-7 b(or)31 b Fx(k)g Fz(=)d(2)j(w)n(e)g(additionally)f(ha)n(v)n(e)g
-(inner)h(dofs)f(in)i(the)f(2d)g(case)f(and)h(face)g(dofs)f(in)i(the)f
-(3d)g(case.)46 b(F)-7 b(or)28 406 y Fx(k)25 b Fs(\024)e
-Fz(3)k(w)n(e)h(ha)n(v)n(e)e(all)h(t)n(yp)r(es)h(of)f(dofs)h(in)g(b)r
-(oth)g(cases.)28 506 y(W)-7 b(e)28 b(also)e(note)i(that)f(the)h(total)g
-(n)n(um)n(b)r(er)f(of)h(dofs)f(equals)g(the)h(dimension)f(of)h(the)g
-(spaces)f Fs(R)2963 476 y Fq(k)3004 506 y Fz(,)g(as)g(it)h(should)g(b)r
-(e.)28 606 y(The)d(represen)n(tation)e(of)i(the)g Fm(interfac)l(e)32
-b Fz(dofs,)26 b(that)f(is)g(edge)f(dofs)h(in)h(2d,)f(edge)f(and)h(face)
-g(dofs)g(in)g(3d,)g(is)g(motiv)-5 b(ated)25 b(b)n(y)g(the)28
-705 y(con)n(tin)n(uit)n(y)i(condition)g(on)g Fx(H)7 b
-Fz(\(curl;)14 b(\012\)-functions)28 b(stated)f(in)h(prop)r(osition)f
-(1.)28 893 y Fn(Pr)n(oposition)g Fz(2)45 b Fm(The)38
-b(set)g Fs(A)g Fm(of)g(dofs)h(b)l(e\014ne)l(d)f(ab)l(ove)g(is)g
-(unisolvent)g(on)g Fs(R)2560 863 y Fq(k)2601 893 y Fm(.)65
-b Fz(^)-45 b Fx(u)p 2688 906 48 4 v 37 w Fs(2)38 b(R)2936
-863 y Fq(k)3015 893 y Fm(is)g(uniquely)g(de\014ne)l(d)g(by)g(the)28
-993 y(moments)f Fz(^)-50 b Fx(\013)p Fz(\()s(^)-45 b
-Fx(u)p 467 1006 V Fz(\))p Fm(.)28 1181 y Fn(Pr)n(oof.)40
-b Fz(See)27 b([8],)h(pro)r(of)f(of)g(theorem)g(1)h(and)f(preceeding)g
-(lemmas.)28 1369 y Fn(Example)g Fz(3)g(\(Reference)h(shap)r(e)f
-(functions)h(of)f(lo)n(w)n(est)g(order)f(for)h(N)n(\023)-39
-b(ed)n(\023)g(elec)26 b(elemen)n(ts)i(on)f(triangular)f(meshes\))45
-b Fm(L)l(et)21 b(the)g(r)l(ef-)28 1469 y(er)l(enc)l(e)30
-b(element)h(b)l(e)g(the)g(triangle)1163 1448 y Fz(^)1141
-1469 y Fx(K)g Fz(=)1332 1401 y Fl(\010)1381 1469 y Fz(\()5
-b(^)-47 b Fx(x;)20 b Fz(^)-48 b Fx(y)s Fz(\))23 b Fs(2)h
-Fr(R)1729 1438 y Fp(2)1795 1469 y Fz(:)108 b(0)23 b Fs(\024)28
-b Fz(^)-48 b Fx(x)24 b Fs(\024)e Fz(1)14 b Fx(;)41 b
-Fz(0)23 b Fs(\024)28 b Fz(^)-47 b Fx(y)25 b Fs(\024)e
-Fz(1)18 b Fs(\000)23 b Fz(^)-47 b Fx(x)2853 1401 y Fl(\011)2902
-1469 y Fm(.)42 b(L)l(ab)l(el)31 b(the)h(e)l(dges)f(c)l(outer)l(clo)l
-(ck-)28 1585 y(wise)f(startung)f(with)k Fz(^)-45 b Fx(e)755
-1597 y Fp(0)815 1585 y Fz(=)p 903 1513 406 4 v 23 w(\(0)p
-Fx(;)14 b Fz(0\))p Fx(;)g Fz(\(1)p Fx(;)g Fz(0\))o Fm(.)38
-b(The)31 b(tangential)f(ve)l(ctors)g(to)g(the)g(e)l(dges)g(ar)l(e)g
-(\(oriente)l(d)h(c)l(ounter)l(clo)l(ckwise\))1040 1793
-y Fz(^)1046 1808 y Fx(t)p 1046 1821 30 4 v 21 x Fp(0)1136
-1808 y Fz(=)1224 1691 y Fl(\022)1326 1757 y Fz(1)1326
-1857 y(0)1409 1691 y Fl(\023)1498 1808 y Fx(;)1614 1793
-y Fz(^)1620 1808 y Fx(t)p 1620 1821 V 21 x Fp(1)1710
-1808 y Fz(=)1842 1752 y(1)p 1808 1789 111 4 v 1808 1805
-a Fs(p)p 1877 1805 42 4 v 69 x Fz(2)1942 1691 y Fl(\022)2045
-1757 y Fs(\000)p Fz(1)2077 1857 y(1)2192 1691 y Fl(\023)2281
-1808 y Fx(;)2397 1793 y Fz(^)2403 1808 y Fx(t)p 2403
-1821 30 4 v 21 x Fp(2)2493 1808 y Fz(=)2581 1691 y Fl(\022)2716
-1757 y Fz(0)2684 1857 y Fs(\000)p Fz(1)2831 1691 y Fl(\023)2920
-1808 y Fx(:)28 2036 y Fm(The)f(underlying)h(function)e(sp)l(ac)l(e)i
-(for)f(lowest)h(or)l(der)f(N)n(\023)-40 b(ed)n(\023)g(ele)l(c)31
-b(elements)e(on)h(a)g(triangular)h(mesh)f(is)g Fs(R)3344
-2006 y Fp(1)3411 2036 y Fm(fr)l(om)g(\(7\).)28 2136 y(In)h(the)h(c)l
-(ase)g(of)h Fx(k)d Fz(=)c(1)31 b Fm(only)i(e)l(gde-dofs)g(o)l(c)l(cur.)
-45 b(On)1760 2115 y Fz(^)1738 2136 y Fx(K)37 b Fm(we)32
-b(have)h(dofs)h(of)e(the)g(typ)l(e)2756 2069 y Fl(R)2798
-2166 y Fp(^)-36 b Fq(e)2826 2174 y Ff(i)2857 2136 y Fz(\()2883
-2121 y(^)2889 2136 y Fx(t)p 2889 2149 V 21 w Fs(\001)23
-b Fz(^)-45 b Fx(u)p 2983 2149 48 4 v -1 w Fz(\))28 b(^)-56
-b Fx(')14 b(d)s Fz(^)-45 b Fx(s)14 b(;)g Fs(8)f Fz(^)-55
-b Fx(')27 b Fs(2)g Fr(P)3539 2148 y Fp(0)3575 2136 y
-Fz(\()s(^)-45 b Fx(e)3646 2148 y Fq(i)3673 2136 y Fz(\))p
-Fm(.)45 b(Mor)l(e)28 2244 y(pr)l(e)l(cisely,)31 b(sinc)l(e)f
-Fx(')23 b Fs(\021)g Fz(1)29 b Fm(is)h(a)h(b)l(asis)f(for)h
-Fr(P)1377 2256 y Fp(0)1413 2244 y Fz(\()s(^)-45 b Fx(e)1484
-2256 y Fq(i)1511 2244 y Fz(\))30 b Fm(we)g(have)h(the)f(thr)l(e)l(e)g
-(dofs)1418 2460 y Fz(^)-50 b Fx(\013)1463 2472 y Fq(i)1491
-2460 y Fz(\()s(^)-45 b Fx(u)p 1523 2473 V -1 w Fz(\))24
-b(=)1713 2347 y Fl(Z)1762 2536 y Fp(^)-35 b Fq(e)1791
-2544 y Ff(i)1822 2460 y Fz(\()1848 2445 y(^)1854 2460
-y Fx(t)p 1854 2473 30 4 v 18 w Fs(\001)22 b Fz(^)-45
-b Fx(u)p 1944 2473 48 4 v -1 w Fz(\))14 b Fx(d)s Fz(^)-45
-b Fx(s)85 b(i)23 b Fz(=)g(0)p Fx(;)14 b Fz(1)p Fx(;)g
-Fz(2)g Fx(:)28 2705 y Fm(In)28 b(or)l(der)h(to)g(c)l(onstruct)e(a)i
-(FE-b)l(asis)1236 2684 y Fz(^)1219 2705 y Fx(N)p 1219
-2718 76 4 v 1294 2725 a Fp(0)1332 2705 y Fx(;)1386 2684
-y Fz(^)1369 2705 y Fx(N)p 1369 2718 V 1444 2725 a Fp(1)1482
-2705 y Fx(;)1536 2684 y Fz(^)1519 2705 y Fx(N)p 1519
-2718 V 1594 2725 a Fp(2)1660 2705 y Fm(for)h Fs(R)1862
-2675 y Fp(1)1928 2705 y Fm(with)f(r)l(esp)l(e)l(ct)f(to)h(these)g
-(dofs,)h(we)f(r)l(e)l(quir)l(e)37 b Fz(^)-50 b Fx(\013)3328
-2717 y Fq(i)3355 2705 y Fz(\()3405 2684 y(^)3387 2705
-y Fx(N)p 3387 2718 V 3463 2725 a Fq(j)3498 2705 y Fz(\))24
-b(=)e Fx(\016)3678 2717 y Fq(ij)3737 2705 y Fm(.)38 b(This)28
-2824 y(le)l(ads)d(to)f(a)g(line)l(ar)h(system)f(for)g(the)h(c)l(o)l
-(e\016cients)f(of)h(the)1898 2803 y Fz(^)1881 2824 y
-Fx(N)p 1881 2837 V 1957 2844 a Fq(i)2019 2824 y Fm(in)f(a)g(gener)l(al)
-h(b)l(asis)g(of)g Fs(R)2867 2794 y Fp(1)2904 2824 y Fm(.)52
-b(In)33 b(the)h(c)l(ase)h(of)g(lowest)f(or)l(der)28 2923
-y(elements,)c(it)f(is)h(e)l(asy)h(to)f(verify)h(that)f(we)g(have)951
-3121 y Fz(^)934 3142 y Fx(N)p 934 3155 V 1009 3163 a
-Fp(0)1070 3142 y Fz(=)1157 3025 y Fl(\022)1260 3091 y
-Fz(1)18 b Fs(\000)24 b Fz(^)-48 b Fx(y)1335 3191 y Fz(^)g
-Fx(x)1488 3025 y Fl(\023)1577 3142 y Fx(;)1716 3121 y
-Fz(^)1699 3142 y Fx(N)p 1699 3155 V 1774 3163 a Fp(1)1835
-3142 y Fz(=)1922 3025 y Fl(\022)2025 3091 y Fs(\000)6
-b Fz(^)-48 b Fx(y)2061 3191 y Fz(^)g Fx(x)2175 3025 y
-Fl(\023)2263 3142 y Fx(;)2402 3121 y Fz(^)2385 3142 y
-Fx(N)p 2385 3155 V 2461 3163 a Fp(2)2521 3142 y Fz(=)2609
-3025 y Fl(\022)2753 3091 y Fs(\000)6 b Fz(^)-48 b Fx(y)2717
-3191 y Fz(^)h Fx(x)18 b Fs(\000)g Fz(1)2943 3025 y Fl(\023)3032
-3142 y Fx(:)800 b Fz(\(8\))28 3407 y Fo(2.1.3)105 b(Piola)35
-b(transformation)28 3560 y Fz(An)28 b(a\016ne)f(triangle)g(or)f
-(tetrahedron)h Fx(K)33 b Fz(is)27 b(describ)r(ed)h(b)n(y)f(the)h
-(a\016ne)g(elemen)n(t)f(map)1469 3733 y Fx(K)h Fs(3)23
-b Fx(x)h Fz(=)f Fx(F)1858 3745 y Fq(K)1922 3733 y Fz(\()5
-b(^)-47 b Fx(x)q Fz(\))23 b(=)g Fx(B)2208 3745 y Fq(K)2277
-3733 y Fz(^)-47 b Fx(x)19 b Fz(+)f Fx(b)2457 3745 y Fq(K)28
-3907 y Fz(In)39 b(standard)e Fx(H)576 3876 y Fp(1)613
-3907 y Fz(\(\012\)-conforming)h(FEM,)h(the)g(shap)r(e)g(functions)g
-Fx(N)2292 3919 y Fq(i)2358 3907 y Fz(on)f(a)h(general)e(cell)i
-Fx(K)44 b Fz(are)38 b(obtained)h(from)f(the)28 4006 y(reference)26
-b(shap)r(e)i(functions)992 3985 y(^)968 4006 y Fx(N)1035
-4018 y Fq(i)1090 4006 y Fz(on)f(the)h(reference)f(elemen)n(t)2025
-3985 y(^)2003 4006 y Fx(K)33 b Fz(b)n(y)28 b(the)g(pull-bac)n(k)1560
-4200 y Fx(N)1627 4212 y Fq(i)1654 4200 y Fz(\()p Fx(x)p
-Fz(\))c(=)1877 4108 y Fl(\020)1951 4179 y Fz(^)1927 4200
-y Fx(N)1994 4212 y Fq(i)2039 4200 y Fs(\016)18 b Fx(F)2164
-4164 y Fh(\000)p Fp(1)2152 4224 y Fq(K)2253 4108 y Fl(\021)2317
-4200 y Fz(\()p Fx(x)p Fz(\))28 4398 y(In)24 b(the)g(case)f(of)i
-Fx(H)7 b Fz(\(curl)o(;)14 b(\012\)-conforming)23 b(N)n(\023)-39
-b(ed)n(\023)g(elec)22 b(FEM)i(w)n(e)g(cannot)f(transforme)g(our)h(shap)
-r(e)f(function)i(in)f(this)h(w)n(a)n(y)-7 b(.)34 b(The)28
-4498 y(pull-bac)n(k)d(of)h(a)f Fx(H)7 b Fz(\(curl;)870
-4477 y(^)848 4498 y Fx(K)e Fz(\)-function)33 b(needs)f(not)g(to)g(b)r
-(e)g(in)g Fx(H)7 b Fz(\(curl;)14 b Fx(K)6 b Fz(\).)50
-b(In)32 b(addition,)h(the)g(pull-bac)n(k)e(is)h(not)g(an)f
-Fs(R)3892 4467 y Fq(k)3934 4498 y Fz(-)28 4597 y(isomorphism)d(and)i
-(it)g(do)r(es)f(not)h(lead)g(to)f(an)h Fx(H)7 b Fz(\(curl)o(;)14
-b(\012\)-conforming)29 b(metho)r(d)h(if)g(prescribing)f(the)h(dofs)g(b)
-n(y)f(de\014nitions)28 4697 y(5)e(or)f(6.)28 4796 y(In)32
-b(N)n(\023)-39 b(ed)n(\023)g(elec's)31 b(FEM)h(\(or,)i(more)d(general,)
-i(in)g Fx(H)7 b Fz(\(curl)o(;)14 b(\012\)-conforming)32
-b(FEM\),)h(the)g(shap)r(e)f(functions)h(are)e(transformed)28
-4896 y(b)n(y)c(the)h(follo)n(wing)e(co)n(v)-5 b(arian)n(t)26
-b(transformation)g(for)h(v)n(ector-\014elds:)255 5065
-y(The)f(elemen)n(t)h(shap)r(e)f(functions)h Fx(N)p 1319
-5078 V 1394 5086 a Fq(i)1422 5065 y Fz(\()p Fx(x)p Fz(\))g(on)g(the)f
-(elemen)n(t)h Fx(K)h Fz(=)23 b Fx(F)2362 5077 y Fq(K)2426
-5065 y Fz(\()2481 5044 y(^)2458 5065 y Fx(K)6 b Fz(\))27
-b(are)e(obtained)h(from)g(the)h(reference)f(shap)r(e)255
-5164 y(functions)i(b)n(y)1333 5284 y Fx(N)p 1333 5297
-V 1408 5305 a Fq(i)1436 5284 y Fz(\()p Fx(x)p Fz(\))c(=)f
-Fs(P)1717 5296 y Fq(K)1781 5284 y Fz(\()1830 5263 y(^)1813
-5284 y Fx(N)p 1813 5297 V 1889 5305 a Fq(i)1916 5284
-y Fz(\))h(=)2059 5192 y Fl(\020)2128 5263 y Fz(^)2109
-5284 y Fx(D)r(F)2245 5249 y Fh(\000)p Fq(T)2233 5309
-y(K)2366 5263 y Fz(^)2349 5284 y Fx(N)p 2349 5297 V 2425
-5305 a Fq(i)2452 5192 y Fl(\021)2520 5284 y Fs(\016)18
-b Fx(F)2645 5249 y Fh(\000)p Fp(1)2633 5309 y Fq(K)2734
-5284 y Fz(\()p Fx(x)p Fz(\))c Fx(;)973 b Fz(\(9\))255
-5469 y(where)514 5449 y(^)495 5469 y Fx(D)r(F)619 5481
-y Fq(K)711 5469 y Fz(is)28 b(the)f(jacobian)1296 5437
-y Fq(d)p 1277 5451 73 4 v 1277 5498 a(d)t Fp(^)-37 b
-Fq(x)1359 5469 y Fx(F)1412 5481 y Fq(K)1477 5469 y Fz(\()5
-b(^)-47 b Fx(x)q Fz(\))28 b(of)f(the)h(elemen)n(t)g(map.)1972
-5719 y Fk(7)p eop
-%%Page: 8 8
-8 7 bop 28 212 a Fz(In)34 b(literature,)i(an)e(equiv)-5
-b(alen)n(t)34 b(to)g(this)h(transformation)e(for)g Fx(H)7
-b Fz(\(div)r(;)14 b(\012\)-conforming)33 b(FEM)h(\(whic)n(h)h(in)f
-(that)h(case)e(is)i(a)28 311 y(con)n(tra)n(v)-5 b(arian)n(t)24
-b(map\))k(is)g(referred)e(to)i(as)e Fm(Piola)32 b(tr)l(ansformation)p
-Fz(,)d(cf.)37 b([3)o(])28 b(pp.)g(97.)28 411 y(Here,)f(w)n(e)g(will)h
-(refer)f(to)g(the)h(transformation)e(\(9\))i(of)g(the)f(v)n(ector)g
-(\014eld)h(also)e(as)h Fm(Piola)32 b(tr)l(ansformation)p
-Fz(.)28 511 y(W)-7 b(e)23 b(note)g(that)g(the)h(gradien)n(ts)e(of)h
-(scalar)e(no)r(dal)i Fx(H)1635 480 y Fp(1)1672 511 y
-Fz(\(\012\)-conforming)f(\014nite)i(elemen)n(ts)f(transform)f
-(according)f(to)i(the)h(Piola)28 610 y(transformation)i(\(9\).)28
-710 y(In)g(the)h(case)f(of)g(tetrahedral)g(elemen)n(ts)g(and)g(a\016ne)
-h(elemen)n(t)f(map)h Fx(F)2230 722 y Fq(K)2294 710 y
-Fz(\()5 b(^)-47 b Fx(x)q Fz(\))23 b(=)g Fx(B)2580 722
-y Fq(K)2649 710 y Fz(^)-47 b Fx(x)17 b Fz(+)e Fx(b)2824
-722 y Fq(k)2865 710 y Fz(,)27 b(the)g(jacobian)3405 689
-y(^)3385 710 y Fx(D)r(F)3509 722 y Fq(K)3600 710 y Fz(is)g(just)g(the)
-28 809 y(constan)n(t)f(matrix)h Fx(B)695 821 y Fq(K)787
-809 y Fz(and)h(w)n(e)f(ha)n(v)n(e)1341 992 y Fx(v)p 1341
-1005 44 4 v 4 w Fz(\()p Fx(x)p Fz(\))d(=)e Fs(P)1665
-1004 y Fq(K)1729 992 y Fz(\()q(^)-43 b Fx(v)p 1761 1005
-V 4 w Fz(\))23 b(=)g Fx(B)2015 957 y Fh(\000)p Fq(T)2011
-1017 y(K)2133 925 y Fl(\000)2172 992 y Fz(^)-43 b Fx(v)p
-2171 1005 V 22 w Fs(\016)17 b Fx(F)2357 957 y Fh(\000)p
-Fp(1)2345 1017 y Fq(K)2447 925 y Fl(\001)2498 992 y Fz(\()p
-Fx(x)p Fz(\))d Fx(;)1168 b Fz(\(10\))28 1221 y Fo(2.1.4)105
-b(T)-9 b(ransformation)34 b(of)h(the)g(curl)g(in)g(2d)28
-1374 y Fz(F)-7 b(or)30 b(\012)f Fs(\032)f Fr(R)416 1344
-y Fp(2)459 1374 y Fz(,)k(w)n(e)f(noted)g(in)g(remark)f(1)g(that)i(v)n
-(ector)d(\014elds)i(in)h Fx(H)7 b Fz(\(curl)o(;)14 b(\012\))31
-b(can)g(b)r(e)h(represen)n(ted)d(as)i(rotated)f Fx(H)7
-b Fz(\(div)q(;)14 b(\012\))28 1474 y(v)n(ector)26 b(\014elds.)37
-b(Moreo)n(v)n(er,)25 b(it)j(is)f(easy)g(to)g(v)n(erify)g(that)1525
-1657 y Fx(B)1592 1621 y Fh(\000)p Fq(T)1588 1681 y(K)1719
-1657 y Fz(=)c(det)14 b Fx(B)2003 1621 y Fh(\000)p Fp(1)1999
-1681 y Fq(K)2106 1657 y Fx(R)2170 1622 y Fq(T)2222 1657
-y Fx(B)2285 1669 y Fq(K)2363 1657 y Fx(R)h(;)1350 b Fz(\(11\))28
-1839 y(where)27 b Fx(R)i Fz(is)f(the)h(rotation)e(matrix)g(from)h
-(remark)f(1.)38 b(Therefore,)27 b(the)i(prop)r(erties)e(of)h(the)h
-(Piola)e(transformation)f(\(10\))i(in)28 1939 y(the)33
-b(2d)f(case)g(can)g(b)r(e)h(deriv)n(ed)f(directly)h(from)f(the)h(prop)r
-(erties)f(of)g(the)i Fx(H)7 b Fz(\(div)q(;)14 b(\012\)-Piola)31
-b(transformation)g(stated)i(in)g([3)o(])28 2039 y(pp.)28
-b(97.)28 2238 y Fn(Theorem)g Fz(4)f(\(Some)h(prop)r(erties)e(of)i(2d)f
-(Piola)g(transformation)e(for)j(a\016ne)f(elemen)n(t)h(map\))45
-b Fm(L)l(et)25 b Fx(v)p 3160 2251 V 3 w Fz(\()p Fx(x)p
-Fz(\))f(=)f Fs(P)3484 2250 y Fq(K)3548 2238 y Fz(\()q(^)-43
-b Fx(v)p 3580 2251 V 3 w Fz(\))p Fm(,)27 b Fx(')p Fz(\()p
-Fx(x)p Fz(\))e(=)28 2270 y Fl(\000)79 2337 y Fz(^)-55
-b Fx(')18 b Fs(\016)g Fx(F)263 2302 y Fh(\000)p Fp(1)251
-2362 y Fq(K)352 2270 y Fl(\001)404 2337 y Fz(\()p Fx(x)p
-Fz(\))p Fm(,)37 b Fz(^)-48 b Fx(x)24 b Fz(=)f Fx(F)795
-2302 y Fh(\000)p Fp(1)783 2362 y Fq(K)884 2337 y Fz(\()p
-Fx(x)p Fz(\))p Fm(,)31 b(with)f(a\016ne)g(element)g(map)g
-Fx(F)2004 2349 y Fq(K)2069 2337 y Fm(.)116 2487 y(\(i\))46
-b(The)31 b(gr)l(adient)f Fx(D)r(v)p 817 2500 V 33 w Fm(tr)l(ansforms)g
-(ac)l(c)l(or)l(ding)h(to)1742 2670 y Fx(D)r(v)p 1813
-2683 V 27 w Fz(=)22 b Fx(B)2034 2634 y Fh(\000)p Fq(T)2030
-2694 y(K)2172 2649 y Fz(^)2152 2670 y Fx(D)s Fz(^)-42
-b Fx(v)p 2224 2683 V 17 w(B)2348 2634 y Fh(\000)p Fp(1)2344
-2694 y Fq(K)2451 2670 y Fx(:)1340 b Fz(\(12\))91 2877
-y Fm(\(ii\))46 b(The)31 b(curl)e(tr)l(ansforms)h(ac)l(c)l(or)l(ding)h
-(to)1703 2990 y Fz(curl)13 b Fx(v)p 1855 3003 V 27 w
-Fz(=)22 b(det)14 b Fx(B)2205 2955 y Fh(\000)p Fp(1)2201
-3015 y Fq(K)2304 2968 y Fl(d)2295 2990 y Fz(curl^)-43
-b Fx(v)p 2433 3003 V 17 w(:)1301 b Fz(\(13\))255 3152
-y Fm(As)32 b(a)g(c)l(onse)l(quenc)l(e)g(we)g(se)l(e)g(that)g
-Fx(H)7 b Fz(\(curl;)14 b Fx(K)6 b Fz(\))32 b Fm(is)g(isomorphic)j(to)d
-Fx(H)7 b Fz(\(curl;)2707 3131 y(^)2685 3152 y Fx(K)e
-Fz(\))32 b Fm(under)g(the)h(Piola)g(tr)l(ansformation)255
-3251 y(\(10\).)28 3450 y Fn(Pr)n(oof.)122 3600 y Fz(\(i\))46
-b(Chain)27 b(rule)99 3749 y(\(ii\))46 b(W)-7 b(e)27 b(use)f(that)h(the)
-f(2d)h(curl)f(op)r(erator)e(is)j(just)g(the)f(trace)g(of)g(the)h
-(rotated)f(jacobian)f Fx(R)15 b(D)r(v)s Fz(.)37 b(By)26
-b(remark)f(11,)h(w)n(e)g(can)255 3849 y(replace)g Fx(B)603
-3813 y Fh(\000)p Fq(T)599 3873 y(K)735 3849 y Fz(and)i(w)n(e)f(get)g
-(that)h Fx(R)15 b(D)r(v)31 b Fz(is)c(a\016ne-equiv)-5
-b(alen)n(t)27 b(to)g(det)15 b Fx(B)2554 3813 y Fh(\000)p
-Fp(1)2550 3873 y Fq(K)2657 3849 y Fx(R)2754 3828 y Fz(^)2734
-3849 y Fx(D)5 b Fz(^)-45 b Fx(v)t Fz(,)27 b(whic)n(h)h(pro)n(v)n(es)d
-(\(ii\).)3897 4048 y Fg(\003)28 4247 y Fn(Cor)n(ollar)-6
-b(y)28 b Fz(1)45 b Fm(F)-6 b(r)l(om)30 b(\(ii\))g(in)g(the)l(or)l(em)g
-(4)g(we)g(de)l(duc)l(e)1435 4359 y Fl(Z)1481 4548 y Fq(K)1559
-4472 y Fz(curl)14 b Fx(v)p 1712 4485 V 17 w(')g(dx)24
-b Fz(=)2038 4359 y Fl(Z)2101 4533 y Fp(^)2084 4548 y
-Fq(K)2172 4451 y Fl(d)2162 4472 y Fz(curl)q(^)-43 b Fx(v)p
-2301 4485 V 30 w Fz(^)-55 b Fx(')14 b(d)5 b Fz(^)-47
-b Fx(x)14 b(;)28 4702 y Fm(and)30 b(we)g(have,)h(to)l(gether)f(with)h
-(\(ii\))f(fr)l(om)g(the)l(or)l(em)g(4)1145 4814 y Fl(Z)1191
-5002 y Fq(K)1269 4927 y Fz(curl)13 b Fx(v)p 1421 4940
-V 31 w Fz(curl)g Fx(u)p 1644 4940 48 4 v 14 w(dx)23 b
-Fz(=)g Fs(j)p Fx(B)1993 4939 y Fq(K)2057 4927 y Fs(j)2080
-4893 y Fh(\000)p Fp(1)2197 4814 y Fl(Z)2260 4988 y Fp(^)2243
-5003 y Fq(K)2330 4905 y Fl(d)2321 4927 y Fz(curl^)-42
-b Fx(v)p 2460 4940 44 4 v 2526 4905 a Fl(d)2517 4927
-y Fz(curl)r(^)d Fx(u)p 2655 4940 48 4 v 14 w(d)5 b Fz(^)-47
-b Fx(x)14 b(:)1972 5719 y Fk(8)p eop
-%%Page: 9 9
-9 8 bop 28 213 a Fo(2.1.5)105 b(T)-9 b(ransformation)34
-b(of)h(the)g(curl)g(in)g(3d)28 366 y Fz(In)22 b(three)f(dimensions,)i
-(w)n(e)f(cannot)f(iden)n(tify)i(the)f(curl-op)r(erator)d(with)k(the)f
-(rotated)f(gradien)n(t)g(or)g(with)h(the)g(div)n(ergence)f(of)h(a)28
-465 y(rotated)h(v)n(ector)g(\014eld.)36 b(W)-7 b(e)25
-b(cannot,)g(as)f(in)g(2d,)h(deriv)n(e)f(a)g(transformation)e(form)n
-(ula)i(for)g(the)h(curl)f(from)g(the)g(transformatin)28
-565 y(form)n(ula)i(of)i(the)g(div)n(ergence.)28 665 y(By)36
-b(the)i(c)n(hain)e(rule,)j(w)n(e)e(obtain)f(the)i(transformation)d(of)i
-(the)g(gradien)n(t)f(of)h(a)g(v)n(ector)e(\014eld)j Fx(v)p
-3098 678 44 4 v 3 w Fz(,)h(de\014ned)f(b)n(y)e(the)i(Piola)28
-764 y(transformation)26 b(\(10\))h(of)g(a)h(reference)e(\014eld)j(^)-43
-b Fx(v)p 1461 777 V 3 w Fz(:)1629 941 y Fx(D)r(v)p 1700
-954 V 26 w Fz(=)23 b Fx(B)1921 905 y Fh(\000)p Fq(T)1917
-965 y(K)2058 920 y Fz(^)2039 941 y Fx(D)s Fz(^)-43 b
-Fx(v)p 2110 954 V 17 w(B)2234 905 y Fh(\000)p Fp(1)2230
-965 y Fq(K)2337 941 y Fx(:)1454 b Fz(\(14\))28 1117 y(W)-7
-b(e)28 b(in)n(tro)r(duce)f(the)h(sk)n(ew)f(symmetric)g(matrix)g(Curl)13
-b Fx(v)31 b Fz(as)1570 1332 y(\(Curl)14 b Fx(v)s Fz(\))1853
-1357 y Fq(ij)1935 1332 y Fz(=)2032 1276 y Fx(@)5 b(v)2121
-1288 y Fq(j)p 2032 1313 124 4 v 2032 1389 a Fx(@)g(x)2128
-1401 y Fq(i)2185 1332 y Fs(\000)2285 1276 y Fx(@)g(v)2374
-1288 y Fq(i)p 2278 1313 132 4 v 2278 1389 a Fx(@)g(x)2374
-1401 y Fq(j)3814 1332 y Fz(\(15\))28 1568 y(W)-7 b(e)28
-b(see)f(that)h(Curl)13 b Fx(v)26 b Fz(=)d Fx(D)r(v)p
-885 1581 44 4 v 928 1538 a Fq(T)999 1568 y Fs(\000)18
-b Fx(D)r(v)p 1153 1581 V 31 w Fz(and)27 b(therefore)g(b)n(y)g(\(14\))
-1550 1758 y(Curl)13 b Fx(v)26 b Fz(=)d Fx(B)1946 1722
-y Fh(\000)p Fq(T)1942 1782 y(K)2071 1736 y Fl(d)2050
-1758 y Fz(Curl)17 b(^)-45 b Fx(v)17 b(B)2350 1722 y Fh(\000)p
-Fp(1)2346 1782 y Fq(K)3814 1758 y Fz(\(16\))28 1962 y
-Fn(Pr)n(oposition)27 b Fz(3)g(\(T)-7 b(ransformation)26
-b(of)h(the)h(curl)g(in)g(3d\))45 b Fm(L)l(et)2082 1941
-y Fz(^)2060 1962 y Fx(K)39 b Fm(b)l(e)34 b(the)g(r)l(efer)l(enc)l(e)h
-(tetr)l(ahe)l(dr)l(on)f(and)g Fx(K)i Fz(=)31 b Fx(F)3633
-1974 y Fq(K)3697 1962 y Fz(\()3752 1941 y(^)3729 1962
-y Fx(K)6 b Fz(\))34 b Fm(an)28 2061 y(a\016ne)f(image)i(of)f(it.)50
-b(The)34 b(curl)f(of)h(a)g(ve)l(ctor)g(\014eld)g Fx(v)p
-1689 2074 V 3 w Fz(\()p Fx(x)p Fz(\))g Fm(on)g Fx(K)6
-b Fm(,)34 b(de\014ne)l(d)f(by)h(the)g(Piola)h(tr)l(ansformation)f(of)g
-(a)g(r)l(efer)l(enc)l(e)28 2161 y(\014eld)d Fz(^)-43
-b Fx(v)p 206 2174 V 3 w Fz(\()5 b(^)-47 b Fx(x)q Fz(\))30
-b Fm(tr)l(ansforms)g(ac)l(c)l(or)l(ding)h(to)1276 2337
-y Fz(\(curl)14 b Fx(v)p 1461 2350 V 3 w Fz(\))1536 2362
-y Fq(i)1578 2337 y Fz(\()p Fx(x)p Fz(\))24 b(=)f(det)14
-b(M)2006 2349 y Fp(i)2029 2337 y Fz(\()p Fx(x)p Fz(\))g
-Fx(;)184 b(i)23 b Fz(=)g(1)p Fx(;)14 b Fz(2)p Fx(;)g
-Fz(3)1113 b(\(17\))28 2514 y Fm(We)34 b(obtain)h(the)f(matrix)g
-Fz(M)929 2526 y Fp(i)986 2514 y Fm(by)g(r)l(eplacing)i(i-th)e(c)l
-(olumn)g(of)h(the)f(\(c)l(onstant\))g(jac)l(obian)i Fx(D)r
-Fz(\()p Fx(F)3053 2478 y Fh(\000)p Fp(1)3041 2538 y Fq(K)3142
-2514 y Fz(\))31 b(=)g Fx(B)3368 2478 y Fh(\000)p Fp(1)3364
-2538 y Fq(K)3491 2514 y Fm(by)k(the)f(ve)l(ctor)28 2631
-y Fz(\()69 2609 y Fl(d)60 2631 y Fz(curl)14 b(^)-43 b
-Fx(v)p 212 2644 V 22 w Fs(\016)18 b Fx(F)399 2595 y Fh(\000)p
-Fp(1)387 2655 y Fq(K)488 2631 y Fz(\)\()p Fx(x)p Fz(\))p
-Fm(:)1159 2792 y Fz(\(M)1267 2804 y Fp(i)1290 2792 y
-Fz(\))1323 2817 y Fq(k)q(l)1399 2792 y Fz(\()p Fx(x)p
-Fz(\))24 b(:=)1644 2675 y Fl(\032)1748 2747 y Fz(\()1789
-2726 y Fl(d)1780 2747 y Fz(curl)17 b(^)-45 b Fx(v)22
-b Fs(\016)c Fx(F)2120 2712 y Fh(\000)p Fp(1)2108 2772
-y Fq(K)2209 2747 y Fz(\))2241 2759 y Fq(k)2282 2747 y
-Fz(\()p Fx(x)p Fz(\))84 b Fm(if)i Fx(l)24 b Fz(=)f Fx(i)1748
-2850 y Fz(\()p Fx(B)1847 2815 y Fh(\000)p Fp(1)1843 2875
-y Fq(K)1937 2850 y Fz(\))1969 2862 y Fq(k)q(l)2477 2850
-y Fm(if)86 b Fx(l)24 b Fs(6)p Fz(=)f Fx(i)28 2997 y Fm(\(Note:)38
-b(an)30 b(alternative,)h(e)l(quivalent,)g(tr)l(ansformation)f(formula)h
-(for)f(the)g(curl)g(in)g(3d)g(is)h(given)f(in)g(pr)l(op)l(osition)h
-(4\).)28 3189 y Fn(Pr)n(oof.)40 b Fz(It)28 b(holds)1525
-3367 y(curl)13 b Fx(v)p 1677 3380 V 27 w Fz(=)1831 3200
-y Fl(0)1831 3350 y(@)1945 3267 y Fz(\(Curl)h Fx(v)s Fz(\))2228
-3279 y Fp(23)1945 3366 y Fz(\(Curl)g Fx(v)s Fz(\))2228
-3378 y Fp(31)1945 3466 y Fz(\(Curl)g Fx(v)s Fz(\))2228
-3478 y Fp(12)2341 3200 y Fl(1)2341 3350 y(A)2441 3367
-y Fx(:)1350 b Fz(\(18\))28 3612 y(W)-7 b(e)34 b(demonstrate)f(the)h
-(statemen)n(t)g(of)g(the)g(prop)r(osition)f(for)h(the)g(\014rst)g(comp)
-r(onen)n(t)f(of)h(the)h(curl,)g(whic)n(h)f(is)g(\(curl)13
-b Fx(v)p 3750 3625 V 4 w Fz(\))3826 3624 y Fp(1)3897
-3612 y Fz(=)28 3712 y(Curl)g Fx(v)246 3724 y Fp(23)317
-3712 y Fz(.)45 b(Using)31 b(the)g(transformation)d(\(16\),)j(implicit)h
-(summation)e(o)n(v)n(er)f(equal)h(indices)g(and)h(the)f(abbreviation)g
-Fx(b)3788 3724 y Fq(ij)3874 3712 y Fz(:=)28 3812 y(\()p
-Fx(B)127 3776 y Fh(\000)p Fp(1)123 3836 y Fq(K)216 3812
-y Fz(\))248 3824 y Fq(ij)307 3812 y Fz(,)e(w)n(e)f(ha)n(v)n(e)1474
-3929 y(\(Curl)14 b Fx(v)s Fz(\))1757 3941 y Fp(23)1850
-3929 y Fz(=)23 b Fx(b)1974 3941 y Fq(k)q Fp(2)2062 3929
-y Fz(\()2115 3907 y Fl(d)2094 3929 y Fz(Curl)16 b(^)-45
-b Fx(v)t Fz(\))2345 3941 y Fq(k)q(l)2421 3929 y Fx(b)2457
-3941 y Fq(l)p Fp(3)28 4074 y Fz(W)-7 b(riting)27 b(this)h(out)g(and)f
-(recalling)f(that)i(Curl)14 b Fx(v)31 b Fz(is)c(sk)n(ew)g(symmetric,)g
-(yields)227 4260 y(\(Curl)14 b Fx(v)s Fz(\))510 4272
-y Fp(23)604 4260 y Fz(=)22 b(\()p Fx(b)759 4272 y Fp(12)830
-4260 y Fx(b)866 4272 y Fp(23)954 4260 y Fs(\000)c Fx(b)1073
-4272 y Fp(22)1143 4260 y Fx(b)1179 4272 y Fp(13)1249
-4260 y Fz(\)\()1334 4238 y Fl(d)1313 4260 y Fz(Curl)f(^)-45
-b Fx(v)s Fz(\))1564 4272 y Fp(12)1653 4260 y Fs(\000)18
-b Fz(\()p Fx(b)1804 4272 y Fp(12)1875 4260 y Fx(b)1911
-4272 y Fp(33)1999 4260 y Fs(\000)g Fx(b)2118 4272 y Fp(32)2188
-4260 y Fx(b)2224 4272 y Fp(13)2294 4260 y Fz(\)\()2379
-4238 y Fl(d)2358 4260 y Fz(Curl)f(^)-45 b Fx(v)s Fz(\))2609
-4272 y Fp(31)2698 4260 y Fz(+)18 b(\()p Fx(b)2849 4272
-y Fp(22)2920 4260 y Fx(b)2956 4272 y Fp(33)3044 4260
-y Fs(\000)g Fx(b)3163 4272 y Fp(32)3233 4260 y Fx(b)3269
-4272 y Fp(23)3339 4260 y Fz(\)\()3424 4238 y Fl(d)3403
-4260 y Fz(Curl)f(^)-45 b Fx(v)s Fz(\))3654 4272 y Fp(23)3739
-4260 y Fx(;)28 4436 y Fz(and)27 b(with)h(\(18\))f(this)h(is)g(equal)f
-(to)g(the)h(determinan)n(t)g(of)1394 4737 y(M)1470 4749
-y Fp(1)1530 4737 y Fz(:=)1641 4545 y Fl(0)1641 4692 y(B)1641
-4745 y(@)1755 4630 y Fz(\()1796 4608 y Fl(d)1787 4630
-y Fz(curl)14 b Fx(v)s Fz(\))2015 4642 y Fp(1)2135 4630
-y Fx(b)2171 4642 y Fp(12)2324 4630 y Fx(b)2360 4642 y
-Fp(13)1755 4744 y Fz(\()1796 4722 y Fl(d)1787 4744 y
-Fz(curl)g Fx(v)s Fz(\))2015 4756 y Fp(2)2135 4744 y Fx(b)2171
-4756 y Fp(22)2324 4744 y Fx(b)2360 4756 y Fp(23)1755
-4858 y Fz(\()1796 4836 y Fl(d)1787 4858 y Fz(curl)g Fx(v)s
-Fz(\))2015 4870 y Fp(3)2135 4858 y Fx(b)2171 4870 y Fp(32)2324
-4858 y Fx(b)2360 4870 y Fp(33)2472 4545 y Fl(1)2472 4692
-y(C)2472 4745 y(A)2572 4737 y Fx(:)28 5034 y Fz(The)27
-b(pro)r(of)g(for)g(the)h(other)f(comp)r(onen)n(ts)g(follo)n(ws)g
-(analogously)-7 b(.)3897 5202 y Fg(\003)28 5370 y Fz(In)42
-b(the)g(next)g(prop)r(osition,)j(w)n(e)d(state)f(an)h(alternativ)n(e,)j
-(equiv)-5 b(alen)n(t,)45 b(form)n(ula)c(for)h(the)g(transformation)e
-(of)i(the)h(curl)28 5469 y(\(e.)27 b(g.)h(used)f(b)n(y)h(Demk)n(o)n
-(vicz)e(in)i([12)o(]\))1972 5719 y Fk(9)p eop
-%%Page: 10 10
-10 9 bop 28 228 a Fn(Pr)n(oposition)27 b Fz(4)45 b Fm(F)-6
-b(or)25 b(a)h(ve)l(ctor)f(\014eld)h Fx(v)p 1277 241 44
-4 v 29 w Fm(on)f(the)g(tetr)l(ahe)l(dr)l(on)h Fx(K)i
-Fz(=)23 b Fx(F)2264 240 y Fq(K)2328 228 y Fz(\()2383
-207 y(^)2360 228 y Fx(K)6 b Fz(\))p Fm(,)27 b(de\014ne)l(d)e(by)h(the)f
-(Piola)j(tr)l(ansformation)d(\(10\))28 328 y(of)30 b(a)g(r)l(efer)l
-(enc)l(e)g(\014eld)h Fz(^)-42 b Fx(v)p 726 341 V 33 w
-Fm(on)939 307 y Fz(^)917 328 y Fx(K)6 b Fm(,)30 b(we)g(have)1361
-534 y Fz(curl)14 b Fx(v)p 1514 547 V 26 w Fz(=)1785 478
-y(1)p 1677 515 257 4 v 1677 591 a(det)h Fx(B)1870 603
-y Fq(K)1957 534 y Fx(B)2020 546 y Fq(K)2098 534 y Fz(\()2139
-512 y Fl(d)2130 534 y Fz(curl)g(^)-43 b Fx(v)p 2283 547
-44 4 v 22 w Fs(\016)17 b Fx(F)2469 499 y Fh(\000)p Fp(1)2457
-559 y Fq(K)2559 534 y Fz(\))d Fx(:)1186 b Fz(\(19\))28
-746 y Fn(Pr)n(oof.)38 b Fz(The)24 b(transformation)e(form)n(ula)h
-(\(19\))g(can)g(b)r(e)h(pro)n(v)n(en)e(comp)r(onen)n(t)n(wise,)i(and)f
-(w)n(e)g(will)h(only)f(carry)f(out)i(the)g(pro)r(of)28
-846 y(for)j(the)h(\014rst)f(v)n(ector)f(comp)r(onen)n(t)i(\(curl)13
-b Fx(v)p 1327 859 V 4 w Fz(\))1403 858 y Fp(1)1440 846
-y Fz(.)37 b(The)28 b(pro)r(ofs)e(for)i(the)g(other)f(comp)r(onen)n(ts)g
-(follo)n(w)f(analogously)-7 b(.)28 945 y(The)27 b(iden)n(tit)n(y)h
-(\(19\))f(reads)g(for)g(the)h(\014rst)f(v)n(ector)f(comp)r(onen)n(t)
-1208 1156 y(\(curl)14 b Fx(v)p 1393 1169 V 3 w Fz(\))1468
-1168 y Fp(1)1528 1156 y Fz(=)1733 1100 y(1)p 1626 1137
-257 4 v 1626 1213 a(det)g Fx(B)1818 1225 y Fq(K)1892
-1156 y Fz(\()p Fx(B)1987 1168 y Fq(K)2051 1156 y Fz(\))2083
-1168 y Fp(1)p Fq(j)2152 1156 y Fz(\(\()2225 1134 y Fl(d)2216
-1156 y Fz(curl)h(^)-43 b Fx(v)p 2369 1169 44 4 v 3 w
-Fz(\))2444 1168 y Fq(j)2498 1156 y Fs(\016)18 b Fx(F)2623
-1122 y Fh(\000)p Fp(1)2712 1156 y Fz(\))c Fx(:)1033 b
-Fz(\(20\))28 1368 y(Referring)26 b(to)i(\(17\),)f(w)n(e)g(sho)n(w)g
-(that)h(the)g(righ)n(t)f(hand)g(side)h(of)f(\(20\))h(equals)e(det)15
-b(M)2644 1380 y Fp(1)2681 1368 y Fz(.)37 b(F)-7 b(or)27
-b(this,)h(w)n(e)f(expand)g(det)14 b(M)3690 1380 y Fp(1)3755
-1368 y Fz(to)796 1553 y(det)g(M)1001 1565 y Fp(1)1061
-1553 y Fz(=)23 b(\()1190 1531 y Fl(d)1181 1553 y Fz(curl)14
-b(^)-42 b Fx(v)p 1334 1566 V 3 w Fz(\))1409 1565 y Fp(1)1460
-1553 y Fz(det)14 b Fs(B)1647 1519 y Fq(inv)1644 1574
-y Fp(11)1769 1553 y Fs(\000)k Fz(\()1893 1531 y Fl(d)1884
-1553 y Fz(curl)c(^)-42 b Fx(v)p 2037 1566 V 3 w Fz(\))2112
-1565 y Fp(2)2163 1553 y Fz(det)14 b Fs(B)2350 1519 y
-Fq(inv)2347 1574 y Fp(21)2472 1553 y Fz(+)k(\()2596 1531
-y Fl(d)2587 1553 y Fz(curl)c(^)-43 b Fx(v)p 2739 1566
-V 4 w Fz(\))2815 1565 y Fp(3)2866 1553 y Fz(det)14 b
-Fs(B)3053 1519 y Fq(inv)3050 1574 y Fp(31)3170 1553 y
-Fx(;)28 1725 y Fz(where)27 b Fs(B)326 1694 y Fq(inv)323
-1746 y(ij)456 1725 y Fz(is)h(the)g(2)18 b Fs(\002)g Fz(2-matrix)26
-b(arising)g(from)h Fx(B)1696 1689 y Fh(\000)p Fp(1)1692
-1749 y Fq(K)1813 1725 y Fz(when)h(cancelling)f(its)h(i-th)g(ro)n(w)e
-(and)h(its)h(j-th)g(column.)28 1833 y(W)-7 b(e)28 b(recall)e(the)i
-(form)n(ula)f(for)g(the)h(in)n(v)n(erse)e(of)i(a)f(matrix)g
-Fx(A)c Fs(2)h Fr(R)2037 1803 y Fp(3)p Fh(\002)p Fp(3)1404
-2027 y Fz(\()p Fx(A)1498 1992 y Fh(\000)p Fp(1)1587 2027
-y Fz(\))1619 2039 y Fq(ij)1701 2027 y Fz(=)1874 1970
-y(1)p 1799 2007 192 4 v 1799 2083 a(det)14 b Fx(A)2000
-2027 y Fz(\()p Fs(\000)p Fz(1\))2171 1992 y Fq(i)p Fp(+)p
-Fq(j)2294 2027 y Fz(det)g Fs(A)2489 2039 y Fq(j)s(i)2562
-2027 y Fx(;)1229 b Fz(\(21\))28 2221 y(where)27 b Fs(A)334
-2233 y Fq(ij)420 2221 y Fz(is)h(the)g(2)18 b Fs(\002)g
-Fz(2-matrix)26 b(arising)g(from)h Fx(A)h Fz(when)g(cancelling)f(its)h
-(i-th)f(ro)n(w)g(and)g(its)h(j-th)g(column.)28 2321 y(Replacing)f
-Fx(B)475 2333 y Fq(K)566 2321 y Fz(in)h(the)g(righ)n(t)f(hand)g(side)h
-(of)g(\(19\))f(b)n(y)g(the)h(expression)e(\(21\))h(for)h
-Fx(A)23 b Fz(=)g Fx(B)2852 2285 y Fh(\000)p Fp(1)2848
-2345 y Fq(K)2941 2321 y Fz(,)28 b(w)n(e)f(get)145 2479
-y(1)p 38 2516 257 4 v 38 2592 a(det)14 b Fx(B)230 2604
-y Fq(K)449 2479 y Fz(1)p 327 2516 286 4 v 327 2599 a(det)h
-Fx(B)524 2564 y Fh(\000)p Fp(1)520 2623 y Fq(K)623 2535
-y Fz(\()p Fs(\000)p Fz(1\))794 2501 y Fp(1+)p Fq(j)926
-2535 y Fz(det)f Fs(B)1113 2501 y Fq(inv)1110 2556 y(j)s
-Fp(1)1217 2535 y Fz(\()1258 2513 y Fl(d)1249 2535 y Fz(curl)g(^)-43
-b Fx(v)p 1401 2548 44 4 v 3 w Fz(\))1476 2547 y Fq(j)1535
-2535 y Fz(=)22 b(\()1663 2513 y Fl(d)1654 2535 y Fz(curl)15
-b(^)-43 b Fx(v)p 1807 2548 V 3 w Fz(\))1882 2547 y Fp(1)1934
-2535 y Fz(det)14 b Fs(B)2121 2501 y Fq(inv)2118 2556
-y Fp(11)2228 2535 y Fs(\000)t Fz(\()2338 2513 y Fl(d)2329
-2535 y Fz(curl)g(^)-43 b Fx(v)p 2481 2548 V 3 w Fz(\))2556
-2547 y Fp(2)2607 2535 y Fz(det)15 b Fs(B)2795 2501 y
-Fq(inv)2792 2556 y Fp(21)2901 2535 y Fz(+)t(\()3011 2513
-y Fl(d)3002 2535 y Fz(curl)f(^)-43 b Fx(v)p 3154 2548
-V 4 w Fz(\))3230 2547 y Fp(3)3281 2535 y Fz(det)14 b
-Fs(B)3468 2501 y Fq(inv)3465 2556 y Fp(31)3594 2535 y
-Fz(=)23 b(det)14 b(M)3887 2547 y Fp(1)3938 2535 y Fx(:)3897
-2760 y Fg(\003)28 2990 y Fv(2.2)112 b(N)n(\023)-54 b(ed)n(\023)g(elec)
-36 b(Elemen)m(ts)g(on)i(a\016ne)g(quadrilateral)f(or)g(hexahedral)h
-(grids)28 3143 y Fz(W)-7 b(e)29 b(w)n(an)n(t)f(to)h(presen)n(t)f(the)h
-(ingredien)n(ts)f(for)h(N)n(\023)-39 b(ed)n(\023)g(elec's)27
-b(\014nite)i(elemen)n(ts)g(of)g(\014rst)f(t)n(yp)r(e)h(on)g(grids)f
-(consisiting)g(of)h(parallel-)28 3243 y(ograms)f(\(in)i(2d\))h(or)e
-(the)h(resp)r(ectiv)n(e)g(ob)5 b(jects)29 b(in)i(3d,)f(so)g(called)f
-(parallelotops)g(\(cf.)45 b(section)29 b Fm(FE)k(built)f(on)g(cub)l(es)
-37 b Fz(in)30 b([8]\).)28 3343 y(Suc)n(h)d(grids)g(consist)g(of)g
-(elemen)n(ts)h Fx(C)34 b Fz(that)28 b(are)e(a\016ne)i(images)e(of)i
-(the)g(square)e(or)h(cubic)h(reference)e(elemen)n(t)3536
-3322 y(^)3517 3343 y Fx(C)j Fz(=)23 b([0)p Fx(;)14 b
-Fz(1])3860 3313 y Fq(d)3898 3343 y Fz(:)1252 3514 y Fx(C)30
-b Fz(=)22 b Fx(F)1481 3526 y Fq(C)1538 3514 y Fz(\()1589
-3493 y(^)1570 3514 y Fx(C)6 b Fz(\))83 b Fx(C)30 b Fs(3)23
-b Fx(x)h Fz(=)e Fx(B)2138 3526 y Fq(C)2199 3514 y Fz(^)-47
-b Fx(x)19 b Fz(+)f Fx(b)p 2343 3527 36 4 v 21 x Fq(C)2448
-3514 y Fx(;)i Fz(^)-48 b Fx(x)24 b Fs(2)2653 3493 y Fz(^)2634
-3514 y Fx(C)c(:)28 3741 y Fo(2.2.1)105 b(P)m(olynomial)35
-b(spaces)h(on)f(the)g(reference)g(elemen)m(t)28 3895
-y Fz(In)23 b(order)f(to)h(in)n(tro)r(duce)g(the)g(function)h(spaces)e
-(needed)i(for)e(the)i(construction)e(of)h(N)n(\023)-39
-b(ed)n(\023)g(elec's)22 b(\014nite)h(elemen)n(ts,)h(let)g(us)f
-(de\014ne)28 3994 y(some)k(spaces)f(of)i(v)n(ector-v)-5
-b(alued)26 b(p)r(olynomials)28 4158 y Fn(Definition)i
-Fz(7)45 b Fs(Q)649 4170 y Fq(l;m)781 4158 y Fm(ar)l(e)28
-b(the)h(sp)l(ac)l(es)g(of)g(p)l(olynomials)h(on)e(the)g(r)l(efer)l(enc)
-l(e)h(squar)l(e)2729 4137 y Fz(^)2710 4158 y Fx(C)35
-b Fm(with)28 b(maximal)h(de)l(gr)l(e)l(e)g Fx(l)h Fm(in)j
-Fz(^)-47 b Fx(x)3764 4170 y Fp(1)3830 4158 y Fm(and)28
-4257 y Fx(m)29 b Fm(in)35 b Fz(^)-47 b Fx(x)279 4269
-y Fp(2)317 4257 y Fm(.)28 4357 y Fs(Q)96 4369 y Fq(l;m;n)291
-4357 y Fm(ar)l(e)30 b(the)h(sp)l(ac)l(es)g(of)g(p)l(olynomials)h(on)f
-(the)f(r)l(efer)l(enc)l(e)h(cub)l(e)2185 4336 y Fz(^)2166
-4357 y Fx(C)37 b Fm(with)31 b(maximal)g(de)l(gr)l(e)l(e)g
-Fx(l)g Fm(in)36 b Fz(^)-47 b Fx(x)3233 4369 y Fp(1)3271
-4357 y Fm(,)30 b Fx(m)h Fm(in)k Fz(^)-47 b Fx(x)3579
-4369 y Fp(2)3647 4357 y Fm(and)31 b Fx(n)f Fm(in)33 4456
-y Fz(^)-47 b Fx(x)75 4468 y Fp(3)112 4456 y Fm(.)28 4620
-y Fz(The)27 b(spaces)471 4599 y(^)453 4620 y Fx(R)h Fz(for)f(the)h
-(reference)f(shap)r(e)g(functions)h(no)n(w)f(are)g(in)h(2d)1037
-4836 y Fs(P)1102 4802 y Fq(k)1165 4836 y Fz(=)1253 4719
-y Fl(\032)1318 4836 y Fz(^)-45 b Fx(u)p 1315 4849 48
-4 v 23 w Fz(=)1473 4719 y Fl(\022)1581 4786 y Fz(^)e
-Fx(u)1624 4798 y Fp(1)1581 4885 y Fz(^)g Fx(u)1624 4897
-y Fp(2)1702 4719 y Fl(\023)1787 4836 y Fz(:)111 b(^)-47
-b Fx(u)1964 4848 y Fp(1)2023 4836 y Fs(2)24 b(Q)2170
-4848 y Fq(k)q Fh(\000)p Fp(1)p Fq(;k)2366 4836 y Fx(;)19
-b Fz(^)-47 b Fx(u)2451 4848 y Fp(2)2511 4836 y Fs(2)23
-b(Q)2657 4848 y Fq(k)q(;k)q Fh(\000)p Fp(1)2839 4719
-y Fl(\033)2929 4836 y Fx(;)862 b Fz(\(22\))28 5053 y(and)27
-b(in)h(3d)686 5232 y Fs(P)751 5197 y Fq(k)814 5232 y
-Fz(=)902 5062 y Fl(8)902 5136 y(<)902 5286 y(:)979 5232
-y Fz(^)-45 b Fx(u)p 976 5245 V 22 w Fz(=)1134 5065 y
-Fl(0)1134 5214 y(@)1253 5131 y Fz(^)e Fx(u)1296 5143
-y Fp(1)1253 5231 y Fz(^)g Fx(u)1296 5243 y Fp(2)1253
-5330 y Fz(^)g Fx(u)1296 5342 y Fp(3)1374 5065 y Fl(1)1374
-5214 y(A)1470 5232 y Fz(:)111 b(^)-47 b Fx(u)1647 5244
-y Fp(1)1707 5232 y Fs(2)23 b(Q)1853 5244 y Fq(k)q Fh(\000)p
-Fp(1)p Fq(;k)q(;k)2106 5232 y Fx(;)c Fz(^)-47 b Fx(u)2191
-5244 y Fp(2)2250 5232 y Fs(2)24 b(Q)2397 5244 y Fq(k)q(;k)q
-Fh(\000)p Fp(1)p Fq(;k)2649 5232 y Fx(;)19 b Fz(^)-47
-b Fx(u)2734 5244 y Fp(3)2794 5232 y Fs(2)23 b(Q)2940
-5244 y Fq(k)q(;k)q(;k)q Fh(\000)p Fp(1)3179 5062 y Fl(9)3179
-5136 y(=)3179 5286 y(;)3280 5232 y Fx(:)511 b Fz(\(23\))28
-5469 y(W)-7 b(e)28 b(renounce)e(an)i(example,)f(since)g(it)h(is)g
-(quite)g(eviden)n(t,)f(what)h(these)f(spaces)g(lo)r(ok)g(lik)n(e)g(for)
-g(a)g(sp)r(eci\014c)h Fx(k)s Fz(.)1949 5719 y Fk(10)p
-eop
-%%Page: 11 11
-11 10 bop 28 213 a Fo(2.2.2)105 b(Degrees)35 b(of)g(freedom)g(on)g(the)
-f(reference)h(elemen)m(t)28 366 y Fz(W)-7 b(e)28 b(start)f(with)h(the)g
-(degrees)e(of)h(freedoms)g(on)h(the)g(reference)e(square)2323
-345 y(^)2305 366 y Fx(C)j Fs(\032)23 b Fr(R)2535 336
-y Fp(2)2578 366 y Fz(:)28 540 y Fn(Definition)28 b Fz(8)45
-b Fm(L)l(et)748 519 y Fz(^)729 540 y Fx(C)c Fm(denote)35
-b(the)g(r)l(efer)l(enc)l(e)h(squar)l(e)e(and)2021 525
-y Fz(^)2027 540 y Fx(t)p 2027 553 30 4 v 34 w Fm(the)h(tangent)g(as)g
-(de\014ne)l(d)g(in)g(c)l(onvention)g(1.)54 b(The)36 b(set)e(of)28
-640 y(de)l(gr)l(e)l(es)c(of)g(fr)l(e)l(e)l(dom)h Fs(A)f
-Fm(on)g Fs(P)993 610 y Fq(k)1063 640 y Fm(in)g(the)g(2d)g(c)l(ase)g(c)l
-(onsists)g(of)h(the)e(line)l(ar)i(functionals)28 789
-y Fy(edge)g(dofs)1409 927 y Fz(^)-51 b Fx(\013)q Fz(\()s(^)-45
-b Fx(u)p 1486 940 48 4 v Fz(\))23 b(:=)1700 814 y Fl(Z)1749
-1002 y Fp(^)-36 b Fq(e)1781 927 y Fz(\()1807 911 y(^)1813
-927 y Fx(t)p 1813 940 30 4 v 19 w Fs(\001)22 b Fz(^)-45
-b Fx(u)p 1904 940 48 4 v -1 w Fz(\))28 b(^)-56 b Fx(')14
-b(d)s Fz(^)-45 b Fx(s)14 b(;)99 b Fs(8)27 b Fz(^)-55
-b Fx(')23 b Fs(2)g Fr(P)2551 939 y Fq(k)q Fh(\000)p Fp(1)2676
-927 y Fz(\()s(^)-45 b Fx(e)o Fz(\))14 b Fx(;)255 1139
-y Fm(for)30 b(every)h(e)l(dge)j Fz(^)-45 b Fx(e)29 b
-Fm(of)974 1118 y Fz(^)955 1139 y Fx(C)7 b Fm(.)38 b(We)30
-b(have)h(a)f(total)g(of)h Fz(4)p Fx(k)h Fm(of)e(e)l(dge)h(dofs.)28
-1289 y Fy(inner)g(dofs)758 1417 y Fz(^)-50 b Fx(\013)p
-Fz(\()s(^)-45 b Fx(u)p 835 1430 V Fz(\))23 b(:=)1049
-1304 y Fl(Z)1110 1478 y Fp(^)1095 1493 y Fq(C)1168 1417
-y Fz(^)-45 b Fx(u)p 1165 1430 V 18 w Fs(\001)25 b Fz(^)-49
-b Fx(')p 1272 1447 55 4 v 14 w(d)5 b Fz(^)-47 b Fx(x)15
-b(;)99 b Fs(8)19 b Fz(^)-47 b Fx(')p 1628 1447 V 22 w
-Fz(=)1792 1300 y Fl(\022)1908 1367 y Fz(^)-56 b Fx(')1948
-1379 y Fp(1)1908 1466 y Fz(^)g Fx(')1948 1478 y Fp(2)2027
-1300 y Fl(\023)2116 1417 y Fx(;)112 b Fz(^)-55 b Fx(')2292
-1429 y Fp(1)2352 1417 y Fs(2)24 b(Q)2499 1429 y Fq(k)q
-Fh(\000)p Fp(2)p Fq(;k)q Fh(\000)p Fp(1)2780 1417 y Fx(;)112
-b Fz(^)-56 b Fx(')2955 1429 y Fp(2)3016 1417 y Fs(2)24
-b(Q)3163 1429 y Fq(k)q Fh(\000)p Fp(1)p Fq(;k)q Fh(\000)p
-Fp(2)3443 1417 y Fx(:)255 1616 y Fm(We)30 b(have)h(a)f(total)g(of)g
-Fz(2)p Fx(k)s Fz(\()p Fx(k)21 b Fs(\000)d Fz(1\))30 b
-Fm(of)g(inner)g(dofs.)28 1816 y Fn(Definition)e Fz(9)45
-b Fm(L)l(et)741 1795 y Fz(^)722 1816 y Fx(C)33 b Fm(denote)28
-b(the)g(r)l(efer)l(enc)l(e)g(cub)l(e,)1763 1800 y Fz(^)1769
-1816 y Fx(t)p 1769 1829 30 4 v 27 w Fm(the)g(tangent)e(to)i(an)f(e)l
-(dge)h(as)g(de\014ne)l(d)g(in)f(c)l(onvention)h(1)g(and)k
-Fz(^)-46 b Fx(n)p 3776 1829 50 4 v 27 w Fm(the)28 1915
-y(outwar)l(d)32 b(unit)g(normal)h(ve)l(ctor)f(to)g(a)h(fac)l(e.)47
-b(The)34 b(set)e(of)h(de)l(gr)l(e)l(es)f(of)h(fr)l(e)l(e)l(dom)h
-Fs(A)e Fm(on)g Fs(P)2827 1885 y Fq(k)2900 1915 y Fm(in)g(the)h(3d)g(c)l
-(ase)g(c)l(onsists)f(of)h(the)28 2015 y(line)l(ar)d(functionals)28
-2164 y Fy(edge)h(dofs)1409 2302 y Fz(^)-51 b Fx(\013)q
-Fz(\()s(^)-45 b Fx(u)p 1486 2315 48 4 v Fz(\))23 b(:=)1700
-2189 y Fl(Z)1749 2377 y Fp(^)-36 b Fq(e)1781 2302 y Fz(\()1807
-2287 y(^)1813 2302 y Fx(t)p 1813 2315 30 4 v 19 w Fs(\001)22
-b Fz(^)-45 b Fx(u)p 1904 2315 48 4 v -1 w Fz(\))28 b(^)-56
-b Fx(')14 b(d)s Fz(^)-45 b Fx(s)14 b(;)99 b Fs(8)27 b
-Fz(^)-55 b Fx(')23 b Fs(2)g Fr(P)2551 2314 y Fq(k)q Fh(\000)p
-Fp(1)2676 2302 y Fz(\()s(^)-45 b Fx(e)o Fz(\))14 b Fx(;)255
-2514 y Fm(for)30 b(every)h(e)l(dge)j Fz(^)-45 b Fx(e)29
-b Fm(of)974 2493 y Fz(^)955 2514 y Fx(C)7 b Fm(.)38 b(We)30
-b(have)h(a)f(total)g(of)h Fz(12)p Fx(k)g Fm(of)g(e)l(dge)f(dofs.)28
-2664 y Fy(face)i(dofs)556 2875 y Fz(^)-51 b Fx(\013)q
-Fz(\()s(^)-45 b Fx(u)p 633 2888 V -1 w Fz(\))24 b(:=)847
-2762 y Fl(Z)906 2936 y Fp(^)893 2951 y Fq(f)936 2875
-y Fz(\()s(^)-45 b Fx(u)p 968 2888 V 18 w Fs(^)23 b Fz(^)-46
-b Fx(n)p 1108 2888 50 4 v Fz(\))18 b Fs(\001)25 b Fz(^)-48
-b Fx(')p 1250 2905 55 4 v 14 w(d)q Fz(^)-43 b Fx(a)14
-b(;)99 b Fs(8)19 b Fz(^)-47 b Fx(')p 1602 2905 V 22 w
-Fz(=)1766 2758 y Fl(\022)1882 2825 y Fz(^)-56 b Fx(')1922
-2837 y Fp(1)1882 2924 y Fz(^)g Fx(')1922 2936 y Fp(2)2001
-2758 y Fl(\023)2090 2875 y Fx(;)112 b Fz(^)-55 b Fx(')2266
-2887 y Fp(1)2327 2875 y Fs(2)23 b(Q)2473 2887 y Fq(k)q
-Fh(\000)p Fp(2)p Fq(;k)q Fh(\000)p Fp(1)2740 2875 y Fz(\()2790
-2853 y(^)2772 2875 y Fx(f)9 b Fz(\))14 b Fx(;)112 b Fz(^)-55
-b Fx(')3044 2887 y Fp(2)3104 2875 y Fs(2)24 b(Q)3251
-2887 y Fq(k)q Fh(\000)p Fp(1)p Fq(;k)q Fh(\000)p Fp(2)3518
-2875 y Fz(\()3568 2853 y(^)3550 2875 y Fx(f)9 b Fz(\))14
-b Fx(:)255 3133 y Fm(for)30 b(every)h(fac)l(e)795 3111
-y Fz(^)777 3133 y Fx(f)38 b Fm(of)972 3112 y Fz(^)954
-3133 y Fx(C)6 b Fm(.)39 b(We)29 b(have)i(a)f(total)g(of)h
-Fz(6)18 b Fs(\001)h Fz(2)p Fx(k)s Fz(\()p Fx(k)h Fs(\000)e
-Fz(1\))30 b Fm(of)h(fac)l(e)f(dofs.)28 3283 y Fy(inner)h(dofs)263
-3544 y Fz(^)-50 b Fx(\013)p Fz(\()s(^)-45 b Fx(u)p 340
-3557 48 4 v Fz(\))23 b(:=)554 3431 y Fl(Z)615 3605 y
-Fp(^)600 3620 y Fq(C)673 3544 y Fz(^)-45 b Fx(u)p 670
-3557 V -1 w Fs(\001)6 b Fz(^)-48 b Fx(')p 740 3574 55
-4 v 15 w(d)5 b Fz(^)-47 b Fx(x)14 b(;)99 b Fs(8)19 b
-Fz(^)-47 b Fx(')p 1096 3574 V 22 w Fz(=)1260 3377 y Fl(0)1260
-3527 y(@)1387 3444 y Fz(^)-55 b Fx(')1428 3456 y Fp(1)1387
-3543 y Fz(^)g Fx(')1428 3555 y Fp(2)1387 3643 y Fz(^)g
-Fx(')1428 3655 y Fp(3)1507 3377 y Fl(1)1507 3527 y(A)1607
-3544 y Fx(;)113 b Fz(^)-56 b Fx(')1783 3556 y Fp(1)1844
-3544 y Fs(2)23 b(Q)1990 3556 y Fq(k)q Fh(\000)p Fp(1)p
-Fq(;k)q Fh(\000)p Fp(2)p Fq(;k)q Fh(\000)p Fp(2)2412
-3544 y Fx(;)124 b Fz(^)-67 b Fx(')2588 3556 y Fp(2)2649
-3544 y Fs(2)23 b(Q)2795 3556 y Fq(k)q Fh(\000)p Fp(2)p
-Fq(;k)q Fh(\000)p Fp(1)p Fq(;k)q Fh(\000)p Fp(2)3218
-3544 y Fx(;)123 b Fz(^)-67 b Fx(')3393 3556 y Fp(3)3454
-3544 y Fs(2)23 b(Q)3600 3556 y Fq(k)q Fh(\000)p Fp(2)p
-Fq(;k)q Fh(\000)p Fp(2)p Fq(;k)q Fh(\000)p Fp(1)4023
-3544 y Fx(:)255 3832 y Fm(We)30 b(have)h(a)f(total)g(of)g
-Fz(3)p Fx(k)s Fz(\()p Fx(k)21 b Fs(\000)d Fz(1\))1298
-3802 y Fp(2)1365 3832 y Fm(of)31 b(inner)e(dofs.)28 4031
-y Fn(Example)e Fz(4)45 b Fm(Pr)l(o)l(c)l(e)l(e)l(ding)d(the)f(same)g
-(way)h(as)g(in)f(example)h(3)f(for)h(a)g(triangular)f(r)l(efer)l(enc)l
-(e)h(element,)i(we)d(obtain)h(the)28 4131 y(r)l(efer)l(enc)l(e)30
-b(shap)l(e)h(functions)e(of)i(lowest)f(or)l(der)h(on)e(the)h(squar)l(e)
-g Fz([0)p Fx(;)14 b Fz(1])2209 4101 y Fp(2)2245 4131
-y Fm(.)39 b(F)-6 b(or)30 b(the)g(unit)f(tangents)g(as)h(in)g(c)l
-(onvention)g(1)825 4348 y Fz(^)831 4363 y Fx(t)p 831
-4376 30 4 v 21 x Fp(0)921 4363 y Fz(=)1009 4246 y Fl(\022)1111
-4312 y Fz(1)1111 4412 y(0)1195 4246 y Fl(\023)1283 4363
-y Fx(;)1399 4348 y Fz(^)1405 4363 y Fx(t)p 1405 4376
-V 21 x Fp(1)1495 4363 y Fz(=)1583 4246 y Fl(\022)1686
-4312 y Fz(0)1686 4412 y(1)1769 4246 y Fl(\023)1857 4363
-y Fx(;)1973 4348 y Fz(^)1979 4363 y Fx(t)p 1979 4376
-V 21 x Fp(2)2069 4363 y Fz(=)2157 4246 y Fl(\022)2260
-4312 y Fs(\000)p Fz(1)2292 4412 y(0)2407 4246 y Fl(\023)2496
-4363 y Fx(;)2612 4348 y Fz(^)2618 4363 y Fx(t)p 2618
-4376 V 21 x Fp(3)2708 4363 y Fz(=)2796 4246 y Fl(\022)2931
-4312 y Fz(0)2898 4412 y Fs(\000)p Fz(1)3046 4246 y Fl(\023)3135
-4363 y Fx(;)28 4591 y Fm(they)g(r)l(e)l(ad)638 4715 y
-Fz(^)621 4736 y Fx(N)p 621 4749 76 4 v 696 4757 a Fp(0)757
-4736 y Fz(=)844 4619 y Fl(\022)947 4685 y Fz(1)18 b Fs(\000)24
-b Fz(^)-48 b Fx(y)1019 4785 y Fz(0)1175 4619 y Fl(\023)1264
-4736 y Fx(;)1403 4715 y Fz(^)1386 4736 y Fx(N)p 1386
-4749 V 1461 4757 a Fp(1)1522 4736 y Fz(=)1609 4619 y
-Fl(\022)1715 4685 y Fz(0)1717 4785 y(^)h Fx(x)1801 4619
-y Fl(\023)1890 4736 y Fx(;)2029 4715 y Fz(^)2011 4736
-y Fx(N)p 2011 4749 V 2087 4757 a Fp(2)2148 4736 y Fz(=)2235
-4619 y Fl(\022)2338 4685 y Fs(\000)6 b Fz(^)-48 b Fx(y)2371
-4785 y Fz(0)2488 4619 y Fl(\023)2576 4736 y Fx(;)2715
-4715 y Fz(^)2698 4736 y Fx(N)p 2698 4749 V 2774 4757
-a Fp(3)2834 4736 y Fz(=)2922 4619 y Fl(\022)3099 4685
-y Fz(0)3030 4785 y(^)g Fx(x)19 b Fs(\000)f Fz(1)3256
-4619 y Fl(\023)3345 4736 y Fx(:)446 b Fz(\(24\))28 5002
-y Fo(2.2.3)105 b(T)-9 b(ransformation)34 b(of)h(the)g(v)m(ector)g
-(\014eld)28 5156 y Fz(Since)24 b(the)g(elemen)n(ts)g(of)f(the)i
-(considered)d(grids)h(are)g(still)h(a\016ne)g(images)f(of)h(the)g
-(reference)f(elemen)n(t,)i(w)n(e)e(can)h(use)f(the)i(Piola)28
-5255 y(transformation)j(\(10\))i(to)g(transform)f(v)n(ector)f(\014elds)
-j(and)e(the)i(results)e(stated)h(in)h(sections)e(2.1.3)g({)h(2.1.5)f
-(can)g(b)r(e)i(carried)28 5355 y(o)n(v)n(er)25 b(one)j(to)f(one.)1949
-5719 y Fk(11)p eop
-%%Page: 12 12
-12 11 bop 28 214 a Fv(2.3)112 b Fo(Construction)35 b(of)g(N)n(\023)-50
-b(ed)n(\023)g(elec)35 b(elemen)m(ts)f(on)h(bi-)g(or)g(trilinear)g
-(elemen)m(ts)28 367 y Fz(W)-7 b(e)28 b(no)n(w)f(w)n(an)n(t)g(to)h
-(consider)f(grids)g(that)h(are)f(comp)r(osed)h(of)g(elemen)n(ts)f(that)
-i(are)e(a)g(bi-)h(resp.)37 b(trilinear)27 b(images)g
-Fx(F)3680 379 y Fq(C)3736 367 y Fz(\()3788 346 y(^)3768
-367 y Fx(C)7 b Fz(\))28 b(of)28 467 y(the)f(reference)e(elemen)n(t)842
-446 y(^)823 467 y Fx(C)k Fz(=)23 b([0)p Fx(;)14 b Fz(1])1166
-436 y Fq(d)1204 467 y Fz(.)36 b(The)27 b(main)f(di\013erence)h(here)f
-(is,)h(that)g(the)g(jacobian)2964 446 y(^)2944 467 y
-Fx(D)r(F)3068 479 y Fq(C)3125 467 y Fz(\()5 b(^)-47 b
-Fx(x)p Fz(\))27 b(of)g(the)g(elemen)n(t)f(map)28 566
-y Fx(F)81 578 y Fq(C)164 566 y Fz(is)i(not)g(constan)n(t,)e(and)i(w)n
-(e)f(ha)n(v)n(e)g(to)g(use)g(Piola)g(transformation)f(\(9\))h(to)h
-(transform)e(v)n(ector)h(\014elds.)28 892 y Fo(2.3.1)105
-b(Bilinear)35 b(elemen)m(ts)f(in)h(2d)28 1045 y Fz(The)27
-b(p)r(olynomial)g(spaces)g Fs(P)947 1015 y Fq(k)1015
-1045 y Fz(and)g(the)h(dofs)g(remain)f(the)h(same)f(as)g(in)g(the)h
-(case)f(of)h(a\016ne)f(quadrilateral)f(elemen)n(ts.)28
-1145 y(A)i(transformed)e(v)n(ector)g(\014eld)i(on)f(a)h(general)e
-(elemen)n(t)i(is)f(no)n(w)g(de\014ned)h(b)n(y)f(the)h(Piola)f
-(transformation)f(\(9\))1501 1308 y Fx(v)p 1501 1321
-44 4 v 4 w Fz(\()p Fx(x)p Fz(\))e(=)e(\()1819 1287 y(^)1799
-1308 y Fx(D)s(F)1936 1273 y Fh(\000)p Fq(T)1924 1333
-y(C)2041 1308 y Fz(^)-43 b Fx(v)p 2040 1321 V 2083 1329
-a Fq(i)2111 1308 y Fz(\))18 b Fs(\016)g Fx(F)2286 1273
-y Fh(\000)p Fp(1)2274 1333 y Fq(C)2375 1308 y Fz(\()p
-Fx(x)p Fz(\))28 1484 y(of)32 b(a)g(v)n(ector)f(\014eld)i(on)f(the)h
-(reference)f(elemen)n(t.)51 b(Note)33 b(that)g(the)g(jacobian)2508
-1463 y(^)2488 1484 y Fx(D)r(F)2612 1496 y Fq(C)2669 1484
-y Fz(\()5 b(^)-47 b Fx(x)p Fz(\))33 b(is)g(not)f(constan)n(t)g(in)h
-(this)f(case.)51 b(In)28 1584 y(con)n(trast)27 b(to)i(the)g(case)f(of)g
-(a\016ne)h(elemen)n(ts,)g(the)g(gradien)n(t)e Fx(D)r(v)p
-1997 1597 V 33 w Fz(do)r(es)h(not)h(transform)e(according)g(to)i(form)n
-(ula)f(\(12\).)40 b(Non-)28 1683 y(v)-5 b(anishing)26
-b(second)g(deriv)-5 b(ativ)n(es)26 b(of)1187 1662 y(^)1167
-1683 y Fx(D)r(F)1291 1695 y Fq(C)1348 1683 y Fz(\()5
-b(^)-47 b Fx(x)p Fz(\))28 b(app)r(ear)d(in)i(the)g(transformation)f
-(rule)g(for)g(gradien)n(ts)g(of)g(v)n(ector)g(\014elds.)36
-b(This)28 1797 y(requires)26 b(a)h(new)h(approac)n(h)e(to)i(express)e
-(curl)14 b Fx(v)p 1482 1810 V 31 w Fz(in)28 b(terms)g(of)1986
-1775 y Fl(d)1976 1797 y Fz(curl)15 b(^)-43 b Fx(v)p 2129
-1810 V 3 w Fz(.)38 b(Nev)n(ertheless,)26 b(it)j(can)e(b)r(e)h(sho)n(wn)
-f(that)h(the)h(curl)e(of)h(a)28 1896 y(v)n(ector)e(\014eld)i
-(transforms)e(analogously)f(to)j(the)g(case)e(of)i(a\016ne)f(elemen)n
-(ts.)28 2073 y Fn(Pr)n(oposition)g Fz(5)45 b Fm(L)l(et)809
-2052 y Fz(^)790 2073 y Fx(C)39 b Fm(b)l(e)32 b(the)h(r)l(efer)l(enc)l
-(e)f(element)g Fz([0)p Fx(;)14 b Fz(1])1962 2043 y Fp(2)2031
-2073 y Fm(and)32 b Fx(C)39 b Fm(a)32 b(biline)l(ar)i(image)f(of)3030
-2052 y Fz(^)3011 2073 y Fx(C)7 b Fm(.)46 b(If)32 b(the)h(ve)l(ctor)f
-(\014eld)h Fx(v)p 3806 2086 V 3 w Fz(\()p Fx(x)p Fz(\))28
-2173 y Fm(tr)l(ansforms)c(ac)l(c)l(or)l(ding)i(to)f(the)g(Piola)i(tr)l
-(ansformation)e(\(9\),)h(then)e(the)h(tr)l(ansformation)h(of)f(the)g
-(curl)g(ob)l(eys)1126 2350 y Fz(curl)13 b Fx(v)p 1278
-2363 V 3 w Fz(\()p Fx(x)p Fz(\))24 b(=)f(\(det)1725 2329
-y(^)1706 2350 y Fx(D)r(F)12 b Fz(\))1874 2316 y Fh(\000)p
-Fp(1)1972 2328 y Fl(d)1963 2350 y Fz(curl)i(^)-43 b Fx(v)p
-2115 2363 V 4 w Fz(\()5 b(^)-47 b Fx(x)p Fz(\))14 b Fx(;)184
-b(x)24 b Fz(=)e Fx(F)12 b Fz(\()5 b(^)-47 b Fx(x)q Fz(\))14
-b Fx(;)28 2514 y Fm(as)30 b(in)f(the)h(a\016ne)h(c)l(ase.)28
-2791 y Fn(Pr)n(oof.)40 b Fz(In)28 b(this)g(pro)r(of,)f(the)h(mapp)r(ed)
-g(elemen)n(t)f Fx(C)34 b Fz(will)28 b(b)r(e)g(\014xed,)g(so)f(for)g
-(simplicit)n(y)g(w)n(e)h(write)f Fx(F)40 b Fz(for)27
-b Fx(F)3428 2803 y Fq(C)3484 2791 y Fz(.)28 2890 y(First)37
-b(note)g(that)h(\()675 2869 y(^)656 2890 y Fx(D)r(F)12
-b Fz(\()p Fx(F)889 2860 y Fh(\000)p Fp(1)978 2890 y Fz(\()p
-Fx(x)p Fz(\)\)\))1153 2860 y Fh(\000)p Fp(1)1283 2890
-y Fz(=)39 b Fx(D)r Fz(\()p Fx(F)1555 2860 y Fh(\000)p
-Fp(1)1645 2890 y Fz(\)\()p Fx(x)p Fz(\).)67 b(W)-7 b(e)38
-b(use)f(the)h(notation)f Fx(D)r Fz(\()p Fx(F)2847 2860
-y Fh(\000)p Fp(1)2936 2890 y Fz(\))2968 2902 y Fq(ij)3027
-2890 y Fz(\()p Fx(x)p Fz(\))j(=)3295 2856 y Fq(@)8 b
-Fp(^)-37 b Fq(x)3372 2864 y Ff(i)p 3292 2871 108 4 v
-3292 2919 a Fq(@)t(x)3369 2927 y Ff(j)3410 2890 y Fz(\()p
-Fx(x)p Fz(\))38 b(and)g(imlicit)28 3001 y(summation)27
-b(to)g(rewrite)g(the)h(Piola)f(transformation)f(of)h(the)h(v)n(ector)e
-(\014eld)i(comp)r(onen)n(t)n(wise)1250 3204 y Fx(v)1290
-3216 y Fq(i)1318 3204 y Fz(\()p Fx(x)p Fz(\))c(=)1550
-3148 y Fx(@)10 b Fz(^)-47 b Fx(x)1646 3160 y Fq(j)p 1550
-3185 132 4 v 1554 3261 a Fx(@)5 b(x)1650 3273 y Fq(i)1691
-3204 y Fz(\()p Fx(x)p Fz(\))16 b(^)-44 b Fx(v)p 1816
-3217 44 4 v 1861 3225 a Fq(j)1895 3204 y Fz(\()p Fx(F)1992
-3170 y Fh(\000)p Fp(1)2082 3204 y Fz(\()p Fx(x)p Fz(\)\))14
-b Fx(;)181 b(i)23 b Fz(=)f(1)p Fx(;)14 b Fz(2)g Fx(:)28
-3404 y Fz(In)27 b(the)h(case)f(of)h(a\016ne)f(elemen)n(ts,)h(i.)f(e.)h
-(for)f(constan)n(t)g(jacobian,)g(w)n(e)g(ha)n(v)n(e)1441
-3634 y Fx(@)5 b(v)1530 3646 y Fp(2)p 1437 3671 134 4
-v 1437 3747 a Fx(@)g(x)1533 3759 y Fp(1)1603 3690 y Fz(=)1706
-3634 y Fx(@)10 b Fz(^)-47 b Fx(x)1802 3646 y Fq(i)p 1701
-3671 V 1701 3747 a Fx(@)5 b(x)1797 3759 y Fp(2)1844 3690
-y Fz(\()p Fx(x)p Fz(\))2022 3634 y Fx(@)p 1980 3671 V
-1980 3747 a(@)g(x)2076 3759 y Fp(1)2124 3690 y Fz(^)-43
-b Fx(v)p 2123 3703 44 4 v 2167 3711 a Fq(i)2194 3690
-y Fz(\()p Fx(F)2291 3656 y Fh(\000)p Fp(1)2381 3690 y
-Fz(\()p Fx(x)p Fz(\)\))1441 3850 y Fx(@)5 b(v)1530 3862
-y Fp(1)p 1437 3887 134 4 v 1437 3963 a Fx(@)g(x)1533
-3975 y Fp(2)1603 3906 y Fz(=)1706 3850 y Fx(@)10 b Fz(^)-47
-b Fx(x)1802 3862 y Fq(i)p 1701 3887 V 1701 3963 a Fx(@)5
-b(x)1797 3975 y Fp(1)1844 3906 y Fz(\()p Fx(x)p Fz(\))2022
-3850 y Fx(@)p 1980 3887 V 1980 3963 a(@)g(x)2076 3975
-y Fp(2)2124 3906 y Fz(^)-43 b Fx(v)p 2123 3919 44 4 v
-2167 3927 a Fq(i)2194 3906 y Fz(\()p Fx(F)2291 3872 y
-Fh(\000)p Fp(1)2381 3906 y Fz(\()p Fx(x)p Fz(\)\))14
-b Fx(;)28 4106 y Fz(whereas)26 b(for)h(non-constan)n(t)f(jacobian)h(w)n
-(e)g(ha)n(v)n(e)983 4346 y Fx(@)5 b(v)1072 4358 y Fp(2)p
-979 4383 134 4 v 979 4459 a Fx(@)g(x)1075 4471 y Fp(1)1146
-4402 y Fz(=)1296 4346 y Fx(@)1345 4316 y Fp(2)1387 4346
-y Fz(^)-47 b Fx(x)1429 4358 y Fq(i)p 1243 4383 267 4
-v 1243 4459 a Fx(@)5 b(x)1339 4471 y Fp(1)1377 4459 y
-Fx(@)g(x)1473 4471 y Fp(2)1520 4402 y Fz(\()p Fx(x)p
-Fz(\))16 b(^)-44 b Fx(v)p 1645 4415 44 4 v 1689 4423
-a Fq(i)1717 4402 y Fz(\()p Fx(F)1814 4368 y Fh(\000)p
-Fp(1)1903 4402 y Fz(\()p Fx(x)p Fz(\)\))20 b(+)2163 4346
-y Fx(@)10 b Fz(^)-47 b Fx(x)2259 4358 y Fq(i)p 2159 4383
-134 4 v 2159 4459 a Fx(@)5 b(x)2255 4471 y Fp(2)2302
-4402 y Fz(\()p Fx(x)p Fz(\))2480 4346 y Fx(@)p 2438 4383
-V 2438 4459 a(@)g(x)2534 4471 y Fp(1)2582 4402 y Fz(^)-43
-b Fx(v)p 2581 4415 44 4 v 2624 4423 a Fq(i)2652 4402
-y Fz(\()p Fx(F)2749 4368 y Fh(\000)p Fp(1)2838 4402 y
-Fz(\()p Fx(x)p Fz(\)\))983 4572 y Fx(@)5 b(v)1072 4584
-y Fp(1)p 979 4609 134 4 v 979 4685 a Fx(@)g(x)1075 4697
-y Fp(2)1146 4628 y Fz(=)1296 4572 y Fx(@)1345 4542 y
-Fp(2)1387 4572 y Fz(^)-47 b Fx(x)1429 4584 y Fq(i)p 1243
-4609 267 4 v 1243 4685 a Fx(@)5 b(x)1339 4697 y Fp(1)1377
-4685 y Fx(@)g(x)1473 4697 y Fp(2)1520 4628 y Fz(\()p
-Fx(x)p Fz(\))16 b(^)-44 b Fx(v)p 1645 4641 44 4 v 1689
-4649 a Fq(i)1717 4628 y Fz(\()p Fx(F)1814 4594 y Fh(\000)p
-Fp(1)1903 4628 y Fz(\()p Fx(x)p Fz(\)\))20 b(+)2163 4572
-y Fx(@)10 b Fz(^)-47 b Fx(x)2259 4584 y Fq(i)p 2159 4609
-134 4 v 2159 4685 a Fx(@)5 b(x)2255 4697 y Fp(1)2302
-4628 y Fz(\()p Fx(x)p Fz(\))2480 4572 y Fx(@)p 2438 4609
-V 2438 4685 a(@)g(x)2534 4697 y Fp(2)2582 4628 y Fz(^)-43
-b Fx(v)p 2581 4641 44 4 v 2624 4649 a Fq(i)2652 4628
-y Fz(\()p Fx(F)2749 4594 y Fh(\000)p Fp(1)2838 4628 y
-Fz(\()p Fx(x)p Fz(\)\))14 b Fx(:)28 4828 y Fz(W)-7 b(e)28
-b(see)f(that)h(in)g Fm(b)l(oth)34 b Fz(cases)26 b(w)n(e)i(ha)n(v)n(e)
-690 5014 y(curl)14 b Fx(v)p 843 5027 V 26 w Fz(=)1010
-4958 y Fx(@)5 b(v)1099 4970 y Fp(2)p 1007 4995 134 4
-v 1007 5071 a Fx(@)g(x)1103 5083 y Fp(1)1168 5014 y Fs(\000)1265
-4958 y Fx(@)g(v)1354 4970 y Fp(1)p 1261 4995 V 1261 5071
-a Fx(@)g(x)1357 5083 y Fp(2)1428 5014 y Fz(=)1530 4958
-y Fx(@)10 b Fz(^)-47 b Fx(x)1626 4970 y Fq(i)p 1525 4995
-V 1525 5071 a Fx(@)5 b(x)1621 5083 y Fp(2)1669 5014 y
-Fz(\()p Fx(x)p Fz(\))1847 4958 y Fx(@)p 1804 4995 V 1804
-5071 a(@)g(x)1900 5083 y Fp(1)1949 5014 y Fz(^)-43 b
-Fx(v)p 1948 5027 44 4 v 1991 5035 a Fq(i)2019 5014 y
-Fz(\()p Fx(F)2116 4980 y Fh(\000)p Fp(1)2205 5014 y Fz(\()p
-Fx(x)p Fz(\)\))20 b Fs(\000)2466 4958 y Fx(@)10 b Fz(^)-47
-b Fx(x)2562 4970 y Fq(i)p 2461 4995 134 4 v 2461 5071
-a Fx(@)5 b(x)2557 5083 y Fp(1)2604 5014 y Fz(\()p Fx(x)p
-Fz(\))2782 4958 y Fx(@)p 2740 4995 V 2740 5071 a(@)g(x)2836
-5083 y Fp(2)2884 5014 y Fz(^)-43 b Fx(v)p 2883 5027 44
-4 v 2926 5035 a Fq(i)2954 5014 y Fz(\()p Fx(F)3051 4980
-y Fh(\000)p Fp(1)3140 5014 y Fz(\()p Fx(x)p Fz(\)\))28
-5214 y(that)33 b(is,)i(the)e(second)g(deriv)-5 b(ativ)n(es)32
-b(cancel)h(out)g(in)g(the)h(expression)e(for)h(the)g(curl)g(and)g(the)h
-(curl)f(in)g(the)h(non-a\016ne)e(case)28 5314 y(transforms)26
-b(equally)h(to)g(the)h(curl)f(in)h(the)g(a\016ne)g(case.)3897
-5469 y Fg(\003)1949 5719 y Fk(12)p eop
-%%Page: 13 13
-13 12 bop 28 213 a Fo(2.3.2)105 b(T)-9 b(rilinear)35
-b(elemen)m(ts)f(in)h(3d)28 366 y Fz(The)27 b(p)r(olynomial)g(spaces)g
-Fs(P)947 336 y Fq(k)1015 366 y Fz(and)g(the)h(dofs)g(remain)f(the)h
-(same)f(as)g(in)g(the)h(case)f(of)h(a\016ne)f(hexahedral)f(elemen)n
-(ts.)28 465 y(The)h(v)n(ector)g(\014eld)g(on)h(a)f(genereal)f(elemen)n
-(t)i(is)f(de\014ned)h(b)n(y)f(the)h(Piola)f(transformation)f(\(9\).)28
-565 y(The)h(problem)g(of)g(the)h(non-v)-5 b(anishing)26
-b(second)h(deriv)-5 b(ativ)n(es)26 b(of)h(the)h(jacobian)e
-Fx(D)r Fz(\()p Fx(F)2701 530 y Fh(\000)p Fp(1)2689 589
-y Fq(C)2791 565 y Fz(\)\()p Fx(x)p Fz(\))j(arises)c(again,)i(and)g(w)n
-(e)g(cannot)28 665 y(generalize)f(the)i(results)f(from)g(the)h(a\016ne)
-f(case)g(straigh)n(t)f(a)n(w)n(a)n(y)-7 b(.)28 764 y(But)30
-b(analogously)e(to)i(the)g(2d)g(case,)g(one)g(can)g(c)n(hec)n(k)f(that)
-i(in)f(in)g(the)h(transformation)e(rule)g(for)h(expressions)3597
-730 y Fq(@)t(v)3669 738 y Ff(i)p 3592 745 108 4 v 3592
-793 a Fq(@)t(x)3669 801 y Ff(j)3730 764 y Fs(\000)3825
-722 y Fq(@)t(v)3897 730 y Ff(j)p 3825 745 104 4 v 3825
-793 a Fq(@)t(x)3902 801 y Ff(i)3938 764 y Fz(,)28 875
-y Fx(i;)14 b(j)27 b Fz(=)c(1)p Fx(;)14 b Fz(2)p Fx(;)g
-Fz(3,)21 b(whic)n(h)f(de\014ne)i(the)f(curl-op)r(erator,)f(the)h(terms)
-g(con)n(taining)f(second)h(deriv)-5 b(ativ)n(es)19 b(v)-5
-b(anish.)35 b(W)-7 b(e)21 b(ha)n(v)n(e)f(therefore)28
-975 y(again)26 b(the)i(transformation)e(rule)h(\(16\))g(for)g(the)h(sk)
-n(ew)f(matrix)g(Curl)14 b Fx(v)26 b Fz(=)d Fx(D)r(v)2482
-945 y Fq(T)2553 975 y Fs(\000)18 b Fx(D)r(v)s Fz(:)391
-1155 y(Curl)13 b Fx(v)s Fz(\()p Fx(x)p Fz(\))25 b(=)d(\(\()916
-1134 y(^)896 1155 y Fx(D)s(F)1033 1119 y Fh(\000)p Fq(T)1021
-1179 y(C)1158 1133 y Fl(d)1137 1155 y Fz(Curl)17 b(^)-45
-b Fx(v)1389 1134 y Fz(^)1370 1155 y Fx(D)r(F)1506 1119
-y Fh(\000)p Fp(1)1494 1179 y Fq(C)1595 1155 y Fz(\))18
-b Fs(\016)g Fx(F)1770 1119 y Fh(\000)p Fp(1)1758 1179
-y Fq(C)1859 1155 y Fz(\)\()p Fx(x)p Fz(\))25 b(=)d(\()p
-Fx(D)r(F)2282 1119 y Fh(\000)p Fp(1)2270 1179 y Fq(C)2372
-1155 y Fz(\))2404 1120 y Fq(T)2456 1155 y Fz(\()p Fx(x)p
-Fz(\))14 b(\()2635 1133 y Fl(d)2613 1155 y Fz(Curl)k(^)-45
-b Fx(v)22 b Fs(\016)c Fx(F)2977 1119 y Fh(\000)p Fp(1)2965
-1179 y Fq(C)3066 1155 y Fz(\)\()p Fx(x)p Fz(\))c Fx(D)r(F)3359
-1119 y Fh(\000)p Fp(1)3347 1179 y Fq(C)3449 1155 y Fz(\()p
-Fx(x)p Fz(\))g Fx(:)28 1321 y Fz(It)35 b(follo)n(ws)e(that)i(the)g
-(follo)n(wing)f(prop)r(osition)g(can)g(b)r(e)h(pro)n(v)n(ed)e
-(analogously)g(to)h(the)h(case)f(of)h(a\016ne)f(elemen)n(ts)h
-(\(replace)28 1434 y(there)27 b Fx(B)303 1446 y Fq(C)386
-1434 y Fz(b)n(y)521 1413 y(^)502 1434 y Fx(D)r(F)626
-1446 y Fq(C)682 1434 y Fz(\()709 1408 y(^)714 1434 y(\()q
-Fx(x)p Fz(\)\)\).)28 1592 y Fn(Pr)n(oposition)g Fz(6)45
-b Fm(L)l(et)33 b(the)g(ve)l(ctor)h(\014eld)g Fx(v)p 1364
-1605 44 4 v 3 w Fz(\()p Fx(x)p Fz(\))g Fm(on)g(a)f(triline)l(ar)i
-(image)f Fx(C)i Fz(=)29 b Fx(F)2564 1604 y Fq(C)2620
-1592 y Fz(\()2671 1571 y(^)2652 1592 y Fx(C)7 b Fz(\))34
-b Fm(b)l(e)f(de\014ne)l(d)h(by)g(the)f(Piola)i(tr)l(ansfor-)28
-1692 y(mation)30 b(of)g(a)g(r)l(efer)l(enc)l(e)h(\014eld)g
-Fz(^)-43 b Fx(v)p 1008 1705 V 3 w Fz(\()5 b(^)-47 b Fx(x)q
-Fz(\))30 b Fm(on)1330 1671 y Fz(^)1312 1692 y Fx(C)6
-b Fm(.)38 b(The)31 b(tr)l(ansformation)g(formula)f(for)h(the)f(curl)g
-(then)f(r)l(e)l(ads)1279 1908 y Fz(curl)13 b Fx(v)p 1431
-1921 V 27 w Fz(=)1585 1791 y Fl(\022)1790 1852 y Fz(1)p
-1656 1889 310 4 v 1656 1977 a(det)1805 1956 y(^)1786
-1977 y Fx(D)r(F)1910 1989 y Fq(C)2009 1887 y Fz(^)1990
-1908 y Fx(D)r(F)2114 1920 y Fq(C)2193 1886 y Fl(d)2184
-1908 y Fz(curl)h(^)-43 b Fx(v)p 2336 1921 44 4 v 2379
-1791 a Fl(\023)2459 1908 y Fs(\016)18 b Fx(F)2584 1872
-y Fh(\000)p Fp(1)2572 1932 y Fq(C)2687 1908 y Fx(:)28
-2176 y Fv(2.4)112 b Fo(Construction)35 b(of)g(global)h(shap)s(e)e
-(functions)28 2329 y Fz(In)25 b(the)g(previous)f(sections)g(w)n(e)h(ha)
-n(v)n(e)e(in)n(tro)r(duced)i(function)h(spaces)e(and)g(degrees)g(of)h
-(freedom,)g(whic)n(h,)g(together)f(with)i(the)28 2428
-y(Piola)g(transformation,)h(will)h(allo)n(w)f(us)h(to)g(de\014ne)h(an)e
-Fx(H)7 b Fz(\(curl;)14 b(\012\)-conforming)27 b(\014nite)i(elemen)n(t)f
-(metho)r(d.)39 b(Indeed,)28 b(in)h([8)o(],)28 2528 y(N)n(\023)-39
-b(ed)n(\023)g(elec)24 b(sho)n(ws)h(the)i(in)n(v)-5 b(ariance)25
-b(of)h(the)h(spaces)e Fs(R)1661 2498 y Fq(k)1729 2528
-y Fz(and)h Fs(Q)1957 2498 y Fq(k)2024 2528 y Fz(under)g(Piola)f
-(transformation)g(of)h(the)h(v)n(ector)e(\014eld,)i(as)f(w)n(ell)28
-2628 y(as)e(the)h(unisolv)n(ence)f(of)h(the)g(set)g(of)g(degrees)e(of)i
-(freedom)g Fs(A)g Fz(from)g(sections)f(2.1.2)f(and)i(2.2.2)f(\(for)g
-(details,)i(see)e([8],)h(Section)28 2727 y(1.2,)30 b(Theorem)g(1)g(and)
-h(Section)g(2,)g(Theorem)f(5\).)46 b(This)30 b(leads)g(to)h(the)g(fact)
-g(that)g Fx(H)7 b Fz(\(curl;)14 b(\012\)-conforming)29
-b(global)h(shap)r(e)28 2827 y(functions)24 b(can)f(b)r(e)h(de\014ned)g
-(b)n(y)f(mapping)g(elemen)n(t)n(wise)g(the)h(reference)f(shap)r(e)h
-(functions)g(with)g(the)g(Piola)e(transformation)28 2927
-y Fs(P)86 2939 y Fq(K)149 2927 y Fz(.)42 b(Ho)n(w)n(ev)n(er,)28
-b(w)n(e)h(m)n(ust)h(pa)n(y)e(some)h(care)f(to)h(the)h(orien)n(tation)e
-(of)h(an)g(in)n(terface)g(on)g(whic)n(h)g(the)h(momen)n(ts)f
-(de\014ning)g(the)28 3026 y(degrees)22 b(of)i(freedom)f(are)g(based.)36
-b(F)-7 b(or)23 b(the)h(2d)g(case,)g(w)n(e)f(will)h(illustrate)g(in)g
-(this)g(section)g(ho)n(w)f(w)n(e)g(m)n(ust)h(tak)n(e)g(in)n(to)f
-(accoun)n(t)28 3126 y(the)28 b Fm(orientation)j(of)g(an)f(e)l(dge)35
-b Fz(in)28 b(the)h(de\014nition)f(of)g(the)g(resp)r(ectiv)n(e)f(elemen)
-n(t)h(edge)g(shap)r(e)g(function,)g(in)g(order)f(to)h(get)g(an)28
-3225 y Fx(H)7 b Fz(\(curl)o(;)14 b(\012\)-conforming)27
-b(\014nite)h(elemen)n(t)f(space)g(of)h(global)e(shap)r(e)i(functions.)
-28 3425 y(Let)22 b Fx(K)29 b Fz(=)23 b Fx(F)12 b Fz(\()478
-3404 y(^)456 3425 y Fx(K)5 b Fz(\))23 b(b)r(e)g(an)g(a\016ne)f(or)g
-(bilinear)g(image)g(of)h(a)f(reference)g(elemen)n(t,)i
-Fx(e)e Fz(one)h(of)f(its)h(edges)f(and)k(^)-45 b Fx(e)22
-b Fz(the)h(corresp)r(onding)28 3524 y(edge)k(on)g(the)h(reference)f
-(elemen)n(t.)28 3624 y(Let)20 b(further)h([0)p Fx(;)14
-b Fs(j)p Fx(e)p Fs(j)p Fz(])22 b Fs(3)i Fx(s)f Fs(7!)g
-Fx(x)p 921 3637 48 4 v Fz(\()p Fx(s)p Fz(\))h Fs(2)f
-Fx(e)d Fz(and)h([0)p Fx(;)14 b Fs(j)s Fz(^)-45 b Fx(e)o
-Fs(j)p Fz(])23 b Fs(3)k Fz(^)-45 b Fx(s)23 b Fs(7!)j
-Fz(^)-45 b Fx(x)p 1866 3637 V Fz(\()s(^)g Fx(s)p Fz(\))24
-b Fs(2)i Fz(^)-45 b Fx(e)20 b Fz(b)r(e)h(parametrizations)e(with)i
-(resp)r(ect)f(to)h(the)g(arc)e(length)28 3724 y(of)25
-b Fx(e)h Fz(and)i(^)-45 b Fx(e)26 b Fz(resp)r(ectiv)n(ely)-7
-b(.)35 b(W)-7 b(e)26 b(can)f(assume)g(that)h(these)g(parametrizations)e
-(endo)n(w)h(the)h(edges)f(with)h(a)f(coun)n(terclo)r(c)n(kwise)28
-3823 y(orien)n(tation.)35 b(Then,)28 b(the)g(unit)g(tangen)n(t)f(v)n
-(ectors)f Fx(t)p 1624 3836 30 4 v 28 w Fz(and)1838 3808
-y(^)1843 3823 y Fx(t)p 1843 3836 V 28 w Fz(are)h(giv)n(en)f(b)n(y)2382
-3783 y Fq(dx)p 2417 3794 38 3 v 2382 3804 73 4 v 2385
-3852 a(ds)2492 3823 y Fz(and)2663 3783 y Fq(d)r Fp(^)-35
-b Fq(x)p 2698 3794 38 3 v 2663 3804 73 4 v 2666 3852
-a(d)s Fp(^)f Fq(s)2745 3823 y Fz(.)28 4003 y Fn(Lemma)27
-b Fz(1)45 b Fm(L)l(et)27 b Fz(^)-42 b Fx(v)p 561 4016
-44 4 v 3 w Fz(\()5 b(^)-47 b Fx(x)p Fz(\))28 b Fm(b)l(e)e(a)i(ve)l
-(ctor)f(\014eld)g(on)g(the)g(r)l(efer)l(enc)l(e)g(element)g(and)g
-Fx(v)p 2389 4016 V 3 w Fz(\()p Fx(x)p Fz(\))h Fm(b)l(e)f(the)g(c)l(orr)
-l(esp)l(onding)h(ve)l(ctor)f(\014eld)g(on)g Fx(K)6 b
-Fm(,)28 4102 y(de\014ne)l(d)30 b(by)g(the)g(Piola)h(tr)l(ansformation)g
-(\(9\).)39 b(It)29 b(then)h(holds)1703 4316 y Fx(v)p
-1703 4329 V 21 w Fs(\001)19 b Fx(t)p 1806 4329 30 4 v
-23 w Fz(=)1957 4260 y Fs(j)s Fz(^)-45 b Fx(e)o Fs(j)p
-1957 4297 85 4 v 1957 4373 a(j)p Fx(e)p Fs(j)2051 4316
-y Fz(\()q(^)i Fx(v)p 2083 4329 44 4 v 22 w Fs(\001)2181
-4301 y Fz(^)2187 4316 y Fx(t)p 2187 4329 30 4 v Fz(\))14
-b Fx(;)1528 b Fz(\(25\))28 4531 y Fm(wher)l(e)30 b Fs(j)s
-Fz(^)-45 b Fx(e)p Fs(j)29 b Fm(and)i Fs(j)p Fx(e)p Fs(j)e
-Fm(denote)h(the)g(length)g(of)h(the)f(e)l(dges)j Fz(^)-45
-b Fx(e)30 b Fm(and)g Fx(e)p Fm(.)28 4711 y Fn(Pr)n(oof.)40
-b Fz(With)1288 4833 y(\()p Fx(v)p 1320 4846 44 4 v 3
-w Fz(\()p Fx(x)p Fz(\)\))1506 4845 y Fq(i)1558 4833 y
-Fz(=)23 b(\()p Fx(D)r Fz(\()p Fx(F)1846 4799 y Fh(\000)p
-Fp(1)1936 4833 y Fz(\))1968 4799 y Fq(T)2021 4833 y Fz(^)-43
-b Fx(v)p 2020 4846 V 3 w Fz(\))2095 4845 y Fq(i)2146
-4833 y Fz(=)2244 4777 y Fx(@)10 b Fz(^)-47 b Fx(x)2340
-4789 y Fq(j)p 2244 4814 132 4 v 2248 4890 a Fx(@)5 b(x)2344
-4902 y Fq(i)2385 4833 y Fz(\()p Fx(x)p Fz(\))q(^)-43
-b Fx(v)p 2496 4846 44 4 v 2540 4854 a Fq(j)2575 4833
-y Fz(\()5 b(^)-47 b Fx(x)q Fz(\))28 5013 y(and)32 b(^)-47
-b Fx(x)236 5025 y Fq(j)294 5013 y Fz(=)28 b(^)-47 b Fx(x)429
-5025 y Fq(j)465 5013 y Fz(\()p Fx(x)p 497 5026 48 4 v
-Fz(\()p Fx(s)p Fz(\)\))29 b(and)j(^)-47 b Fx(x)916 5025
-y Fq(j)975 5013 y Fz(=)28 b(^)-48 b Fx(x)1109 5025 y
-Fq(j)1145 5013 y Fz(\()s(^)j Fx(s)p Fz(\()p Fx(s)p Fz(\)\))28
-b(on)g(the)g(edges,)f(w)n(e)g(ha)n(v)n(e)812 5232 y Fx(v)p
-812 5245 44 4 v 21 w Fs(\001)19 b Fx(t)p 915 5245 30
-4 v 23 w Fz(=)k Fx(v)p 1056 5245 44 4 v 21 w Fs(\001)1169
-5176 y Fx(dx)p 1212 5189 48 4 v 1169 5213 91 4 v 1173
-5289 a(ds)1292 5232 y Fz(=)1380 5115 y Fl(\022)1442 5232
-y Fz(^)-43 b Fx(v)p 1441 5245 44 4 v 1484 5253 a Fq(j)1529
-5176 y Fx(@)10 b Fz(^)-47 b Fx(x)1625 5188 y Fq(j)p 1529
-5213 132 4 v 1533 5289 a Fx(@)5 b(x)1629 5301 y Fq(i)1670
-5115 y Fl(\023)1745 5232 y Fz(\()p Fx(x)p Fz(\))1866
-5176 y Fx(dx)1956 5188 y Fq(i)p 1867 5213 119 4 v 1885
-5289 a Fx(ds)2019 5232 y Fz(=)23 b(^)-43 b Fx(v)p 2106
-5245 44 4 v 2150 5253 a Fq(j)2194 5176 y Fx(d)5 b Fz(^)-47
-b Fx(x)2284 5188 y Fq(j)p 2194 5213 126 4 v 2216 5289
-a Fx(ds)2353 5232 y Fz(=)24 b(^)-43 b Fx(v)p 2441 5245
-44 4 v 2484 5253 a Fq(j)2529 5176 y Fx(d)5 b Fz(^)-47
-b Fx(x)2619 5188 y Fq(j)p 2529 5213 126 4 v 2551 5289
-a Fx(d)s Fz(^)i Fx(s)2675 5176 y(d)s Fz(^)g Fx(s)p 2675
-5213 83 4 v 2675 5289 a(ds)2790 5232 y Fz(=)22 b(\()q(^)-43
-b Fx(v)p 2909 5245 44 4 v 22 w Fs(\001)3007 5217 y Fz(^)3013
-5232 y Fx(t)p 3013 5245 30 4 v Fz(\))3085 5176 y Fx(d)s
-Fz(^)e Fx(s)p 3085 5213 83 4 v 3085 5289 a(ds)28 5469
-y Fz(and)27 b(with)388 5437 y Fq(d)s Fp(^)-36 b Fq(s)p
-388 5451 66 4 v 388 5498 a(ds)487 5469 y Fz(=)585 5429
-y Fh(j)s Fp(^)g Fq(e)p Fh(j)p 585 5450 71 4 v 585 5498
-a(j)p Fq(e)p Fh(j)693 5469 y Fz(the)28 b(lemma)g(follo)n(ws.)1949
-5719 y Fk(13)p eop
-%%Page: 14 14
-14 13 bop 3897 205 a Fg(\003)28 380 y Fz(As)27 b(a)g(consequence,)g(w)n
-(e)g(ha)n(v)n(e)28 579 y Fn(Pr)n(oposition)g Fz(7)g(\(In)n(v)-5
-b(ariance)26 b(of)i(the)g(edge)f(dofs\))46 b Fm(L)l(et)27
-b(the)h(ve)l(ctor)g(\014eld)h Fx(v)p 2406 592 44 4 v
-3 w Fz(\()p Fx(x)p Fz(\))g Fm(on)f Fx(K)34 b Fm(b)l(e)28
-b(de\014ne)l(d)g(by)g(the)g(Piola)i(tr)l(ansfor-)28 679
-y(mation)i(\(9\))g(of)h(a)g(r)l(efer)l(enc)l(e)f(ve)l(ctor)g(\014eld)i
-Fz(^)-43 b Fx(v)p 1409 692 V 3 w Fz(\()5 b(^)-47 b Fx(x)q
-Fz(\))32 b Fm(on)1739 658 y Fz(^)1717 679 y Fx(K)5 b
-Fm(.)46 b(Then,)34 b(the)e(functionals)g(\()13 b Fz(edge)30
-b(dofs)p Fm(\))i Fx(\013)3179 649 y Fp([)p Fq(K)t Fp(])3281
-679 y Fz(\()p Fx(u)p 3313 692 48 4 v Fz(\))27 b(:=)3535
-612 y Fl(R)3574 708 y Fq(e)3610 679 y Fz(\()p Fx(v)p
-3642 692 44 4 v 24 w Fs(\001)20 b Fx(t)p 3749 692 30
-4 v Fz(\))p Fx(')14 b(ds)28 778 y Fm(ar)l(e)30 b(invariant)g(in)g(the)g
-(sense)g(of)315 999 y Fx(\013)368 965 y Fp([)p Fq(K)t
-Fp(])470 999 y Fz(\()p Fx(u)p 502 1012 48 4 v -1 w Fz(\))24
-b(=)692 886 y Fl(Z)739 1074 y Fq(e)774 999 y Fz(\()p
-Fx(v)p 806 1012 44 4 v 22 w Fs(\001)19 b Fx(t)p 910 1012
-30 4 v Fz(\))p Fx(')14 b(ds)23 b Fz(=)1233 886 y Fl(Z)1282
-1074 y Fp(^)-36 b Fq(e)1315 999 y Fz(\()q(^)-43 b Fx(v)p
-1347 1012 44 4 v 22 w Fs(\001)1445 983 y Fz(^)1450 999
-y Fx(t)p 1450 1012 30 4 v Fz(\))13 b(^)-55 b Fx(')15
-b(d)s Fz(^)-45 b Fx(s)37 b Fz(=)30 b(^)-50 b Fx(\013)q
-Fz(\()s(^)-45 b Fx(u)p 1873 1012 48 4 v -1 w Fz(\))14
-b Fx(;)184 b Fs(8)26 b Fz(^)-54 b Fx(')22 b Fs(2)i Fr(P)2441
-1011 y Fq(k)q Fh(\000)p Fp(1)2565 999 y Fz(\()s(^)-45
-b Fx(e)p Fz(\))14 b Fx(;)99 b(')24 b Fz(=)36 b(^)-56
-b Fx(')19 b Fs(\016)f Fx(F)3167 965 y Fh(\000)p Fp(1)3279
-999 y Fs(2)24 b Fr(P)3410 1011 y Fq(k)q Fh(\000)p Fp(1)3534
-999 y Fz(\()p Fx(e)p Fz(\))14 b Fx(:)28 1261 y Fz(Let)28
-b(no)n(w)g Fx(K)422 1273 y Fh(\000)503 1261 y Fz(=)c
-Fx(F)645 1273 y Fh(\000)702 1261 y Fz(\()756 1240 y(^)734
-1261 y Fx(K)5 b Fz(\))29 b(and)g Fx(K)1105 1273 y Fp(+)1184
-1261 y Fz(=)c Fx(F)1327 1273 y Fp(+)1382 1261 y Fz(\()1437
-1240 y(^)1414 1261 y Fx(K)6 b Fz(\))29 b(b)r(e)g(t)n(w)n(o)f(neigh)n(b)
-r(ouring)g(triangles)f(with)i(common)f(edge)h Fx(e)p
-Fz(.)40 b(Let)28 b Fx(N)p 3627 1274 76 4 v 38 w Fz(b)r(e)h(the)28
-1361 y(global)f(edge)g(shap)r(e)h(function)h(that)f('liv)n(es')g(on)g
-Fx(e)p Fz(.)41 b(By)29 b Fx(N)p 1792 1374 V 1868 1381
-a Fh(\000)1953 1361 y Fz(and)g Fx(N)p 2116 1374 V 2192
-1381 a Fp(+)2276 1361 y Fz(w)n(e)g(denote)g(the)h(restriction)e(of)h
-Fx(N)p 3309 1374 V 38 w Fz(to)g Fx(K)3588 1373 y Fp(+)3672
-1361 y Fz(and)g Fx(K)3906 1373 y Fh(\000)28 1460 y Fz(resp)r(ectiv)n
-(ely)-7 b(.)50 b(Let)33 b Fx(e)713 1472 y Fp(+)798 1460
-y Fz(=)e Fx(F)947 1472 y Fp(+)1003 1460 y Fz(\()s(^)-45
-b Fx(e)1074 1472 y Fq(i)1101 1460 y Fz(\))33 b(and)f
-Fx(e)1371 1472 y Fh(\000)1458 1460 y Fz(=)f Fx(F)1607
-1472 y Fh(\000)1663 1460 y Fz(\()s(^)-45 b Fx(e)1734
-1472 y Fq(j)1769 1460 y Fz(\).)52 b(W)-7 b(e)32 b(write)h
-Fx(t)p 2241 1473 30 4 v 21 x Fp(+)2358 1460 y Fz(for)f(the)h(tangen)n
-(tial)e(unit)i(v)n(ector)e(to)i Fx(e)p Fz(,)g(orien)n(ted)28
-1560 y(coun)n(terclo)r(c)n(kwise)28 b(with)j(resp)r(ect)g(to)f
-Fx(K)1318 1572 y Fp(+)1404 1560 y Fz(and)g Fx(t)p 1568
-1573 V 21 x Fh(\000)1682 1560 y Fz(=)e Fs(\000)p Fx(t)p
-1840 1573 V 1869 1581 a Fp(+)1955 1560 y Fz(for)i(the)h(resp)r(ectiv)n
-(e)f(from)g Fx(K)2890 1572 y Fh(\000)2946 1560 y Fz(.)46
-b(F)-7 b(or)30 b(line)h(in)n(tegrals)e(o)n(v)n(er)g(the)28
-1660 y(edge)d Fx(e)g Fz(w)n(e)g(write)613 1593 y Fl(R)652
-1689 y Fq(e)683 1697 y Fi(+)761 1660 y Fz(if)h(w)n(e)f(c)n(hose)g(the)g
-(orien)n(tation)f(induced)i(b)n(y)f Fx(t)p 2160 1673
-V 20 x Fp(+)2272 1660 y Fz(and)2432 1593 y Fl(R)2472
-1689 y Fq(e)2503 1697 y Fe(\000)2583 1660 y Fz(for)g(the)h(orien)n
-(tation)e(of)h Fx(e)g Fz(induced)h(b)n(y)f Fx(t)p 3852
-1673 V 20 x Fh(\000)3938 1660 y Fz(.)28 1775 y(In)c(order)f(to)h
-(obtain)g(an)g Fx(H)7 b Fz(\(curl)o(;)14 b(\012\)-conforming)21
-b(metho)r(d,)j(prop)r(osition)e(1)f(tells)i(us)f(that)g(w)n(e)g(m)n
-(ust)h(ensure)e(the)i(con)n(tin)n(uit)n(y)28 1874 y(of)k(the)h(tangen)n
-(tial)f(comp)r(onen)n(ts)g(of)g(the)h(global)f(shap)r(e)g(functions,)h
-(that)g(is)1572 2057 y Fx(N)p 1572 2070 76 4 v 1648 2078
-a Fp(+)1722 2057 y Fs(\001)18 b Fx(t)p 1763 2070 30 4
-v 21 x Fp(+)1867 2057 y Fz(+)g Fx(N)p 1950 2070 76 4
-v 2025 2078 a Fh(\000)2100 2057 y Fs(\001)g Fx(t)p 2141
-2070 30 4 v 21 x Fh(\000)2251 2057 y Fz(=)k(0)14 b Fx(:)1397
-b Fz(\(26\))28 2240 y(The)30 b(follo)n(wing)f(lemma)i(will)f(justify)h
-(the)g(c)n(hoice)f(of)g(the)h(momen)n(ts)f(describing)f(the)i(edge)f
-(dofs.)45 b(A)30 b(consequence)g(of)g(the)28 2339 y(lemma)e(will)h(b)r
-(e,)g(that)g(the)g(matc)n(hing)f(of)h(the)g(lo)r(cal)f(edge)g(dofs)g
-Fx(\013)2133 2309 y Fp([)p Fq(K)2208 2317 y Fi(+)2255
-2309 y Fp(])2307 2339 y Fz(and)g Fx(\013)2522 2309 y
-Fp([)p Fq(K)2597 2317 y Fe(\000)2646 2309 y Fp(])2698
-2339 y Fz(guaran)n(tees)e(the)j(p)r(oin)n(t)n(wise)g(condition)28
-2439 y(\(26\).)28 2613 y Fn(Lemma)e Fz(2)45 b Fm(L)l(et)584
-2592 y Fz(^)562 2613 y Fx(K)33 b Fm(denote)28 b(the)g(r)l(efer)l(enc)l
-(e)g(triangle)h(and)i Fz(^)-45 b Fx(e)28 b Fm(one)g(of)g(its)g(e)l
-(dges,)i(p)l(ar)l(ametrize)l(d)f(by)i Fz(^)-45 b Fx(e)23
-b Fs(3)28 b Fz(^)-47 b Fx(x)q Fz(\()p Fx(s)p Fz(\))23
-b(:=)g Fx(a)p 3565 2626 44 4 v 14 w Fz(+)14 b Fx(s)3749
-2598 y Fz(^)3755 2613 y Fx(t)p 3755 2626 30 4 v Fm(.)38
-b(L)l(et)28 2713 y Fz(^)-42 b Fx(p)p 28 2742 42 4 v 22
-w Fs(2)24 b(S)227 2683 y Fq(k)268 2713 y Fm(,)30 b Fs(S)379
-2683 y Fq(k)450 2713 y Fm(as)g(de\014ne)l(d)h(in)e(\(4\).)39
-b(It)30 b(then)f(holds)1658 2910 y Fz(\(^)-42 b Fx(p)p
-1690 2939 V 18 w Fs(\001)1786 2895 y Fz(^)1792 2910 y
-Fx(t)p 1792 2923 30 4 v Fz(\))p Fs(j)1880 2922 y Fp(^)-36
-b Fq(e)1936 2910 y Fs(2)23 b Fr(P)2066 2922 y Fq(k)q
-Fh(\000)p Fp(1)2191 2910 y Fz(\()s(^)-45 b Fx(e)p Fz(\))14
-b Fx(:)28 3093 y Fn(Pr)n(oof.)704 3251 y Fz(^)-42 b Fx(p)p
-704 3280 42 4 v 23 w Fs(2)23 b(S)903 3216 y Fq(k)1051
-3251 y Fz(=)-14 b Fs(\))105 b Fz(for)28 b Fx(i)22 b Fz(=)h(1)p
-Fx(;)14 b Fz(2)p Fx(;)g Fz(3)21 b(:)113 b(^)-49 b Fx(p)1949
-3263 y Fq(i)1977 3251 y Fz(\()5 b(^)-47 b Fx(x)q Fz(\))23
-b(=)2240 3147 y Fp(3)2204 3172 y Fl(Y)2200 3348 y Fq(j)s
-Fp(=1)2334 3251 y Fz(^)-48 b Fx(x)2375 3206 y Fq(k)2410
-3214 y Ff(ij)2375 3274 y Fq(j)2482 3251 y Fx(;)97 b Fz(where)2899
-3147 y Fp(3)2856 3172 y Fl(X)2858 3348 y Fq(j)s Fp(=1)2990
-3251 y Fx(k)3033 3263 y Fq(ij)3114 3251 y Fz(=)23 b Fx(k)17
-b(:)28 3488 y Fz(Hence,)27 b(with)h(the)g(parametrization)e(of)31
-b(^)-45 b Fx(e)27 b Fz(b)n(y)33 b(^)-48 b Fx(x)q Fz(\()p
-Fx(s)p Fz(\))1073 3750 y(^)f Fx(p)1108 3762 y Fq(i)1135
-3750 y Fz(\()5 b(^)-47 b Fx(x)q Fz(\()p Fx(s)p Fz(\)\))24
-b(=)1502 3646 y Fp(3)1466 3671 y Fl(Y)1461 3848 y Fq(j)s
-Fp(=1)1576 3750 y Fz(\()p Fx(a)1652 3762 y Fq(j)1706
-3750 y Fz(+)18 b Fx(s)1843 3735 y Fz(^)1842 3750 y Fx(t)1872
-3762 y Fq(j)1907 3750 y Fz(\))1939 3716 y Fq(k)1974 3724
-y Ff(ij)2055 3750 y Fz(=)k Fx(s)2181 3716 y Fq(k)2291
-3646 y Fp(3)2254 3671 y Fl(Y)2250 3848 y Fq(j)s Fp(=1)2380
-3735 y Fz(^)2378 3750 y Fx(t)2408 3705 y Fq(k)2443 3713
-y Ff(ij)2408 3773 y Fq(j)2519 3750 y Fz(+)32 b(^)-56
-b Fx(')2656 3762 y Fq(k)q Fh(\000)p Fp(1)2783 3750 y
-Fz(\()p Fx(s)p Fz(\))14 b Fx(;)28 4021 y Fz(with)41 b(^)-55
-b Fx(')271 4033 y Fq(k)q Fh(\000)p Fp(1)397 4021 y Fz(\()p
-Fx(s)p Fz(\))23 b Fs(2)h Fr(P)654 4033 y Fq(k)q Fh(\000)p
-Fp(1)778 4021 y Fz(\()s(^)-45 b Fx(e)p Fz(\),)28 b(and)1246
-4220 y(\(^)-42 b Fx(p)p 1278 4250 V 18 w Fs(\001)1374
-4205 y Fz(^)1380 4220 y Fx(t)p 1380 4233 30 4 v Fz(\))p
-Fs(j)1468 4232 y Fp(^)-36 b Fq(e)1524 4220 y Fz(=)23
-b Fx(s)1651 4186 y Fq(k)1762 4117 y Fp(3)1719 4142 y
-Fl(X)1725 4318 y Fq(i)p Fp(=1)1854 4205 y Fz(^)1853 4220
-y Fx(t)1883 4232 y Fq(i)1924 4054 y Fl(0)1924 4203 y(@)2038
-4117 y Fp(3)2001 4142 y Fl(Y)1997 4318 y Fq(j)s Fp(=1)2127
-4205 y Fz(^)2126 4220 y Fx(t)2156 4175 y Fq(k)2191 4183
-y Ff(ij)2156 4244 y Fq(j)2248 4054 y Fl(1)2248 4203 y(A)2339
-4220 y Fz(+)32 b(^)-56 b Fx(')2476 4232 y Fq(k)q Fh(\000)p
-Fp(1)2602 4220 y Fz(\()p Fx(s)p Fz(\))14 b Fx(:)28 4480
-y Fz(W)-7 b(e)25 b(observ)n(e)e(that)i(the)g(co)r(e\016cien)n(t)g(of)f
-Fx(s)1293 4450 y Fq(k)1359 4480 y Fz(is)g(exactly)h(^)-42
-b Fx(p)p 1723 4510 42 4 v -1 w Fz(\()1790 4465 y(^)1796
-4480 y Fx(t)p 1796 4493 30 4 v 1 w Fz(\))13 b Fs(\001)1902
-4465 y Fz(^)1908 4480 y Fx(t)p 1908 4493 V -1 w Fz(.)36
-b(By)25 b(the)g(de\014nition)g(of)g(the)g(space)f Fs(S)3137
-4450 y Fq(k)3178 4480 y Fz(,)i(this)f(expression)e(m)n(ust)28
-4580 y(v)-5 b(anish.)3897 4754 y Fg(\003)28 4953 y Fn(Remark)28
-b Fz(5)45 b Fm(In)29 b(the)g(c)l(ase)h(of)1013 4932 y
-Fz(^)991 4953 y Fx(K)k Fm(b)l(eing)c(a)g(quadrilater)l(al,)h(we)f(have)
-2217 4932 y Fz(^)2199 4953 y Fx(R)24 b Fz(=)f Fs(P)2439
-4923 y Fq(k)2479 4953 y Fm(.)39 b(By)30 b(the)f(de\014nition)h(of)g
-Fs(P)3341 4923 y Fq(k)3411 4953 y Fm(we)f(se)l(e)g(imme)l(di-)28
-5053 y(ately)h(that)g(her)l(e)g(also)h Fz(\()q(^)-43
-b Fx(v)p 778 5066 44 4 v 22 w Fs(\001)876 5038 y Fz(^)881
-5053 y Fx(t)p 881 5066 30 4 v Fz(\))p Fs(j)969 5065 y
-Fp(^)-36 b Fq(e)1025 5053 y Fs(2)24 b Fr(P)1156 5065
-y Fq(k)q Fh(\000)p Fp(1)1280 5053 y Fz(\()s(^)-45 b Fx(e)p
-Fz(\))p Fm(.)28 5252 y Fz(The)25 b(next)h(prop)r(osition)e(tells)i(us)f
-(ho)n(w)g(exactly)g(to)g(de\014ne)h(elemen)n(t)f(shap)r(e)h(functions)f
-(on)h(a)f(mapp)r(ed)g(elemen)n(t)h Fx(K)31 b Fz(in)26
-b(order)28 5352 y(to)h(get)g Fx(H)7 b Fz(\(curl;)14 b
-(\012\)-conforming)26 b(global)h(shap)r(e)g(functions.)1949
-5719 y Fk(14)p eop
-%%Page: 15 15
-15 14 bop 28 212 a Fn(Pr)n(oposition)27 b Fz(8)45 b Fm(Condition)38
-b(\(26\))f(is)f(saties\014e)l(d,)j(if)f(we)e(de\014ne)h(the)f(element)g
-(shap)l(e)i(functions)e Fx(N)p 3235 225 76 4 v 3311 232
-a Fp(+)3402 212 y Fm(and)h Fx(N)p 3570 225 V 3646 232
-a Fh(\000)3738 212 y Fm(by)g(the)28 311 y(Piola)31 b(tr)l(ansformation)
-g(\(10\))f(and)g(take)g(into)g(ac)l(c)l(ount)g(the)f(orientation)i(of)g
-(the)f(e)l(dge)g Fx(e)p Fm(:)786 494 y Fx(N)p 786 507
-V 862 515 a Fp(+)940 494 y Fz(:=)23 b Fs(P)1109 506 y
-Fp(+)1164 494 y Fz(\()1213 473 y(^)1196 494 y Fx(N)p
-1196 507 V 1272 515 a Fq(i)1299 494 y Fz(\))h(=)1462
-473 y(^)1442 494 y Fx(D)r(F)1578 458 y Fh(\000)p Fq(T)1566
-515 y Fp(+)1700 473 y Fz(^)1683 494 y Fx(N)p 1683 507
-V 1758 515 a Fq(i)1800 494 y Fx(;)183 b(N)p 2006 507
-V 2082 515 a Fh(\000)2161 494 y Fz(:=)23 b Fs(\000)14
-b(P)2409 506 y Fh(\000)2464 494 y Fz(\()2514 473 y(^)2496
-494 y Fx(N)p 2496 507 V 2572 515 a Fq(j)2607 494 y Fz(\))24
-b(=)e Fs(\000)2834 473 y Fz(^)2815 494 y Fx(D)r(F)2951
-458 y Fh(\000)p Fq(T)2939 515 y Fh(\000)3072 473 y Fz(^)3055
-494 y Fx(N)p 3055 507 V 3131 515 a Fq(j)3179 494 y Fx(:)612
-b Fz(\(27\))28 696 y Fn(Pr)n(oof.)40 b Fz(Let)526 675
-y(^)504 696 y Fx(K)33 b Fz(b)r(e)28 b(the)f(reference)g(elemen)n(t)h
-(and)f Fx(K)33 b Fz(its)28 b(a\016ne)f(or)g(bilinear)g(image.)36
-b(Let)28 b Fx(v)p 2944 709 44 4 v 26 w Fz(:=)23 b Fs(P)3179
-708 y Fq(K)3242 696 y Fz(\()q(^)-43 b Fx(v)p 3274 709
-V 4 w Fz(\))28 b(b)r(e)g(a)f(v)n(ector)f(\014eld)28 796
-y(on)j Fx(K)6 b Fz(,)29 b(de\014ned)h(b)n(y)f(the)h(Piola)e
-(transformation)f(of)j(a)f(reference)f(v)n(ector)g(\014eld)j(^)-43
-b Fx(v)p 2557 809 V 29 w Fs(2)2725 775 y Fz(^)2707 796
-y Fx(R)q Fz(.)42 b(Let)30 b Fx(e)f Fz(b)r(e)h(one)f(of)g(the)h(edges)e
-(of)i Fx(K)28 895 y Fz(and)d Fx(t)p 189 908 30 4 v 28
-w Fz(the)h(tangen)n(t)f(according)f(to)h(con)n(v)n(en)n(tion)f(1.)28
-995 y(In)f(the)h(case)f(of)558 974 y(^)536 995 y Fx(K)31
-b Fz(b)r(eing)26 b(a)f(triangle,)g(w)n(e)h(ha)n(v)n(e)1581
-974 y(^)1563 995 y Fx(R)e Fz(=)e Fs(R)1807 965 y Fq(k)1848
-995 y Fz(.)37 b(By)25 b(the)h(de\014nition)g(of)f(the)h(space)f
-Fs(R)3067 965 y Fq(k)3108 995 y Fz(,)h(lemma)g(2)f(and)g(1)h(w)n(e)f
-(can)28 1095 y(conclude)i(that)h(\()p Fx(v)p 581 1108
-44 4 v 22 w Fs(\001)18 b Fx(t)p 684 1108 30 4 v Fz(\))p
-Fs(j)769 1107 y Fq(e)828 1095 y Fs(2)24 b Fr(P)959 1107
-y Fq(k)q Fh(\000)p Fp(1)1083 1095 y Fz(\()p Fx(e)p Fz(\).)28
-1194 y(If)133 1173 y(^)111 1194 y Fx(K)33 b Fz(is)27
-b(a)g(quadrilateral,)f(the)i(previous)f(remark)f(and)h(1)g(also)g(tell)
-h(us)f(that)h(\()p Fx(v)p 2498 1207 44 4 v 22 w Fs(\001)19
-b Fx(t)p 2602 1207 30 4 v Fz(\))p Fs(j)2687 1206 y Fq(e)2746
-1194 y Fs(2)k Fr(P)2876 1206 y Fq(k)q Fh(\000)p Fp(1)3001
-1194 y Fz(\()p Fx(e)p Fz(\).)28 1294 y(Hence)k(the)h(condition)1048
-1302 y Fl(Z)1094 1491 y Fq(e)1125 1499 y Fi(+)1190 1348
-y Fl(\000)1228 1415 y Fz(\()p Fx(N)p 1260 1428 76 4 v
-1336 1436 a Fp(+)1410 1415 y Fs(\001)18 b Fx(t)p 1451
-1428 30 4 v 21 x Fp(+)1537 1415 y Fz(\))g(+)g(\()p Fx(N)p
-1702 1428 76 4 v 1778 1436 a Fh(\000)1853 1415 y Fs(\001)g
-Fx(t)p 1894 1428 30 4 v 21 x Fh(\000)1980 1415 y Fz(\))2012
-1348 y Fl(\001)2078 1415 y Fx(')c(ds)g(;)180 b Fs(8)14
-b Fx(')23 b Fs(2)g Fr(P)2713 1427 y Fq(k)q Fh(\000)p
-Fp(1)2838 1415 y Fz(\()p Fx(e)p Fz(\))28 1626 y(on)k(the)h(edge)f
-(momen)n(ts)g(is)h(su\016cien)n(t)f(for)h(the)g(global)e(edge)h(shap)r
-(e)g(functions)h(to)g(satiesfy)f(\(26\).)37 b(Note)27
-b(that)28 1659 y Fl(R)67 1755 y Fq(e)98 1763 y Fi(+)149
-1726 y Fz(\()p Fx(N)p 181 1739 76 4 v 257 1747 a Fh(\000)323
-1726 y Fs(\001)9 b Fx(t)p 355 1739 30 4 v 21 x Fh(\000)441
-1726 y Fz(\))14 b Fx(')g(ds)24 b Fz(=)e Fs(\000)827 1659
-y Fl(R)866 1755 y Fq(e)897 1763 y Fe(\000)951 1726 y
-Fz(\()p Fx(N)p 983 1739 76 4 v 1059 1747 a Fh(\000)1124
-1726 y Fs(\001)9 b Fx(t)p 1156 1739 30 4 v 1187 1747
-a Fh(\000)1243 1726 y Fz(\))14 b Fx(')g(ds)p Fz(.)36
-b(So,)24 b(b)n(y)e(the)i(de\014nition)f(\(27\))g(of)g(the)h(elemen)n(t)
-f(shap)r(e)g(functions)g(on)g Fx(K)3712 1738 y Fp(+)3790
-1726 y Fz(resp.)28 1841 y(on)31 b Fx(K)218 1853 y Fh(\000)273
-1841 y Fz(,)i(b)n(y)e(the)h(in)n(v)-5 b(ariance)30 b(of)h(the)h(dofs)g
-(\(prop)r(osition)e(7\))i(and)f(b)n(y)g(the)h(de\014nition)g(of)f(the)h
-(reference)f(shap)r(e)g(functions)28 1941 y(\(example)c(3\))g(w)n(e)h
-(ha)n(v)n(e)227 2053 y Fl(Z)273 2242 y Fq(e)304 2250
-y Fi(+)355 2166 y Fz(\()p Fx(N)p 387 2179 76 4 v 463
-2187 a Fp(+)537 2166 y Fs(\001)18 b Fx(t)p 578 2179 30
-4 v 21 x Fp(+)663 2166 y Fz(\))p Fx(')c(ds)24 b Fz(=)957
-2053 y Fl(Z)1006 2242 y Fp(^)-36 b Fq(e)1034 2250 y Ff(i)1065
-2166 y Fz(\()1114 2145 y(^)1097 2166 y Fx(N)p 1097 2179
-76 4 v 1173 2187 a Fq(i)1219 2166 y Fs(\001)1255 2151
-y Fz(^)1260 2166 y Fx(t)p 1260 2179 30 4 v 21 x Fq(i)1318
-2166 y Fz(\))13 b(^)-55 b Fx(')15 b(d)s Fz(^)-45 b Fx(s)23
-b Fz(=)f(1)166 b(and)2133 2053 y Fl(Z)2179 2242 y Fq(e)2210
-2250 y Fe(\000)2263 2166 y Fz(\()p Fx(N)p 2295 2179 76
-4 v 2371 2187 a Fh(\000)2446 2166 y Fs(\001)18 b Fx(t)p
-2487 2179 30 4 v 21 x Fh(\000)2573 2166 y Fz(\))p Fx(')c(ds)24
-b Fz(=)f Fs(\000)2946 2053 y Fl(Z)2994 2242 y Fp(^)-36
-b Fq(e)3022 2250 y Ff(j)3058 2166 y Fz(\()3107 2145 y(^)3090
-2166 y Fx(N)p 3090 2179 76 4 v 3166 2187 a Fq(j)3219
-2166 y Fs(\001)3255 2151 y Fz(^)3261 2166 y Fx(t)p 3261
-2179 30 4 v 21 x Fq(j)3326 2166 y Fz(\))13 b(^)-55 b
-Fx(')14 b(d)s Fz(^)-45 b Fx(s)24 b Fz(=)e Fs(\000)p Fz(1)14
-b Fx(:)3897 2405 y Fg(\003)28 2580 y Fz(T)-7 b(o)22 b(close)f(this)i
-(section,)g(let)g(us)f(mak)n(e)g(a)g(note)g(on)g(the)h(in)n
-(terpretation)f(of)g(the)h(dofs)f(on)g(an)g(elemen)n(t)h
-Fx(K)28 b Fz(in)23 b(the)f(case)g(of)g(lo)n(w)n(est)28
-2679 y(order)28 b(p)r(olynomial)h(degree.)41 b(In)30
-b(this)g(case,)f(all)g(dofs)h(are)e(edge)h(dofs,)h(the)g(degrees)f(of)g
-(freedom)g(are)37 b(^)-50 b Fx(\013)3315 2691 y Fq(j)3350
-2679 y Fz(\()q(^)-43 b Fx(v)p 3382 2692 44 4 v 3 w Fz(\))27
-b(=)3575 2612 y Fl(R)3617 2709 y Fp(^)-36 b Fq(e)3645
-2717 y Ff(j)3695 2679 y Fz(^)-42 b Fx(v)p 3695 2692 V
-23 w Fs(\001)3795 2664 y Fz(^)3800 2679 y Fx(t)p 3800
-2692 30 4 v 21 x Fq(j)3879 2679 y Fx(d)s Fz(^)d Fx(s)28
-2812 y Fz(and)25 b(the)h(tangen)n(tial)e(traces)h(of)g(shap)r(e)h
-(functions)f(are)g(constan)n(t)g(on)g(eac)n(h)f(edge.)36
-b(Since)26 b(w)n(e)f(require)33 b(^)-51 b Fx(\013)3286
-2824 y Fq(j)3321 2812 y Fz(\()3371 2791 y(^)3353 2812
-y Fx(N)p 3353 2825 76 4 v 3429 2833 a Fq(i)3457 2812
-y Fz(\))23 b(=)g Fx(\016)3637 2824 y Fq(ij)3721 2812
-y Fz(for)i(the)28 2912 y(reference)h(shap)r(e)i(functions,)g(w)n(e)f
-(ha)n(v)n(e)1258 3094 y Fx(v)1298 3106 y Fq(j)1356 3094
-y Fz(=)k(^)-50 b Fx(\013)1497 3106 y Fq(j)1532 3094 y
-Fz(\()q(^)-43 b Fx(v)p 1564 3107 44 4 v 4 w Fz(\))23
-b(=)g(\()1800 3073 y(^)1783 3094 y Fx(N)p 1783 3107 76
-4 v 1859 3115 a Fq(j)1912 3094 y Fs(\001)1948 3079 y
-Fz(^)1954 3094 y Fx(t)p 1954 3107 30 4 v -1 w Fz(\))14
-b Fs(j)s Fz(^)-45 b Fx(e)2091 3106 y Fq(j)2126 3094 y
-Fs(j)23 b Fz(=)g(\()p Fx(N)p 2292 3107 76 4 v 2368 3115
-a Fq(j)2422 3094 y Fs(\001)18 b Fx(t)p 2463 3107 30 4
-v 21 x Fq(j)2528 3094 y Fz(\))c Fs(j)p Fx(e)2636 3106
-y Fq(j)2671 3094 y Fs(j)g Fx(;)28 3277 y Fz(where)29
-b(for)h(the)g(last)g(equalit)n(y)g(w)n(e)g(ha)n(v)n(e)e(used)j(lemma)f
-(1.)44 b(W)-7 b(e)30 b(see)g(that)h(the)f(dof)g Fx(\013)2720
-3289 y Fq(j)2755 3277 y Fz(\()p Fx(v)p 2787 3290 44 4
-v 4 w Fz(\))h('sitting')f(on)g(the)g(edge)g Fx(e)3695
-3289 y Fq(j)3760 3277 y Fz(is)g(the)28 3377 y(v)-5 b(alue)27
-b(of)h(the)g Fm(sc)l(ale)l(d)37 b Fz(tangen)n(tial)26
-b(comp)r(onen)n(t)i Fs(j)p Fx(e)1600 3389 y Fq(j)1635
-3377 y Fs(j)1672 3309 y Fl(\000)1709 3377 y Fx(v)p 1709
-3390 V 22 w Fs(\001)19 b Fx(t)p 1813 3390 30 4 v 20 x
-Fq(j)1878 3309 y Fl(\001)1930 3377 y Fs(j)1953 3389 y
-Fq(e)1988 3377 y Fz(.)28 3651 y Fn(Remark)28 b Fz(6)45
-b Fm(F)-6 b(or)36 b(the)h(invarianc)l(e)h(of)f(the)g(e)l(dge)g(dofs)h
-(it)e(is)h(essential)g(that)g(the)f(moments)g Fx(\013)3071
-3621 y Fp([)p Fq(K)t Fp(])3210 3651 y Fm(on)g Fx(K)42
-b Fm(ar)l(e)37 b(de\014ne)l(d)g(by)28 3759 y(using)c(the)40
-b Fz(unit)34 b Fm(tangent)f(ve)l(ctor)h Fx(t)p 1129 3772
-V 30 w Fz(=)1293 3719 y Fh(j)s Fp(^)-36 b Fq(e)p Fh(j)p
-1293 3740 71 4 v 1293 3788 a(j)p Fq(e)p Fh(j)1388 3759
-y Fz(\()1440 3738 y(^)1420 3759 y Fx(D)r(F)12 b Fz(\))1596
-3744 y(^)1602 3759 y Fx(t)p 1602 3772 30 4 v 34 w Fm(on)33
-b Fx(K)6 b Fm(.)50 b(If)34 b(not,)g(e.)h(g.)f(if)g(we)g(just)f(use)l(d)
-h(the)f(tangent)3403 3744 y Fz(~)3409 3759 y Fx(t)p 3409
-3772 V 30 w Fz(=)d(\()3615 3738 y(^)3596 3759 y Fx(D)r(F)12
-b Fz(\))3772 3744 y(^)3778 3759 y Fx(t)p 3778 3772 V
-Fm(,)35 b(we)28 3868 y(would)d(lose)h(the)f(invarianc)l(e)h(of)g(the)f
-(dofs.)47 b(In)32 b(that)g(c)l(ase)g(the)g(dofs)h(would)g(sc)l(ale)g
-(by)f(a)g(factor)h(dep)l(ending)h(on)e(the)g(size)g(of)28
-3968 y(the)d(e)l(dge)i(or)f(fac)l(e)h(\([8)q(],)f(r)l(emark)g(on)g(p.)h
-(326\).)28 4296 y Fv(2.5)112 b Fo(Appro)m(ximation)35
-b(and)f(con)m(v)m(ergence)j(results)28 4450 y Fz(Without)d(going)e(in)n
-(to)h(details,)i(w)n(e)e(will)g(cite)h(here)f(some)f(results)h(on)g
-(appro)n(ximation)f(prop)r(erties)g(and)h(con)n(v)n(ergence)e(of)28
-4549 y(N)n(\023)-39 b(ed)n(\023)g(elec)25 b(FEM)j(of)f(\014rst)h(t)n
-(yp)r(e.)28 4649 y(W)-7 b(e)21 b(are)g(in)h(the)g(setting)f(of)h(a)f
-Fm(c)l(onforming)30 b Fz(FEM)21 b(and)h(ha)n(v)n(e)e(quasi-optimal)g
-(appro)n(ximation)g(prop)r(erties)h(of)g(the)h(FE-spaces)28
-4749 y Fx(V)76 4761 y Fq(h)142 4749 y Fs(\032)h Fx(H)7
-b Fz(\(curl)o(;)14 b(\012\))1150 4848 y Fs(k)p Fx(u)p
-1192 4861 48 4 v 17 w Fs(\000)k Fz(\005)1402 4814 y Fq(k)1402
-4869 y(h)1446 4848 y Fx(u)p 1446 4861 V -1 w Fs(k)1535
-4863 y Fq(H)t Fp(\(curl)o(;\012\))1850 4848 y Fz(=)k
-Fx(C)70 b Fz(inf)2030 4902 y Fq(w)r Fh(2)p Fq(V)2164
-4911 y Ff(h)2216 4848 y Fs(k)p Fx(u)p 2258 4861 V 18
-w Fs(\000)18 b Fx(w)p 2407 4861 62 4 v 2 w Fs(k)2510
-4863 y Fq(H)t Fp(\(curl;\012\))2816 4848 y Fx(;)28 5047
-y Fz(where)33 b(\005)336 5017 y Fq(k)336 5071 y(h)379
-5047 y Fx(u)p 379 5060 48 4 v 34 w Fs(2)h(R)620 5017
-y Fq(k)695 5047 y Fz(or)f(\005)865 5017 y Fq(k)865 5071
-y(h)909 5047 y Fx(u)p 909 5060 V 33 w Fs(2)h(P)1144 5017
-y Fq(k)1219 5047 y Fz(resp)r(ectiv)n(ely)-7 b(,)35 b(denotes)f(the)g
-(in)n(terp)r(olate)f(of)h Fx(u)p 2679 5060 V 34 w Fz(with)h(regard)d
-(to)i(the)g(N)n(\023)-39 b(ed)n(\023)g(elec)32 b(dofs:)28
-5147 y Fx(\013)p Fz(\()p Fx(u)p 113 5160 V Fz(\))26 b(=)f
-Fx(\013)p Fz(\(\005)456 5117 y Fq(k)456 5171 y(h)500
-5147 y Fx(u)p 500 5160 V Fz(\))30 b(for)e(all)h(dofs)h
-Fx(\013)p Fz(.)42 b(The)30 b(in)n(terp)r(olation)e(op)r(erator)g(\005)
-2216 5117 y Fq(k)2216 5171 y(h)2288 5147 y Fz(is)h(de\014ned)h(for)f
-(su\016cien)n(tly)g(smo)r(oth)g(v)n(ector)f(\014elds,)28
-5247 y(namely)f(for)g(all)g Fx(v)p 558 5260 44 4 v 27
-w Fs(2)c Fx(H)779 5217 y Fq(r)815 5247 y Fz(\(curl\))28
-b(for)f(an)n(y)g Fx(r)f(>)1491 5214 y Fp(1)p 1491 5228
-34 4 v 1491 5275 a(2)1561 5247 y Fz(\(see)i([1)o(],)g(Lemma)g(5.1.,)e
-([7])i(and)f(references)g(therein\).)28 5346 y(F)-7 b(or)27
-b(N)n(\023)-39 b(ed)n(\023)g(elec's)25 b(FEM)j(of)f(\014rst)g(t)n(yp)r
-(e)h(w)n(e)f(state)h(\(without)g(pro)r(of)6 b(\))28 b(the)g(follo)n
-(wing)e(optimal)i(estimate)f(in)h(the)g(curl-norm:)1949
-5719 y Fk(15)p eop
-%%Page: 16 16
-16 15 bop 28 220 a Fn(Theorem)28 b Fz(5)45 b Fm(If)31
-b Fs(T)649 232 y Fq(h)692 220 y Fm(,)g Fx(h)25 b(>)f
-Fz(0)p Fm(,)31 b(is)g(a)g(r)l(e)l(gular)g(family)h(of)g(triangulations)
-f(on)g Fz(\012)f Fm(and)h Fx(r)d(>)2866 187 y Fp(1)p
-2866 201 34 4 v 2866 248 a(2)2909 220 y Fm(,)j(then)g(ther)l(e)g
-(exists)f(a)h(c)l(onstant)28 319 y Fx(C)e(>)23 b Fz(0)p
-Fm(,)29 b(dep)l(ending)i(on)f Fx(r)j Fm(but)c(not)g(on)h
-Fx(h)f Fm(or)i Fx(v)p 1465 332 44 4 v 3 w Fm(,)f(such)g(that)1163
-495 y Fs(k)p Fx(v)p 1205 508 V 22 w Fs(\000)18 b Fz(\005)1412
-461 y Fq(k)1412 515 y(h)1455 495 y Fx(v)p 1455 508 V
-3 w Fs(k)1540 510 y Fq(H)t Fp(\(curl)o(;\012\))1855 495
-y Fs(\024)k Fx(C)e(h)2069 461 y Fp(min)o Fh(f)p Fq(r)n(;k)q
-Fh(g)2337 495 y Fs(k)p Fx(v)p 2379 508 V 3 w Fs(k)2464
-510 y Fq(H)2522 493 y Ff(r)2555 510 y Fp(\(curl)o(;\012\))2802
-495 y Fx(;)989 b Fz(\(28\))28 671 y Fm(for)30 b(al)t(l)h
-Fx(v)p 279 684 V 26 w Fs(2)24 b Fx(H)500 641 y Fq(r)536
-671 y Fz(\(curl;)14 b(\012\))p Fm(.)28 838 y Fz(The)27
-b(result)f(in)i(\(28\))f(w)n(as)f(obtained)g(b)n(y)h(Alonso)g(and)g(V)
--7 b(alli)27 b(in)g([1],)g(extending)g(earlier)f(in)n(terp)r(olation)g
-(results)g(b)n(y)h(N)n(\023)-39 b(ed)n(\023)g(elec)28
-938 y(in)27 b([8])h(and)f(Monk)g(in)h([6].)28 1037 y(Optimal)34
-b(con)n(v)n(ergence)f(in)i(the)h Fx(H)7 b Fz(\(curl)o(;)14
-b(\012\)-norm)35 b(for)f(the)h(error)e(of)i(the)h(FE-appro)n(ximation)c
-(of)j(the)h(mo)r(del)f(problem)28 1137 y(\(3\))f(b)n(y)f(N)n(\023)-39
-b(ed)n(\023)g(elec's)32 b(elemen)n(ts)h(of)h(\014rst)g(t)n(yp)r(e)g
-(follo)n(ws)e(from)i(\(28\))f(b)n(y)h(C)n(\023)-39 b(ea's)32
-b(lemma.)55 b(This)34 b(result)g(has)f(b)r(een)h(v)n(eri\014ed)f(in)28
-1237 y(n)n(umerical)h(exp)r(erimen)n(ts)g(with)h(a)g
-Fd(MATLAB)d Fz(co)r(de,)37 b(whic)n(h)e(uses)f(lo)n(w)n(est)g(order)f
-(N)n(\023)-39 b(ed)n(\023)g(elec)33 b(elemen)n(ts)i(on)f(a\016ne)h
-(triangular)28 1336 y(meshes)23 b(for)h(2d)g(problems,)g(as)f(w)n(ell)h
-(as)f(with)i(a)f Fd(deal.II)d Fz(co)r(de,)k(whic)n(h)f(uses)f(lo)n(w)n
-(est)g(order)g(N)n(\023)-39 b(ed)n(\023)g(elec)22 b(elemen)n(ts)i(on)g
-(bilinear)28 1436 y(resp.)36 b(trilinear)27 b(meshes)g(for)g(2d)g
-(resp.)36 b(3d)28 b(problems.)28 1535 y(As)36 b(for)g(the)h
-Fx(L)504 1505 y Fp(2)540 1535 y Fz(\(\012\)-appro)n(ximation)e(prop)r
-(erties)h(of)g(FE)g(spaces)f(based)h(on)g Fs(R)2602 1505
-y Fq(k)2680 1535 y Fz(or)f Fs(P)2855 1505 y Fq(k)2896
-1535 y Fz(,)k(w)n(e)d(could)g(hop)r(e)g(for)g(a)g(b)r(etter)28
-1635 y(order)25 b(than)j Fs(O)r Fz(\()p Fx(h)586 1605
-y Fq(k)627 1635 y Fz(\))g(at)f(\014rst)g(sigh)n(t:)36
-b(still,)27 b(w)n(e)g(ha)n(v)n(e)f([)p Fr(P)1764 1605
-y Fq(k)q Fh(\000)p Fp(1)1889 1635 y Fz(\()p Fx(K)6 b
-Fz(\)])2053 1605 y Fq(d)2115 1635 y Fs(\022)22 b(R)2272
-1605 y Fq(k)2313 1635 y Fz(\()p Fx(K)6 b Fz(\).)37 b(Ho)n(w)n(ev)n(er,)
-26 b(N)n(\023)-39 b(ed)n(\023)g(elec)25 b(sho)n(ws)h(in)h([8])g(that)h
-(only)28 1735 y(sub)r(optimalit)n(y)f(can)g(b)r(e)h(exp)r(ected:)1421
-1834 y Fs(k)p Fx(v)p 1463 1847 V 21 w Fs(\000)18 b Fz(\005)1669
-1800 y Fq(k)1669 1855 y(h)1712 1834 y Fx(v)p 1712 1847
-V 4 w Fs(k)1798 1849 y Fq(L)1844 1833 y Fi(2)1875 1849
-y Fp(\(\012\))2002 1834 y Fs(\024)k Fx(C)6 b(h)2202 1800
-y Fq(k)2243 1834 y Fs(j)p Fx(v)p 2266 1847 V 3 w Fs(j)2332
-1851 y Fq(H)2390 1835 y Ff(k)2428 1851 y Fp(\(\012\))2545
-1834 y Fx(:)1246 b Fz(\(29\))28 1990 y(N)n(\023)-39 b(ed)n(\023)g(elec)
-24 b(uses)i(a)g(standard)f(scaling)h(and)g(Bram)n(ble-Hilb)r(ert)f
-(argumen)n(t)h(to)g(deriv)n(e)g(\(29\).)36 b(Since)26
-b([)p Fr(P)3183 1960 y Fq(k)q Fh(\000)p Fp(1)3308 1990
-y Fz(\()p Fx(K)6 b Fz(\)])3472 1960 y Fq(d)3534 1990
-y Fs(\022)22 b(R)3691 1960 y Fq(k)3733 1990 y Fz(\()p
-Fx(K)6 b Fz(\))23 b Fr(\()28 2090 y Fz([)p Fr(P)103 2060
-y Fq(k)142 2090 y Fz(\()p Fx(K)6 b Fz(\)])306 2060 y
-Fq(d)345 2090 y Fz(,)24 b(the)g(Bram)n(ble-Hilb)r(ert)e(argumen)n(t)g
-(only)h(guaran)n(tees)e(an)i(elemen)n(t)n(wise)g(appro)n(ximation)e(of)
-j(order)e Fx(k)k Fz(of)d Fx(H)3752 2060 y Fq(k)3793 2090
-y Fz(\()p Fx(K)6 b Fz(\)-)28 2189 y(functions)27 b(from)h(the)g(space)f
-Fs(R)1017 2159 y Fq(k)1058 2189 y Fz(\()p Fx(K)6 b Fz(\).)28
-2289 y(Ho)n(w)n(ev)n(er,)22 b(in)j(a)e(recen)n(t)h(pap)r(er)f(Hiptmair)
-i(uses)e(a)h(dualit)n(y)g(tec)n(hnique)g(to)g(state)f(optimal)h(con)n
-(v)n(ergence)e(of)i(the)g Fx(L)3596 2259 y Fp(2)3633
-2289 y Fz(\(\012\)-error)28 2389 y Fs(k)p Fx(u)p 70 2402
-48 4 v 6 w Fs(\000)8 b Fx(u)p 197 2402 V 244 2409 a Fq(h)287
-2389 y Fs(k)329 2404 y Fq(L)375 2387 y Fi(2)407 2404
-y Fp(\(\012\))533 2389 y Fz(for)21 b(the)i(3d)f(case)f(and)i(N)n(\023)
--39 b(ed)n(\023)g(elec's)20 b(elemen)n(ts)i(of)g(\014rst)g(t)n(yp)r(e)h
-(of)f(order)f Fx(k)k Fz(on)d(tetrahedral)f(meshes)h(\(see)g(Section)28
-2488 y(5.3,)k(Theorem)h(5.8)g(in)h([5)o(]\):)28 2656
-y Fn(Theorem)g Fz(6)45 b Fm(Ther)l(e)30 b(is)h(an)e Fx(s)23
-b(>)1122 2623 y Fp(1)p 1122 2637 34 4 v 1122 2684 a(2)1195
-2656 y Fm(such)30 b(that)1287 2831 y Fs(k)p Fx(u)p 1329
-2844 48 4 v 18 w Fs(\000)18 b Fx(u)p 1478 2844 V 1525
-2852 a Fq(h)1568 2831 y Fs(k)1610 2846 y Fq(L)1656 2830
-y Fi(2)1688 2846 y Fp(\(\012\))1814 2831 y Fs(\024)23
-b Fx(C)6 b(h)2015 2797 y Fq(s)2050 2831 y Fs(k)p Fx(u)p
-2092 2844 V 18 w Fs(\000)18 b Fx(u)p 2241 2844 V 2288
-2852 a Fq(h)2331 2831 y Fs(k)2373 2846 y Fq(H)t Fp(\(curl;\012\))2679
-2831 y Fx(:)1112 b Fz(\(30\))28 3007 y Fm(Under)29 b(the)h(assumption)g
-(that)g(the)g(b)l(oundary)g Fx(@)5 b Fz(\012)30 b Fm(is)g(smo)l(oth)g
-(or)g(c)l(onvex,)g Fx(s)23 b Fz(=)g(1)29 b Fm(c)l(an)h(b)l(e)g(chosen.)
-28 3174 y Fz(Sev)n(eral)23 b(k)n(ey)i(argumen)n(ts)f(of)h(the)h(pro)r
-(of)f(in)g([5])h(mak)n(e)e(explicitely)h(use)h(of)f(features)g(that)g
-(are)g(limited)h(to)f(3d)g(problems)f(and)28 3274 y(the)d(family)h(of)f
-(\014nite)h(elemen)n(ts)g(based)f(on)g(tetrahedrons.)33
-b(They)22 b(cannot)f(b)r(e)g(mo)r(di\014ed)h(trivially)f(to)g(apply)h
-(to)f(2d)g(problems)28 3374 y(or)30 b(3d)i(problems)e(on)i(hexahedral)e
-(meshes.)48 b(Ev)n(en)31 b(w)n(orse,)g(it)h(is)g(suggested)e(b)n(y)h
-(the)h(results)f(of)h(n)n(umerical)f(exp)r(erimen)n(ts)28
-3473 y(that)c(one)h(cannot)f(hop)r(e)g(to)h(obtain)f(a)g(result)h
-(similar)f(to)g(\(30\).)28 3573 y(A)g(p)r(ossibilit)n(y)f(to)h(o)n(v)n
-(ercome)d(this)j(de\014ciency)g(of)g(con)n(v)n(ergence)d(is)j(to)f(use)
-h(N)n(\023)-39 b(ed)n(\023)g(elec)25 b(elemen)n(ts)i(of)f(second)g(t)n
-(yp)r(e,)i(where)e(the)28 3673 y(full)i([)p Fr(P)248
-3685 y Fq(k)288 3673 y Fz(])311 3642 y Fq(d)377 3673
-y Fz(are)f(used)g(as)g(p)r(olynomial)g(spaces)g(\(see)g([10)o(]\).)28
-3913 y Fw(3)134 b Fv(Numerical)35 b(results)28 4095 y
-Fz(The)27 b(n)n(umerical)f(results)h(in)g(this)g(section)g(pro)n(vide)f
-(some)h(samples)f(of)h(the)h(qualit)n(y)e(of)h(the)h
-Fx(H)7 b Fz(\(curl;)14 b(\012\)-conforming)25 b(FEM)28
-4194 y(with)j(N)n(\023)-39 b(ed)n(\023)g(elec)25 b(elemen)n(ts)j(of)f
-(\014rst)h(t)n(yp)r(e)g(and)f(lo)n(w)n(est)g(order)f(\(p)r(olynomial)h
-(degree)g Fx(k)e Fz(=)e(1\).)28 4294 y(W)-7 b(e)40 b(considered)f(the)i
-(mo)r(del)f(problem)f(\(1\))i(in)f(\012)k(=)f([)p Fs(\000)p
-Fz(1)p Fx(;)14 b Fz(1])2052 4264 y Fq(d)2090 4294 y Fz(,)43
-b Fx(d)h Fz(=)g(2)p Fx(;)14 b Fz(3,)42 b(with)f(homogeneous)d(Diric)n
-(hlet)i(b)r(oundary)28 4393 y(condition)27 b(\(2\).)28
-4493 y(The)33 b(\014rst)g(few)h(results)e(for)h(the)h(t)n(w)n
-(o-dimensional)e(problem)g(ha)n(v)n(e)h(b)r(een)g(obtained)g(b)n(y)g(a)
-g Fd(MATLAB)e Fz(co)r(de.)54 b(F)-7 b(or)33 b(the)h(\014rst)28
-4593 y(example)27 b(w)n(e)g(used)h(the)g(data)1374 4738
-y Fx(c)23 b Fs(\021)f Fz(1)14 b Fx(;)180 b(f)p 1779 4767
-50 4 v 8 w Fz(\()p Fx(x;)14 b(y)s Fz(\))24 b(=)2131 4620
-y Fl(\022)2236 4687 y Fz(3)18 b Fs(\000)g Fx(y)2423 4657
-y Fp(2)2234 4787 y Fz(3)g Fs(\000)g Fx(x)2424 4756 y
-Fp(2)2503 4620 y Fl(\023)2592 4738 y Fx(:)1199 b Fz(\(31\))28
-4928 y(F)-7 b(or)27 b(the)h(second)f(example)g(w)n(e)g(ha)n(v)n(e)f
-(follo)n(w)n(ed)h(the)h(outlines)f(from)h(App)r(endix)g(A)g(and)f(tak)n
-(en)g(the)h(data)g(from)f(example)g(5)1050 5149 y Fx(c)c
-Fs(\021)g Fz(1)14 b Fx(;)179 b(f)p 1455 5178 V 8 w Fz(\()p
-Fx(x;)14 b(y)s Fz(\))24 b(=)f(\(2)p Fx(\031)1932 5115
-y Fp(2)1988 5149 y Fz(+)18 b(1\))2159 5032 y Fl(\022)2300
-5098 y Fz(cos)13 b Fx(\031)s(x)h Fz(sin)g Fx(\031)s(y)2261
-5198 y Fs(\000)g Fz(sin)f Fx(\031)s(x)h Fz(cos)g Fx(\031)s(y)2827
-5032 y Fl(\023)2916 5149 y Fx(:)875 b Fz(\(32\))28 5370
-y(The)25 b(\014nite)i(elemen)n(t)f(solution)f(has)g(b)r(een)i(computed)
-f(using)f(N)n(\023)-39 b(ed)n(\023)g(elec)24 b(elemen)n(ts)i(of)f
-(\014rst)h(t)n(yp)r(e)g(and)f(of)h(p)r(olynomial)f(degree)28
-5469 y Fx(k)j Fz(=)d(1)k(on)f(a)h(family)g(of)g(a\016ne)g(triangular)e
-(grids.)40 b(The)29 b(initial)h(coarse)d(grid)h(consisted)h(of)g(2)2983
-5439 y Fp(5)3049 5469 y Fz(triangles.)40 b(The)29 b(\014nest)g(grid)
-1949 5719 y Fk(16)p eop
-%%Page: 17 17
-17 16 bop 28 217 a Fz(with)28 b(2)259 187 y Fp(13)356
-217 y Fz(triangles)f(results)g(after)g(\014v)n(e)g(global)g
-(re\014nemen)n(ts.)28 317 y(In)36 b(T)-7 b(able)35 b(1)h(w)n(e)f(see)h
-(that)g(for)f(b)r(oth)h(examples)f(w)n(e)h(ha)n(v)n(e)f(optimal)g(con)n
-(v)n(ergence)f(in)i(the)g Fx(H)7 b Fz(\(curl;)14 b(\012\)-semiorm,)37
-b(as)e(w)n(e)28 416 y(w)n(ould)e(exp)r(ect)h(from)g(the)g(theoretical)f
-(results)h(of)g(the)g(previous)f(section.)55 b(As)34
-b(for)g(the)g Fx(L)2969 386 y Fp(2)3006 416 y Fz(\(\012\)-norm,)h(it)f
-(app)r(ears)f(that)28 516 y(in)d(b)r(oth)h(examples)f(the)h(con)n(v)n
-(ergence)d(of)j(the)f(n)n(umerical)g(solution)g(is)h(not)f(optimal)g
-(for)g(our)g(c)n(hoice)g(of)g(\014nite)h(elemen)n(ts.)28
-616 y(In)e(the)h(case)f(of)g(N)n(\023)-39 b(ed)n(\023)g(elec)28
-b(elemen)n(ts)h(of)g(\014rst)h(t)n(yp)r(e)f(and)g(of)h(p)r(olynomial)f
-(degree)f Fx(k)h Fz(=)d(1,)j(w)n(e)g(got)g(only)g Fs(O)r
-Fz(\()p Fx(h)p Fz(\)-con)n(v)n(ergence)28 715 y(of)19
-b(the)i Fx(L)307 685 y Fp(2)344 715 y Fz(-error.)32 b(Ho)n(w)n(ev)n
-(er,)19 b(this)h(order)f(of)h(con)n(v)n(ergence)e(is)h(consisten)n(t)h
-(with)g(the)h(result)e(\(29\))h(obtained)g(b)n(y)f(N)n(\023)-39
-b(ed)n(\023)g(elec)18 b(in)j([8)o(].)p 725 918 2540 4
-v 723 1031 4 113 v 1224 1031 V 1276 997 a Fk(grid)p 1481
-1031 V 98 w(#)30 b(cells)p 1854 1031 V 1854 1031 V 147
-w Fc(H)7 b Fk(\(curl)o(\)-error)p 2578 1031 V 2578 1031
-V 279 w Fc(L)2822 964 y Fb(2)2861 997 y Fk(-error)p 3262
-1031 V 725 1034 2540 4 v 723 1147 4 113 v 1224 1147 V
-1332 1113 a(1)p 1481 1147 V 338 w(32)p 1854 1147 V 120
-w(6.66e-01)p 2317 1147 V 181 w({)p 2578 1147 V 159 w(4.66e-01)p
-3001 1147 V 161 w({)p 3262 1147 V 723 1260 V 1224 1260
-V 1332 1226 a(2)p 1481 1260 V 292 w(128)p 1854 1260 V
-121 w(3.33e-01)p 2317 1260 V 123 w(1.00)p 2578 1260 V
-102 w(2.35e-01)p 3001 1260 V 103 w(0.98)p 3262 1260 V
-723 1373 V 775 1339 a(example)30 b(1)p 1224 1373 V 156
-w(3)p 1481 1373 V 292 w(512)p 1854 1373 V 121 w(1.66e-01)p
-2317 1373 V 123 w(1.00)p 2578 1373 V 102 w(1.17e-01)p
-3001 1373 V 103 w(0.99)p 3262 1373 V 723 1486 V 1224
-1486 V 1332 1452 a(4)p 1481 1486 V 247 w(2048)p 1854
-1486 V 121 w(8.33e-02)p 2317 1486 V 123 w(1.00)p 2578
-1486 V 102 w(5.89e-02)p 3001 1486 V 103 w(0.99)p 3262
-1486 V 723 1599 V 1224 1599 V 1332 1565 a(5)p 1481 1599
-V 247 w(8192)p 1854 1599 V 121 w(4.17e-02)p 2317 1599
-V 123 w(1.00)p 2578 1599 V 102 w(2.95e-02)p 3001 1599
-V 103 w(0.99)p 3262 1599 V 725 1602 2540 4 v 723 1715
-4 113 v 1224 1715 V 1332 1681 a(1)p 1481 1715 V 338 w(32)p
-1854 1715 V 100 w(3.05e+00)p 2317 1715 V 160 w({)p 2578
-1715 V 159 w(6.48e-01)p 3001 1715 V 161 w({)p 3262 1715
-V 723 1828 V 1224 1828 V 1332 1794 a(2)p 1481 1828 V
-292 w(128)p 1854 1828 V 101 w(1.61e+00)p 2317 1828 V
-102 w(0.91)p 2578 1828 V 102 w(3.22e-01)p 3001 1828 V
-103 w(1.00)p 3262 1828 V 723 1941 V 775 1907 a(example)g(2)p
-1224 1941 V 156 w(3)p 1481 1941 V 292 w(512)p 1854 1941
-V 121 w(0.81e-01)p 2317 1941 V 123 w(0.97)p 2578 1941
-V 102 w(1.60e-01)p 3001 1941 V 103 w(1.00)p 3262 1941
-V 723 2053 V 1224 2053 V 1332 2020 a(4)p 1481 2053 V
-247 w(2048)p 1854 2053 V 121 w(0.41e-01)p 2317 2053 V
-123 w(0.99)p 2578 2053 V 102 w(8.02e-02)p 3001 2053 V
-103 w(1.00)p 3262 2053 V 723 2166 V 1224 2166 V 1332
-2133 a(5)p 1481 2166 V 247 w(8192)p 1854 2166 V 121 w(2.05e-01)p
-2317 2166 V 123 w(0.99)p 2578 2166 V 102 w(4.01e-02)p
-3001 2166 V 103 w(1.00)p 3262 2166 V 725 2170 2540 4
-v 28 2436 a(T)-8 b(able)40 b(1:)63 b(Errors)40 b(and)h(con)m(v)m
-(ergence)i(rates)f(in)e(the)h Fc(L)1993 2403 y Fb(2)2032
-2436 y Fk(\(\012\)-norm)h(and)e Fc(H)7 b Fk(\(curl)o(;)15
-b(\012\)-seminorm)41 b(for)f(the)i(t)m(w)m(o)28 2549
-y Fa(MATLAB)28 b Fk(examples.)872 4420 y @beginspecial
-52 @llx 194 @lly 549 @urx 605 @ury 2693 @rwi 1984 @rhi
-@setspecial
-%%BeginDocument: example1_errors.eps
-%!PS-Adobe-2.0 EPSF-1.2
-%%Creator: MATLAB, The Mathworks, Inc.
-%%Title: examlpe1_error.eps
-%%CreationDate: 08/26/2002  11:49:36
-%%DocumentNeededFonts: Helvetica
-%%DocumentProcessColors: Cyan Magenta Yellow Black
-%%Pages: 1
-%%BoundingBox:    52   194   549   605
-%%EndComments
-
-%%BeginProlog
-% MathWorks dictionary
-/MathWorks 160 dict begin
-% definition operators
-/bdef {bind def} bind def
-/ldef {load def} bind def
-/xdef {exch def} bdef
-/xstore {exch store} bdef
-% operator abbreviations
-/c  /clip ldef
-/cc /concat ldef
-/cp /closepath ldef
-/gr /grestore ldef
-/gs /gsave ldef
-/mt /moveto ldef
-/np /newpath ldef
-/cm /currentmatrix ldef
-/sm /setmatrix ldef
-/rm /rmoveto ldef
-/rl /rlineto ldef
-/s /show ldef
-/sc {setcmykcolor} bdef
-/sr /setrgbcolor ldef
-/sg /setgray ldef
-/w /setlinewidth ldef
-/j /setlinejoin ldef
-/cap /setlinecap ldef
-/rc {rectclip} bdef
-/rf {rectfill} bdef
-% page state control
-/pgsv () def
-/bpage {/pgsv save def} bdef
-/epage {pgsv restore} bdef
-/bplot /gsave ldef
-/eplot {stroke grestore} bdef
-% orientation switch
-/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
-% coordinate system mappings
-/dpi2point 0 def
-% font control
-/FontSize 0 def
-/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
-  makefont setfont} bdef
-/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
-  exch dup 3 1 roll findfont dup length dict begin
-  { 1 index /FID ne {def}{pop pop} ifelse } forall
-  /Encoding exch def currentdict end definefont pop} bdef
-/isroman {findfont /CharStrings get /Agrave known} bdef
-/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
-  exch FMS} bdef
-/csm {1 dpi2point div -1 dpi2point div scale neg translate
- dup landscapeMode eq {pop -90 rotate}
-  {rotateMode eq {90 rotate} if} ifelse} bdef
-% line types: solid, dotted, dashed, dotdash
-/SO { [] 0 setdash } bdef
-/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
-/DA { [6 dpi2point mul] 0 setdash } bdef
-/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
-  dpi2point mul] 0 setdash } bdef
-% macros for lines and objects
-/L {lineto stroke} bdef
-/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
-/AP {{rlineto} repeat} bdef
-/PDlw -1 def
-/W {/PDlw currentlinewidth def setlinewidth} def
-/PP {closepath eofill} bdef
-/DP {closepath stroke} bdef
-/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
-  neg 0 exch rlineto closepath} bdef
-/FR {MR stroke} bdef
-/PR {MR fill} bdef
-/L1i {{currentfile picstr readhexstring pop} image} bdef
-/tMatrix matrix def
-/MakeOval {newpath tMatrix currentmatrix pop translate scale
-0 0 1 0 360 arc tMatrix setmatrix} bdef
-/FO {MakeOval stroke} bdef
-/PO {MakeOval fill} bdef
-/PD {currentlinecap 1 cap 3 1 roll 2 copy mt lineto stroke
-   cap PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
-/FA {newpath tMatrix currentmatrix pop translate scale
-  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
-/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
-  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
-/FAn {newpath tMatrix currentmatrix pop translate scale
-  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
-/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
-  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
-/vradius 0 def /hradius 0 def /lry 0 def
-/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
-/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
-  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
-  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
-  tMatrix setmatrix lrx hradius sub uly vradius add translate
-  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
-  lrx hradius sub lry vradius sub translate hradius vradius scale
-  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
-  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
-  closepath} bdef
-/FRR {MRR stroke } bdef
-/PRR {MRR fill } bdef
-/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
-  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
-  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
-  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
-  closepath} bdef
-/FlrRR {MlrRR stroke } bdef
-/PlrRR {MlrRR fill } bdef
-/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
-  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
-  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
-  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
-  closepath} bdef
-/FtbRR {MtbRR stroke } bdef
-/PtbRR {MtbRR fill } bdef
-/stri 6 array def /dtri 6 array def
-/smat 6 array def /dmat 6 array def
-/tmat1 6 array def /tmat2 6 array def /dif 3 array def
-/asub {/ind2 exch def /ind1 exch def dup dup
-  ind1 get exch ind2 get sub exch } bdef
-/tri_to_matrix {
-  2 0 asub 3 1 asub 4 0 asub 5 1 asub
-  dup 0 get exch 1 get 7 -1 roll astore } bdef
-/compute_transform {
-  dmat dtri tri_to_matrix tmat1 invertmatrix 
-  smat stri tri_to_matrix tmat2 concatmatrix } bdef
-/ds {stri astore pop} bdef
-/dt {dtri astore pop} bdef
-/db {2 copy /cols xdef /rows xdef mul dup string
-  currentfile exch readhexstring pop
-  /bmap xdef pop pop} bdef
-/it {gs np dtri aload pop moveto lineto lineto cp c
-  cols rows 8 compute_transform 
-  {bmap} image gr}bdef
-/il {newpath moveto lineto stroke}bdef
-currentdict end def
-%%EndProlog
-
-%%BeginSetup
-MathWorks begin
-
-0 cap
-
-end
-%%EndSetup
-
-%%Page: 1 1
-%%BeginPageSetup
-%%PageBoundingBox:    52   194   549   605
-MathWorks begin
-bpage
-%%EndPageSetup
-
-%%BeginObject: obj1
-bplot
-
-/dpi2point 12 def
-portraitMode 0204 7344 csm
-
-  424    80  5969  4933 MR c np
-92 dict begin %Colortable dictionary
-/c0 { 0 0 0 sr} bdef
-/c1 { 1 1 1 sr} bdef
-/c2 { 1 0 0 sr} bdef
-/c3 { 0 1 0 sr} bdef
-/c4 { 0 0 1 sr} bdef
-/c5 { 1 1 0 sr} bdef
-/c6 { 1 0 1 sr} bdef
-/c7 { 0 1 1 sr} bdef
-c0
-1 j
-1 sg
-   0    0 6913 5185 PR
-6 w
-0 4225 5356 0 0 -4225 899 4614 4 MP
-PP
--5356 0 0 4225 5356 0 0 -4225 899 4614 5 MP stroke
-4 w
-DO
-0 sg
- 899 4614 mt  899  389 L
- 899  389 mt  899  389 L
-2684 4614 mt 2684  389 L
-2684  389 mt 2684  389 L
-4469 4614 mt 4469  389 L
-4469  389 mt 4469  389 L
-6255 4614 mt 6255  389 L
-6255  389 mt 6255  389 L
- 899 4614 mt 6255 4614 L
-6255 4614 mt 6255 4614 L
- 899 2501 mt 6255 2501 L
-6255 2501 mt 6255 2501 L
- 899  389 mt 6255  389 L
-6255  389 mt 6255  389 L
-SO
-6 w
- 899 4614 mt 6255 4614 L
- 899  389 mt 6255  389 L
- 899 4614 mt  899  389 L
-6255 4614 mt 6255  389 L
- 899 4614 mt 6255 4614 L
- 899 4614 mt  899  389 L
- 899 4614 mt  899 4587 L
- 899  389 mt  899  415 L
-DO
- 899 4614 mt  899  389 L
- 899  389 mt  899  389 L
-SO
- 899 4614 mt  899 4560 L
- 899  389 mt  899  442 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
- 811 4796 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
- 944 4722 mt 
-(1) s
-1436 4614 mt 1436 4587 L
-1436  389 mt 1436  415 L
-DO
-1436 4614 mt 1436  389 L
-1436  389 mt 1436  389 L
-SO
-1750 4614 mt 1750 4587 L
-1750  389 mt 1750  415 L
-DO
-1750 4614 mt 1750  389 L
-1750  389 mt 1750  389 L
-SO
-1973 4614 mt 1973 4587 L
-1973  389 mt 1973  415 L
-DO
-1973 4614 mt 1973  389 L
-1973  389 mt 1973  389 L
-SO
-2146 4614 mt 2146 4587 L
-2146  389 mt 2146  415 L
-DO
-2146 4614 mt 2146  389 L
-2146  389 mt 2146  389 L
-SO
-2288 4614 mt 2288 4587 L
-2288  389 mt 2288  415 L
-DO
-2288 4614 mt 2288  389 L
-2288  389 mt 2288  389 L
-SO
-2407 4614 mt 2407 4587 L
-2407  389 mt 2407  415 L
-DO
-2407 4614 mt 2407  389 L
-2407  389 mt 2407  389 L
-SO
-2511 4614 mt 2511 4587 L
-2511  389 mt 2511  415 L
-DO
-2511 4614 mt 2511  389 L
-2511  389 mt 2511  389 L
-SO
-2602 4614 mt 2602 4587 L
-2602  389 mt 2602  415 L
-DO
-2602 4614 mt 2602  389 L
-2602  389 mt 2602  389 L
-SO
-2684 4614 mt 2684 4587 L
-2684  389 mt 2684  415 L
-DO
-2684 4614 mt 2684  389 L
-2684  389 mt 2684  389 L
-SO
-2684 4614 mt 2684 4560 L
-2684  389 mt 2684  442 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
-2596 4796 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
-2729 4722 mt 
-(2) s
-3221 4614 mt 3221 4587 L
-3221  389 mt 3221  415 L
-DO
-3221 4614 mt 3221  389 L
-3221  389 mt 3221  389 L
-SO
-3536 4614 mt 3536 4587 L
-3536  389 mt 3536  415 L
-DO
-3536 4614 mt 3536  389 L
-3536  389 mt 3536  389 L
-SO
-3759 4614 mt 3759 4587 L
-3759  389 mt 3759  415 L
-DO
-3759 4614 mt 3759  389 L
-3759  389 mt 3759  389 L
-SO
-3932 4614 mt 3932 4587 L
-3932  389 mt 3932  415 L
-DO
-3932 4614 mt 3932  389 L
-3932  389 mt 3932  389 L
-SO
-4073 4614 mt 4073 4587 L
-4073  389 mt 4073  415 L
-DO
-4073 4614 mt 4073  389 L
-4073  389 mt 4073  389 L
-SO
-4193 4614 mt 4193 4587 L
-4193  389 mt 4193  415 L
-DO
-4193 4614 mt 4193  389 L
-4193  389 mt 4193  389 L
-SO
-4296 4614 mt 4296 4587 L
-4296  389 mt 4296  415 L
-DO
-4296 4614 mt 4296  389 L
-4296  389 mt 4296  389 L
-SO
-4387 4614 mt 4387 4587 L
-4387  389 mt 4387  415 L
-DO
-4387 4614 mt 4387  389 L
-4387  389 mt 4387  389 L
-SO
-4469 4614 mt 4469 4587 L
-4469  389 mt 4469  415 L
-DO
-4469 4614 mt 4469  389 L
-4469  389 mt 4469  389 L
-SO
-4469 4614 mt 4469 4560 L
-4469  389 mt 4469  442 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
-4381 4796 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
-4514 4722 mt 
-(3) s
-5007 4614 mt 5007 4587 L
-5007  389 mt 5007  415 L
-DO
-5007 4614 mt 5007  389 L
-5007  389 mt 5007  389 L
-SO
-5321 4614 mt 5321 4587 L
-5321  389 mt 5321  415 L
-DO
-5321 4614 mt 5321  389 L
-5321  389 mt 5321  389 L
-SO
-5544 4614 mt 5544 4587 L
-5544  389 mt 5544  415 L
-DO
-5544 4614 mt 5544  389 L
-5544  389 mt 5544  389 L
-SO
-5717 4614 mt 5717 4587 L
-5717  389 mt 5717  415 L
-DO
-5717 4614 mt 5717  389 L
-5717  389 mt 5717  389 L
-SO
-5858 4614 mt 5858 4587 L
-5858  389 mt 5858  415 L
-DO
-5858 4614 mt 5858  389 L
-5858  389 mt 5858  389 L
-SO
-5978 4614 mt 5978 4587 L
-5978  389 mt 5978  415 L
-DO
-5978 4614 mt 5978  389 L
-5978  389 mt 5978  389 L
-SO
-6081 4614 mt 6081 4587 L
-6081  389 mt 6081  415 L
-DO
-6081 4614 mt 6081  389 L
-6081  389 mt 6081  389 L
-SO
-6173 4614 mt 6173 4587 L
-6173  389 mt 6173  415 L
-DO
-6173 4614 mt 6173  389 L
-6173  389 mt 6173  389 L
-SO
-6255 4614 mt 6255 4587 L
-6255  389 mt 6255  415 L
-DO
-6255 4614 mt 6255  389 L
-6255  389 mt 6255  389 L
-SO
-6255 4614 mt 6255 4560 L
-6255  389 mt 6255  442 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
-6167 4796 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
-6300 4722 mt 
-(4) s
- 899 4614 mt  925 4614 L
-6255 4614 mt 6228 4614 L
-DO
- 899 4614 mt 6255 4614 L
-6255 4614 mt 6255 4614 L
-SO
- 899 4614 mt  952 4614 L
-6255 4614 mt 6201 4614 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
- 640 4658 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
- 773 4584 mt 
-(-2) s
- 899 3978 mt  925 3978 L
-6255 3978 mt 6228 3978 L
-DO
- 899 3978 mt 6255 3978 L
-6255 3978 mt 6255 3978 L
-SO
- 899 3606 mt  925 3606 L
-6255 3606 mt 6228 3606 L
-DO
- 899 3606 mt 6255 3606 L
-6255 3606 mt 6255 3606 L
-SO
- 899 3342 mt  925 3342 L
-6255 3342 mt 6228 3342 L
-DO
- 899 3342 mt 6255 3342 L
-6255 3342 mt 6255 3342 L
-SO
- 899 3137 mt  925 3137 L
-6255 3137 mt 6228 3137 L
-DO
- 899 3137 mt 6255 3137 L
-6255 3137 mt 6255 3137 L
-SO
- 899 2970 mt  925 2970 L
-6255 2970 mt 6228 2970 L
-DO
- 899 2970 mt 6255 2970 L
-6255 2970 mt 6255 2970 L
-SO
- 899 2828 mt  925 2828 L
-6255 2828 mt 6228 2828 L
-DO
- 899 2828 mt 6255 2828 L
-6255 2828 mt 6255 2828 L
-SO
- 899 2706 mt  925 2706 L
-6255 2706 mt 6228 2706 L
-DO
- 899 2706 mt 6255 2706 L
-6255 2706 mt 6255 2706 L
-SO
- 899 2598 mt  925 2598 L
-6255 2598 mt 6228 2598 L
-DO
- 899 2598 mt 6255 2598 L
-6255 2598 mt 6255 2598 L
-SO
- 899 2501 mt  925 2501 L
-6255 2501 mt 6228 2501 L
-DO
- 899 2501 mt 6255 2501 L
-6255 2501 mt 6255 2501 L
-SO
- 899 2501 mt  952 2501 L
-6255 2501 mt 6201 2501 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
- 640 2545 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
- 773 2471 mt 
-(-1) s
- 899 1865 mt  925 1865 L
-6255 1865 mt 6228 1865 L
-DO
- 899 1865 mt 6255 1865 L
-6255 1865 mt 6255 1865 L
-SO
- 899 1493 mt  925 1493 L
-6255 1493 mt 6228 1493 L
-DO
- 899 1493 mt 6255 1493 L
-6255 1493 mt 6255 1493 L
-SO
- 899 1229 mt  925 1229 L
-6255 1229 mt 6228 1229 L
-DO
- 899 1229 mt 6255 1229 L
-6255 1229 mt 6255 1229 L
-SO
- 899 1024 mt  925 1024 L
-6255 1024 mt 6228 1024 L
-DO
- 899 1024 mt 6255 1024 L
-6255 1024 mt 6255 1024 L
-SO
- 899  857 mt  925  857 L
-6255  857 mt 6228  857 L
-DO
- 899  857 mt 6255  857 L
-6255  857 mt 6255  857 L
-SO
- 899  716 mt  925  716 L
-6255  716 mt 6228  716 L
-DO
- 899  716 mt 6255  716 L
-6255  716 mt 6255  716 L
-SO
- 899  593 mt  925  593 L
-6255  593 mt 6228  593 L
-DO
- 899  593 mt 6255  593 L
-6255  593 mt 6255  593 L
-SO
- 899  485 mt  925  485 L
-6255  485 mt 6228  485 L
-DO
- 899  485 mt 6255  485 L
-6255  485 mt 6255  485 L
-SO
- 899  389 mt  925  389 L
-6255  389 mt 6228  389 L
-DO
- 899  389 mt 6255  389 L
-6255  389 mt 6255  389 L
-SO
- 899  389 mt  952  389 L
-6255  389 mt 6201  389 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
- 640  433 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
- 773  359 mt 
-(0) s
- 899 4614 mt 6255 4614 L
- 899  389 mt 6255  389 L
- 899 4614 mt  899  389 L
-6255 4614 mt 6255  389 L
-gs 899 389 5357 4226 MR c np
-1075 636 1075 635 1075 634 1075 629 1800 1088 5 MP stroke
-gs 1727 1015 4447 2681 MR c np
-  36   36 1800 1088 FO
-  36   36 2875 1717 FO
-  36   36 3950 2351 FO
-  36   36 5025 2986 FO
-  36   36 6100 3622 FO
-gr
-
-1075 636 1075 636 1075 636 1075 636 1800 760 5 MP stroke
-gs 1727 687 4447 2691 MR c np
-1764  760 mt 1836  760 L
-1800  724 mt 1800  796 L
-2839 1396 mt 2911 1396 L
-2875 1360 mt 2875 1432 L
-3914 2032 mt 3986 2032 L
-3950 1996 mt 3950 2068 L
-4989 2668 mt 5061 2668 L
-5025 2632 mt 5025 2704 L
-6064 3304 mt 6136 3304 L
-6100 3268 mt 6100 3340 L
-1775  735 mt 1825  785 L
-1825  735 mt 1775  785 L
-2850 1371 mt 2900 1421 L
-2900 1371 mt 2850 1421 L
-3925 2007 mt 3975 2057 L
-3975 2007 mt 3925 2057 L
-5000 2643 mt 5050 2693 L
-5050 2643 mt 5000 2693 L
-6075 3279 mt 6125 3329 L
-6125 3279 mt 6075 3329 L
-gr
-
-1075 636 1075 636 1075 636 1075 636 1800 1978 5 MP stroke
-gr
-
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 168 FMSR
-
-1883  284 mt 
-(L2- and H\(curl\)-error vs. number of elements) s
-2523 4974 mt 
-(number of elements in mesh) s
- 585 3278 mt  -90 rotate
-(error in H\(curl\)-norm) s
-90 rotate
-1 sg
-0 437 1076 0 0 -437 5119 886 4 MP
-PP
--1076 0 0 437 1076 0 0 -437 5119 886 5 MP stroke
-4 w
-DO
-SO
-6 w
-0 sg
-5119  886 mt 6195  886 L
-5119  449 mt 6195  449 L
-5119  886 mt 5119  449 L
-6195  886 mt 6195  449 L
-5119  886 mt 6195  886 L
-5119  886 mt 5119  449 L
-5119  886 mt 6195  886 L
-5119  449 mt 6195  449 L
-5119  886 mt 5119  449 L
-6195  886 mt 6195  449 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
-5452  571 mt 
-(L2-error) s
-5452  709 mt 
-(H\(curl\)-error) s
-5452  847 mt 
-(Order 1) s
-gs 5119 449 1077 438 MR c np
-200 0 5185 531 2 MP stroke
-gs 5212 458 147 147 MR c np
-  36   36 5285  531 FO
-gr
-
-200 0 5185 669 2 MP stroke
-gs 5212 596 147 147 MR c np
-5249  669 mt 5321  669 L
-5285  633 mt 5285  705 L
-5260  644 mt 5310  694 L
-5310  644 mt 5260  694 L
-gr
-
-200 0 5185 808 2 MP stroke
-gr
-
-
-end
-
-eplot
-%%EndObject
-
-epage
-end
-
-showpage
-
-%%Trailer
-%%EOF
-
-%%EndDocument
- @endspecial 28 4616 a(Figure)f(1:)39 b(Con)m(v)m(ergence)30
-b(of)d(the)h(FE-appro)m(ximation)f(to)i(the)e(smo)s(oth)h(solution)e
-(of)i(the)f Fa(MATLAB)f Fk(example)i(\(31\))28 4729 y(in)h(the)h
-Fc(L)352 4696 y Fb(2)392 4729 y Fk(\(\012\)-norm)g(and)g(the)g
-Fc(H)7 b Fk(\(curl)o(;)15 b(\(\012\)\)-seminorm)28 5150
-y Fn(Remark)28 b Fz(7)45 b Fm(The)22 b(mesh)g(gener)l(ation)f(and)h(r)l
-(e\014nement)e(was)i(done)g(by)g Fd(PDE-toolbox)16 b
-Fm(c)l(ommands.)37 b(Sinc)l(e)21 b(the)g Fd(PDE-toolbox)28
-5250 y Fm(do)l(es)32 b(not)f(supp)l(ort)h(thr)l(e)l(e)g(dimensional)h
-(grids,)h(we)e(r)l(estricte)l(d)g(ourselves)g(to)g(2d)g(pr)l(oblems,)i
-(and)e(we)g(have)h(so)f(far)h(no)e(nu-)28 5349 y(meric)l(al)f(r)l
-(esults)f(for)i(the)f(c)l(ase)g(of)h(tetr)l(ahe)l(dr)l(al)f(grids)h(in)
-f(3d.)1949 5719 y Fk(17)p eop
-%%Page: 18 18
-18 17 bop 872 1803 a @beginspecial 52 @llx 194 @lly 549
-@urx 605 @ury 2693 @rwi 1984 @rhi @setspecial
-%%BeginDocument: example2_errors.eps
-%!PS-Adobe-2.0 EPSF-1.2
-%%Creator: MATLAB, The Mathworks, Inc.
-%%Title: pix.eps
-%%CreationDate: 08/26/2002  11:52:50
-%%DocumentNeededFonts: Helvetica
-%%DocumentProcessColors: Cyan Magenta Yellow Black
-%%Pages: 1
-%%BoundingBox:    52   194   549   605
-%%EndComments
-
-%%BeginProlog
-% MathWorks dictionary
-/MathWorks 160 dict begin
-% definition operators
-/bdef {bind def} bind def
-/ldef {load def} bind def
-/xdef {exch def} bdef
-/xstore {exch store} bdef
-% operator abbreviations
-/c  /clip ldef
-/cc /concat ldef
-/cp /closepath ldef
-/gr /grestore ldef
-/gs /gsave ldef
-/mt /moveto ldef
-/np /newpath ldef
-/cm /currentmatrix ldef
-/sm /setmatrix ldef
-/rm /rmoveto ldef
-/rl /rlineto ldef
-/s /show ldef
-/sc {setcmykcolor} bdef
-/sr /setrgbcolor ldef
-/sg /setgray ldef
-/w /setlinewidth ldef
-/j /setlinejoin ldef
-/cap /setlinecap ldef
-/rc {rectclip} bdef
-/rf {rectfill} bdef
-% page state control
-/pgsv () def
-/bpage {/pgsv save def} bdef
-/epage {pgsv restore} bdef
-/bplot /gsave ldef
-/eplot {stroke grestore} bdef
-% orientation switch
-/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
-% coordinate system mappings
-/dpi2point 0 def
-% font control
-/FontSize 0 def
-/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
-  makefont setfont} bdef
-/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
-  exch dup 3 1 roll findfont dup length dict begin
-  { 1 index /FID ne {def}{pop pop} ifelse } forall
-  /Encoding exch def currentdict end definefont pop} bdef
-/isroman {findfont /CharStrings get /Agrave known} bdef
-/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
-  exch FMS} bdef
-/csm {1 dpi2point div -1 dpi2point div scale neg translate
- dup landscapeMode eq {pop -90 rotate}
-  {rotateMode eq {90 rotate} if} ifelse} bdef
-% line types: solid, dotted, dashed, dotdash
-/SO { [] 0 setdash } bdef
-/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
-/DA { [6 dpi2point mul] 0 setdash } bdef
-/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
-  dpi2point mul] 0 setdash } bdef
-% macros for lines and objects
-/L {lineto stroke} bdef
-/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
-/AP {{rlineto} repeat} bdef
-/PDlw -1 def
-/W {/PDlw currentlinewidth def setlinewidth} def
-/PP {closepath eofill} bdef
-/DP {closepath stroke} bdef
-/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
-  neg 0 exch rlineto closepath} bdef
-/FR {MR stroke} bdef
-/PR {MR fill} bdef
-/L1i {{currentfile picstr readhexstring pop} image} bdef
-/tMatrix matrix def
-/MakeOval {newpath tMatrix currentmatrix pop translate scale
-0 0 1 0 360 arc tMatrix setmatrix} bdef
-/FO {MakeOval stroke} bdef
-/PO {MakeOval fill} bdef
-/PD {currentlinecap 1 cap 3 1 roll 2 copy mt lineto stroke
-   cap PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
-/FA {newpath tMatrix currentmatrix pop translate scale
-  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
-/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
-  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
-/FAn {newpath tMatrix currentmatrix pop translate scale
-  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
-/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
-  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
-/vradius 0 def /hradius 0 def /lry 0 def
-/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
-/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
-  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
-  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
-  tMatrix setmatrix lrx hradius sub uly vradius add translate
-  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
-  lrx hradius sub lry vradius sub translate hradius vradius scale
-  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
-  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
-  closepath} bdef
-/FRR {MRR stroke } bdef
-/PRR {MRR fill } bdef
-/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
-  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
-  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
-  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
-  closepath} bdef
-/FlrRR {MlrRR stroke } bdef
-/PlrRR {MlrRR fill } bdef
-/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
-  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
-  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
-  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
-  closepath} bdef
-/FtbRR {MtbRR stroke } bdef
-/PtbRR {MtbRR fill } bdef
-/stri 6 array def /dtri 6 array def
-/smat 6 array def /dmat 6 array def
-/tmat1 6 array def /tmat2 6 array def /dif 3 array def
-/asub {/ind2 exch def /ind1 exch def dup dup
-  ind1 get exch ind2 get sub exch } bdef
-/tri_to_matrix {
-  2 0 asub 3 1 asub 4 0 asub 5 1 asub
-  dup 0 get exch 1 get 7 -1 roll astore } bdef
-/compute_transform {
-  dmat dtri tri_to_matrix tmat1 invertmatrix 
-  smat stri tri_to_matrix tmat2 concatmatrix } bdef
-/ds {stri astore pop} bdef
-/dt {dtri astore pop} bdef
-/db {2 copy /cols xdef /rows xdef mul dup string
-  currentfile exch readhexstring pop
-  /bmap xdef pop pop} bdef
-/it {gs np dtri aload pop moveto lineto lineto cp c
-  cols rows 8 compute_transform 
-  {bmap} image gr}bdef
-/il {newpath moveto lineto stroke}bdef
-currentdict end def
-%%EndProlog
-
-%%BeginSetup
-MathWorks begin
-
-0 cap
-
-end
-%%EndSetup
-
-%%Page: 1 1
-%%BeginPageSetup
-%%PageBoundingBox:    52   194   549   605
-MathWorks begin
-bpage
-%%EndPageSetup
-
-%%BeginObject: obj1
-bplot
-
-/dpi2point 12 def
-portraitMode 0204 7344 csm
-
-  424    80  5969  4933 MR c np
-92 dict begin %Colortable dictionary
-/c0 { 0 0 0 sr} bdef
-/c1 { 1 1 1 sr} bdef
-/c2 { 1 0 0 sr} bdef
-/c3 { 0 1 0 sr} bdef
-/c4 { 0 0 1 sr} bdef
-/c5 { 1 1 0 sr} bdef
-/c6 { 1 0 1 sr} bdef
-/c7 { 0 1 1 sr} bdef
-c0
-1 j
-1 sg
-   0    0 6913 5185 PR
-6 w
-0 4225 5356 0 0 -4225 899 4614 4 MP
-PP
--5356 0 0 4225 5356 0 0 -4225 899 4614 5 MP stroke
-4 w
-DO
-0 sg
- 899 4614 mt  899  389 L
- 899  389 mt  899  389 L
-2684 4614 mt 2684  389 L
-2684  389 mt 2684  389 L
-4469 4614 mt 4469  389 L
-4469  389 mt 4469  389 L
-6255 4614 mt 6255  389 L
-6255  389 mt 6255  389 L
- 899 4614 mt 6255 4614 L
-6255 4614 mt 6255 4614 L
- 899 3205 mt 6255 3205 L
-6255 3205 mt 6255 3205 L
- 899 1797 mt 6255 1797 L
-6255 1797 mt 6255 1797 L
- 899  389 mt 6255  389 L
-6255  389 mt 6255  389 L
-SO
-6 w
- 899 4614 mt 6255 4614 L
- 899  389 mt 6255  389 L
- 899 4614 mt  899  389 L
-6255 4614 mt 6255  389 L
- 899 4614 mt 6255 4614 L
- 899 4614 mt  899  389 L
- 899 4614 mt  899 4587 L
- 899  389 mt  899  415 L
-DO
- 899 4614 mt  899  389 L
- 899  389 mt  899  389 L
-SO
- 899 4614 mt  899 4560 L
- 899  389 mt  899  442 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
- 811 4796 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
- 944 4722 mt 
-(1) s
-1436 4614 mt 1436 4587 L
-1436  389 mt 1436  415 L
-DO
-1436 4614 mt 1436  389 L
-1436  389 mt 1436  389 L
-SO
-1750 4614 mt 1750 4587 L
-1750  389 mt 1750  415 L
-DO
-1750 4614 mt 1750  389 L
-1750  389 mt 1750  389 L
-SO
-1973 4614 mt 1973 4587 L
-1973  389 mt 1973  415 L
-DO
-1973 4614 mt 1973  389 L
-1973  389 mt 1973  389 L
-SO
-2146 4614 mt 2146 4587 L
-2146  389 mt 2146  415 L
-DO
-2146 4614 mt 2146  389 L
-2146  389 mt 2146  389 L
-SO
-2288 4614 mt 2288 4587 L
-2288  389 mt 2288  415 L
-DO
-2288 4614 mt 2288  389 L
-2288  389 mt 2288  389 L
-SO
-2407 4614 mt 2407 4587 L
-2407  389 mt 2407  415 L
-DO
-2407 4614 mt 2407  389 L
-2407  389 mt 2407  389 L
-SO
-2511 4614 mt 2511 4587 L
-2511  389 mt 2511  415 L
-DO
-2511 4614 mt 2511  389 L
-2511  389 mt 2511  389 L
-SO
-2602 4614 mt 2602 4587 L
-2602  389 mt 2602  415 L
-DO
-2602 4614 mt 2602  389 L
-2602  389 mt 2602  389 L
-SO
-2684 4614 mt 2684 4587 L
-2684  389 mt 2684  415 L
-DO
-2684 4614 mt 2684  389 L
-2684  389 mt 2684  389 L
-SO
-2684 4614 mt 2684 4560 L
-2684  389 mt 2684  442 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
-2596 4796 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
-2729 4722 mt 
-(2) s
-3221 4614 mt 3221 4587 L
-3221  389 mt 3221  415 L
-DO
-3221 4614 mt 3221  389 L
-3221  389 mt 3221  389 L
-SO
-3536 4614 mt 3536 4587 L
-3536  389 mt 3536  415 L
-DO
-3536 4614 mt 3536  389 L
-3536  389 mt 3536  389 L
-SO
-3759 4614 mt 3759 4587 L
-3759  389 mt 3759  415 L
-DO
-3759 4614 mt 3759  389 L
-3759  389 mt 3759  389 L
-SO
-3932 4614 mt 3932 4587 L
-3932  389 mt 3932  415 L
-DO
-3932 4614 mt 3932  389 L
-3932  389 mt 3932  389 L
-SO
-4073 4614 mt 4073 4587 L
-4073  389 mt 4073  415 L
-DO
-4073 4614 mt 4073  389 L
-4073  389 mt 4073  389 L
-SO
-4193 4614 mt 4193 4587 L
-4193  389 mt 4193  415 L
-DO
-4193 4614 mt 4193  389 L
-4193  389 mt 4193  389 L
-SO
-4296 4614 mt 4296 4587 L
-4296  389 mt 4296  415 L
-DO
-4296 4614 mt 4296  389 L
-4296  389 mt 4296  389 L
-SO
-4387 4614 mt 4387 4587 L
-4387  389 mt 4387  415 L
-DO
-4387 4614 mt 4387  389 L
-4387  389 mt 4387  389 L
-SO
-4469 4614 mt 4469 4587 L
-4469  389 mt 4469  415 L
-DO
-4469 4614 mt 4469  389 L
-4469  389 mt 4469  389 L
-SO
-4469 4614 mt 4469 4560 L
-4469  389 mt 4469  442 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
-4381 4796 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
-4514 4722 mt 
-(3) s
-5007 4614 mt 5007 4587 L
-5007  389 mt 5007  415 L
-DO
-5007 4614 mt 5007  389 L
-5007  389 mt 5007  389 L
-SO
-5321 4614 mt 5321 4587 L
-5321  389 mt 5321  415 L
-DO
-5321 4614 mt 5321  389 L
-5321  389 mt 5321  389 L
-SO
-5544 4614 mt 5544 4587 L
-5544  389 mt 5544  415 L
-DO
-5544 4614 mt 5544  389 L
-5544  389 mt 5544  389 L
-SO
-5717 4614 mt 5717 4587 L
-5717  389 mt 5717  415 L
-DO
-5717 4614 mt 5717  389 L
-5717  389 mt 5717  389 L
-SO
-5858 4614 mt 5858 4587 L
-5858  389 mt 5858  415 L
-DO
-5858 4614 mt 5858  389 L
-5858  389 mt 5858  389 L
-SO
-5978 4614 mt 5978 4587 L
-5978  389 mt 5978  415 L
-DO
-5978 4614 mt 5978  389 L
-5978  389 mt 5978  389 L
-SO
-6081 4614 mt 6081 4587 L
-6081  389 mt 6081  415 L
-DO
-6081 4614 mt 6081  389 L
-6081  389 mt 6081  389 L
-SO
-6173 4614 mt 6173 4587 L
-6173  389 mt 6173  415 L
-DO
-6173 4614 mt 6173  389 L
-6173  389 mt 6173  389 L
-SO
-6255 4614 mt 6255 4587 L
-6255  389 mt 6255  415 L
-DO
-6255 4614 mt 6255  389 L
-6255  389 mt 6255  389 L
-SO
-6255 4614 mt 6255 4560 L
-6255  389 mt 6255  442 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
-6167 4796 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
-6300 4722 mt 
-(4) s
- 899 4614 mt  925 4614 L
-6255 4614 mt 6228 4614 L
-DO
- 899 4614 mt 6255 4614 L
-6255 4614 mt 6255 4614 L
-SO
- 899 4614 mt  952 4614 L
-6255 4614 mt 6201 4614 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
- 640 4658 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
- 773 4584 mt 
-(-2) s
- 899 4190 mt  925 4190 L
-6255 4190 mt 6228 4190 L
-DO
- 899 4190 mt 6255 4190 L
-6255 4190 mt 6255 4190 L
-SO
- 899 3942 mt  925 3942 L
-6255 3942 mt 6228 3942 L
-DO
- 899 3942 mt 6255 3942 L
-6255 3942 mt 6255 3942 L
-SO
- 899 3766 mt  925 3766 L
-6255 3766 mt 6228 3766 L
-DO
- 899 3766 mt 6255 3766 L
-6255 3766 mt 6255 3766 L
-SO
- 899 3629 mt  925 3629 L
-6255 3629 mt 6228 3629 L
-DO
- 899 3629 mt 6255 3629 L
-6255 3629 mt 6255 3629 L
-SO
- 899 3518 mt  925 3518 L
-6255 3518 mt 6228 3518 L
-DO
- 899 3518 mt 6255 3518 L
-6255 3518 mt 6255 3518 L
-SO
- 899 3423 mt  925 3423 L
-6255 3423 mt 6228 3423 L
-DO
- 899 3423 mt 6255 3423 L
-6255 3423 mt 6255 3423 L
-SO
- 899 3342 mt  925 3342 L
-6255 3342 mt 6228 3342 L
-DO
- 899 3342 mt 6255 3342 L
-6255 3342 mt 6255 3342 L
-SO
- 899 3270 mt  925 3270 L
-6255 3270 mt 6228 3270 L
-DO
- 899 3270 mt 6255 3270 L
-6255 3270 mt 6255 3270 L
-SO
- 899 3205 mt  925 3205 L
-6255 3205 mt 6228 3205 L
-DO
- 899 3205 mt 6255 3205 L
-6255 3205 mt 6255 3205 L
-SO
- 899 3205 mt  952 3205 L
-6255 3205 mt 6201 3205 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
- 640 3249 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
- 773 3175 mt 
-(-1) s
- 899 2781 mt  925 2781 L
-6255 2781 mt 6228 2781 L
-DO
- 899 2781 mt 6255 2781 L
-6255 2781 mt 6255 2781 L
-SO
- 899 2533 mt  925 2533 L
-6255 2533 mt 6228 2533 L
-DO
- 899 2533 mt 6255 2533 L
-6255 2533 mt 6255 2533 L
-SO
- 899 2357 mt  925 2357 L
-6255 2357 mt 6228 2357 L
-DO
- 899 2357 mt 6255 2357 L
-6255 2357 mt 6255 2357 L
-SO
- 899 2221 mt  925 2221 L
-6255 2221 mt 6228 2221 L
-DO
- 899 2221 mt 6255 2221 L
-6255 2221 mt 6255 2221 L
-SO
- 899 2109 mt  925 2109 L
-6255 2109 mt 6228 2109 L
-DO
- 899 2109 mt 6255 2109 L
-6255 2109 mt 6255 2109 L
-SO
- 899 2015 mt  925 2015 L
-6255 2015 mt 6228 2015 L
-DO
- 899 2015 mt 6255 2015 L
-6255 2015 mt 6255 2015 L
-SO
- 899 1933 mt  925 1933 L
-6255 1933 mt 6228 1933 L
-DO
- 899 1933 mt 6255 1933 L
-6255 1933 mt 6255 1933 L
-SO
- 899 1861 mt  925 1861 L
-6255 1861 mt 6228 1861 L
-DO
- 899 1861 mt 6255 1861 L
-6255 1861 mt 6255 1861 L
-SO
- 899 1797 mt  925 1797 L
-6255 1797 mt 6228 1797 L
-DO
- 899 1797 mt 6255 1797 L
-6255 1797 mt 6255 1797 L
-SO
- 899 1797 mt  952 1797 L
-6255 1797 mt 6201 1797 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
- 640 1841 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
- 773 1767 mt 
-(0) s
- 899 1373 mt  925 1373 L
-6255 1373 mt 6228 1373 L
-DO
- 899 1373 mt 6255 1373 L
-6255 1373 mt 6255 1373 L
-SO
- 899 1125 mt  925 1125 L
-6255 1125 mt 6228 1125 L
-DO
- 899 1125 mt 6255 1125 L
-6255 1125 mt 6255 1125 L
-SO
- 899  949 mt  925  949 L
-6255  949 mt 6228  949 L
-DO
- 899  949 mt 6255  949 L
-6255  949 mt 6255  949 L
-SO
- 899  812 mt  925  812 L
-6255  812 mt 6228  812 L
-DO
- 899  812 mt 6255  812 L
-6255  812 mt 6255  812 L
-SO
- 899  701 mt  925  701 L
-6255  701 mt 6228  701 L
-DO
- 899  701 mt 6255  701 L
-6255  701 mt 6255  701 L
-SO
- 899  607 mt  925  607 L
-6255  607 mt 6228  607 L
-DO
- 899  607 mt 6255  607 L
-6255  607 mt 6255  607 L
-SO
- 899  525 mt  925  525 L
-6255  525 mt 6228  525 L
-DO
- 899  525 mt 6255  525 L
-6255  525 mt 6255  525 L
-SO
- 899  453 mt  925  453 L
-6255  453 mt 6228  453 L
-DO
- 899  453 mt 6255  453 L
-6255  453 mt 6255  453 L
-SO
- 899  389 mt  925  389 L
-6255  389 mt 6228  389 L
-DO
- 899  389 mt 6255  389 L
-6255  389 mt 6255  389 L
-SO
- 899  389 mt  952  389 L
-6255  389 mt 6201  389 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
- 640  433 mt 
-(10) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 80 FMSR
-
- 773  359 mt 
-(1) s
- 899 4614 mt 6255 4614 L
- 899  389 mt 6255  389 L
- 899 4614 mt  899  389 L
-6255 4614 mt 6255  389 L
-gs 899 389 5357 4226 MR c np
-1075 424 1075 424 1075 427 1075 427 1800 2062 5 MP stroke
-gs 1727 1989 4447 1849 MR c np
-  36   36 1800 2062 FO
-  36   36 2875 2489 FO
-  36   36 3950 2916 FO
-  36   36 5025 3340 FO
-  36   36 6100 3764 FO
-gr
-
-1075 423 1075 422 1075 415 1075 390 1800 1114 5 MP stroke
-gs 1727 1041 4447 1797 MR c np
-1764 1114 mt 1836 1114 L
-1800 1078 mt 1800 1150 L
-2839 1504 mt 2911 1504 L
-2875 1468 mt 2875 1540 L
-3914 1919 mt 3986 1919 L
-3950 1883 mt 3950 1955 L
-4989 2341 mt 5061 2341 L
-5025 2305 mt 5025 2377 L
-6064 2764 mt 6136 2764 L
-6100 2728 mt 6100 2800 L
-1775 1089 mt 1825 1139 L
-1825 1089 mt 1775 1139 L
-2850 1479 mt 2900 1529 L
-2900 1479 mt 2850 1529 L
-3925 1894 mt 3975 1944 L
-3975 1894 mt 3925 1944 L
-5000 2316 mt 5050 2366 L
-5050 2316 mt 5000 2366 L
-6075 2739 mt 6125 2789 L
-6125 2739 mt 6075 2789 L
-gr
-
-1075 424 1075 424 1075 424 1075 424 1800 2857 5 MP stroke
-gr
-
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 168 FMSR
-
-1883  284 mt 
-(L2- and H\(curl\)-error vs. number of elements) s
-2523 4974 mt 
-(number of elements in mesh) s
- 585 3278 mt  -90 rotate
-(error in H\(curl\)-norm) s
-90 rotate
-1 sg
-0 437 1076 0 0 -437 5119 886 4 MP
-PP
--1076 0 0 437 1076 0 0 -437 5119 886 5 MP stroke
-4 w
-DO
-SO
-6 w
-0 sg
-5119  886 mt 6195  886 L
-5119  449 mt 6195  449 L
-5119  886 mt 5119  449 L
-6195  886 mt 6195  449 L
-5119  886 mt 6195  886 L
-5119  886 mt 5119  449 L
-5119  886 mt 6195  886 L
-5119  449 mt 6195  449 L
-5119  886 mt 5119  449 L
-6195  886 mt 6195  449 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
-5452  571 mt 
-(L2-error) s
-5452  709 mt 
-(H\(curl\)-error) s
-5452  847 mt 
-(Order 1) s
-gs 5119 449 1077 438 MR c np
-200 0 5185 531 2 MP stroke
-gs 5212 458 147 147 MR c np
-  36   36 5285  531 FO
-gr
-
-200 0 5185 669 2 MP stroke
-gs 5212 596 147 147 MR c np
-5249  669 mt 5321  669 L
-5285  633 mt 5285  705 L
-5260  644 mt 5310  694 L
-5310  644 mt 5260  694 L
-gr
-
-200 0 5185 808 2 MP stroke
-gr
-
-
-end
-
-eplot
-%%EndObject
-
-epage
-end
-
-showpage
-
-%%Trailer
-%%EOF
-
-%%EndDocument
- @endspecial 28 1999 a Fk(Figure)27 b(2:)39 b(Con)m(v)m(ergence)30
-b(of)d(the)h(FE-appro)m(ximation)f(to)i(the)e(smo)s(oth)h(solution)e
-(of)i(the)f Fa(MATLAB)f Fk(example)i(\(32\))28 2112 y(in)h(the)h
-Fc(L)352 2079 y Fb(2)392 2112 y Fk(\(\012\)-norm)g(and)g(the)g
-Fc(H)7 b Fk(\(curl)o(;)15 b(\(\012\)\)-seminorm)28 2458
-y Fz(As)27 b(for)f(meshes)h(with)g(quadrilateral)e(cells,)i(n)n
-(umerical)f(results)g(w)n(ere)g(obtained)h(with)g(a)g
-Fd(deal.II)d Fz(co)r(de,)j(using)f(the)i(\014nite)28
-2558 y(elemen)n(t)i(class)f Fd(fe/fe)p 754 2571 44 4
-v 42 w(nedelec.cc)p Fz(.)40 b(This)30 b(class)f(pro)n(vides)g(N)n(\023)
--39 b(ed)n(\023)g(elec's)28 b Fx(H)7 b Fz(\(curl;)14
-b(\012\)-conforming)29 b(elemen)n(t)h(of)g(\014rst)g(t)n(yp)r(e)28
-2657 y(and)22 b(lo)n(w)n(est)f(order)h(in)g(t)n(w)n(o)g(and)h(three)f
-(space)g(dimensions,)h(on)f(bilinear)g(quadrilateral,)g(resp.)34
-b(trilinear)22 b(hexahedral)f(grids.)28 2757 y(F)-7 b(or)29
-b(details)h(ab)r(out)g Fd(deal.II)p Fz(,)e(see)i([2)o(].)45
-b(In)30 b(the)h(follo)n(wing)e(results)h(w)n(ere)f(obtained)h(for)g
-(the)g(mo)r(del)h(problem)e(\(1\))i(in)f(t)n(w)n(o)28
-2856 y(dimensions)25 b(using)g(the)h(data)f(\(32\).)35
-b(W)-7 b(e)26 b(computed)g(the)g(solution)f(on)g(\014v)n(e)g(successiv)
-n(e)f(non-a\016ne)h(bilinear)g(grids)f(\()i(\014gure)28
-2956 y(3\),)h(eac)n(h)g(of)g(whic)n(h)h(w)n(as)f(obtained)g(b)n(y)g
-(global)g(re\014nemen)n(t)g(of)h(the)g(previous)e(one.)1345
-4376 y @beginspecial 0 @llx 0 @lly 301 @urx 301 @ury
-1559 @rwi 1559 @rhi @setspecial
-%%BeginDocument: grid.eps
-%!PS-Adobe-2.0 EPSF-1.2
-%%Title: deal.II Output
-%%Creator: the deal.II library
-%%Creation Date: 2003/4/28 - 11: 4:40
-%%BoundingBox: 0 0 301 301
-/m {moveto} bind def
-/x {lineto stroke} bind def
-/b {0 0 0 setrgbcolor} def
-/r {1 0 0 setrgbcolor} def
-%%EndProlog
-
-0.5 setlinewidth
-b 0 0 m 75 0 x
-b 75 0 m 150 0 x
-b 150 0 m 166.915 82.0968 x
-b 166.915 82.0968 m 179.319 164.952 x
-b 0 150 m 90.0209 159.679 x
-b 90.0209 159.679 m 179.319 164.952 x
-b 0 0 m 0 75 x
-b 0 75 m 0 150 x
-b 75 0 m 83.5481 81.6946 x
-b 83.5481 81.6946 m 90.0209 159.679 x
-b 0 75 m 83.5481 81.6946 x
-b 83.5481 81.6946 m 166.915 82.0968 x
-b 150 0 m 225 0 x
-b 225 0 m 300 0 x
-b 300 0 m 300 75 x
-b 300 75 m 300 150 x
-b 179.319 164.952 m 240.445 158.833 x
-b 240.445 158.833 m 300 150 x
-b 225 0 m 233.767 80.9701 x
-b 233.767 80.9701 m 240.445 158.833 x
-b 166.915 82.0968 m 233.767 80.9701 x
-b 233.767 80.9701 m 300 75 x
-b 300 150 m 300 225 x
-b 300 225 m 300 300 x
-b 150 300 m 225 300 x
-b 225 300 m 300 300 x
-b 179.319 164.952 m 166.039 233.741 x
-b 166.039 233.741 m 150 300 x
-b 240.445 158.833 m 234.054 230.742 x
-b 234.054 230.742 m 225 300 x
-b 166.039 233.741 m 234.054 230.742 x
-b 234.054 230.742 m 300 225 x
-b 0 300 m 75 300 x
-b 75 300 m 150 300 x
-b 0 150 m 0 225 x
-b 0 225 m 0 300 x
-b 90.0209 159.679 m 82.6087 231.699 x
-b 82.6087 231.699 m 75 300 x
-b 0 225 m 82.6087 231.699 x
-b 82.6087 231.699 m 166.039 233.741 x
-showpage
-
-%%EndDocument
- @endspecial 276 4572 a Fk(Figure)k(3:)41 b(Non-a\016ne)31
-b(bilinear)d(grid)h(used)g(in)g(the)i Fa(deal.II)d Fk(co)s(de,)j(after)
-g(one)g(re\014nemen)m(t)f(step.)28 4867 y Fz(Again,)25
-b(in)g(T)-7 b(able)25 b(2)g(w)n(e)f(can)h(observ)n(e)e(optimal)i(con)n
-(v)n(ergence)e(of)i(order)e Fs(O)r Fz(\()p Fx(h)p Fz(\))j(in)g(the)f
-Fx(H)7 b Fz(\(curl;)14 b(\012\)-norm.)35 b(The)25 b(same)g(order)28
-4967 y(of)i(con)n(v)n(ergence)e(is)j(obtained)f(for)g(the)h(error)e(in)
-i(the)g Fx(L)1777 4937 y Fp(2)1813 4967 y Fz(\(\012\)-norm.)28
-5166 y(With)d Fd(deal.II)p Fz(,)d(w)n(e)j(are)f(also)f(able)i(to)f
-(treat)h(3d)f(problems)g(on)h(hexahedral)e(grids.)35
-b(F)-7 b(or)25 b(our)f(t)n(yp)r(e)h(of)f(problem,)h(N)n(\023)-39
-b(ed)n(\023)g(elec's)28 5266 y Fx(H)7 b Fz(\(curl)o(;)14
-b(\012\)-conforming)k(elemen)n(ts)g(of)h(\014rst)f(t)n(yp)r(e)h(and)f
-(lo)n(w)n(est)g(order,)h(based)f(on)h(a)f(cubic)h(reference)e(elemen)n
-(t,)k(are)d(a)n(v)-5 b(ailable.)1949 5719 y Fk(18)p eop
-%%Page: 19 19
-19 18 bop 910 153 2170 4 v 908 266 4 113 v 960 232 a
-Fk(grid)p 1165 266 V 98 w(#)30 b(cells)p 1537 266 V 1537
-266 V 170 w Fc(H)7 b Fk(\(curl)o(\)-error)p 2307 266
-V 2307 266 V 344 w Fc(L)2594 199 y Fb(2)2633 232 y Fk(-error)p
-3077 266 V 910 269 2170 4 v 908 382 4 113 v 1015 348
-a(1)p 1165 382 V 384 w(4)p 1537 382 V 100 w(6.112e+00)p
-2046 382 V 168 w(-)p 2307 382 V 166 w(1.442e+00)p 2816
-382 V 168 w(-)p 3077 382 V 910 385 2170 4 v 908 498 4
-113 v 1015 464 a(2)p 1165 498 V 338 w(16)p 1537 498 V
-101 w(3.688e+00)p 2046 498 V 103 w(0.73)p 2307 498 V
-121 w(6.765e-01)p 2816 498 V 124 w(1.09)p 3077 498 V
-910 501 2170 4 v 908 614 4 113 v 1015 580 a(3)p 1165
-614 V 338 w(64)p 1537 614 V 101 w(1.991e+00)p 2046 614
-V 103 w(0.89)p 2307 614 V 121 w(3.280e-01)p 2816 614
-V 124 w(1.04)p 3077 614 V 910 618 2170 4 v 908 731 4
-113 v 1015 697 a(4)p 1165 731 V 293 w(256)p 1537 731
-V 101 w(1.015e+00)p 2046 731 V 103 w(0.97)p 2307 731
-V 121 w(1.617e-01)p 2816 731 V 124 w(1.02)p 3077 731
-V 910 734 2170 4 v 908 847 4 113 v 1015 813 a(5)p 1165
-847 V 247 w(1024)p 1537 847 V 122 w(5.098e-01)p 2046
-847 V 124 w(0.99)p 2307 847 V 121 w(8.049e-02)p 2816
-847 V 124 w(1.01)p 3077 847 V 910 850 2170 4 v 28 1117
-a(T)-8 b(able)26 b(2:)39 b(Errors)26 b(and)g(con)m(v)m(ergence)j(rates)
-f(in)d(the)i Fc(H)7 b Fk(\(curl)o(;)15 b(\012\)-)28 b(and)e
-Fc(L)2511 1084 y Fb(2)2550 1117 y Fk(\(\012\)-norm)h(for)g(the)g
-(2d-example)f(solv)m(ed)28 1230 y(with)j Fa(deal.II)p
-Fk(.)28 1458 y Fz(W)-7 b(e)28 b(computed)f(an)h(appro)n(ximation)d(to)j
-(the)g(mo)r(del)g(problem)f(\(1\))g(in)h(3d)g(using)f(the)h(data)675
-1740 y Fx(c)23 b Fs(\021)f Fz(1)14 b Fx(;)180 b(f)p 1080
-1770 50 4 v 8 w Fz(\()p Fx(x;)14 b(y)s(;)g(z)t Fz(\))23
-b(=)1512 1574 y Fl(0)1512 1723 y(@)1794 1640 y Fx(xy)s
-Fz(\(1)18 b Fs(\000)g Fx(y)2104 1610 y Fp(2)2141 1640
-y Fz(\)\(1)g Fs(\000)g Fx(z)2391 1610 y Fp(2)2428 1640
-y Fz(\))h(+)f(2)p Fx(xy)s Fz(\(1)g Fs(\000)g Fx(z)2913
-1610 y Fp(2)2949 1640 y Fz(\))1626 1740 y Fx(y)1670 1709
-y Fp(2)1707 1740 y Fz(\(1)g Fs(\000)g Fx(x)1929 1709
-y Fp(2)1967 1740 y Fz(\)\(1)g Fs(\000)g Fx(z)2217 1709
-y Fp(2)2254 1740 y Fz(\))g(+)h(\(1)f Fs(\000)g Fx(y)2607
-1709 y Fp(2)2644 1740 y Fz(\)\(2)g Fs(\000)g Fx(x)2898
-1709 y Fp(2)2954 1740 y Fs(\000)g Fx(z)3080 1709 y Fp(2)3117
-1740 y Fz(\))1794 1839 y Fx(y)s(z)t Fz(\(1)f Fs(\000)h
-Fx(x)2102 1809 y Fp(2)2139 1839 y Fz(\)\(1)h Fs(\000)f
-Fx(y)2391 1809 y Fp(2)2428 1839 y Fz(\))h(+)f(2)p Fx(y)s(z)t
-Fz(\(1)e Fs(\000)i Fx(x)2911 1809 y Fp(2)2949 1839 y
-Fz(\))3191 1574 y Fl(1)3191 1723 y(A)3291 1740 y Fx(:)500
-b Fz(\(33\))28 2018 y(In)25 b(a)g(\014rst)f(exp)r(erimen)n(t,)i(the)f
-(\014nite)h(elemen)n(t)f(solution)g(w)n(as)f(computed)h(on)g(\014v)n(e)
-g(successiv)n(e)f(globally)f(re\014ned)i(a\016ne)g(grids.)28
-2118 y(In)c(a)g(second)g(computation,)i(w)n(e)e(appro)n(ximated)f(the)i
-(solution)f(of)g(the)h(same)f(problem)g(on)g(\014v)n(e)g(successiv)n(e)
-f(globally)h(re\014ned)28 2217 y(non-a\016ne)26 b(trilinear)h(grids.)28
-2317 y(W)-7 b(e)28 b(see)g(in)h(T)-7 b(able)28 b(3)g(that)g(in)h(b)r
-(oth)g(cases)e(w)n(e)h(observ)n(e)e(again)h(con)n(v)n(ergence)f(of)j
-(order)d Fs(O)r Fz(\()p Fx(h)p Fz(\))k(in)e(the)h Fx(H)7
-b Fz(\(curl;)14 b(\012\)-)28 b(and)g(the)28 2417 y Fx(L)85
-2386 y Fp(2)121 2417 y Fz(\(\012\)-norm.)p 594 2619 2800
-4 v 592 2732 4 113 v 1304 2732 V 1356 2698 a Fk(grid)p
-1561 2732 V 98 w(#)i(cells)p 1934 2732 V 1934 2732 V
-150 w Fc(H)7 b Fk(\(curl)o(\)-error)p 2663 2732 V 2663
-2732 V 303 w Fc(L)2929 2665 y Fb(2)2969 2698 y Fk(-error)p
-3393 2732 V 594 2735 2800 4 v 592 2848 4 113 v 1304 2848
-V 1411 2814 a(1)p 1561 2848 V 384 w(8)p 1934 2848 V 100
-w(7.696e-01)p 2402 2848 V 169 w(-)p 2663 2848 V 166 w(6.609e-01)p
-3131 2848 V 169 w(-)p 3393 2848 V 592 2961 V 1304 2961
-V 1411 2927 a(2)p 1561 2961 V 339 w(64)p 1934 2961 V
-100 w(4.088e-01)p 2402 2961 V 103 w(0.91)p 2663 2961
-V 102 w(2.943e-01)p 3131 2961 V 103 w(1.17)p 3393 2961
-V 592 3074 V 733 3040 a(a\016ne)30 b(grids)p 1304 3074
-V 242 w(3)p 1561 3074 V 293 w(512)p 1934 3074 V 101 w(2.075e-01)p
-2402 3074 V 103 w(0.98)p 2663 3074 V 102 w(1.408e-01)p
-3131 3074 V 103 w(1.06)p 3393 3074 V 592 3187 V 1304
-3187 V 1411 3153 a(4)p 1561 3187 V 248 w(4096)p 1934
-3187 V 101 w(1.041e-01)p 2402 3187 V 103 w(0.99)p 2663
-3187 V 102 w(6.955e-02)p 3131 3187 V 103 w(1.02)p 3393
-3187 V 592 3300 V 1304 3300 V 1411 3266 a(5)p 1561 3300
-V 202 w(32768)p 1934 3300 V 102 w(5.210e-02)p 2402 3300
-V 103 w(1.00)p 2663 3300 V 102 w(3.467e-02)p 3131 3300
-V 103 w(1.00)p 3393 3300 V 594 3303 2800 4 v 592 3416
-4 113 v 1304 3416 V 1411 3382 a(1)p 1561 3416 V 384 w(8)p
-1934 3416 V 100 w(7.716e-01)p 2402 3416 V 169 w(-)p 2663
-3416 V 166 w(6.611e-01)p 3131 3416 V 169 w(-)p 3393 3416
-V 592 3529 V 1304 3529 V 1411 3495 a(2)p 1561 3529 V
-339 w(64)p 1934 3529 V 100 w(4.108e-01)p 2402 3529 V
-103 w(0.91)p 2663 3529 V 102 w(2.955e-01)p 3131 3529
-V 103 w(1.16)p 3393 3529 V 592 3642 V 644 3608 a(non-a\016ne)g(grids)p
-1304 3642 V 154 w(3)p 1561 3642 V 293 w(512)p 1934 3642
-V 101 w(2.085e-01)p 2402 3642 V 103 w(0.98)p 2663 3642
-V 102 w(1.413e-01)p 3131 3642 V 103 w(1.06)p 3393 3642
-V 592 3755 V 1304 3755 V 1411 3721 a(4)p 1561 3755 V
-248 w(4096)p 1934 3755 V 101 w(1.046e-01)p 2402 3755
-V 103 w(0.99)p 2663 3755 V 102 w(6.982e-02)p 3131 3755
-V 103 w(1.02)p 3393 3755 V 592 3868 V 1304 3868 V 1411
-3834 a(5)p 1561 3868 V 202 w(32768)p 1934 3868 V 102
-w(5.237e-02)p 2402 3868 V 103 w(1.00)p 2663 3868 V 102
-w(3.480e-02)p 3131 3868 V 103 w(1.00)p 3393 3868 V 594
-3871 2800 4 v 28 4138 a(T)-8 b(able)26 b(3:)39 b(Errors)26
-b(and)g(con)m(v)m(ergence)j(rates)f(in)d(the)i Fc(H)7
-b Fk(\(curl)o(;)15 b(\012\)-)28 b(and)e Fc(L)2511 4105
-y Fb(2)2550 4138 y Fk(\(\012\)-norm)h(for)g(the)g(3d-example)f(solv)m
-(ed)28 4251 y(with)g Fa(deal.II)p Fk(.)h(The)g(\014rst)h(data)g(set)h
-(is)e(for)h(the)g(computation)g(on)g(a)h(family)d(of)i(a\016ne)h
-(grids,)e(the)h(second)g(set)h(of)28 4364 y(data)i(is)e(for)h
-(non-a\016ne)g(trilinear)e(grids.)28 4581 y Fz(The)18
-b(conclusion)g(that)g(can)g(b)r(e)h(dra)n(wn)e(from)h(these)h(n)n
-(umerical)e(exp)r(erimen)n(ts)h(is,)i(that)f(the)g(restriction)e(to)h
-(three-dimensional)28 4680 y(tetrahedral)26 b(grids)h(of)g(Hiptmair's)h
-(result)f(on)g(the)h Fx(L)1715 4650 y Fp(2)1752 4680
-y Fz(-con)n(v)n(ergence)d(of)i(the)h(error)e(\(6\))i(cannot)f(b)r(e)h
-(relaxed.)28 4879 y(Finally)-7 b(,)27 b(here)g(are)g(some)g(prett)n(y)g
-(pictures:)37 b(the)28 b(v)n(ector)e(\014eld)i(plots)f(from)h(the)g
-Fd(MATLAB)d Fz(computations.)1949 5719 y Fk(19)p eop
-%%Page: 20 20
-20 19 bop 872 2130 a @beginspecial 55 @llx 201 @lly 549
-@urx 611 @ury 2692 @rwi 1984 @rhi @setspecial
-%%BeginDocument: field1.eps
-%!PS-Adobe-2.0 EPSF-1.2
-%%Creator: MATLAB, The Mathworks, Inc.
-%%Title: field1.eps
-%%CreationDate: 08/26/2002  11:46:33
-%%DocumentNeededFonts: Helvetica
-%%DocumentProcessColors: Cyan Magenta Yellow Black
-%%Pages: 1
-%%BoundingBox:    55   201   549   611
-%%EndComments
-
-%%BeginProlog
-% MathWorks dictionary
-/MathWorks 160 dict begin
-% definition operators
-/bdef {bind def} bind def
-/ldef {load def} bind def
-/xdef {exch def} bdef
-/xstore {exch store} bdef
-% operator abbreviations
-/c  /clip ldef
-/cc /concat ldef
-/cp /closepath ldef
-/gr /grestore ldef
-/gs /gsave ldef
-/mt /moveto ldef
-/np /newpath ldef
-/cm /currentmatrix ldef
-/sm /setmatrix ldef
-/rm /rmoveto ldef
-/rl /rlineto ldef
-/s /show ldef
-/sc {setcmykcolor} bdef
-/sr /setrgbcolor ldef
-/sg /setgray ldef
-/w /setlinewidth ldef
-/j /setlinejoin ldef
-/cap /setlinecap ldef
-/rc {rectclip} bdef
-/rf {rectfill} bdef
-% page state control
-/pgsv () def
-/bpage {/pgsv save def} bdef
-/epage {pgsv restore} bdef
-/bplot /gsave ldef
-/eplot {stroke grestore} bdef
-% orientation switch
-/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
-% coordinate system mappings
-/dpi2point 0 def
-% font control
-/FontSize 0 def
-/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
-  makefont setfont} bdef
-/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
-  exch dup 3 1 roll findfont dup length dict begin
-  { 1 index /FID ne {def}{pop pop} ifelse } forall
-  /Encoding exch def currentdict end definefont pop} bdef
-/isroman {findfont /CharStrings get /Agrave known} bdef
-/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
-  exch FMS} bdef
-/csm {1 dpi2point div -1 dpi2point div scale neg translate
- dup landscapeMode eq {pop -90 rotate}
-  {rotateMode eq {90 rotate} if} ifelse} bdef
-% line types: solid, dotted, dashed, dotdash
-/SO { [] 0 setdash } bdef
-/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
-/DA { [6 dpi2point mul] 0 setdash } bdef
-/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
-  dpi2point mul] 0 setdash } bdef
-% macros for lines and objects
-/L {lineto stroke} bdef
-/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
-/AP {{rlineto} repeat} bdef
-/PDlw -1 def
-/W {/PDlw currentlinewidth def setlinewidth} def
-/PP {closepath eofill} bdef
-/DP {closepath stroke} bdef
-/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
-  neg 0 exch rlineto closepath} bdef
-/FR {MR stroke} bdef
-/PR {MR fill} bdef
-/L1i {{currentfile picstr readhexstring pop} image} bdef
-/tMatrix matrix def
-/MakeOval {newpath tMatrix currentmatrix pop translate scale
-0 0 1 0 360 arc tMatrix setmatrix} bdef
-/FO {MakeOval stroke} bdef
-/PO {MakeOval fill} bdef
-/PD {currentlinecap 1 cap 3 1 roll 2 copy mt lineto stroke
-   cap PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
-/FA {newpath tMatrix currentmatrix pop translate scale
-  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
-/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
-  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
-/FAn {newpath tMatrix currentmatrix pop translate scale
-  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
-/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
-  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
-/vradius 0 def /hradius 0 def /lry 0 def
-/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
-/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
-  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
-  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
-  tMatrix setmatrix lrx hradius sub uly vradius add translate
-  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
-  lrx hradius sub lry vradius sub translate hradius vradius scale
-  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
-  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
-  closepath} bdef
-/FRR {MRR stroke } bdef
-/PRR {MRR fill } bdef
-/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
-  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
-  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
-  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
-  closepath} bdef
-/FlrRR {MlrRR stroke } bdef
-/PlrRR {MlrRR fill } bdef
-/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
-  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
-  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
-  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
-  closepath} bdef
-/FtbRR {MtbRR stroke } bdef
-/PtbRR {MtbRR fill } bdef
-/stri 6 array def /dtri 6 array def
-/smat 6 array def /dmat 6 array def
-/tmat1 6 array def /tmat2 6 array def /dif 3 array def
-/asub {/ind2 exch def /ind1 exch def dup dup
-  ind1 get exch ind2 get sub exch } bdef
-/tri_to_matrix {
-  2 0 asub 3 1 asub 4 0 asub 5 1 asub
-  dup 0 get exch 1 get 7 -1 roll astore } bdef
-/compute_transform {
-  dmat dtri tri_to_matrix tmat1 invertmatrix 
-  smat stri tri_to_matrix tmat2 concatmatrix } bdef
-/ds {stri astore pop} bdef
-/dt {dtri astore pop} bdef
-/db {2 copy /cols xdef /rows xdef mul dup string
-  currentfile exch readhexstring pop
-  /bmap xdef pop pop} bdef
-/it {gs np dtri aload pop moveto lineto lineto cp c
-  cols rows 8 compute_transform 
-  {bmap} image gr}bdef
-/il {newpath moveto lineto stroke}bdef
-currentdict end def
-%%EndProlog
-
-%%BeginSetup
-MathWorks begin
-
-0 cap
-
-end
-%%EndSetup
-
-%%Page: 1 1
-%%BeginPageSetup
-%%PageBoundingBox:    55   201   549   611
-MathWorks begin
-bpage
-%%EndPageSetup
-
-%%BeginObject: obj1
-bplot
-
-/dpi2point 12 def
-portraitMode 0204 7344 csm
-
-  457     4  5930  4927 MR c np
-92 dict begin %Colortable dictionary
-/c0 { 0 0 0 sr} bdef
-/c1 { 1 1 1 sr} bdef
-/c2 { 1 0 0 sr} bdef
-/c3 { 0 1 0 sr} bdef
-/c4 { 0 0 1 sr} bdef
-/c5 { 1 1 0 sr} bdef
-/c6 { 1 0 1 sr} bdef
-/c7 { 0 1 1 sr} bdef
-c0
-1 j
-1 sg
-   0    0 6913 5185 PR
-6 w
-0 4225 5356 0 0 -4225 899 4614 4 MP
-PP
--5356 0 0 4225 5356 0 0 -4225 899 4614 5 MP stroke
-4 w
-DO
-SO
-6 w
-0 sg
- 899 4614 mt 6255 4614 L
- 899  389 mt 6255  389 L
- 899 4614 mt  899  389 L
-6255 4614 mt 6255  389 L
- 899 4614 mt 6255 4614 L
- 899 4614 mt  899  389 L
- 899 4614 mt  899 4560 L
- 899  389 mt  899  442 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
- 796 4759 mt 
-(-1) s
-1970 4614 mt 1970 4560 L
-1970  389 mt 1970  442 L
-1817 4759 mt 
-(-0.5) s
-3041 4614 mt 3041 4560 L
-3041  389 mt 3041  442 L
-3008 4759 mt 
-(0) s
-4112 4614 mt 4112 4560 L
-4112  389 mt 4112  442 L
-4029 4759 mt 
-(0.5) s
-5183 4614 mt 5183 4560 L
-5183  389 mt 5183  442 L
-5150 4759 mt 
-(1) s
-6255 4614 mt 6255 4560 L
-6255  389 mt 6255  442 L
-6172 4759 mt 
-(1.5) s
- 899 4614 mt  952 4614 L
-6255 4614 mt 6201 4614 L
- 628 4658 mt 
-(-1.5) s
- 899 3909 mt  952 3909 L
-6255 3909 mt 6201 3909 L
- 728 3953 mt 
-(-1) s
- 899 3205 mt  952 3205 L
-6255 3205 mt 6201 3205 L
- 628 3249 mt 
-(-0.5) s
- 899 2501 mt  952 2501 L
-6255 2501 mt 6201 2501 L
- 798 2545 mt 
-(0) s
- 899 1797 mt  952 1797 L
-6255 1797 mt 6201 1797 L
- 698 1841 mt 
-(0.5) s
- 899 1093 mt  952 1093 L
-6255 1093 mt 6201 1093 L
- 798 1137 mt 
-(1) s
- 899  389 mt  952  389 L
-6255  389 mt 6201  389 L
- 698  433 mt 
-(1.5) s
- 899 4614 mt 6255 4614 L
- 899  389 mt 6255  389 L
- 899 4614 mt  899  389 L
-6255 4614 mt 6255  389 L
-gs 899 389 5357 4226 MR c np
-15 0 899 3909 2 MP stroke
-74 0 899 3708 2 MP stroke
-137 0 899 3507 2 MP stroke
-176 0 899 3306 2 MP stroke
-217 0 899 3105 2 MP stroke
-237 0 899 2903 2 MP stroke
-257 0 899 2702 2 MP stroke
-257 0 899 2501 2 MP stroke
-247 0 899 2300 2 MP stroke
-235 0 899 2099 2 MP stroke
-206 0 899 1897 2 MP stroke
-172 0 899 1696 2 MP stroke
-123 0 899 1495 2 MP stroke
-67 0 899 1294 2 MP stroke
-899 1093 PD
-0 -49 1205 3909 2 MP stroke
-74 -40 1205 3708 2 MP stroke
-124 -48 1205 3507 2 MP stroke
-176 -41 1205 3306 2 MP stroke
-206 -48 1205 3105 2 MP stroke
-237 -41 1205 2903 2 MP stroke
-248 -47 1205 2702 2 MP stroke
-257 -42 1205 2501 2 MP stroke
-254 -47 1205 2300 2 MP stroke
-235 -43 1205 2099 2 MP stroke
-210 -45 1205 1897 2 MP stroke
-172 -44 1205 1696 2 MP stroke
-126 -45 1205 1495 2 MP stroke
-68 -45 1205 1294 2 MP stroke
-0 -45 1205 1093 2 MP stroke
-0 -90 1511 3909 2 MP stroke
-73 -81 1511 3708 2 MP stroke
-124 -89 1511 3507 2 MP stroke
-176 -82 1511 3306 2 MP stroke
-216 -82 1511 3105 2 MP stroke
-237 -82 1511 2903 2 MP stroke
-255 -82 1511 2702 2 MP stroke
-257 -82 1511 2501 2 MP stroke
-249 -83 1511 2300 2 MP stroke
-235 -83 1511 2099 2 MP stroke
-208 -82 1511 1897 2 MP stroke
-172 -82 1511 1696 2 MP stroke
-126 -83 1511 1495 2 MP stroke
-68 -83 1511 1294 2 MP stroke
-0 -82 1511 1093 2 MP stroke
-0 -116 1817 3909 2 MP stroke
-61 -116 1817 3708 2 MP stroke
-124 -116 1817 3507 2 MP stroke
-166 -116 1817 3306 2 MP stroke
-207 -116 1817 3105 2 MP stroke
-237 -110 1817 2903 2 MP stroke
-249 -115 1817 2702 2 MP stroke
-257 -112 1817 2501 2 MP stroke
-253 -115 1817 2300 2 MP stroke
-235 -113 1817 2099 2 MP stroke
-210 -114 1817 1897 2 MP stroke
-173 -114 1817 1696 2 MP stroke
-125 -114 1817 1495 2 MP stroke
-67 -114 1817 1294 2 MP stroke
-0 -114 1817 1093 2 MP stroke
-0 -143 2123 3909 2 MP stroke
-72 -136 2123 3708 2 MP stroke
-124 -142 2123 3507 2 MP stroke
-175 -137 2123 3306 2 MP stroke
-214 -137 2123 3105 2 MP stroke
-237 -137 2123 2903 2 MP stroke
-254 -137 2123 2702 2 MP stroke
-257 -137 2123 2501 2 MP stroke
-250 -138 2123 2300 2 MP stroke
-236 -138 2123 2099 2 MP stroke
-210 -138 2123 1897 2 MP stroke
-173 -138 2123 1696 2 MP stroke
-125 -137 2123 1495 2 MP stroke
-69 -139 2123 1294 2 MP stroke
-0 -136 2123 1093 2 MP stroke
-0 -156 2429 3909 2 MP stroke
-63 -156 2429 3708 2 MP stroke
-125 -156 2429 3507 2 MP stroke
-168 -156 2429 3306 2 MP stroke
-208 -156 2429 3105 2 MP stroke
-237 -152 2429 2903 2 MP stroke
-250 -155 2429 2702 2 MP stroke
-257 -154 2429 2501 2 MP stroke
-252 -156 2429 2300 2 MP stroke
-236 -156 2429 2099 2 MP stroke
-209 -155 2429 1897 2 MP stroke
-171 -155 2429 1696 2 MP stroke
-125 -155 2429 1495 2 MP stroke
-65 -155 2429 1294 2 MP stroke
-0 -155 2429 1093 2 MP stroke
-0 -169 2735 3909 2 MP stroke
-71 -163 2735 3708 2 MP stroke
-125 -168 2735 3507 2 MP stroke
-175 -164 2735 3306 2 MP stroke
-208 -168 2735 3105 2 MP stroke
-236 -164 2735 2903 2 MP stroke
-251 -166 2735 2702 2 MP stroke
-257 -165 2735 2501 2 MP stroke
-252 -166 2735 2300 2 MP stroke
-236 -166 2735 2099 2 MP stroke
-209 -164 2735 1897 2 MP stroke
-174 -166 2735 1696 2 MP stroke
-125 -164 2735 1495 2 MP stroke
-70 -167 2735 1294 2 MP stroke
-0 -163 2735 1093 2 MP stroke
-0 -169 3041 3909 2 MP stroke
-64 -169 3041 3708 2 MP stroke
-125 -169 3041 3507 2 MP stroke
-170 -169 3041 3306 2 MP stroke
-209 -169 3041 3105 2 MP stroke
-234 -169 3041 2903 2 MP stroke
-251 -169 3041 2702 2 MP stroke
-257 -169 3041 2501 2 MP stroke
-251 -169 3041 2300 2 MP stroke
-234 -169 3041 2099 2 MP stroke
-209 -169 3041 1897 2 MP stroke
-170 -169 3041 1696 2 MP stroke
-125 -169 3041 1495 2 MP stroke
-64 -169 3041 1294 2 MP stroke
-0 -169 3041 1093 2 MP stroke
-0 -163 3347 3909 2 MP stroke
-71 -167 3347 3708 2 MP stroke
-125 -164 3347 3507 2 MP stroke
-174 -167 3347 3306 2 MP stroke
-209 -165 3347 3105 2 MP stroke
-236 -166 3347 2903 2 MP stroke
-252 -165 3347 2702 2 MP stroke
-257 -165 3347 2501 2 MP stroke
-251 -167 3347 2300 2 MP stroke
-237 -165 3347 2099 2 MP stroke
-209 -167 3347 1897 2 MP stroke
-175 -164 3347 1696 2 MP stroke
-125 -168 3347 1495 2 MP stroke
-72 -163 3347 1294 2 MP stroke
-0 -169 3347 1093 2 MP stroke
-0 -154 3653 3909 2 MP stroke
-66 -155 3653 3708 2 MP stroke
-125 -155 3653 3507 2 MP stroke
-172 -155 3653 3306 2 MP stroke
-210 -156 3653 3105 2 MP stroke
-236 -155 3653 2903 2 MP stroke
-252 -155 3653 2702 2 MP stroke
-257 -154 3653 2501 2 MP stroke
-250 -156 3653 2300 2 MP stroke
-237 -153 3653 2099 2 MP stroke
-208 -155 3653 1897 2 MP stroke
-168 -156 3653 1696 2 MP stroke
-125 -156 3653 1495 2 MP stroke
-63 -156 3653 1294 2 MP stroke
-0 -157 3653 1093 2 MP stroke
-0 -136 3959 3909 2 MP stroke
-70 -138 3959 3708 2 MP stroke
-126 -137 3959 3507 2 MP stroke
-174 -138 3959 3306 2 MP stroke
-210 -138 3959 3105 2 MP stroke
-236 -137 3959 2903 2 MP stroke
-251 -137 3959 2702 2 MP stroke
-257 -137 3959 2501 2 MP stroke
-255 -137 3959 2300 2 MP stroke
-237 -137 3959 2099 2 MP stroke
-215 -136 3959 1897 2 MP stroke
-176 -136 3959 1696 2 MP stroke
-125 -142 3959 1495 2 MP stroke
-73 -136 3959 1294 2 MP stroke
-0 -144 3959 1093 2 MP stroke
-0 -113 4265 3909 2 MP stroke
-67 -113 4265 3708 2 MP stroke
-126 -114 4265 3507 2 MP stroke
-173 -114 4265 3306 2 MP stroke
-210 -114 4265 3105 2 MP stroke
-236 -112 4265 2903 2 MP stroke
-253 -114 4265 2702 2 MP stroke
-257 -112 4265 2501 2 MP stroke
-250 -115 4265 2300 2 MP stroke
-237 -111 4265 2099 2 MP stroke
-208 -115 4265 1897 2 MP stroke
-167 -115 4265 1696 2 MP stroke
-125 -116 4265 1495 2 MP stroke
-62 -116 4265 1294 2 MP stroke
-0 -117 4265 1093 2 MP stroke
-0 -81 4571 3909 2 MP stroke
-69 -83 4571 3708 2 MP stroke
-126 -83 4571 3507 2 MP stroke
-173 -83 4571 3306 2 MP stroke
-208 -83 4571 3105 2 MP stroke
-236 -82 4571 2903 2 MP stroke
-249 -82 4571 2702 2 MP stroke
-257 -82 4571 2501 2 MP stroke
-256 -82 4571 2300 2 MP stroke
-237 -82 4571 2099 2 MP stroke
-217 -82 4571 1897 2 MP stroke
-176 -82 4571 1696 2 MP stroke
-124 -89 4571 1495 2 MP stroke
-74 -82 4571 1294 2 MP stroke
-0 -91 4571 1093 2 MP stroke
-0 -44 4877 3909 2 MP stroke
-68 -45 4877 3708 2 MP stroke
-126 -45 4877 3507 2 MP stroke
-173 -44 4877 3306 2 MP stroke
-211 -46 4877 3105 2 MP stroke
-236 -43 4877 2903 2 MP stroke
-255 -46 4877 2702 2 MP stroke
-257 -42 4877 2501 2 MP stroke
-249 -47 4877 2300 2 MP stroke
-238 -42 4877 2099 2 MP stroke
-207 -47 4877 1897 2 MP stroke
-177 -40 4877 1696 2 MP stroke
-124 -48 4877 1495 2 MP stroke
-74 -40 4877 1294 2 MP stroke
-0 -49 4877 1093 2 MP stroke
-5183 3909 PD
-68 0 5183 3708 2 MP stroke
-124 0 5183 3507 2 MP stroke
-172 0 5183 3306 2 MP stroke
-207 0 5183 3105 2 MP stroke
-236 0 5183 2903 2 MP stroke
-248 0 5183 2702 2 MP stroke
-257 0 5183 2501 2 MP stroke
-257 0 5183 2300 2 MP stroke
-238 0 5183 2099 2 MP stroke
-218 0 5183 1897 2 MP stroke
-177 0 5183 1696 2 MP stroke
-138 0 5183 1495 2 MP stroke
-75 0 5183 1294 2 MP stroke
-5183 1093 PD
--5 1 5 1 909 3908 3 MP stroke
--25 5 25 5 948 3703 3 MP stroke
--45 10 45 10 991 3497 3 MP stroke
--58 12 58 13 1017 3293 3 MP stroke
--71 15 71 16 1045 3089 3 MP stroke
--78 17 78 17 1058 2886 3 MP stroke
--85 19 85 18 1071 2684 3 MP stroke
--85 18 85 18 1071 2483 3 MP stroke
--81 18 81 18 1065 2282 3 MP stroke
--78 16 78 17 1056 2082 3 MP stroke
--68 15 68 14 1037 1883 3 MP stroke
--57 13 57 12 1014 1684 3 MP stroke
--40 9 40 9 982 1486 3 MP stroke
--22 5 22 5 944 1289 3 MP stroke
-899 1093 PD
-8 17 9 -17 1196 3877 3 MP stroke
--18 19 31 -8 1248 3676 3 MP stroke
--33 24 49 -7 1280 3466 3 MP stroke
--52 26 65 -1 1316 3266 3 MP stroke
--60 30 76 -1 1335 3058 3 MP stroke
--71 31 85 3 1357 2859 3 MP stroke
--74 33 90 2 1363 2653 3 MP stroke
--78 32 92 5 1370 2454 3 MP stroke
--76 34 92 3 1367 2250 3 MP stroke
--71 31 85 3 1355 2053 3 MP stroke
--62 30 77 0 1338 1852 3 MP stroke
--50 27 64 -2 1313 1654 3 MP stroke
--34 24 49 -6 1282 1456 3 MP stroke
--15 20 30 -10 1243 1259 3 MP stroke
-7 15 8 -15 1197 1063 3 MP stroke
-15 30 15 -30 1496 3849 3 MP stroke
--11 32 38 -21 1546 3648 3 MP stroke
--26 38 56 -20 1579 3438 3 MP stroke
--45 40 72 -14 1615 3238 3 MP stroke
--58 42 85 -11 1642 3034 3 MP stroke
--65 44 92 -10 1656 2831 3 MP stroke
--70 45 98 -9 1668 2629 3 MP stroke
--71 45 99 -8 1669 2427 3 MP stroke
--69 45 96 -10 1664 2227 3 MP stroke
--64 44 91 -10 1655 2026 3 MP stroke
--55 42 83 -12 1636 1827 3 MP stroke
--43 39 70 -14 1613 1628 3 MP stroke
--28 37 56 -19 1581 1431 3 MP stroke
--9 32 36 -22 1543 1233 3 MP stroke
-13 27 14 -27 1497 1038 3 MP stroke
-19 38 20 -38 1797 3831 3 MP stroke
--1 43 39 -34 1839 3626 3 MP stroke
--22 47 60 -29 1881 3420 3 MP stroke
--36 50 74 -26 1909 3216 3 MP stroke
--49 53 87 -23 1937 3012 3 MP stroke
--60 53 97 -19 1957 2812 3 MP stroke
--63 56 101 -20 1965 2607 3 MP stroke
--67 56 104 -19 1970 2408 3 MP stroke
--65 56 103 -20 1967 2205 3 MP stroke
--59 54 96 -20 1956 2006 3 MP stroke
--51 53 88 -23 1939 1806 3 MP stroke
--38 50 76 -26 1914 1608 3 MP stroke
--22 47 60 -29 1882 1410 3 MP stroke
--4 43 41 -33 1843 1213 3 MP stroke
-18 38 19 -38 1798 1017 3 MP stroke
-23 47 24 -47 2099 3813 3 MP stroke
--1 50 46 -40 2149 3612 3 MP stroke
--17 56 64 -38 2183 3403 3 MP stroke
--35 58 80 -33 2218 3202 3 MP stroke
--48 60 93 -30 2244 2998 3 MP stroke
--56 63 101 -29 2259 2795 3 MP stroke
--61 64 106 -27 2271 2592 3 MP stroke
--62 63 108 -27 2272 2391 3 MP stroke
--60 64 105 -28 2268 2190 3 MP stroke
--55 62 101 -28 2258 1989 3 MP stroke
--47 61 93 -31 2240 1790 3 MP stroke
--34 58 80 -33 2216 1591 3 MP stroke
--18 54 64 -36 2184 1394 3 MP stroke
-0 51 46 -41 2146 1196 3 MP stroke
-22 45 23 -45 2100 1002 3 MP stroke
-26 52 26 -52 2403 3805 3 MP stroke
-5 56 47 -47 2445 3599 3 MP stroke
--16 60 67 -43 2487 3394 3 MP stroke
--30 63 81 -39 2516 3189 3 MP stroke
--43 66 95 -36 2542 2985 3 MP stroke
--53 67 104 -33 2562 2784 3 MP stroke
--57 69 108 -33 2571 2580 3 MP stroke
--59 69 110 -32 2576 2379 3 MP stroke
--57 70 109 -34 2572 2178 3 MP stroke
--52 69 104 -35 2561 1978 3 MP stroke
--43 66 94 -36 2544 1778 3 MP stroke
--31 64 82 -39 2518 1580 3 MP stroke
--15 60 67 -42 2487 1382 3 MP stroke
-4 56 47 -46 2447 1185 3 MP stroke
-25 51 26 -51 2403 989 3 MP stroke
-28 56 28 -56 2707 3796 3 MP stroke
-4 59 50 -49 2756 3594 3 MP stroke
--14 64 69 -46 2791 3385 3 MP stroke
--31 66 85 -41 2825 3183 3 MP stroke
--41 70 96 -41 2847 2978 3 MP stroke
--50 71 105 -37 2866 2776 3 MP stroke
--55 73 111 -37 2875 2573 3 MP stroke
--57 73 112 -36 2880 2372 3 MP stroke
--56 73 111 -37 2876 2171 3 MP stroke
--50 71 105 -38 2866 1971 3 MP stroke
--42 69 96 -39 2848 1772 3 MP stroke
--30 67 85 -42 2824 1572 3 MP stroke
--14 63 68 -45 2792 1376 3 MP stroke
-5 60 51 -50 2754 1177 3 MP stroke
-27 53 27 -53 2708 983 3 MP stroke
-28 56 28 -56 3013 3796 3 MP stroke
-7 60 49 -51 3056 3590 3 MP stroke
--13 65 69 -47 3097 3385 3 MP stroke
--28 68 84 -43 3127 3180 3 MP stroke
--41 70 97 -40 3153 2976 3 MP stroke
--49 73 105 -39 3170 2773 3 MP stroke
--55 74 111 -38 3181 2571 3 MP stroke
--57 74 113 -37 3185 2369 3 MP stroke
--55 74 111 -38 3181 2169 3 MP stroke
--49 72 105 -39 3170 1969 3 MP stroke
--41 71 97 -41 3153 1769 3 MP stroke
--28 68 84 -44 3127 1571 3 MP stroke
--13 65 69 -47 3097 1373 3 MP stroke
-7 60 49 -51 3056 1176 3 MP stroke
-28 55 28 -55 3013 979 3 MP stroke
-27 54 27 -54 3320 3800 3 MP stroke
-4 60 51 -50 3367 3591 3 MP stroke
--14 63 68 -45 3404 3388 3 MP stroke
--30 68 85 -43 3436 3182 3 MP stroke
--42 69 96 -39 3460 2979 3 MP stroke
--50 72 105 -38 3478 2775 3 MP stroke
--56 72 111 -36 3488 2573 3 MP stroke
--57 73 112 -36 3492 2372 3 MP stroke
--55 73 111 -37 3487 2170 3 MP stroke
--51 71 106 -37 3478 1971 3 MP stroke
--42 70 97 -40 3459 1770 3 MP stroke
--31 67 85 -42 3437 1574 3 MP stroke
--13 64 69 -46 3403 1373 3 MP stroke
-3 59 51 -48 3368 1179 3 MP stroke
-28 55 28 -55 3319 979 3 MP stroke
-26 51 26 -51 3627 3806 3 MP stroke
-4 56 48 -47 3671 3600 3 MP stroke
--15 60 67 -42 3711 3394 3 MP stroke
--31 63 83 -39 3742 3190 3 MP stroke
--44 67 95 -37 3768 2986 3 MP stroke
--52 68 103 -34 3786 2782 3 MP stroke
--57 69 109 -33 3796 2580 3 MP stroke
--59 69 110 -32 3800 2379 3 MP stroke
--56 70 108 -34 3795 2178 3 MP stroke
--53 67 104 -33 3786 1979 3 MP stroke
--43 66 94 -36 3767 1778 3 MP stroke
--29 64 81 -40 3740 1580 3 MP stroke
--16 60 67 -43 3711 1382 3 MP stroke
-5 56 47 -47 3669 1185 3 MP stroke
-26 52 26 -52 3627 988 3 MP stroke
-23 45 22 -45 3937 3818 3 MP stroke
-0 50 46 -40 3983 3610 3 MP stroke
--19 54 64 -36 4021 3406 3 MP stroke
--35 58 81 -33 4052 3201 3 MP stroke
--46 60 92 -30 4077 2997 3 MP stroke
--55 62 101 -28 4094 2794 3 MP stroke
--60 63 106 -27 4104 2592 3 MP stroke
--62 63 107 -27 4109 2391 3 MP stroke
--62 63 107 -27 4107 2190 3 MP stroke
--55 62 101 -28 4095 1990 3 MP stroke
--48 60 94 -29 4080 1790 3 MP stroke
--36 57 81 -32 4054 1592 3 MP stroke
--18 56 65 -38 4019 1391 3 MP stroke
--2 50 47 -40 3985 1198 3 MP stroke
-24 48 24 -48 3935 997 3 MP stroke
-19 37 19 -37 4246 3833 3 MP stroke
--3 42 41 -32 4291 3627 3 MP stroke
--23 47 60 -29 4331 3422 3 MP stroke
--38 50 76 -25 4362 3217 3 MP stroke
--50 52 88 -22 4387 3013 3 MP stroke
--59 54 97 -20 4404 2811 3 MP stroke
--64 56 102 -19 4416 2607 3 MP stroke
--66 56 103 -19 4419 2408 3 MP stroke
--64 56 102 -20 4413 2205 3 MP stroke
--60 54 96 -20 4406 2008 3 MP stroke
--50 53 88 -23 4385 1805 3 MP stroke
--36 50 74 -26 4358 1607 3 MP stroke
--22 47 61 -30 4329 1409 3 MP stroke
--1 43 40 -34 4287 1212 3 MP stroke
-19 39 19 -39 4246 1015 3 MP stroke
-14 27 13 -27 4558 3855 3 MP stroke
--9 33 37 -23 4603 3648 3 MP stroke
--28 37 55 -18 4642 3442 3 MP stroke
--43 40 71 -15 4673 3238 3 MP stroke
--55 42 82 -12 4697 3034 3 MP stroke
--64 44 92 -10 4715 2831 3 MP stroke
--68 45 95 -9 4725 2629 3 MP stroke
--71 45 98 -8 4730 2427 3 MP stroke
--71 45 98 -8 4729 2226 3 MP stroke
--64 44 91 -10 4717 2027 3 MP stroke
--58 43 85 -12 4703 1827 3 MP stroke
--44 40 71 -15 4676 1629 3 MP stroke
--26 38 55 -20 4640 1426 3 MP stroke
--11 32 38 -22 4607 1234 3 MP stroke
-15 30 15 -30 4556 1032 3 MP stroke
-8 15 7 -15 4870 3880 3 MP stroke
--15 20 30 -10 4915 3673 3 MP stroke
--34 24 49 -6 4954 3468 3 MP stroke
--50 27 64 -2 4986 3264 3 MP stroke
--62 30 77 0 5011 3059 3 MP stroke
--71 31 85 2 5028 2858 3 MP stroke
--77 33 92 3 5040 2653 3 MP stroke
--77 32 91 5 5043 2454 3 MP stroke
--75 33 90 3 5036 2250 3 MP stroke
--72 31 86 3 5029 2054 3 MP stroke
--60 30 76 -1 5008 1851 3 MP stroke
--52 26 65 0 4989 1656 3 MP stroke
--33 25 49 -7 4952 1454 3 MP stroke
--18 19 31 -8 4920 1262 3 MP stroke
-8 16 8 -16 4869 1060 3 MP stroke
-5183 3909 PD
--22 5 22 5 5229 3703 3 MP stroke
--41 9 41 9 5266 3498 3 MP stroke
--56 12 56 13 5299 3293 3 MP stroke
--68 14 68 15 5322 3090 3 MP stroke
--78 17 78 16 5341 2887 3 MP stroke
--82 18 82 18 5349 2684 3 MP stroke
--84 18 84 18 5356 2483 3 MP stroke
--84 18 84 19 5356 2281 3 MP stroke
--79 17 79 17 5342 2082 3 MP stroke
--72 16 72 15 5329 1882 3 MP stroke
--58 13 58 12 5302 1684 3 MP stroke
--46 10 46 10 5275 1485 3 MP stroke
--25 5 25 5 5233 1289 3 MP stroke
-5183 1093 PD
-gr
-
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 168 FMSR
-
-2300  208 mt 
-(Vector-field plot of FE-solution E) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 132 FMSR
-
-4779  292 mt 
-(h) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
-3546 4902 mt 
-(x) s
- 573 2532 mt  -90 rotate
-(y) s
-90 rotate
-
-end
-
-eplot
-%%EndObject
-
-epage
-end
-
-showpage
-
-%%Trailer
-%%EOF
-
-%%EndDocument
- @endspecial 758 2326 a Fk(Figure)30 b(4:)41 b(V)-8 b(ector-\014eld)32
-b(plot)d(of)i(the)f(FE-solution)g(of)g(example)h(\(31\).)872
-4824 y @beginspecial 55 @llx 201 @lly 549 @urx 611 @ury
-2692 @rwi 1984 @rhi @setspecial
-%%BeginDocument: field2.eps
-%!PS-Adobe-2.0 EPSF-1.2
-%%Creator: MATLAB, The Mathworks, Inc.
-%%Title: pix.eps
-%%CreationDate: 08/26/2002  11:55:05
-%%DocumentNeededFonts: Helvetica
-%%DocumentProcessColors: Cyan Magenta Yellow Black
-%%Pages: 1
-%%BoundingBox:    55   201   549   611
-%%EndComments
-
-%%BeginProlog
-% MathWorks dictionary
-/MathWorks 160 dict begin
-% definition operators
-/bdef {bind def} bind def
-/ldef {load def} bind def
-/xdef {exch def} bdef
-/xstore {exch store} bdef
-% operator abbreviations
-/c  /clip ldef
-/cc /concat ldef
-/cp /closepath ldef
-/gr /grestore ldef
-/gs /gsave ldef
-/mt /moveto ldef
-/np /newpath ldef
-/cm /currentmatrix ldef
-/sm /setmatrix ldef
-/rm /rmoveto ldef
-/rl /rlineto ldef
-/s /show ldef
-/sc {setcmykcolor} bdef
-/sr /setrgbcolor ldef
-/sg /setgray ldef
-/w /setlinewidth ldef
-/j /setlinejoin ldef
-/cap /setlinecap ldef
-/rc {rectclip} bdef
-/rf {rectfill} bdef
-% page state control
-/pgsv () def
-/bpage {/pgsv save def} bdef
-/epage {pgsv restore} bdef
-/bplot /gsave ldef
-/eplot {stroke grestore} bdef
-% orientation switch
-/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
-% coordinate system mappings
-/dpi2point 0 def
-% font control
-/FontSize 0 def
-/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
-  makefont setfont} bdef
-/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
-  exch dup 3 1 roll findfont dup length dict begin
-  { 1 index /FID ne {def}{pop pop} ifelse } forall
-  /Encoding exch def currentdict end definefont pop} bdef
-/isroman {findfont /CharStrings get /Agrave known} bdef
-/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
-  exch FMS} bdef
-/csm {1 dpi2point div -1 dpi2point div scale neg translate
- dup landscapeMode eq {pop -90 rotate}
-  {rotateMode eq {90 rotate} if} ifelse} bdef
-% line types: solid, dotted, dashed, dotdash
-/SO { [] 0 setdash } bdef
-/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
-/DA { [6 dpi2point mul] 0 setdash } bdef
-/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
-  dpi2point mul] 0 setdash } bdef
-% macros for lines and objects
-/L {lineto stroke} bdef
-/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
-/AP {{rlineto} repeat} bdef
-/PDlw -1 def
-/W {/PDlw currentlinewidth def setlinewidth} def
-/PP {closepath eofill} bdef
-/DP {closepath stroke} bdef
-/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
-  neg 0 exch rlineto closepath} bdef
-/FR {MR stroke} bdef
-/PR {MR fill} bdef
-/L1i {{currentfile picstr readhexstring pop} image} bdef
-/tMatrix matrix def
-/MakeOval {newpath tMatrix currentmatrix pop translate scale
-0 0 1 0 360 arc tMatrix setmatrix} bdef
-/FO {MakeOval stroke} bdef
-/PO {MakeOval fill} bdef
-/PD {currentlinecap 1 cap 3 1 roll 2 copy mt lineto stroke
-   cap PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
-/FA {newpath tMatrix currentmatrix pop translate scale
-  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
-/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
-  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
-/FAn {newpath tMatrix currentmatrix pop translate scale
-  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
-/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
-  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
-/vradius 0 def /hradius 0 def /lry 0 def
-/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
-/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
-  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
-  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
-  tMatrix setmatrix lrx hradius sub uly vradius add translate
-  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
-  lrx hradius sub lry vradius sub translate hradius vradius scale
-  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
-  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
-  closepath} bdef
-/FRR {MRR stroke } bdef
-/PRR {MRR fill } bdef
-/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
-  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
-  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
-  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
-  closepath} bdef
-/FlrRR {MlrRR stroke } bdef
-/PlrRR {MlrRR fill } bdef
-/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
-  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
-  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
-  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
-  closepath} bdef
-/FtbRR {MtbRR stroke } bdef
-/PtbRR {MtbRR fill } bdef
-/stri 6 array def /dtri 6 array def
-/smat 6 array def /dmat 6 array def
-/tmat1 6 array def /tmat2 6 array def /dif 3 array def
-/asub {/ind2 exch def /ind1 exch def dup dup
-  ind1 get exch ind2 get sub exch } bdef
-/tri_to_matrix {
-  2 0 asub 3 1 asub 4 0 asub 5 1 asub
-  dup 0 get exch 1 get 7 -1 roll astore } bdef
-/compute_transform {
-  dmat dtri tri_to_matrix tmat1 invertmatrix 
-  smat stri tri_to_matrix tmat2 concatmatrix } bdef
-/ds {stri astore pop} bdef
-/dt {dtri astore pop} bdef
-/db {2 copy /cols xdef /rows xdef mul dup string
-  currentfile exch readhexstring pop
-  /bmap xdef pop pop} bdef
-/it {gs np dtri aload pop moveto lineto lineto cp c
-  cols rows 8 compute_transform 
-  {bmap} image gr}bdef
-/il {newpath moveto lineto stroke}bdef
-currentdict end def
-%%EndProlog
-
-%%BeginSetup
-MathWorks begin
-
-0 cap
-
-end
-%%EndSetup
-
-%%Page: 1 1
-%%BeginPageSetup
-%%PageBoundingBox:    55   201   549   611
-MathWorks begin
-bpage
-%%EndPageSetup
-
-%%BeginObject: obj1
-bplot
-
-/dpi2point 12 def
-portraitMode 0204 7344 csm
-
-  457     4  5930  4927 MR c np
-92 dict begin %Colortable dictionary
-/c0 { 0 0 0 sr} bdef
-/c1 { 1 1 1 sr} bdef
-/c2 { 1 0 0 sr} bdef
-/c3 { 0 1 0 sr} bdef
-/c4 { 0 0 1 sr} bdef
-/c5 { 1 1 0 sr} bdef
-/c6 { 1 0 1 sr} bdef
-/c7 { 0 1 1 sr} bdef
-c0
-1 j
-1 sg
-   0    0 6913 5185 PR
-6 w
-0 4225 5356 0 0 -4225 899 4614 4 MP
-PP
--5356 0 0 4225 5356 0 0 -4225 899 4614 5 MP stroke
-4 w
-DO
-SO
-6 w
-0 sg
- 899 4614 mt 6255 4614 L
- 899  389 mt 6255  389 L
- 899 4614 mt  899  389 L
-6255 4614 mt 6255  389 L
- 899 4614 mt 6255 4614 L
- 899 4614 mt  899  389 L
- 899 4614 mt  899 4560 L
- 899  389 mt  899  442 L
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
- 746 4759 mt 
-(-1.5) s
-1791 4614 mt 1791 4560 L
-1791  389 mt 1791  442 L
-1688 4759 mt 
-(-1) s
-2684 4614 mt 2684 4560 L
-2684  389 mt 2684  442 L
-2531 4759 mt 
-(-0.5) s
-3577 4614 mt 3577 4560 L
-3577  389 mt 3577  442 L
-3544 4759 mt 
-(0) s
-4469 4614 mt 4469 4560 L
-4469  389 mt 4469  442 L
-4386 4759 mt 
-(0.5) s
-5362 4614 mt 5362 4560 L
-5362  389 mt 5362  442 L
-5329 4759 mt 
-(1) s
-6255 4614 mt 6255 4560 L
-6255  389 mt 6255  442 L
-6172 4759 mt 
-(1.5) s
- 899 4614 mt  952 4614 L
-6255 4614 mt 6201 4614 L
- 628 4658 mt 
-(-1.5) s
- 899 3909 mt  952 3909 L
-6255 3909 mt 6201 3909 L
- 728 3953 mt 
-(-1) s
- 899 3205 mt  952 3205 L
-6255 3205 mt 6201 3205 L
- 628 3249 mt 
-(-0.5) s
- 899 2501 mt  952 2501 L
-6255 2501 mt 6201 2501 L
- 798 2545 mt 
-(0) s
- 899 1797 mt  952 1797 L
-6255 1797 mt 6201 1797 L
- 698 1841 mt 
-(0.5) s
- 899 1093 mt  952 1093 L
-6255 1093 mt 6201 1093 L
- 798 1137 mt 
-(1) s
- 899  389 mt  952  389 L
-6255  389 mt 6201  389 L
- 698  433 mt 
-(1.5) s
- 899 4614 mt 6255 4614 L
- 899  389 mt 6255  389 L
- 899 4614 mt  899  389 L
-6255 4614 mt 6255  389 L
-gs 899 389 5357 4226 MR c np
-1791 3909 PD
-135 0 1791 3708 2 MP stroke
-243 0 1791 3507 2 MP stroke
-303 0 1791 3306 2 MP stroke
-303 0 1791 3105 2 MP stroke
-243 0 1791 2903 2 MP stroke
-135 0 1791 2702 2 MP stroke
-1791 2501 PD
--135 0 1791 2300 2 MP stroke
--243 0 1791 2099 2 MP stroke
--303 0 1791 1897 2 MP stroke
--303 0 1791 1696 2 MP stroke
--243 0 1791 1495 2 MP stroke
--135 0 1791 1294 2 MP stroke
-1791 1093 PD
-0 107 2046 3909 2 MP stroke
-122 96 2046 3708 2 MP stroke
-220 63 2046 3507 2 MP stroke
-274 25 2046 3306 2 MP stroke
-274 -26 2046 3105 2 MP stroke
-220 -63 2046 2903 2 MP stroke
-122 -96 2046 2702 2 MP stroke
-0 -106 2046 2501 2 MP stroke
--122 -96 2046 2300 2 MP stroke
--220 -64 2046 2099 2 MP stroke
--274 -26 2046 1897 2 MP stroke
--274 26 2046 1696 2 MP stroke
--220 63 2046 1495 2 MP stroke
--122 96 2046 1294 2 MP stroke
-0 106 2046 1093 2 MP stroke
-0 192 2301 3909 2 MP stroke
-80 174 2301 3708 2 MP stroke
-145 114 2301 3507 2 MP stroke
-181 46 2301 3306 2 MP stroke
-181 -47 2301 3105 2 MP stroke
-145 -114 2301 2903 2 MP stroke
-81 -173 2301 2702 2 MP stroke
-0 -192 2301 2501 2 MP stroke
--80 -174 2301 2300 2 MP stroke
--145 -115 2301 2099 2 MP stroke
--181 -46 2301 1897 2 MP stroke
--180 47 2301 1696 2 MP stroke
--145 114 2301 1495 2 MP stroke
--80 173 2301 1294 2 MP stroke
-0 191 2301 1093 2 MP stroke
-0 239 2556 3909 2 MP stroke
-33 216 2556 3708 2 MP stroke
-59 142 2556 3507 2 MP stroke
-74 58 2556 3306 2 MP stroke
-74 -59 2556 3105 2 MP stroke
-59 -142 2556 2903 2 MP stroke
-33 -216 2556 2702 2 MP stroke
-0 -239 2556 2501 2 MP stroke
--33 -216 2556 2300 2 MP stroke
--59 -143 2556 2099 2 MP stroke
--73 -58 2556 1897 2 MP stroke
--73 58 2556 1696 2 MP stroke
--59 142 2556 1495 2 MP stroke
--32 216 2556 1294 2 MP stroke
-0 239 2556 1093 2 MP stroke
-0 239 2811 3909 2 MP stroke
--33 216 2811 3708 2 MP stroke
--59 143 2811 3507 2 MP stroke
--73 58 2811 3306 2 MP stroke
--73 -59 2811 3105 2 MP stroke
--59 -142 2811 2903 2 MP stroke
--32 -216 2811 2702 2 MP stroke
-0 -239 2811 2501 2 MP stroke
-33 -216 2811 2300 2 MP stroke
-59 -143 2811 2099 2 MP stroke
-74 -58 2811 1897 2 MP stroke
-74 58 2811 1696 2 MP stroke
-59 143 2811 1495 2 MP stroke
-33 216 2811 1294 2 MP stroke
-0 239 2811 1093 2 MP stroke
-0 192 3066 3909 2 MP stroke
--80 174 3066 3708 2 MP stroke
--144 114 3066 3507 2 MP stroke
--180 46 3066 3306 2 MP stroke
--180 -47 3066 3105 2 MP stroke
--144 -114 3066 2903 2 MP stroke
--80 -173 3066 2702 2 MP stroke
-0 -192 3066 2501 2 MP stroke
-81 -174 3066 2300 2 MP stroke
-145 -115 3066 2099 2 MP stroke
-181 -46 3066 1897 2 MP stroke
-181 47 3066 1696 2 MP stroke
-145 114 3066 1495 2 MP stroke
-81 173 3066 1294 2 MP stroke
-0 191 3066 1093 2 MP stroke
-0 107 3321 3909 2 MP stroke
--122 96 3321 3708 2 MP stroke
--219 64 3321 3507 2 MP stroke
--274 26 3321 3306 2 MP stroke
--274 -26 3321 3105 2 MP stroke
--219 -63 3321 2903 2 MP stroke
--121 -96 3321 2702 2 MP stroke
-0 -106 3321 2501 2 MP stroke
-122 -96 3321 2300 2 MP stroke
-220 -64 3321 2099 2 MP stroke
-274 -25 3321 1897 2 MP stroke
-274 26 3321 1696 2 MP stroke
-220 64 3321 1495 2 MP stroke
-122 96 3321 1294 2 MP stroke
-0 106 3321 1093 2 MP stroke
-3577 3909 PD
--135 0 3577 3708 2 MP stroke
--243 0 3577 3507 2 MP stroke
--303 0 3577 3306 2 MP stroke
--303 0 3577 3105 2 MP stroke
--244 0 3577 2903 2 MP stroke
--135 0 3577 2702 2 MP stroke
-3577 2501 PD
-134 0 3577 2300 2 MP stroke
-243 0 3577 2099 2 MP stroke
-302 0 3577 1897 2 MP stroke
-302 0 3577 1696 2 MP stroke
-242 0 3577 1495 2 MP stroke
-134 0 3577 1294 2 MP stroke
-3577 1093 PD
-0 -106 3832 3909 2 MP stroke
--122 -96 3832 3708 2 MP stroke
--220 -64 3832 3507 2 MP stroke
--274 -26 3832 3306 2 MP stroke
--274 25 3832 3105 2 MP stroke
--220 64 3832 2903 2 MP stroke
--122 96 3832 2702 2 MP stroke
-0 106 3832 2501 2 MP stroke
-121 96 3832 2300 2 MP stroke
-219 63 3832 2099 2 MP stroke
-274 26 3832 1897 2 MP stroke
-274 -26 3832 1696 2 MP stroke
-219 -64 3832 1495 2 MP stroke
-122 -96 3832 1294 2 MP stroke
-0 -107 3832 1093 2 MP stroke
-0 -191 4087 3909 2 MP stroke
--81 -173 4087 3708 2 MP stroke
--145 -114 4087 3507 2 MP stroke
--181 -47 4087 3306 2 MP stroke
--181 46 4087 3105 2 MP stroke
--145 115 4087 2903 2 MP stroke
--81 174 4087 2702 2 MP stroke
-0 192 4087 2501 2 MP stroke
-80 173 4087 2300 2 MP stroke
-144 114 4087 2099 2 MP stroke
-180 47 4087 1897 2 MP stroke
-180 -46 4087 1696 2 MP stroke
-144 -114 4087 1495 2 MP stroke
-80 -174 4087 1294 2 MP stroke
-0 -192 4087 1093 2 MP stroke
-0 -239 4342 3909 2 MP stroke
--33 -216 4342 3708 2 MP stroke
--59 -143 4342 3507 2 MP stroke
--74 -58 4342 3306 2 MP stroke
--74 58 4342 3105 2 MP stroke
--59 143 4342 2903 2 MP stroke
--33 216 4342 2702 2 MP stroke
-0 239 4342 2501 2 MP stroke
-32 216 4342 2300 2 MP stroke
-59 142 4342 2099 2 MP stroke
-73 59 4342 1897 2 MP stroke
-73 -58 4342 1696 2 MP stroke
-59 -143 4342 1495 2 MP stroke
-33 -216 4342 1294 2 MP stroke
-0 -239 4342 1093 2 MP stroke
-0 -239 4597 3909 2 MP stroke
-32 -216 4597 3708 2 MP stroke
-59 -142 4597 3507 2 MP stroke
-73 -58 4597 3306 2 MP stroke
-73 58 4597 3105 2 MP stroke
-59 143 4597 2903 2 MP stroke
-33 216 4597 2702 2 MP stroke
-0 239 4597 2501 2 MP stroke
--33 216 4597 2300 2 MP stroke
--59 142 4597 2099 2 MP stroke
--74 59 4597 1897 2 MP stroke
--74 -58 4597 1696 2 MP stroke
--59 -142 4597 1495 2 MP stroke
--33 -216 4597 1294 2 MP stroke
-0 -239 4597 1093 2 MP stroke
-0 -191 4852 3909 2 MP stroke
-80 -173 4852 3708 2 MP stroke
-145 -114 4852 3507 2 MP stroke
-180 -47 4852 3306 2 MP stroke
-181 46 4852 3105 2 MP stroke
-145 115 4852 2903 2 MP stroke
-80 174 4852 2702 2 MP stroke
-0 192 4852 2501 2 MP stroke
--81 173 4852 2300 2 MP stroke
--145 114 4852 2099 2 MP stroke
--181 47 4852 1897 2 MP stroke
--181 -46 4852 1696 2 MP stroke
--145 -114 4852 1495 2 MP stroke
--80 -174 4852 1294 2 MP stroke
-0 -192 4852 1093 2 MP stroke
-0 -106 5107 3909 2 MP stroke
-122 -96 5107 3708 2 MP stroke
-220 -63 5107 3507 2 MP stroke
-274 -26 5107 3306 2 MP stroke
-274 26 5107 3105 2 MP stroke
-220 64 5107 2903 2 MP stroke
-122 96 5107 2702 2 MP stroke
-0 106 5107 2501 2 MP stroke
--122 96 5107 2300 2 MP stroke
--220 63 5107 2099 2 MP stroke
--274 26 5107 1897 2 MP stroke
--274 -25 5107 1696 2 MP stroke
--220 -63 5107 1495 2 MP stroke
--122 -96 5107 1294 2 MP stroke
-0 -107 5107 1093 2 MP stroke
-5362 3909 PD
-135 0 5362 3708 2 MP stroke
-243 0 5362 3507 2 MP stroke
-303 0 5362 3306 2 MP stroke
-303 0 5362 3105 2 MP stroke
-243 0 5362 2903 2 MP stroke
-135 0 5362 2702 2 MP stroke
-5362 2501 PD
--135 0 5362 2300 2 MP stroke
--243 0 5362 2099 2 MP stroke
--303 0 5362 1897 2 MP stroke
--303 0 5362 1696 2 MP stroke
--243 0 5362 1495 2 MP stroke
--135 0 5362 1294 2 MP stroke
-5362 1093 PD
-1791 3909 PD
--45 12 45 11 1881 3697 3 MP stroke
--80 21 80 21 1954 3486 3 MP stroke
--100 26 100 26 1994 3280 3 MP stroke
--100 26 100 26 1994 3079 3 MP stroke
--80 21 80 20 1954 2883 3 MP stroke
--45 12 45 11 1881 2691 3 MP stroke
-1791 2501 PD
-45 -12 -45 -11 1701 2311 3 MP stroke
-80 -21 -80 -20 1628 2119 3 MP stroke
-100 -26 -100 -26 1588 1923 3 MP stroke
-100 -26 -100 -26 1588 1722 3 MP stroke
-80 -21 -80 -21 1628 1516 3 MP stroke
-45 -12 -45 -11 1701 1305 3 MP stroke
-1791 1093 PD
--14 -35 -15 35 2061 3981 3 MP stroke
--53 -21 27 42 2141 3762 3 MP stroke
--81 -2 64 40 2202 3530 3 MP stroke
--94 15 87 32 2233 3299 3 MP stroke
--87 32 94 15 2226 3064 3 MP stroke
--64 40 81 -2 2185 2842 3 MP stroke
--27 42 53 -21 2115 2627 3 MP stroke
-15 35 14 -35 2032 2430 3 MP stroke
-54 21 -27 -42 1951 2246 3 MP stroke
-82 2 -64 -40 1890 2075 3 MP stroke
-94 -15 -87 -33 1859 1904 3 MP stroke
-87 -32 -94 -15 1866 1737 3 MP stroke
-64 -39 -82 2 1908 1556 3 MP stroke
-27 -42 -54 21 1978 1369 3 MP stroke
--14 -35 -15 35 2061 1164 3 MP stroke
--26 -63 -27 63 2328 4038 3 MP stroke
--50 -51 2 65 2379 3817 3 MP stroke
--63 -25 32 50 2414 3571 3 MP stroke
--66 0 53 31 2429 3321 3 MP stroke
--53 31 66 0 2416 3058 3 MP stroke
--32 50 63 -25 2383 2814 3 MP stroke
--3 64 51 -50 2331 2579 3 MP stroke
-27 64 26 -64 2275 2373 3 MP stroke
-50 51 -2 -65 2223 2191 3 MP stroke
-64 26 -32 -50 2188 2034 3 MP stroke
-67 0 -54 -31 2174 1882 3 MP stroke
-53 -31 -66 0 2187 1743 3 MP stroke
-32 -50 -64 25 2220 1584 3 MP stroke
-3 -64 -50 50 2271 1417 3 MP stroke
--26 -63 -27 63 2328 1221 3 MP stroke
--33 -79 -33 79 2589 4069 3 MP stroke
--41 -68 -19 74 2608 3850 3 MP stroke
--39 -42 -1 52 2616 3597 3 MP stroke
--32 -13 16 26 2614 3338 3 MP stroke
--16 26 32 -13 2598 3059 3 MP stroke
-1 52 39 -42 2576 2803 3 MP stroke
-19 74 40 -69 2549 2555 3 MP stroke
-33 79 33 -79 2523 2341 3 MP stroke
-41 68 19 -74 2504 2158 3 MP stroke
-39 42 0 -52 2497 2008 3 MP stroke
-32 13 -16 -26 2499 1865 3 MP stroke
-16 -25 -32 13 2515 1741 3 MP stroke
-0 -52 -39 41 2536 1596 3 MP stroke
--19 -74 -40 69 2564 1441 3 MP stroke
--33 -79 -33 79 2589 1253 3 MP stroke
--33 -79 -33 79 2844 4069 3 MP stroke
--19 -74 -41 68 2819 3856 3 MP stroke
-0 -53 -39 42 2791 3608 3 MP stroke
-16 -26 -32 13 2770 3351 3 MP stroke
-32 13 -16 -26 2754 3072 3 MP stroke
-39 42 0 -52 2752 2813 3 MP stroke
-40 69 19 -74 2760 2560 3 MP stroke
-33 79 33 -79 2778 2341 3 MP stroke
-19 74 41 -68 2803 2152 3 MP stroke
-1 52 39 -42 2831 1998 3 MP stroke
--16 26 32 -13 2853 1852 3 MP stroke
--32 -12 16 25 2869 1729 3 MP stroke
--39 -42 -1 52 2871 1586 3 MP stroke
--40 -68 -19 74 2863 1436 3 MP stroke
--33 -79 -33 79 2844 1253 3 MP stroke
--26 -63 -27 63 3093 4038 3 MP stroke
-2 -65 -50 51 3036 3831 3 MP stroke
-32 -50 -63 25 2985 3596 3 MP stroke
-53 -31 -66 -1 2952 3353 3 MP stroke
-66 0 -53 -31 2939 3089 3 MP stroke
-63 25 -32 -50 2954 2839 3 MP stroke
-51 50 -3 -64 2989 2593 3 MP stroke
-27 64 26 -64 3040 2373 3 MP stroke
--3 65 51 -51 3096 2177 3 MP stroke
--32 51 63 -26 3148 2010 3 MP stroke
--53 31 66 0 3181 1851 3 MP stroke
--66 0 53 31 3194 1712 3 MP stroke
--63 -25 32 50 3179 1559 3 MP stroke
--51 -50 3 64 3144 1403 3 MP stroke
--26 -63 -27 63 3093 1221 3 MP stroke
--14 -35 -15 35 3336 3981 3 MP stroke
-27 -42 -54 21 3253 3783 3 MP stroke
-63 -40 -81 3 3183 3568 3 MP stroke
-87 -32 -94 -15 3141 3347 3 MP stroke
-94 -15 -87 -32 3134 3111 3 MP stroke
-81 2 -63 -40 3165 2880 3 MP stroke
-53 21 -27 -42 3227 2648 3 MP stroke
-15 35 14 -35 3307 2430 3 MP stroke
--27 42 53 -21 3390 2225 3 MP stroke
--64 40 81 -2 3460 2037 3 MP stroke
--86 32 93 15 3502 1857 3 MP stroke
--94 15 86 32 3509 1690 3 MP stroke
--81 -2 64 40 3477 1519 3 MP stroke
--53 -21 26 42 3417 1348 3 MP stroke
--14 -35 -15 35 3336 1164 3 MP stroke
-1 0 3576 3909 2 MP stroke
-44 -11 -44 -12 3486 3720 3 MP stroke
-80 -21 -80 -21 3414 3528 3 MP stroke
-100 -26 -100 -26 3374 3332 3 MP stroke
-100 -26 -100 -26 3374 3131 3 MP stroke
-81 -21 -81 -21 3414 2924 3 MP stroke
-44 -11 -44 -12 3486 2714 3 MP stroke
-3577 2501 PD
--44 11 44 12 3667 2288 3 MP stroke
--81 21 81 21 3739 2078 3 MP stroke
--100 26 100 26 3779 1871 3 MP stroke
--100 26 100 26 3779 1670 3 MP stroke
--80 21 80 21 3739 1474 3 MP stroke
--44 11 44 12 3667 1282 3 MP stroke
--1 0 3577 1093 2 MP stroke
-14 35 15 -35 3817 3838 3 MP stroke
-53 21 -26 -42 3736 3654 3 MP stroke
-81 2 -64 -40 3676 3483 3 MP stroke
-94 -15 -86 -32 3644 3312 3 MP stroke
-86 -32 -93 -15 3651 3145 3 MP stroke
-64 -40 -81 2 3693 2965 3 MP stroke
-27 -42 -53 21 3763 2777 3 MP stroke
--15 -35 -14 35 3846 2572 3 MP stroke
--53 -21 27 42 3926 2354 3 MP stroke
--81 -2 63 40 3988 2122 3 MP stroke
--94 15 87 32 4019 1891 3 MP stroke
--87 32 94 15 4012 1655 3 MP stroke
--63 40 81 -3 3970 1434 3 MP stroke
--27 42 54 -21 3900 1219 3 MP stroke
-14 35 15 -35 3817 1021 3 MP stroke
-26 63 27 -63 4060 3781 3 MP stroke
-51 50 -3 -64 4009 3599 3 MP stroke
-63 25 -32 -50 3974 3443 3 MP stroke
-66 0 -53 -31 3959 3290 3 MP stroke
-53 -31 -66 0 3972 3151 3 MP stroke
-32 -51 -63 26 4005 2992 3 MP stroke
-3 -65 -51 51 4057 2825 3 MP stroke
--27 -64 -26 64 4113 2629 3 MP stroke
--51 -50 3 64 4164 2409 3 MP stroke
--63 -25 32 50 4199 2163 3 MP stroke
--66 0 53 31 4214 1913 3 MP stroke
--53 31 66 1 4201 1649 3 MP stroke
--32 50 63 -25 4168 1406 3 MP stroke
--2 65 50 -51 4117 1171 3 MP stroke
-26 63 27 -63 4060 964 3 MP stroke
-33 79 33 -79 4309 3749 3 MP stroke
-40 68 19 -74 4290 3566 3 MP stroke
-39 42 1 -52 4282 3416 3 MP stroke
-32 12 -16 -25 4284 3273 3 MP stroke
-16 -26 -32 13 4300 3150 3 MP stroke
--1 -52 -39 42 4322 3004 3 MP stroke
--19 -74 -41 68 4350 2850 3 MP stroke
--33 -79 -33 79 4375 2661 3 MP stroke
--40 -69 -19 74 4393 2442 3 MP stroke
--39 -42 0 52 4401 2189 3 MP stroke
--32 -13 16 26 4399 1930 3 MP stroke
--16 26 32 -13 4383 1651 3 MP stroke
-0 53 39 -42 4362 1394 3 MP stroke
-19 74 41 -68 4334 1146 3 MP stroke
-33 79 33 -79 4309 933 3 MP stroke
-33 79 33 -79 4564 3749 3 MP stroke
-19 74 40 -69 4589 3561 3 MP stroke
-0 52 39 -41 4617 3406 3 MP stroke
--16 25 32 -13 4638 3261 3 MP stroke
--32 -13 16 26 4654 3137 3 MP stroke
--39 -42 0 52 4656 2994 3 MP stroke
--41 -68 -19 74 4649 2844 3 MP stroke
--33 -79 -33 79 4630 2661 3 MP stroke
--19 -74 -40 69 4604 2447 3 MP stroke
--1 -52 -39 42 4577 2199 3 MP stroke
-16 -26 -32 13 4555 1943 3 MP stroke
-32 13 -16 -26 4539 1664 3 MP stroke
-39 42 1 -52 4537 1405 3 MP stroke
-41 68 19 -74 4545 1152 3 MP stroke
-33 79 33 -79 4564 933 3 MP stroke
-26 63 27 -63 4825 3781 3 MP stroke
--3 64 50 -50 4882 3585 3 MP stroke
--32 50 64 -25 4933 3418 3 MP stroke
--53 31 66 0 4966 3259 3 MP stroke
--67 0 54 31 4979 3120 3 MP stroke
--64 -26 32 50 4965 2968 3 MP stroke
--50 -51 2 65 4930 2811 3 MP stroke
--27 -64 -26 64 4878 2629 3 MP stroke
-3 -64 -51 50 4822 2423 3 MP stroke
-32 -50 -63 25 4770 2188 3 MP stroke
-53 -31 -66 0 4737 1944 3 MP stroke
-66 0 -53 -31 4724 1681 3 MP stroke
-63 25 -32 -50 4739 1431 3 MP stroke
-50 51 -2 -65 4774 1185 3 MP stroke
-26 63 27 -63 4825 964 3 MP stroke
-14 35 15 -35 5092 3838 3 MP stroke
--27 42 54 -21 5175 3633 3 MP stroke
--64 39 82 -2 5245 3446 3 MP stroke
--87 32 94 15 5287 3265 3 MP stroke
--94 15 87 33 5294 3098 3 MP stroke
--82 -2 64 40 5263 2927 3 MP stroke
--54 -21 27 42 5202 2756 3 MP stroke
--15 -35 -14 35 5121 2572 3 MP stroke
-27 -42 -53 21 5038 2375 3 MP stroke
-64 -40 -81 2 4968 2160 3 MP stroke
-87 -32 -94 -15 4927 1938 3 MP stroke
-94 -15 -87 -32 4920 1703 3 MP stroke
-81 2 -64 -40 4951 1472 3 MP stroke
-53 21 -27 -42 5012 1240 3 MP stroke
-14 35 15 -35 5092 1021 3 MP stroke
-5362 3909 PD
--45 12 45 11 5452 3697 3 MP stroke
--80 21 80 21 5525 3486 3 MP stroke
--100 26 100 26 5565 3280 3 MP stroke
--100 26 100 26 5565 3079 3 MP stroke
--80 21 80 20 5525 2883 3 MP stroke
--45 12 45 11 5452 2691 3 MP stroke
-5362 2501 PD
-45 -12 -45 -11 5272 2311 3 MP stroke
-80 -21 -80 -20 5199 2119 3 MP stroke
-100 -26 -100 -26 5159 1923 3 MP stroke
-100 -26 -100 -26 5159 1722 3 MP stroke
-80 -21 -80 -21 5199 1516 3 MP stroke
-45 -12 -45 -11 5272 1305 3 MP stroke
-5362 1093 PD
-gr
-
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 168 FMSR
-
-2300  208 mt 
-(Vector-field plot of FE-solution E) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 132 FMSR
-
-4779  292 mt 
-(h) s
-%%IncludeResource: font Helvetica
-/Helvetica /ISOLatin1Encoding 120 FMSR
-
-3546 4902 mt 
-(x) s
- 573 2532 mt  -90 rotate
-(y) s
-90 rotate
-
-end
-
-eplot
-%%EndObject
-
-epage
-end
-
-showpage
-
-%%Trailer
-%%EOF
-
-%%EndDocument
- @endspecial 758 5020 a(Figure)f(5:)41 b(V)-8 b(ector-\014eld)32
-b(plot)d(of)i(the)f(FE-solution)g(of)g(example)h(\(32\).)1949
-5719 y(20)p eop
-%%Page: 21 21
-21 20 bop 28 232 a Fw(References)69 414 y Fz([1])45 b(A.)d(Alonso)f
-(and)h(A.)g(V)-7 b(alli.)79 b(An)42 b(optimal)f(domain)g(decomp)r
-(osition)h(preconditioner)e(for)h(lo)n(w-frequency)f(time-)202
-514 y(harmonic)27 b(Maxw)n(ell)g(equations.)36 b Fm(Math.)31
-b(Comp.)p Fz(,)e(68\(226\):607{631,)22 b(1999.)69 663
-y([2])45 b(W.)29 b(Bangerth,)f(R.)h(Hartmann,)f(and)h(G.)g(Kansc)n
-(hat.)38 b Fd(deal.II)28 b Fm(Di\013er)l(ential)j(Equations)g(A)n
-(nalysis)g(Libr)l(ary,)i(T)-6 b(e)l(ch-)202 763 y(nic)l(al)31
-b(R)l(efer)l(enc)l(e)p Fz(.)36 b(IWR,)29 b(Univ)n(ersit\177)-42
-b(at)27 b(Heidelb)r(erg.)36 b Fd(http://www.deali)o(i.o)o(rg)o
-Fz(.)69 912 y([3])45 b(F.)33 b(Brezzi)e(and)h(M.)h(F)-7
-b(ortin.)51 b Fm(Mixe)l(d)34 b(and)h(Hybrid)g(Finite)g(Element)f(Metho)
-l(ds)p Fz(,)h(v)n(olume)c(15)h(of)g Fm(Springer)j(Series)f(in)202
-1012 y(Computational)d(Mathematics)p Fz(.)39 b(Springer-V)-7
-b(erlag,)25 b(New)j(Y)-7 b(ork,)27 b(1991.)69 1162 y([4])45
-b(V.)34 b(Girault)f(and)g(P)-7 b(.-A.)33 b(Ra)n(viart.)52
-b Fm(Finite)36 b(Element)f(Appr)l(oximation)h(of)g(the)f(Navier-Stokes)
-h(Equations)p Fz(,)f(v)n(olume)202 1261 y(749)26 b(of)i
-Fm(L)l(e)l(ctur)l(e)h(Notes)g(in)h(Mathematics)p Fz(.)39
-b(Springer-V)-7 b(erlag,)25 b(Berlin,)i(Heidelb)r(erg,)g(1979,)f(1981.)
-69 1411 y([5])45 b(R.)40 b(Hiptmair.)72 b(Finite)41 b(elemen)n(ts)e(in)
-h(computational)e(electromagnetism.)71 b(In)40 b Fm(A)l(cta)g(Numeric)l
-(a)p Fz(,)j(pages)c(1{103.)202 1510 y(Cam)n(bridge)26
-b(Univ)n(ersit)n(y)h(press,)g(2002.)69 1660 y([6])45
-b(P)-7 b(.)19 b(Monk.)k(Analysis)c(of)h(a)f(\014nite)h(elemen)n(t)f
-(metho)r(d)h(for)f(Maxw)n(ell's)g(equations.)j Fm(SIAM)g(J.)g(Numer.)g
-(A)n(nal)p Fz(,)g(29:714{729,)202 1759 y(1992.)69 1909
-y([7])45 b(P)-7 b(.)38 b(Monk.)67 b(A)38 b(simple)g(pro)r(of)g(for)f
-(an)h(edge)f(elemen)n(t)h(discretization)f(of)h(Maxw)n(ell's)f
-(equations.)67 b(Submitted)39 b(for)202 2008 y(publication.)28
-b(Do)n(wnload)e(v)n(ersion)g(a)n(v)-5 b(ailable)27 b(on)g(Monk's)g(w)n
-(ebpage:)36 b(www.math.udel.edu./)28 b(monk,)f(2001.)69
-2158 y([8])45 b(J.)28 b(C.)f(N)n(\023)-39 b(ed)n(\023)g(elec.)35
-b(Mixed)28 b(\014nite)g(elemen)n(ts)f(in)h Fr(R)1701
-2128 y Fp(3)1745 2158 y Fz(.)36 b Fm(Numer.)30 b(Math.)p
-Fz(,)f(35:315{341,)23 b(1980.)69 2307 y([9])45 b(J.)27
-b(C.)g(N)n(\023)-39 b(ed)n(\023)g(elec.)33 b(Elemen)n(ts)27
-b(\014nis)g(mixtes)f(incompressibles)g(p)r(our)h(l')n(\023)-39
-b(equation)25 b(de)i(Stok)n(es)f(dans)g Fr(R)3322 2277
-y Fp(3)3365 2307 y Fz(.)36 b Fm(Numer.)29 b(Math.)p Fz(,)202
-2407 y(39:97{112,)24 b(1982.)28 2556 y([10])44 b(J.)28
-b(C.)f(N)n(\023)-39 b(ed)n(\023)g(elec.)35 b(A)28 b(new)g(family)f(of)h
-(mixed)g(\014nite)g(elemen)n(ts)f(in)h Fr(R)2303 2526
-y Fp(3)2346 2556 y Fz(.)37 b Fm(Numer.)30 b(Math.)p Fz(,)f(50:57{81,)24
-b(1986.)28 2706 y([11])44 b(W.)24 b(Rac)n(ho)n(wicz)e(and)i(L.)f(Demk)n
-(o)n(wicz.)30 b(A)24 b(t)n(w)n(o-dimensional)e(hp-adaptiv)n(e)g
-(\014nite)i(elemen)n(t)g(pac)n(k)-5 b(age)22 b(for)h(electromag-)202
-2805 y(netics)30 b(\(2Dhp90)p 758 2805 25 4 v 30 w(EM\).)44
-b(Ticam)29 b(Rep)r(ort)h(98{16,)f(TICAM,)h(1998.)42 b(Do)n(wnload)29
-b(v)n(ersion)g(a)n(v)-5 b(ailable)28 b(on)i(Demk)n(o)n(wicz')202
-2905 y(w)n(ebpage:)36 b(www.ices.utexas.edu/)27 b(Leszek.)28
-3054 y([12])44 b(W.)39 b(Rac)n(ho)n(wicz)e(and)h(L.)h(Demk)n(o)n(wicz.)
-68 b(A)39 b(three-dimensional)f(hp-adaptiv)n(e)f(\014nite)i(elemen)n(t)
-g(pac)n(k)-5 b(age)37 b(for)h(elec-)202 3154 y(tromagnetics)31
-b(\(3Dhp90)p 1019 3154 V 29 w(EM\).)50 b(Ticam)31 b(Rep)r(ort)h
-(00-04.2000,)d(TICAM,)j(2000.)48 b(Do)n(wnload)31 b(v)n(ersion)f(a)n(v)
--5 b(ailable)31 b(on)202 3254 y(Demk)n(o)n(wicz')c(w)n(ebpage:)36
-b(www.ices.utexas.edu/)26 b(Leszek.)1949 5719 y Fk(21)p
-eop
-%%Page: 22 22
-22 21 bop 28 231 a Fw(A)134 b Fv(Construction)36 b(of)i(solutions)e(in)
-h(2d)28 413 y Fz(W)-7 b(e)28 b(presen)n(t)g(ho)n(w)g(div)n
-(ergence-free)e(solutions)i(of)g(the)h(mo)r(del)f(problem)g(\(1\))h(on)
-f(a)g(domain)g(\012)c Fs(\032)g Fr(R)3203 383 y Fp(2)3275
-413 y Fz(with)k(p)r(erfectly)h(con-)28 513 y(ducting)e(b)r(oundary)g
-(can)g(b)r(e)h(constructed)g(from)f(solutions)g(of)g(the)h(scalar)e
-(Laplace)h(equation.)28 812 y Fn(Pr)n(oposition)g Fz(9)45
-b Fm(L)l(et)28 b Fz(\012)g Fm(b)l(e)h(a)g(su\016ciently)g(smo)l(oth)g
-(domain)h(in)e Fr(R)2196 782 y Fp(2)2239 812 y Fm(,)i
-Fx(')p Fz(\()p Fx(x;)14 b(y)s Fz(\))29 b Fm(a)g(su\016c)l(ently)f(smo)l
-(oth)h(sc)l(alar)h(function)e(on)28 911 y Fz(\012)h Fm(and)h(the)g(c)l
-(o)l(e\016cient)h Fx(c)23 b(>)f Fz(0)30 b Fm(glob)l(al)t(ly)h(c)l
-(onstant.)28 1011 y(L)l(et)e Fx(w)j Fm(b)l(e)e(a)g(solution)g(of)h(the)
-f(sc)l(alar)g(e)l(quation)1513 1188 y Fs(\000)p Fz(\001)p
-Fx(w)21 b Fz(+)d Fx(c)c(w)25 b Fz(=)e Fx(')85 b Fz(in)g(\012)1680
-1313 y Fx(n)p 1680 1326 50 4 v 19 w Fs(\001)18 b(r)p
-Fx(w)26 b Fz(=)d(0)84 b(on)h Fx(@)5 b Fz(\012)14 b Fx(:)3814
-1252 y Fz(\(34\))28 1505 y Fm(Then,)30 b Fx(E)p 269 1518
-67 4 v 29 w Fz(:=)22 b Fs(r)538 1474 y Fh(?)594 1505
-y Fx(w)33 b Fm(is)d(a)g(solution)g(of)h(the)f(mo)l(del)g(e)l(quation)
-1452 1682 y Fz(curl)p 1452 1695 139 4 v 14 w(curl)13
-b Fx(E)p 1757 1695 67 4 v 24 w Fz(+)18 b Fx(c)c(E)p 1975
-1695 V 28 w Fz(=)22 b Fx(f)p 2151 1712 50 4 v 94 w Fz(in)85
-b(\012)14 b Fx(;)1773 1818 y(E)p 1773 1831 67 4 v 24
-w Fs(^)19 b Fx(n)p 1932 1831 50 4 v 23 w Fz(=)j(0)85
-b(on)f Fx(@)5 b Fz(\012)14 b Fx(;)28 2010 y Fm(with)30
-b(right)g(hand)h(side)g Fx(f)p 780 2039 V 31 w Fz(:=)23
-b Fs(r)1032 1979 y Fh(?)1088 2010 y Fx(')p Fm(.)28 2171
-y(We)29 b(use)h(the)g(notation)g Fs(r)863 2141 y Fh(?)919
-2171 y Fx(')23 b Fz(:=)g Fj(R)q Fs(r)p Fx(')g Fz(=)1414
-2054 y Fl(\022)1550 2120 y Fx(@)1594 2132 y Fq(y)1634
-2120 y Fx(')1517 2220 y Fs(\000)p Fx(@)1626 2232 y Fq(x)1667
-2220 y Fx(')1763 2054 y Fl(\023)1824 2171 y Fm(.)28 2428
-y Fn(Pr)n(oof.)58 b Fz(W)-7 b(e)34 b(\014rst)g(sho)n(w)e(the)i(corresp)
-r(ondence)e(of)h(the)h(b)r(oundary)f(conditions.)54 b(With)34
-b(the)g(de\014nition)g Fx(E)p 3466 2441 67 4 v 38 w Fz(:=)e
-Fs(r)3754 2398 y Fh(?)3811 2428 y Fx(w)k Fz(it)28 2528
-y(holds)1285 2628 y Fx(E)p 1285 2641 V 24 w Fs(^)18 b
-Fx(n)p 1443 2641 50 4 v 23 w Fz(=)23 b Fx(E)p 1604 2641
-67 4 v 24 w Fs(\001)18 b Fx(t)p 1730 2641 30 4 v 23 w
-Fz(=)23 b Fs(r)p Fx(w)2002 2591 y Fq(T)2054 2628 y Fj(R)2127
-2591 y Fq(T)2179 2628 y Fj(R)15 b Fx(n)p 2266 2641 50
-4 v 22 w Fz(=)23 b Fs(r)p Fx(w)e Fs(\001)e Fx(n)p 2617
-2641 V 14 w(:)28 2777 y Fz(It)35 b(remains)f(to)g(sho)n(w)g(that)h
-Fx(E)p 950 2790 67 4 v 40 w Fz(solv)n(es)e(the)i(mo)r(del)g(problem)f
-(for)h(an)f(appropriate)f(righ)n(t)h(hand)h(side.)58
-b(First,)36 b(note)f(that)28 2877 y Fx(E)p 28 2890 V
-38 w Fz(is)d(div)n(ergence-free:)45 b Fs(r)22 b(\001)g(r)1028
-2846 y Fh(?)1085 2877 y Fx(w)34 b Fz(=)d(0)i(for)f(all)g
-Fx(w)r Fz(.)54 b(Hence,)34 b(the)f(iden)n(tit)n(y)g(curl)p
-2475 2890 139 4 v 13 w(curl)14 b Fx(E)p 2780 2890 67
-4 v 37 w Fz(=)31 b Fs(r)p Fz(\()p Fs(r)23 b(\001)f Fx(E)p
-3212 2890 V 5 w Fz(\))g Fs(\000)f Fz(\001)p Fx(E)p 3487
-2890 V 38 w Fz(reduces)32 b(to)28 2976 y(curl)p 28 2989
-139 4 v 13 w(curl)13 b Fx(E)p 332 2989 67 4 v 30 w Fz(=)24
-b Fs(\000)p Fz(\001)p Fx(E)p 646 2989 V 5 w Fz(.)39 b(The)28
-b(observ)-5 b(ation)27 b(that)i(for)f(smo)r(oth)g(data)g
-Fs(r)2249 2946 y Fh(?)2305 2976 y Fx(w)j Fz(solv)n(es)c(the)i(Laplace)e
-(equation)h(\(34\))g(with)h(righ)n(t)28 3076 y(hand)e(side)h
-Fs(r)471 3046 y Fh(?)527 3076 y Fx(')g Fz(concludes)f(the)h(pro)r(of.)
-3897 3250 y Fg(\003)28 3449 y Fn(Example)f Fz(5)g(\(Solutions)h(from)f
-(eigenfunctions)g(of)h(the)g(Laplacian\))44 b Fm(Cho)l(ose)h
-Fx(w)h Fm(to)d(b)l(e)g(a)h(solution)f(of)i(the)e(eigenvalue)28
-3549 y(pr)l(oblem)1642 3726 y Fs(\000)p Fz(\001)p Fx(w)25
-b Fz(=)e Fx(\025)14 b(w)88 b Fz(in)d(\012)1597 3851 y
-Fx(n)p 1597 3864 50 4 v 18 w Fs(\001)18 b(r)p Fx(w)26
-b Fz(=)d(0)84 b(on)h Fx(@)5 b Fz(\012)14 b Fx(;)28 4034
-y Fm(and)30 b(set)f Fx(')24 b Fz(=)e(\()p Fx(\025)d Fz(+)f
-Fx(c)p Fz(\))c Fx(w)r Fm(.)28 4134 y(As)28 b(an)h(example,)h(take)f
-Fz(\012)23 b(=)f([)p Fs(\000)p Fz(1)p Fx(;)14 b Fz(1])1190
-4104 y Fp(2)1255 4134 y Fm(and)29 b Fx(\025)23 b Fz(=)g(2)p
-Fx(\031)1666 4104 y Fp(2)1703 4134 y Fm(.)38 b(Then,)30
-b Fx(w)c Fz(=)d(cos)13 b Fx(\031)s(x)h Fz(cos)f Fx(\031)s(y)32
-b Fm(is)d(an)g(eigenfunction)g(and)g(we)g(c)l(ompute)724
-4366 y Fx(f)p 724 4396 V 31 w Fz(=)23 b(\(2)p Fx(\031)1008
-4332 y Fp(2)1064 4366 y Fz(+)18 b Fx(c)p Fz(\))p Fx(\031)1279
-4249 y Fl(\022)1421 4316 y Fz(cos)13 b Fx(\031)s(x)h
-Fz(sin)g Fx(\031)s(y)1382 4415 y Fs(\000)g Fz(sin)f Fx(\031)s(x)h
-Fz(cos)g Fx(\031)s(y)1948 4249 y Fl(\023)2037 4366 y
-Fx(;)183 b(E)p 2243 4379 67 4 v 29 w Fz(=)22 b Fx(\031)2484
-4249 y Fl(\022)2626 4316 y Fz(cos)13 b Fx(\031)s(x)h
-Fz(sin)h Fx(\031)s(y)2587 4415 y Fs(\000)f Fz(sin)f Fx(\031)s(x)h
-Fz(cos)g Fx(\031)s(y)3153 4249 y Fl(\023)3242 4366 y
-Fx(:)28 4621 y Fn(Example)27 b Fz(6)g(\(Solutions)h(from)f(an)n(y)g
-(scalar)f(function)i(satiesfying)f(the)h(b)r(oundary)e(condition\))46
-b Fm(T)-6 b(ake)22 b(again)g Fz(\012)h(=)g([)p Fs(\000)p
-Fz(1)p Fx(;)14 b Fz(1])3942 4591 y Fp(2)3978 4621 y Fm(.)28
-4720 y(We)34 b(have)h(to)f(\014nd)g(a)g(sc)l(alar)h(function)g
-Fx(w)h Fm(which)g(saties\014es)e(the)h(homo)l(gene)l(ous)g(Neumann)e(b)
-l(oundary)i(c)l(ondition.)52 b(T)-6 b(ake)28 4820 y(for)30
-b(example)h Fx(w)r Fz(\()p Fx(x;)14 b(y)s Fz(\))25 b(=)e(\(1)18
-b Fs(\000)g Fx(x)1067 4790 y Fp(2)1105 4820 y Fz(\))1137
-4790 y Fp(2)1174 4820 y Fz(\(1)h Fs(\000)f Fx(y)1394
-4790 y Fp(2)1431 4820 y Fz(\))1463 4790 y Fp(2)1500 4820
-y Fm(,)31 b(for)g(which)g(we)f(have)h Fx(n)p 2236 4833
-50 4 v 19 w Fs(\001)18 b(r)p Fx(w)27 b Fz(=)c(0)29 b
-Fm(on)h Fx(@)5 b Fz([)p Fs(\000)p Fz(1)p Fx(;)14 b Fz(1])3060
-4790 y Fp(2)3095 4820 y Fm(.)40 b(The)31 b(right)f(hand)h(side)g(is)28
-4920 y(then)e Fx(')24 b Fz(=)e Fs(\000)p Fz(\001)p Fx(w)f
-Fz(+)d Fx(cw)r Fm(.)1949 5719 y Fk(22)p eop
-%%Page: 23 23
-23 22 bop 28 231 a Fw(B)134 b Fv(Time-harmonic)35 b(Maxw)m(ell's)i
-(equations)h(with)e(lo)m(w-frequency)i(appro)m(ximation)28
-413 y Fz(W)-7 b(e)32 b(sho)n(w,)h(ho)n(w)f(the)h(mo)r(del)g(problem)f
-(can)g(b)r(e)h(deriv)n(ed)f(from)g(the)h(time-harmonic)e(Maxw)n(ell's)h
-(equations)g(in)g(the)h(lo)n(w-)28 513 y(frequency)27
-b(case.)36 b(W)-7 b(e)28 b(follo)n(w)f(the)h(outline)f(of)h([1)o(]:)28
-613 y(W)-7 b(e)28 b(consider)e(the)i(follo)n(wing)f(primal)g(form)n
-(ulation)f(of)i(Maxw)n(ell's)f(equations:)1644 834 y
-Fx(")1693 778 y(@)5 b Fs(E)p 1693 815 100 4 v 1704 891
-a Fx(@)g(t)1825 834 y Fz(=)23 b(curl)13 b Fs(H)20 b(\000)e
-Fx(\033)s Fs(E)j Fx(;)1613 1038 y(\026)1673 982 y(@)5
-b Fs(H)p 1673 1019 120 4 v 1693 1095 a Fx(@)g(t)1825
-1038 y Fz(=)23 b Fs(\000)14 b Fz(curl)f Fs(E)21 b Fx(;)3814
-929 y Fz(\(35\))28 1248 y(where)31 b Fs(E)39 b Fz(and)31
-b Fs(H)i Fz(are)d(the)i(electric)g(and)f(magnetic)g(\014eld.)50
-b Fx(")p Fz(\()p Fx(x)p Fz(\))p Fx(;)14 b(\026)p Fz(\()p
-Fx(x)p Fz(\))33 b(are)e(the)h(dielectric)f(and)h(magnetic)f(p)r
-(ermeabilit)n(y)28 1348 y(co)r(e\016cien)n(ts,)36 b(and)e
-Fx(\033)s Fz(\()p Fx(x)p Fz(\))i(denotes)f(the)g(electric)f
-(conductivit)n(y)-7 b(.)58 b Fx(")p Fz(\()p Fx(x)p Fz(\))p
-Fx(;)14 b(\026)p Fz(\()p Fx(x)p Fz(\))37 b(and)d Fx(\033)s
-Fz(\()p Fx(x)p Fz(\))i(are)e(assumed)g(to)h(b)r(e)g(symmetric)28
-1448 y(matrices)29 b(in)h Fx(L)519 1417 y Fh(1)589 1448
-y Fz(\(\012\))713 1417 y Fq(d)p Fh(\002)p Fq(d)839 1448
-y Fz(,)h(and)f Fx(")p Fz(\()p Fx(x)p Fz(\))h(and)f Fx(\026)p
-Fz(\()p Fx(x)p Fz(\))h(are)e(p)r(ositiv)n(e)h(de\014nite.)45
-b Fx(\033)s Fz(\()p Fx(x)p Fz(\))32 b(is)e(p)r(ositiv)n(e)f(de\014nite)
-i(in)g(a)e(conductor)g(and)28 1547 y(v)-5 b(anishes)27
-b(in)h(an)f(insulator.)28 1776 y Fo(Time-harmonic,)33
-b(lo)m(w-frequency)i(case)28 1930 y Fz(W)-7 b(e)28 b(assume)e(that)i
-Fs(E)7 b Fz(\()p Fx(x;)14 b(t)p Fz(\))29 b(and)f Fs(H)q
-Fz(\()p Fx(x;)14 b(t)p Fz(\))28 b(are)f Fm(time-harmonic)p
-Fz(,)i(i.)f(e.)f(they)h(can)f(b)r(e)h(represen)n(ted)f(as)1467
-2111 y Fs(E)7 b Fz(\()p Fx(x;)14 b(t)p Fz(\))24 b(=)f(Re)14
-b(\()p Fx(E)5 b Fz(\()p Fx(x)p Fz(\))14 b(exp)q(\()p
-Fx(i!)s(t)p Fz(\)\))28 b Fx(;)1447 2236 y Fs(H)q Fz(\()p
-Fx(x;)14 b(t)p Fz(\))24 b(=)f(Re)14 b(\()p Fx(H)7 b Fz(\()p
-Fx(x)p Fz(\))14 b(exp)q(\()p Fx(i!)s(t)p Fz(\)\))27 b
-Fx(:)28 2419 y Fz(Here,)g Fx(E)5 b Fz(\()p Fx(x)p Fz(\))p
-Fx(;)14 b(H)7 b Fz(\()p Fx(x)p Fz(\))29 b(are)e(complex-v)-5
-b(alued)27 b(v)n(ector)f(\014elds)i(and)f Fx(!)f Fs(6)p
-Fz(=)c(0)28 b(is)f(a)g(giv)n(en)g(angular)f(frequency)-7
-b(.)28 2594 y Fn(Remark)28 b Fz(8)45 b Fm(F)-6 b(or)30
-b(example,)h(a)f(monofr)l(e)l(quent)f(laser)i(c)l(an)f(b)l(e)f(describ)
-l(e)l(d)j(by)e(the)g(time-harmonic)h(Maxwel)t(l's)g(e)l(quations.)28
-2768 y Fz(In)c(the)g(time-harmonic)f(case)g(the)h(space)f(and)h(time)g
-(v)-5 b(ariables)26 b(decouple)g(and)h(w)n(e)g(can)f(eliminate)h(the)g
-(time)h(dep)r(endency)-7 b(.)28 2868 y(F)g(or)28 b(this,)i(w)n(e)f(ask)
-f Fx(E)5 b Fz(\()p Fx(x)p Fz(\))14 b(exp)q(\()p Fx(i!)s(t)p
-Fz(\))29 b(and)g Fx(H)7 b Fz(\()p Fx(x)p Fz(\))14 b(exp\()p
-Fx(i!)s(t)p Fz(\))30 b(to)f(satiesfy)f(\(35\).)42 b(By)28
-b(then)i(inserting)f(the)g(second)g(equation)f(of)28
-2967 y(\(35\))f(in)n(to)g(the)h(\014rst)g(one,)f(w)n(e)g(can)g
-(eliminate)h(the)g(magnetic)f(\014eld)h Fx(H)7 b Fz(\()p
-Fx(x)p Fz(\).)38 b(This)27 b(yields)1331 3150 y(curl\()p
-Fx(\026)1552 3116 y Fh(\000)p Fp(1)1655 3150 y Fz(curl)14
-b Fx(E)5 b Fz(\))18 b Fs(\000)g Fx(!)2062 3116 y Fp(2)2099
-3150 y Fx("E)24 b Fz(+)18 b Fx(i!)s(\033)s(E)27 b Fz(=)c(0)28
-3333 y(In)30 b(the)g Fm(low-fr)l(e)l(quency)j(c)l(ase)k
-Fz(where)29 b Fs(j)p Fx(!)s Fs(j)h Fz(is)g(small,)g(it)h(is)f(kno)n(wn)
-f(that)h(for)g(general)f(materials)f(the)j(material)e(parameters)28
-3432 y(are)d(suc)n(h)h(that)1527 3532 y Fx(!)1582 3498
-y Fp(2)1619 3532 y Fx(")c Fs(\034)g Fx(\026)1837 3498
-y Fh(\000)p Fp(1)1940 3532 y Fx(;)97 b(!)2115 3498 y
-Fp(2)2152 3532 y Fx(")23 b Fs(\034)g Fx(!)s(\033)17 b(:)28
-3681 y Fz(Hence,)28 b(neglecting)f(the)i(expression)d
-Fx(!)1289 3651 y Fp(2)1326 3681 y Fx("E)5 b Fz(\()p Fx(x)p
-Fz(\))29 b(is)f(reasonable)e(and)h(it)i(brings)e(us)h(to)f(the)i(lo)n
-(w-frequency)d(appro)n(ximation)28 3781 y(of)h(the)h(time-harmonic)f
-(Maxw)n(ell's)f(equations:)1480 3964 y(curl\()p Fx(\026)1701
-3929 y Fh(\000)p Fp(1)1804 3964 y Fz(curl)14 b Fx(E)5
-b Fz(\))18 b(+)h Fx(i!)s(\033)s(E)27 b Fz(=)c(0)28 4146
-y(W)-7 b(e)30 b(consider)f(this)i(equation)e(in)i(a)f(conductor)f(\012)
-h(\()p Fx(\033)s Fz(\()p Fx(x)p Fz(\))i(p)r(os.)e(def.\))46
-b(and)30 b(a)g(imp)r(ose)g(Diric)n(hlet)g(b)r(oundary)g(condition)g(on)
-28 4246 y(the)e(tangen)n(tial)e(trace)h(of)h(the)g(\014eld:)1605
-4346 y Fx(E)c Fs(^)19 b Fx(n)k Fz(=)f(\010)83 b(on)g
-Fx(@)5 b Fz(\012)14 b Fx(:)1430 b Fz(\(36\))28 4495 y(Pro)r(ceeding)26
-b(as)h(in)h([1)o(],)g(w)n(e)g(assume)f(that)h(a)f(v)n(ector)f(funciton)
-2046 4474 y(~)2027 4495 y Fx(E)33 b Fz(is)27 b(kno)n(wn,)g(satiesfying)
-g(\(36\),)h(and)f(w)n(e)h(end)g(up)g(with)g(the)28 4595
-y(follo)n(wing)e(b)r(oundary)h(v)-5 b(alue)27 b(problem)h(for)f
-Fx(u)p 1417 4608 48 4 v 22 w Fz(=)c Fx(E)g Fs(\000)1762
-4574 y Fz(~)1742 4595 y Fx(E)1299 4774 y Fz(curl\()p
-Fx(\026)1520 4740 y Fh(\000)p Fp(1)1623 4774 y Fz(curl)14
-b Fx(u)p Fz(\))k(+)g Fx(i!)s(\033)s(u)k Fz(=)h Fx(F)95
-b Fz(in)83 b(\012)14 b Fx(;)1948 4899 y(u)k Fs(^)h Fx(n)k
-Fz(=)g(0)82 b(on)h Fx(@)5 b Fz(\012)14 b Fx(:)3814 4837
-y Fz(\(37\))28 5082 y(Although)23 b(problem)g(\(37\))h(is)f(complex-v)
--5 b(alued,)24 b(\014nding)f(a)g(\014nite)i(elemen)n(t)e(metho)r(d)h
-(to)g(appro)n(ximate)e(\(37\))h(basically)f(b)r(oils)28
-5182 y(do)n(wn)27 b(to)g(\014nding)h(a)f(\014nite)h(elemen)n(t)g(metho)
-r(d)g(for)f(the)h(real)f(v)-5 b(alued)27 b(mo)r(del)h(problem)f(\(1\).)
-1949 5719 y Fk(23)p eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/deal.II/doc/reports/new-threads/index.html b/deal.II/doc/reports/new-threads/index.html
deleted file mode 100644 (file)
index b146117..0000000
+++ /dev/null
@@ -1,1059 +0,0 @@
-
-<H1 ALIGN="CENTER">
-A short description of the new threading scheme
-</H1>
-
-
-<p ALIGN="CENTER">
-  <strong> Wolfgang Bangerth, May 2003</strong>
-</p>
-
-
-<p>
-Since the first deal.II report on
-multithreading was written in 2000 (see the list of deal.II
-publications),
-we have put in place a new
-implementation of the threading scheme (the first release to contain it is
-4.0). The new scheme can do all that you could do before, so the report is in a
-sense still valid, but it describes a syntax that is no more used. We will here
-briefly describe this syntax as well as some considerations that guided us
-while implementing it. For general questions on multithreading, how programs
-that use it must look like, and for pitfalls to watch out for, please still
-refer to the report mentioned above.
-</p>
-
-<p>
-We note that since this report was written, there has been another
-incarnation of support for multicore machines, namely by using the
-Threading Building Blocks and tasks. The documentation module on
-parallel computing, available through the modules page of the deal.II
-manual, explains this new direction in more detail.
-</p>
-
-
-<h3>1. Rationale and Introduction</h3>
-
-
-<p>
-POSIX and other thread libraries only allow functions as thread entry
-points that satisfy the signature
-<code><pre>
-  void *  (*)  (void *)
-</pre></code>
-and starting threads involves a clumsy syntax. Thread entry points
-with another signature need to be "wrapped", i.e. their arguments need
-to be stored in a structure, and we need a function with above
-signature that can be used to "unpack" the arguments and call the
-desired function. This basically forces us to have one such structure
-and entry function for each function signature that we want to start a
-thread with.
-</p>
-
-<p>
-The first incarnations of the threading scheme in deal.II already got a long
-way towards making this simpler, by hiding the thread entry points, the packing
-and unpacking behind a layer of carefully crafted templates. It allowed you to
-call (almost) any function with arbitrary argument lists on a new thread,
-except that functions that returned values were not allowed. Implementing such
-a template scheme is not simple, since, besides simplicity to use, it has to
-take care of the lifetimes of objects that need to be synchronised across
-threads, and in particular since templates do not allow for functions with
-arbitrary numbers of arguments - they need to be repeated for every number of
-arguments, which makes implementation tedious. Nevertheless, the old scheme was
-very much usable.
-</p>
-
-<p>
-However, the old scheme had a number of shortcomings:
-<ul>
-<li>The implementation did not allow for functions returning
-  anything but <code>void</code>. We want to be able to call everything
-  on a new thread that can also be called on the present one.</li>
-<li>Thread objects could not be copied. Rather, thread ids were put into a
-thread manager object that took care of it, but handling single, or even
-detached threads was not too convenient.</li>
-<li>The general syntax for calling a function on a new thread was a
-  little clumsy and not intuitive.</li>
-</ul>
-</p>
-
-<p>
-Regarding the last point, note that any other function is called by
-<code><pre>
-    f(arg1, arg2);
-    obj.f(arg1, arg2);
-</pre></code>
-Ideally, the following syntax for starting any function on a new
-thread would be nice:
-<code><pre>
-    spawn f(arg1, arg2);
-    spawn obj.f(arg1,arg2);
-</pre></code>
-This syntax is not possible in C++, but the following syntax is,
-making it relatively clear what the intent of the statement is:
-<code><pre>
-    spawn (f)(arg1, arg2);
-    spawn (obj, &Class::f)(arg1,arg2);
-</pre></code>
-This is the syntax we will want to achieve (except for the fact that the
-<code>spawn</code> function is in a namespace <code>Threads</code>, just like
-all other entities described here).
-</p>
-
-<p>
-This text will discuss the details that are needed to implement
-this syntax, as well as the following points:
-<ul>
-<li>Overloading <code>spawn(</code>) so as to take unbound functions and member
-functions, whether virtual or static. Of course, every call needs to be type
-safe, i.e. the exact
-  same conversions of arguments need to be performed as in a usual call (except
-  for two additional copies that are necessary).</li>
-<li><code>spawn()</code> needs to return a value that allows us to identify,
-and join a thread. The syntax for this will be
-<code><pre>
-      Thread&lt;&gt; t = spawn(f)(arg1, arg2);
-      t.join ();
-</pre></code>
-  If we don't save the return value of <code>spawn()</code>, as in the examples
-  above, then we have just created a detached thread.</li>
-<li>Return values: if <code>f()</code> returns a value, say, an integer, then
-we want to be able to retrieve it once the thread has finished:
-<code><pre>
-      Thread&lt;int&gt; t = spawn (f)(1., 1.);
-      t.join ();
-      int i = t.return_value ();
-</pre></code>
-  This requires some care when functions return references, but some
-  template magic will save us. Another special case are functions that
-  return <code>void</code>.</li>
-<li>Thread groups: if threads are created inside a loop, we will want to
-  put all of them into a <code>ThreadGroup</code> object, and wait for them
-  collectively, rather than one-by-one.</li>
-</ul>
-</p>
-
-<p>
-Basically, the syntax above is all you need to know. It is as simple as
-that. The rest of this text, in comparison is very much of technical nature. I
-took most of it from a technical discussion I had with the author of the
-threading scheme in boost, William Kempf. It describes the way the threading
-scheme is implemented, the meaning of the various classes, etc. It probably
-doesn't give you much insight how to <em>use</em> it, but should explain in
-reasonable detail how it <em>works</em>. For more examples of use, take a look
-at a number of the example programs in deal.II, or at some places in the
-library itself.
-</p>
-
-
-<p>
-This paper is divided into the following parts:
-<ol>
-<li>This introduction</li>
-<li>Entities (functions, classes) that are used by both and that
-   describe the newly created thread</li>
-<li>Entities that are used on the calling thread</li>
-<li>Entities that are used to create a thread</li>
-<li>Tool classes</li>
-<li>Open problems</li>
-<li>Further suggestions</li>
-</ol>
-We will present the main parts of the code in the text. The implementation is
-in the library; all entities that
-are not to be used by the user are placed into a namespace
-<code>internal</code>, those to be used are in a namespace
-<code>Threads</code>. The implementation uses Boost's shared_ptr. Some parts of
-the implementation parallel the
-boost::function library, but they are small and taylored to the
-particular purpose at hand; in particular, they make heavy use of the
-boost::tuple library. We note that the code has in some places already evolved
-a little bit beyond the state of this paper, but the main ideas are all to be
-found still.
-</p>
-
-
-
-<h3>2. Entities that describe threads</h3>
-
-
-<p>
-Each thread that has been created is described by exactly one object
-of type <code>thread_description&lt;RT&gt;</code>, where <code>RT</code> here and in the
-sequel will always denote the return type of the function being called
-on a new thread. The <code>thread_description</code> class is split into an
-operating system dependent base class, and an independent derived
-class. The base class is responsible for abstracting the OS
-interface to the functions creating, joining, killing, and signalling
-threads. For POSIX threads, this class looks as follows:
-</p>
-
-<code><pre>
-    struct thread_description_base {
-      private:
-        pthread_t                 pt;
-        mutable volatile bool     was_joined;
-        mutable boost::mutex      join_mutex;
-        mutable boost::condition  join_condition;
-
-      public:
-        thread_description_base () : was_joined (false) {};
-        virtual ~thread_description_base () { /* ... */ };
-
-        void create (void * (*p) (void *), void *d) {
-          pthread_create (&pt, 0, p, d);
-        };
-
-        void join () const {
-          if (was_joined)
-            return;
-          boost::mutex::scoped_lock lock(join_mutex);
-          if (!was_joined)
-              pthread_join (pt, 0);
-          was_joined = true;
-        };
-    };
-</pre></code>
-
-<p>
-<code>join()</code> can be called more than once and uses Schmidt's thread-safe
-double-checking pattern for speed. There could be additional functions
-<code>kill()</code> or <code>send_signal()</code>, but these are not presently
-implemented.
-</p>
-
-<p>
-In the destructor, we need to make sure that a thread is joined at
-least once in its lifetime, or if not that it is being detached
-(otherwise, we create the thread equivalent of a zombie process, which
-will lead to a resource leak in the operating system). This is a
-little tricky, since the destructor might be called while the thread
-is still running; comments in the code explain how we work around
-this.
-</p>
-
-<p>
-The <code>thread_description&lt;RT&gt;</code> class is derived from this base
-class:
-<code><pre>
-    template &lt;typename RT&gt;
-    struct thread_description : public thread_description_base
-    {
-        return_value&lt;RT&gt; ret_val;
-    };
-</pre></code>
-</p>
-
-<p>
-Its only purpose is to provide a place of storage for the return
-value of the function being called on the new thread. Since functions
-might return references or just nothing at all, the <code>return_value</code>
-template is used. It is described below in the section on Tool
-Classes. The return value will be set on exit of the function being
-called.
-</p>
-
-<p>
-As mentioned, there is exactly one <code>thread_description&lt;RT&gt;</code>
-object per created thread. It is accessed using <code>boost::shared_ptr</code>
-objects, and references are held from each <code>Thread&lt;RT&gt;</code> object
-for this thread as
-well as from a wrapper function on the new thread. The object is thus
-deleted, when all <code>Thread&lt;RT&gt;</code> objects for this thread have gone out of
-scope (or point to different threads) and the thread itself has
-finished; this is the appropriate time.
-</p>
-
-
-
-<h3>3. Entities that are used on the calling thread</h3>
-
-
-<p>
-On the calling thread, we basically use the <code>Thread&lt;RT&gt;</code>
-class, <code>ThreadGroup&lt;RT&gt;</code> class, and <code>spawn</code>
-function. The <code>Thread&lt;RT&gt;</code> class has the following
-implementation:
-</p>
-
-<code><pre>
-    template &lt;typename RT = void&gt;
-    class Thread {
-      public:
-        Thread () {};
-        Thread (const boost::shared_ptr&lt;thread_description&lt;RT&gt; &gt; &td)
-          : thread_description (td) {};
-
-        void join () const { thread_description-&gt;join (); };
-
-        RT return_value () {
-          join ();
-          return thread_description-&gt;ret_val.get();
-        };
-
-        bool operator == (const thread &t) {
-          return thread_description == t.thread_description;
-        };
-
-      private:
-        boost::shared_ptr&lt;thread_description&lt;RT&gt; &gt; thread_description;
-    };
-</pre></code>
-
-<p>
-Copy constructor and <code>operator=</code> are generated automatically by the
-compiler. Note that asking for the <code>return_value</code> automatically waits
-for the thread to finish, and that for this it is helpful that we can
-call <code>join()</code> more than once on the thread description object. The
-<code>return_value()</code> function also makes use of the fact that if <code>RT=void</code>,
-then the return construct is still valid. Furthermore, since this is
-the most common case, the template argument of the thread class has a
-default of <code>void</code>.
-</p>
-
-<p>
-The <code>ThreadGroup</code> class is a container distributing calls to its
-member functions to all its elements. Elements are added using
-<code>operator+=</code>, and they are stored using a
-<code>std::vector</code>. (A <code>std::set</code> would be more appropriate,
-but then we would have to have <code>operator&lt;</code> for
-<code>Thread&lt;RT&gt;</code> objects.) It has the same default value for the
-template argument:
-</p>
-
-<code><pre>
-    template &lt;typename RT = void&gt;
-    class ThreadGroup
-    {
-      public:
-        ThreadGroup & operator += (const Thread&lt;RT&gt; &t) {
-          threads.push_back (t);
-         return *this;
-        };
-
-        void join_all () const {
-          for (typename std::vector&lt;Thread&lt;RT&gt; &gt;::const_iterator
-                 t=threads.begin(); t!=threads.end(); ++t)
-            t-&gt;join ();
-        };
-
-      private:
-        std::vector&lt;Thread&lt;RT&gt; &gt; threads;
-    };
-</pre></code>
-
-<p>
-Since objects of type <code>Thread&lt;RT&gt;</code> are freely copyable, there
-is no need
-to provide an index operator for <code>ThreadGroup</code>; if you need to index
-its elements (for example to get at the return value), use
-<code>std::vector&lt;Thread&lt;RT&gt; &gt;</code>.
-</p>
-
-<p>
-Finally, there are overloads of the <code>spawn</code> template, for unbound
-functions, as well as <code>const</code> and non-<code>const</code> member
-functions. We only show them for unary member functions:
-<code><pre>
-    template &lt;typename RT, typename C, typename Arg1&gt;
-    mem_fun_encapsulator&lt;RT,C,boost::tuple&lt;Arg1&gt; &gt;
-    spawn (C &c, RT (C::*fun_ptr)(Arg1)) {
-      return mem_fun_encapsulator&lt;RT, C, boost::tuple&lt;Arg1&gt; &gt; (c,fun_ptr);
-    }
-
-    template &lt;typename RT, typename C, typename Arg1&gt;
-    mem_fun_encapsulator&lt;RT,const C,boost::tuple&lt;Arg1&gt; &gt;
-    spawn (const C &c, RT (C::*fun_ptr)(Arg1) const) {
-      return mem_fun_encapsulator&lt;RT, const C, boost::tuple&lt;Arg1&gt; &gt; (c,fun_ptr);
-    }
-</pre></code>
-</p>
-
-<p>
-Note that we need two overloaded versions, for <code>const</code> and
-non-<code>const</code>
-member functions. Both create an intermediate object (in the
-<code>internal</code>
-namespace) that will accept arguments in place of the function being
-called on the new thread, make sure a new thread is created, copy the
-arguments to the new thread's stack, and only then return. The exact
-mechanism is described in the next section.
-</p>
-
-<p>
-In the implementation, we have to repeat the functions above for
-binary, ternary, ... member functions, and also for unbound member
-functions. One would really like to have something also for objects other than
-pointers to (member-)functions that provide an
-<code>operator()</code>. However, this doesn't seem to be possible if
-<code>operator()</code> returns something other than <code>void</code> or takes
-arguments. This
-would need some kind of typeof-operator which is not standard C++. See the
-discussion in the Open Problems section.
-</p>
-
-
-<h3>4. Entities that are used to create a thread</h3>
-
-
-<p>
-In this section, we describe the gory details of copying arguments
-from the stack of the old thread to the stack of the new one. These
-details are not necessary to <em>use</em> the <code>spawn()</code> functions,
-so are probably boring and may be skipped.
-</p>
-
-<p>
-The basic idea is the following: <code>spawn()</code> returns an object and provides
-it with the address of the function to be called, and in the case of a
-member function with the address of an object. <code>mem_fun_encapsulator</code>
-looks like this:
-</p>
-
-<code><pre>
-    template &lt;typename RT, typename C, typename ArgList,
-              int length = boost::tuples::length&lt;ArgList&gt;::value&gt;
-    class mem_fun_encapsulator;
-
-    template &lt;typename RT, typename C, typename ArgList&gt;
-    class mem_fun_encapsulator&lt;RT,C,ArgList,1&gt; {
-        typedef typename mem_fun_ptr&lt;RT,C,ArgList&gt;::type MemFunPtr;
-
-      public:
-        mem_fun_encapsulator (C &c, MemFunPtr mem_fun_ptr)
-            : c (c), mem_fun_ptr(mem_fun_ptr) {};
-
-        Thread&lt;RT&gt;
-        operator() (typename boost::tuples::element&lt;0,ArgList&gt;::type arg1) {
-            return mem_fun_wrapper&lt;RT,C,ArgList&gt; (mem_fun_ptr, c,
-                                                  boost::tie(arg1)).fire_up ();
-        };
-
-      private:
-        C         &c;
-        MemFunPtr  mem_fun_ptr;
-    };
-</pre></code>
-
-<p>
-(Note how the default value specification of the last template
-argument automatically redirects uses with three template parameters
-to the correct four-parameter specialization, even though the general
-template is never used.)
-</p>
-
-<p>
-The constructor stores the two addresses. If one calls
-<code><pre>
-    spawn(obj, &C::f) (42);
-</pre></code>
-the next thing that is invoked is the <code>operator()</code> of this class. It
-takes the argument(s), creates a temporary with the two addresses and
-a reference to the argument (that's what <code>boost::tie</code>) does, and calls
-<code>fire_up()</code> on this temporary. <code>fire_up</code> has all the information, and does
-the work. Note that we will not pass references to the individual
-arguments, but bind them all together with <code>boost::tie</code>, so that we need
-not have different versions of the <code>mem_fun_wrapper</code> class for different
-numbers of arguments. (However, we need a separate partial
-specialization of the <code>mem_fun_encapsulator</code> class for each number of
-function arguments.) The <code>tie_args</code> template is used to make a version
-of the <code>ArgList</code> type with all reference types; it is described below.
-</p>
-
-<p>
-The next question, of course, is how <code>mem_fun_wrapper</code> looks like. Let
-us first consider the base class that it has in common with
-<code>fun_wrapper</code>, the wrapping class for non-member function objects:
-<code><pre>
-    template &lt;typename RT, typename EntryPointClass&gt;
-    struct wrapper_base {
-        Thread&lt;RT&gt; fire_up () {
-          thread_descriptor
-            = DescriptionPointer(new typename thread_description&lt;RT&gt;());
-
-          boost::mutex::scoped_lock lock (mutex);
-          thread_descriptor-&gt;create (&EntryPointClass::entry_point,
-                                        (void *)this);
-          condition.wait (lock);
-
-          return thread_descriptor;
-        }
-
-      protected:
-        typedef boost::shared_ptr&lt;thread_description&lt;RT&gt; &gt;
-        DescriptionPointer;
-
-        DescriptionPointer thread_descriptor;
-
-        mutable boost::mutex     mutex;
-        mutable boost::condition condition;
-    };
-</pre></code>
-<p>
-<code>fire_up</code> is the only real function; it creates a thread descriptor
-object, and calls it with a pointer to the present object, and the address of
-the starting point is <code>EntryPointClass::entry_point</code>, where
-<code>EntryPoint</code> is the name of a class that implements this thread
-starting function and is passed as a template argument to
-<code>wrapper_base</code>.
-Before it starts the new thread, it acquires a mutex and
-afterwards wait until a condition is signalled before it finishes by
-using the thread descriptor object to generate a <code>Thread&lt;RT&gt;</code>
-object.
-</p>
-
-<p>
-The magic happens in the derived class:
-<code><pre>
-    template &lt;typename RT, class C, typename ArgList&gt;
-    struct mem_fun_wrapper
-       : public wrapper_base&lt;RT, mem_fun_wrapper&lt;RT,C,ArgList&gt; &gt;
-    {
-        typedef typename mem_fun_ptr&lt;RT,C,ArgList&gt;::type MemFunPtr;
-        typedef typename tie_args&lt;ArgList&gt;::type ArgReferences;
-        mem_fun_wrapper (MemFunPtr            mem_fun_ptr,
-                         C                   &c,
-                         const ArgReferences &args)
-                        : c (c),
-                          mem_fun_ptr (mem_fun_ptr),
-                          args (args)  {};
-      private:
-        mem_fun_wrapper ();
-        mem_fun_wrapper (const mem_fun_wrapper &);
-
-        C            &c;
-        MemFunPtr     mem_fun_ptr;
-        ArgReferences args;
-
-        static void * entry_point (void *arg)
-          {
-            const wrapper_base&lt;RT&gt; *w
-              = reinterpret_cast&lt;const wrapper_base&lt;RT&gt;*&gt; (arg);
-            const mem_fun_wrapper *wrapper
-              = static_cast&lt;const mem_fun_wrapper*&gt; (w);
-            MemFunPtr mem_fun_ptr = wrapper-&gt;mem_fun_ptr;
-            C        &c           = wrapper-&gt;c;
-            ArgList   args        = wrapper-&gt;args;
-
-            boost::shared_ptr&lt;thread_description&lt;RT&gt; &gt;
-              thread_descriptor  = wrapper-&gt;thread_descriptor;
-
-            {
-              boost::mutex::scoped_lock lock (wrapper-&gt;mutex);
-              wrapper-&gt;condition.notify_one ();
-            }
-
-            call (mem_fun_ptr, c, args, thread_descriptor-&gt;ret_val);
-
-            return 0;
-          };
-    };
-</pre></code>
-</p>
-
-<p>
-Note in particular, how this class passes itself as second template parameter
-to the base class, enabling the latter to call the
-<code>mem_fun_wrapper::entry_point</code> function as entry point to the new
-thread. When the fire_up function in the base
-class is called, it creates a new thread that starts inside this
-function, and the argument given to it is the address of the
-<code>wrapper_base</code> object. The first thing the <code>entry_point</code> function does, is
-to cast back this address to the real object's type (it knows the real
-type of the object, since the address of this function has been handed
-down through the template magic), then copies the address of
-the object to work with and the address of the member function to be
-called from the stack of the old thread to the stack of this new
-thread. It then also copies the arguments, which so far have been held
-only as references, but copies them by value. Next, it gets the
-address of the return thread descriptor, and with it the address of
-the return value (the <code>shared_ptr</code> will also make sure that the object
-lives long enough). The part in braces signals the condition to the
-old thread, which hangs in the <code>fire_up</code> function: the arguments have
-been copied, and the old thread can go on, eventually also destroying
-objects that have been copied by value. Finally, it calls the
-requested function with the proper arguments through a generic
-interface (described in the section on tools) and sets the return
-value of the thread.
-</p>
-
-
-<h3>5. Tool classes</h3>
-
-
-<p>
-In the implementation above, some tool classes have been used. These
-are briefly described here.
-</p>
-
-<h4>a) The <code>return_value&lt;T&gt;</code> class template</h4>
-
-<p>
-This class stores a value of type <code>T</code> if <code>T</code> is not a
-reference or <code>void</code>. It offers <code>get()</code> and
-<code>set()</code> functions that get and set the value. If <code>T</code> is a
-reference type, then <code>set()</code> is obviously not possible since
-references cannot be rebound after construction time. The class therefore
-stores a pointer, and <code>set()</code> sets the pointer to the object the
-reference references. <code>get()</code> then returns the reference again. If
-<code>T</code> is <code>void</code>, then the class is empty and there is only
-a <code>get()<code> function that returns <code>void</code>.
-</p>
-
-<code><pre>
-    template &lt;typename RT&gt; struct return_value
-    {
-      private:
-        RT value;
-      public:
-        RT get () const { return value; }
-        void set (RT v) { value = v; }
-    };
-
-    template &lt;typename RT&gt; struct return_value&lt;RT &&gt;
-    {
-      private:
-        RT * value;
-      public:
-        RT & get () const { return *value; }
-        void set (RT & v) { value = &v; }
-    };
-
-    template &lt;&gt; struct return_value&lt;void&gt; {
-        static void get () {};
-    };
-</pre></code>
-
-
-<h4>b) The <code>call</code> function templates</h4>
-
-<p>
-The <code>call</code> function templates take a function pointer, an argument list
-tuple, and the address of the return value object, and call the
-function with these arguments. Since we have to unpack the argument
-list, we have to dispatch to different functions, depending on the
-number of arguments, in the usual way:
-</p>
-
-<code><pre>
-    template &lt;int&gt; struct int2type;
-
-    template &lt;typename RT, typename PFun, typename ArgList&gt;
-    static void call (PFun     fun_ptr,
-                      ArgList &arg_list,
-                      return_value&lt;RT&gt; &ret_val)
-    {
-      Caller&lt;RT&gt;::do_call (fun_ptr, arg_list, ret_val,
-                           int2type&lt;boost::tuples::length&lt;ArgList&gt;::value&gt;());
-    };
-</pre></code>
-
-<p>
-The <code>Caller</code> class has the following member functions:
-
-<code><pre>
-    template &lt;typename RT&gt; struct Caller
-    {
-        template &lt;typename PFun, typename ArgList&gt;
-        static void do_call (PFun     fun_ptr,
-                             ArgList &arg_list,
-                             return_value&lt;RT&gt; &ret_val,
-                             const int2type&lt;1&gt; &)
-        {  ret_val.set ((*fun_ptr) (arg_list.template get&lt;0&gt;()));  };
-
-        // likewise for int2type&lt;0&gt;, int2type&lt;2&gt;, ...
-    };
-</pre></code>
-</p>
-
-
-<p>
-There is a specialization <code>Caller&lt;void&gt;</code> that does not set a return
-value, and for each call and <code>do_call</code> function there is a second
-function for member function pointers that takes an object as
-additional argument.
-</p>
-
-
-<h4>c) <code>mem_fun_ptr</code></h4>
-
-<p>
-In order to form a pointer to member function for both cases of <code>const</code>
-and non-<code>const</code> member functions, we need a simple tool:
-<code><pre>
-    template &lt;typename RT, class C, typename ArgList,
-              int length = boost::tuples::length&lt;ArgList&gt;::value&gt;
-    struct mem_fun_ptr_helper;
-
-    template &lt;typename RT, class C, typename ArgList&gt;
-    struct mem_fun_ptr_helper&lt;RT, C, ArgList, 1&gt;
-    {
-        typedef RT (C::*type) (typename boost::tuples::element&lt;0,ArgList&gt;::type);
-    };
-
-    template &lt;typename RT, class C, typename ArgList&gt;
-    struct mem_fun_ptr_helper&lt;RT, const C, ArgList, 1&gt;
-    {
-        typedef RT (C::*type) (typename boost::tuples::element&lt;0,ArgList&gt;::type) const;
-    };
-
-    template &lt;typename RT, class C, typename ArgList&gt;
-    struct mem_fun_ptr
-    {
-        typedef typename mem_fun_ptr_helper&lt;RT,C,ArgList&gt;::type type;
-    };
-</pre></code>
-</p>
-
-<p>
-Note that if the second template argument is a <code>const C</code>, then we mark
-the member function <code>const</code>. The two templates for <code>mem_fun_ptr_helper</code>
-have to be repeated for every number of arguments that we have in
-mind. Note also that the specification of the default argument in the
-declaration of the general template of <code>mem_fun_ptr_helper</code> saves us
-from recomputing it in <code>mem_fun_ptr</code>.
-</p>
-
-
-
-<h4>d) <code>add_reference</code> for tuples</h4>
-
-<p>
-The following classes add references to the elements of a tuple, thus
-providing the type equivalent of the return value of the <code>boost::tie</code>
-functions. There are probably ways inside boost's tuples library to do
-this, but I couldn't locate this.
-<code><pre>
-    template &lt;int N, typename Tuple&gt;
-    struct add_reference_to_Nth
-    {
-        typedef typename boost::tuples::element&lt;N,Tuple&gt;::type ArgType;
-        typedef typename boost::add_reference&lt;ArgType&gt;::type type;
-    };
-
-    template &lt;typename Tuple, int = boost::tuples::length&lt;Tuple&gt;::value&gt;
-    struct tie_args_helper;
-
-    template &lt;typename Tuple&gt;
-    struct tie_args_helper&lt;Tuple,1&gt;
-    {
-        typedef
-        boost::tuple&lt;typename add_reference_to_Nth&lt;0,Tuple&gt;::type&gt;
-        type;
-    };
-
-    template &lt;typename Tuple&gt;
-    struct tie_args
-    {
-        typedef typename tie_args_helper&lt;Tuple&gt;::type type;
-    };
-</pre></code>
-</p>
-<p>
-The <code>tie_args_helper</code> class is repeated for every number of elements we
-want to use.
-</p>
-
-
-
-<h3>6. Open Problems</h3>
-
-
-<h4>a) A variable lifetime problem</h4>
-<p>
-The only unsolved semantic problem I am aware of at present is the
-following: if we have a function
-<code><pre>
-    void f(const int &amp;i);
-</pre></code>
-then this function can be called as
-<code><pre>
-    f(1);
-</pre></code>
-i.e. the compiler creates a temporary and passes its address to
-<code>f()</code>. When invoking <code>f()</code> on a new thread, however, as in
-<code><pre>
-    spawn (f)(1);
-</pre></code>
-then it is only guaranteed that the call to <code>spawn()</code> does not return
-before the new thread is started and has copied the arguments to
-<code>f()</code>. However, the argument is only the reference to the temporary, not
-its value. <code>f()</code> will thus likely observe corrupted values for its
-argument. On the other hand, copying the value is no option either, of
-course.  Since to the author's best knowledge the language does not
-provide means to avoid taking the address of a temporary, there is
-presently no way to avoid this problem. Suggestions for healing it are
-very welcome.
-</p>
-
-
-<h4>b) Forwarding of <code>operator()</code></h4>
-<p>
-Above, we have not defined an overload of <code>spawn</code> for functor-like
-objects, even though that would be desirable. One way to do so would be
-<code><pre>
-    template &lt;typename C&gt;
-    mem_fun_encapsulator&lt;void,C,boost::tuple&lt;&gt; &gt;
-    spawn (C &c) {
-      return spawn (c, &C::operator());
-    }
-</pre></code>
-This only works if <code>operator()</code> satisfies the signature
-<code><pre>
-    struct C {    void operator() ();  };
-</pre></code>
-</p>
-<p>
-We could add another overload if <code>operator()</code> is
-<code>const</code>. However, what one
-would like is an overload for more general signatures. Unfortunately,
-this requires that we can infer type and number of arguments and
-return type of <code>operator()</code> at the time we declare the return type of
-above overload of <code>spawn()</code>. I have not found a way to infer this
-information just by using the template parameter <code>C</code> -- it just seems
-not possible. What would work if it were supported by compilers is a
-kind of <code>typeof</code>-operator:
-<code><pre>
-    template &lt;typename C&gt;
-    typeof(spawn(c,&C::operator()))          // **
-    spawn (C &c) {
-      return spawn (c, &C::operator());
-    }
-</pre></code>
-</p>
-<p>
-When seeing the declaration, the compiler would automatically check
-which version of the overloaded <code>spawn()</code> function it would call, and
-correspondingly take the return type. gcc does support the <code>typeof</code>
-keyword, but even present CVS snapshots generate an internal compiler
-error on this construct.
-</p>
-
-<h4>c) Using a memory based scheme rather than condition variables</h4>
-<p>
-The scheme using mutices and condition variables to synchronise
-calling and called thread seems expensive. A simpler approach would be
-to replace it by letting the creating thread generate an object on the
-heap that holds copies of the arguments (instead of references as
-presently), spawn the new thread and just go on without any
-synchronisation.
-</p>
-
-<p>
-The calling thread would then not have to copy the arguments onto its
-local stack and signal to the calling thread. It would only have to
-delete the memory after the call to the user-supplied function
-returns. Apart from replacing <code>ArgReferences</code> by
-<code>ArgList</code> in some places,
-the scheme would basically just replace <code>*_encapsulator::operator()</code>,
-<code>fire_up</code>, and <code>thread_entry_point</code>:
-</p>
-
-<code><pre>
-      thread&lt;RT&gt;
-      operator() (typename boost::tuples::element&lt;0,ArgList&gt;::type arg1) {
-        return (new mem_fun_wrapper&lt;RT,C,ArgList&gt; (mem_fun_ptr, c,
-                                                   boost::tie(arg1)))-&gt;fire_up ();
-      };
-
-      thread&lt;RT&gt; fire_up () {
-        thread_descriptor
-          = DescriptionPointer(new typename detail::thread_description&lt;RT&gt;());
-
-        thread_descriptor-&gt;create (entry_point, (void *)this);
-        // no synchronisation here
-        return thread_descriptor;
-      }
-
-      static void * entry_point (void *arg) {
-        wrapper_base&lt;RT&gt; *w       = reinterpret_cast&lt;wrapper_base&lt;RT&gt;*&gt; (arg);
-        fun_wrapper      *wrapper = static_cast&lt;fun_wrapper*&gt; (w);
-        // no copying here; no synchronisation necessary
-        detail::call (wrapper-&gt;fun_ptr, wrapper-&gt;args,
-                      wrapper-&gt;thread_descriptor-&gt;ret_val);
-        // delete memory
-        delete wrapper;
-        return 0;
-      }
-</pre></code>
-
-<p>
-The perceived simplicity without using mutices and condition variable
-might be deceptive, however, since memory allocation and deallocation
-requires locking and unlocking mutices as well, and is generally not a
-cheap operation.
-</p>
-
-<p>
-However, the main problem is that I get spurious segmentation faults
-with this on my Linux box. These always happen inside the memory
-allocation and deallocation functions in the C++ and C language
-support libraries. I believe that these are not bugs in the
-application, but in the language runtime. However, my motivation to
-debug multithreading problems in the libc is very limited; for
-reference, valgrind 1.94 does not show accesses to uninitialized or
-already freed memory portions, even for runs that eventually crash
-later on.
-</p>
-
-
-<h3>7. Alternative Suggestions</h3>
-
-
-<p>
-Here are some additional suggestions for discussion:
-</p>
-
-<h4>a) Conversions between return values</h4>
-
-<p>
-If <code>f()</code> is a function returning an integer, then the following is
-legal:
-<code><pre>
-    double d = f(arg1, arg2);
-</pre></code>
-The question, then, would be: do we want to allow conversions between
-<code>Thread&lt;double&gt;</code> and <code>Thread&lt;int&gt;</code> objects?
-And do we want to allow a
-conversion from <code>Thread&lt;T&gt;</code> to <code>Thread&lt;void&gt;</code>
-(i.e.: casting away the return value)?
-</p>
-
-<p>
-Since one can still assign the return value of the thread to a double,
-<code><pre>
-    double d = thread.return_value();
-</pre></code>
-the only real merit in allowing conversions is in putting threads with
-different return value types into a <code>ThreadGroup</code>:
-<code><pre>
-    double f1 ();
-    int    f2 ();
-
-    ThreadTroup&lt;double&gt; tg;
-    tg += spawn(f1)();
-    tg += spawn(f2)();    // convert Thread&lt;int&gt; to Thread&lt;double&gt;
-    tg.join_all ();
-</pre></code>
-</p>
-<p>
-Being able to do this is probably only syntactic sugar, except for the
-case where we are not interested in the return values of all threads,
-i.e. the conversion <code>Thread&lt;T&gt; -&gt; Thread&lt;void&gt;</code> seems
-like the only one that is really worth it.
-</p>
-
-<p>
-I have made some initial experiments with implementing general
-conversions. The main problem is that we need to allow conversion
-chains:
-<code><pre>
-    thread&lt;double&gt; t1 = spawn (f)(arg1, arg2);
-    thread&lt;int&gt;    t2 = t1;
-    thread&lt;double&gt; t3 = t2;
-</pre></code>
-</p>
-<p>
-If <code>f()</code> returns 1.5, then <code>t3.return_value()</code> needs to
-return 1.0. I believe that such conversions could be implemented, by adding the
-types in the chain into a <code>boost::tuple</code> of growing length, and writing
-a function that converts a value of the first type of this tuple to
-the second, to the third, ..., to the last type in the tuple. However,
-a plethora of internal compiler errors has scared me off doing more
-experiments in this direction.
-</p>
-
-
-<h4>b) Conversions between class types I</h4>
-
-<p>
-When you have a class hierarchy like
-<code><pre>
-    struct B { void f(); };
-    struct D : public B {};
-</pre></code>
-then calling
-<code><pre>
-    spawn (D(), &B::f);
-</pre></code>
-fails for gcc (but succeeds with Intel's icc). Presumably, gcc is
-right: template arguments must match exactly, and <code>D()</code> is of type
-<code>D</code>, while <code>&B::f</code> leads to a class type of
-<code>B</code>. There is no function template for spawn for which this call can
-match without a derived-to-base conversion. We could now change the template
-<code><pre>
-    template &lt;typename RT, typename C, typename Arg1&gt;
-    mem_fun_encapsulator&lt;RT,C,boost::tuple&lt;Arg1&gt; &gt;
-    spawn (C &c, RT (C::*fun_ptr)(Arg1)) {
-      return mem_fun_encapsulator&lt;RT, C, boost::tuple&lt;Arg1&gt; &gt; (c,fun_ptr);
-    }
-</pre></code>
-into
-<code><pre>
-    template &lt;typename RT, typename A, typename C, typename Arg1&gt;
-    mem_fun_encapsulator&lt;RT,C,boost::tuple&lt;Arg1&gt; &gt;
-    spawn (A &a, RT (C::*fun_ptr)(Arg1)) {
-      return mem_fun_encapsulator&lt;RT, C, boost::tuple&lt;Arg1&gt; &gt; (a,fun_ptr);
-    }
-</pre></code>
-i.e. introduce another class template <code>A</code> for the type of the
-object. Since the arguments of the constructor to the
-<code>mem_fun_encapsulator</code> object are known, the compiler would perform a
-derived-to-base conversion for object <code>a</code> if necessary. I don't know
-whether this is desirable, in particular since also other conversions
-could happen here that one would not want (in the extreme case
-generating a temporary)..
-</p>
-
-
-<h4>c) Conversions between class types II</h4>
-
-<p>
-When one writes
-<code><pre>
-    spawn (this, &X::f)
-</pre></code>
-one gets an error that "'this' is not convertible to type X&". One has
-to write <code>*this<code> instead. It would be simple to have another set of
-overloads of <code>spawn()</code> that accepts a pointer instead of a reference,
-and simply forwards to the existing function. This is just for the
-lazy people, probably, but it is a common case.
-</p>
-
-
-<h4>d) Catching exceptions</h4>
-
-<p>
-When a function on a new thread throws an exception, it only
-propagates up to one of the two <code>entry_point()</code> functions, then vanishes
-into the run-time system and kills the program. Ideally, we would have
-a way to pass it over to the main thread. This, however, would need
-some support from the language. Basically, we would need two
-operations:
-<ul>
-<li>clone an exception without knowing its type; we could then in the
-  <code>entry_point</code> function catch it and stack it somewhere, just like we
-  do for the return value</li>
-<li>back on the main thread, the <code>Thread::join()</code> function must raise this
-  stored exception if there was one, again without knowing its type.</li>
-</ul>
-Given how exceptions are implemented usually, the machinery for these
-operations is probably there, but is not exported to the user through
-the run-time environment. Thus, an implementation of such ideas has to
-wait for changes in the language specification.
-</p>
-
-
-<HR>
-
-<div ALIGN="RIGHT">
-Wolfgang Bangerth, 2003
-</div>
-<p>&nbsp;</P></BODY>
-</HTML>
-
-
-
-</BODY>
-</HTML>
-
diff --git a/deal.II/examples/README.example b/deal.II/examples/README.example
new file mode 100644 (file)
index 0000000..1f4f838
--- /dev/null
@@ -0,0 +1,4 @@
+This folder contains example programs for deal.II
+
+They are distributed under the same license as the deal.II library itself,
+namely LGPL-2.1+.
index 31807c2625d6cb3e579587d4bc04be3be35202ae..c3a7cf9fb00c42f7794fab655b68f310ceac39b1 100755 (executable)
@@ -1,4 +1,24 @@
 #!/bin/sh
+## ---------------------------------------------------------------------
+## $Id$
+##
+## Copyright (C) 2006 - 2013 by the deal.II authors
+##
+## This file is part of the deal.II library.
+##
+## The deal.II library is free software; you can use it, redistribute
+## it, and/or modify it under the terms of the GNU Lesser General
+## Public License as published by the Free Software Foundation; either
+## version 2.1 of the License, or (at your option) any later version.
+## The full text of the license can be found in the file LICENSE at
+## the top level of the deal.II distribution.
+##
+## ---------------------------------------------------------------------
+
+#
+# Author: Ivan Christov, Wolfgang Bangerth, Texas A&M University, 2006
+#
+
 dim=1
 tstep=0
 tstepinc=20
@@ -35,4 +55,4 @@ done
 gnuplot -persist $batchfile
 
 # use ImageMagick to create an animated gif from the PNG files
-convert -delay 0 -loop 0 "solution-"$dim"d-*.png" "solution-"$dim"d.gif"
\ No newline at end of file
+convert -delay 0 -loop 0 "solution-"$dim"d-*.png" "solution-"$dim"d.gif"
index 29a165bd5947ea3df6fae00e3dd8d39e7485e16f..f4b600317fb08f165461c3fe0bfc8d9bd4323915 100644 (file)
@@ -1820,8 +1820,8 @@ namespace Step42
                   break;
               }
 
-            old_solution = solution;
             solution = tmp_vector;
+            old_solution = solution;
           }
 
         old_active_set = active_set;
index 64f39e54aebf7f26ca0e9775a514dc25dcc77407..5de886009b8d2f080123aa8cc318c87bd7f37953 100644 (file)
@@ -20,6 +20,7 @@
 
 
 #include <deal.II/base/config.h>
+#include <deal.II/base/thread_management.h>
 #include <deal.II/base/std_cxx1x/function.h>
 #include <deal.II/dofs/dof_handler.h>
 #include <boost/unordered_map.hpp>
 
 DEAL_II_NAMESPACE_OPEN
 
-/// This namespace contains the functions necessary to color a graph.
-namespace graph_coloring {
-
-  /**
-   * Create the partitioning using a simplified version of the Cuthill-McKee
-   * algorithm (Breadth First Search algorithm).
-   */
-  template <typename Iterator>
-  std::vector<std::vector<Iterator> > create_partitioning(Iterator const &begin,
-      typename identity<Iterator>::type const &end,
-      std_cxx1x::function<std::vector<types::global_dof_index> (Iterator const &)> 
-      const &get_conflict_indices)
+/**
+ * A namespace containing functions that can color graphs.
+ */
+namespace GraphColoring
+{
+  namespace internal
   {
-    std::vector<std::vector<Iterator> > partitioning(1,std::vector<Iterator> (1,begin));
-    // Number of iterators.
-    unsigned int n_iterators(0);
-    // Create a map from conflict indices to iterators
-    boost::unordered_map<types::global_dof_index,std::vector<Iterator> > indices_to_iterators;
-    for (Iterator it=begin; it!=end; ++it)
+    /**
+     * Create a partitioning of the given range of iterators using a simplified
+     * version of the Cuthill-McKee algorithm (Breadth First Search algorithm).
+     * The function creates partitions that contain "zones" of iterators
+     * where the first partition contains the first iterator, the second
+     * zone contains all those iterators that have conflicts with the single
+     * element in the first zone, the third zone contains those iterators that
+     * have conflicts with the iterators of the second zone and have not previously
+     * been assigned to a zone, etc. If the iterators represent cells, then this
+     * generates partitions that are like onion shells around the very first
+     * cell. Note that elements in each zone may conflict with other elements in
+     * the same zone.
+     *
+     * The question whether two iterators conflict is determined by a user-provided
+     * function. The meaning of this function is discussed in the documentation of
+     * the GraphColoring::make_graph_coloring() function.
+     *
+     * @param[in] begin The first element of a range of iterators for which a
+     *      partitioning is sought.
+     * @param[in] end The element past the end of the range of iterators.
+     * @param[in] get_conflict_indices A user defined function object returning
+     *      a set of indicators that are descriptive of what represents a
+     *      conflict. See above for a more thorough discussion.
+     * @return A set of sets of iterators (where sets are represented by
+     *      std::vector for efficiency). Each element of the outermost set
+     *      corresponds to the iterators pointing to objects that are in the
+     *      same partition (i.e., the same zone).
+     *
+     * @author Martin Kronbichler, Bruno Turcksin
+     */
+    template <typename Iterator>
+    std::vector<std::vector<Iterator> >
+    create_partitioning(const Iterator &begin,
+                        const typename identity<Iterator>::type &end,
+                        const std_cxx1x::function<std::vector<types::global_dof_index> (const Iterator &)> &get_conflict_indices)
     {
-      std::vector<types::global_dof_index> conflict_indices = get_conflict_indices(it);
-      const unsigned int n_conflict_indices(conflict_indices.size());
-      for (unsigned int i=0; i<n_conflict_indices; ++i)
-        indices_to_iterators[conflict_indices[i]].push_back(it);
-      ++n_iterators;
-    }
+      // Number of iterators.
+      unsigned int n_iterators = 0;
 
-    // Create the partitioning.
-    std::set<Iterator> used_it;
-    used_it.insert(begin);
-    while (used_it.size()!=n_iterators)
-    {
-      typename std::vector<Iterator>::iterator vector_it(partitioning.back().begin());
-      typename std::vector<Iterator>::iterator vector_end(partitioning.back().end());
-      std::vector<Iterator> new_zone;
-      for (; vector_it!=vector_end; ++vector_it)
-      {
-        std::vector<types::global_dof_index> conflict_indices = get_conflict_indices(*vector_it);
-        const unsigned int n_conflict_indices(conflict_indices.size());
-        for (unsigned int i=0; i<n_conflict_indices; ++i)
+      // Create a map from conflict indices to iterators
+      boost::unordered_map<types::global_dof_index,std::vector<Iterator> > indices_to_iterators;
+      for (Iterator it=begin; it!=end; ++it)
         {
-          std::vector<Iterator> iterator_vector(indices_to_iterators[conflict_indices[i]]);
-          for (unsigned int j=0; j<iterator_vector.size(); ++j)
-          {
-            // Check that the iterator is not associated to a zone yet.
-            if (used_it.count(iterator_vector[j])==0)
+          const std::vector<types::global_dof_index> conflict_indices = get_conflict_indices(it);
+          const unsigned int n_conflict_indices = conflict_indices.size();
+          for (unsigned int i=0; i<n_conflict_indices; ++i)
+            indices_to_iterators[conflict_indices[i]].push_back(it);
+          ++n_iterators;
+        }
+
+      // create the very first zone which contains only the first
+      // iterator. then create the other zones. keep track of all the
+      // iterators that have already been assigned to a zone
+      std::vector<std::vector<Iterator> > zones(1,std::vector<Iterator> (1,begin));
+      std::set<Iterator> used_it;
+      used_it.insert(begin);
+      while (used_it.size()!=n_iterators)
+        {
+          // loop over the elements of the previous zone. for each element of
+          // the previous zone, get the conflict indices and from there get
+          // those iterators that are conflicting with the current element
+          typename std::vector<Iterator>::iterator previous_zone_it(zones.back().begin());
+          typename std::vector<Iterator>::iterator previous_zone_end(zones.back().end());
+          std::vector<Iterator> new_zone;
+          for (; previous_zone_it!=previous_zone_end; ++previous_zone_it)
             {
-              new_zone.push_back(iterator_vector[j]);
-              used_it.insert(iterator_vector[j]);
+              std::vector<types::global_dof_index> conflict_indices = get_conflict_indices(*previous_zone_it);
+              const unsigned int n_conflict_indices(conflict_indices.size());
+              for (unsigned int i=0; i<n_conflict_indices; ++i)
+                {
+                  const std::vector<Iterator> &conflicting_elements
+                    = indices_to_iterators[conflict_indices[i]];
+                  for (unsigned int j=0; j<conflicting_elements.size(); ++j)
+                    {
+                      // check that the iterator conflicting with the current one is not
+                      // associated to a zone yet and if so, assign it to the current
+                      // zone. mark it as used
+                      //
+                      // we can shortcut this test if the conflicting iterator is the
+                      // current iterator
+                      if ((conflicting_elements[j] != *previous_zone_it)
+                          &&
+                          (used_it.count(conflicting_elements[j])==0))
+                        {
+                          new_zone.push_back(conflicting_elements[j]);
+                          used_it.insert(conflicting_elements[j]);
+                        }
+                    }
+                }
             }
-          }
+
+          // If there are iterators in the new zone, then the zone is added to the
+          // partition. Otherwise, the graph is disconnected and we need to find
+          // an iterator on the other part of the graph. start the whole process again
+          // with the first iterator that hasn't been assigned to a zone yet
+          if (new_zone.size()!=0)
+            zones.push_back(new_zone);
+          else
+            for (Iterator it=begin; it!=end; ++it)
+              if (used_it.count(it)==0)
+                {
+                  zones.push_back(std::vector<Iterator> (1,it));
+                  used_it.insert(it);
+                  break;
+                }
         }
-      }
-      // If there are iterators in the new zone, then the zone is added to the
-      // partition. Otherwise, the graph is disconnected and we need to find
-      // an iterator on the other part of the graph.
-      if (new_zone.size()!=0)
-        partitioning.push_back(new_zone);
-      else
-        for (Iterator it=begin; it!=end; ++it)
-          if (used_it.count(it)==0)
-          {
-            partitioning.push_back(std::vector<Iterator> (1,it));
-            break;
-          }
-    }
 
-    return partitioning;
-  }
+      return zones;
+    }
 
 
 
-  /**
-   * This function uses DSATUR (Degree SATURation) to color one zone of the
-   * partition. DSATUR works as follows:
-   *   -# Arrange the vertices by decreasing order of degrees.
-   *   -# Color a vertex of maximal degree with color 1.
-   *   -# Choose a vertex with a maximal saturation degree. If there is equality,
-   *      choose any vertex of maximal degree in the uncolored subgraph.
-   *   -# Color the chosen vertex with the least possible (lowest numbered) color.
-   *   -# If all the vertices are colored, stop. Otherwise, return to 3.
-   */
-  template <typename Iterator>
-  std::vector<std::vector<Iterator> > make_dsatur_coloring(std::vector<Iterator> &partition,
-      std_cxx1x::function<std::vector<types::global_dof_index> (Iterator const &)> 
-      const &get_conflict_indices)
-  {
-    std::vector<std::vector<Iterator> > partition_coloring;
-    // Number of zones composing the partitioning.
-    const unsigned int partition_size(partition.size());
-    std::vector<unsigned int> sorted_vertices(partition_size);
-    std::vector<int> degrees(partition_size);
-    std::vector<std::vector<types::global_dof_index> > conflict_indices(partition_size);
-    std::vector<std::vector<unsigned int> > graph(partition_size);
-
-    // Get the conflict indices associated to each iterator. The conflict_indices have to be sorted so
-    // set_intersection can be used later.
-    for (unsigned int i=0; i<partition_size; ++i)
+    /**
+     * This function uses DSATUR (Degree SATURation) to color the elements of
+     * a set. DSATUR works as follows:
+     *   -# Arrange the vertices by decreasing order of degrees.
+     *   -# Color a vertex of maximal degree with color 1.
+     *   -# Choose a vertex with a maximal saturation degree. If there is equality,
+     *      choose any vertex of maximal degree in the uncolored subgraph.
+     *   -# Color the chosen vertex with the least possible (lowest numbered) color.
+     *   -# If all the vertices are colored, stop. Otherwise, return to 3.
+     *
+     * @param[in] partition The set of iterators that should be colored.
+     * @param[in] get_conflict_indices A user defined function object returning
+     *      a set of indicators that are descriptive of what represents a
+     *      conflict. See above for a more thorough discussion.
+     * @param[out] partition_coloring A set of sets of iterators (where sets are represented by
+     *      std::vector for efficiency). Each element of the outermost set
+     *      corresponds to the iterators pointing to objects that are in the
+     *      same partition (have the same color) and consequently do not
+     *      conflict. The elements of different sets may conflict.
+     */
+    template <typename Iterator>
+    void
+    make_dsatur_coloring(std::vector<Iterator> &partition,
+                         const std_cxx1x::function<std::vector<types::global_dof_index> (const Iterator &)> &get_conflict_indices,
+                         std::vector<std::vector<Iterator> > &partition_coloring)
     {
-      conflict_indices[i] = get_conflict_indices(partition[i]);
-      std::sort(conflict_indices[i].begin(),conflict_indices[i].end());
-    }
-
-    // Compute the degree of each vertex of the graph using the
-    // intersection of the conflict indices.
-    std::vector<types::global_dof_index> conflict_indices_intersection;
-    std::vector<types::global_dof_index>::iterator intersection_it;
-    for (unsigned int i=0; i<partition_size; ++i)
-      for (unsigned int j=i+1; j<partition_size; ++j)
-      {
-        conflict_indices_intersection.resize(std::max(conflict_indices[i].size(),
-              conflict_indices[j].size()));
-        intersection_it = std::set_intersection(conflict_indices[i].begin(),
-            conflict_indices[i].end(),conflict_indices[j].begin(),
-            conflict_indices[j].end(),conflict_indices_intersection.begin());
-        // If the two iterators share indices then we increase the degree of the
-        // vertices and create an ''edge'' in the graph.
-        if (intersection_it!=conflict_indices_intersection.begin())
+      partition_coloring.clear ();
+
+      // Number of zones composing the partitioning.
+      const unsigned int partition_size(partition.size());
+      std::vector<unsigned int> sorted_vertices(partition_size);
+      std::vector<int> degrees(partition_size);
+      std::vector<std::vector<types::global_dof_index> > conflict_indices(partition_size);
+      std::vector<std::vector<unsigned int> > graph(partition_size);
+
+      // Get the conflict indices associated to each iterator. The conflict_indices have to be sorted so
+      // set_intersection can be used later.
+      for (unsigned int i=0; i<partition_size; ++i)
         {
-          ++degrees[i];
-          ++degrees[j];
-          graph[i].push_back(j);
-          graph[j].push_back(i);
+          conflict_indices[i] = get_conflict_indices(partition[i]);
+          std::sort(conflict_indices[i].begin(),conflict_indices[i].end());
         }
-      }
-
-    // Sort the vertices by decreasing degree.
-    std::vector<int>::iterator degrees_it;
-    for (unsigned int i=0; i<partition_size; ++i)
-    {
-      // Find the largest element.
-      degrees_it = std::max_element(degrees.begin(),degrees.end());
-      sorted_vertices[i] = degrees_it-degrees.begin();
-      // Put the largest element to -1 so it cannot be chosen again.
-      *degrees_it = -1;
-    }
 
-    // Color the graph.
-    std::vector<boost::unordered_set<unsigned int> > colors_used;
-    for (unsigned int i=0; i<partition_size; ++i)
-    {
-      const unsigned int current_vertex(sorted_vertices[i]);
-      bool new_color(true);
-      // Try to use an existing color, i.e., try to find a color which is not
-      // associated to one of the vertices linked to current_vertex.
-      // Loop over the color.
-      for (unsigned int j=0; j<partition_coloring.size(); ++j)
-      {
-        // Loop on the vertices linked to current_vertex. If one vertex linked
-        // to current_vertex is already using the color j, this color cannot
-        // be used anymore.
-        bool unused_color(true);
-        for (unsigned int k=0; k<graph[current_vertex].size(); ++k)
-          if (colors_used[j].count(graph[current_vertex][k])==1) 
+      // Compute the degree of each vertex of the graph using the
+      // intersection of the conflict indices.
+      std::vector<types::global_dof_index> conflict_indices_intersection;
+      std::vector<types::global_dof_index>::iterator intersection_it;
+      for (unsigned int i=0; i<partition_size; ++i)
+        for (unsigned int j=i+1; j<partition_size; ++j)
           {
-            unused_color = false;
-            break;
+            conflict_indices_intersection.resize(std::max(conflict_indices[i].size(),
+                                                          conflict_indices[j].size()));
+            intersection_it = std::set_intersection(conflict_indices[i].begin(),
+                                                    conflict_indices[i].end(),
+                                                    conflict_indices[j].begin(),
+                                                    conflict_indices[j].end(),
+                                                    conflict_indices_intersection.begin());
+            // If the two iterators share indices then we increase the degree of the
+            // vertices and create an ''edge'' in the graph.
+            if (intersection_it!=conflict_indices_intersection.begin())
+              {
+                ++degrees[i];
+                ++degrees[j];
+                graph[i].push_back(j);
+                graph[j].push_back(i);
+              }
           }
-        if (unused_color)
+
+      // Sort the vertices by decreasing degree.
+      std::vector<int>::iterator degrees_it;
+      for (unsigned int i=0; i<partition_size; ++i)
         {
-          partition_coloring[j].push_back(partition[current_vertex]);
-          colors_used[j].insert(current_vertex);
-          new_color = false;
-          break;
+          // Find the largest element.
+          degrees_it = std::max_element(degrees.begin(),degrees.end());
+          sorted_vertices[i] = degrees_it-degrees.begin();
+          // Put the largest element to -1 so it cannot be chosen again.
+          *degrees_it = -1;
         }
-      }
-      // Add a new color.
-      if (new_color)
-      {
-        partition_coloring.push_back(std::vector<Iterator> (1,
-              partition[current_vertex]));
-        boost::unordered_set<unsigned int> tmp;
-        tmp.insert(current_vertex);
-        colors_used.push_back(tmp);
-      }
-    }
 
-    return partition_coloring;
-  }
+      // Color the graph.
+      std::vector<boost::unordered_set<unsigned int> > colors_used;
+      for (unsigned int i=0; i<partition_size; ++i)
+        {
+          const unsigned int current_vertex(sorted_vertices[i]);
+          bool new_color(true);
+          // Try to use an existing color, i.e., try to find a color which is not
+          // associated to one of the vertices linked to current_vertex.
+          // Loop over the color.
+          for (unsigned int j=0; j<partition_coloring.size(); ++j)
+            {
+              // Loop on the vertices linked to current_vertex. If one vertex linked
+              // to current_vertex is already using the color j, this color cannot
+              // be used anymore.
+              bool unused_color(true);
+              for (unsigned int k=0; k<graph[current_vertex].size(); ++k)
+                if (colors_used[j].count(graph[current_vertex][k])==1)
+                  {
+                    unused_color = false;
+                    break;
+                  }
+              if (unused_color)
+                {
+                  partition_coloring[j].push_back(partition[current_vertex]);
+                  colors_used[j].insert(current_vertex);
+                  new_color = false;
+                  break;
+                }
+            }
+          // Add a new color.
+          if (new_color)
+            {
+              partition_coloring.push_back(std::vector<Iterator> (1,
+                                                                  partition[current_vertex]));
+              boost::unordered_set<unsigned int> tmp;
+              tmp.insert(current_vertex);
+              colors_used.push_back(tmp);
+            }
+        }
+    }
 
 
 
-  /**
-   * Given a partition-coloring graph, gather the colors together. All the
-   * colors on even (resp. odd) partition can be executed simultaneously. This
-   * function tries to create colors of similar number of elements.
-   */
-  template <typename Iterator>
-  std::vector<std::vector<Iterator> >
-  gather_colors(std::vector<std::vector<std::vector<Iterator> > > const &partition_coloring)
-  {
-    std::vector<std::vector<Iterator> > coloring;
-
-    // Count the number of iterators in each color.
-    const unsigned int partition_size(partition_coloring.size());
-    std::vector<std::vector<unsigned int> > colors_counter(partition_size);
-    for (unsigned int i=0; i<partition_size; ++i)
+    /**
+     * Given a partition-coloring graph, i.e., a set of zones (partitions) each
+     * of which is colored, produce a combined coloring for the entire set of
+     * iterators. This is possible because any color on an
+     * even (resp. odd) zone does not conflict with any color of any other even
+     * (resp. odd) zone. Consequently, we can combine colors from all even and all
+     * odd zones. This function tries to create colors of similar number of elements.
+     */
+    template <typename Iterator>
+    std::vector<std::vector<Iterator> >
+    gather_colors(const std::vector<std::vector<std::vector<Iterator> > > &partition_coloring)
     {
-      const unsigned int n_colors(partition_coloring[i].size());
-      colors_counter[i].resize(n_colors);
-      for (unsigned int j=0; j<n_colors; ++j)
-        colors_counter[i][j] = partition_coloring[i][j].size();
-    }
+      std::vector<std::vector<Iterator> > coloring;
 
-    // Find the partition with the largest number of colors for the even partition.
-    unsigned int i_color(0);
-    unsigned int max_even_n_colors(0);
-    const unsigned int colors_size(colors_counter.size());
-    for (unsigned int i=0; i<colors_size; i+=2)
-    {
-      if (max_even_n_colors<colors_counter[i].size())
-      {
-        max_even_n_colors = colors_counter[i].size();
-        i_color = i;
-      }
-    }
-    coloring.resize(max_even_n_colors);
-    for (unsigned int j=0; j<colors_counter[i_color].size(); ++j)
-      coloring[j] = partition_coloring[i_color][j];
+      // Count the number of iterators in each color.
+      const unsigned int partition_size(partition_coloring.size());
+      std::vector<std::vector<unsigned int> > colors_counter(partition_size);
+      for (unsigned int i=0; i<partition_size; ++i)
+        {
+          const unsigned int n_colors(partition_coloring[i].size());
+          colors_counter[i].resize(n_colors);
+          for (unsigned int j=0; j<n_colors; ++j)
+            colors_counter[i][j] = partition_coloring[i][j].size();
+        }
 
-    for (unsigned int i=0; i<partition_size; i+=2)
-    {
-      if (i!=i_color)
-      {
-        boost::unordered_set<unsigned int> used_k;
-        for (unsigned int j=0; j<colors_counter[i].size(); ++j)
+      // Find the partition with the largest number of colors for the even partition.
+      unsigned int i_color(0);
+      unsigned int max_even_n_colors(0);
+      const unsigned int colors_size(colors_counter.size());
+      for (unsigned int i=0; i<colors_size; i+=2)
         {
-          // Find the color in the current partition with the largest number of
-          // iterators.
-          std::vector<unsigned int>::iterator it;
-          it = std::max_element(colors_counter[i].begin(),colors_counter[i].end());
-          unsigned int min_iterators(-1);
-          unsigned int pos(0);
-          // Find the color of coloring with the least number of colors among
-          // the colors that have not been used yet.
-          for (unsigned int k=0; k<max_even_n_colors; ++k)
-            if (used_k.count(k)==0)
-              if (colors_counter[i_color][k]<min_iterators)
-              {
-                min_iterators = colors_counter[i_color][k];
-                pos = k;
-              }
-          colors_counter[i_color][pos] += *it;
-          // Concatenate the current color with the existing coloring.
-          coloring[pos].insert(coloring[pos].end(),
-              partition_coloring[i][it-colors_counter[i].begin()].begin(),
-              partition_coloring[i][it-colors_counter[i].begin()].end());
-          used_k.insert(pos);
-          // Put the number of iterators to the current color to zero.
-          *it = 0;
+          if (max_even_n_colors<colors_counter[i].size())
+            {
+              max_even_n_colors = colors_counter[i].size();
+              i_color = i;
+            }
         }
-      }
-    }
+      coloring.resize(max_even_n_colors);
+      for (unsigned int j=0; j<colors_counter[i_color].size(); ++j)
+        coloring[j] = partition_coloring[i_color][j];
 
-    // Do the same thing that we did for the even partitions to the odd
-    // partitions
-    unsigned int max_odd_n_colors(0);
-    for (unsigned int i=1; i<partition_size; i+=2)
-    {
-      if (max_odd_n_colors<colors_counter[i].size())
-      {
-        max_odd_n_colors = colors_counter[i].size();
-        i_color = i;
-      }
-    }
-    coloring.resize(max_even_n_colors+max_odd_n_colors);
-    for (unsigned int j=0; j<colors_counter[i_color].size(); ++j)
-      coloring[max_even_n_colors+j] = partition_coloring[i_color][j];
+      for (unsigned int i=0; i<partition_size; i+=2)
+        {
+          if (i!=i_color)
+            {
+              boost::unordered_set<unsigned int> used_k;
+              for (unsigned int j=0; j<colors_counter[i].size(); ++j)
+                {
+                  // Find the color in the current partition with the largest number of
+                  // iterators.
+                  std::vector<unsigned int>::iterator it;
+                  it = std::max_element(colors_counter[i].begin(),colors_counter[i].end());
+                  unsigned int min_iterators(-1);
+                  unsigned int pos(0);
+                  // Find the color of coloring with the least number of colors among
+                  // the colors that have not been used yet.
+                  for (unsigned int k=0; k<max_even_n_colors; ++k)
+                    if (used_k.count(k)==0)
+                      if (colors_counter[i_color][k]<min_iterators)
+                        {
+                          min_iterators = colors_counter[i_color][k];
+                          pos = k;
+                        }
+                  colors_counter[i_color][pos] += *it;
+                  // Concatenate the current color with the existing coloring.
+                  coloring[pos].insert(coloring[pos].end(),
+                                       partition_coloring[i][it-colors_counter[i].begin()].begin(),
+                                       partition_coloring[i][it-colors_counter[i].begin()].end());
+                  used_k.insert(pos);
+                  // Put the number of iterators to the current color to zero.
+                  *it = 0;
+                }
+            }
+        }
 
-    for (unsigned int i=1; i<partition_size; i+=2)
-    {
-      if (i!=i_color)
-      {
-        boost::unordered_set<unsigned int> used_k;
-        for (unsigned int j=0; j<colors_counter[i].size(); ++j)
+      // If there is more than one partition, do the same thing that we did for the even partitions
+      // to the odd partitions
+      if (partition_size>1)
         {
-          // Find the color in the current partition with the largest number of
-          // iterators.
-          std::vector<unsigned int>::iterator it;
-          it = std::max_element(colors_counter[i].begin(),colors_counter[i].end());
-          unsigned int min_iterators(-1);
-          unsigned int pos(0);
-          // Find the color of coloring with the least number of colors among
-          // the colors that have not been used yet.
-          for (unsigned int k=0; k<max_odd_n_colors; ++k)
-            if (used_k.count(k)==0)
-              if (colors_counter[i_color][k]<min_iterators)
-              {
-                min_iterators = colors_counter[i_color][k];
-                pos = k;
-              }
-          colors_counter[i_color][pos] += *it;
-          // Concatenate the current color with the existing coloring.
-          coloring[max_even_n_colors+pos].insert(coloring[max_even_n_colors+pos].end(),
-              partition_coloring[i][it-colors_counter[i].begin()].begin(),
-              partition_coloring[i][it-colors_counter[i].begin()].end());
-          used_k.insert(pos);
-          // Put the number of iterators to the current color to zero.
-          *it = 0;
+          unsigned int max_odd_n_colors(0);
+          for (unsigned int i=1; i<partition_size; i+=2)
+            {
+              if (max_odd_n_colors<colors_counter[i].size())
+                {
+                  max_odd_n_colors = colors_counter[i].size();
+                  i_color = i;
+                }
+            }
+          coloring.resize(max_even_n_colors+max_odd_n_colors);
+          for (unsigned int j=0; j<colors_counter[i_color].size(); ++j)
+            coloring[max_even_n_colors+j] = partition_coloring[i_color][j];
+
+          for (unsigned int i=1; i<partition_size; i+=2)
+            {
+              if (i!=i_color)
+                {
+                  boost::unordered_set<unsigned int> used_k;
+                  for (unsigned int j=0; j<colors_counter[i].size(); ++j)
+                    {
+                      // Find the color in the current partition with the largest number of
+                      // iterators.
+                      std::vector<unsigned int>::iterator it;
+                      it = std::max_element(colors_counter[i].begin(),colors_counter[i].end());
+                      unsigned int min_iterators(-1);
+                      unsigned int pos(0);
+                      // Find the color of coloring with the least number of colors among
+                      // the colors that have not been used yet.
+                      for (unsigned int k=0; k<max_odd_n_colors; ++k)
+                        if (used_k.count(k)==0)
+                          if (colors_counter[i_color][k]<min_iterators)
+                            {
+                              min_iterators = colors_counter[i_color][k];
+                              pos = k;
+                            }
+                      colors_counter[i_color][pos] += *it;
+                      // Concatenate the current color with the existing coloring.
+                      coloring[max_even_n_colors+pos].insert(coloring[max_even_n_colors+pos].end(),
+                                                             partition_coloring[i][it-colors_counter[i].begin()].begin(),
+                                                             partition_coloring[i][it-colors_counter[i].begin()].end());
+                      used_k.insert(pos);
+                      // Put the number of iterators to the current color to zero.
+                      *it = 0;
+                    }
+                }
+            }
         }
-      }
-    }
 
-    return coloring;
+      return coloring;
+    }
   }
 
 
-
   /**
-   * This function creates a coloring given two iterators on the DoFHandler
-   * and a function that return the conflict indices given an iterator. When
-   * using continuous finite elements, the conflict_indices can be the dofs
-   * indices.
+   * Create a partitioning of the given range of iterators so that
+   * iterators that point to conflicting objects will be placed
+   * into different partitions, where the question whether two objects conflict
+   * is determined by a user-provided function.
+   *
+   * This function can also be considered as a graph coloring: each object
+   * pointed to by an iterator is considered to be a node and there is an
+   * edge between each two nodes that conflict. The graph coloring algorithm
+   * then assigns a color to each node in such a way that two nodes connected
+   * by an edge do not have the same color.
+   *
+   * A typical use case for this function is in assembling a matrix in parallel.
+   * There, one would like to assemble local contributions on different cells
+   * at the same time (an operation that is purely local and so requires
+   * no synchronization) but then we need to add these local contributions
+   * to the global matrix. In general, the contributions from different cells
+   * may be to the same matrix entries if the cells share degrees of freedom
+   * and, consequently, can not happen at the same time unless we want to
+   * risk a race condition (see http://en.wikipedia.org/wiki/Race_condition ).
+   * Thus, we call these two cells in conflict, and we can only allow operations
+   * in parallel from cells that do not conflict. In other words, two cells
+   * are in conflict if the set of matrix entries (for example characterized
+   * by the rows) have a nonempty intersection.
+   *
+   * In this generality, computing the graph of conflicts would require calling
+   * a function that determines whether two iterators (or the two objects they
+   * represent) conflict, and calling it for every pair of iterators, i.e.,
+   * $\frac 12 N (N-1)$ times. This is too expensive in general. A better
+   * approach is to require a user-defined function that returns for every
+   * iterator it is called for a set of indicators of some kind that characterize
+   * a conflict; two iterators are in conflict if their conflict indicator sets
+   * have a nonempty intersection. In the example of assembling a matrix,
+   * the conflict indicator set would contain the indices of all degrees of
+   * freedom on the cell pointed to (in the case of continuous Galerkin methods)
+   * or the union of indices of degree of freedom on the current cell and all
+   * cells adjacent to the faces of the current cell (in the case of
+   * discontinuous Galerkin methods, because there one computes face integrals
+   * coupling the degrees of freedom connected by a common face -- see step-12).
+   *
+   * @note The conflict set returned by the user defined function passed as
+   * third argument needs to accurately describe <i>all</i> degrees of
+   * freedom for which anything is written into the matrix or right hand side.
+   * In other words, if the writing happens through a function like
+   * ConstraintMatrix::copy_local_to_global(), then the set of conflict indices
+   * must actually contain not only the degrees of freedom on the current
+   * cell, but also those they are linked to by constraints such as hanging
+   * nodes.
+   *
+   * In other situations, the conflict indicator sets may represent
+   * something different altogether -- it is up to the caller of this function
+   * to describe what it means for two iterators to conflict. Given this,
+   * computing conflict graph edges can be done significantly more cheaply
+   * than with ${\cal O}(N^2)$ operations.
+   *
+   * In any case, the result of the function will be so that iterators whose
+   * conflict indicator sets have overlap will not be assigned to the same
+   * color.
+   *
+   * @param[in] begin The first element of a range of iterators for which a
+   *      coloring is sought.
+   * @param[in] end The element past the end of the range of iterators.
+   * @param[in] get_conflict_indices A user defined function object returning
+   *      a set of indicators that are descriptive of what represents a
+   *      conflict. See above for a more thorough discussion.
+   * @return A set of sets of iterators (where sets are represented by
+   *      std::vector for efficiency). Each element of the outermost set
+   *      corresponds to the iterators pointing to objects that are in the
+   *      same partition (have the same color) and consequently do not
+   *      conflict. The elements of different sets may conflict.
+   *
+   * @author Martin Kronbichler, Bruno Turcksin
    */
   template <typename Iterator>
-  std::vector<std::vector<Iterator> > 
-  make_graph_coloring(Iterator const &begin,typename identity<Iterator>::type const &end,
-      std_cxx1x::function<std::vector<types::global_dof_index> (Iterator const &)> 
-      const &get_conflict_indices)
+  std::vector<std::vector<Iterator> >
+  make_graph_coloring(const Iterator &begin,
+                      const typename identity<Iterator>::type &end,
+                      const std_cxx1x::function<std::vector<types::global_dof_index> (const typename identity<Iterator>::type &)> &get_conflict_indices)
   {
+    Assert (begin != end, ExcMessage ("GraphColoring is not prepared to deal with empty ranges!"));
+
     // Create the partitioning.
-    std::vector<std::vector<Iterator> > partitioning = create_partitioning(begin,end,
-        get_conflict_indices);
+    std::vector<std::vector<Iterator> >
+    partitioning = internal::create_partitioning (begin,
+                                                  end,
+                                                  get_conflict_indices);
 
     // Color the iterators within each partition.
+    // Run the coloring algorithm on each zone in parallel
     const unsigned int partitioning_size(partitioning.size());
-    std::vector<std::vector<std::vector<Iterator> > > partition_coloring(
-        partitioning_size);
-    for (unsigned int i=0; i<partitioning_size; ++i)
-    {
-      // Compute the coloring of the graph using the DSATUR algorithm
-      partition_coloring[i] = make_dsatur_coloring(partitioning[i],get_conflict_indices);
-    }
+    std::vector<std::vector<std::vector<Iterator> > >
+    partition_coloring(partitioning_size);
 
-    // Gather the colors together. 
-    std::vector<std::vector<Iterator> > coloring = gather_colors(partition_coloring);
-
-    return coloring;
+    Threads::TaskGroup<> tasks;
+    for (unsigned int i=0; i<partitioning_size; ++i)
+      tasks += Threads::new_task (&internal::make_dsatur_coloring<Iterator>,
+                                  partitioning[i],
+                                  get_conflict_indices,
+                                  partition_coloring[i]);
+    tasks.join_all();
+
+    // Gather the colors together.
+    return internal::gather_colors(partition_coloring);
   }
 
 } // End graph_coloring namespace
index 0e6acd4ed05b708ae7975af79ad2cb2878130bd3..2e1ce3b072c385d4c6b5cc4f6a4e722d92cbdd36 100644 (file)
@@ -34,7 +34,6 @@
 DEAL_II_NAMESPACE_OPEN
 
 //TODO: Allow long input lines to be broken by appending a backslash character
-//TODO: Provide an "include" command for parameter files
 
 
 // public classes; to be declared below
index a0d4418cfed5a7e2de598f23099c89be38d31c6a..ab3cde93876bda5cf63b77d093e29b3cc5e85d5a 100644 (file)
@@ -1279,50 +1279,14 @@ namespace Threads
      * While we have only one of these
      * objects per thread, several
      * Threads::Thread objects may refer to
-     * this descriptor.
-     *
-     * Note, however, that since this
-     * object holds the location
-     * where we store the return
-     * value of the thread, the
-     * object has to live at least as
-     * long as the thread
-     * executes. This means that even
-     * if all Threads::Thread objects
-     * that referred to this
-     * descriptor (through a
-     * std::shared_ptr) have gone out
-     * of scope, we must still hold
-     * on to the object. We do this
-     * by having the descriptor keep
-     * a pointer to itself and reset
-     * it to zero once it is done --
-     * effectively keeping the use
-     * pointer above zero as long as
-     * work is going on.
-     *
-     * To enable the current class to
-     * obtain a shared_ptr from
-     * itself, we derive from the
-     * class
-     * std::enable_shared_from_this.
+     * this descriptor. If all Thread
+     * objects go out of scope the
+     * ThreadDescriptor will detach from
+     * the thread before being destructed.
      */
     template <typename RT>
-    struct ThreadDescriptor : public std_cxx1x::enable_shared_from_this<ThreadDescriptor<RT> >
+    struct ThreadDescriptor
     {
-      /**
-       * A pointer to the current
-       * object, kept nonzero as
-       * long as the thread is
-       * executing to avoid
-       * destroying the current
-       * object while we are still
-       * expecting to write
-       * something into the return
-       * value location.
-       */
-      std_cxx1x::shared_ptr<ThreadDescriptor<RT> > self;
-
       /**
        * An object that represents the
        * thread started.
@@ -1333,8 +1297,14 @@ namespace Threads
        * An object that will hold the value
        * returned by the function called on
        * the thread.
+       *
+       * The return value is stored
+       * in a shared_ptr because we might
+       * abandon the the ThreadDescriptor.
+       * This makes sure the object stays
+       * alive until the thread exits.
        */
-      return_value<RT> ret_val;
+      std_cxx1x::shared_ptr<return_value<RT> > ret_val;
 
       /**
        * A bool variable that is initially
@@ -1405,41 +1375,24 @@ namespace Threads
         thread_is_active (false)
       {}
 
+      ~ThreadDescriptor ()
+      {
+        if (!thread_is_active)
+          return;
+        thread.detach();
+        thread_is_active = false;
+      }
 
       /**
        * Start the thread and let
        * it put its return value
        * into the ret_val object.
-       *
-       * Note that we cannot
-       * already do this in the
-       * constructor of this class:
-       * we will call
-       * enable_shared_from_this::shared_from_this
-       * which requires that there
-       * is already a shared_ptr
-       * that owns this object;
-       * however, at the time of
-       * creation, there can of
-       * course be no shared_ptr
-       * that owns the object -- it
-       * is, after all, just being
-       * created and can not
-       * already have been handed
-       * off to a shared_ptr; as a
-       * consequence, we first
-       * create the object, give it
-       * to a shared_ptr, and then
-       * call shared_from_this.
        */
       void start (const std_cxx1x::function<RT ()> &function)
       {
-        // set the self pointer
-        // and then start the
-        // thread
-        self = this->shared_from_this ();
         thread_is_active = true;
-        thread = std_cxx1x::thread (thread_entry_point, function, this);
+        ret_val.reset(new return_value<RT>());
+        thread = std_cxx1x::thread (thread_entry_point, function, ret_val);
       }
 
 
@@ -1472,7 +1425,7 @@ namespace Threads
        */
       static
       void thread_entry_point (const std_cxx1x::function<RT ()> function,
-                               ThreadDescriptor<RT> *descriptor)
+                               std_cxx1x::shared_ptr<return_value<RT> > ret_val)
       {
         // call the function
         // in question. since an
@@ -1489,7 +1442,7 @@ namespace Threads
         internal::register_thread ();
         try
           {
-            call (function, descriptor->ret_val);
+            call (function, *ret_val);
           }
         catch (const std::exception &exc)
           {
@@ -1500,24 +1453,6 @@ namespace Threads
             internal::handle_unknown_exception ();
           }
         internal::deregister_thread ();
-
-        // once we are done,
-        // we can release our
-        // hold on the thread
-        // descriptor
-        // object. if all
-        // Threads::Thread
-        // objects that
-        // pointed here
-        // should have gone
-        // out of scope
-        // already, then this
-        // will trigger
-        // destruction of the
-        // descriptor object
-        Assert (descriptor->self.use_count () > 0,
-                ExcInternalError());
-        descriptor->self.reset ();
       }
     };
 
@@ -1542,7 +1477,7 @@ namespace Threads
        * returned by the function called on
        * the thread.
        */
-      return_value<RT> ret_val;
+        std_cxx1x::shared_ptr<return_value<RT> > ret_val;
 
       /**
        * Start the thread and
@@ -1551,7 +1486,8 @@ namespace Threads
        */
       void start (const std_cxx1x::function<RT ()> &function)
       {
-        call (function, ret_val);
+        ret_val.reset(new return_value<RT>());
+        call (function, *ret_val);
       }
 
       /**
@@ -1615,15 +1551,7 @@ namespace Threads
       thread_descriptor (new internal::ThreadDescriptor<RT>())
     {
       // in a second step, start
-      // the thread. this needs
-      // to be done in two steps
-      // because inside the start
-      // function we call
-      // enable_shared_from_this::shared_from_this
-      // which requires that
-      // there is already a
-      // shared_ptr that owns the
-      // object
+      // the thread.
       thread_descriptor->start (function);
     }
 
@@ -1671,7 +1599,7 @@ namespace Threads
     RT return_value ()
     {
       join ();
-      return thread_descriptor->ret_val.get();
+      return thread_descriptor->ret_val->get();
     }
 
     /**
@@ -1712,29 +1640,6 @@ namespace Threads
      * sure that that object lives
      * as long as there is at least
      * one subscriber to it.
-     *
-     * Note that since the
-     * descriptor holds the
-     * location where the return
-     * value is stored, even if all
-     * Threads::Thread objects that
-     * point to the descriptor go
-     * out of scope, we must make
-     * sure that the descriptor is
-     * not yet destroyed. Rather,
-     * the descriptor must be
-     * destroyed when the last
-     * Threads::Thread object that
-     * points to it goes out of
-     * scope or whenever the thread
-     * is finished, whatever
-     * happens later. We do this by
-     * having the descriptor keep a
-     * pointer to itself and reset
-     * it to zero once it is done
-     * -- effectively keeping the use
-     * pointer above zero as long
-     * as work is going on.
      */
     std_cxx1x::shared_ptr<internal::ThreadDescriptor<RT> > thread_descriptor;
   };
index a029e9b0c5209a2c601faf45b95dacaa867cce09..330afcf1ce273e95165abafe6e96a5c81bf67f7f 100644 (file)
@@ -146,87 +146,240 @@ namespace WorkStream
 //  and that is available also as a fall-back whenever via boost or similar
 
     /**
-     * A class that creates a sequence of items from a range of iterators.
+     * A namespace for the implementation of details of the WorkStream pattern
+     * and function. This namespace holds classes that deal with the second
+     * implementation described in the paper by Turcksin, Kronbichler and
+     * Bangerth.
+     *
+     * Even though this implementation is slower than the third implementation
+     * discussed in that paper, we need to keep it around for two reasons:
+     * (i) a user may not give us a graph coloring, (ii) we want to use
+     * this implementation for colors that are just too small.
      */
-    template <typename Iterator,
-             typename ScratchData,
-             typename CopyData>
-    class IteratorRangeToItemStream : public tbb::filter
+    namespace Implementation2
     {
-    public:
       /**
-       * A data type that we use to identify items to be worked on. This is
-       * the structure that is passed around between the different parts of
-       * the WorkStream implementation to identify what needs to be done by
-       * the various stages of the pipeline.
+       * A class that creates a sequence of items from a range of iterators.
        */
-      struct ItemType
+      template <typename Iterator,
+               typename ScratchData,
+               typename CopyData>
+      class IteratorRangeToItemStream : public tbb::filter
       {
+      public:
         /**
-         * A structure that contains a pointer to a scratch data object along
-         * with a flag that indicates whether this object is currently in use.
+         * A data type that we use to identify items to be worked on. This is
+         * the structure that is passed around between the different parts of
+         * the WorkStream implementation to identify what needs to be done by
+         * the various stages of the pipeline.
          */
-        struct ScratchDataObject
+        struct ItemType
         {
-          std_cxx1x::shared_ptr<ScratchData> scratch_data;
-          bool                               currently_in_use;
-
           /**
-           * Default constructor.
+           * A structure that contains a pointer to a scratch data object along
+           * with a flag that indicates whether this object is currently in use.
            */
-          ScratchDataObject ()
-            :
-            currently_in_use (false)
-          {}
-
-          ScratchDataObject (ScratchData *p,
-                             const bool in_use)
-            :
-            scratch_data (p),
-            currently_in_use (in_use)
-          {}
-
-//TODO:        when we push back an object to the list of scratch objects, in
-//     Worker::operator(), we first create an object and then copy
-//     it to the end of this list. this involves having two objects
+          struct ScratchDataObject
+          {
+            std_cxx1x::shared_ptr<ScratchData> scratch_data;
+            bool                               currently_in_use;
+
+            /**
+             * Default constructor.
+             */
+            ScratchDataObject ()
+              :
+              currently_in_use (false)
+            {}
+
+            ScratchDataObject (ScratchData *p,
+                               const bool in_use)
+              :
+              scratch_data (p),
+              currently_in_use (in_use)
+            {}
+
+//TODO: when we push back an object to the list of scratch objects, in
+//  Worker::operator(), we first create an object and then copy
+//  it to the end of this list. this involves having two objects
 //      of the current type having pointers to it, each with their own
 //      currently_in_use flag. there is probably little harm in this because
 //      the original one goes out of scope right away again, but it's
 //      certainly awkward. one way to avoid this would be to use unique_ptr
 //      but we'd need to figure out a way to use it in non-C++11 mode
-          ScratchDataObject (const ScratchDataObject &o)
+            ScratchDataObject (const ScratchDataObject &o)
+              :
+              scratch_data (o.scratch_data),
+              currently_in_use (o.currently_in_use)
+            {}
+          };
+
+
+          /**
+           * Typedef to a list of scratch data objects. The rationale for this
+           * list is provided in the variables that use these lists.
+           */
+          typedef std::list<ScratchDataObject> ScratchDataList;
+
+          /**
+           * A list of iterators that need to be worked on. Only the first
+           * n_items are relevant.
+           */
+          std::vector<Iterator> work_items;
+
+          /**
+           * The CopyData objects that the Worker part of the pipeline
+           * fills for each work item. Again, only the first n_items
+           * elements are what we care about.
+           */
+          std::vector<CopyData> copy_datas;
+
+          /**
+           * Number of items identified by the work_items array that the
+           * Worker and Copier pipeline stage need to work on. The maximum
+           * value of this variable will be chunk_size.
+           */
+          unsigned int          n_items;
+
+          /**
+           * Pointer to a thread local variable identifying the scratch data objects
+           * this thread will use. The initial implementation of this
+           * class using thread local variables provided only a single
+           * scratch object per thread. This doesn't work, because
+           * the worker functions may start tasks itself and then call
+           * Threads::TaskGroup::join_all() or a similar function, which the
+           * TBB scheduler may use to run something else on the current
+           * thread -- for example another instance of the worker function.
+           * Consequently, there would be two instances of the worker
+           * function that use the same scratch object if we only
+           * provided a single scratch object per thread. The solution is
+           * to provide a list of scratch objects for each thread, together
+           * with a flag indicating whether this scratch object is currently
+           * used. If a thread needs a scratch object, it walks this list
+           * until it finds an unused object, or, if there is none, creates one
+           * itself. Note that we need not use synchronization primitives
+           * for this process since the lists are thread-local and
+           * we are guaranteed that only a single thread accesses them as long
+           * as we have no yield point in between the accesses to the list.
+           *
+           * The pointers to scratch objects stored in each of these lists must
+           * be so that they are deleted on all threads when the thread
+           * local object is destroyed. This is achieved by using shared_ptr.
+           *
+           * Note that when a worker needs to create a scratch object, it allocates
+           * it using sample_scratch_data to copy from. This has
+           * the advantage of a first-touch initialization, i.e., the
+           * memory for the scratch data object is allocated and initialized
+           * by the same thread that will later use it.
+           */
+          Threads::ThreadLocalStorage<ScratchDataList> *scratch_data;
+
+          /**
+           * Pointer to a sample scratch data object, to be used to initialize
+           * the scratch data objects created for each individual thread.
+           */
+          const ScratchData *sample_scratch_data;
+
+
+          /**
+           * Default constructor.
+           * Initialize everything that doesn't have a default constructor
+           * itself.
+           */
+          ItemType ()
             :
-           scratch_data (o.scratch_data),
-            currently_in_use (o.currently_in_use)
+            n_items (0),
+            scratch_data (0),
+            sample_scratch_data (0)
           {}
         };
 
 
         /**
-         * Typedef to a list of scratch data objects. The rationale for this
-         * list is provided in the variables that use these lists.
+         * Constructor. Take an iterator range, the size of a buffer that can
+         * hold items, and the sample additional data object that will be passed
+         * to each worker and copier function invokation.
          */
-        typedef std::list<ScratchDataObject> ScratchDataList;
+        IteratorRangeToItemStream (const Iterator       &begin,
+                                   const Iterator       &end,
+                                   const unsigned int    buffer_size,
+                                   const unsigned int    chunk_size,
+                                   const ScratchData    &sample_scratch_data,
+                                   const CopyData       &sample_copy_data)
+          :
+          tbb::filter (/*is_serial=*/true),
+          remaining_iterator_range (begin, end),
+          ring_buffer (buffer_size),
+          sample_scratch_data (sample_scratch_data),
+          n_emitted_items (0),
+          chunk_size (chunk_size)
+        {
+          // initialize the elements of the ring buffer
+          for (unsigned int element=0; element<ring_buffer.size(); ++element)
+            {
+              Assert (ring_buffer[element].n_items == 0,
+                      ExcInternalError());
+
+              ring_buffer[element].work_items.resize (chunk_size,
+                                                      remaining_iterator_range.second);
+              ring_buffer[element].scratch_data = &thread_local_scratch;
+              ring_buffer[element].sample_scratch_data = &sample_scratch_data;
+              ring_buffer[element].copy_datas.resize (chunk_size,
+                                                      sample_copy_data);
+            }
+        }
+
 
         /**
-         * A list of iterators that need to be worked on. Only the first
-         * n_items are relevant.
+         * Create an item and return a
+         * pointer to it.
          */
-        std::vector<Iterator> work_items;
+        virtual void *operator () (void *)
+        {
+          // store the current
+          // position of the pointer
+          ItemType *current_item
+            = &ring_buffer[n_emitted_items % ring_buffer.size()];
+
+          // initialize the next item. it may
+          // consist of at most chunk_size
+          // elements
+          current_item->n_items = 0;
+          while ((remaining_iterator_range.first !=
+                  remaining_iterator_range.second)
+                 &&
+                 (current_item->n_items < chunk_size))
+            {
+              current_item->work_items[current_item->n_items]
+                = remaining_iterator_range.first;
+
+              ++remaining_iterator_range.first;
+              ++current_item->n_items;
+            }
+
+          if (current_item->n_items == 0)
+            // there were no items
+            // left. terminate the pipeline
+            return 0;
+          else
+            {
+              ++n_emitted_items;
+              return current_item;
+            }
+        }
 
+      private:
         /**
-         * The CopyData objects that the Worker part of the pipeline
-         * fills for each work item. Again, only the first n_items
-         * elements are what we care about.
+         * The interval of iterators still to
+         * be worked on. This range will shrink
+         * over time.
          */
-        std::vector<CopyData> copy_datas;
+        std::pair<Iterator,Iterator> remaining_iterator_range;
 
         /**
-         * Number of items identified by the work_items array that the
-         * Worker and Copier pipeline stage need to work on. The maximum
-         * value of this variable will be chunk_size.
+         * A ring buffer that will store items.
          */
-        unsigned int          n_items;
+        std::vector<ItemType>        ring_buffer;
 
         /**
          * Pointer to a thread local variable identifying the scratch data objects
@@ -259,492 +412,741 @@ namespace WorkStream
          * memory for the scratch data object is allocated and initialized
          * by the same thread that will later use it.
          */
-        Threads::ThreadLocalStorage<ScratchDataList> *scratch_data;
+        Threads::ThreadLocalStorage<typename ItemType::ScratchDataList> thread_local_scratch;
 
         /**
-         * Pointer to a sample scratch data object, to be used to initialize
-         * the scratch data objects created for each individual thread.
+         * A reference to a sample scratch data that will be used to
+         * initialize the thread-local pointers to a scratch data object
+         * each of the worker tasks uses.
          */
-        const ScratchData *sample_scratch_data;
+        const ScratchData &sample_scratch_data;
 
+        /**
+         * Counter for the number of emitted
+         * items. Each item may consist of up
+         * to chunk_size iterator elements.
+         */
+        unsigned int       n_emitted_items;
 
         /**
-         * Default constructor.
-         * Initialize everything that doesn't have a default constructor
-         * itself.
+         * Number of elements of the
+         * iterator range that each
+         * thread should work on
+         * sequentially; a large number
+         * makes sure that each thread
+         * gets a significant amount of
+         * work before the next task
+         * switch happens, whereas a
+         * small number is better for
+         * load balancing.
          */
-        ItemType ()
-          :
-            n_items (0),
-            scratch_data (0),
-            sample_scratch_data (0)
-        {}
+        const unsigned int           chunk_size;
+
+        /**
+         * Initialize the pointers and vector
+         * elements in the specified entry of
+         * the ring buffer.
+         */
+        void init_buffer_elements (const unsigned int element,
+                                   const CopyData    &sample_copy_data)
+        {
+          Assert (ring_buffer[element].n_items == 0,
+                  ExcInternalError());
+
+          ring_buffer[element].work_items
+          .resize (chunk_size, remaining_iterator_range.second);
+          ring_buffer[element].scratch_data
+            = &thread_local_scratch;
+          ring_buffer[element].sample_scratch_data
+            = &sample_scratch_data;
+          ring_buffer[element].copy_datas
+          .resize (chunk_size, sample_copy_data);
+        }
       };
 
 
+
       /**
-       * Constructor. Take an iterator range, the size of a buffer that can
-       * hold items, and the sample additional data object that will be passed
-       * to each worker and copier function invokation.
+       * A class that manages calling the
+       * worker function on a number of
+       * parallel threads. Note that it is, in
+       * the TBB notation, a filter that can
+       * run in parallel.
        */
-      IteratorRangeToItemStream (const Iterator       &begin,
-          const Iterator       &end,
-          const unsigned int    buffer_size,
-          const unsigned int    chunk_size,
-          const ScratchData    &sample_scratch_data,
-          const CopyData       &sample_copy_data)
-        :
-          tbb::filter (/*is_serial=*/true),
-          remaining_iterator_range (new std::pair<Iterator,Iterator> (begin, end)),
-          ring_buffer (buffer_size),
-          sample_scratch_data (sample_scratch_data),
-          color(false),
-          n_emitted_items (0),
-          chunk_size (chunk_size)
+      template <typename Iterator,
+               typename ScratchData,
+               typename CopyData>
+      class Worker : public tbb::filter
       {
-        // initialize the elements of the ring buffer
-        for (unsigned int element=0; element<ring_buffer.size(); ++element)
+      public:
+        /**
+         * Constructor. Takes a
+         * reference to the object on
+         * which we will operate as
+         * well as a pointer to the
+         * function that will do the
+         * assembly.
+         */
+        Worker (const std_cxx1x::function<void (const Iterator &,
+                                                ScratchData &,
+                                                CopyData &)> &worker)
+          :
+          tbb::filter (/* is_serial= */ false),
+          worker (worker)
+        {}
+
+
+        /**
+         * Work on an item.
+         */
+        void *operator () (void *item)
         {
-          Assert (ring_buffer[element].n_items == 0,
-              ExcInternalError());
-
-          ring_buffer[element].work_items.resize (chunk_size,
-              remaining_iterator_range->second);
-          ring_buffer[element].scratch_data = &thread_local_scratch;
-          ring_buffer[element].sample_scratch_data = &sample_scratch_data;
-          ring_buffer[element].copy_datas.resize (chunk_size,
-              sample_copy_data);
+          // first unpack the current item
+          typedef
+          typename IteratorRangeToItemStream<Iterator,ScratchData,CopyData>::ItemType
+          ItemType;
+
+          ItemType *current_item = static_cast<ItemType *> (item);
+
+          // we need to find an unused scratch data object in the list that
+          // corresponds to the current thread and then mark it as used. if
+          // we can't find one, create one
+          //
+          // as discussed in the discussion of the documentation of the
+          // IteratorRangeToItemStream::scratch_data variable, there is no
+          // need to synchronize access to this variable using a mutex
+          // as long as we have no yield-point in between. this means that
+          // we can't take an iterator into the list now and expect it to
+          // still be valid after calling the worker, but we at least do
+          // not have to lock the following section
+          ScratchData *scratch_data = 0;
+          {
+            typename ItemType::ScratchDataList &
+            scratch_data_list = current_item->scratch_data->get();
+
+            // see if there is an unused object. if so, grab it and mark
+            // it as used
+            for (typename ItemType::ScratchDataList::iterator
+                 p = scratch_data_list.begin();
+                 p != scratch_data_list.end(); ++p)
+              if (p->currently_in_use == false)
+                {
+                  scratch_data = p->scratch_data.get();
+                  p->currently_in_use = true;
+                  break;
+                }
+
+            // if no object was found, create one and mark it as used
+            if (scratch_data == 0)
+              {
+                scratch_data = new ScratchData(*current_item->sample_scratch_data);
+
+                typename ItemType::ScratchDataList::value_type
+                new_scratch_object (scratch_data, true);
+                scratch_data_list.push_back (new_scratch_object);
+              }
+          }
+
+          // then call the worker function on each element of the chunk we were
+          // given. since these worker functions are called on separate threads,
+          // nothing good can happen if they throw an exception and we are best
+          // off catching it and showing an error message
+          for (unsigned int i=0; i<current_item->n_items; ++i)
+            {
+              try
+                {
+                  if (worker)
+                    worker (current_item->work_items[i],
+                            *scratch_data,
+                            current_item->copy_datas[i]);
+                }
+              catch (const std::exception &exc)
+                {
+                  Threads::internal::handle_std_exception (exc);
+                }
+              catch (...)
+                {
+                  Threads::internal::handle_unknown_exception ();
+                }
+            }
+
+          // finally mark the scratch object as unused again. as above, there
+          // is no need to lock anything here since the object we work on
+          // is thread-local
+          {
+            typename ItemType::ScratchDataList &
+            scratch_data_list = current_item->scratch_data->get();
+
+            for (typename ItemType::ScratchDataList::iterator p =
+                   scratch_data_list.begin(); p != scratch_data_list.end();
+                 ++p)
+              if (p->scratch_data.get() == scratch_data)
+                {
+                  Assert(p->currently_in_use == true, ExcInternalError());
+                  p->currently_in_use = false;
+                }
+          }
+
+
+
+          // then return the original pointer
+          // to the now modified object
+          return item;
         }
-      }
 
-      IteratorRangeToItemStream (const typename std::vector<Iterator>::iterator &begin,
-          const typename std::vector<Iterator>::iterator &end,
-          const unsigned int                     buffer_size,
-          const unsigned int                     chunk_size,
-          const ScratchData                     &sample_scratch_data,
-          const CopyData                        &sample_copy_data)
-        :
-          tbb::filter (/*is_serial=*/true),
-          color_remaining_iterator_range (new std::pair<typename std::vector<Iterator>::iterator,
-             typename std::vector<Iterator>::iterator> (begin,end)),
-          ring_buffer (buffer_size),
-          sample_scratch_data (sample_scratch_data),
-          color(true),
-          n_emitted_items (0),
-          chunk_size (chunk_size)
+
+      private:
+        /**
+         * Pointer to the function
+         * that does the assembling
+         * on the sequence of cells.
+         */
+        const std_cxx1x::function<void (const Iterator &,
+                                        ScratchData &,
+                                        CopyData &)> worker;
+      };
+
+
+
+      /**
+       * A class that manages calling the
+       * copier function. Note that it is, in
+       * the TBB notation, a filter that runs
+       * sequentially, ensuring that all items
+       * are copied in the same order in which
+       * they are created.
+       */
+      template <typename Iterator,
+               typename ScratchData,
+               typename CopyData>
+      class Copier : public tbb::filter
       {
-        for (unsigned int element=0; element<ring_buffer.size(); ++element)
+      public:
+        /**
+         * Constructor. Takes a
+         * reference to the object on
+         * which we will operate as
+         * well as a pointer to the
+         * function that will do the
+         * copying from the
+         * additional data object to
+         * the global matrix or
+         * similar.
+         */
+        Copier (const std_cxx1x::function<void (const CopyData &)> &copier)
+          :
+          tbb::filter (/*is_serial=*/true),
+          copier (copier)
+        {}
+
+
+        /**
+         * Work on a single item.
+         */
+        void *operator () (void *item)
         {
-          Assert (ring_buffer[element].n_items == 0,
-              ExcInternalError());
-
-          // work_items is templated on iterator. Therefore, the resize must
-          // be done given *(color_remaining_iterator_range->firts) because
-          // iterator may not have a default constructor and
-          // *(color_remaining_iterator_range->second) is invalid.
-          ring_buffer[element].work_items.resize (chunk_size,
-              *(color_remaining_iterator_range->first));
-          ring_buffer[element].scratch_data = &thread_local_scratch;
-          ring_buffer[element].sample_scratch_data = &sample_scratch_data;
-          ring_buffer[element].copy_datas.resize (chunk_size,
-              sample_copy_data);
+          // first unpack the current item
+          typedef
+          typename IteratorRangeToItemStream<Iterator,ScratchData,CopyData>::ItemType
+          ItemType;
+
+          ItemType *current_item = static_cast<ItemType *> (item);
+
+          // initiate copying data. for the same reasons as in the worker class
+          // above, catch exceptions rather than letting it propagate into
+          // unknown territories
+          for (unsigned int i=0; i<current_item->n_items; ++i)
+            {
+              try
+                {
+                  if (copier)
+                    copier (current_item->copy_datas[i]);
+                }
+              catch (const std::exception &exc)
+                {
+                  Threads::internal::handle_std_exception (exc);
+                }
+              catch (...)
+                {
+                  Threads::internal::handle_unknown_exception ();
+                }
+            }
+
+
+          // return an invalid item since we are at the end of the
+          // pipeline
+          return 0;
         }
-      }
 
+
+      private:
+        /**
+         * Pointer to the function that does the copying of data.
+         */
+        const std_cxx1x::function<void (const CopyData &)> copier;
+      };
+
+    }
+
+
+    /**
+     * A namespace for the implementation of details of the WorkStream pattern
+     * and function. This namespace holds classes that deal with the third
+     * implementation described in the paper by Turcksin, Kronbichler and
+     * Bangerth.
+     */
+    namespace Implementation3
+    {
       /**
-       * Create a item and return a
-       * pointer to it.
+       * A class that creates a sequence of items from a range of iterators.
        */
-      virtual void *operator () (void *)
+      template <typename Iterator,
+               typename ScratchData,
+               typename CopyData>
+      class IteratorRangeToItemStream : public tbb::filter
       {
-        // store the current
-        // position of the pointer
-        ItemType *current_item
-          = &ring_buffer[n_emitted_items % ring_buffer.size()];
-
-        // initialize the next item. it may
-        // consist of at most chunk_size
-        // elements
-        current_item->n_items = 0;
-        if (color==false)
-          while ((remaining_iterator_range->first !=
-                remaining_iterator_range->second)
-              &&
-              (current_item->n_items < chunk_size))
+      public:
+        /**
+         * A data type that we use to identify items to be worked on. This is
+         * the structure that is passed around between the different parts of
+         * the WorkStream implementation to identify what needs to be done by
+         * the various stages of the pipeline.
+         */
+        struct ItemType
+        {
+          /**
+           * A structure that contains a pointer to scratch and copy data objects along
+           * with a flag that indicates whether this object is currently in use.
+           */
+          struct ScratchAndCopyDataObjects
           {
-            current_item->work_items[current_item->n_items]
-              = remaining_iterator_range->first;
+            std_cxx1x::shared_ptr<ScratchData> scratch_data;
+            std_cxx1x::shared_ptr<CopyData>    copy_data;
+            bool                               currently_in_use;
+
+            /**
+             * Default constructor.
+             */
+            ScratchAndCopyDataObjects ()
+              :
+              currently_in_use (false)
+            {}
+
+            ScratchAndCopyDataObjects (ScratchData *p,
+                                       CopyData *q,
+                                       const bool in_use)
+              :
+              scratch_data (p),
+              copy_data (q),
+              currently_in_use (in_use)
+            {}
+
+//TODO: when we push back an object to the list of scratch objects, in
+//      Worker::operator(), we first create an object and then copy
+//      it to the end of this list. this involves having two objects
+//      of the current type having pointers to it, each with their own
+//      currently_in_use flag. there is probably little harm in this because
+//      the original one goes out of scope right away again, but it's
+//      certainly awkward. one way to avoid this would be to use unique_ptr
+//      but we'd need to figure out a way to use it in non-C++11 mode
+            ScratchAndCopyDataObjects (const ScratchAndCopyDataObjects &o)
+              :
+              scratch_data (o.scratch_data),
+              copy_data (o.copy_data),
+              currently_in_use (o.currently_in_use)
+            {}
+          };
 
-            ++remaining_iterator_range->first;
-            ++current_item->n_items;
-          }
-        else
-          while ((color_remaining_iterator_range->first !=
-                color_remaining_iterator_range->second)
-              &&
-              (current_item->n_items < chunk_size))
-          {
-            current_item->work_items[current_item->n_items]
-              = *(color_remaining_iterator_range->first);
 
-            ++color_remaining_iterator_range->first;
-            ++current_item->n_items;
-          }
+          /**
+           * Typedef to a list of scratch data objects. The rationale for this
+           * list is provided in the variables that use these lists.
+           */
+          typedef std::list<ScratchAndCopyDataObjects> ScratchAndCopyDataList;
 
-        if (current_item->n_items == 0)
-          // there were no items
-          // left. terminate the pipeline
-          return 0;
-        else
+          /**
+           * A list of iterators that need to be worked on. Only the first
+           * n_items are relevant.
+           */
+          std::vector<Iterator> work_items;
+
+          /**
+           * Number of items identified by the work_items array that the
+           * Worker and Copier pipeline stage need to work on. The maximum
+           * value of this variable will be chunk_size.
+           */
+          unsigned int          n_items;
+
+          /**
+           * Pointer to a thread local variable identifying the scratch
+           * and copy data objects this thread will use. The same considerations
+           * apply as documented in the Implementation2::IteratorRangeToItemStream
+           * class as well as in the paper by Turcksin, Kronbichler and Bangerth.
+           */
+          Threads::ThreadLocalStorage<ScratchAndCopyDataList> *scratch_and_copy_data;
+
+          /**
+           * Pointer to a sample scratch data object, to be used to initialize
+           * the scratch data objects created for each individual thread.
+           */
+          const ScratchData *sample_scratch_data;
+
+          /**
+           * Pointer to a sample copy data object.
+           */
+          const CopyData *sample_copy_data;
+
+          /**
+           * Flag is true if the buffer is used and false if the buffer can be
+           * used.
+           */
+          bool currently_in_use;
+
+          /**
+           * Default constructor.
+           * Initialize everything that doesn't have a default constructor
+           * itself.
+           */
+          ItemType ()
+            :
+            n_items (0),
+            sample_scratch_data (0),
+            sample_copy_data (0),
+            currently_in_use (false)
+          {}
+        };
+
+
+        /**
+         * Constructor. Take range of iterators into an array of the kind of object we
+         * want to loop over, the size of a buffer that can
+         * hold items, and the sample additional data object that will be passed
+         * to each worker and copier function invokation.
+         */
+        IteratorRangeToItemStream (const typename std::vector<Iterator>::const_iterator &begin,
+                                   const typename std::vector<Iterator>::const_iterator &end,
+                                   const unsigned int    buffer_size,
+                                   const unsigned int    chunk_size,
+                                   const ScratchData    &sample_scratch_data,
+                                   const CopyData       &sample_copy_data)
+          :
+          tbb::filter (/*is_serial=*/true),
+          remaining_iterator_range (begin, end),
+          item_buffer (buffer_size),
+          sample_scratch_data (sample_scratch_data),
+          sample_copy_data (sample_copy_data),
+          chunk_size (chunk_size)
         {
-          ++n_emitted_items;
-          return current_item;
+          Assert (begin != end, ExcMessage ("This class is not prepared to deal with empty ranges!"));
+          // initialize the elements of the item_buffer
+          for (unsigned int element=0; element<item_buffer.size(); ++element)
+            {
+              Assert (item_buffer[element].n_items == 0,
+                      ExcInternalError());
+
+              // resize the item_buffer. we have to initialize the new
+              // elements with something and because we can't rely on there
+              // being a default constructor for 'Iterator', we take the first
+              // element in the range [begin,end) pointed to.
+              item_buffer[element].work_items.resize (chunk_size,*begin);
+              item_buffer[element].scratch_and_copy_data = &thread_local_scratch_and_copy;
+              item_buffer[element].sample_scratch_data = &sample_scratch_data;
+              item_buffer[element].sample_copy_data = &sample_copy_data;
+              item_buffer[element].currently_in_use = false;
+            }
         }
-      }
 
-    private:
-      /**
-       * The interval of iterators still to
-       * be worked on. This range will shrink
-       * over time.
-       */
-      std_cxx1x::shared_ptr<std::pair<Iterator,Iterator> > remaining_iterator_range;
 
-      /**
-       * When graph coloring is used the iterators to be worked on are given
-       * in a vector defined by a pair of iterators.
-       */
-      std_cxx1x::shared_ptr<std::pair<typename std::vector<Iterator>::iterator,
-        typename std::vector<Iterator>::iterator> >
-        color_remaining_iterator_range;
+        /**
+         * Create an item and return a
+         * pointer to it.
+         */
+        virtual void *operator () (void *)
+        {
+          // find first unused item. we know that there must be one
+          // because we have set the maximal number of tokens in flight
+          // and have set the ring buffer to have exactly this size. so
+          // if this function is called, we know that less than the
+          // maximal number of items in currently in flight
+          ItemType *current_item = 0;
+          for (unsigned int i=0; i<item_buffer.size(); ++i)
+            if (item_buffer[i].currently_in_use == false)
+              {
+                item_buffer[i].currently_in_use = true;
+                current_item = &item_buffer[i];
+                break;
+              }
+          Assert (current_item != 0, ExcMessage ("This can't be. There must be a free item!"));
+
+
+          // initialize the next item. it may
+          // consist of at most chunk_size
+          // elements
+          current_item->n_items = 0;
+          while ((remaining_iterator_range.first !=
+                  remaining_iterator_range.second)
+                 &&
+                 (current_item->n_items < chunk_size))
+            {
+              // initialize the iterators to work on with the elements
+              // of the vector that remaining_iterator_range
+              // points into
+              current_item->work_items[current_item->n_items]
+                = *remaining_iterator_range.first;
+
+              ++remaining_iterator_range.first;
+              ++current_item->n_items;
+            }
+
+          if (current_item->n_items == 0)
+            // there were no items
+            // left. terminate the pipeline
+            return 0;
+          else
+            return current_item;
+        }
 
-      /**
-       * A ring buffer that will store items.
-       */
-      std::vector<ItemType>        ring_buffer;
+      private:
+        /**
+         * The interval of iterators still to
+         * be worked on. This range will shrink
+         * over time.
+         */
+        std::pair<typename std::vector<Iterator>::const_iterator,typename std::vector<Iterator>::const_iterator> remaining_iterator_range;
 
-      /**
-       * Pointer to a thread local variable identifying the scratch data objects
-       * this thread will use. The initial implementation of this
-       * class using thread local variables provided only a single
-       * scratch object per thread. This doesn't work, because
-       * the worker functions may start tasks itself and then call
-       * Threads::TaskGroup::join_all() or a similar function, which the
-       * TBB scheduler may use to run something else on the current
-       * thread -- for example another instance of the worker function.
-       * Consequently, there would be two instances of the worker
-       * function that use the same scratch object if we only
-       * provided a single scratch object per thread. The solution is
-       * to provide a list of scratch objects for each thread, together
-       * with a flag indicating whether this scratch object is currently
-       * used. If a thread needs a scratch object, it walks this list
-       * until it finds an unused object, or, if there is none, creates one
-       * itself. Note that we need not use synchronization primitives
-       * for this process since the lists are thread-local and
-       * we are guaranteed that only a single thread accesses them as long
-       * as we have no yield point in between the accesses to the list.
-       *
-       * The pointers to scratch objects stored in each of these lists must
-       * be so that they are deleted on all threads when the thread
-       * local object is destroyed. This is achieved by using shared_ptr.
-       *
-       * Note that when a worker needs to create a scratch object, it allocates
-       * it using sample_scratch_data to copy from. This has
-       * the advantage of a first-touch initialization, i.e., the
-       * memory for the scratch data object is allocated and initialized
-       * by the same thread that will later use it.
-       */
-      Threads::ThreadLocalStorage<typename ItemType::ScratchDataList> thread_local_scratch;
+        /**
+         * A ring buffer that will store items.
+         */
+        std::vector<ItemType>        item_buffer;
 
-      /**
-       * A reference to a sample scratch data that will be used to
-       * initialize the thread-local pointers to a scratch data object
-       * each of the worker tasks uses.
-       */
-      const ScratchData &sample_scratch_data;
+        /**
+         * Pointer to a thread local variable identifying the scratch and
+         * copy data objects each thread will use. The same is true as
+         * discussed for the implementation in the
+         * Implementation2::IteratorRangeToItemStream class and the paper
+         * by Turcksin, Kronbichler and Bangerth.
+         */
+        Threads::ThreadLocalStorage<typename ItemType::ScratchAndCopyDataList> thread_local_scratch_and_copy;
 
-      /**
-       * This flag is used to know if graph coloring is used or not.
-       */
-      bool               color;
+        /**
+         * A reference to a sample scratch data that will be used to
+         * initialize the thread-local pointers to a scratch data object
+         * each of the worker tasks uses.
+         */
+        const ScratchData &sample_scratch_data;
+
+        /**
+         * A reference to a sample scratch data that will be used to
+         * initialize the thread-local pointers to a scratch data object
+         * each of the worker tasks uses.
+         */
+        const CopyData &sample_copy_data;
+
+        /**
+         * Number of elements of the
+         * iterator range that each
+         * thread should work on
+         * sequentially; a large number
+         * makes sure that each thread
+         * gets a significant amount of
+         * work before the next task
+         * switch happens, whereas a
+         * small number is better for
+         * load balancing.
+         */
+        const unsigned int           chunk_size;
+
+        /**
+         * Initialize the pointers and vector
+         * elements in the specified entry of
+         * the item_buffer.
+         */
+        void init_buffer_elements (const unsigned int element)
+        {
+          Assert (item_buffer[element].n_items == 0,
+                  ExcInternalError());
+
+          item_buffer[element].work_items
+          .resize (chunk_size, remaining_iterator_range.second);
+          item_buffer[element].scratch_and_copy_data
+            = &thread_local_scratch_and_copy;
+          item_buffer[element].sample_scratch_data
+            = &sample_scratch_data;
+          item_buffer[element].sample_copy_data
+            = &sample_copy_data;
+        }
+      };
 
-      /**
-       * Counter for the number of emitted
-       * items. Each item may consist of up
-       * to chunk_size iterator elements.
-       */
-      unsigned int       n_emitted_items;
 
-      /**
-       * Number of elements of the
-       * iterator range that each
-       * thread should work on
-       * sequentially; a large number
-       * makes sure that each thread
-       * gets a significant amount of
-       * work before the next task
-       * switch happens, whereas a
-       * small number is better for
-       * load balancing.
-       */
-      const unsigned int           chunk_size;
 
       /**
-       * Initialize the pointers and vector
-       * elements in the specified entry of
-       * the ring buffer.
+       * A class that manages calling the
+       * worker function on a number of
+       * parallel threads. Note that it is, in
+       * the TBB notation, a filter that can
+       * run in parallel.
        */
-      void init_buffer_elements (const unsigned int element,
-          const CopyData    &sample_copy_data)
+      template <typename Iterator,
+               typename ScratchData,
+               typename CopyData>
+      class WorkerAndCopier : public tbb::filter
       {
-        Assert (ring_buffer[element].n_items == 0,
-            ExcInternalError());
-
-        ring_buffer[element].work_items
-          .resize (chunk_size, remaining_iterator_range->second);
-        ring_buffer[element].scratch_data
-          = &thread_local_scratch;
-        ring_buffer[element].sample_scratch_data
-          = &sample_scratch_data;
-        ring_buffer[element].copy_datas
-          .resize (chunk_size, sample_copy_data);
-      }
-    };
+      public:
+        /**
+         * Constructor. Takes a
+         * reference to the object on
+         * which we will operate as
+         * well as a pointer to the
+         * function that will do the
+         * assembly.
+         */
+        WorkerAndCopier (const std_cxx1x::function<void (const Iterator &,
+                                                         ScratchData &,
+                                                         CopyData &)> &worker,
+                         const std_cxx1x::function<void (const CopyData &)> &copier)
+          :
+          tbb::filter (/* is_serial= */ false),
+          worker (worker),
+          copier (copier)
+        {}
+
 
+        /**
+         * Work on an item.
+         */
+        void *operator () (void *item)
+        {
+          // first unpack the current item
+          typedef
+          typename IteratorRangeToItemStream<Iterator,ScratchData,CopyData>::ItemType
+          ItemType;
+
+          ItemType *current_item = static_cast<ItemType *> (item);
+
+          // we need to find an unused scratch and corresponding copy
+          // data object in the list that
+          // corresponds to the current thread and then mark it as used. if
+          // we can't find one, create one
+          //
+          // as discussed in the discussion of the documentation of the
+          // IteratorRangeToItemStream::scratch_data variable, there is no
+          // need to synchronize access to this variable using a mutex
+          // as long as we have no yield-point in between. this means that
+          // we can't take an iterator into the list now and expect it to
+          // still be valid after calling the worker, but we at least do
+          // not have to lock the following section
+          ScratchData *scratch_data = 0;
+          CopyData    *copy_data    = 0;
+          {
+            typename ItemType::ScratchAndCopyDataList &
+            scratch_and_copy_data_list = current_item->scratch_and_copy_data->get();
+
+            // see if there is an unused object. if so, grab it and mark
+            // it as used
+            for (typename ItemType::ScratchAndCopyDataList::iterator
+                 p = scratch_and_copy_data_list.begin();
+                 p != scratch_and_copy_data_list.end(); ++p)
+              if (p->currently_in_use == false)
+                {
+                  scratch_data = p->scratch_data.get();
+                  copy_data    = p->copy_data.get();
+                  p->currently_in_use = true;
+                  break;
+                }
+
+            // if no element in the list was found, create one and mark it as used
+            if (scratch_data == 0)
+              {
+                Assert (copy_data==0, ExcInternalError());
+                scratch_data = new ScratchData(*current_item->sample_scratch_data);
+                copy_data    = new CopyData(*current_item->sample_copy_data);
+
+                typename ItemType::ScratchAndCopyDataList::value_type
+                new_scratch_object (scratch_data, copy_data, true);
+                scratch_and_copy_data_list.push_back (new_scratch_object);
+              }
+          }
 
+          // then call the worker and copier function on each element of the chunk we were
+          // given. since these functions are called on separate threads,
+          // nothing good can happen if they throw an exception and we are best
+          // off catching it and showing an error message
+          for (unsigned int i=0; i<current_item->n_items; ++i)
+            {
+              try
+                {
+                  if (worker)
+                    worker (current_item->work_items[i],
+                            *scratch_data,
+                            *copy_data);
+                  if (copier)
+                    copier (*copy_data);
+                }
+              catch (const std::exception &exc)
+                {
+                  Threads::internal::handle_std_exception (exc);
+                }
+              catch (...)
+                {
+                  Threads::internal::handle_unknown_exception ();
+                }
+            }
+
+          // finally mark the scratch object as unused again. as above, there
+          // is no need to lock anything here since the object we work on
+          // is thread-local
+          {
+            typename ItemType::ScratchAndCopyDataList &
+            scratch_and_copy_data_list = current_item->scratch_and_copy_data->get();
+
+            for (typename ItemType::ScratchAndCopyDataList::iterator p =
+                   scratch_and_copy_data_list.begin(); p != scratch_and_copy_data_list.end();
+                 ++p)
+              if (p->scratch_data.get() == scratch_data)
+                {
+                  Assert(p->currently_in_use == true, ExcInternalError());
+                  p->currently_in_use = false;
+                }
+          }
 
-    /**
-     * A class that manages calling the
-     * worker function on a number of
-     * parallel threads. Note that it is, in
-     * the TBB notation, a filter that can
-     * run in parallel.
-     */
-    template <typename Iterator,
-             typename ScratchData,
-             typename CopyData>
-    class Worker : public tbb::filter
-    {
-    public:
-                 /**
-                  * Constructor. Takes a
-                  * reference to the object on
-                  * which we will operate as
-                  * well as a pointer to the
-                  * function that will do the
-                  * assembly.
-                  */
-                 Worker (const std_cxx1x::function<void (const Iterator &,
-                       ScratchData &,
-                       CopyData &)> &worker)
-                   :
-                     tbb::filter (/* is_serial= */ false),
-                     worker (worker)
-               {}
-
-
-                 /**
-                  * Work on an item.
-                  */
-                 void *operator () (void *item)
-                 {
-                   // first unpack the current item
-                   typedef
-                     typename IteratorRangeToItemStream<Iterator,ScratchData,CopyData>::ItemType
-                     ItemType;
-
-                   ItemType *current_item = static_cast<ItemType *> (item);
-
-                   // we need to find an unused scratch data object in the list that
-                   // corresponds to the current thread and then mark it as used. if
-                   // we can't find one, create one
-                   //
-                   // as discussed in the discussion of the documentation of the
-                   // IteratorRangeToItemStream::scratch_data variable, there is no
-                   // need to synchronize access to this variable using a mutex
-                   // as long as we have no yield-point in between. this means that
-                   // we can't take an iterator into the list now and expect it to
-                   // still be valid after calling the worker, but we at least do
-                   // not have to lock the following section
-                   ScratchData *scratch_data = 0;
-                   {
-                     typename ItemType::ScratchDataList &
-                       scratch_data_list = current_item->scratch_data->get();
-
-                     // see if there is an unused object. if so, grab it and mark
-                     // it as used
-                     for (typename ItemType::ScratchDataList::iterator
-                         p = scratch_data_list.begin();
-                         p != scratch_data_list.end(); ++p)
-                       if (p->currently_in_use == false)
-                       {
-                         scratch_data = p->scratch_data.get();
-                         p->currently_in_use = true;
-                         break;
-                       }
-
-                     // if no object was found, create one and mark it as used
-                     if (scratch_data == 0)
-                     {
-                       scratch_data = new ScratchData(*current_item->sample_scratch_data);
-
-                       typename ItemType::ScratchDataList::value_type
-                         new_scratch_object (scratch_data, true);
-                       scratch_data_list.push_back (new_scratch_object);
-                     }
-                   }
-
-                   // then call the worker function on each element of the chunk we were
-                   // given. since these worker functions are called on separate threads,
-                   // nothing good can happen if they throw an exception and we are best
-                   // off catching it and showing an error message
-                   for (unsigned int i=0; i<current_item->n_items; ++i)
-                   {
-                     try
-                     {
-                       if (worker)
-                         worker (current_item->work_items[i],
-                             *scratch_data,
-                             current_item->copy_datas[i]);
-                     }
-                     catch (const std::exception &exc)
-                     {
-                       Threads::internal::handle_std_exception (exc);
-                     }
-                     catch (...)
-                     {
-                       Threads::internal::handle_unknown_exception ();
-                     }
-                   }
-
-                   // finally mark the scratch object as unused again. as above, there
-                   // is no need to lock anything here since the object we work on
-                   // is thread-local
-                   {
-                     typename ItemType::ScratchDataList &
-                       scratch_data_list = current_item->scratch_data->get();
-
-                     for (typename ItemType::ScratchDataList::iterator p =
-                         scratch_data_list.begin(); p != scratch_data_list.end();
-                         ++p)
-                       if (p->scratch_data.get() == scratch_data)
-                       {
-                         Assert(p->currently_in_use == true, ExcInternalError());
-                         p->currently_in_use = false;
-                       }
-                   }
-
-
-
-                   // then return the original pointer
-                   // to the now modified object
-                   return item;
-                 }
-
-
-               private:
-                 /**
-                  * Pointer to the function
-                  * that does the assembling
-                  * on the sequence of cells.
-                  */
-                 const std_cxx1x::function<void (const Iterator &,
-                     ScratchData &,
-                     CopyData &)> worker;
-             };
+          // mark current item as usable again
+          current_item->currently_in_use = false;
 
+          // return an invalid item since we are at the end of the
+          // pipeline
+          return 0;
+        }
 
 
-    /**
-     * A class that manages calling the
-     * copier function. Note that it is, in
-     * the TBB notation, a filter that runs
-     * sequentially, ensuring that all items
-     * are copied in the same order in which
-     * they are created.
-     */
-    template <typename Iterator,
-             typename ScratchData,
-             typename CopyData>
-               class Copier : public tbb::filter
-             {
-               public:
-                 /**
-                  * Constructor. Takes a
-                  * reference to the object on
-                  * which we will operate as
-                  * well as a pointer to the
-                  * function that will do the
-                  * copying from the
-                  * additional data object to
-                  * the global matrix or
-                  * similar.
-                  */
-                 Copier (const std_cxx1x::function<void (const CopyData &)> &copier,bool is_serial)
-                   :
-                     tbb::filter (is_serial),
-                     copier (copier)
-               {}
-
-
-                 /**
-                  * Work on a single item.
-                  */
-                 void *operator () (void *item)
-                 {
-                   // first unpack the current item
-                   typedef
-                     typename IteratorRangeToItemStream<Iterator,ScratchData,CopyData>::ItemType
-                     ItemType;
-
-                   ItemType *current_item = static_cast<ItemType *> (item);
-
-                   // initiate copying data. for the same reasons as in the worker class
-                   // above, catch exceptions rather than letting it propagate into
-                   // unknown territories
-                   for (unsigned int i=0; i<current_item->n_items; ++i)
-                   {
-                     try
-                     {
-                       if (copier)
-                         copier (current_item->copy_datas[i]);
-                     }
-                     catch (const std::exception &exc)
-                     {
-                       Threads::internal::handle_std_exception (exc);
-                     }
-                     catch (...)
-                     {
-                       Threads::internal::handle_unknown_exception ();
-                     }
-                   }
-
-
-                   // return an invalid item since we are at the end of the
-                   // pipeline
-                   return 0;
-                 }
-
-
-               private:
-                 /**
-                  * Pointer to the function that does the copying of data.
-                  */
-                 const std_cxx1x::function<void (const CopyData &)> copier;
-             };
+      private:
+        /**
+         * Pointer to the function
+         * that does the assembling
+         * on the sequence of cells.
+         */
+        const std_cxx1x::function<void (const Iterator &,
+                                        ScratchData &,
+                                        CopyData &)> worker;
 
+        /**
+         * Pointer to the function that does the copying from
+         * local contribution to global object.
+         */
+        const std_cxx1x::function<void (const CopyData &)> copier;
+      };
+    }
   }
 
-
 #endif // DEAL_II_WITH_THREADS
 
 
 
   /**
-   * This is the main function of the WorkStream concept, doing work as
-   * described in the introduction to this namespace.
+   * This is one of two main functions of the WorkStream concept, doing work as
+   * described in the introduction to this namespace. It corresponds to
+   * implementation 2 of the paper by Turcksin, Kronbichler and Bangerth.
    *
-   * This is the function that can be used for worker and copier objects that
+   * This function that can be used for worker and copier objects that
    * are either pointers to non-member functions or objects that allow to be
    * called with an operator(), for example objects created by std::bind.
    *
@@ -776,8 +1178,8 @@ namespace WorkStream
            typename Iterator,
            typename ScratchData,
            typename CopyData>
-   void
-   run (const Iterator                          &begin,
+  void
+  run (const Iterator                          &begin,
        const typename identity<Iterator>::type &end,
        Worker                                   worker,
        Copier                                   copier,
@@ -813,29 +1215,29 @@ namespace WorkStream
           {
             // need to check if the function is not the zero function. To
             // check zero-ness, create a C++ function out of it and check that
-             if (static_cast<const std_cxx1x::function<void (const Iterator &,
-                                                             ScratchData &,
-                                                             CopyData &)>& >(worker))
-               worker (i, scratch_data, copy_data);
-             if (static_cast<const std_cxx1x::function<void (const CopyData &)>& >
-                 (copier))
-               copier (copy_data);
+            if (static_cast<const std_cxx1x::function<void (const Iterator &,
+                                                            ScratchData &,
+                                                            CopyData &)>& >(worker))
+              worker (i, scratch_data, copy_data);
+            if (static_cast<const std_cxx1x::function<void (const CopyData &)>& >
+                (copier))
+              copier (copy_data);
           }
       }
 #ifdef DEAL_II_WITH_THREADS
     else // have TBB and use more than one thread
       {
         // create the three stages of the pipeline
-        internal::IteratorRangeToItemStream<Iterator,ScratchData,CopyData>
+        internal::Implementation2::IteratorRangeToItemStream<Iterator,ScratchData,CopyData>
         iterator_range_to_item_stream (begin, end,
-            queue_length,
-            chunk_size,
-            sample_scratch_data,
-            sample_copy_data);
+                                       queue_length,
+                                       chunk_size,
+                                       sample_scratch_data,
+                                       sample_copy_data);
 
 
-        internal::Worker<Iterator, ScratchData, CopyData> worker_filter (worker);
-        internal::Copier<Iterator, ScratchData, CopyData> copier_filter (copier,true);
+        internal::Implementation2::Worker<Iterator, ScratchData, CopyData> worker_filter (worker);
+        internal::Implementation2::Copier<Iterator, ScratchData, CopyData> copier_filter (copier);
 
         // now create a pipeline from these stages
         tbb::pipeline assembly_line;
@@ -852,34 +1254,28 @@ namespace WorkStream
   }
 
 
-
   /**
-   * This is the main function of the WorkStream concept, doing work as
-   * described in the introduction to this namespace.
+   * This is one of two main functions of the WorkStream concept, doing work as
+   * described in the introduction to this namespace. It corresponds to
+   * implementation 3 of the paper by Turcksin, Kronbichler and Bangerth.
+   * As such, it takes not a range of iterators described by a begin
+   * and end iterator, but a "colored" graph of iterators where each
+   * color represents cells for which writing the cell contributions into
+   * the global object does not conflict (in other words, these cells
+   * are not neighbors). Each "color" is represented by std::vectors of cells.
+   * The first argument to this function, a set of sets of cells (which are
+   * represent as a vector of vectors, for efficiency), is typically
+   * constructed by calling GraphColoring::make_graph_coloring().
    *
-   * This is the function that can be used for worker and copier objects that
+   * This function that can be used for worker and copier objects that
    * are either pointers to non-member functions or objects that allow to be
    * called with an operator(), for example objects created by std::bind.
    *
-   * The argument passed as @p end must be convertible to the same type as @p
-   * begin, but doesn't have to be of the same type itself. This allows to
-   * write code like <code>WorkStream().run(dof_handler.begin_active(),
-   * dof_handler.end(), ...</code> where the first is of type
-   * DoFHandler::active_cell_iterator whereas the second is of type
-   * DoFHandler::raw_cell_iterator.
-   *
    * The two data types <tt>ScratchData</tt> and <tt>CopyData</tt> need to
    * have a working copy constructor. <tt>ScratchData</tt> is only used in the
    * <tt>worker</tt> function, while <tt>CopyData</tt> is the object passed
    * from the <tt>worker</tt> to the <tt>copier</tt>.
    *
-   * The @p get_conflict_indices argument, is a function that given an
-   * iterator computes the conflict indices necessary for the
-   * graph_coloring. Graph coloring is necessary to be able to copy the data
-   * in parallel. If the number of elements in some colors is less than @p
-   * chunk_size time multithread_info.n_threads(), these elements are
-   * aggregated and copied serially.
-   *
    * The @p queue_length argument indicates the number of items that can be
    * live at any given time. Each item consists of @p chunk_size elements of
    * the input stream that will be worked on by the worker and copier
@@ -896,15 +1292,12 @@ namespace WorkStream
            typename Iterator,
            typename ScratchData,
            typename CopyData>
-   void
-   run (const Iterator                          &begin,
-       const typename identity<Iterator>::type &end,
+  void
+  run (const std::vector<std::vector<Iterator> > &colored_iterators,
        Worker                                   worker,
        Copier                                   copier,
        const ScratchData                       &sample_scratch_data,
        const CopyData                          &sample_copy_data,
-       const std_cxx1x::function<std::vector<types::global_dof_index> (const Iterator &)>
-                                               &get_conflict_indices,
        const unsigned int queue_length = 2*multithread_info.n_threads(),
        const unsigned int                       chunk_size = 8)
   {
@@ -916,171 +1309,73 @@ namespace WorkStream
             ExcMessage ("The chunk_size must be at least one."));
     (void)chunk_size; // removes -Wunused-parameter warning in optimized mode
 
-    // if no work then skip. (only use
-    // operator!= for iterators since we may
-    // not have an equality comparison
-    // operator)
-    if (!(begin != end))
-      return;
-
     // we want to use TBB if we have support and if it is not disabled at
     // runtime:
- #ifdef DEAL_II_WITH_THREADS
-     if (multithread_info.n_threads()==1)
- #endif
-       {
-         // need to copy the sample since it is
-         // marked const
-         ScratchData scratch_data = sample_scratch_data;
-         CopyData    copy_data    = sample_copy_data;
-
-         for (Iterator i=begin; i!=end; ++i)
-           {
-             if (static_cast<const std_cxx1x::function<void (const Iterator &,
-                                                             ScratchData &,
-                                                             CopyData &)>& >(worker))
-               worker (i, scratch_data, copy_data);
-             if (static_cast<const std_cxx1x::function<void (const CopyData &)>& >
-                 (copier))
-               copier (copy_data);
-           }
-       }
 #ifdef DEAL_II_WITH_THREADS
-     else
-       {
-         // color the graph
-         std::vector<std::vector<Iterator> > coloring = graph_coloring::make_graph_coloring(
-             begin,end,get_conflict_indices);
-
-         // colors that do not have cells, i.e., less than chunk_size times
-         // multithread_info.n_threads(), are gathered and the copier is
-         // called serially.
-         const unsigned int serial_limit(chunk_size*multithread_info.n_threads());
-         std::vector<Iterator> serial_copying;
-
-         for (unsigned int color=0; color<coloring.size(); ++color)
-           {
-             if (coloring[color].size()<serial_limit)
-               serial_copying.insert(serial_copying.end(),coloring[color].begin(),coloring[color].end());
-             else
-               {
-                 // create the three stages of the
-                 // pipeline
-                 internal::IteratorRangeToItemStream<Iterator,ScratchData,CopyData>
-                 iterator_range_to_item_stream (coloring[color].begin(), coloring[color].end(),
-                     queue_length,
-                     chunk_size,
-                     sample_scratch_data,
-                     sample_copy_data);
-
-                 internal::Worker<Iterator, ScratchData, CopyData> worker_filter (worker);
-                 internal::Copier<Iterator, ScratchData, CopyData> copier_filter (copier,false);
-
-                 // now create a pipeline from
-                 // these stages
-                 tbb::pipeline assembly_line;
-                 assembly_line.add_filter (iterator_range_to_item_stream);
-                 assembly_line.add_filter (worker_filter);
-                 assembly_line.add_filter (copier_filter);
-
-                 // and run it
-                 assembly_line.run (queue_length);
-
-                 assembly_line.clear ();
-               }
-           }
-
-         // use the serial copier for all the colors that do not have enough cells
-         if (serial_copying.size()!=0)
-           {
-             internal::IteratorRangeToItemStream<Iterator,ScratchData,CopyData>
-             iterator_range_to_item_stream (serial_copying.begin(), serial_copying.end(),
-                 queue_length,
-                 chunk_size,
-                 sample_scratch_data,
-                 sample_copy_data);
-
-             internal::Worker<Iterator, ScratchData, CopyData> worker_filter (worker);
-             internal::Copier<Iterator, ScratchData, CopyData> copier_filter (copier,true);
-
-             tbb::pipeline assembly_line;
-             assembly_line.add_filter (iterator_range_to_item_stream);
-             assembly_line.add_filter (worker_filter);
-             assembly_line.add_filter (copier_filter);
-
-             // and run it
-             assembly_line.run (queue_length);
-
-             assembly_line.clear ();
-           }
-       }
+    if (multithread_info.n_threads()==1)
 #endif
-  }
-
-
+      {
+        // need to copy the sample since it is marked const
+        ScratchData scratch_data = sample_scratch_data;
+        CopyData    copy_data    = sample_copy_data;
 
-  /**
-   * This is the main function of the WorkStream concept, doing work as
-   * described in the introduction to this namespace.
-   *
-   * This is the function that can be used for worker and copier functions
-   * that are member functions of a class.
-   *
-   * The argument passed as @p end must be convertible to the same type as @p
-   * begin, but doesn't have to be of the same type itself. This allows to
-   * write code like <code>WorkStream().run(dof_handler.begin_active(),
-   * dof_handler.end(), ...</code> where the first is of type
-   * DoFHandler::active_cell_iterator whereas the second is of type
-   * DoFHandler::raw_cell_iterator.
-   *
-   * The @p queue_length argument indicates the number of items that can be
-   * live at any given time. Each item consists of @p chunk_size elements of
-   * the input stream that will be worked on by the worker and copier
-   * functions one after the other on the same thread.
-   *
-   * @note If your data objects are large, or their constructors are
-   * expensive, it is helpful to keep in mind that <tt>queue_length</tt>
-   * copies of the <tt>ScratchData</tt> object and
-   * <tt>queue_length*chunk_size</tt> copies of the <tt>CopyData</tt> object
-   * are generated.
-   */
-  template <typename MainClass,
-           typename Iterator,
-           typename ScratchData,
-           typename CopyData>
-  void
-  run (const Iterator                          &begin,
-       const typename identity<Iterator>::type &end,
-       MainClass                               &main_object,
-       void (MainClass::*worker) (const Iterator &,
-                                  ScratchData &,
-                                  CopyData &),
-       void (MainClass::*copier) (const CopyData &),
-       const ScratchData                    &sample_scratch_data,
-       const CopyData                       &sample_copy_data,
-       const unsigned int queue_length = 2*multithread_info.n_threads(),
-       const unsigned int chunk_size = 8)
-  {
-    // forward to the other function
-    run (begin, end,
-         std_cxx1x::bind (worker,
-                          std_cxx1x::ref (main_object),
-                          std_cxx1x::_1, std_cxx1x::_2, std_cxx1x::_3),
-         std_cxx1x::bind (copier,
-                          std_cxx1x::ref (main_object),
-                          std_cxx1x::_1),
-         sample_scratch_data,
-         sample_copy_data,
-         queue_length,
-         chunk_size);
+        for (unsigned int color=0; color<colored_iterators.size(); ++color)
+          for (typename std::vector<Iterator>::const_iterator p = colored_iterators[color].begin();
+               p != colored_iterators[color].end(); ++p)
+            {
+              // need to check if the function is not the zero function. To
+              // check zero-ness, create a C++ function out of it and check that
+              if (static_cast<const std_cxx1x::function<void (const Iterator &,
+                                                              ScratchData &,
+                                                              CopyData &)>& >(worker))
+                worker (*p, scratch_data, copy_data);
+              if (static_cast<const std_cxx1x::function<void (const CopyData &)>& >(copier))
+                copier (copy_data);
+            }
+      }
+#ifdef DEAL_II_WITH_THREADS
+    else // have TBB and use more than one thread
+      {
+        // loop over the various colors of what we're given
+        for (unsigned int color=0; color<colored_iterators.size(); ++color)
+          if (colored_iterators[color].size() > 0)
+            {
+              // create the three stages of the pipeline
+              internal::Implementation3::IteratorRangeToItemStream<Iterator,ScratchData,CopyData>
+              iterator_range_to_item_stream (colored_iterators[color].begin(),
+                                             colored_iterators[color].end(),
+                                             queue_length,
+                                             chunk_size,
+                                             sample_scratch_data,
+                                             sample_copy_data);
+
+
+              internal::Implementation3::WorkerAndCopier<Iterator, ScratchData, CopyData>
+              worker_and_copier_filter (worker, copier);
+
+              // now create a pipeline from these stages
+              tbb::pipeline assembly_line;
+              assembly_line.add_filter (iterator_range_to_item_stream);
+              assembly_line.add_filter (worker_and_copier_filter);
+
+              // and run it
+              assembly_line.run (queue_length);
+
+              assembly_line.clear ();
+            }
+      }
+#endif
   }
 
 
 
 
+
   /**
-   * This is the main function of the WorkStream concept, doing work as
-   * described in the introduction to this namespace.
+   * This is a variant of one of the two main functions of the WorkStream
+   * concept, doing work as described in the introduction to this namespace.
+   * It corresponds to implementation 2 of the paper by Turcksin, Kronbichler
+   * and Bangerth.
    *
    * This is the function that can be used for worker and copier functions
    * that are member functions of a class.
@@ -1092,13 +1387,6 @@ namespace WorkStream
    * DoFHandler::active_cell_iterator whereas the second is of type
    * DoFHandler::raw_cell_iterator.
    *
-   * The @p get_conflict_indices argument, is a function that given an
-   * iterator computes the conflict indices necessary for the
-   * graph_coloring. Graph coloring is necessary to be able to copy the data
-   * in parallel. If the number of elements in some colors is less than @p
-   * chunk_size time multithread_info.n_threads(), these elements are
-   * aggregated and copied serially.
-   *
    * The @p queue_length argument indicates the number of items that can be
    * live at any given time. Each item consists of @p chunk_size elements of
    * the input stream that will be worked on by the worker and copier
@@ -1124,7 +1412,6 @@ namespace WorkStream
        void (MainClass::*copier) (const CopyData &),
        const ScratchData                    &sample_scratch_data,
        const CopyData                       &sample_copy_data,
-       std::vector<types::global_dof_index> (MainClass::*get_conflict_indices)(const Iterator &),
        const unsigned int queue_length = 2*multithread_info.n_threads(),
        const unsigned int chunk_size = 8)
   {
@@ -1138,8 +1425,6 @@ namespace WorkStream
                           std_cxx1x::_1),
          sample_scratch_data,
          sample_copy_data,
-         std_cxx1x::bind(get_conflict_indices,
-                         std_cxx1x::ref (main_object)),
          queue_length,
          chunk_size);
   }
index c52ddaafd96cd1a879611273b83a2bf7da8d87ec..9484864df3de0313800773cb6d5ec96a99e387cd 100644 (file)
@@ -120,7 +120,7 @@ DEAL_II_NAMESPACE_OPEN
  * results.  However, after all there is no algorithm that
  * accomplishes this within reasonable time. There are situations
  * where the lack of optimality even leads to worse results than with
- * the original, crude, levelwise numering scheme; one of these
+ * the original, crude, levelwise numbering scheme; one of these
  * examples is a mesh of four cells of which always those cells are
  * refined which are neighbors to the center (you may call this mesh a
  * `zoom in' mesh). In one such example the bandwidth was increased by
@@ -345,7 +345,7 @@ DEAL_II_NAMESPACE_OPEN
  *     after DoFHandler::distribute_dofs. The minimum degree algorithm does not
  *     attempt to minimize the bandwidth of a matrix but to minimize the amount
  *     of fill-in a LU decomposition would produce, i.e. the number of places in
- *     the matrix that would be occupied by elements of an LU decompisition that
+ *     the matrix that would be occupied by elements of an LU decomposition that
  *     are not already occupied by elements of the original matrix. The resulting
  *     sparsity pattern obviously has an entirely different structure than the
  *     ones produced by algorithms trying to minimize the bandwidth.
@@ -428,14 +428,11 @@ namespace DoFRenumbering
 
 
   /**
-   * Point based comparator for downstream
-   * directions: it returns @p true if the
-   * second point is downstream of the first
-   * one with respect to the direction given
-   * to the constructor. If the points are
-   * the same with respect to the downstream
-   * direction, the point with the lower DoF
-   * number is considered smaller.
+   * Point based comparator for downstream directions: it returns @p true if
+   * the second point is downstream of the first one with respect to the
+   * direction given to the constructor. If the points are the same with
+   * respect to the downstream direction, the point with the lower DoF number
+   * is considered smaller.
    */
   template <int dim>
   struct ComparePointwiseDownstream
@@ -465,48 +462,29 @@ namespace DoFRenumbering
   };
 
   /**
-   * A namespace for the
-   * implementation of some
-   * renumbering algorithms based
-   * on algorithms implemented in
-   * the Boost Graph Library (BGL)
-   * by Jeremy Siek and others.
+   * A namespace for the implementation of some renumbering algorithms based
+   * on algorithms implemented in the Boost Graph Library (BGL) by Jeremy Siek
+   * and others.
    *
-   * While often slighty slower to
-   * compute, the algorithms using
-   * BOOST often lead to matrices
-   * with smaller bandwidths and
-   * sparse ILUs based on this
-   * numbering are therefore more
-   * efficient.
+   * While often slightly slower to compute, the algorithms using BOOST often
+   * lead to matrices with smaller bandwidths and sparse ILUs based on this
+   * numbering are therefore more efficient.
    *
-   * For a comparison of these
-   * algorithms with the ones
-   * defined in DoFRenumbering, see
-   * the comparison section in the
-   * documentation of the
+   * For a comparison of these algorithms with the ones defined in
+   * DoFRenumbering, see the comparison section in the documentation of the
    * DoFRenumbering namespace.
    */
   namespace boost
   {
     /**
-     * Renumber the degrees of
-     * freedom according to the
-     * Cuthill-McKee method,
-     * eventually using the reverse
-     * numbering scheme.
+     * Renumber the degrees of freedom according to the Cuthill-McKee method,
+     * eventually using the reverse numbering scheme.
      *
-     * See the general
-     * documentation of the
-     * parent class for details
-     * on the different methods.
+     * See the general documentation of the parent class for details on the
+     * different methods.
      *
-     * As an example of the
-     * results of this algorithm,
-     * take a look at the
-     * comparison of various
-     * algorithms in the
-     * documentation of the
+     * As an example of the results of this algorithm, take a look at the
+     * comparison of various algorithms in the documentation of the
      * DoFRenumbering namespace.
      */
     template <class DH>
@@ -516,13 +494,9 @@ namespace DoFRenumbering
                    const bool                       use_constraints    = false);
 
     /**
-     * Computes the renumbering
-     * vector needed by the
-     * Cuthill_McKee() function. Does
-     * not perform the renumbering on
-     * the DoFHandler dofs but
-     * returns the renumbering
-     * vector.
+     * Computes the renumbering vector needed by the Cuthill_McKee()
+     * function. Does not perform the renumbering on the DoFHandler dofs but
+     * returns the renumbering vector.
      */
     template <class DH>
     void
@@ -532,29 +506,16 @@ namespace DoFRenumbering
                            const bool use_constraints    = false);
 
     /**
-     * Renumber the degrees of
-     * freedom based on the BOOST
-     * implementation of the King
-     * algorithm. This often
-     * results in slightly larger
-     * (by a few percent)
-     * bandwidths than the
-     * Cuthill-McKee algorithm,
-     * but sparse ILUs are often
-     * slightly (also by a few
-     * percent) better
-     * preconditioners.
+     * Renumber the degrees of freedom based on the BOOST implementation of
+     * the King algorithm. This often results in slightly larger (by a few
+     * percent) bandwidths than the Cuthill-McKee algorithm, but sparse ILUs
+     * are often slightly (also by a few percent) better preconditioners.
      *
-     * As an example of the
-     * results of this algorithm,
-     * take a look at the
-     * comparison of various
-     * algorithms in the
-     * documentation of the
+     * As an example of the results of this algorithm, take a look at the
+     * comparison of various algorithms in the documentation of the
      * DoFRenumbering namespace.
      *
-     * This algorithm is used in
-     * step-22.
+     * This algorithm is used in step-22.
      */
     template <class DH>
     void
@@ -563,11 +524,8 @@ namespace DoFRenumbering
                    const bool                       use_constraints    = false);
 
     /**
-     * Compute the renumbering
-     * for the King algorithm but
-     * do not actually renumber
-     * the degrees of freedom in
-     * the DoF handler argument.
+     * Compute the renumbering for the King algorithm but do not actually
+     * renumber the degrees of freedom in the DoF handler argument.
      */
     template <class DH>
     void
@@ -577,28 +535,14 @@ namespace DoFRenumbering
                            const bool use_constraints    = false);
 
     /**
-     * Renumber the degrees of
-     * freedom based on the BOOST
-     * implementation of the
-     * minimum degree
-     * algorithm. Unlike the
-     * Cuthill-McKee algorithm,
-     * this algorithm does not
-     * attempt to minimize the
-     * bandwidth of a matrix but
-     * to minimize the amount of
-     * fill-in when doing an LU
-     * decomposition. It may
-     * sometimes yield better
-     * ILUs because of this
-     * property.
+     * Renumber the degrees of freedom based on the BOOST implementation of
+     * the minimum degree algorithm. Unlike the Cuthill-McKee algorithm, this
+     * algorithm does not attempt to minimize the bandwidth of a matrix but to
+     * minimize the amount of fill-in when doing an LU decomposition. It may
+     * sometimes yield better ILUs because of this property.
      *
-     * As an example of the
-     * results of this algorithm,
-     * take a look at the
-     * comparison of various
-     * algorithms in the
-     * documentation of the
+     * As an example of the results of this algorithm, take a look at the
+     * comparison of various algorithms in the documentation of the
      * DoFRenumbering namespace.
      */
     template <class DH>
@@ -608,12 +552,8 @@ namespace DoFRenumbering
                     const bool                       use_constraints    = false);
 
     /**
-     * Compute the renumbering
-     * for the minimum degree
-     * algorithm but do not
-     * actually renumber the
-     * degrees of freedom in the
-     * DoF handler argument.
+     * Compute the renumbering for the minimum degree algorithm but do not
+     * actually renumber the degrees of freedom in the DoF handler argument.
      */
     template <class DH>
     void
@@ -624,21 +564,14 @@ namespace DoFRenumbering
   }
 
   /**
-   * Renumber the degrees of
-   * freedom according to the
-   * Cuthill-McKee method,
-   * eventually using the reverse
-   * numbering scheme.
+   * Renumber the degrees of freedom according to the Cuthill-McKee method,
+   * eventually using the reverse numbering scheme.
    *
-   * See the general documentation
-   * of this class for details on
-   * the different methods.
+   * See the general documentation of this class for details on the different
+   * methods.
    *
-   * As an example of the results
-   * of this algorithm, take a look
-   * at the comparison of various
-   * algorithms in the
-   * documentation of the
+   * As an example of the results of this algorithm, take a look at the
+   * comparison of various algorithms in the documentation of the
    * DoFRenumbering namespace.
    */
   template <class DH>
@@ -649,13 +582,9 @@ namespace DoFRenumbering
                  const std::vector<types::global_dof_index> &starting_indices   = std::vector<types::global_dof_index>());
 
   /**
-   * Computes the renumbering
-   * vector needed by the
-   * Cuthill_McKee() function. Does
-   * not perform the renumbering on
-   * the DoFHandler dofs but
-   * returns the renumbering
-   * vector.
+   * Computes the renumbering vector needed by the Cuthill_McKee()
+   * function. Does not perform the renumbering on the DoFHandler dofs but
+   * returns the renumbering vector.
    */
   template <class DH>
   void
@@ -666,27 +595,17 @@ namespace DoFRenumbering
                          const std::vector<types::global_dof_index> &starting_indices   = std::vector<types::global_dof_index>());
 
   /**
-   * Renumber the degrees of
-   * freedom according to the
-   * Cuthill-McKee method,
-   * eventually using the reverse
-   * numbering scheme, in this case
-   * for a multigrid numbering of
-   * degrees of freedom.
+   * Renumber the degrees of freedom according to the Cuthill-McKee method,
+   * eventually using the reverse numbering scheme, in this case for a
+   * multigrid numbering of degrees of freedom.
    *
-   * You can give a triangulation
-   * level to which this function
-   * is to be applied.  Since with
-   * a level-wise numbering there
-   * are no hanging nodes, no
-   * constraints can be used, so
-   * the respective parameter of
-   * the previous function is
-   * ommitted.
+   * You can give a triangulation level to which this function is to be
+   * applied.  Since with a level-wise numbering there are no hanging nodes,
+   * no constraints can be used, so the respective parameter of the previous
+   * function is omitted.
    *
-   * See the general documentation
-   * of this class for details on
-   * the different methods.
+   * See the general documentation of this class for details on the different
+   * methods.
    */
   template <class DH>
   void
@@ -701,67 +620,34 @@ namespace DoFRenumbering
    */
 
   /**
-   * Sort the degrees of freedom by
-   * vector component. The
-   * numbering within each
-   * component is not touched, so a
-   * degree of freedom with index
-   * $i$, belonging to some
-   * component, and another degree
-   * of freedom with index $j$
-   * belonging to the same
-   * component will be assigned new
-   * indices $n(i)$ and $n(j)$ with
-   * $n(i)<n(j)$ if $i<j$ and
-   * $n(i)>n(j)$ if $i>j$.
+   * Sort the degrees of freedom by vector component. The numbering within
+   * each component is not touched, so a degree of freedom with index $i$,
+   * belonging to some component, and another degree of freedom with index $j$
+   * belonging to the same component will be assigned new indices $n(i)$ and
+   * $n(j)$ with $n(i)<n(j)$ if $i<j$ and $n(i)>n(j)$ if $i>j$.
    *
-   * You can specify that the
-   * components are ordered in a
-   * different way than suggested
-   * by the FESystem object you
-   * use. To this end, set up the
-   * vector @p target_component
-   * such that the entry at index
-   * @p i denotes the number of the
-   * target component for dofs with
-   * component @p i in the
-   * FESystem. Naming the same
-   * target component more than once is
-   * possible and results in a
-   * blocking of several components
-   * into one. This is discussed in
-   * step-22. If you
-   * omit this argument, the same
-   * order as given by the finite
-   * element is used.
+   * You can specify that the components are ordered in a different way than
+   * suggested by the FESystem object you use. To this end, set up the vector
+   * @p target_component such that the entry at index @p i denotes the number
+   * of the target component for dofs with component @p i in the
+   * FESystem. Naming the same target component more than once is possible and
+   * results in a blocking of several components into one. This is discussed
+   * in step-22. If you omit this argument, the same order as given by the
+   * finite element is used.
    *
-   * If one of the base finite
-   * elements from which the global
-   * finite element under
-   * consideration here, is a
-   * non-primitive one, i.e. its
-   * shape functions have more than
-   * one non-zero component, then
-   * it is not possible to
-   * associate these degrees of
-   * freedom with a single vector
-   * component. In this case, they
-   * are associated with the first
-   * vector component to which they
-   * belong.
+   * If one of the base finite elements from which the global finite element
+   * under consideration here, is a non-primitive one, i.e. its shape
+   * functions have more than one non-zero component, then it is not possible
+   * to associate these degrees of freedom with a single vector component. In
+   * this case, they are associated with the first vector component to which
+   * they belong.
    *
-   * For finite elements with only
-   * one component, or a single
-   * non-primitive base element,
-   * this function is the identity
-   * operation.
+   * For finite elements with only one component, or a single non-primitive
+   * base element, this function is the identity operation.
   *
-  * @note A similar function, which
-  * renumbered all levels existed
-  * for MGDoFHandler. This function
-  * was deleted. Thus, you have to
-  * call the level function for each
-  * level now.
+  * @note A similar function, which renumbered all levels existed for
+  * MGDoFHandler. This function was deleted. Thus, you have to call the level
+  * function for each level now.
    */
   template <int dim, int spacedim>
   void
@@ -771,9 +657,8 @@ namespace DoFRenumbering
 
 
   /**
-   * Sort the degrees of freedom by
-   * component. It does the same
-   * thing as the above function.
+   * Sort the degrees of freedom by component. It does the same thing as the
+   * above function.
    */
   template <int dim>
   void
@@ -781,14 +666,10 @@ namespace DoFRenumbering
                   const std::vector<unsigned int> &target_component = std::vector<unsigned int> ());
 
   /**
-   * Sort the degrees of freedom by
-   * component. It does the same
-   * thing as the above function,
-   * only that it does this for one
-   * single level of a multi-level
-   * discretization. The
-   * non-multigrid part of the
-   * MGDoFHandler is not touched.
+   * Sort the degrees of freedom by component. It does the same thing as the
+   * above function, only that it does this for one single level of a
+   * multi-level discretization. The non-multigrid part of the MGDoFHandler is
+   * not touched.
    */
   template <class DH>
   void
@@ -798,14 +679,9 @@ namespace DoFRenumbering
 
 
   /**
-   * Sort the degrees of freedom by
-   * component. It does the same
-   * thing as the previous
-   * functions, but more: it
-   * renumbers not only every level
-   * of the multigrid part, but
-   * also the global,
-   * i.e. non-multigrid components.
+   * Sort the degrees of freedom by component. It does the same thing as the
+   * previous functions, but more: it renumbers not only every level of the
+   * multigrid part, but also the global, i.e. non-multigrid components.
    */
   template <int dim>
   void
@@ -813,13 +689,9 @@ namespace DoFRenumbering
                   const std::vector<unsigned int> &target_component = std::vector<unsigned int>());
 
   /**
-   * Computes the renumbering
-   * vector needed by the
-   * component_wise()
-   * functions. Does not perform
-   * the renumbering on the
-   * DoFHandler dofs but returns
-   * the renumbering vector.
+   * Computes the renumbering vector needed by the component_wise()
+   * functions. Does not perform the renumbering on the DoFHandler dofs but
+   * returns the renumbering vector.
    */
   template <int dim, int spacedim, class ITERATOR, class ENDITERATOR>
   types::global_dof_index
@@ -839,19 +711,11 @@ namespace DoFRenumbering
    */
 
   /**
-   * Sort the degrees of freedom by
-   * vector block. The
-   * numbering within each
-   * block is not touched, so a
-   * degree of freedom with index
-   * $i$, belonging to some
-   * block, and another degree
-   * of freedom with index $j$
-   * belonging to the same
-   * block will be assigned new
-   * indices $n(i)$ and $n(j)$ with
-   * $n(i)<n(j)$ if $i<j$ and
-   * $n(i)>n(j)$ if $i>j$.
+   * Sort the degrees of freedom by vector block. The numbering within each
+   * block is not touched, so a degree of freedom with index $i$, belonging to
+   * some block, and another degree of freedom with index $j$ belonging to the
+   * same block will be assigned new indices $n(i)$ and $n(j)$ with
+   * $n(i)<n(j)$ if $i<j$ and $n(i)>n(j)$ if $i>j$.
    */
   template <int dim, int spacedim>
   void
@@ -859,41 +723,29 @@ namespace DoFRenumbering
 
 
   /**
-   * Sort the degrees of freedom by
-   * block. It does the same
-   * thing as the above function.
-  *
-  * This function only succeeds if each of
-  * the elements in the hp::FECollection
-  * attached to the hp::DoFHandler argument
-  * has exactly the same number of blocks
-  * (see @ref GlossBlock "the glossary" for
-  * more information). Note that this is not
-  * always given: while the hp::FECollection
-  * class ensures that all of its elements
-  * have the same number of vector
-  * components, they need not have the same
-  * number of blocks. At the same time, this
-  * function here needs to match individual
-  * blocks across elements and therefore
-  * requires that elements have the same
-  * number of blocks and that subsequent
-  * blocks in one element have the same
-  * meaning as in another element.
+   * Sort the degrees of freedom by block. It does the same thing as the above
+   * function.
+   *
+   * This function only succeeds if each of the elements in the
+   * hp::FECollection attached to the hp::DoFHandler argument has exactly the
+   * same number of blocks (see @ref GlossBlock "the glossary" for more
+   * information). Note that this is not always given: while the
+   * hp::FECollection class ensures that all of its elements have the same
+   * number of vector components, they need not have the same number of
+   * blocks. At the same time, this function here needs to match individual
+   * blocks across elements and therefore requires that elements have the same
+   * number of blocks and that subsequent blocks in one element have the same
+   * meaning as in another element.
    */
   template <int dim>
   void
   block_wise (hp::DoFHandler<dim> &dof_handler);
 
   /**
-   * Sort the degrees of freedom by
-   * block. It does the same
-   * thing as the above function,
-   * only that it does this for one
-   * single level of a multi-level
-   * discretization. The
-   * non-multigrid part of the
-   * MGDoFHandler is not touched.
+   * Sort the degrees of freedom by block. It does the same thing as the above
+   * function, only that it does this for one single level of a multi-level
+   * discretization. The non-multigrid part of the MGDoFHandler is not
+   * touched.
    */
   template <int dim>
   void
@@ -902,27 +754,18 @@ namespace DoFRenumbering
 
 
   /**
-   * Sort the degrees of freedom by
-   * block. It does the same
-   * thing as the previous
-   * functions, but more: it
-   * renumbers not only every level
-   * of the multigrid part, but
-   * also the global,
-   * i.e. non-multigrid components.
+   * Sort the degrees of freedom by block. It does the same thing as the
+   * previous functions, but more: it renumbers not only every level of the
+   * multigrid part, but also the global, i.e. non-multigrid components.
    */
   template <int dim>
   void
   block_wise (MGDoFHandler<dim> &dof_handler);
 
   /**
-   * Computes the renumbering
-   * vector needed by the
-   * block_wise()
-   * functions. Does not perform
-   * the renumbering on the
-   * DoFHandler dofs but returns
-   * the renumbering vector.
+   * Computes the renumbering vector needed by the block_wise()
+   * functions. Does not perform the renumbering on the DoFHandler dofs but
+   * returns the renumbering vector.
    */
   template <int dim, int spacedim, class ITERATOR, class ENDITERATOR>
   types::global_dof_index
@@ -940,10 +783,9 @@ namespace DoFRenumbering
    */
 
   /**
-   * Renumber the degrees cell by cell in hierarchical order
-   * (also known as z-order). The main usage is that this
-   * guarantees the same ordering independent of the
-   * number of processors involved in a parallel
+   * Renumber the degrees cell by cell in hierarchical order (also known as
+   * z-order). The main usage is that this guarantees the same ordering
+   * independent of the number of processors involved in a parallel
    * distributed computation.
    */
   template <int dim>
@@ -951,16 +793,11 @@ namespace DoFRenumbering
   hierarchical (DoFHandler<dim> &dof_handler);
 
   /**
-   * Cell-wise renumbering. This function takes
-   * the ordered set of cells in
-   * <tt>cell_order</tt>, and makes
-   * sure that all degrees of
-   * freedom in a cell with higher
-   * index are behind all degrees
-   * of freedom of a cell with
-   * lower index. The order inside
-   * a cell block will be the same
-   * as before this renumbering.
+   * Cell-wise renumbering. This function takes the ordered set of cells in
+   * <tt>cell_order</tt>, and makes sure that all degrees of freedom in a cell
+   * with higher index are behind all degrees of freedom of a cell with lower
+   * index. The order inside a cell block will be the same as before this
+   * renumbering.
    */
   template <class DH>
   void
@@ -968,13 +805,9 @@ namespace DoFRenumbering
              const std::vector<typename DH::active_cell_iterator> &cell_order);
 
   /**
-   * Computes the renumbering
-   * vector needed by the
-   * cell_wise() function. Does
-   * not perform the renumbering on
-   * the DoFHandler dofs but
-   * returns the renumbering
-   * vector.
+   * Computes the renumbering vector needed by the cell_wise() function. Does
+   * not perform the renumbering on the DoFHandler dofs but returns the
+   * renumbering vector.
    */
   template <class DH>
   void
@@ -984,9 +817,8 @@ namespace DoFRenumbering
                      const std::vector<typename DH::active_cell_iterator> &cell_order);
 
   /**
-   * Cell-wise renumbering on one
-   * level. See the other function
-   * with the same name.
+   * Cell-wise renumbering on one level. See the other function with the same
+   * name.
    */
   template <class DH>
   void
@@ -995,13 +827,9 @@ namespace DoFRenumbering
              const std::vector<typename DH::level_cell_iterator> &cell_order);
 
   /**
-   * Computes the renumbering
-   * vector needed by the
-   * cell_wise() level renumbering function. Does
-   * not perform the renumbering on
-   * the DoFHandler dofs but
-   * returns the renumbering
-   * vector.
+   * Computes the renumbering vector needed by the cell_wise() level
+   * renumbering function. Does not perform the renumbering on the DoFHandler
+   * dofs but returns the renumbering vector.
    */
   template <class DH>
   void
@@ -1021,47 +849,29 @@ namespace DoFRenumbering
    */
 
   /**
-   * Downstream numbering with respect to a
-   * constant flow direction. If the
-   * additional argument @p
-   * dof_wise_renumbering is set to @p false,
-   * the numbering is performed cell-wise,
-   * otherwise it is performed based on the
+   * Downstream numbering with respect to a constant flow direction. If the
+   * additional argument @p dof_wise_renumbering is set to @p false, the
+   * numbering is performed cell-wise, otherwise it is performed based on the
    * location of the support points.
    *
-   * The cells are sorted such that
-   * the centers of higher numbers
-   * are further downstream with
-   * respect to the constant vector
-   * @p direction than the centers
-   * of lower numbers. Even if this
-   * yields a downstream numbering
-   * with respect to the flux on
-   * the edges for fairly general
-   * grids, this might not be
-   * guaranteed for all meshes.
+   * The cells are sorted such that the centers of higher numbers are further
+   * downstream with respect to the constant vector @p direction than the
+   * centers of lower numbers. Even if this yields a downstream numbering with
+   * respect to the flux on the edges for fairly general grids, this might not
+   * be guaranteed for all meshes.
    *
-   * If the @p dof_wise_renumbering argument
-   * is set to @p false, this function
-   * produces a downstream ordering of the
-   * mesh cells and calls
-   * cell_wise(). Therefore, the output only
-   * makes sense for Discontinuous Galerkin
-   * Finite Elements (all degrees of freedom
-   * have to be associated with the interior
-   * of the cell in that case) in that case.
+   * If the @p dof_wise_renumbering argument is set to @p false, this function
+   * produces a downstream ordering of the mesh cells and calls
+   * cell_wise(). Therefore, the output only makes sense for Discontinuous
+   * Galerkin Finite Elements (all degrees of freedom have to be associated
+   * with the interior of the cell in that case) in that case.
    *
-   * If @p dof_wise_renumbering is set to @p
-   * true, the degrees of freedom are
-   * renumbered based on the support point
-   * location of the individual degrees of
-   * freedom (obviously, the finite element
-   * needs to define support points for this
-   * to work). The numbering of points with
-   * the same position in downstream location
-   * (e.g. those parallel to the flow
-   * direction, or several dofs within a
-   * FESystem) will be unaffected.
+   * If @p dof_wise_renumbering is set to @p true, the degrees of freedom are
+   * renumbered based on the support point location of the individual degrees
+   * of freedom (obviously, the finite element needs to define support points
+   * for this to work). The numbering of points with the same position in
+   * downstream location (e.g. those parallel to the flow direction, or
+   * several dofs within a FESystem) will be unaffected.
    */
   template <class DH>
   void
@@ -1071,11 +881,8 @@ namespace DoFRenumbering
 
 
   /**
-   * Cell-wise downstream numbering
-   * with respect to a constant
-   * flow direction on one
-   * level. See the other function
-   * with the same name.
+   * Cell-wise downstream numbering with respect to a constant flow direction
+   * on one level. See the other function with the same name.
    */
   template <class DH>
   void
@@ -1085,12 +892,11 @@ namespace DoFRenumbering
               const bool         dof_wise_renumbering = false);
 
   /**
-   * This function does the downstream numbering for the individual
-   * levels of a multigrid hierarchy, but not for the global degrees
-   * of freedom.
+   * This function does the downstream numbering for the individual levels of
+   * a multigrid hierarchy, but not for the global degrees of freedom.
    *
-   * @deprecated Call downstream() function that takes a level
-   * argument for each of the levels of the multigrid hierarchy.
+   * @deprecated Call downstream() function that takes a level argument for
+   * each of the levels of the multigrid hierarchy.
    */
   template <int dim, int spacedim>
   void
@@ -1134,13 +940,9 @@ namespace DoFRenumbering
   }
 
   /**
-   * Computes the renumbering
-   * vector needed by the
-   * downstream() function. Does
-   * not perform the renumbering on
-   * the DoFHandler dofs but
-   * returns the renumbering
-   * vector.
+   * Computes the renumbering vector needed by the downstream() function. Does
+   * not perform the renumbering on the DoFHandler dofs but returns the
+   * renumbering vector.
    */
   template <class DH>
   void
@@ -1151,13 +953,9 @@ namespace DoFRenumbering
                       const bool                 dof_wise_renumbering);
 
   /**
-   * Computes the renumbering
-   * vector needed by the
-   * downstream() function. Does
-   * not perform the renumbering on
-   * the DoFHandler dofs but
-   * returns the renumbering
-   * vector.
+   * Computes the renumbering vector needed by the downstream() function. Does
+   * not perform the renumbering on the DoFHandler dofs but returns the
+   * renumbering vector.
    */
   template <class DH>
   void
@@ -1171,16 +969,10 @@ namespace DoFRenumbering
   /**
    * Cell-wise clockwise numbering.
    *
-   * This function produces a
-   * (counter)clockwise ordering of
-   * the mesh cells with respect to
-   * the hub @p center and calls
-   * cell_wise().  Therefore, it
-   * only works with Discontinuous
-   * Galerkin Finite Elements,
-   * i.e. all degrees of freedom
-   * have to be associated with the
-   * interior of the cell.
+   * This function produces a (counter)clockwise ordering of the mesh cells
+   * with respect to the hub @p center and calls cell_wise().  Therefore, it
+   * only works with Discontinuous Galerkin Finite Elements, i.e. all degrees
+   * of freedom have to be associated with the interior of the cell.
    */
   template <class DH>
   void
@@ -1189,9 +981,8 @@ namespace DoFRenumbering
                 const bool        counter = false);
 
   /**
-   * Cell-wise clockwise numbering
-   * on one level. See the other
-   * function with the same name.
+   * Cell-wise clockwise numbering on one level. See the other function with
+   * the same name.
    */
   template <class DH>
   void
@@ -1201,13 +992,9 @@ namespace DoFRenumbering
                 const bool counter = false);
 
   /**
-   * Computes the renumbering
-   * vector needed by the
-   * clockwise_dg() functions. Does
-   * not perform the renumbering on
-   * the DoFHandler dofs but
-   * returns the renumbering
-   * vector.
+   * Computes the renumbering vector needed by the clockwise_dg()
+   * functions. Does not perform the renumbering on the DoFHandler dofs but
+   * returns the renumbering vector.
    */
   template <class DH>
   void
@@ -1226,22 +1013,13 @@ namespace DoFRenumbering
    */
 
   /**
-   * Sort those degrees of freedom
-   * which are tagged with @p true
-   * in the @p selected_dofs array
-   * to the back of the DoF
-   * numbers. The sorting is
-   * stable, i.e. the relative
-   * order within the tagged
-   * degrees of freedom is
-   * preserved, as is the relative
-   * order within the untagged
-   * ones.
+   * Sort those degrees of freedom which are tagged with @p true in the @p
+   * selected_dofs array to the back of the DoF numbers. The sorting is
+   * stable, i.e. the relative order within the tagged degrees of freedom is
+   * preserved, as is the relative order within the untagged ones.
    *
-   * @pre The @p selected_dofs
-   * array must have as many elements as
-   * the @p dof_handler has degrees of
-   * freedom.
+   * @pre The @p selected_dofs array must have as many elements as the @p
+   * dof_handler has degrees of freedom.
    */
   template <class DH>
   void
@@ -1249,14 +1027,14 @@ namespace DoFRenumbering
                            const std::vector<bool> &selected_dofs);
 
   /**
-   * Sort those degrees of freedom which are tagged with @p true in
-   * the @p selected_dofs array on the level @p level to the back of
-   * the DoF numbers. The sorting is stable, i.e. the relative order
-   * within the tagged degrees of freedom is preserved, as is the
-   * relative order within the untagged ones.
+   * Sort those degrees of freedom which are tagged with @p true in the @p
+   * selected_dofs array on the level @p level to the back of the DoF
+   * numbers. The sorting is stable, i.e. the relative order within the tagged
+   * degrees of freedom is preserved, as is the relative order within the
+   * untagged ones.
    *
-   * @pre The @p selected_dofs array must have as many elements as the
-   * @p dof_handler has degrees of freedom on the given level.
+   * @pre The @p selected_dofs array must have as many elements as the @p
+   * dof_handler has degrees of freedom on the given level.
    */
   template <class DH>
   void
@@ -1265,18 +1043,12 @@ namespace DoFRenumbering
                            const unsigned int       level);
 
   /**
-   * Computes the renumbering
-   * vector needed by the
-   * sort_selected_dofs_back()
-   * function. Does not perform the
-   * renumbering on the DoFHandler
-   * dofs but returns the
-   * renumbering vector.
+   * Computes the renumbering vector needed by the sort_selected_dofs_back()
+   * function. Does not perform the renumbering on the DoFHandler dofs but
+   * returns the renumbering vector.
    *
-   * @pre The @p selected_dofs
-   * array must have as many elements as
-   * the @p dof_handler has degrees of
-   * freedom.
+   * @pre The @p selected_dofs array must have as many elements as the @p
+   * dof_handler has degrees of freedom.
    */
   template <class DH>
   void
@@ -1285,19 +1057,12 @@ namespace DoFRenumbering
                                    const std::vector<bool>   &selected_dofs);
 
   /**
-   * Computes the renumbering
-   * vector on each level
-   * needed by the
-   * sort_selected_dofs_back()
-   * function. Does not perform the
-   * renumbering on the MGDoFHandler
-   * dofs but returns the
-   * renumbering vector.
+   * Computes the renumbering vector on each level needed by the
+   * sort_selected_dofs_back() function. Does not perform the renumbering on
+   * the MGDoFHandler dofs but returns the renumbering vector.
    *
-   * @pre The @p selected_dofs
-   * array must have as many elements as
-   * the @p dof_handler has degrees of
-   * freedom on the given level.
+   * @pre The @p selected_dofs array must have as many elements as the @p
+   * dof_handler has degrees of freedom on the given level.
    */
   template <class DH>
   void
@@ -1307,19 +1072,15 @@ namespace DoFRenumbering
                                    const unsigned int         level);
 
   /**
-   * Renumber the degrees of
-   * freedom in a random way.
+   * Renumber the degrees of freedom in a random way.
    */
   template <class DH>
   void
   random (DH &dof_handler);
 
   /**
-   * Computes the renumbering
-   * vector needed by the random()
-   * function. Does not perform the
-   * renumbering on the DoFHandler
-   * dofs but returns the
+   * Computes the renumbering vector needed by the random() function. Does not
+   * perform the renumbering on the DoFHandler dofs but returns the
    * renumbering vector.
    */
   template <class DH>
@@ -1337,38 +1098,21 @@ namespace DoFRenumbering
    */
 
   /**
-   * Renumber the degrees of
-   * freedom such that they are
-   * associated with the subdomain
-   * id of the cells they are
-   * living on, i.e. first all
-   * degrees of freedom that belong
-   * to cells with subdomain zero,
-   * then all with subdomain one,
-   * etc. This is useful when doing
-   * parallel computations after
-   * assigning subdomain ids using
-   * a partitioner (see the
-   * GridTools::partition_triangulation
-   * function for this).
+   * Renumber the degrees of freedom such that they are associated with the
+   * subdomain id of the cells they are living on, i.e. first all degrees of
+   * freedom that belong to cells with subdomain zero, then all with subdomain
+   * one, etc. This is useful when doing parallel computations after assigning
+   * subdomain ids using a partitioner (see the
+   * GridTools::partition_triangulation function for this).
    *
-   * Note that degrees of freedom
-   * associated with faces, edges,
-   * and vertices may be associated
-   * with multiple subdomains if
-   * they are sitting on partition
-   * boundaries. It would therefore
-   * be undefined with which
-   * subdomain they have to be
-   * associated. For this, we use
-   * what we get from the
-   * DoFTools::get_subdomain_association
-   * function.
+   * Note that degrees of freedom associated with faces, edges, and vertices
+   * may be associated with multiple subdomains if they are sitting on
+   * partition boundaries. It would therefore be undefined with which
+   * subdomain they have to be associated. For this, we use what we get from
+   * the DoFTools::get_subdomain_association function.
    *
-   * The algorithm is stable, i.e. if
-   * two dofs i,j have <tt>i<j</tt> and belong
-   * to the same subdomain, then they
-   * will be in this order also after
+   * The algorithm is stable, i.e. if two dofs i,j have <tt>i<j</tt> and
+   * belong to the same subdomain, then they will be in this order also after
    * reordering.
    */
   template <class DH>
@@ -1376,13 +1120,9 @@ namespace DoFRenumbering
   subdomain_wise (DH &dof_handler);
 
   /**
-   * Computes the renumbering
-   * vector needed by the
-   * subdomain_wise()
-   * function. Does not perform the
-   * renumbering on the @p
-   * DoFHandler dofs but returns
-   * the renumbering vector.
+   * Computes the renumbering vector needed by the subdomain_wise()
+   * function. Does not perform the renumbering on the @p DoFHandler dofs but
+   * returns the renumbering vector.
    */
   template <class DH>
   void
index 315e325a4199d04cd7f37465dfcd1fb8b9c9c2c8..a15b9b0e2695f178a69816e0e93b18e85e78ab20 100644 (file)
@@ -128,16 +128,18 @@ struct CellData
     types::boundary_id boundary_id;
     types::material_id material_id;
   };
-                                    /**
-                                     * Manifold identificator of this
-                                     * object. This identificator
-                                     * should be used to identify the
-                                     * manifold to which this object
-                                     * belongs, and from which this
-                                     * object will collect information
-                                     * on how to add points upon
-                                     * refinement.*/
+  /**
+   * Manifold identificator of this object. This identificator should
+   * be used to identify the manifold to which this object belongs,
+   * and from which this object will collect information on how to add
+   * points upon refinement.*/
   types::manifold_id manifold_id;
+
+  /**
+   * Default constructor. Sets the vertex indices to invalid values and the boundary or material
+   * id the default value (zero).
+   */
+  CellData ();
 };
 
 
@@ -3323,6 +3325,19 @@ private:
 
 #ifndef DOXYGEN
 
+
+template <int structdim>
+inline
+CellData<structdim>::CellData ()
+{
+  for (unsigned int i=0; i<GeometryInfo<structdim>::vertices_per_cell; ++i)
+    vertices[i] = numbers::invalid_unsigned_int;
+
+  material_id = 0;
+}
+
+
+
 namespace internal
 {
   namespace Triangulation
index e5f91ad22bca386f38d681220828eee25ae6765e..75d3c5811e2d4e9d349c7ebc1e05e60a09f13d77 100644 (file)
@@ -186,8 +186,11 @@ public:
    * sparsity patterns of the
    * parameter.
    *
-   * The elements of the matrix are
-   * set to zero by this function.
+   * You have to make sure that the lifetime of the sparsity structure is at
+   * least as long as that of this matrix or as long as reinit(const
+   * SparsityPattern &) is not called with a new sparsity structure.
+   *
+   * The elements of the matrix are set to zero by this function.
    */
   virtual void reinit (const BlockSparsityPattern &sparsity);
 //@}
index 79b71911acb1d0dc8cc56f5a34b5cdae54b84b2b..6f9519ae27cb1b2240fee81be3d1812abf91804a 100644 (file)
@@ -453,6 +453,10 @@ namespace SparseMatrixIterators
 
 }
 
+/**
+ * @}
+ */
+
 
 //TODO: Add multithreading to the other vmult functions.
 
@@ -1492,7 +1496,9 @@ public:
    * elements in a row are written in ascending column order.
    */
   template <class STREAM>
-  void print (STREAM &out, bool across=false, bool diagonal_first=true) const;
+  void print (STREAM &out,
+             const bool across = false,
+             const bool diagonal_first = true) const;
 
   /**
    * Print the matrix in the usual format, i.e. as a matrix and not as a list
@@ -1653,10 +1659,6 @@ private:
   template <typename,bool> friend class SparseMatrixIterators::Accessor;
 };
 
-/**
- * @}
- */
-
 #ifndef DOXYGEN
 /*---------------------- Inline functions -----------------------------------*/
 
@@ -2474,13 +2476,15 @@ SparseMatrix<number>::end (const size_type r)
 template <typename number>
 template <class STREAM>
 inline
-void SparseMatrix<number>::print (STREAM &out, bool across, bool diagonal_first) const
+void SparseMatrix<number>::print (STREAM &out,
+                                 const bool across,
+                                 const bool diagonal_first) const
 {
   Assert (cols != 0, ExcNotInitialized());
   Assert (val != 0, ExcNotInitialized());
 
   bool hanging_diagonal = false;
-  number diagonal;
+  number diagonal = number();
 
   for (size_type i=0; i<cols->rows; ++i)
     {
index c221f854c6d38f51b62b73de418443db4cca2012..cabda8f8fd9ac1d054fb83c0eb1ffed3bedf164a 100644 (file)
@@ -49,6 +49,9 @@ ADD_SUBDIRECTORY(integrators)
 ADD_SUBDIRECTORY(matrix_free)
 ADD_SUBDIRECTORY(meshworker)
 
+# A custom target to build the library:
+ADD_CUSTOM_TARGET(build_library)
+
 FOREACH(build ${DEAL_II_BUILD_TYPES})
   STRING(TOLOWER ${build} build_lowercase)
 
@@ -64,6 +67,7 @@ FOREACH(build ${DEAL_II_BUILD_TYPES})
     ${deal_ii_objects_${build_lowercase}}
     )
 
+  ADD_DEPENDENCIES(build_library ${DEAL_II_BASE_NAME}${DEAL_II_${_build}_SUFFIX})
   ADD_DEPENDENCIES(library ${DEAL_II_BASE_NAME}${DEAL_II_${_build}_SUFFIX})
 
   SET_TARGET_PROPERTIES(${DEAL_II_BASE_NAME}${DEAL_II_${build}_SUFFIX}
index f1e611fc5d116891c67d2149f95f17fcf8d06dd6..b000b1435ec744438e34249492ac3720764a2710 100644 (file)
@@ -5629,6 +5629,16 @@ void DataOutBase::write_vtu_main (const std::vector<Patch<dim,spacedim> > &patch
   AssertThrow (out, ExcIO());
 }
 
+template <>
+void DataOutBase::write_svg<1,1> (const std::vector<Patch<1,1> > &patches,
+                             const std::vector<std::string> &data_names,
+                             const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
+                             const SvgFlags &flags,
+                             std::ostream &out)
+{
+  AssertThrow (false, ExcNotImplemented());
+}
+
 
 template <int dim, int spacedim>
 void DataOutBase::write_svg (const std::vector<Patch<dim,spacedim> > &patches,
@@ -5648,9 +5658,7 @@ void DataOutBase::write_svg (const std::vector<Patch<dim,spacedim> > &patches,
   if (flags.margin) margin_in_percent = 5;
 
 
-// determine the bounding box in the model space
-  double x_min, y_min, z_min;
-  double x_max, y_max, z_max;
+  // determine the bounding box in the model space
   double x_dimension, y_dimension, z_dimension;
 
   typename std::vector<Patch<dim,spacedim> >::const_iterator patch = patches.begin();
@@ -5672,12 +5680,12 @@ void DataOutBase::write_svg (const std::vector<Patch<dim,spacedim> > &patches,
           patch->data.n_rows() == 0,
           ExcIndexRange (flags.height_vector, 0, patch->data.n_rows()));
 
-  x_min = projected_point[0];
-  x_max = x_min;
-  y_min = projected_point[1];
-  y_max = y_min;
-  z_min = patch->data.n_rows() != 0 ? patch->data(flags.height_vector,0) : 0;
-  z_max = z_min;
+  double x_min = projected_point[0];
+  double x_max = x_min;
+  double y_min = projected_point[1];
+  double y_max = y_min;
+  double z_min = patch->data.n_rows() != 0 ? patch->data(flags.height_vector,0) : 0;
+  double z_max = z_min;
 
   // iterate over the patches
   for (; patch != patches.end(); ++patch)
@@ -5757,9 +5765,9 @@ void DataOutBase::write_svg (const std::vector<Patch<dim,spacedim> > &patches,
 
   camera_focus = .5 * z_dimension;
 
-  Point<3> camera_position_temp(true);
-  Point<3> camera_direction_temp(true);
-  Point<3> camera_horizontal_temp(true);
+  Point<3> camera_position_temp;
+  Point<3> camera_direction_temp;
+  Point<3> camera_horizontal_temp;
 
   const float angle_factor = 3.14159265 / 180.;
 
index 96cc2fea2281a7d6f06ba500ae78ab308fbf5303..28547f6d1718791f737a21ec165fae3efde191b6 100644 (file)
@@ -111,6 +111,8 @@ for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS
                         const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
                         const TecplotFlags                          &flags,
                         std::ostream                            &out);
+
+#if deal_II_space_dimension >1
   template
   void
   DataOutBase::write_svg (const std::vector<Patch<deal_II_dimension,deal_II_space_dimension> > &patches,
@@ -118,6 +120,7 @@ for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS
                         const std::vector<std_cxx1x::tuple<unsigned int, unsigned int, std::string> > &vector_data_ranges,
                         const SvgFlags                          &flags,
                         std::ostream                            &out);
+#endif
   template
   void
   DataOutBase::write_deal_II_intermediate (const std::vector<Patch<deal_II_dimension,deal_II_space_dimension> > &patches,
index 6ea0b132a673ce80ad2bb5dce51377346ca1b610..a3a92163de8587d687a17439c1dfcf0f3894ad74 100644 (file)
 #  include <sys/sysctl.h>
 #endif
 
-#ifdef DEAL_II_WITH_THREADS
+#if defined(__FreeBSD__)
+#  include <stdlib.h>
+#endif
 
+#ifdef DEAL_II_WITH_THREADS
 #  include <deal.II/base/thread_management.h>
 #  include <tbb/task_scheduler_init.h>
 #endif
index c8c111555857486dad4ba7db8e6733dfa33f4a5f..d35eeb5dcdd4c84501a8b3f12cc370d891f629ac 100644 (file)
@@ -204,7 +204,7 @@ namespace DoFRenumbering
 
     template void
       downstream<DoFHandler<deal_II_dimension> >
-      (DoFHandler<deal_II_dimension>&, const Point<deal_II_dimension>&,
+      (DoFHandler<deal_II_dimension>&, const Point<DoFHandler<deal_II_dimension>::space_dimension>&,
        const bool);
 
     template void
@@ -240,13 +240,13 @@ namespace DoFRenumbering
     template void
       downstream<hp::DoFHandler<deal_II_dimension> >
       (hp::DoFHandler<deal_II_dimension>&,
-       const Point<deal_II_dimension>&,
+       const Point<hp::DoFHandler<deal_II_dimension>::space_dimension>&,
        const bool);
 
     template void
       downstream<MGDoFHandler<deal_II_dimension> >
       (MGDoFHandler<deal_II_dimension>&,
-       const Point<deal_II_dimension>&,
+       const Point<MGDoFHandler<deal_II_dimension>::space_dimension>&,
        const bool);
 
     template void
@@ -281,7 +281,8 @@ namespace DoFRenumbering
 
     template
       void downstream
-      (DoFHandler<deal_II_dimension>&, const unsigned int,
+      (DoFHandler<deal_II_dimension>&, 
+       const unsigned int,
        const Point<deal_II_dimension>&,
        const bool);
 
index f7cb35146870fade32721f56436656e6c564f42e..dc760cd36bb10dadaa348ac3fe1df33231b7085f 100644 (file)
@@ -21,5 +21,5 @@
  * the generated Xcode project.
  */
 
-const int _global_symbol_42 = 42;
+const int global_symbol_42 = 42;
 
index dddb391a86683dec5c13d7e9450fb091d6abd180..84234935054057cc9398c1617939eee18e8bff9d 100644 (file)
@@ -1040,6 +1040,9 @@ namespace TrilinosWrappers
                         const VectorBase   &V,
                         const bool          transpose_left)
     {
+#ifdef DEAL_II_USE_LARGE_INDEX_TYPE
+      Assert(false,ExcNotImplemented())
+#endif
       const bool use_vector = (V.size() == inputright.m() ? true : false);
       if (transpose_left == false)
         {
@@ -1254,6 +1257,9 @@ namespace TrilinosWrappers
                        const SparseMatrix &B,
                        const VectorBase   &V) const
   {
+#ifdef DEAL_II_USE_LARGE_INDEX_TYPE
+    Assert(false,ExcNotImplemented())
+#endif
     internals::perform_mmult (*this, B, C, V, false);
   }
 
@@ -1264,6 +1270,9 @@ namespace TrilinosWrappers
                         const SparseMatrix &B,
                         const VectorBase   &V) const
   {
+#ifdef DEAL_II_USE_LARGE_INDEX_TYPE
+    Assert(false,ExcNotImplemented())
+#endif
     internals::perform_mmult (*this, B, C, V, true);
   }
 
index 23449544a1c402e75dc2a72c66d12805fef904f4..d594c3c3d43d38776922d08938d3221a1728ace6 100644 (file)
@@ -105,8 +105,8 @@ FOREACH(_category ${_categories})
       )
     ADD_DEPENDENCIES(setup_tests setup_tests_${_category})
 
-    # depend on a valid build directory:
-    ADD_DEPENDENCIES(setup_tests_${_category} setup_build_dir)
+    # depend on a compiled library:
+    ADD_DEPENDENCIES(setup_tests_${_category} build_library)
 
     ADD_CUSTOM_TARGET(regen_tests_${_category}
       COMMAND [ ! -d ${_category} ] || ${CMAKE_COMMAND}
diff --git a/deal.II/tests/mesh_converter/meshes/README.txt b/deal.II/tests/mesh_converter/meshes/README.txt
new file mode 100644 (file)
index 0000000..9bc70cb
--- /dev/null
@@ -0,0 +1,66 @@
+====================================================
+MESH CONVERSION TOOL
+v. 1.2
+
+Use: Convert an ABAQUS .inp file to an AVS UCD file.
+
+Author: Jean-Paul Pelteret
+        jppelteret.uct@gmail.com
+        modified by: Timo Heister, heister@clemson.edu
+===================================================
+
+
+This tool is intended to support converting ABAQUS .inp files into a
+format that deal.II can read. To use this tool, you need to configure
+deal.II using the "-DDEAL_II_COMPONENT_MESH_CONVERTER=ON" argument
+when calling 'cmake'. The resulting executable will then be placed in
+the installation directory.
+
+
+
+Cubit features captured by ABAQUS .inp files:
+---------------------------------------------
+1. Multiple material-id's can be defined in the mesh. This is done by specifying blocksets in the pre-processor.
+2. Arbitrary surface boundaries can be defined in the mesh. This is done by specifying sidesets in the pre-processor. In particular, boundaries are not confined to just surfaces (in 3d) - individual element faces can be added to the sideset as well. This is useful when a boundary condition is to be applied on a complex shape boundary that is difficult to define using "surfaces" alone. Similar can be done in 2d.
+
+How to use:
+-----------
+1. It is necessary to save the mesh as an Abaqus input file .inp. In Cubit, this is done as follows:
+1.1. Go to "Analysis setup mode" by clicking on the disc icon in the toolbar on the right.
+1.2. Select "Export Mesh" under "Operation" by clicking on the necessary icon in the toolbar on the right.
+1.3. Select an output file. I have found that in Cubit version 11.0 and 12.0 that it is necessary to click on the browse button and type it in the dialogue that pops up.
+1.4. Select the dimension to output in.
+1.5. Tick the overwrite box.
+1.6. If using Cubit v12.0 onwards, uncheck the box "Export using Cubit ID's". The conversion process will encounter errors if box if left checked.
+1.7. Click apply.
+
+2. Converting the mesh
+IMPORTANT NOTE: From v12.0 onwards, the format of the Abaqus file that Cubit outputted changed. This has been accounted for but an requires a flag to be passed to the conversion program.
+                I describe outputs from before v12.0 as "Abaqus OLD" and v12.0 an on (up to v12.1 at this point) as "Abaqus NEW".
+2.1. Compile the program using 'make' or another suitable tool
+2.2. Run the program with the following command line arguments:
+       './convert_mesh <spatial_dimension>  /path/to/input_file.inp /path/to/output_file.ucd'
+
+       The first input argument is the spatial dimension of the input file, the second is the path to the read-in Abaqus .inp file, and the third is the name of the file to which you wish to write the output AVS .ucd file to.
+       An example of the correct program usage is:
+e.g.  './convert_mesh 3 mesh/3d/test_in.inp mesh/3d/test_out.ucd'
+
+
+Notes:
+------
+1. A few example / test meshes are provided in the directory "mesh". The .inp files that have been generated are all of the Abaqus OLD format except for one - CC.cub has been converted into both the "new" and "old" formats and both subsequently converted into deal.II readable meshes.
+
+Copyright:
+----------
+This program is distributed under the GNU GPL v2.0 copyright. Details can be found at:
+http://www.gnu.org/licenses/gpl-2.0.html
+
+This copyright is extended to the example mesh files distributed with this program, namely
+./mesh/2d/2d_test.*
+./mesh/2d/quad.*
+./mesh/3d/CC.*
+./mesh/3d/CC_cubit_new.*
+./mesh/3d/CC_cubit_old.*
+./mesh/3d/test_cube_1.*
+./mesh/3d/test_cube_pave_1.*
+./mesh/3d/test_cube_two_materials.*
index 57ef944d871a2e78375cb07a0216034fb04950b8..727911cb15a917e748abd5569c70edeaa073bcf7 100644 (file)
@@ -85,11 +85,21 @@ IF (DEAL_II_WITH_P4EST)
   make_quicktest("p4est" ${_mybuild} 10)
 ENDIF()
 
+# Test petsc
+IF (DEAL_II_WITH_PETSC)
+  make_quicktest("step-petsc" ${_mybuild} "")
+ENDIF()
+
+# Test slepc
+IF (DEAL_II_WITH_PETSC AND DEAL_II_WITH_SLEPC)
+  make_quicktest("step-slepc" ${_mybuild} "")
+ENDIF()
 
 # A custom test target:
 ADD_CUSTOM_TARGET(test
   COMMAND ${CMAKE_CTEST_COMMAND} --force-new-ctest-process
   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
   )
+ADD_DEPENDENCIES(test build_library)
 
 MESSAGE(STATUS "Setup quick_tests in ${_mybuild} mode - Done")
diff --git a/deal.II/tests/quick_tests/step-petsc.cc b/deal.II/tests/quick_tests/step-petsc.cc
new file mode 100644 (file)
index 0000000..9290f55
--- /dev/null
@@ -0,0 +1,220 @@
+/* ---------------------------------------------------------------------\r
+ * $Id: step-petsc.cc $\r
+ *\r
+ * Copyright (C) 2013 by the deal.II authors\r
+ *\r
+ * This file is part of the deal.II library.\r
+ *\r
+ * The deal.II library is free software; you can use it, redistribute\r
+ * it, and/or modify it under the terms of the GNU Lesser General\r
+ * Public License as published by the Free Software Foundation; either\r
+ * version 2.1 of the License, or (at your option) any later version.\r
+ * The full text of the license can be found in the file LICENSE at\r
+ * the top level of the deal.II distribution.\r
+ *\r
+ * ---------------------------------------------------------------------\r
+ */\r
+\r
+#include <deal.II/base/logstream.h>\r
+#include <deal.II/base/table_handler.h>\r
+#include <deal.II/base/quadrature_lib.h>\r
+#include <deal.II/base/function.h>\r
+#include <deal.II/base/utilities.h>\r
+#include <deal.II/grid/tria.h>\r
+#include <deal.II/grid/grid_generator.h>\r
+#include <deal.II/grid/tria_accessor.h>\r
+#include <deal.II/grid/tria_iterator.h>\r
+#include <deal.II/dofs/dof_handler.h>\r
+#include <deal.II/dofs/dof_accessor.h>\r
+#include <deal.II/dofs/dof_tools.h>\r
+#include <deal.II/fe/fe_q.h>\r
+#include <deal.II/fe/fe_values.h>\r
+#include <deal.II/numerics/vector_tools.h>\r
+#include <deal.II/numerics/matrix_tools.h>\r
+#include <deal.II/numerics/data_out.h>\r
+#include <deal.II/lac/full_matrix.h>\r
+#include <deal.II/lac/petsc_sparse_matrix.h>\r
+#include <deal.II/lac/petsc_vector.h>\r
+#include <deal.II/lac/petsc_solver.h>\r
+#include <deal.II/lac/petsc_precondition.h>\r
+\r
+#include <fstream>\r
+#include <iostream>\r
+\r
+using namespace dealii;\r
+\r
+// Test that deal.II is working with PETSc by solving the Laplace's\r
+// problem in 2d.\r
+class LaplaceProblem\r
+{\r
+public:\r
+  LaplaceProblem ();\r
+  void run ();\r
+  \r
+private:\r
+  void setup_system ();\r
+  void assemble_system ();\r
+  void solve ();\r
+  \r
+  Triangulation<2> triangulation;\r
+  FE_Q<2>          fe;\r
+  DoFHandler<2>    dof_handler;\r
+  \r
+  PETScWrappers::SparseMatrix A;\r
+  PETScWrappers::Vector       b, x;  \r
+  ConstraintMatrix            constraints;\r
+\r
+  TableHandler output_table;\r
+};\r
+\r
+LaplaceProblem::LaplaceProblem ()\r
+  :\r
+  fe (1),\r
+  dof_handler (triangulation)\r
+{}\r
+\r
+void LaplaceProblem::setup_system ()\r
+{\r
+  dof_handler.distribute_dofs (fe);\r
+\r
+  constraints.clear ();\r
+  DoFTools::make_zero_boundary_constraints (dof_handler, constraints);\r
+  constraints.close ();\r
+  \r
+  A.reinit (dof_handler.n_dofs(), dof_handler.n_dofs(),\r
+           dof_handler.max_couplings_between_dofs());\r
+  b.reinit (dof_handler.n_dofs());\r
+  x.reinit (dof_handler.n_dofs());\r
+\r
+  // some output\r
+  output_table.add_value ("cells", triangulation.n_active_cells());\r
+  output_table.add_value ("dofs",  dof_handler.n_dofs());\r
+}\r
+\r
+void LaplaceProblem::assemble_system ()\r
+{\r
+  QGauss<2> quadrature_formula(2);\r
+  \r
+  FEValues<2> fe_values (fe, quadrature_formula,\r
+                        update_values            | \r
+                        update_gradients         |\r
+                        update_quadrature_points | \r
+                        update_JxW_values);\r
+  \r
+  const unsigned int dofs_per_cell = fe.dofs_per_cell;\r
+  const unsigned int n_q_points    = quadrature_formula.size();\r
+  \r
+  FullMatrix<double> cell_A (dofs_per_cell, dofs_per_cell);\r
+  Vector<double>     cell_b (dofs_per_cell);\r
+  \r
+  std::vector<types::global_dof_index> local_dof_indices (dofs_per_cell);\r
+  \r
+  typename DoFHandler<2>::active_cell_iterator\r
+    cell = dof_handler.begin_active (),\r
+    endc = dof_handler.end ();\r
+  \r
+  for (; cell!=endc; ++cell)\r
+    {\r
+      fe_values.reinit (cell);\r
+      cell_A = 0;\r
+      cell_b = 0;\r
+      \r
+      for (unsigned int q_point=0; q_point<n_q_points; ++q_point)\r
+       for (unsigned int i=0; i<dofs_per_cell; ++i)\r
+         {\r
+           for (unsigned int j=0; j<dofs_per_cell; ++j)\r
+             {\r
+               cell_A (i, j)\r
+                 += \r
+                 fe_values.shape_grad (i, q_point) *\r
+                 fe_values.shape_grad (j, q_point)\r
+                 * \r
+                 fe_values.JxW (q_point);\r
+             }\r
+\r
+           cell_b (i)\r
+             += \r
+             fe_values.shape_value (i, q_point)\r
+             * \r
+             fe_values.JxW (q_point);\r
+         }\r
+      \r
+      cell->get_dof_indices (local_dof_indices);\r
+      \r
+      constraints.distribute_local_to_global (cell_A, local_dof_indices, A);\r
+      constraints.distribute_local_to_global (cell_b, local_dof_indices, b);\r
+    }\r
+  \r
+  A.compress (VectorOperation::add);\r
+  b.compress (VectorOperation::add);\r
+}\r
+\r
+void LaplaceProblem::solve ()\r
+{\r
+  SolverControl solver_control (1e03, 1e-03);\r
+  PETScWrappers::SolverCG cg_solver (solver_control);\r
+  PETScWrappers::PreconditionBlockJacobi preconditioner (A);\r
+  cg_solver.solve (A, x, b, preconditioner);\r
+\r
+  // some output\r
+  // ?\r
+}\r
+\r
+void LaplaceProblem::run ()\r
+{\r
+  GridGenerator::hyper_cube (triangulation, -1, 1);\r
+\r
+  for (unsigned int c=0; c<5; ++c)\r
+    {\r
+      triangulation.refine_global (1);\r
+      setup_system ();\r
+      assemble_system ();\r
+      solve ();\r
+    }\r
+\r
+  // finialise output\r
+  output_table.write_text (std::cout);\r
+  deallog << std::endl;\r
+}\r
+\r
+\r
+int main (int argc, char **argv)\r
+{\r
+  try\r
+    {\r
+      dealii::Utilities::MPI::MPI_InitFinalize mpi_initialization (argc, argv, 1);\r
+      {\r
+        deallog.depth_console (0);\r
+        LaplaceProblem problem;\r
+        problem.run ();\r
+       deallog << "OK" << std::endl;\r
+      }\r
+    }\r
+\r
+  catch (std::exception &exc)\r
+    {\r
+      std::cerr << std::endl << std::endl\r
+                << "----------------------------------------------------"\r
+                << std::endl;\r
+      std::cerr << "Exception on processing: " << std::endl\r
+                << exc.what() << std::endl\r
+                << "Aborting!" << std::endl\r
+                << "----------------------------------------------------"\r
+                << std::endl;\r
+\r
+      return 1;\r
+    }\r
+  catch (...)\r
+    {\r
+      std::cerr << std::endl << std::endl\r
+                << "----------------------------------------------------"\r
+                << std::endl;\r
+      std::cerr << "Unknown exception!" << std::endl\r
+                << "Aborting!" << std::endl\r
+                << "----------------------------------------------------"\r
+                << std::endl;\r
+      return 1;\r
+    }\r
+\r
+  return 0;\r
+}\r
diff --git a/deal.II/tests/quick_tests/step-slepc.cc b/deal.II/tests/quick_tests/step-slepc.cc
new file mode 100644 (file)
index 0000000..e0818b4
--- /dev/null
@@ -0,0 +1,239 @@
+/* ---------------------------------------------------------------------\r
+ * $Id$\r
+ *\r
+ * Copyright (C) 2013 by the deal.II authors\r
+ *\r
+ * This file is part of the deal.II library.\r
+ *\r
+ * The deal.II library is free software; you can use it, redistribute\r
+ * it, and/or modify it under the terms of the GNU Lesser General\r
+ * Public License as published by the Free Software Foundation; either\r
+ * version 2.1 of the License, or (at your option) any later version.\r
+ * The full text of the license can be found in the file LICENSE at\r
+ * the top level of the deal.II distribution.\r
+ *\r
+ * ---------------------------------------------------------------------\r
+ */\r
+\r
+#include <deal.II/base/logstream.h>\r
+#include <deal.II/base/table_handler.h>\r
+#include <deal.II/base/quadrature_lib.h>\r
+#include <deal.II/base/function.h>\r
+#include <deal.II/base/utilities.h>\r
+#include <deal.II/grid/tria.h>\r
+#include <deal.II/grid/grid_generator.h>\r
+#include <deal.II/grid/tria_accessor.h>\r
+#include <deal.II/grid/tria_iterator.h>\r
+#include <deal.II/dofs/dof_handler.h>\r
+#include <deal.II/dofs/dof_accessor.h>\r
+#include <deal.II/dofs/dof_tools.h>\r
+#include <deal.II/fe/fe_q.h>\r
+#include <deal.II/fe/fe_values.h>\r
+#include <deal.II/numerics/vector_tools.h>\r
+#include <deal.II/numerics/matrix_tools.h>\r
+#include <deal.II/numerics/data_out.h>\r
+#include <deal.II/lac/full_matrix.h>\r
+#include <deal.II/lac/petsc_sparse_matrix.h>\r
+#include <deal.II/lac/petsc_vector.h>\r
+#include <deal.II/lac/slepc_solver.h>\r
+\r
+#include <fstream>\r
+#include <iostream>\r
+\r
+using namespace dealii;\r
+\r
+// Test that deal.II is working with SLEPc by solving the Laplace's\r
+// eigenspectrum problem in 2d.\r
+class LaplaceEigenspectrumProblem\r
+{\r
+public:\r
+  LaplaceEigenspectrumProblem ();\r
+  void run ();\r
+  \r
+private:\r
+  void setup_system ();\r
+  void assemble_system ();\r
+  void solve ();\r
+  \r
+  Triangulation<2> triangulation;\r
+  FE_Q<2>          fe;\r
+  DoFHandler<2>    dof_handler;\r
+  \r
+  PETScWrappers::SparseMatrix        A, B;\r
+  std::vector<PETScWrappers::Vector> x;\r
+  std::vector<double>                lambda;  \r
+  ConstraintMatrix                   constraints;\r
+\r
+  TableHandler output_table;\r
+};\r
+\r
+LaplaceEigenspectrumProblem::LaplaceEigenspectrumProblem ()\r
+  :\r
+  fe (1),\r
+  dof_handler (triangulation)\r
+{}\r
+\r
+void LaplaceEigenspectrumProblem::setup_system ()\r
+{\r
+  dof_handler.distribute_dofs (fe);\r
+  \r
+  constraints.clear ();\r
+  DoFTools::make_zero_boundary_constraints (dof_handler, constraints);\r
+  constraints.close ();\r
+  \r
+  A.reinit (dof_handler.n_dofs(), dof_handler.n_dofs(),\r
+           dof_handler.max_couplings_between_dofs());\r
+  B.reinit (dof_handler.n_dofs(), dof_handler.n_dofs(),\r
+           dof_handler.max_couplings_between_dofs());\r
+  \r
+  x.resize (1);\r
+  x[0].reinit (dof_handler.n_dofs ());\r
+  lambda.resize (1);\r
+  lambda[0] = 0.;\r
+\r
+  // some output\r
+  output_table.add_value ("cells", triangulation.n_active_cells());\r
+  output_table.add_value ("dofs",  dof_handler.n_dofs());\r
+}\r
+\r
+void LaplaceEigenspectrumProblem::assemble_system ()\r
+{\r
+  QGauss<2> quadrature_formula(2);\r
+  \r
+  FEValues<2> fe_values (fe, quadrature_formula,\r
+                        update_values            | \r
+                        update_gradients         |\r
+                        update_quadrature_points | \r
+                        update_JxW_values);\r
+  \r
+  const unsigned int dofs_per_cell = fe.dofs_per_cell;\r
+  const unsigned int n_q_points    = quadrature_formula.size();\r
+  \r
+  FullMatrix<double> cell_A (dofs_per_cell, dofs_per_cell);\r
+  FullMatrix<double> cell_B (dofs_per_cell, dofs_per_cell);\r
+  \r
+  std::vector<types::global_dof_index> local_dof_indices (dofs_per_cell);\r
+  \r
+  typename DoFHandler<2>::active_cell_iterator\r
+    cell = dof_handler.begin_active (),\r
+    endc = dof_handler.end ();\r
+  \r
+  for (; cell!=endc; ++cell)\r
+    {\r
+      fe_values.reinit (cell);\r
+      cell_A = 0;\r
+      cell_B = 0;\r
+      \r
+      for (unsigned int q_point=0; q_point<n_q_points; ++q_point)\r
+       for (unsigned int i=0; i<dofs_per_cell; ++i)\r
+         for (unsigned int j=0; j<dofs_per_cell; ++j)\r
+           {\r
+             cell_A (i, j)\r
+               += \r
+               fe_values.shape_grad (i, q_point) *\r
+               fe_values.shape_grad (j, q_point)\r
+               * \r
+               fe_values.JxW (q_point);\r
+             \r
+             cell_B (i, j)\r
+                += \r
+               fe_values.shape_value (i, q_point) *\r
+               fe_values.shape_value (j, q_point)\r
+               * \r
+               fe_values.JxW (q_point);\r
+           }\r
+      \r
+      cell->get_dof_indices (local_dof_indices);\r
+      \r
+      constraints.distribute_local_to_global (cell_A, local_dof_indices, A);\r
+      constraints.distribute_local_to_global (cell_B, local_dof_indices, B);\r
+    }\r
+  \r
+  A.compress (VectorOperation::add);\r
+  B.compress (VectorOperation::add);\r
+}\r
+\r
+void LaplaceEigenspectrumProblem::solve ()\r
+{\r
+  SolverControl solver_control (1000, 1e-03);\r
+  SLEPcWrappers::SolverArnoldi eigensolver (solver_control);\r
+  eigensolver.set_which_eigenpairs (EPS_SMALLEST_REAL);\r
+  eigensolver.solve (A, B, lambda, x, x.size());\r
+\r
+  // some output\r
+  output_table.add_value ("lambda", lambda[0]);\r
+  output_table.add_value ("error", std::fabs(2.-lambda[0]));\r
+}\r
+\r
+void LaplaceEigenspectrumProblem::run ()\r
+{\r
+  const double radius = dealii::numbers::PI/2.;\r
+  GridGenerator::hyper_cube (triangulation, -radius, radius);\r
+\r
+  // set the old eigenvalue to a silly number.\r
+  double old_lambda = 1000;\r
+\r
+  for (unsigned int c=0; c<5; ++c)\r
+    {\r
+      // obtain numerical result\r
+      triangulation.refine_global (1);\r
+      setup_system ();\r
+      assemble_system ();\r
+      solve ();\r
+\r
+      // check energy convergence with previous result\r
+      AssertThrow (lambda[0]<old_lambda, ExcMessage("solution is not converging"));\r
+      old_lambda = lambda[0];\r
+    }\r
+\r
+  // push back analytic result\r
+  output_table.add_value ("cells", "inf");\r
+  output_table.add_value ("dofs",  "inf");\r
+  output_table.add_value ("lambda", 2.);\r
+  output_table.add_value ("error", "-");\r
+\r
+  // finialise output\r
+  output_table.write_text (std::cout);\r
+  deallog << std::endl;\r
+}\r
+\r
+\r
+int main (int argc, char **argv)\r
+{\r
+  try\r
+    {\r
+      dealii::Utilities::MPI::MPI_InitFinalize mpi_initialization (argc, argv, 1);\r
+      {\r
+        deallog.depth_console (0);\r
+        LaplaceEigenspectrumProblem problem;\r
+        problem.run ();\r
+      }\r
+    }\r
+\r
+  catch (std::exception &exc)\r
+    {\r
+      std::cerr << std::endl << std::endl\r
+                << "----------------------------------------------------"\r
+                << std::endl;\r
+      std::cerr << "Exception on processing: " << std::endl\r
+                << exc.what() << std::endl\r
+                << "Aborting!" << std::endl\r
+                << "----------------------------------------------------"\r
+                << std::endl;\r
+\r
+      return 1;\r
+    }\r
+  catch (...)\r
+    {\r
+      std::cerr << std::endl << std::endl\r
+                << "----------------------------------------------------"\r
+                << std::endl;\r
+      std::cerr << "Unknown exception!" << std::endl\r
+                << "Aborting!" << std::endl\r
+                << "----------------------------------------------------"\r
+                << std::endl;\r
+      return 1;\r
+    }\r
+\r
+  return 0;\r
+}\r

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.