From: heltai Date: Thu, 14 Nov 2013 16:20:41 +0000 (+0000) Subject: Merged from trunk. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57969a9ca79cd4d9cf5a2efae7345e920b2fa1a8;p=dealii-svn.git Merged from trunk. git-svn-id: https://svn.dealii.org/branches/branch_manifold_id@31657 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/LICENSE b/deal.II/LICENSE index 8b89d07dc6..4ef81d521a 100644 --- a/deal.II/LICENSE +++ b/deal.II/LICENSE @@ -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. ---------------------------------------------------------------------- diff --git a/deal.II/README b/deal.II/README index 3d878e4de0..c88147149a 100644 --- a/deal.II/README +++ b/deal.II/README @@ -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 install) + $ make test A detailed ReadME can be found at ./doc/readme.html and ./doc/users/cmake.html or at http://www.dealii.org/. diff --git a/deal.II/cmake/checks/check_03_compiler_bugs.cmake b/deal.II/cmake/checks/check_03_compiler_bugs.cmake index f2cc702cb0..a31f9f4824 100644 --- a/deal.II/cmake/checks/check_03_compiler_bugs.cmake +++ b/deal.II/cmake/checks/check_03_compiler_bugs.cmake @@ -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 + template void foo() + { + std::vector data(100); + } + int main() + { + foo(); + } + " + 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. diff --git a/deal.II/cmake/config/CMakeLists.txt b/deal.II/cmake/config/CMakeLists.txt index 8f21d7981e..d6b3bb2a89 100644 --- a/deal.II/cmake/config/CMakeLists.txt +++ b/deal.II/cmake/config/CMakeLists.txt @@ -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: diff --git a/deal.II/cmake/configure/configure_1_lapack.cmake b/deal.II/cmake/configure/configure_1_lapack.cmake index 7c64e0dbe9..ede31c24ba 100644 --- a/deal.II/cmake/configure/configure_1_lapack.cmake +++ b/deal.II/cmake/configure/configure_1_lapack.cmake @@ -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() diff --git a/deal.II/cmake/configure/configure_1_mpi.cmake b/deal.II/cmake/configure/configure_1_mpi.cmake index cd92d2707c..647ea4a81c 100644 --- a/deal.II/cmake/configure/configure_1_mpi.cmake +++ b/deal.II/cmake/configure/configure_1_mpi.cmake @@ -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() diff --git a/deal.II/cmake/configure/configure_1_threads.cmake b/deal.II/cmake/configure/configure_1_threads.cmake index 52e16e0ab8..da49c2eb24 100644 --- a/deal.II/cmake/configure/configure_1_threads.cmake +++ b/deal.II/cmake/configure/configure_1_threads.cmake @@ -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) diff --git a/deal.II/cmake/configure/configure_2_trilinos.cmake b/deal.II/cmake/configure/configure_2_trilinos.cmake index 6693073042..0060efb50b 100644 --- a/deal.II/cmake/configure/configure_2_trilinos.cmake +++ b/deal.II/cmake/configure/configure_2_trilinos.cmake @@ -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") diff --git a/deal.II/cmake/configure/configure_3_petsc.cmake b/deal.II/cmake/configure/configure_3_petsc.cmake index c1c71a4a83..3627e7c49c 100644 --- a/deal.II/cmake/configure/configure_3_petsc.cmake +++ b/deal.II/cmake/configure/configure_3_petsc.cmake @@ -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: diff --git a/deal.II/cmake/configure/configure_boost.cmake b/deal.II/cmake/configure/configure_boost.cmake index b6ed7c3b2c..9571fe9b0e 100644 --- a/deal.II/cmake/configure/configure_boost.cmake +++ b/deal.II/cmake/configure/configure_boost.cmake @@ -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) diff --git a/deal.II/cmake/configure/configure_hdf5.cmake b/deal.II/cmake/configure/configure_hdf5.cmake index a5a40a255a..81e71ceffa 100644 --- a/deal.II/cmake/configure/configure_hdf5.cmake +++ b/deal.II/cmake/configure/configure_hdf5.cmake @@ -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) diff --git a/deal.II/cmake/configure/configure_mumps.cmake b/deal.II/cmake/configure/configure_mumps.cmake index 0739098602..4022f98026 100644 --- a/deal.II/cmake/configure/configure_mumps.cmake +++ b/deal.II/cmake/configure/configure_mumps.cmake @@ -20,13 +20,11 @@ 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) diff --git a/deal.II/cmake/configure/configure_p4est.cmake b/deal.II/cmake/configure/configure_p4est.cmake index de91ef6ea1..4055c0f30c 100644 --- a/deal.II/cmake/configure/configure_p4est.cmake +++ b/deal.II/cmake/configure/configure_p4est.cmake @@ -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) diff --git a/deal.II/cmake/configure/configure_slepc.cmake b/deal.II/cmake/configure/configure_slepc.cmake index bf5415a0ff..fdb87649d0 100644 --- a/deal.II/cmake/configure/configure_slepc.cmake +++ b/deal.II/cmake/configure/configure_slepc.cmake @@ -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) diff --git a/deal.II/cmake/macros/macro_configure_feature.cmake b/deal.II/cmake/macros/macro_configure_feature.cmake index 0ffbf4fb10..4a35b260fd 100644 --- a/deal.II/cmake/macros/macro_configure_feature.cmake +++ b/deal.II/cmake/macros/macro_configure_feature.cmake @@ -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 index de291d39b6..0000000000 --- a/deal.II/cmake/macros/macro_deal_ii_append_libraries.cmake +++ /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() -# - -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() diff --git a/deal.II/cmake/macros/macro_deal_ii_invoke_autopilot.cmake b/deal.II/cmake/macros/macro_deal_ii_invoke_autopilot.cmake index 38c93daec9..29867f93f8 100644 --- a/deal.II/cmake/macros/macro_deal_ii_invoke_autopilot.cmake +++ b/deal.II/cmake/macros/macro_deal_ii_invoke_autopilot.cmake @@ -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 diff --git a/deal.II/cmake/macros/macro_pickup_tests.cmake b/deal.II/cmake/macros/macro_pickup_tests.cmake index 2b0ace6afb..1e840dee4a 100644 --- a/deal.II/cmake/macros/macro_pickup_tests.cmake +++ b/deal.II/cmake/macros/macro_pickup_tests.cmake @@ -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 index 0000000000..a4408fe8d9 --- /dev/null +++ b/deal.II/cmake/macros/macro_register_feature.cmake @@ -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() diff --git a/deal.II/cmake/modules/FindDEALII_LAPACK.cmake b/deal.II/cmake/modules/FindDEALII_LAPACK.cmake index be470cec36..84b6a37d3f 100644 --- a/deal.II/cmake/modules/FindDEALII_LAPACK.cmake +++ b/deal.II/cmake/modules/FindDEALII_LAPACK.cmake @@ -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() diff --git a/deal.II/cmake/modules/FindHDF5.cmake b/deal.II/cmake/modules/FindHDF5.cmake index fec6194dbe..66417e3c33 100644 --- a/deal.II/cmake/modules/FindHDF5.cmake +++ b/deal.II/cmake/modules/FindHDF5.cmake @@ -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} diff --git a/deal.II/cmake/modules/FindPETSC.cmake b/deal.II/cmake/modules/FindPETSC.cmake index 3bd673927c..1a4f3122c4 100644 --- a/deal.II/cmake/modules/FindPETSC.cmake +++ b/deal.II/cmake/modules/FindPETSC.cmake @@ -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" diff --git a/deal.II/cmake/setup_finalize.cmake b/deal.II/cmake/setup_finalize.cmake index 1b3849d7a4..cb01181acf 100644 --- a/deal.II/cmake/setup_finalize.cmake +++ b/deal.II/cmake/setup_finalize.cmake @@ -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: diff --git a/deal.II/contrib/mesh_conversion/README.txt b/deal.II/contrib/mesh_conversion/README.txt index ef00b074b1..10dfeb0360 100644 --- a/deal.II/contrib/mesh_conversion/README.txt +++ b/deal.II/contrib/mesh_conversion/README.txt @@ -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 diff --git a/deal.II/contrib/mesh_conversion/mesh/2d/2d_test.cub b/deal.II/contrib/mesh_conversion/mesh/2d/2d_test.cub old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/2d/2d_test.inp b/deal.II/contrib/mesh_conversion/mesh/2d/2d_test.inp old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/2d/2d_test.ucd b/deal.II/contrib/mesh_conversion/mesh/2d/2d_test.ucd old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/2d/quad.cub b/deal.II/contrib/mesh_conversion/mesh/2d/quad.cub old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/2d/quad.inp b/deal.II/contrib/mesh_conversion/mesh/2d/quad.inp old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/2d/quad.ucd b/deal.II/contrib/mesh_conversion/mesh/2d/quad.ucd old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/CC.cub b/deal.II/contrib/mesh_conversion/mesh/3d/CC.cub old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_new.inp b/deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_new.inp old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_new.ucd b/deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_new.ucd old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_old.inp b/deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_old.inp old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_old.ucd b/deal.II/contrib/mesh_conversion/mesh/3d/CC_cubit_old.ucd old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_1.cub b/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_1.cub old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_1.inp b/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_1.inp old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_1.ucd b/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_1.ucd old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.cub b/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.cub old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.inp b/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.inp old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.ucd b/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_pave_1.ucd old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.cub b/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.cub old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.inp b/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.inp old mode 100755 new mode 100644 diff --git a/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.ucd b/deal.II/contrib/mesh_conversion/mesh/3d/test_cube_two_materials.ucd old mode 100755 new mode 100644 diff --git a/deal.II/doc/README.doc b/deal.II/doc/README.doc index c2b56533b9..b3b1fd0c96 100644 --- a/deal.II/doc/README.doc +++ b/deal.II/doc/README.doc @@ -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 index 948092592f..0000000000 --- a/deal.II/doc/doxygen/doxygen.sty +++ /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} diff --git a/deal.II/doc/doxygen/options.dox.in b/deal.II/doc/doxygen/options.dox.in index e30740fbdd..da03da80a6 100644 --- a/deal.II/doc/doxygen/options.dox.in +++ b/deal.II/doc/doxygen/options.dox.in @@ -1,996 +1,140 @@ -# 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 , where is the value of -# the FILE_VERSION_FILTER tag, and 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 , where -# is the value of the INPUT_FILTER tag, and 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 diff --git a/deal.II/doc/news/changes.h b/deal.II/doc/news/changes.h index b4eab15de5..b5997b9a33 100644 --- a/deal.II/doc/news/changes.h +++ b/deal.II/doc/news/changes.h @@ -94,6 +94,14 @@ inconvenience this causes.
    +
  1. 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. +
    + (Timo Heister, Matthias Maier, 2013/11/08) +
  2. +
  3. 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.

    Specific improvements

      +
    1. 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. +
      + (Wolfgang Bangerth, 2013/11/13) +
    2. + +
    3. New: There is now a framework for coloring graphs, with functions + in namespace GraphColoring. +
      + (Bruno Turcksin, Martin Kronbichler, 2013/11/06) +
    4. +
    5. Fixed: the DerivativeApproximation class was not working correctly when used with parallel vectors. diff --git a/deal.II/doc/news/news.html b/deal.II/doc/news/news.html index 143f96af29..b2eabc101b 100644 --- a/deal.II/doc/news/news.html +++ b/deal.II/doc/news/news.html @@ -36,6 +36,17 @@

      +
      + 2013/11/01: step-42 solves an elasto-plastic contact problem +
      +
      + step-42, written by Jö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. +
      +
      2013/10/01: step-51 implements an HDG method
      diff --git a/deal.II/doc/readme.html b/deal.II/doc/readme.html index 2709045d84..571859682d 100644 --- a/deal.II/doc/readme.html +++ b/deal.II/doc/readme.html @@ -220,12 +220,13 @@ cd build cmake -DCMAKE_INSTALL_PREFIX=/path/to/install/dir ../deal.II make install + make test

      - 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.

      @@ -370,7 +371,7 @@ paths. However, this behavior can be changed using command line switches to the initial call to cmake. A detailed description - can be found here: Detailed build system description. + can be found here: Detailed build system description.

      @@ -534,7 +535,7 @@ for deal.II being able to use them). For details on how to set up deal.II with a non standard BLAS/LAPACK implementation, see the - advanced + advanced setup section in the CMake ReadME.

      @@ -775,7 +776,9 @@ The deal.II cmake 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 - here. + here. You might also be interested in + CMake for user projects or + build system internals.

      diff --git a/deal.II/doc/reports/assemble/assemble.pdf b/deal.II/doc/reports/assemble/assemble.pdf deleted file mode 100644 index 073d8afaf8..0000000000 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 index a8396084d7..0000000000 --- a/deal.II/doc/reports/assemble/assemble.ps +++ /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)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)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::)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 -(iget_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)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)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 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 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 local_dof_indices (dofs_per_cell); -\end{verbatim} -The next step is then to loop over all cells: -\begin{verbatim} - typename DoFHandler::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; iget_dof_indices (local_dof_indices); - - for (unsigned int i=0; i}, 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} 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) 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 index 6d1e056206..0000000000 --- a/deal.II/doc/reports/class-hierarchies/1d-dof.fig +++ /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 index d443b95dac..0000000000 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 index 5670f0c8ea..0000000000 --- a/deal.II/doc/reports/class-hierarchies/1d-tria.eps +++ /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 index 3f46e3c583..0000000000 --- a/deal.II/doc/reports/class-hierarchies/1d-tria.fig +++ /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 index c074ca3b8c..0000000000 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 index 6d185a71a1..0000000000 --- a/deal.II/doc/reports/class-hierarchies/2d-dof.eps +++ /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 index ba45b2c4b9..0000000000 --- a/deal.II/doc/reports/class-hierarchies/2d-dof.fig +++ /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 index caf1cc2217..0000000000 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 index ec95b92e0d..0000000000 --- a/deal.II/doc/reports/class-hierarchies/2d-tria.eps +++ /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 index b5276f025b..0000000000 --- a/deal.II/doc/reports/class-hierarchies/2d-tria.fig +++ /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 index 93a7c4dfe8..0000000000 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 index 7dffc7bcab..0000000000 --- a/deal.II/doc/reports/class-hierarchies/3d-dof.eps +++ /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 index fc810f6e1a..0000000000 --- a/deal.II/doc/reports/class-hierarchies/3d-dof.fig +++ /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 index b69962dbfe..0000000000 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 index 75ea1372b8..0000000000 --- a/deal.II/doc/reports/class-hierarchies/3d-tria.eps +++ /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 index 784a1a4b70..0000000000 --- a/deal.II/doc/reports/class-hierarchies/3d-tria.fig +++ /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 index 6aa0d0b821..0000000000 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 index f2c3ac547e..0000000000 --- a/deal.II/doc/reports/class-hierarchies/index.html +++ /dev/null @@ -1,996 +0,0 @@ - - - - - The deal.II Homepage - - - - - - -

      -Description of the C++ class hierarchy for the -accessor classes -

      - - -

      - Wolfgang Bangerth, 1998, 1999, 2000 -

      - - -

      -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. -

      - -

      -Furthermore, it lists the member functions that can be queried to -obtain information from an iterator. -

      - - -Table of contents - - - - -

      -What iterators and accessors are -

      - -

      -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). -

      - -

      -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. -

      - -

      -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 --> 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 list<T> 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. -

      - -

      -Additionally, there are different versions of the iterators which -behave differently when being incremented or decremented: while -raw iterators let the associated accessor point to any of the -objects it is made for, normal 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. -

      - -

      -Finally, there are active 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. -

      - - - - -

      -The triangulation accessor hierarchy -

      - -

      -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: -

        -
      • TriaAccessor<dim> is a general base class - which is of not much interest. -
      • TriaObjectAccessor<objectdim,spacedim> denotes - an accessor for an object with dimension - objectdim in a spacedim dimensional - space. It is derived from TriaAccessor<spacedim>. -
      • CellAccessor<dim> presents the special - properties that a cell has. It is therefore derived from - TriaObjectAccessor<spacedimdim,spacedim>. -
      -

      - -

      -Their inheritance trees in the different space dimensions therefore -look like this: -

      - -
      - -
      - -
      -

      - -


      - -
      - -
      -

      - -


      - -
      - -
      -

      - -


      - -

      -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. -

      - - - - -

      -Typedefs of the Triangulation class to iterators and accessors -

      - -

      -The Triangulation<1> class declares the following data -types which involve accessors: -

      -    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; 
      -
      -Since lines are cells in one space dimension, all line iterators are -cell iterators as well. -

      - -

      -In two space dimensions, the following types are declared by the -Triangulation<2> class: -

      -    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;    
      -
      -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. -

      - - -

      -In three space dimensions, the following types are declared by the -Triangulation<3> class: -

      -    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;    
      -
      -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. -

      - - - - -

      Functions offered by triangulation accessors

      - -

      -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 -API -documentation of the `grid' classes. These functions can be -accessed by iterator->function() if iterator -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. -

      - -
      -
      - level () -
      - -
      - Return the hierarchical refinement level on - which this object lives. -
      - - -
      - index () -
      - -
      - Return the index within the hierarchical refinement level on - which this object lives. -
      - - -
      - get_triangulation () -
      - -
      - Return a reference to the triangulation to which this object belongs. -
      - - -
      - vertex_index (vertex_number) -
      - -
      - Return the global index of one of the vertices of this object. -
      - - -
      - vertex (vertex_number) -
      - -
      - Return the position of the respective vertex in space. -
      - - -
      - used () -
      - -
      - Return whether the object is used. The return value is - true for all iterators that are either normal iterators - or active iterators, only raw iterators can return - false. Since raw iterators are only used in the - interiors of the library, you will not usually need this function. -
      - - -
      - set_used () / clear_used () -
      - -
      - Set or clear the flag that describes whether the object is used by - the triangulation. Only for internal use. -
      - - -
      - user_flag_set () -
      - -
      - Return whether the user flag is set. -
      - - -
      - set_user_flag () / clear_user_flag () -
      - -
      - Set or clear the flag that might be used by a user to indicate that - something should happen with this object. -
      - - -
      - recursively_set_user_flag () / recursively_clear_user_flag () -
      - -
      - Set or clear the user flag for this cell and all its descendants. -
      - - -
      - user_pointer () -
      - -
      - Query the pointer belonging to this object which may be used by - the user to store additional information with this object. -
      - - -
      - set_user_pointer () / clear_user_pointer () -
      - -
      - Set or clear a pointer belonging to this object which may be used by - the user to store additional information with this object. -
      - - -
      - child (child_number) -
      - -
      - Return an iterator to one of the children of this object. -
      - - -
      - child_index (child_number) -
      - -
      - Return the index of the child within the next finer level of the - triangulation. -
      - - -
      - set_children (index), clear_children () -
      - -
      - Only for internal use. -
      - - -
      - has_children () -
      - -
      - Return whether an object has children, i.e. whether it is further - refined. If it has children, then it is not active. -
      - - -
      - max_refinement_depth () -
      - -
      - Return how often this cell or one of its children is refined. -
      - - -
      - boundary_indicator -
      - -
      - Return the number of the boundary at which this object lies, if the - object has a dimension less than the space dimension. -
      - - -
      - set_boundary_indicator (boundary_id) -
      - -
      - Set the number of the boundary to which this object belongs. -
      - - -
      - at_boundary () -
      - -
      - 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. -
      - - -
      - has_boundary_lines () -
      - -
      - Return whether one of the lines bounding this cell is at the - boundary. For 1d and 2d this is equivalent to at_boundary, - 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.) -
      - - -
      - diameter () -
      - -
      - Return the diameter of the object. -
      - - -
      - center () -
      - -
      - Return the coordinates of the center of the object. -
      - - -
      - barycenter () -
      - -
      - Return the coordinates of the barycenter of the object. -
      - - -
      - measure () -
      - -
      - Return the length, area, or volume of an object, depending on the - dimension of the object. -
      - - -
      - point_inside (point) -
      - -
      - 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.) -
      - - -
      - number_of_children () -
      - -
      - Accumulated number of children and their children. -
      - - -
      - line (line_number) -
      - -
      - Return an iterator to one of the bounding lines of this object. (Only - for iterators to quadrilaterals and hexahedra.) -
      - - -
      - line_index (line_number) -
      - -
      - 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.) -
      - - -
      - quad (quad_number) -
      - -
      - Return an iterator to one of the bounding quadrilaterals of this - object. (Only for iterators to hexahedra.) -
      - - -
      - line_index (line_number) -
      - -
      - 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.) -
      - - -
      - neighbor (neighbor_number) -
      - -
      - Return iterator to one of the neighbors. (Only for cell iterators.) -
      - - -
      - neighbor_index (neighbor_number) / neighbor_level (neighbor_number) -
      - -
      - Return number and level of one of the neighbors. (Only for cell - iterators.) -
      - - -
      - set_neighbor () -
      - -
      - Set a neighbor. Only for internal use. (Only for cell iterators.) -
      - - -
      - neighbor_of_neighbor (neighbor_number) -
      - -
      - Return the how-manyth neighbor the present cell is of the neighbor - specified by the argument. (Only for cell iterators.) -
      - - -
      - at_boundary (face_number) -
      - -
      - Return whether this cell's given face is at the boundary. (Only for - cell iterators.) -
      - - -
      - refine_flag_set () -
      - -
      - Return whether the refinement flag is set or not for the present - cell. (Only for cell iterators.) -
      - - -
      - set_refine_flag () / clear_refine_flag () -
      - -
      - Set/clear the flag indicating refinement. (Only for cell iterators.) -
      - - -
      - coarsen_flag_set () -
      - -
      - Query whether the flag indicating coarsening is set for this - object. (Only for cell iterators.) -
      - - -
      - set_coarsen_flag () / claer_coarsen_flag () -
      - -
      - Set/clear the flag indicating coarsening. (Only for cell iterators.) -
      - - -
      - face (face_number) -
      - -
      - Return an iterator to one of the faces of this cell, if dimension is - greater than one. (Only for cell iterators.) -
      - - -
      - material_id () -
      - -
      - Return the material number of this cell. (Only for cell iterators.) -
      - - -
      - set_material_id (id) -
      - -
      - Set the material number of this cell. (Only for cell iterators.) -
      - - -
      - active () -
      - -
      - Return whether this cell is active, i.e. has no children. (Only for - cell iterators.) -
      -
      - - - - -

      -The degree of freedom accessor hierarchy -

      - -

      -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. - -


      - -
      - -
      -

      - - -


      - -
      - -
      -

      - - -


      - -
      - -
      -

      - -


      - -

      -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. -

      - -

      -For the named reason, it is necessary to derive the -DoFObjectAccessor<1,dim> from the -TriaObjectAccessor<1,dim> class of the -triangulation accessor hierarchy, as well as the -DoFObjectAccessor<2,dim> from the -TriaObjectAccessor<2,dim>. 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 DoFObjectAccessor<1,1> is derived from -CellAccessor<1>, while when in higher dimensions, it is derived -from DoFObjectAccessor<1,dim>; the same applies for -the DoFObjectAccessor<2,dim> 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. -

      - - - -

      -Typedefs of the DoFHandler class to iterators and accessors -

      - -

      -The typedefs done by the DoFHandler class are much alike those done by -the Triangulation class. They could be summarized as follows: -

      - -

      -For one space dimension: -

      -    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; 
      -
      -Since lines are cells in one space dimension, all line iterators are -cell iterators as well. -

      - -

      -For two space dimensions: -

      -    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;    
      -
      -

      - -

      -For three space dimensions: -

      -    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;    
      -
      -

      - - - - -

      Functions offered by degree of freedom accessors

      - -

      -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 -API -documentation of the `DoF' classes. -

      - - -
      -
      - dof_index (dof_number) -
      - -
      - Return the global index of one of the DoFs on this object. -
      - - -
      - set_dof_index (dof_number, index) -
      - -
      - Set the index of a DoF. Only for internal use. -
      - - -
      - vertex_dof_index (vertex_number, dof_number) -
      - -
      - Return the index of one of the DoFs on one of the vertices of this - object. -
      - - -
      - set_vertex_dof_index (...) -
      - -
      - Set the vertex DoF index. Only for internal use. -
      - - -
      - get_dof_indices (vector_of_indices) -
      - -
      - Return a vector of the indices of the DoFs on this object. -
      - - -
      - get_dof_values (global_values, local_values) -
      - -
      - Extract and return the values of the DoFs on this object from a data - vector defined on all DoFs. -
      - - -
      - set_dof_values (local_values, global_values) -
      - -
      - Reverse operation: take values of DoFs on this object, and set them - into a global data vector. -
      - - -
      - distribute_local_to_global (local_source, global_destination) -
      - -
      - 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. -
      - - -
      - get_interpolated_dof_values (global_values, local_interpolation) -
      - -
      - 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.) -
      - - -
      - set_dof_values_by_interpolation (local_values, global_interpolation) -
      - -
      - 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.) -
      -
      - - -
      - -
      -Wolfgang Bangerth, 1998, 1999, 2000 -
      -

       

      - - - - - - - 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 index d64a5e5bc0..0000000000 Binary files a/deal.II/doc/reports/codimension-one/desimone-heltai-manigrasso.pdf and /dev/null differ diff --git a/deal.II/doc/reports/index.html b/deal.II/doc/reports/index.html index f7ca37206e..9a2246b474 100644 --- a/deal.II/doc/reports/index.html +++ b/deal.II/doc/reports/index.html @@ -24,7 +24,7 @@
      • A brief report about the classes involved in the - iterators and accessors used to access cells in the triangulations and the data thereon, such as their geometry, the number of the @@ -35,7 +35,7 @@
      • - A brief report on mapping functions of higher polynomial degrees (by Ralf Hartmann). These allow the realisation of higher order boundary approximations. This report @@ -45,37 +45,30 @@
      • A report on - assembling matrices (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 - in postscript and - PDF format. + Raviart-Thomas elements.
      • A very detailed report on - Nedelec elements (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 postscript version of the report.
      • A report on the - codimension one 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 index 3afa2db8d0..0000000000 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 index f1b1253237..0000000000 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 index f3a7034453..0000000000 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 index 7e40605864..0000000000 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 index c7a3aeaac1..0000000000 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 index e9c184cb6e..0000000000 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 index 0bab0d582f..0000000000 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 index 655453fbd7..0000000000 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 index d16cfa2bcf..0000000000 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 index 273a7d4f6a..0000000000 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 index 7254199946..0000000000 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 index 91c5ff7155..0000000000 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 index 55356960d2..0000000000 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 index 0398f353ff..0000000000 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 index de29603058..0000000000 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 index af5f661ee6..0000000000 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 index 8725fa85d8..0000000000 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 index 4a18c7e7be..0000000000 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 index 3a9ba08d64..0000000000 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 index 99087f0b31..0000000000 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 index 707c7df44a..0000000000 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 index edd5bfb79a..0000000000 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 index 55356960d2..0000000000 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 index cd04d32788..0000000000 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 index e9a9003034..0000000000 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 index 38306f0b72..0000000000 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 index b8d2b5021c..0000000000 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 index aea6c3eed7..0000000000 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 index 2dbcd8168b..0000000000 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 index f8bfdf0abe..0000000000 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 index 65d5c0741f..0000000000 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 index 231b0e86a1..0000000000 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 index ff944c6f4e..0000000000 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 index 3ebda319e9..0000000000 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 index b4a8f2ab8f..0000000000 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 index d95a0f01c1..0000000000 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 index d28a084615..0000000000 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 index b3d5a1a909..0000000000 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 index 86cc1179d7..0000000000 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 index 09dcfea500..0000000000 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 index 1e1590e8a6..0000000000 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 index 0239071c22..0000000000 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 index 15674c4a25..0000000000 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 index ad5cc2d73e..0000000000 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 index 95d2ce653d..0000000000 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 index 6f0caf54da..0000000000 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 index fd296a61dc..0000000000 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 index 2d477dab17..0000000000 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 index 18070cf724..0000000000 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 index 91c5ff7155..0000000000 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 index 5e6633a055..0000000000 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 index 487a4d79de..0000000000 --- a/deal.II/doc/reports/mapping_q/index.html +++ /dev/null @@ -1,867 +0,0 @@ - - - - -No Title - - - - - - - - - -

        -In modified form taken from -
        -
        -Ralf Hartmann -
        -Adaptive Finite Element Methods for the Compressible Euler Equations -
        -PhD thesis, University of Heidelberg, 2002. -

        - - -

        -

        -Higher order Boundary approximation - -
        -

        -Introduction: In many numerical applications the domain - - -$\Omega\subset\mathbb R^d$, -$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 $\hat K$ -to the element - - -$K=\sigma_K(\hat K)$ -in real space, whereas on cells K at the -boundary, i.e. - -$\partial K\cap\Gamma=\emptyset$, -the mappings -$\sigma_K$ -are given by polynomial functions of higher degree. - -

        -Elements with general mapping functions $\sigma_K$. We begin -by first introducing some notation. Let $K\in T_h$ -be a cell of the -triangulation Th with - -$K=\sigma_K(\hat K)$, -where $\sigma_K$is a smooth bijective mapping of the reference element (unit square) -$\hat K$ -to the element K in real space, see Figure -1. -
        -

           - - - -
        Figure: -Mapping $\sigma $ -of reference element $\hat K$ -to the element K in real space.
        -
        - - -\includegraphics[scale=0.3]{figures/m1.ps}
        -
        -
        -

        -In the following and for the sake of simplicity we suppress the letter -K in the subscript and write $\sigma $ -instead of $\sigma_K$. - -

        -Mapping functions of higher polynomial degree. A mapping -function $\sigma $, -that maps the reference element $\hat K$ -to an -arbitrary quadrilateral cell K with straight boundaries, can in -general be represented by a bilinear function, i.e. by a -Q1-mapping. For the case that the cell K includes curved -boundaries it might be necessary to employ polynomial mapping -functions of higher degree. - -

        -Given a degree p>0, a cell $K\in T_h$, -and (p+1)d mapping -support points $p_i\in K$, - - -$i=0,\ldots,(p+1)^d-1$, -we define a -Qp-mapping - -$\sigma\in [Q_p]^d$ -as follows -

        -
        - - - - - - -
         \begin{displaymath}
-\sigma(\hat x)=\sum_{i=0}^{(p+1)^d-1}p_i\phi_i(\hat x).
-\end{displaymath} -(1)
        -
        -

        -Here, $\phi_i$, - - -$i=0,\ldots,(p+1)^d-1$ -denote the Lagrange interpolation -basis functions, that satisfy -

        -
        - - - -\begin{displaymath}\phi_i(\hat p_j)=\delta_{ij}, \quad i,j=0,\ldots,(p+1)^d-1,
-\end{displaymath} -
        -
        -

        -where $\hat p_i$, - - -$i=0,\ldots,(p+1)^d-1$ -denote the Lagrange support -points on the unit cell $\hat K$. -The definition of $\sigma $(1) ensures that each of the unit support points -$\hat p_i$ -is mapped onto the corresponding mapping support points -pi, i.e. -

        -
        - - - - - - -
         \begin{displaymath}
-\sigma(\hat p_i)=p_i, \quad i=0,\ldots,(p+1)^d-1
-\end{displaymath} -(2)
        -
        -

        -Analogous to Lagrange finite elements the unit Lagrange support points -$\hat p_i$ -are equidistantly distributed on $\hat K$ -based on a tensor -product mesh. In the following we only consider the two-dimensional -case, d=2. For that case, Figure 2 -shows the distributions of the unit support points $\hat p_i$, - - -$i=0,\ldots,(p+1)^2-1$ -for degrees - -$p=1,\ldots ,4$. -
        -
           - - - -
        Figure: -Unit support points $\hat p_i$, - - -$0\leq i<(p+1)^2$, -for degrees - -$p=1,\ldots ,4$.
        -
        - - -\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q1_n.eps} - - -\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q2_n.eps} - - -\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q3_n.eps} - - -\includegraphics*[width=2.750cm]{../../../phd/figures/boundary_approximation/mapping/unit_points_q4_n.eps}
        -
        -
        -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 -2. Thus the first 4p points are placed -on the boundary - -$\partial\hat K$ -of the reference cell, i.e. -

        -
        - - - -\begin{displaymath}\hat p_k\in\partial\hat K, \quad k=0,\ldots,4p-1.
