[cig-commits] commit 1968 by bangerth to /var/svn/dealii/aspect

dealii.demon at gmail.com dealii.demon at gmail.com
Wed Oct 16 09:09:14 PDT 2013


Revision 1968

Add the beginning of a testsuite.

A   trunk/aspire/tests/CMakeLists.txt
D   trunk/aspire/tests/Makefile
A   trunk/aspire/tests/run_test.cmake
A   trunk/aspire/tests/simple_1/
A   trunk/aspire/tests/simple_1/screen-output
A   trunk/aspire/tests/simple_1.prm
A   trunk/aspire/tests/simple_2/
A   trunk/aspire/tests/simple_2/screen-output
A   trunk/aspire/tests/simple_2.prm
A   trunk/aspire/tests/simple_3/
A   trunk/aspire/tests/simple_3/screen-output
A   trunk/aspire/tests/simple_3.prm


http://www.dealii.org/websvn/revision.php?repname=Aspect+Repository&path=%2F&rev=1968&peg=1968

Diff:
Copied: trunk/aspire/tests/CMakeLists.txt (from rev 1963, trunk/aspect/tests/CMakeLists.txt)
===================================================================
--- trunk/aspire/tests/CMakeLists.txt	                        (rev 0)
+++ trunk/aspire/tests/CMakeLists.txt	2013-10-16 16:08:59 UTC (rev 1968)
@@ -0,0 +1,107 @@
+################### top matter ################
+FIND_PACKAGE(Perl)
+
+MACRO(SET_IF_EMPTY _variable _value)
+  IF("${${_variable}}" STREQUAL "")
+    SET(${_variable} ${_value})
+  ENDIF()
+ENDMACRO()
+
+############################3
+
+ADD_CUSTOM_TARGET(tests)
+
+SET_IF_EMPTY(DEAL_II_DIFF "$ENV{DEAL_II_DIFF}")
+SET_IF_EMPTY(DEAL_II_DIFF "numdiff -a 1e-6 -q -s \" \t\n:\"")
+
+
+FILE(GLOB _tests *.prm)
+FOREACH(_test ${_tests})
+  GET_FILENAME_COMPONENT(_test ${_test} NAME_WE)
+  MESSAGE(STATUS "Adding test ${_test}")
+
+  IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_test}.cc)
+    ADD_LIBRARY(${_test} SHARED EXCLUDE_FROM_ALL ${_test}.cc)
+    DEAL_II_SETUP_TARGET(${_test})
+    SET(_testdepends ${_test})
+  ELSE()
+    SET(_testdepends)
+  ENDIF()
+
+  FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output-${_test})
+  ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/screen-output
+    COMMAND aspire ${CMAKE_CURRENT_SOURCE_DIR}/${_test}.prm
+            > ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/screen-output
+    COMMAND ${PERL_EXECUTABLE} -pi
+              ${CMAKE_CURRENT_SOURCE_DIR}/normalize.pl
+              ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/*
+    DEPENDS aspire ${CMAKE_CURRENT_SOURCE_DIR}/${_test}.prm ${_testdepends}
+    )
+
+  ADD_CUSTOM_TARGET(${_test}.run
+    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/screen-output
+    )
+
+
+  ADD_CUSTOM_TARGET(tests.${_test})
+
+
+  # for each of the output files saved in the source directory for
+  # this test, create targets that
+  # - create a 'output.notime' file
+  # - diff this file with the saved one and save the result
+  FILE(GLOB _outputs ${CMAKE_CURRENT_SOURCE_DIR}/${_test}/[a-zA-Z0-9]*)
+  FOREACH(_output ${_outputs})
+    GET_FILENAME_COMPONENT(_output ${_output} NAME)
+
+    # create the output.notime target
+    ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}.notime
+      COMMAND
+	cat ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}
+        | egrep -v '^\|'
+        > ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}.notime
+      DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/screen-output
+    )
+
+    # create the target that compares the .notime with the saved file
+    ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}.diff
+      COMMAND
+	if (diff ${CMAKE_CURRENT_SOURCE_DIR}/${_test}/${_output}
+              ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}.notime
+            > ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}.diff) \; then
+          : \;
+        else
+	  mv ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}.diff
+             ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}.diff.failed \;
+          echo "******* Error during diffing output results for ${_test}/${_output}" \;
+          echo "******* Results are stored in ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}.diff.failed" \;
+          echo "******* Diffs are:" \;
+          cat ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}.diff.failed \;
+	  false \;
+        fi
+      DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_test}/${_output}
+              ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}.notime
+    )
+
+    # add the target for this output file to the dependencies of this test
+    ADD_CUSTOM_TARGET(${_test}.${_output}.diff
+      DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output-${_test}/${_output}.diff
+      )
+    ADD_DEPENDENCIES(tests.${_test}
+                     ${_test}.${_output}.diff)
+  ENDFOREACH()
+
+  # add this test to the dependencies of the overall 'tests' target
+  # and declare it to ctest
+  ADD_DEPENDENCIES(tests tests.${_test})
+  ADD_TEST(NAME ${_test}
+    COMMAND
+       ${CMAKE_COMMAND}
+	  -DBINARY_DIR=${CMAKE_BINARY_DIR}
+          -DTESTNAME=tests.${_test}
+          -DERROR="Test ${_test} failed"
+          -P ${CMAKE_SOURCE_DIR}/tests/run_test.cmake
+        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+    )
+ENDFOREACH()
+

Copied: trunk/aspire/tests/run_test.cmake (from rev 1963, trunk/aspect/tests/run_test.cmake)
===================================================================
--- trunk/aspire/tests/run_test.cmake	                        (rev 0)
+++ trunk/aspire/tests/run_test.cmake	2013-10-16 16:08:59 UTC (rev 1968)
@@ -0,0 +1,15 @@
+EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND}
+    --build ${BINARY_DIR} --target ${TESTNAME}
+    RESULT_VARIABLE _result_code
+    OUTPUT_VARIABLE _output
+    )
+
+IF("${_result_code}" STREQUAL "0")
+    MESSAGE("${TESTNAME}: success.")
+
+ELSE()
+
+    MESSAGE("*** ${ERROR}: ***")
+    MESSAGE(${_output})
+    MESSAGE(FATAL_ERROR "*** Test aborted.")
+ENDIF()

Added: trunk/aspire/tests/simple_1/screen-output
===================================================================
Added: trunk/aspire/tests/simple_1.prm
===================================================================
--- trunk/aspire/tests/simple_1.prm	                        (rev 0)
+++ trunk/aspire/tests/simple_1.prm	2013-10-16 16:08:59 UTC (rev 1968)
@@ -0,0 +1,1050 @@
+# Listing of Parameters
+# ---------------------
+# A list of names of additional shared libraries that should be loaded upon
+# starting up the program. The names of these files can contain absolute or
+# relative paths (relative to the directory in which you call ASPECT). In
+# fact, file names that are do not contain any directory information (i.e.,
+# only the name of a file such as <myplugin.so> will not be found if they are
+# not located in one of the directories listed in the LD_LIBRARY_PATH
+# environment variable. In order to load a library in the current directory,
+# use <./myplugin.so> instead.
+# 
+# The typical use of this parameter is to so that you can implement additional
+# plugins in your own directories, rather than in the ASPECT source
+# directories. You can then simply compile these plugins into a shared library
+# without having to re-compile all of ASPECT. See the section of the manual
+# discussing writing extensions for more information on how to compile
+# additional files into a shared library.
+set Additional shared libraries         = 
+
+# In computations, the time step $k$ is chosen according to $k = c \min_K
+# rac{h_K}{\|u\|_{\infty,K} p_T}$ where $h_K$ is the diameter of cell $K$,
+# and the denominator is the maximal magnitude of the velocity on cell $K$
+# times the polynomial degree $p_T$ of the temperature discretization. The
+# dimensionless constant $c$ is called the CFL number in this program. For
+# time discretizations that have explicit components, $c$ must be less than a
+# constant that depends on the details of the time discretization and that is
+# no larger than one. On the other hand, for implicit discretizations such as
+# the one chosen here, one can choose the time step as large as one wants (in
+# particular, one can choose $c>1$) though a CFL number significantly larger
+# than one will yield rather diffusive solutions. Units: None.
+set CFL number                          = 1.0
+
+# The relative tolerance up to which the linear system for the composition
+# system gets solved. See 'linear solver tolerance' for more details.
+set Composition solver tolerance        = 1e-12
+
+# The number of space dimensions you want to run this program in. ASPECT can
+# run in 2 and 3 space dimensions.
+set Dimension                           = 2
+
+# The end time of the simulation. Units: seconds
+set End time                            = 800    # default: 1e300
+
+# A relative tolerance up to which the linear Stokes systems in each time or
+# nonlinear step should be solved. The absolute tolerance will then be the
+# norm of the right hand side of the equation times this tolerance. A given
+# tolerance value of 1 would mean that a zero solution vector is an acceptable
+# solution since in that case the norm of the residual of the linear system
+# equals the norm of the right hand side. A given tolerance of 0 would mean
+# that the linear system has to be solved exactly, since this is the only way
+# to obtain a zero residual.
+# 
+# In practice, you should choose the value of this parameter to be so that if
+# you make it smaller the results of your simulation do not change any more
+# (qualitatively) whereas if you make it larger, they do. For most cases, the
+# default value should be sufficient. However, for cases where the static
+# pressure is much larger than the dynamic one, it may be necessary to choose
+# a smaller value.
+set Linear solver tolerance             = 1e-7
+
+# The kind of scheme used to resolve the nonlinearity in the system.
+set Nonlinear solver scheme             = IMPES
+
+# As explained in the ASPECT paper (Kronbichler, Heister, and Bangerth, GJI
+# 2012) we first try to solve the Stokes system in every time step using a
+# GMRES iteration with a poor but cheap preconditioner. By default, we try
+# whether we can converge the GMRES solver in 30 such iterations before
+# deciding that we need a better preconditioner. This is sufficient for simple
+# problems with constant viscosity and we never need the second phase with the
+# more expensive preconditioner. On the other hand, for more complex problems,
+# and in particular for problems with strongly varying viscosity, the 30 cheap
+# iterations don't actually do very much good and one might skip this part
+# right away. In that case, this parameter can be set to zero, i.e., we
+# immediately start with the better but more expensive preconditioner.
+set Number of cheap Stokes solver steps = 0      # default: 30
+
+# The name of the directory into which all output files should be placed. This
+# may be an absolute or a relative path.
+set Output directory                    = output
+
+# A flag indicating whether the computation should be resumed from a
+# previously saved state (if true) or start from scratch (if false).
+set Resume computation                  = false
+
+# The start time of the simulation. Units: years if the 'Use years in output
+# instead of seconds' parameter is set; seconds otherwise.
+set Start time                          = 0
+
+# The mathematical equations that describe thermal convection only determine
+# the pressure up to an arbitrary constant. On the other hand, for comparison
+# and for looking up material parameters it is important that the pressure be
+# normalized somehow. We do this by enforcing a particular average pressure
+# value at the surface of the domain, where the geometry model determines
+# where the surface is. This parameter describes what this average surface
+# pressure value is supposed to be. By default, it is set to zero, but one may
+# want to choose a different value for example for simulating only the volume
+# of the mantle below the lithosphere, in which case the surface pressure
+# should be the lithostatic pressure at the bottom of the lithosphere.
+# For more information, see the section in the manual that discusses the
+# general mathematical model.
+set Surface pressure                    = 0
+
+# The relative tolerance up to which the linear system for the temperature
+# system gets solved. See 'linear solver tolerance' for more details.
+set Temperature solver tolerance        = 1e-12
+
+# The size of the time step of the simulation.
+set Time step                           = 1e-1   # default: 1.0
+
+# How frequently in timesteps to output timing information. This is generally
+# adjusted only for debugging and timing purposes.
+set Timing output frequency             = 100
+
+# Mantle convection simulations are often focused on convection dominated
+# systems. However, these codes can also be used to investigate systems where
+# heat conduction plays a dominant role. This parameter indicates whether the
+# simulator should also use heat conduction in determining the length of each
+# time step.
+set Use conduction timestep             = false
+
+
+subsection Boundary compositional model
+  subsection Function
+    # Sometimes it is convenient to use symbolic constants in the expression
+    # that describes the function, rather than having to use its numeric value
+    # everywhere the constant appears. These values can be defined using this
+    # parameter, in the form `var1=value1, var2=value2, ...'.
+    # 
+    # A typical example would be to set this runtime parameter to
+    # `pi=3.1415926536' and then use `pi' in the expression of the actual
+    # formula. (That said, for convenience this class actually defines both
+    # `pi' and `Pi' by default, but you get the idea.)
+    set Function constants  = 
+
+    # The formula that denotes the function you want to evaluate for
+    # particular values of the independent variables. This expression may
+    # contain any of the usual operations such as addition or multiplication,
+    # as well as all of the common functions such as `sin' or `cos'. In
+    # addition, it may contain expressions like `if(x>0, 1, -1)' where the
+    # expression evaluates to the second argument if the first argument is
+    # true, and to the third argument otherwise. For a full overview of
+    # possible expressions accepted see the documentation of the fparser
+    # library.
+    # 
+    # If the function you are describing represents a vector-valued function
+    # with multiple components, then separate the expressions for individual
+    # components by a semicolon.
+    set Function expression = 0; 0
+
+    # The name of the variables as they will be used in the function,
+    # separated by commas. By default, the names of variables at which the
+    # function will be evaluated is `x' (in 1d), `x,y' (in 2d) or `x,y,z' (in
+    # 3d) for spatial coordinates and `t' for time. You can then use these
+    # variable names in your function expression and they will be replaced by
+    # the values of these variables at which the function is currently
+    # evaluated. However, you can also choose a different set of names for the
+    # independent variables at which to evaluate your function expression. For
+    # example, if you work in spherical coordinates, you may wish to set this
+    # input parameter to `r,phi,theta,t' and then use these variable names in
+    # your function expression.
+    set Variable names      = x,y,t
+  end
+
+end
+
+
+subsection Boundary temperature model
+  # Select one of the following models:
+  # 
+  # `constant': Implementation of a model in which the boundary temperature
+  # values are constant throughout the whole boundary.
+  # 
+  # `box': A model in which the temperature is chosen constant on all the
+  # sides of a box.
+  # 
+  # `function': Implementation of a model in which the boundary temperature
+  # values are given by a function.
+  set Model name = constant # default: 
+
+
+  subsection Box
+    # Temperature at the bottom boundary (at minimal z-value). Units: K.
+    set Bottom temperature = 0
+
+    # Temperature at the left boundary (at minimal x-value). Units: K.
+    set Left temperature   = 1
+
+    # Temperature at the right boundary (at maximal x-value). Units: K.
+    set Right temperature  = 0
+
+    # Temperature at the top boundary (at maximal x-value). Units: K.
+    set Top temperature    = 0
+  end
+
+  subsection Constant
+    # Constant temperature value.
+    set Temperature = 300
+  end
+
+  subsection Function
+    # Sometimes it is convenient to use symbolic constants in the expression
+    # that describes the function, rather than having to use its numeric value
+    # everywhere the constant appears. These values can be defined using this
+    # parameter, in the form `var1=value1, var2=value2, ...'.
+    # 
+    # A typical example would be to set this runtime parameter to
+    # `pi=3.1415926536' and then use `pi' in the expression of the actual
+    # formula. (That said, for convenience this class actually defines both
+    # `pi' and `Pi' by default, but you get the idea.)
+    set Function constants  = 
+
+    # The formula that denotes the function you want to evaluate for
+    # particular values of the independent variables. This expression may
+    # contain any of the usual operations such as addition or multiplication,
+    # as well as all of the common functions such as `sin' or `cos'. In
+    # addition, it may contain expressions like `if(x>0, 1, -1)' where the
+    # expression evaluates to the second argument if the first argument is
+    # true, and to the third argument otherwise. For a full overview of
+    # possible expressions accepted see the documentation of the fparser
+    # library.
+    # 
+    # If the function you are describing represents a vector-valued function
+    # with multiple components, then separate the expressions for individual
+    # components by a semicolon.
+    set Function expression = 0
+
+    # The name of the variables as they will be used in the function,
+    # separated by commas. By default, the names of variables at which the
+    # function will be evaluated is `x' (in 1d), `x,y' (in 2d) or `x,y,z' (in
+    # 3d) for spatial coordinates and `t' for time. You can then use these
+    # variable names in your function expression and they will be replaced by
+    # the values of these variables at which the function is currently
+    # evaluated. However, you can also choose a different set of names for the
+    # independent variables at which to evaluate your function expression. For
+    # example, if you work in spherical coordinates, you may wish to set this
+    # input parameter to `r,phi,theta,t' and then use these variable names in
+    # your function expression.
+    set Variable names      = x,y,t
+
+    # minimum temperature on the boundary
+    set min                 = 
+  end
+
+end
+
+
+subsection Boundary velocity model
+  subsection Axisymmetric jetflow apparatus
+    # Uniform coflow $U_c$. Units: $m/s$.
+    set Uniform flow = 1
+  end
+
+  subsection Function
+    # Sometimes it is convenient to use symbolic constants in the expression
+    # that describes the function, rather than having to use its numeric value
+    # everywhere the constant appears. These values can be defined using this
+    # parameter, in the form `var1=value1, var2=value2, ...'.
+    # 
+    # A typical example would be to set this runtime parameter to
+    # `pi=3.1415926536' and then use `pi' in the expression of the actual
+    # formula. (That said, for convenience this class actually defines both
+    # `pi' and `Pi' by default, but you get the idea.)
+    set Function constants  = 
+
+    # The formula that denotes the function you want to evaluate for
+    # particular values of the independent variables. This expression may
+    # contain any of the usual operations such as addition or multiplication,
+    # as well as all of the common functions such as `sin' or `cos'. In
+    # addition, it may contain expressions like `if(x>0, 1, -1)' where the
+    # expression evaluates to the second argument if the first argument is
+    # true, and to the third argument otherwise. For a full overview of
+    # possible expressions accepted see the documentation of the fparser
+    # library.
+    # 
+    # If the function you are describing represents a vector-valued function
+    # with multiple components, then separate the expressions for individual
+    # components by a semicolon.
+    set Function expression = 0; 0
+
+    # The name of the variables as they will be used in the function,
+    # separated by commas. By default, the names of variables at which the
+    # function will be evaluated is `x' (in 1d), `x,y' (in 2d) or `x,y,z' (in
+    # 3d) for spatial coordinates and `t' for time. You can then use these
+    # variable names in your function expression and they will be replaced by
+    # the values of these variables at which the function is currently
+    # evaluated. However, you can also choose a different set of names for the
+    # independent variables at which to evaluate your function expression. For
+    # example, if you work in spherical coordinates, you may wish to set this
+    # input parameter to `r,phi,theta,t' and then use these variable names in
+    # your function expression.
+    set Variable names      = x,y,t
+  end
+
+end
+
+
+subsection Checkpointing
+  # The number of timesteps between performing checkpoints. If 0 and time
+  # between checkpoint is not specified, checkpointing will not be performed.
+  # Units: None.
+  set Steps between checkpoint = 0
+
+  # The wall time between performing checkpoints. If 0, will use the
+  # checkpoint step frequency instead. Units: Seconds.
+  set Time between checkpoint  = 0
+end
+
+
+subsection Compositional fields
+  # A list of integers smaller than or equal to the number of compositional
+  # fields. All compositional fields in this list will be normalized before
+  # the first timestep. The normalization is implemented in the following way:
+  # First, the sum of the fields to be normalized is calculated at every point
+  # and the global maximum is determined. Second, the compositional fields to
+  # be normalized are divided by this maximum.
+  set List of normalized fields = 
+
+  # The number of fields that will be advected along with the flow field,
+  # excluding velocity, pressure and temperature.
+  set Number of fields          = 3 # default: 0
+end
+
+
+subsection Compositional initial conditions
+  # Select one of the following models:
+  # 
+  # `function': Composition is given in terms of an explicit formula
+  set Model name = function
+
+
+  subsection Function
+    # Sometimes it is convenient to use symbolic constants in the expression
+    # that describes the function, rather than having to use its numeric value
+    # everywhere the constant appears. These values can be defined using this
+    # parameter, in the form `var1=value1, var2=value2, ...'.
+    # 
+    # A typical example would be to set this runtime parameter to
+    # `pi=3.1415926536' and then use `pi' in the expression of the actual
+    # formula. (That said, for convenience this class actually defines both
+    # `pi' and `Pi' by default, but you get the idea.)
+    set Function constants  = 
+
+    # The formula that denotes the function you want to evaluate for
+    # particular values of the independent variables. This expression may
+    # contain any of the usual operations such as addition or multiplication,
+    # as well as all of the common functions such as `sin' or `cos'. In
+    # addition, it may contain expressions like `if(x>0, 1, -1)' where the
+    # expression evaluates to the second argument if the first argument is
+    # true, and to the third argument otherwise. For a full overview of
+    # possible expressions accepted see the documentation of the fparser
+    # library.
+    # 
+    # If the function you are describing represents a vector-valued function
+    # with multiple components, then separate the expressions for individual
+    # components by a semicolon.
+    set Function expression = 0.5; 0.5; 0 # default: 0
+
+    # The name of the variables as they will be used in the function,
+    # separated by commas. By default, the names of variables at which the
+    # function will be evaluated is `x' (in 1d), `x,y' (in 2d) or `x,y,z' (in
+    # 3d) for spatial coordinates and `t' for time. You can then use these
+    # variable names in your function expression and they will be replaced by
+    # the values of these variables at which the function is currently
+    # evaluated. However, you can also choose a different set of names for the
+    # independent variables at which to evaluate your function expression. For
+    # example, if you work in spherical coordinates, you may wish to set this
+    # input parameter to `r,phi,theta,t' and then use these variable names in
+    # your function expression.
+    set Variable names      = x,y,t
+  end
+
+end
+
+
+subsection Discretization
+  # The polynomial degree to use for the advection variables. Units: None.
+  set Advection polynomial degree             = 2
+
+  # The polynomial degree to use for the velocity variables in the Stokes
+  # system. The polynomial degree for the pressure variable will then be one
+  # less in order to make the velocity/pressure pair conform with the usual
+  # LBB (Babuska-Brezzi) condition. In other words, we are using a Taylor-Hood
+  # element for the Stoeks equations and this parameter indicates the
+  # polynomial degree of it. Units: None.
+  set Stokes velocity polynomial degree       = 2
+
+  # Set to true if the problem is axisymmetric and the flow in it should be
+  # solved in an $r,z$ coordinate system rather than the usual x,y coordinate
+  # system. This obviously only makes sense if we are in dimension 2.
+  set Use axisymmetric discretization         = false
+
+  # Whether to use a Stokes discretization that is locally conservative at the
+  # expense of a larger number of degrees of freedom (true), or to go with a
+  # cheaper discretization that does not locally conserve mass, although it is
+  # globally conservative (false).
+  # 
+  # When using a locally conservative discretization, the finite element space
+  # for the pressure is discontinuous between cells and is the polynomial
+  # space $P_{-q}$ of polynomials of degree $q$ in each variable separately.
+  # Here, $q$ is one less than the value given in the parameter ``Stokes
+  # velocity polynomial degree''. As a consequence of choosing this element,
+  # it can be shown if the medium is considered incompressible that the
+  # computed discrete velocity field $\mathbf u_h$ satisfies the property
+  # $\int_{\partial K} \mathbf u_h 


More information about the CIG-COMMITS mailing list