-\end{displaymath} -
        -
        -

        -According to (2) these points are mapped to the -mapping support points pk, - -$k=0,\ldots,4p-1$ -that are chosen to be -placed on the boundary of the real cell in approximatively equal -distances, i.e. -

        -
        - - - -\begin{displaymath}p_k\in\partial K, \quad k=0,\ldots,4p-1.
-\end{displaymath} -
        -
        -

        -While the support points pk, - -$k=0,\ldots,4p-1$ -on the boundary are -given by the boundary description of the real cell K, the inner - mapping support points -

        -
        - - - -\begin{displaymath}p_i\in K\setminus\partial K, \quad i=4p,\ldots,(p+1)^2-1
-\end{displaymath} -
        -
        -

        -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 $\sigma $ -for a cell K may degenerate, i.e. the -mapping $\sigma $ -for some cell K may not be bijective. - -

        -Computation of inner support points by smooth transformation. -In the following we will define the positions of the inner mapping -support points so that the mapping does - in all practical cases - not -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. - -

        -The smooth transformation mentioned above is based on solutions to the -Laplace equation that is solved on the reference cell $\hat K$. -Discrete boundary conditions are imposed that are given by the -coordinates of the mapping support points pk, - -$k=0,\ldots,4p-1$, -on -the boundary of the cell K in real space. - -

        -To be more explicite we define a Laplace problem on the unit -cell $\hat K$ -

        -
        - - - - - - -
         \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} -(3)
        -
        -

        -for each component $\sigma_l$, -l=1,2, of the Qp mapping -$\sigma $. -Here, the discrete boundary function - -$g\in [Q_p]^2$ -is -given by -

        -
        - - - - - - -
         \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} -(4)
        -
        -

        -where (pi)l denotes the lth component of the support point pi, -and $\phi_i$ -the corresponding Lagrangian interpolation basis -function. We recall that the numbering of the mapping support points -involves - -$p_k\in\partial K$ -for - -$k=0,\ldots,4p-1$. -Substituting -

        -
        - - - - - - -
         \begin{displaymath}
-\tilde \sigma_l:=\sigma_l-g_l, \quad l=1,2,
-\end{displaymath} -(5)
        -
        -

        -into the Laplace problem (3) yields the -zero boundary value problem, -

        -
        - - - - - - -
         \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} -(6)
        -
        -

        -that is equivalent to the following variational formulation -

        -
        - - - -\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} -
        -
        -

        -Discretisation of this problem -

        -
        - - - -\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} -
        -
        -

        -and recalling definitions (1), (5) and (4) gives -

        -
        - - - - - - -
         \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} -(7)
        -
        -

        -with the matrices - -$S_{ij}\in\mathbb R^{(p-1)^2\times(p-1)^2}$ -and - -$T_{ik}\in\mathbb R^{(p-1)^2\times 4p}$ -given by -

        -
        - - - -\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} -
        -
        -

        -and -

        -
        - - - -\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} -
        -
        -

        -The solutions to problem (7) for l=1,2 are -

        -
        - - - -\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} -
        -
        -

        -that may be written in compact form: -

        -
        - - - - - - -
         \begin{displaymath}
-p_{4p+j}=\sum_{k=0}^{4p-1}c_{jk}p_k, \quad j=0,\ldots,(p-1)^2-1,
-\end{displaymath} -(8)
        -
        -

        -where cjk represents the coefficient -

        -
        - - - - - - -
         \begin{displaymath}
-c_{jk}=-\sum_{i=0}^{(p-1)^2-1}S^{-1}_{ji}T_{ik}.
-\end{displaymath} -(9)
        -
        -

        -of the linear combination (8), that -represents the dependency of the jth inner mapping support point -p4p+j on the support points pk, - -$k=0,\ldots,4p-1$, -that are -placed on the boundary of the cell K. For a fixed degree p, these -coefficients cjk are the same for the mapping of all cells -K in real space because the cjk depend only on the reference -element $\hat K$. -Therefore the coefficients cjk can be -precomputed and result in following linear combinations: - -

        -For p=2 the linear combination turns out to be -

        -
        - - - -\begin{displaymath}p_8=\tfrac{1}{16}\sum_{k=0}^3p_k+\tfrac{3}{16}\sum_{k=4}^7p_k,
-\end{displaymath} -
        -
        -

        -see also Figure 3, left. -
        -
           - - - -
        Figure 3: -Left: Coefficients c8,k for Q2 mapping. Right: Coefficients c12,k for Q3 mapping.
        -
        - - -\includegraphics*[scale=0.4]{figures/m2.ps}
        -
        -
        -For the case that p=3, Figure 3, right, shows the coefficients c12,k of the linear combination for the inner mapping support point p12. The coefficents for the points p13, p14 and p15 can be obtain by rotation of the coefficients. - -

        -Implementation in deal.II. The coefficients cjk, see -(9), are represented in the MappingQ -class by the laplace_on_quad_vector as follows -

        -
        - - - -\begin{displaymath}\mbox{\textit{laplace\_on\_quad\_vector}[j][k]}=c_{jk}
-\end{displaymath} -
        -
        -

        -These coefficients are the same for the mapping of all cells -K in real space because the cjk depend only on the reference -element $\hat K$. -Hence for a given degree p the -laplace_on_quad_vector can be filled by the constructor of -the MappingQ class. This is done by calling the -MappingQ::set_laplace_on_quad_vector function that -includes the coefficients hardcoded for p=2 and p=3 in d=2 dimensions, and a routine for computing the coefficients according to -(9) for all other cases. The mapping support -points $p_i\in K$, - - -$i=0,\ldots,(p+1)^d-1$ -are computed once for each -MappingQ object by the -MappingQ::compute_support_points_laplace that is invoked -by the virtual compute_mapping_support_points function of -the base Mapping class. In -MappingQ::compute_support_points_laplace, first the 4p points on the boundary of the cell are computed (by calling -MappingQ::add_line_support_points), then by calling -MappingQ::apply_laplace_vector the remaining (p-1)2 inner mapping supports points are computed, where -MappingQ::apply_laplace_vector just performs the linear -combination given in (8). -

        - -
        -Ralf Hartmann -
        2001-09-03 -
        - - diff --git a/deal.II/doc/reports/nedelec/nedelec.pdf b/deal.II/doc/reports/nedelec/nedelec.pdf deleted file mode 100644 index 1ed9f2effa..0000000000 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 index 3baeec4a23..0000000000 --- a/deal.II/doc/reports/nedelec/nedelec.ps +++ /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 DI<003FB712C04816E0B8FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC -4980A46D91C7FC2B387EB730>84 D97 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 df50 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 DI<007FB512C0B612F88115FF6C15802603 -F00013C0153FED0FE0ED07F0A2150316F81501A6150316F01507A2ED0FE0ED3FC015FF90 -B61280160015FC5D15C001F0C8FCB0387FFF80B57EA36C5B25337EB22C>80 -D<007FB612FCB712FEA43AFC007E007EA70078153CC71400B3AF90383FFFFCA2497F6D5B -A227337EB22C>84 D<3801FFF0000713FE001F6D7E15E048809038C01FF81407EC01FC38 -1F80000006C77EC8127EA3ECFFFE131F90B5FC1203120F48EB807E383FF800EA7FC090C7 -FC12FE5AA47E007F14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EBFE1F3A003FF0 -07FC27247CA32C>97 DI<903803FFE0011F13F8017F13FE48B5FC48804848C6FCEA -0FF0485A49137E4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB1F806C7E6D13 -3F6C6CEB7F003907FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC21247AA32C>IIIIII<1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFFC080B5FC7EA2 -EA0007B3A8007FB512FCB612FEA36C14FC1F3479B32C>I<387FFFE0B57EA37EEA0003B3 -B3A5007FB61280B712C0A36C158022337BB22C>108 D<397FF01FE039FFF87FFC9038F9 -FFFE01FB7F6CB6FC00019038F03F80ECC01F02807FEC000F5B5BA25BB3267FFFE0B5FCB5 -00F11480A36C01E0140029247FA32C>110 DI<397FF01FE039FFF8FFF801FB13FE -90B6FC6C158000019038F07FC09138801FE091380007F049EB03F85BED01FC491300A216 -FE167EA816FE6D14FCA2ED01F86D13036DEB07F0150F9138801FE09138E07FC091B51280 -160001FB5B01F813F8EC3FC091C8FCAD387FFFE0B57EA36C5B27367FA32C>I114 -D<131E133FA9007FB6FCB71280A36C1500D8003FC8FCB1ED03C0ED07E0A5EC800F011FEB -1FC0ECE07F6DB51280160001035B6D13F89038003FE0232E7EAD2C>116 -D119 D<3A3FFF03FFF048018713F8A3 -6C010313F03A00FC007E005D90387E01F8013F5BEB1F83EC87E090380FCFC0903807EF80 -EB03FF6D90C7FC5C6D5A147C14FE130180903803EF80903807CFC0EB0FC7EC83E090381F -01F0013F7FEB7E00017C137C49137E0001803A7FFF01FFFC1483B514FE6C15FC14012724 -7EA32C>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmsy5 5 1 -/Fe 1 1 df0 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmmi5 5 5 -/Ff 5 115 df104 D<137013F8A213F013E01300A6EA0F80EA1FC0EA31E01261A2EAC3C01203EA0780 -A3EA0F001308EA1E18A213301370EA0FE0EA07800D1D7D9C16>III<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 df0 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 DI 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 D12 D14 -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>II<121EEA7F80A2EAFFC0A4 -EA7F80A2EA1E000A0A798919>I48 -DIII<150E15 -1E153EA2157EA215FE1401A21403EC077E1406140E141CA214381470A214E0EB01C0A2EB -0380EB0700A2130E5BA25B5BA25B5B1201485A90C7FC5A120E120C121C5AA25A5AB8FCA3 -C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<00061403D80780131F01F813FE90B5FC5D5D -5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E03E090387001F8496C7E -49137E497F90C713800006141FC813C0A216E0150FA316F0A3120C127F7F12FFA416E090 -C7121F12FC007015C012780038EC3F80123C6CEC7F00001F14FE6C6C485A6C6C485A3903 -F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>II<1238123C123F90B612FCA316F85A16F016E00078C712010070EC03C0ED -078016005D48141E151C153C5DC8127015F04A5A5D14034A5A92C7FC5C141EA25CA2147C -147814F8A213015C1303A31307A3130F5CA2131FA6133FAA6D5A0107C8FC26407BBD2D> -III<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121E -EA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F80A2EAFFC0A4EA7F80A2 -EA1E00C7FCB3121E127FEAFF80A213C0A4127F121E1200A412011380A3120313005A1206 -120E120C121C5A1230A20A3979A619>I -67 D69 DI78 D<003FB91280A3903AF0007FE001 -018090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00E0A5C816 -00B3B14B7E4B7E0107B612FEA33B3D7DBC42>84 D -86 D97 DI<49B4FC010F13E090383F00F8017C131E4848131F4848137F0007ECFF80485A5B12 -1FA24848EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3003FEC01C07F001F140316806C -6C13076C6C14000003140E6C6C131E6C6C137890383F01F090380FFFC0D901FEC7FC222A -7DA828>IIII<167C903903F801FF903A1FFF078F8090397E0FDE -1F9038F803F83803F001A23B07E000FC0600000F6EC7FC49137E001F147FA8000F147E6D -13FE00075C6C6C485AA23901F803E03903FE0FC026071FFFC8FCEB03F80006CAFC120EA3 -120FA27F7F6CB512E015FE6C6E7E6C15E06C810003813A0FC0001FFC48C7EA01FE003E14 -0048157E825A82A46C5D007C153E007E157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800 -FE017FC7FC90383FFFFC010313C0293D7EA82D>III108 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>IIIIII123 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>IIIII64 DII< -EAFF80B3B3B00934598049>I<167F923801FFC0923803C0F0923807803892380F007892 -381F01FC151E153EA2157E92387C0070170015FCA44A5AA81403A45DA41407A94A5AAA4A -5AA95DA4143FA492C8FCA7143E147EA4147C123800FE13FC5CA2495A5CEA7803387007C0 -383C0F80D80FFEC9FCEA03F82E5C7C7F27>82 D88 DII<197C953807FFC0067F13FC0507B612C0057F15FC040FB50083EBFFE093B526F0001F -13FE030F01FCC8387FFFE092B50080030313FE020F01F0CA381FFFE0DAFFFCCCEA7FFE01 -1F0180963803FFF02601FFF0CEEA1FFFD81FFED013F0D8FF80F503FE00F0D2121E771080 -BF78>100 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmti10 10 68 -/Fm 68 123 df<04FFEB03F003039038E00FFC923A0FC0F01F1E923A3F00783E0F923A7E -01F87C3FDB7C03EBFC7F03FC14F8DA01F813F905F1137EDC01E1133C913B03F00003F000 -A314074B130760A3140F4B130F60A3010FB812C0A3903C001F80001F8000A3023F143F92 -C790C7FCA44A5C027E147EA402FE14FE4A5CA413014A13015FA313034A13035FA313074A -495AA44948495AA44948495AA3001CD9038090C8FC007E90380FC03F013E143E00FE011F -5B133C017C5C3AF8780F01E0D878F0EB07C0273FE003FFC9FC390F8000FC404C82BA33> -11 DI< -DC7FC0EB1FFF922603FFF890B512E0923C0FC07C03F801F0923C1F001E0FC00078033E90 -267E1F80137C4BD9FE3FC712FC03FC027E13015D02014A5A057815F84A48D901F8EB00E0 -1B00A302074A5A5DA31707020F5D5DA3010FBA12C0A21B80903D001F80000FC0001FA21A -3F023F021F150092C75BA2621A7E4A143F027E92C7FC1AFE62A25F02FE027E13014A5FA3 -05FE130301014B5C4A1870A219070401EDE0F001034B15E05CA2F2E1C0010714034D14C3 -4A933803E380F101E7963800FF00010F4A48143C4A94C7FCA34A495A131F5F001CEB0380 -007E90380FC01F013F92CAFC26FE3E1F133E013C5C5E3AF8780F01F0D878F0EB83E03A3F -E003FF80270F8000FECBFC4E4C82BA49>14 D<130FEB1F80133F137FEBFF00485A5BEA03 -F0485A485A485A003EC7FC5A5A12E05A111064B92A>19 D<3901E003C03907F00FE0000F -131F01F813F0001F133FA3000F131F3907B00F6038003000A2017013E0016013C0EBE001 -01C01380000113030180130000035B3807000E000E5B485B485B485B48485A00C05B1C19 -71B92B>34 D39 D<150C151C153815F0EC01E0EC -03C0EC0780EC0F00141E5C147C5C5C495A1303495A5C130F49C7FCA2133EA25BA25BA248 -5AA212035B12075BA2120F5BA2121FA290C8FCA25AA2123EA2127EA2127CA412FC5AAD12 -78A57EA3121C121EA2120E7EA26C7E6C7EA212001E5274BD22>I<140C140E80EC0380A2 -EC01C015E0A2140015F0A21578A4157C153CAB157CA715FCA215F8A21401A215F0A21403 -A215E0A21407A215C0140F1580A2141F1500A2143EA25CA25CA2495AA2495A5C1307495A -91C7FC5B133E133C5B5B485A12035B48C8FC120E5A12785A12C01E527FBD22>I44 D<387FFFF8A2B5FCA214F0150579941E>I<120EEA3F80 -127F12FFA31300127E123C0909778819>I48 D<15181538157815F0140114031407EC0FE0141F14 -7FEB03FF90383FEFC0148FEB1C1F13001580A2143FA21500A25CA2147EA214FEA25CA213 -01A25CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C7FC497EB61280A3 -1D3877B72A>III<16E0ED01F01503A3150716E0A315 -0F16C0A2151F1680A2ED3F00A3157EA2157C15FC5D14015D14035D14075D140F5D141F92 -C7FC143EA25CECF81C153E903801F07EEB03E014C090380780FE130F49485A133EEB7C01 -137801F05BEA01E03803C003EA0FFE391FFFC3F04813FB267C01FF13403AF0003FFFE000 -601307C71400EC0FE05DA3141F5DA3143F92C7FCA4143E141C24487DB72A>I<157F9138 -03FFC0020F13E0EC3F8191387E00F002F81370903903F003F0903807E007EB0FC0EB1F80 -020013E04914C0017E90C7FC13FE5B485AA21203485AA2380FE07E9038E1FF809038E783 -E0391FCE01F09038DC00F813F84848137C5B157E5B485AA390C712FE5A5AA214015D5AA2 -14035DA348495A5D140F5D4A5A6C49C7FC127C147C6C485A6C485A6CB45A6C1380D801FC -C8FC243A76B72A>54 D -III<133C13 -7E13FF5AA313FE13FCEA00701300B2120EEA3F80127F12FFA31300127E123C102477A319 ->I65 D<0107B612FCEFFF8018C0903B00 -0FF0001FF04BEB07F81703021F15FC17014B14FEA2023F1400A24B1301A2147F18FC92C7 -120318F84A140718F04AEC0FE0EF1FC00101ED3F80EF7F004AEB01FEEE07F849B612E05F -9139F80007F0EE01FC01076E7E177F4AEC3F80A2010F16C0171F5CA2131F173F5CA2133F -EF7F805C1800017F5D4C5A91C7485A5F49140FEE1FE0494A5A00014AB45AB748C7FC16F8 -16C037397BB83A>II<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>II<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>I87 D91 -D -93 D<14F8EB07FE90381F871C90383E03FE137CEBF801120148486C5A485A120FEBC001 -001F5CA2EA3F801403007F5C1300A21407485C5AA2140F5D48ECC1C0A2141F1583168014 -3F1587007C017F1300ECFF076C485B9038038F8E391F0F079E3907FE03FC3901F000F022 -2677A42A>97 D<133FEA1FFFA3C67E137EA313FE5BA312015BA312035BA31207EBE0F8EB -E7FE9038EF0F80390FFC07C013F89038F003E013E0D81FC013F0A21380A2123F1300A214 -075A127EA2140F12FE4814E0A2141F15C05AEC3F80A215005C147E5C387801F8007C5B38 -3C03E0383E07C0381E1F80D80FFEC7FCEA01F01C3B77B926>I<147F903803FFC090380F -C1E090381F0070017E13784913383901F801F83803F003120713E0120FD81FC013F091C7 -FC485AA2127F90C8FCA35A5AA45AA3153015381578007C14F0007EEB01E0003EEB03C0EC -0F806CEB3E00380F81F83803FFE0C690C7FC1D2677A426>II<147F903803FFC090 -380FC1E090383F00F0017E13785B485A485A485A120F4913F8001F14F0383F8001EC07E0 -EC1F80397F81FF00EBFFF891C7FC90C8FC5A5AA55AA21530007C14381578007E14F0003E -EB01E0EC03C06CEB0F806CEB3E00380781F83803FFE0C690C7FC1D2677A426>IIIII<150E153F157FA3157E151C1500ABEC1F80EC7FC0ECF1F0 -EB01C090380380F813071401130F130E131EEB1C03133C013813F0A2EB0007A215E0A214 -0FA215C0A2141FA21580A2143FA21500A25CA2147EA214FEA25CA21301A25CA213035C12 -1C387E07E0A238FE0FC05C49C7FCEAF83EEA787CEA3FF0EA0FC0204883B619>IIIII<147F903803FFC090380FC1 -F090381F00F8017E137C5B4848137E4848133E0007143F5B120F485AA2485A157F127F90 -C7FCA215FF5A4814FEA2140115FC5AEC03F8A2EC07F015E0140F007C14C0007EEB1F8000 -3EEB3F00147E6C13F8380F83F03803FFC0C648C7FC202677A42A>I<9039078007C09039 -1FE03FF090393CF0787C903938F8E03E9038787FC00170497EECFF00D9F0FE148013E05C -EA01E113C15CA2D80003143FA25CA20107147FA24A1400A2010F5C5E5C4B5A131F5EEC80 -035E013F495A6E485A5E6E48C7FC017F133EEC70FC90387E3FF0EC0F8001FEC9FCA25BA2 -1201A25BA21203A25B1207B512C0A3293580A42A>II<3903C003F0390FF01FFC391E783C0F381C7C703A3C3EE03F8038383FC0EB7F -800078150000701300151CD8F07E90C7FCEAE0FE5BA2120012015BA312035BA312075BA3 -120F5BA3121F5BA3123F90C9FC120E212679A423>I<14FE903807FF8090380F83C09038 -3E00E04913F00178137001F813F00001130313F0A215E00003EB01C06DC7FC7FEBFFC06C -13F814FE6C7F6D13807F010F13C01300143F141F140F123E127E00FE1480A348EB1F0012 -E06C133E00705B6C5B381E03E06CB45AD801FEC7FC1C267AA422>II<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 -D67 -DII76 D80 D82 D<003FB812FCA3D9C001EB800390C790C7FC007C173E0078171E0070 -170EA300601706A400E01707481703A4C81500B3B0020313C0010FB612F0A338397CB841 ->84 D<1407A24A7EA34A7EA3EC37E0A2EC77F01463A2ECC1F8A201017F1480A290380300 -7EA301067FA2010E80010C131FA2496D7EA2013FB57EA29038300007496D7EA3496D7EA2 -00018149130012036D801207D81FE0903801FF80D8FFF8010F13F8A22D2C7DAB33>97 -D101 DI104 DI107 DIIIII114 D<017F13603901FFE0E0380780F9380E001F481307481303127800 -70130100F01300A315607EA26C14007E127F13C0EA3FFEEBFFE06C13F8000713FE6C7FC6 -1480010F13C01300EC0FE01407EC03F01401A212C01400A37E15E06C1301A26CEB03C06C -EB0780B4EB0F0038F3E01E38E0FFF838C01FE01C2D7BAB26>I<007FB712C0A23A7E003F -C00F007890381F8003007015011600126000E016E0A2481660A5C71500B3A8EC7FE0011F -B57EA22B2B7DAA31>I118 D<3B7FFF800FFFC0A2000790390003FE006C48 -EB01F800015D000015C0017F13036D5C6E48C7FC90381FC0066D6C5A151C6D6C5A903803 -F83001015BECFCE06D6C5AEC7F80A2143F6E7E140F4A7E4A7E1433EC63F8ECE1FCECC0FE -903801807E0103137F49486C7E0106131F4980011C6D7E496D7E0130130301708001F06D -7E000181000781D81FF8491380B46C4913F8A22D2B7DAA33>120 -DI -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmbx10 10.95 41 -/Fo 41 122 df12 -D<130FEB1FC0EB3FE0137FEBFFF05A5AA24813E05A481380481300EA7FFC13F0EAFFC06C -C7FC123C123814126BBF34>19 D44 DII<140F143F5C495A130F48 -B5FCB6FCA313F7EAFE071200B3B3A8007FB612F0A5243C78BB34>49 -D<903803FF80013F13F890B512FE00036E7E4881260FF80F7F261FC0037F4848C67F486C -6D7E6D6D7E487E6D6D7EA26F1380A46C5A6C5A6C5A0007C7FCC8FC4B1300A25E153F5E4B -5AA24B5A5E4A5B4A5B4A48C7FC5D4A5AEC1FE04A5A4A5A9139FF000F80EB01FC495A4948 -EB1F00495AEB1F8049C7FC017E5C5B48B7FC485D5A5A5A5A5AB7FC5EA4293C7BBB34>I< -903801FFE0010F13FE013F6D7E90B612E04801817F3A03FC007FF8D807F06D7E82D80FFC -131F6D80121F7FA56C5A5E6C48133FD801F05CC8FC4B5A5E4B5A4A5B020F5B902607FFFE -C7FC15F815FEEDFFC0D9000113F06E6C7E6F7E6F7E6F7E1780A26F13C0A217E0EA0FC048 -7E487E487E487EA317C0A25D491580127F49491300D83FC0495A6C6C495A3A0FFE01FFF8 -6CB65A6C5DC61580013F49C7FC010313E02B3D7CBB34>II<00071538D80FE0EB01F801FE133F90B6FC5E5E5E5E93 -C7FC5D15F85D15C04AC8FC0180C9FCA9ECFFC0018713FC019F13FF90B67E020113E09039 -F8007FF0496D7E01C06D7E5B6CC77FC8120F82A31780A21207EA1FC0487E487E12FF7FA2 -1700A25B4B5A6C5A01805C6CC7123F6D495AD81FE0495A260FFC075B6CB65A6C92C7FCC6 -14FC013F13F0010790C8FC293D7BBB34>I<16FCA24B7EA24B7EA34B7FA24B7FA34B7FA2 -4B7FA34B7F157C03FC7FEDF87FA2020180EDF03F0203804B7E02078115C082020F814B7E -021F811500824A81023E7F027E81027C7FA202FC814A147F49B77EA34982A2D907E0C700 -1F7F4A80010F835C83011F8391C87E4983133E83017E83017C81B500FC91B612FCA5463F -7CBE4F>65 DI<922607FFC0130E92B500FC131E020702FF133E023FEDC07E91B7EAE1FE01039138 -803FFB499039F80003FF4901C01300013F90C8127F4948151FD9FFF8150F48491507485B -4A1503481701485B18004890CAFC197E5A5B193E127FA349170012FFAC127F7F193EA212 -3FA27F6C187E197C6C7F19FC6C6D16F86C6D150119F06C6D15036C6DED07E0D97FFEED0F -C06D6CED3F80010F01C0ECFF006D01F8EB03FE6D9039FF801FFC010091B55A023F15E002 -071580020002FCC7FC030713C03F407ABE4C>II78 D80 D<003FB912FCA5903BFE003FFE00 -3FD87FF0EE0FFE01C0160349160190C71500197E127EA2007C183EA400FC183F48181FA5 -C81600B3AF010FB712F8A5403D7CBC49>84 D86 D<903807FFC0013F13F8 -48B6FC48812607FE037F260FF8007F6DEB3FF0486C806F7EA36F7EA26C5A6C5AEA01E0C8 -FC153F91B5FC130F137F3901FFFE0F4813E0000F1380381FFE00485A5B485A12FF5BA415 -1F7F007F143F6D90387BFF806C6C01FB13FE391FFF07F36CEBFFE100031480C6EC003FD9 -1FF890C7FC2F2B7DA933>97 D<13FFB5FCA512077EAFEDFFE0020713FC021FEBFF80027F -80DAFF8113F09139FC003FF802F06D7E4A6D7E4A13074A80701380A218C082A318E0AA18 -C0A25E1880A218005E6E5C6E495A6E495A02FCEB7FF0903AFCFF01FFE0496CB55AD9F01F -91C7FCD9E00713FCC7000113C033407DBE3A>I -IIII<903A03FF8007F0013F9038F83FF8499038FCFFFC48B712FE48018313F93A07 -FC007FC34848EB3FE1001FEDF1FC4990381FF0F81700003F81A7001F5DA26D133F000F5D -6C6C495A3A03FF83FF8091B5C7FC4814FC01BF5BD80F03138090CAFCA2487EA27F13F06C -B6FC16F016FC6C15FF17806C16C06C16E01207001F16F0393FE000034848EB003F49EC1F -F800FF150F90C81207A56C6CEC0FF06D141F003F16E001F0147FD81FFC903801FFC02707 -FF800F13006C90B55AC615F8013F14E0010101FCC7FC2F3D7DA834>I<13FFB5FCA51207 -7EAFED1FF8EDFFFE02036D7E4A80DA0FE07F91381F007F023C805C4A6D7E5CA25CA35CB3 -A4B5D8FE0FB512E0A5333F7CBE3A>II<13FFB5FCA512077EB3B3 -AFB512FCA5163F7CBE1D>108 D<01FFD91FF8ECFFC0B590B5010713F80203DAC01F13FE -4A6E487FDA0FE09026F07F077F91261F003FEBF8010007013EDAF9F0806C0178ECFBC04A -6DB4486C7FA24A92C7FC4A5CA34A5CB3A4B5D8FE07B5D8F03FEBFF80A551297CA858>I< -01FFEB1FF8B5EBFFFE02036D7E4A80DA0FE07F91381F007F0007013C806C5B4A6D7E5CA2 -5CA35CB3A4B5D8FE0FB512E0A533297CA83A>II<01FFEBFFE0B5000713FC021FEBFF80027F80DAFF8113F09139FC007FF800 -0701F06D7E6C496D7E4A130F4A6D7E1880A27013C0A38218E0AA4C13C0A318805E18005E -6E5C6E495A6E495A02FCEBFFF0DAFF035B92B55A029F91C7FC028713FC028113C00280C9 -FCACB512FEA5333B7DA83A>II<3901 -FE01FE00FF903807FF804A13E04A13F0EC3F1F91387C3FF8000713F8000313F0EBFFE0A2 -9138C01FF0ED0FE091388007C092C7FCA391C8FCB3A2B6FCA525297DA82B>I<90383FFC -1E48B512BE000714FE5A381FF00F383F800148C7FC007E147EA200FE143EA27E7F6D90C7 -FC13F8EBFFE06C13FF15C06C14F06C806C806C806C80C61580131F1300020713C0140000 -78147F00F8143F151F7EA27E16806C143F6D140001E013FF9038F803FE90B55A15F0D8F8 -7F13C026E00FFEC7FC222B7DA929>IIII -III 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 D48 D<13381378EA01F8121F12FE12E01200B3AB487EB512F8A215 -267BA521>I<13FF000313E0380E03F0381800F848137C48137E00787F12FC6CEB1F80A4 -127CC7FC15005C143E147E147C5C495A495A5C495A010EC7FC5B5B903870018013E0EA01 -80390300030012065A001FB5FC5A485BB5FCA219267DA521>I<13FF000313E0380F01F8 -381C007C0030137E003C133E007E133FA4123CC7123E147E147C5C495AEB07E03801FF80 -91C7FC380001E06D7E147C80143F801580A21238127C12FEA21500485B0078133E00705B -6C5B381F01F03807FFC0C690C7FC19277DA521>I<0018130C001F137CEBFFF85C5C1480 -D819FCC7FC0018C8FCA7137F3819FFE0381F81F0381E0078001C7F0018133EC7FC80A215 -80A21230127C12FCA3150012F00060133E127000305B001C5B380F03E03803FFC0C648C7 -FC19277DA521>53 D<1238127C12FEA3127C12381200AB1238127C12FC12FEA2127E123E -1206A3120CA31218A212301270122007247B9813>59 D61 D91 -D93 D<5AEA0380EA07C0EA0FE0EA1EF0EA3C -78EA701CEAE00EEAC0060F0978A721>I99 D<120EEA3F80A5EA0E00C7FCA7EA078012FF -A2121F120FB3121FEAFFF8A20D287EA713>105 D108 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 D64 D<4AB41308020FEBE01891397F80F038903A01F8001870D903E0EB0CF0D90F -80130749C71203013E15E05B491401485A484815C0485A120F5B001F168090C8FC4892C7 -FCA2127EA4127C12FCA21606007C5DA35E007E5D123E5E6C5D6C6C495A00074AC7FCD803 -E0130E6C6C13383900FE01F090383FFFC0D907FCC8FC2D2A7DA830>67 -D<903B3FFFF01FFFF8A2D901FCC7EAFE004A5CA2010314015F5CA2010714035F5CA2010F -14075F5CA2011F140F91B65AA2913880000F013F141F5F91C7FCA249143F94C7FC137EA2 -01FE5C167E5BA2000115FE5E5BA200031401B539C07FFFE0A235287DA736>72 -D<90263FFFF0EB7FF8A2D901FCC7EA1FC04AEC1E005F010315704C5A4AEB03804CC7FC01 -07141C5E4A13E04B5A010FEB0780030EC8FC4A5A157C011F13FE14C3EC877F149E90393F -B83F8014F09138C01FC0148049486C7EA2017E6D7EA201FE6D7EA2496D7EA200016E7EA2 -49147FA2000382B539C007FFF8A235287DA738>75 D<90383FFFF8A2D901FCC7FC5CA213 -03A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C8FCA249141C1618137E163801 -FE1430167049146016E000011401ED03C0491307ED0F800003147FB7FC160026287DA72E ->I78 -D<000FB712E05A9039800FE007D81E009038C001C05A0038011F1300123000705C006015 -01023F148012E0481400A2C74890C7FCA2147EA214FEA25CA21301A25CA21303A25CA213 -07A25CA2130FA25CA2131F001FB57EA22B287DA727>84 D -86 D<15F8141FA2EC01F0A21403A215E0A21407A215C0A2140FEB1F8F90387FCF80EBF0 -EF3803C03FEA0780390F001F00A2001E5B123E003C133E127C147E5A147CA214FC5AECF8 -30A3903801F060A2EA7803010E13C0393C1CF980381FF07F3907C01E001D297CA723> -100 DII<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 DI<3903E001C03907F003E0380C7807EA187C0030130314011260EBF80000C014C0 -A2EA01F0A2EC0180EA03E0A2EC0300EA07C0A21406A25CA200035B6D5A3801F0E06CB45A -013FC7FC1B1B7D9921>118 DI<90387C03C03901FF0FF03907079C30390E03B078000CEB -F0F8001813E1123015F0396007C0E015001200A2495AA449C7FC15301238007C1460EAFC -3E15C0EAF87E39F06F03803970C70700383F83FE381F01F81D1B7D9926>II<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>I8 D14 D<007FB812F8B912FCA26C17F8CCFCAE007FB812F8B912FCA26C17F8CCFCAE00 -7FB812F8B912FCA26C17F836287BA841>17 D<020FB6128091B712C01303010F1680D91F -F8C9FCEB7F8001FECAFCEA01F8485A485A485A5B48CBFCA2123EA25AA2127812F8A25AA8 -7EA21278127CA27EA27EA26C7E7F6C7E6C7E6C7EEA00FEEB7F80EB1FF86DB71280010316 -C01300020F158091CAFCAE001FB812804817C0A26C1780324479B441>I20 -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 D49 D<91381FFFFE91B6FC1303010F14FED91FF0C7FCEB7F8001FEC8FCEA01F8 -485A485A485A5B48C9FCA2123EA25AA2127812F8A25AA2B712FE16FFA216FE00F0C9FCA2 -7EA21278127CA27EA27EA26C7E7F6C7E6C7E6C7EEA00FEEB7F80EB1FF06DB512FE010314 -FF1300021F13FE283279AD37>I<387FFFF8B6FC15C06C14F0C7EA0FF8EC01FEEC007FED -1F80ED0FC0ED07E0ED03F01501ED00F8A2167CA2163EA2161E161FA2160FA2007FB7FCB8 -FCA27EC9120FA2161FA2161E163EA2167CA216F8A2ED01F01503ED07E0ED0FC0ED1F80ED -7F00EC01FEEC0FF8007FB55AB612C092C7FC6C13F8283279AD37>I54 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 DI72 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>II<1A801907F10F00023FB712FE49B85A010F17F0013F17C0494CC7FC2801E0 -0003F0C9FC48481307485A120F48C7485A5A5AA200FE4A5A5A12F01280C8485AA44BCAFC -A415FEA44A5AA44A5AA44A5AA4140F5DA35D141FA25D143FA292CBFC5CA2147E14FE5CA2 -495A5C495A5C0102CCFC41427DBB2D>I<0060161800F0163CB3B26C167CA2007C16F8A2 -6CED01F0003F15036C6CEC07E06C6CEC0FC0D807F0EC3F80D803FE903801FF003A00FFC0 -0FFC6DB55A011F14E0010391C7FC9038007FF82E347CB137>91 DI<14 -034A7E4A7EA24A7EA34A7EA2EC7CF8A2ECF87CA2ECF03C0101133EA249487EA249486C7E -A249486C7EA2EC00034980A2013E6D7EA2496D7EA20178147801F8147CA2484880A24848 -80A24848EC0F80A2491407000F16C0A248C8EA03E0A2003EED01F0A2003C1500007C16F8 -A248167CA248163C006016182E347CB137>94 D102 -D<12FCEAFFC0EA07F0EA01FCEA007E7F80131F80130FB3A7801307806D7E6D7EEB007EEC -1FF0EC07F8EC1FF0EC7E00495A495A495A5C130F5CB3A7131F5C133F91C7FC137E485AEA -07F0EAFFC000FCC8FC1D537ABD2A>I<126012F0B3B3B3B3A91260045377BD17>106 -D<0070131C00F0131EB3B3B3B3A80070131C175277BD2A>I112 D114 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ft cmr12 12 8 -/Ft 8 118 df10 D<140C141C1438147014E0EB01C01303EB0780EB0F00A2131E5BA25B13F85B12015B -1203A2485AA3485AA348C7FCA35AA2123EA2127EA4127CA312FCB3A2127CA3127EA4123E -A2123FA27EA36C7EA36C7EA36C7EA212017F12007F13787FA27F7FA2EB0780EB03C01301 -EB00E014701438141C140C166476CA26>40 D<12C07E12707E7E7E120F6C7E6C7EA26C7E -6C7EA21378137C133C133E131E131FA2EB0F80A3EB07C0A3EB03E0A314F0A21301A214F8 -A41300A314FCB3A214F8A31301A414F0A21303A214E0A3EB07C0A3EB0F80A3EB1F00A213 -1E133E133C137C13785BA2485A485AA2485A48C7FC120E5A5A5A5A5A16647BCA26>I<12 -1EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3A5121E127FEAFF80A213C0A4127F121E12 -00A512011380A3120313005A1206120E120C121C5A5A12600A3E78AA1B>59 -D99 D108 D<3903F803F000FFEB1FFCEC3C3EEC707F0007EBE0FF38 -03F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3202C7DAB26> -114 D117 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 df12 D14 D19 D39 -D45 DI49 DII< -163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F87EC1F07143E14 -7E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A485A485A120F5B48 -C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038>I<0007150301 -E0143F01FFEB07FF91B6FC5E5E5E5E5E16804BC7FC5D15E092C8FC01C0C9FCAAEC3FF001 -C1B5FC01C714C001DF14F09039FFE03FFC9138000FFE01FC6D7E01F06D13804915C0497F -6C4815E0C8FC6F13F0A317F8A4EA0F80EA3FE0487E12FF7FA317F05B5D6C4815E05B007E -C74813C0123E003F4A1380D81FC0491300D80FF0495AD807FEEBFFFC6CB612F0C65D013F -1480010F01FCC7FC010113C02D427BC038>I67 D69 D77 DI<003FBA12E0A59026FE000FEB8003D87FE09338003FF049171F90C71607A2007E1803 -007C1801A300781800A400F819F8481978A5C81700B3B3A20107B8FCA545437CC24E>84 -D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E -A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100 -0313E0000F1380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013E -EBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97 -DIIIIIII<137C48 -B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7FCAAEB7FC0EA7FFF -A512037EB3AFB6FCA518467CC520>I108 D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B512E00281 -6E4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E007F6C01 -9E6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B512FEA557 -2D7CAC5E>I<90397F8007FEB590383FFF8092B512E0028114F8913987F03FFC91388F80 -1F000390399F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FEA5372D7CAC -3E>II<90397FC00FF8B590 -B57E02C314E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07FF6C496D13804A15 -C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E15C06E5B6E -4913806E4913006E495A9139DFC07FFC02CFB512F002C314C002C091C7FCED1FF092C9FC -ADB67EA536407DAC3E>II<90387F807FB53881FFE0028313F0028F13F8ED8FFC91389F1FFE000313BE6C13 -BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B612E0A5272D7DAC2E>I<90 -391FFC038090B51287000314FF120F381FF003383FC00049133F48C7121F127E00FE140F -A215077EA27F01E090C7FC13FE387FFFF014FF6C14C015F06C14FC6C800003806C15806C -7E010F14C0EB003F020313E0140000F0143FA26C141F150FA27EA26C15C06C141FA26DEB -3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E026E007FEC7FC232F7CAD2C>I< -EB01E0A51303A41307A2130FA2131FA2133F137F13FF1203000F90B51280B7FCA4C601E0 -C7FCB3A3ED01E0A9150302F013C0137F150790393FF80F8090391FFC1F006DB5FC6D13FC -01015B9038003FE023407EBE2C>II119 -DII E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fw cmbx12 14.4 12 -/Fw 12 116 df<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF800C7 -FCB3B3B3A6007FB712FEA52F4E76CD43>49 DI<9138 -0FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED803 -F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC16 -80C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80DA -000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218FE -A2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001F0 -4A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F15800103 -02FCC7FCD9001F1380374F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C -7FA24C7FA34C8083047F80167E8304FE804C7E03018116F8830303814C7E03078116E083 -030F814C7E031F81168083033F8293C77E4B82157E8403FE824B800201835D840203834B -800207835D844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A2 -4A820103854A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547B -D366>65 DI82 D<913801FFF8021FEBFF8091B612F00103 -15FC010F9038C00FFE903A1FFE0001FFD97FFC491380D9FFF05B4817C048495B5C5A485B -A2486F138091C7FC486F1300705A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F1707 -6C6D15C07E6E140F6CEE1F806C6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01F -F0010390B55A01001580023F49C7FC020113E033387CB63C>99 D<913803FFC0023F13FC -49B6FC010715C04901817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E4817 -8048497F18C0488191C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127F -A27F7EA218E06CEE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6C -ECFF00D91FFEEB03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F03438 -7CB63D>101 DI110 -D<90397FE003FEB590380FFF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E0 -13FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB6 -12FCA52F367CB537>114 D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF813 -07D81FE0130148487F4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF -15F86C14FF16C06C15F06C816C816C81C681013F1580010F15C01300020714E0EC003F03 -0713F015010078EC007F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8 -EC7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387C -B635>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fx cmmi10 10 50 -/Fx 50 123 df11 D13 -D<1403EC3FF891387FFF80D901E313C014800103133F9138001F80ED070092C7FC80A280 -A2808013018080130080147F81143F8149B47E130790380F8FF0EB3E0F496C7E13F83801 -F003D803E07F1207380FC0011380121FEA3F0014005A127EA212FE5D481301A35DA24813 -035D6C13075D127C4A5A6C91C7FC5C6C133E6C6C5A3807C0F03801FFE0D8003FC8FC223D -7DBB25>I<133F14C0EB07F06D7E801301A26D7EA3147FA36E7EA36E7EA36E7EA36E7EA3 -6E7EA36E7EA26E7EA214014A7E5C4A7E91381E3F80143C14784A6C7E1301EB03E049486C -7EEB0F80EB1F00496D7E137E5B48486D7E485A485A000F6E7E485A485A48C87E12FE167F -4816800070151F293B7CB930>21 DI<013FB612E090B712F05A120717E0270F8070 -06C7FC391E00600E48140C003813E04813C048141CEAC0011200148001035BA213071400 -A25B1578011E137CA3133E133C137C157E13FC5B1201157F1203497FA3D801C0131C2C25 -7EA32F>25 D<027FB512C00103B612E0130F5B017F15C09026FF81FEC7FC3901FC007E48 -487F485A497F484880485AA248C7FCA2127EA2153F00FE92C7FC5AA25D157E5A5DA24A5A -A24A5A007C495A5D003C495A003E013FC8FC6C137C380F81F83803FFE0C66CC9FC2B257D -A32F>27 D<0140151E01E0153F00015E484816805B120790C9123F000E161F170F5A1707 -481700A2003014C014010070010314061260A2170E00E04948130C5A171C92C7FC5FA26C -495C4A14F04A7E6C017F495A4A6C485A3AF801F7E00F3BFE0FF3F83F80267FFFE3B5FC02 -C191C7FC6C01815B02005BD80FFCEB7FF0D803F0EB0FC031267FA434>33 -DI39 D<121C127FEAFF80A5EA7F00121C -0909798817>58 D<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A -1206120E5A5A5A12600A19798817>II<126012FCB4FCEA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FC -EB01FF9038007FC0EC1FF0EC07FCEC01FF9138007FC0ED1FF0ED07FCED01FF9238007FC0 -EE1FF0EE07FCEE01FF9338007F80EF1FC0A2EF7F80933801FF00EE07FCEE1FF0EE7FC04B -48C7FCED07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB -7FC04848CAFCEA07FCEA3FF0EA7FC048CBFC12FC1270323279AD41>62 -D64 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>II<163FED1FFFA3ED007F167EA216FEA216FCA21501A216F8A21503A216F0A2 -1507A2027E13E0903803FF8790380FC1CF90381F00EF017EEB7FC049133F485A4848131F -000715805B000F143F485A1600485A5D127F90C7127EA215FE5A485CA21401A248ECF80C -A21403161CEDF0181407007C1538007E010F1330003E131F027B13706C01E113E03A0F83 -C0F9C03A03FF007F80D800FCEB1F00283B7DB92B>II<16F8ED03FEED0F879238 -1F0F80ED3E3F167F157CA215FC1700161C4A48C7FCA414035DA414075DA20107B512F0A3 -9026000FE0C7FC5DA4141F5DA4143F92C8FCA45C147EA514FE5CA413015CA4495AA45C13 -07A25C121E123F387F8F80A200FF90C9FC131E12FEEA7C3CEA7878EA1FF0EA07C0294C7C -BA29>I104 D<14E0EB03F8A21307A314F0EB01C090C7FCAB13F8EA03FEEA070F000E1380121C -121812381230EA701F1260133F00E0130012C05BEA007EA213FE5B1201A25B12035BA200 -07131813E01438000F133013C01470EB806014E014C01381EB838038078700EA03FEEA00 -F815397EB71D>I<150FED3F80A2157FA31600151C92C7FCABEC0F80EC3FE0ECF0F09038 -01C0F849487E14005B130E130C131CEB1801133801305BA2EB0003A25DA21407A25DA214 -0FA25DA2141FA25DA2143FA292C7FCA25CA2147EA214FEA25CA21301001E5B123F387F83 -F0A238FF87E0495A00FE5BD87C1FC8FCEA707EEA3FF8EA0FC0214981B722>IIIII<90390F -8003F090391FE00FFC903939F03C1F903A70F8700F80903AE0FDE007C09038C0FF800300 -13E00001491303018015F05CEA038113015CA2D800031407A25CA20107140FA24A14E0A2 -010F141F17C05CEE3F80131FEE7F004A137E16FE013F5C6E485A4B5A6E485A90397F700F -80DA383FC7FC90387E1FFCEC07E001FEC9FCA25BA21201A25BA21203A25B1207B512C0A3 -2C3583A42A>112 D<3903E001F83907F807FE390E3C1E07391C3E381F3A183F703F8000 -38EBE07F0030EBC0FF00705B00601500EC007E153CD8E07F90C7FCEAC07EA2120013FE5B -A312015BA312035BA312075BA3120F5BA3121F5B0007C9FC21267EA425>114 -D<14FF010313C090380F80F090383E00380178131C153C4913FC0001130113E0A33903F0 -00F06D13007F3801FFE014FC14FF6C14806D13C0011F13E013039038003FF01407140300 -1E1301127FA24814E0A348EB03C012F800E0EB07800070EB0F006C133E001E13F83807FF -E0000190C7FC1E267CA427>II<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>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fy cmbx10 10 20 -/Fy 20 122 df58 -D65 D97 -D<13FFB5FCA412077EAF4AB47E020F13F0023F13FC9138FE03FFDAF00013804AEB7FC002 -80EB3FE091C713F0EE1FF8A217FC160FA217FEAA17FCA3EE1FF8A217F06E133F6EEB7FE0 -6E14C0903AFDF001FF80903AF8FC07FE009039F03FFFF8D9E00F13E0D9C00390C7FC2F3A -7EB935>I<903801FFC0010F13FC017F13FFD9FF8013802603FE0013C048485AEA0FF812 -1F13F0123F6E13804848EB7F00151C92C7FC12FFA9127FA27F123FED01E06C7E15036C6C -EB07C06C6C14806C6C131FC69038C07E006DB45A010F13F00101138023257DA42A>II<903803FF8001 -1F13F0017F13FC3901FF83FE3A03FE007F804848133F484814C0001FEC1FE05B003FEC0F -F0A2485A16F8150712FFA290B6FCA301E0C8FCA4127FA36C7E1678121F6C6C14F86D14F0 -00071403D801FFEB0FE06C9038C07FC06DB51200010F13FC010113E025257DA42C>II<161FD907FE -EBFFC090387FFFE348B6EAEFE02607FE07138F260FF801131F48486C138F003F15CF4990 -387FC7C0EEC000007F81A6003F5DA26D13FF001F5D6C6C4890C7FC3907FE07FE48B512F8 -6D13E0261E07FEC8FC90CAFCA2123E123F7F6C7E90B512F8EDFF8016E06C15F86C816C81 -5A001F81393FC0000F48C8138048157F5A163FA36C157F6C16006D5C6C6C495AD81FF0EB -07FCD807FEEB3FF00001B612C06C6C91C7FC010713F02B377DA530>I<13FFB5FCA41207 -7EAFED7FC0913803FFF8020F13FE91381F03FFDA3C01138014784A7E4A14C05CA25CA291 -C7FCB3A3B5D8FC3F13FFA4303A7DB935>II<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>I121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fz cmr10 10 88 -/Fz 88 128 df<1506150FA24B7EA24B7EA24B7EA2EDDFF0A29138018FF8A291380307FC -A291380603FEA291380E01FF140CDA1C007F141802386D7E143002706D7E146002E06D7E -5C01016E7E5C01036E7E91C7FC496E7E1306010E6E7E130C011C6E7F131801386F7E1330 -01706F7E136001E06F7E5B170F484882170748C97F17030006831701488383481880001F -B9FC4818C0A24818E0A2BA12F0A23C3C7CBB45>1 D5 DI<011FB512FEA39026001FFEC8FCEC07F8A8EC3FFE01 -03B512E0D91FF713FC90397F07F87F01FCEC1F80D803F8EC0FE0D807F06E7ED80FE06E7E -001F82D83FC06E7EA2007F8201808000FF1780A7007F170001C05C003F5EA2D81FE04A5A -000F5ED807F04A5AD803F84A5AD800FCEC1F80017F027FC7FC90391FF7FFFC0103B512E0 -9026003FFEC8FCEC07F8A8EC1FFE011FB512FEA331397BB83C>8 -D10 D -II14 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>II<121C127FEAFF80A5EA7F00121C -0909798817>I<150C151E153EA2153C157CA2157815F8A215F01401A215E01403A215C0 -1407A21580140FA215005CA2141E143EA2143C147CA2147814F8A25C1301A25C1303A249 -5AA25C130FA291C7FC5BA2131E133EA2133C137CA2137813F8A25B1201A25B1203A25B12 -07A25B120FA290C8FC5AA2121E123EA2123C127CA2127812F8A25A12601F537BBD2A>I< -EB03F8EB1FFF90387E0FC09038F803E03901E000F0484813780007147C48487FA248C77E -A2481580A3007EEC0FC0A600FE15E0B3007E15C0A4007F141F6C1580A36C15006D5B000F -143EA26C6C5B6C6C5B6C6C485A6C6C485A90387E0FC0D91FFFC7FCEB03F8233A7DB72A> -I -III<1538A2157815F8 -A2140114031407A2140F141F141B14331473146314C313011483EB030313071306130C13 -1C131813301370136013C01201EA038013005A120E120C5A123812305A12E0B712F8A3C7 -3803F800AB4A7E0103B512F8A325397EB82A>I<0006140CD80780133C9038F003F890B5 -FC5D5D158092C7FC14FC38067FE090C9FCABEB07F8EB3FFE9038780F803907E007E09038 -8003F0496C7E12066E7EC87EA28181A21680A4123E127F487EA490C71300485C12E00060 -5C12700030495A00385C6C1303001E495A6C6C485A3907E03F800001B5C7FC38007FFCEB -1FE0213A7CB72A>II<12301238123E003FB612E0A3 -16C05A168016000070C712060060140E5D151800E01438485C5D5DC712014A5A92C7FC5C -140E140C141C5CA25CA214F0495AA21303A25C1307A2130FA3495AA3133FA5137FA96DC8 -FC131E233B7BB82A>III<121C12 -7FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C092479A317>I<121C12 -7FEAFF80A5EA7F00121CC7FCB2121C127F5A1380A4127F121D1201A412031300A25A1206 -A2120E5A121812385A1260093479A317>I<007FB812F8B912FCA26C17F8CCFCAE007FB8 -12F8B912FCA26C17F836167B9F41>61 D<1538A3157CA315FEA34A7EA34A6C7EA202077F -EC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A202C07F15 -01A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7121FA2496E7EA3496E -7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7DBB3E>65 -DI<913A01FF800180020FEBE003027F13F8903A01FF807E07903A03 -FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE153F12014848151F48 -48150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED0180A312 -3F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5CD91FE0 -5C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F13F002011380313D -7BBA3C>III< -B812F8A30001903880001F6C90C71201EE00FC177C173C171CA2170CA4170E1706A2ED01 -80A21700A41503A21507151F91B5FCA3EC001F15071503A21501A692C8FCAD4813C0B612 -C0A32F397DB836>III -I<013FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D87F005B -0070131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B7DB82B>III< -B5933807FFF86E5DA20001F0FC002600DFC0ED1BF8A2D9CFE01533A3D9C7F01563A3D9C3 -F815C3A2D9C1FCEC0183A3D9C0FEEC0303A2027F1406A36E6C130CA36E6C1318A26E6C13 -30A36E6C1360A26E6C13C0A3913901FC0180A3913900FE0300A2ED7F06A3ED3F8CA2ED1F -D8A3ED0FF0A3486C6D5A487ED80FFC6D48497EB500C00203B512F8A2ED018045397DB84C ->I -III82 -D -I<003FB812E0A3D9C003EB001F273E0001FE130348EE01F00078160000701770A3006017 -30A400E01738481718A4C71600B3B0913807FF80011FB612E0A335397DB83C>IIII89 D91 D -93 D<13101338137C13FE487E3803C780380783C0380F01E0381E00F04813780070131C -48130E00401304170D77B92A>I96 -DIIIII<147E903803FF8090380FC1E0EB1F879038 -3F0FF0137EA213FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387FFFF8A3 -1C3B7FBA19>I -IIIIII<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F01E07E -903BF1C01F83803F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0FC0A249 -5CA3495CB3A3486C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00FF000FF -EB3FFCECF03F9039F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3486C49 -7EB500C1B51280A329257EA42E>II<3903F01FE000FFEB7FF89038F1 -E07E9039F3801F803A0FF7000FC0D803FEEB07E049EB03F04914F849130116FC150016FE -A3167FAA16FEA3ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F009038 -F1E07E9038F0FFF8EC1FC091C8FCAB487EB512C0A328357EA42E>II<3807E01F00FF -EB7FC09038E1E3E09038E387F0380FE707EA03E613EE9038EC03E09038FC0080491300A4 -5BB3A2487EB512F0A31C257EA421>II<1318A51338A31378A313F8120112031207001FB5FCB6FCA2 -D801F8C7FCB215C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347FB220> -IIIIII<003FB512FCA2EB8003D83E0013F8003CEB07F00038EB0FE012300070EB1FC0EC -3F800060137F150014FE495AA2C6485A495AA2495A495A495AA290387F000613FEA2485A -485A0007140E5B4848130C4848131CA24848133C48C7127C48EB03FC90B5FCA21F247EA3 -25>II126 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 -D12 -D19 D<120FEA3FC0EA7FE0EAFFF013F8A313 -FCA2127FEA3FDCEA0F1C1200A5133C1338A31378137013F0A2EA01E0A2EA03C0EA0780A2 -EA0F00121E5A5A12300E2376D221>39 D<15E01401EC03C0EC0780EC0F00141E5C147C5C -495A13035C495A130F5C131F91C7FC133E137EA25BA2485AA25B1203A2485AA3120F5BA2 -121FA25BA2123FA290C8FCA35AA5127EA312FEB3A3127EA3127FA57EA37FA2121FA27FA2 -120FA27F1207A36C7EA212017FA26C7EA2137EA2133E7F80130F8013076D7E8013016D7E -147C143C8080EC0780EC03C0EC01E014001B7974D92E>I<12E07E12787E7E7E6C7E7F6C -7E6C7E7F1200137C137E133E133F7F6D7E80A26D7EA26D7EA2130180A26D7EA380147EA2 -147FA280A21580A2141FA315C0A5140FA315E0B3A315C0A3141FA51580A3143FA21500A2 -5CA2147EA214FE5CA3495AA25C1303A2495AA2495AA25C49C7FC5B133E137E137C5B1201 -5B485A485A5B48C8FC121E5A5A5A5A1B797AD92E>I45 -D<120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3FC0EA0F00C7FCB3A9120FEA3FC0EA7FE0EAFF -F0A6EA7FE0EA3FC0EA0F000C3376B221>58 D<120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3F -C0EA0F00C7FCB3A9120FEA3FC0127FEAFFE0A213F0A4127F123FEA0F701200A513F0A213 -E0A3120113C01203A213801207EA0F00A2121E5AA25A12300C4A76B221>I65 -D69 -DI77 -DI99 D<17FF4BB5FCA4ED0007160182B3A6EC0FF8EC7FFF49B512E0903907FC03F090391F -E0007C49487F49C7120F01FE80484880485A000781484880A2485AA2485AA2127FA35B12 -FFAB127FA27FA2123FA27F121FA26C6C5C00075D7F6C6C5C6C6C5C6C6C021E7F6D6C017C -13E0D91FC049EBFF8090390FF807E00103B512800100495ADA1FF091C7FC39547CD241> -II<157F913803FFE0020F13F091383FC0F891387F01 -FC903901FE03FE903803FC0714F81307EB0FF0A290391FE003FCED01F892C7FC495AB3B6 -12FEA426003FC0C7FCB3B3A580EBFFF0007FEBFFF8A427547DD324>II<1378EA01FE487E487FA66C90C7FC6C5AEA007890C8FCB0EB7F80B5FCA41203C6 -FC137FB3B3A43801FFE0B61280A419507CCF21>105 D108 D<01FFD907FEEC03FFB590261FFFC0010F -13E0037F01F0013F13F8912701F80FFC9038FC07FE913D03C003FE01E001FF0003902607 -00019038038000C6010E6D6C48C76C7E6D48DA7F8E6E7E4A159CA24ADA3FF86E7E02605D -14E04A5DA34A5DB3AD2601FFE0DAFFF0EC7FF8B6D8C07F9026FFE03FB512F0A45C347CB3 -63>I<01FFEB07FCB590383FFF8092B512E0913901F00FF8913903C007FC000349C66C7E -C6010E13016D486D7E5C143002706E7E146014E05CA35CB3AD2601FFE0903801FFE0B600 -C0B612C0A43A347CB341>II<90397F8007FCB590387FFF -800281B512E0913987F00FF891398F8003FC000390399E0001FFC601BC6D7FD97FF86E7E -4A6E7E4A6E7E4A140F844A6E7EA2717EA3717EA4711380AB4D1300A44D5AA24D5AA2606E -140F4D5A6E5D6E4A5A6E4A5A02BC4AC7FC029E495A028FEB07FC913987E01FF00281B512 -C0DA807F90C8FCED0FF892CAFCB13801FFE0B612C0A4394B7DB341>I<01FFEB1F80B5EB -7FF0913801FFF8913803E1FC91380783FE0003EB0F07C6131EEB7F1C1438143091387003 -FC91386000F0160014E05CA45CB3AA8048487EB612F0A427347DB32E>114 -DIII121 -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 index b146117901..0000000000 --- a/deal.II/doc/reports/new-threads/index.html +++ /dev/null @@ -1,1059 +0,0 @@ - -

        -A short description of the new threading scheme -

        - - -

        - Wolfgang Bangerth, May 2003 -

        - - -

        -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. -

        - -

        -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. -

        - - -

        1. Rationale and Introduction

        - - -

        -POSIX and other thread libraries only allow functions as thread entry -points that satisfy the signature -

        -  void *  (*)  (void *)
        -
        -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. -

        - -

        -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. -

        - -

        -However, the old scheme had a number of shortcomings: -

          -
        • The implementation did not allow for functions returning - anything but void. We want to be able to call everything - on a new thread that can also be called on the present one.
        • -
        • 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.
        • -
        • The general syntax for calling a function on a new thread was a - little clumsy and not intuitive.
        • -
        -

        - -

        -Regarding the last point, note that any other function is called by -

        -    f(arg1, arg2);
        -    obj.f(arg1, arg2);
        -
        -Ideally, the following syntax for starting any function on a new -thread would be nice: -
        -    spawn f(arg1, arg2);
        -    spawn obj.f(arg1,arg2);
        -
        -This syntax is not possible in C++, but the following syntax is, -making it relatively clear what the intent of the statement is: -
        -    spawn (f)(arg1, arg2);
        -    spawn (obj, &Class::f)(arg1,arg2);
        -
        -This is the syntax we will want to achieve (except for the fact that the -spawn function is in a namespace Threads, just like -all other entities described here). -

        - -

        -This text will discuss the details that are needed to implement -this syntax, as well as the following points: -

          -
        • Overloading spawn() 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).
        • -
        • spawn() needs to return a value that allows us to identify, -and join a thread. The syntax for this will be -
          -      Thread<> t = spawn(f)(arg1, arg2);
          -      t.join ();
          -
          - If we don't save the return value of spawn(), as in the examples - above, then we have just created a detached thread.
        • -
        • Return values: if f() returns a value, say, an integer, then -we want to be able to retrieve it once the thread has finished: -
          -      Thread<int> t = spawn (f)(1., 1.);
          -      t.join ();
          -      int i = t.return_value ();
          -
          - This requires some care when functions return references, but some - template magic will save us. Another special case are functions that - return void.
        • -
        • Thread groups: if threads are created inside a loop, we will want to - put all of them into a ThreadGroup object, and wait for them - collectively, rather than one-by-one.
        • -
        -

        - -

        -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 use it, but should explain in -reasonable detail how it works. 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. -

        - - -

        -This paper is divided into the following parts: -

          -
        1. This introduction
        2. -
        3. Entities (functions, classes) that are used by both and that - describe the newly created thread
        4. -
        5. Entities that are used on the calling thread
        6. -
        7. Entities that are used to create a thread
        8. -
        9. Tool classes
        10. -
        11. Open problems
        12. -
        13. Further suggestions
        14. -
        -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 -internal, those to be used are in a namespace -Threads. 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. -

        - - - -

        2. Entities that describe threads

        - - -

        -Each thread that has been created is described by exactly one object -of type thread_description<RT>, where RT here and in the -sequel will always denote the return type of the function being called -on a new thread. The thread_description 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: -

        - -
        -    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;
        -        };
        -    };
        -
        - -

        -join() can be called more than once and uses Schmidt's thread-safe -double-checking pattern for speed. There could be additional functions -kill() or send_signal(), but these are not presently -implemented. -

        - -

        -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. -

        - -

        -The thread_description<RT> class is derived from this base -class: -

        -    template <typename RT>
        -    struct thread_description : public thread_description_base
        -    {
        -        return_value<RT> ret_val;
        -    };
        -
        -

        - -

        -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 return_value -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. -

        - -

        -As mentioned, there is exactly one thread_description<RT> -object per created thread. It is accessed using boost::shared_ptr -objects, and references are held from each Thread<RT> object -for this thread as -well as from a wrapper function on the new thread. The object is thus -deleted, when all Thread<RT> 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. -

        - - - -

        3. Entities that are used on the calling thread

        - - -

        -On the calling thread, we basically use the Thread<RT> -class, ThreadGroup<RT> class, and spawn -function. The Thread<RT> class has the following -implementation: -

        - -
        -    template <typename RT = void>
        -    class Thread {
        -      public:
        -        Thread () {};
        -        Thread (const boost::shared_ptr<thread_description<RT> > &td)
        -          : thread_description (td) {};
        -
        -        void join () const { thread_description->join (); };
        -
        -        RT return_value () {
        -          join ();
        -          return thread_description->ret_val.get();
        -        };
        -
        -        bool operator == (const thread &t) {
        -          return thread_description == t.thread_description;
        -        };
        -
        -      private:
        -        boost::shared_ptr<thread_description<RT> > thread_description;
        -    };
        -
        - -

        -Copy constructor and operator= are generated automatically by the -compiler. Note that asking for the return_value automatically waits -for the thread to finish, and that for this it is helpful that we can -call join() more than once on the thread description object. The -return_value() function also makes use of the fact that if RT=void, -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 void. -

        - -

        -The ThreadGroup class is a container distributing calls to its -member functions to all its elements. Elements are added using -operator+=, and they are stored using a -std::vector. (A std::set would be more appropriate, -but then we would have to have operator< for -Thread<RT> objects.) It has the same default value for the -template argument: -

        - -
        -    template <typename RT = void>
        -    class ThreadGroup
        -    {
        -      public:
        -        ThreadGroup & operator += (const Thread<RT> &t) {
        -          threads.push_back (t);
        -	  return *this;
        -        };
        -
        -        void join_all () const {
        -          for (typename std::vector<Thread<RT> >::const_iterator
        -                 t=threads.begin(); t!=threads.end(); ++t)
        -            t->join ();
        -        };
        -
        -      private:
        -        std::vector<Thread<RT> > threads;
        -    };
        -
        - -

        -Since objects of type Thread<RT> are freely copyable, there -is no need -to provide an index operator for ThreadGroup; if you need to index -its elements (for example to get at the return value), use -std::vector<Thread<RT> >. -

        - -

        -Finally, there are overloads of the spawn template, for unbound -functions, as well as const and non-const member -functions. We only show them for unary member functions: -

        -    template <typename RT, typename C, typename Arg1>
        -    mem_fun_encapsulator<RT,C,boost::tuple<Arg1> >
        -    spawn (C &c, RT (C::*fun_ptr)(Arg1)) {
        -      return mem_fun_encapsulator<RT, C, boost::tuple<Arg1> > (c,fun_ptr);
        -    }
        -
        -    template <typename RT, typename C, typename Arg1>
        -    mem_fun_encapsulator<RT,const C,boost::tuple<Arg1> >
        -    spawn (const C &c, RT (C::*fun_ptr)(Arg1) const) {
        -      return mem_fun_encapsulator<RT, const C, boost::tuple<Arg1> > (c,fun_ptr);
        -    }
        -
        -

        - -

        -Note that we need two overloaded versions, for const and -non-const -member functions. Both create an intermediate object (in the -internal -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. -

        - -

        -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 -operator(). However, this doesn't seem to be possible if -operator() returns something other than void or takes -arguments. This -would need some kind of typeof-operator which is not standard C++. See the -discussion in the Open Problems section. -

        - - -

        4. Entities that are used to create a thread

        - - -

        -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 use the spawn() functions, -so are probably boring and may be skipped. -

        - -

        -The basic idea is the following: spawn() 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. mem_fun_encapsulator -looks like this: -

        - -
        -    template <typename RT, typename C, typename ArgList,
        -              int length = boost::tuples::length<ArgList>::value>
        -    class mem_fun_encapsulator;
        -
        -    template <typename RT, typename C, typename ArgList>
        -    class mem_fun_encapsulator<RT,C,ArgList,1> {
        -        typedef typename mem_fun_ptr<RT,C,ArgList>::type MemFunPtr;
        -
        -      public:
        -        mem_fun_encapsulator (C &c, MemFunPtr mem_fun_ptr)
        -            : c (c), mem_fun_ptr(mem_fun_ptr) {};
        -
        -        Thread<RT>
        -        operator() (typename boost::tuples::element<0,ArgList>::type arg1) {
        -            return mem_fun_wrapper<RT,C,ArgList> (mem_fun_ptr, c,
        -                                                  boost::tie(arg1)).fire_up ();
        -        };
        -
        -      private:
        -        C         &c;
        -        MemFunPtr  mem_fun_ptr;
        -    };
        -
        - -

        -(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.) -

        - -

        -The constructor stores the two addresses. If one calls -

        -    spawn(obj, &C::f) (42);
        -
        -the next thing that is invoked is the operator() of this class. It -takes the argument(s), creates a temporary with the two addresses and -a reference to the argument (that's what boost::tie) does, and calls -fire_up() on this temporary. fire_up 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 boost::tie, so that we need -not have different versions of the mem_fun_wrapper class for different -numbers of arguments. (However, we need a separate partial -specialization of the mem_fun_encapsulator class for each number of -function arguments.) The tie_args template is used to make a version -of the ArgList type with all reference types; it is described below. -

        - -

        -The next question, of course, is how mem_fun_wrapper looks like. Let -us first consider the base class that it has in common with -fun_wrapper, the wrapping class for non-member function objects: -

        -    template <typename RT, typename EntryPointClass>
        -    struct wrapper_base {
        -        Thread<RT> fire_up () {
        -          thread_descriptor
        -            = DescriptionPointer(new typename thread_description<RT>());
        -
        -          boost::mutex::scoped_lock lock (mutex);
        -          thread_descriptor->create (&EntryPointClass::entry_point,
        -                                        (void *)this);
        -          condition.wait (lock);
        -
        -          return thread_descriptor;
        -        }
        -
        -      protected:
        -        typedef boost::shared_ptr<thread_description<RT> >
        -        DescriptionPointer;
        -
        -        DescriptionPointer thread_descriptor;
        -
        -        mutable boost::mutex     mutex;
        -        mutable boost::condition condition;
        -    };
        -
        -

        -fire_up 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 EntryPointClass::entry_point, where -EntryPoint is the name of a class that implements this thread -starting function and is passed as a template argument to -wrapper_base. -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 Thread<RT> -object. -

        - -

        -The magic happens in the derived class: -

        -    template <typename RT, class C, typename ArgList>
        -    struct mem_fun_wrapper
        -       : public wrapper_base<RT, mem_fun_wrapper<RT,C,ArgList> >
        -    {
        -        typedef typename mem_fun_ptr<RT,C,ArgList>::type MemFunPtr;
        -        typedef typename tie_args<ArgList>::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<RT> *w
        -              = reinterpret_cast<const wrapper_base<RT>*> (arg);
        -            const mem_fun_wrapper *wrapper
        -              = static_cast<const mem_fun_wrapper*> (w);
        -            MemFunPtr mem_fun_ptr = wrapper->mem_fun_ptr;
        -            C        &c           = wrapper->c;
        -            ArgList   args        = wrapper->args;
        -
        -            boost::shared_ptr<thread_description<RT> >
        -              thread_descriptor  = wrapper->thread_descriptor;
        -
        -            {
        -              boost::mutex::scoped_lock lock (wrapper->mutex);
        -              wrapper->condition.notify_one ();
        -            }
        -
        -            call (mem_fun_ptr, c, args, thread_descriptor->ret_val);
        -
        -            return 0;
        -          };
        -    };
        -
        -

        - -

        -Note in particular, how this class passes itself as second template parameter -to the base class, enabling the latter to call the -mem_fun_wrapper::entry_point 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 -wrapper_base object. The first thing the entry_point 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 shared_ptr 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 fire_up 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. -

        - - -

        5. Tool classes

        - - -

        -In the implementation above, some tool classes have been used. These -are briefly described here. -

        - -

        a) The return_value<T> class template

        - -

        -This class stores a value of type T if T is not a -reference or void. It offers get() and -set() functions that get and set the value. If T is a -reference type, then set() is obviously not possible since -references cannot be rebound after construction time. The class therefore -stores a pointer, and set() sets the pointer to the object the -reference references. get() then returns the reference again. If -T is void, then the class is empty and there is only -a get() function that returns void. -

        - -
        -    template <typename RT> struct return_value
        -    {
        -      private:
        -        RT value;
        -      public:
        -        RT get () const { return value; }
        -        void set (RT v) { value = v; }
        -    };
        -
        -    template <typename RT> struct return_value<RT &>
        -    {
        -      private:
        -        RT * value;
        -      public:
        -        RT & get () const { return *value; }
        -        void set (RT & v) { value = &v; }
        -    };
        -
        -    template <> struct return_value<void> {
        -        static void get () {};
        -    };
        -
        - - -

        b) The call function templates

        - -

        -The call 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: -

        - -
        -    template <int> struct int2type;
        -
        -    template <typename RT, typename PFun, typename ArgList>
        -    static void call (PFun     fun_ptr,
        -                      ArgList &arg_list,
        -                      return_value<RT> &ret_val)
        -    {
        -      Caller<RT>::do_call (fun_ptr, arg_list, ret_val,
        -                           int2type<boost::tuples::length<ArgList>::value>());
        -    };
        -
        - -

        -The Caller class has the following member functions: - -

        -    template <typename RT> struct Caller
        -    {
        -        template <typename PFun, typename ArgList>
        -        static void do_call (PFun     fun_ptr,
        -                             ArgList &arg_list,
        -                             return_value<RT> &ret_val,
        -                             const int2type<1> &)
        -        {  ret_val.set ((*fun_ptr) (arg_list.template get<0>()));  };
        -
        -        // likewise for int2type<0>, int2type<2>, ...
        -    };
        -
        -

        - - -

        -There is a specialization Caller<void> that does not set a return -value, and for each call and do_call function there is a second -function for member function pointers that takes an object as -additional argument. -

        - - -

        c) mem_fun_ptr

        - -

        -In order to form a pointer to member function for both cases of const -and non-const member functions, we need a simple tool: -

        -    template <typename RT, class C, typename ArgList,
        -              int length = boost::tuples::length<ArgList>::value>
        -    struct mem_fun_ptr_helper;
        -
        -    template <typename RT, class C, typename ArgList>
        -    struct mem_fun_ptr_helper<RT, C, ArgList, 1>
        -    {
        -        typedef RT (C::*type) (typename boost::tuples::element<0,ArgList>::type);
        -    };
        -
        -    template <typename RT, class C, typename ArgList>
        -    struct mem_fun_ptr_helper<RT, const C, ArgList, 1>
        -    {
        -        typedef RT (C::*type) (typename boost::tuples::element<0,ArgList>::type) const;
        -    };
        -
        -    template <typename RT, class C, typename ArgList>
        -    struct mem_fun_ptr
        -    {
        -        typedef typename mem_fun_ptr_helper<RT,C,ArgList>::type type;
        -    };
        -
        -

        - -

        -Note that if the second template argument is a const C, then we mark -the member function const. The two templates for mem_fun_ptr_helper -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 mem_fun_ptr_helper saves us -from recomputing it in mem_fun_ptr. -

        - - - -

        d) add_reference for tuples

        - -

        -The following classes add references to the elements of a tuple, thus -providing the type equivalent of the return value of the boost::tie -functions. There are probably ways inside boost's tuples library to do -this, but I couldn't locate this. -

        -    template <int N, typename Tuple>
        -    struct add_reference_to_Nth
        -    {
        -        typedef typename boost::tuples::element<N,Tuple>::type ArgType;
        -        typedef typename boost::add_reference<ArgType>::type type;
        -    };
        -
        -    template <typename Tuple, int = boost::tuples::length<Tuple>::value>
        -    struct tie_args_helper;
        -
        -    template <typename Tuple>
        -    struct tie_args_helper<Tuple,1>
        -    {
        -        typedef
        -        boost::tuple<typename add_reference_to_Nth<0,Tuple>::type>
        -        type;
        -    };
        -
        -    template <typename Tuple>
        -    struct tie_args
        -    {
        -        typedef typename tie_args_helper<Tuple>::type type;
        -    };
        -
        -

        -

        -The tie_args_helper class is repeated for every number of elements we -want to use. -

        - - - -

        6. Open Problems

        - - -

        a) A variable lifetime problem

        -

        -The only unsolved semantic problem I am aware of at present is the -following: if we have a function -

        -    void f(const int &i);
        -
        -then this function can be called as -
        -    f(1);
        -
        -i.e. the compiler creates a temporary and passes its address to -f(). When invoking f() on a new thread, however, as in -
        -    spawn (f)(1);
        -
        -then it is only guaranteed that the call to spawn() does not return -before the new thread is started and has copied the arguments to -f(). However, the argument is only the reference to the temporary, not -its value. f() 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. -

        - - -

        b) Forwarding of operator()

        -

        -Above, we have not defined an overload of spawn for functor-like -objects, even though that would be desirable. One way to do so would be -

        -    template <typename C>
        -    mem_fun_encapsulator<void,C,boost::tuple<> >
        -    spawn (C &c) {
        -      return spawn (c, &C::operator());
        -    }
        -
        -This only works if operator() satisfies the signature -
        -    struct C {    void operator() ();  };
        -
        -

        -

        -We could add another overload if operator() is -const. 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 operator() at the time we declare the return type of -above overload of spawn(). I have not found a way to infer this -information just by using the template parameter C -- it just seems -not possible. What would work if it were supported by compilers is a -kind of typeof-operator: -

        -    template <typename C>
        -    typeof(spawn(c,&C::operator()))          // **
        -    spawn (C &c) {
        -      return spawn (c, &C::operator());
        -    }
        -
        -

        -

        -When seeing the declaration, the compiler would automatically check -which version of the overloaded spawn() function it would call, and -correspondingly take the return type. gcc does support the typeof -keyword, but even present CVS snapshots generate an internal compiler -error on this construct. -

        - -

        c) Using a memory based scheme rather than condition variables

        -

        -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. -

        - -

        -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 ArgReferences by -ArgList in some places, -the scheme would basically just replace *_encapsulator::operator(), -fire_up, and thread_entry_point: -

        - -
        -      thread<RT>
        -      operator() (typename boost::tuples::element<0,ArgList>::type arg1) {
        -        return (new mem_fun_wrapper<RT,C,ArgList> (mem_fun_ptr, c,
        -                                                   boost::tie(arg1)))->fire_up ();
        -      };
        -
        -      thread<RT> fire_up () {
        -        thread_descriptor
        -          = DescriptionPointer(new typename detail::thread_description<RT>());
        -
        -        thread_descriptor->create (entry_point, (void *)this);
        -        // no synchronisation here
        -        return thread_descriptor;
        -      }
        -
        -      static void * entry_point (void *arg) {
        -        wrapper_base<RT> *w       = reinterpret_cast<wrapper_base<RT>*> (arg);
        -        fun_wrapper      *wrapper = static_cast<fun_wrapper*> (w);
        -        // no copying here; no synchronisation necessary
        -        detail::call (wrapper->fun_ptr, wrapper->args,
        -                      wrapper->thread_descriptor->ret_val);
        -        // delete memory
        -        delete wrapper;
        -        return 0;
        -      }
        -
        - -

        -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. -

        - -

        -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. -

        - - -

        7. Alternative Suggestions

        - - -

        -Here are some additional suggestions for discussion: -

        - -

        a) Conversions between return values

        - -

        -If f() is a function returning an integer, then the following is -legal: -

        -    double d = f(arg1, arg2);
        -
        -The question, then, would be: do we want to allow conversions between -Thread<double> and Thread<int> objects? -And do we want to allow a -conversion from Thread<T> to Thread<void> -(i.e.: casting away the return value)? -

        - -

        -Since one can still assign the return value of the thread to a double, -

        -    double d = thread.return_value();
        -
        -the only real merit in allowing conversions is in putting threads with -different return value types into a ThreadGroup: -
        -    double f1 ();
        -    int    f2 ();
        -
        -    ThreadTroup<double> tg;
        -    tg += spawn(f1)();
        -    tg += spawn(f2)();    // convert Thread<int> to Thread<double>
        -    tg.join_all ();
        -
        -

        -

        -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 Thread<T> -> Thread<void> seems -like the only one that is really worth it. -

        - -

        -I have made some initial experiments with implementing general -conversions. The main problem is that we need to allow conversion -chains: -

        -    thread<double> t1 = spawn (f)(arg1, arg2);
        -    thread<int>    t2 = t1;
        -    thread<double> t3 = t2;
        -
        -

        -

        -If f() returns 1.5, then t3.return_value() needs to -return 1.0. I believe that such conversions could be implemented, by adding the -types in the chain into a boost::tuple 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. -

        - - -

        b) Conversions between class types I

        - -

        -When you have a class hierarchy like -

        -    struct B { void f(); };
        -    struct D : public B {};
        -
        -then calling -
        -    spawn (D(), &B::f);
        -
        -fails for gcc (but succeeds with Intel's icc). Presumably, gcc is -right: template arguments must match exactly, and D() is of type -D, while &B::f leads to a class type of -B. 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 -
        -    template <typename RT, typename C, typename Arg1>
        -    mem_fun_encapsulator<RT,C,boost::tuple<Arg1> >
        -    spawn (C &c, RT (C::*fun_ptr)(Arg1)) {
        -      return mem_fun_encapsulator<RT, C, boost::tuple<Arg1> > (c,fun_ptr);
        -    }
        -
        -into -
        -    template <typename RT, typename A, typename C, typename Arg1>
        -    mem_fun_encapsulator<RT,C,boost::tuple<Arg1> >
        -    spawn (A &a, RT (C::*fun_ptr)(Arg1)) {
        -      return mem_fun_encapsulator<RT, C, boost::tuple<Arg1> > (a,fun_ptr);
        -    }
        -
        -i.e. introduce another class template A for the type of the -object. Since the arguments of the constructor to the -mem_fun_encapsulator object are known, the compiler would perform a -derived-to-base conversion for object a 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).. -

        - - -

        c) Conversions between class types II

        - -

        -When one writes -

        -    spawn (this, &X::f)
        -
        -one gets an error that "'this' is not convertible to type X&". One has -to write *this instead. It would be simple to have another set of -overloads of spawn() 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. -

        - - -

        d) Catching exceptions

        - -

        -When a function on a new thread throws an exception, it only -propagates up to one of the two entry_point() 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: -

          -
        • clone an exception without knowing its type; we could then in the - entry_point function catch it and stack it somewhere, just like we - do for the return value
        • -
        • back on the main thread, the Thread::join() function must raise this - stored exception if there was one, again without knowing its type.
        • -
        -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. -

        - - -
        - -
        -Wolfgang Bangerth, 2003 -
        -

         

        - - - - - - - diff --git a/deal.II/examples/README.example b/deal.II/examples/README.example new file mode 100644 index 0000000000..1f4f838258 --- /dev/null +++ b/deal.II/examples/README.example @@ -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+. diff --git a/deal.II/examples/step-25/doc/animate.sh b/deal.II/examples/step-25/doc/animate.sh index 31807c2625..c3a7cf9fb0 100755 --- a/deal.II/examples/step-25/doc/animate.sh +++ b/deal.II/examples/step-25/doc/animate.sh @@ -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" diff --git a/deal.II/examples/step-42/step-42.cc b/deal.II/examples/step-42/step-42.cc index 29a165bd59..f4b600317f 100644 --- a/deal.II/examples/step-42/step-42.cc +++ b/deal.II/examples/step-42/step-42.cc @@ -1820,8 +1820,8 @@ namespace Step42 break; } - old_solution = solution; solution = tmp_vector; + old_solution = solution; } old_active_set = active_set; diff --git a/deal.II/include/deal.II/base/graph_coloring.h b/deal.II/include/deal.II/base/graph_coloring.h index 64f39e54ae..5de886009b 100644 --- a/deal.II/include/deal.II/base/graph_coloring.h +++ b/deal.II/include/deal.II/base/graph_coloring.h @@ -20,6 +20,7 @@ #include +#include #include #include #include @@ -31,344 +32,482 @@ 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 - std::vector > create_partitioning(Iterator const &begin, - typename identity::type const &end, - std_cxx1x::function (Iterator const &)> - const &get_conflict_indices) +/** + * A namespace containing functions that can color graphs. + */ +namespace GraphColoring +{ + namespace internal { - std::vector > partitioning(1,std::vector (1,begin)); - // Number of iterators. - unsigned int n_iterators(0); - // Create a map from conflict indices to iterators - boost::unordered_map > 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 + std::vector > + create_partitioning(const Iterator &begin, + const typename identity::type &end, + const std_cxx1x::function (const Iterator &)> &get_conflict_indices) { - std::vector conflict_indices = get_conflict_indices(it); - const unsigned int n_conflict_indices(conflict_indices.size()); - for (unsigned int i=0; i used_it; - used_it.insert(begin); - while (used_it.size()!=n_iterators) - { - typename std::vector::iterator vector_it(partitioning.back().begin()); - typename std::vector::iterator vector_end(partitioning.back().end()); - std::vector new_zone; - for (; vector_it!=vector_end; ++vector_it) - { - std::vector conflict_indices = get_conflict_indices(*vector_it); - const unsigned int n_conflict_indices(conflict_indices.size()); - for (unsigned int i=0; i > indices_to_iterators; + for (Iterator it=begin; it!=end; ++it) { - std::vector iterator_vector(indices_to_iterators[conflict_indices[i]]); - for (unsigned int j=0; j conflict_indices = get_conflict_indices(it); + const unsigned int n_conflict_indices = conflict_indices.size(); + for (unsigned int i=0; i > zones(1,std::vector (1,begin)); + std::set 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 previous_zone_it(zones.back().begin()); + typename std::vector::iterator previous_zone_end(zones.back().end()); + std::vector 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 conflict_indices = get_conflict_indices(*previous_zone_it); + const unsigned int n_conflict_indices(conflict_indices.size()); + for (unsigned int i=0; i &conflicting_elements + = indices_to_iterators[conflict_indices[i]]; + for (unsigned int j=0; j (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 (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 - std::vector > make_dsatur_coloring(std::vector &partition, - std_cxx1x::function (Iterator const &)> - const &get_conflict_indices) - { - std::vector > partition_coloring; - // Number of zones composing the partitioning. - const unsigned int partition_size(partition.size()); - std::vector sorted_vertices(partition_size); - std::vector degrees(partition_size); - std::vector > conflict_indices(partition_size); - std::vector > 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 + void + make_dsatur_coloring(std::vector &partition, + const std_cxx1x::function (const Iterator &)> &get_conflict_indices, + std::vector > &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 conflict_indices_intersection; - std::vector::iterator intersection_it; - for (unsigned int i=0; i sorted_vertices(partition_size); + std::vector degrees(partition_size); + std::vector > conflict_indices(partition_size); + std::vector > 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::iterator degrees_it; - for (unsigned int i=0; i > colors_used; - for (unsigned int i=0; i conflict_indices_intersection; + std::vector::iterator intersection_it; + for (unsigned int i=0; i::iterator degrees_it; + for (unsigned int i=0; i (1, - partition[current_vertex])); - boost::unordered_set tmp; - tmp.insert(current_vertex); - colors_used.push_back(tmp); - } - } - return partition_coloring; - } + // Color the graph. + std::vector > colors_used; + for (unsigned int i=0; i (1, + partition[current_vertex])); + boost::unordered_set 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 - std::vector > - gather_colors(std::vector > > const &partition_coloring) - { - std::vector > coloring; - - // Count the number of iterators in each color. - const unsigned int partition_size(partition_coloring.size()); - std::vector > colors_counter(partition_size); - for (unsigned int i=0; i + std::vector > + gather_colors(const std::vector > > &partition_coloring) { - const unsigned int n_colors(partition_coloring[i].size()); - colors_counter[i].resize(n_colors); - for (unsigned int j=0; j > 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_counter(partition_size); + for (unsigned int i=0; i used_k; - for (unsigned int j=0; j::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 used_k; + for (unsigned int j=0; j::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 used_k; - for (unsigned int j=0; j1) { - // Find the color in the current partition with the largest number of - // iterators. - std::vector::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 used_k; + for (unsigned int j=0; j::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; kall 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 - std::vector > - make_graph_coloring(Iterator const &begin,typename identity::type const &end, - std_cxx1x::function (Iterator const &)> - const &get_conflict_indices) + std::vector > + make_graph_coloring(const Iterator &begin, + const typename identity::type &end, + const std_cxx1x::function (const typename identity::type &)> &get_conflict_indices) { + Assert (begin != end, ExcMessage ("GraphColoring is not prepared to deal with empty ranges!")); + // Create the partitioning. - std::vector > partitioning = create_partitioning(begin,end, - get_conflict_indices); + std::vector > + 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 > > partition_coloring( - partitioning_size); - for (unsigned int i=0; i > > + partition_coloring(partitioning_size); - // Gather the colors together. - std::vector > coloring = gather_colors(partition_coloring); - - return coloring; + Threads::TaskGroup<> tasks; + for (unsigned int i=0; i, + 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 diff --git a/deal.II/include/deal.II/base/parameter_handler.h b/deal.II/include/deal.II/base/parameter_handler.h index 0e6acd4ed0..2e1ce3b072 100644 --- a/deal.II/include/deal.II/base/parameter_handler.h +++ b/deal.II/include/deal.II/base/parameter_handler.h @@ -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 diff --git a/deal.II/include/deal.II/base/thread_management.h b/deal.II/include/deal.II/base/thread_management.h index a0d4418cfe..ab3cde9387 100644 --- a/deal.II/include/deal.II/base/thread_management.h +++ b/deal.II/include/deal.II/base/thread_management.h @@ -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 - struct ThreadDescriptor : public std_cxx1x::enable_shared_from_this > + 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 > 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 ret_val; + std_cxx1x::shared_ptr > 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 &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()); + 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 function, - ThreadDescriptor *descriptor) + std_cxx1x::shared_ptr > 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 ret_val; + std_cxx1x::shared_ptr > ret_val; /** * Start the thread and @@ -1551,7 +1486,8 @@ namespace Threads */ void start (const std_cxx1x::function &function) { - call (function, ret_val); + ret_val.reset(new return_value()); + call (function, *ret_val); } /** @@ -1615,15 +1551,7 @@ namespace Threads thread_descriptor (new internal::ThreadDescriptor()) { // 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 > thread_descriptor; }; diff --git a/deal.II/include/deal.II/base/work_stream.h b/deal.II/include/deal.II/base/work_stream.h index a029e9b0c5..330afcf1ce 100644 --- a/deal.II/include/deal.II/base/work_stream.h +++ b/deal.II/include/deal.II/base/work_stream.h @@ -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 - 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 + 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 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 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 ScratchDataList; + + /** + * A list of iterators that need to be worked on. Only the first + * n_items are relevant. + */ + std::vector 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 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 *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 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 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 copy_datas; + std::pair 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 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 *scratch_data; + Threads::ThreadLocalStorage 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 (begin, end)), - ring_buffer (buffer_size), - sample_scratch_data (sample_scratch_data), - color(false), - n_emitted_items (0), - chunk_size (chunk_size) + template + class Worker : public tbb::filter { - // initialize the elements of the ring buffer - for (unsigned int element=0; element &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::ItemType + ItemType; + + ItemType *current_item = static_cast (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; in_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 &begin, - const typename std::vector::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::iterator, - typename std::vector::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 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 + class Copier : public tbb::filter { - for (unsigned int element=0; element &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::ItemType + ItemType; + + ItemType *current_item = static_cast (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; in_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 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 + 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 scratch_data; + std_cxx1x::shared_ptr 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 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 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 *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::const_iterator &begin, + const typename std::vector::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 > 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::iterator, - typename std::vector::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; in_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 ring_buffer; + private: + /** + * The interval of iterators still to + * be worked on. This range will shrink + * over time. + */ + std::pair::const_iterator,typename std::vector::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 thread_local_scratch; + /** + * A ring buffer that will store items. + */ + std::vector 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 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 + 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 &worker, + const std_cxx1x::function &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::ItemType + ItemType; + + ItemType *current_item = static_cast (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; in_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 - 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 &worker) - : - tbb::filter (/* is_serial= */ false), - worker (worker) - {} - - - /** - * Work on an item. - */ - void *operator () (void *item) - { - // first unpack the current item - typedef - typename IteratorRangeToItemStream::ItemType - ItemType; - - ItemType *current_item = static_cast (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; in_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 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 - 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 &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::ItemType - ItemType; - - ItemType *current_item = static_cast (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; in_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 copier; - }; + private: + /** + * Pointer to the function + * that does the assembling + * on the sequence of cells. + */ + const std_cxx1x::function worker; + /** + * Pointer to the function that does the copying from + * local contribution to global object. + */ + const std_cxx1x::function 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::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& >(worker)) - worker (i, scratch_data, copy_data); - if (static_cast& > - (copier)) - copier (copy_data); + if (static_cast& >(worker)) + worker (i, scratch_data, copy_data); + if (static_cast& > + (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 + internal::Implementation2::IteratorRangeToItemStream 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 worker_filter (worker); - internal::Copier copier_filter (copier,true); + internal::Implementation2::Worker worker_filter (worker); + internal::Implementation2::Copier 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 WorkStream().run(dof_handler.begin_active(), - * dof_handler.end(), ... where the first is of type - * DoFHandler::active_cell_iterator whereas the second is of type - * DoFHandler::raw_cell_iterator. - * * The two data types ScratchData and CopyData need to * have a working copy constructor. ScratchData is only used in the * worker function, while CopyData is the object passed * from the worker to the copier. * - * 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::type &end, + void + run (const std::vector > &colored_iterators, Worker worker, Copier copier, const ScratchData &sample_scratch_data, const CopyData &sample_copy_data, - const std_cxx1x::function (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& >(worker)) - worker (i, scratch_data, copy_data); - if (static_cast& > - (copier)) - copier (copy_data); - } - } #ifdef DEAL_II_WITH_THREADS - else - { - // color the graph - std::vector > 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 serial_copying; - - for (unsigned int color=0; color - iterator_range_to_item_stream (coloring[color].begin(), coloring[color].end(), - queue_length, - chunk_size, - sample_scratch_data, - sample_copy_data); - - internal::Worker worker_filter (worker); - internal::Copier 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_range_to_item_stream (serial_copying.begin(), serial_copying.end(), - queue_length, - chunk_size, - sample_scratch_data, - sample_copy_data); - - internal::Worker worker_filter (worker); - internal::Copier 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 WorkStream().run(dof_handler.begin_active(), - * dof_handler.end(), ... 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 queue_length - * copies of the ScratchData object and - * queue_length*chunk_size copies of the CopyData object - * are generated. - */ - template - void - run (const Iterator &begin, - const typename identity::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::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& >(worker)) + worker (*p, scratch_data, copy_data); + if (static_cast& >(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 0) + { + // create the three stages of the pipeline + internal::Implementation3::IteratorRangeToItemStream + 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 + 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 (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); } diff --git a/deal.II/include/deal.II/dofs/dof_renumbering.h b/deal.II/include/deal.II/dofs/dof_renumbering.h index c52ddaafd9..9484864df3 100644 --- a/deal.II/include/deal.II/dofs/dof_renumbering.h +++ b/deal.II/include/deal.II/dofs/dof_renumbering.h @@ -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 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 @@ -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 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 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 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 @@ -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 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 @@ -649,13 +582,9 @@ namespace DoFRenumbering const std::vector &starting_indices = std::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. + * 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 void @@ -666,27 +595,17 @@ namespace DoFRenumbering const std::vector &starting_indices = std::vector()); /** - * 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 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$. + * 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$. * - * 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 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 void @@ -781,14 +666,10 @@ namespace DoFRenumbering const std::vector &target_component = std::vector ()); /** - * 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 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 void @@ -813,13 +689,9 @@ namespace DoFRenumbering const std::vector &target_component = std::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. + * 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 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$. + * 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$. */ template 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 void block_wise (hp::DoFHandler &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 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 void block_wise (MGDoFHandler &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 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 @@ -951,16 +793,11 @@ namespace DoFRenumbering hierarchical (DoFHandler &dof_handler); /** - * Cell-wise renumbering. This function takes - * the ordered set of cells in - * cell_order, 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 + * cell_order, 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 void @@ -968,13 +805,9 @@ namespace DoFRenumbering const std::vector &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 void @@ -984,9 +817,8 @@ namespace DoFRenumbering const std::vector &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 void @@ -995,13 +827,9 @@ namespace DoFRenumbering const std::vector &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 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 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 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 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 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 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 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 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 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 void @@ -1249,14 +1027,14 @@ namespace DoFRenumbering const std::vector &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 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 void @@ -1285,19 +1057,12 @@ namespace DoFRenumbering const std::vector &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 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 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 @@ -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 i 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 i and + * belong to the same subdomain, then they will be in this order also after * reordering. */ template @@ -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 void diff --git a/deal.II/include/deal.II/grid/tria.h b/deal.II/include/deal.II/grid/tria.h index 315e325a41..a15b9b0e26 100644 --- a/deal.II/include/deal.II/grid/tria.h +++ b/deal.II/include/deal.II/grid/tria.h @@ -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 +inline +CellData::CellData () +{ + for (unsigned int i=0; i::vertices_per_cell; ++i) + vertices[i] = numbers::invalid_unsigned_int; + + material_id = 0; +} + + + namespace internal { namespace Triangulation diff --git a/deal.II/include/deal.II/lac/block_sparse_matrix.h b/deal.II/include/deal.II/lac/block_sparse_matrix.h index e5f91ad22b..75d3c5811e 100644 --- a/deal.II/include/deal.II/lac/block_sparse_matrix.h +++ b/deal.II/include/deal.II/lac/block_sparse_matrix.h @@ -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); //@} diff --git a/deal.II/include/deal.II/lac/sparse_matrix.h b/deal.II/include/deal.II/lac/sparse_matrix.h index 79b71911ac..6f9519ae27 100644 --- a/deal.II/include/deal.II/lac/sparse_matrix.h +++ b/deal.II/include/deal.II/lac/sparse_matrix.h @@ -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 - 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 friend class SparseMatrixIterators::Accessor; }; -/** - * @} - */ - #ifndef DOXYGEN /*---------------------- Inline functions -----------------------------------*/ @@ -2474,13 +2476,15 @@ SparseMatrix::end (const size_type r) template template inline -void SparseMatrix::print (STREAM &out, bool across, bool diagonal_first) const +void SparseMatrix::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; irows; ++i) { diff --git a/deal.II/source/CMakeLists.txt b/deal.II/source/CMakeLists.txt index c221f854c6..cabda8f8fd 100644 --- a/deal.II/source/CMakeLists.txt +++ b/deal.II/source/CMakeLists.txt @@ -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} diff --git a/deal.II/source/base/data_out_base.cc b/deal.II/source/base/data_out_base.cc index f1e611fc5d..b000b1435e 100644 --- a/deal.II/source/base/data_out_base.cc +++ b/deal.II/source/base/data_out_base.cc @@ -5629,6 +5629,16 @@ void DataOutBase::write_vtu_main (const std::vector > &patch AssertThrow (out, ExcIO()); } +template <> +void DataOutBase::write_svg<1,1> (const std::vector > &patches, + const std::vector &data_names, + const std::vector > &vector_data_ranges, + const SvgFlags &flags, + std::ostream &out) +{ + AssertThrow (false, ExcNotImplemented()); +} + template void DataOutBase::write_svg (const std::vector > &patches, @@ -5648,9 +5658,7 @@ void DataOutBase::write_svg (const std::vector > &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 >::const_iterator patch = patches.begin(); @@ -5672,12 +5680,12 @@ void DataOutBase::write_svg (const std::vector > &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 > &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.; diff --git a/deal.II/source/base/data_out_base.inst.in b/deal.II/source/base/data_out_base.inst.in index 96cc2fea22..28547f6d17 100644 --- a/deal.II/source/base/data_out_base.inst.in +++ b/deal.II/source/base/data_out_base.inst.in @@ -111,6 +111,8 @@ for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension : SPACE_DIMENSIONS const std::vector > &vector_data_ranges, const TecplotFlags &flags, std::ostream &out); + +#if deal_II_space_dimension >1 template void DataOutBase::write_svg (const std::vector > &patches, @@ -118,6 +120,7 @@ for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension : SPACE_DIMENSIONS const std::vector > &vector_data_ranges, const SvgFlags &flags, std::ostream &out); +#endif template void DataOutBase::write_deal_II_intermediate (const std::vector > &patches, diff --git a/deal.II/source/base/multithread_info.cc b/deal.II/source/base/multithread_info.cc index 6ea0b132a6..a3a92163de 100644 --- a/deal.II/source/base/multithread_info.cc +++ b/deal.II/source/base/multithread_info.cc @@ -26,8 +26,11 @@ # include #endif -#ifdef DEAL_II_WITH_THREADS +#if defined(__FreeBSD__) +# include +#endif +#ifdef DEAL_II_WITH_THREADS # include # include #endif diff --git a/deal.II/source/dofs/dof_renumbering.inst.in b/deal.II/source/dofs/dof_renumbering.inst.in index c8c1115558..d35eeb5dcd 100644 --- a/deal.II/source/dofs/dof_renumbering.inst.in +++ b/deal.II/source/dofs/dof_renumbering.inst.in @@ -204,7 +204,7 @@ namespace DoFRenumbering template void downstream > - (DoFHandler&, const Point&, + (DoFHandler&, const Point::space_dimension>&, const bool); template void @@ -240,13 +240,13 @@ namespace DoFRenumbering template void downstream > (hp::DoFHandler&, - const Point&, + const Point::space_dimension>&, const bool); template void downstream > (MGDoFHandler&, - const Point&, + const Point::space_dimension>&, const bool); template void @@ -281,7 +281,8 @@ namespace DoFRenumbering template void downstream - (DoFHandler&, const unsigned int, + (DoFHandler&, + const unsigned int, const Point&, const bool); diff --git a/deal.II/source/dummy.cc b/deal.II/source/dummy.cc index f7cb351468..dc760cd36b 100644 --- a/deal.II/source/dummy.cc +++ b/deal.II/source/dummy.cc @@ -21,5 +21,5 @@ * the generated Xcode project. */ -const int _global_symbol_42 = 42; +const int global_symbol_42 = 42; diff --git a/deal.II/source/lac/trilinos_sparse_matrix.cc b/deal.II/source/lac/trilinos_sparse_matrix.cc index dddb391a86..8423493505 100644 --- a/deal.II/source/lac/trilinos_sparse_matrix.cc +++ b/deal.II/source/lac/trilinos_sparse_matrix.cc @@ -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); } diff --git a/deal.II/tests/CMakeLists.txt b/deal.II/tests/CMakeLists.txt index 23449544a1..d594c3c3d4 100644 --- a/deal.II/tests/CMakeLists.txt +++ b/deal.II/tests/CMakeLists.txt @@ -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 index 0000000000..9bc70cb14b --- /dev/null +++ b/deal.II/tests/mesh_converter/meshes/README.txt @@ -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 /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.* diff --git a/deal.II/tests/quick_tests/CMakeLists.txt b/deal.II/tests/quick_tests/CMakeLists.txt index 57ef944d87..727911cb15 100644 --- a/deal.II/tests/quick_tests/CMakeLists.txt +++ b/deal.II/tests/quick_tests/CMakeLists.txt @@ -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 index 0000000000..9290f55a11 --- /dev/null +++ b/deal.II/tests/quick_tests/step-petsc.cc @@ -0,0 +1,220 @@ +/* --------------------------------------------------------------------- + * $Id: step-petsc.cc $ + * + * 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. + * + * --------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +using namespace dealii; + +// Test that deal.II is working with PETSc by solving the Laplace's +// problem in 2d. +class LaplaceProblem +{ +public: + LaplaceProblem (); + void run (); + +private: + void setup_system (); + void assemble_system (); + void solve (); + + Triangulation<2> triangulation; + FE_Q<2> fe; + DoFHandler<2> dof_handler; + + PETScWrappers::SparseMatrix A; + PETScWrappers::Vector b, x; + ConstraintMatrix constraints; + + TableHandler output_table; +}; + +LaplaceProblem::LaplaceProblem () + : + fe (1), + dof_handler (triangulation) +{} + +void LaplaceProblem::setup_system () +{ + dof_handler.distribute_dofs (fe); + + constraints.clear (); + DoFTools::make_zero_boundary_constraints (dof_handler, constraints); + constraints.close (); + + A.reinit (dof_handler.n_dofs(), dof_handler.n_dofs(), + dof_handler.max_couplings_between_dofs()); + b.reinit (dof_handler.n_dofs()); + x.reinit (dof_handler.n_dofs()); + + // some output + output_table.add_value ("cells", triangulation.n_active_cells()); + output_table.add_value ("dofs", dof_handler.n_dofs()); +} + +void LaplaceProblem::assemble_system () +{ + QGauss<2> quadrature_formula(2); + + FEValues<2> fe_values (fe, quadrature_formula, + update_values | + update_gradients | + update_quadrature_points | + update_JxW_values); + + const unsigned int dofs_per_cell = fe.dofs_per_cell; + const unsigned int n_q_points = quadrature_formula.size(); + + FullMatrix cell_A (dofs_per_cell, dofs_per_cell); + Vector cell_b (dofs_per_cell); + + std::vector local_dof_indices (dofs_per_cell); + + typename DoFHandler<2>::active_cell_iterator + cell = dof_handler.begin_active (), + endc = dof_handler.end (); + + for (; cell!=endc; ++cell) + { + fe_values.reinit (cell); + cell_A = 0; + cell_b = 0; + + for (unsigned int q_point=0; q_pointget_dof_indices (local_dof_indices); + + constraints.distribute_local_to_global (cell_A, local_dof_indices, A); + constraints.distribute_local_to_global (cell_b, local_dof_indices, b); + } + + A.compress (VectorOperation::add); + b.compress (VectorOperation::add); +} + +void LaplaceProblem::solve () +{ + SolverControl solver_control (1e03, 1e-03); + PETScWrappers::SolverCG cg_solver (solver_control); + PETScWrappers::PreconditionBlockJacobi preconditioner (A); + cg_solver.solve (A, x, b, preconditioner); + + // some output + // ? +} + +void LaplaceProblem::run () +{ + GridGenerator::hyper_cube (triangulation, -1, 1); + + for (unsigned int c=0; c<5; ++c) + { + triangulation.refine_global (1); + setup_system (); + assemble_system (); + solve (); + } + + // finialise output + output_table.write_text (std::cout); + deallog << std::endl; +} + + +int main (int argc, char **argv) +{ + try + { + dealii::Utilities::MPI::MPI_InitFinalize mpi_initialization (argc, argv, 1); + { + deallog.depth_console (0); + LaplaceProblem problem; + problem.run (); + deallog << "OK" << std::endl; + } + } + + catch (std::exception &exc) + { + std::cerr << std::endl << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Exception on processing: " << std::endl + << exc.what() << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + + return 1; + } + catch (...) + { + std::cerr << std::endl << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Unknown exception!" << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + + return 0; +} diff --git a/deal.II/tests/quick_tests/step-slepc.cc b/deal.II/tests/quick_tests/step-slepc.cc new file mode 100644 index 0000000000..e0818b475e --- /dev/null +++ b/deal.II/tests/quick_tests/step-slepc.cc @@ -0,0 +1,239 @@ +/* --------------------------------------------------------------------- + * $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. + * + * --------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +using namespace dealii; + +// Test that deal.II is working with SLEPc by solving the Laplace's +// eigenspectrum problem in 2d. +class LaplaceEigenspectrumProblem +{ +public: + LaplaceEigenspectrumProblem (); + void run (); + +private: + void setup_system (); + void assemble_system (); + void solve (); + + Triangulation<2> triangulation; + FE_Q<2> fe; + DoFHandler<2> dof_handler; + + PETScWrappers::SparseMatrix A, B; + std::vector x; + std::vector lambda; + ConstraintMatrix constraints; + + TableHandler output_table; +}; + +LaplaceEigenspectrumProblem::LaplaceEigenspectrumProblem () + : + fe (1), + dof_handler (triangulation) +{} + +void LaplaceEigenspectrumProblem::setup_system () +{ + dof_handler.distribute_dofs (fe); + + constraints.clear (); + DoFTools::make_zero_boundary_constraints (dof_handler, constraints); + constraints.close (); + + A.reinit (dof_handler.n_dofs(), dof_handler.n_dofs(), + dof_handler.max_couplings_between_dofs()); + B.reinit (dof_handler.n_dofs(), dof_handler.n_dofs(), + dof_handler.max_couplings_between_dofs()); + + x.resize (1); + x[0].reinit (dof_handler.n_dofs ()); + lambda.resize (1); + lambda[0] = 0.; + + // some output + output_table.add_value ("cells", triangulation.n_active_cells()); + output_table.add_value ("dofs", dof_handler.n_dofs()); +} + +void LaplaceEigenspectrumProblem::assemble_system () +{ + QGauss<2> quadrature_formula(2); + + FEValues<2> fe_values (fe, quadrature_formula, + update_values | + update_gradients | + update_quadrature_points | + update_JxW_values); + + const unsigned int dofs_per_cell = fe.dofs_per_cell; + const unsigned int n_q_points = quadrature_formula.size(); + + FullMatrix cell_A (dofs_per_cell, dofs_per_cell); + FullMatrix cell_B (dofs_per_cell, dofs_per_cell); + + std::vector local_dof_indices (dofs_per_cell); + + typename DoFHandler<2>::active_cell_iterator + cell = dof_handler.begin_active (), + endc = dof_handler.end (); + + for (; cell!=endc; ++cell) + { + fe_values.reinit (cell); + cell_A = 0; + cell_B = 0; + + for (unsigned int q_point=0; q_pointget_dof_indices (local_dof_indices); + + constraints.distribute_local_to_global (cell_A, local_dof_indices, A); + constraints.distribute_local_to_global (cell_B, local_dof_indices, B); + } + + A.compress (VectorOperation::add); + B.compress (VectorOperation::add); +} + +void LaplaceEigenspectrumProblem::solve () +{ + SolverControl solver_control (1000, 1e-03); + SLEPcWrappers::SolverArnoldi eigensolver (solver_control); + eigensolver.set_which_eigenpairs (EPS_SMALLEST_REAL); + eigensolver.solve (A, B, lambda, x, x.size()); + + // some output + output_table.add_value ("lambda", lambda[0]); + output_table.add_value ("error", std::fabs(2.-lambda[0])); +} + +void LaplaceEigenspectrumProblem::run () +{ + const double radius = dealii::numbers::PI/2.; + GridGenerator::hyper_cube (triangulation, -radius, radius); + + // set the old eigenvalue to a silly number. + double old_lambda = 1000; + + for (unsigned int c=0; c<5; ++c) + { + // obtain numerical result + triangulation.refine_global (1); + setup_system (); + assemble_system (); + solve (); + + // check energy convergence with previous result + AssertThrow (lambda[0]