In class Mesh/ParMesh:
* Move the serial implementation of UniformRefinement3D to a new
method: UniformRefinement3D_base. The implementations of the virtual
method UniformRefinement3D (which now have no parameters) use the
new UniformRefinement3D_base method.
* In UniformRefinement3D_base, implemented two algorithms for choosing
how to split the middle octahedron when refining a tetrahedron by
cutting off its four corner tets. (These four tets have the same
shape as the original tet and half the edge-length.) The choice of
the algorithm is hard-coded in a const variable for now.
* Add an optional parameter to UniformRefinement which is used to
choose how to refine tet-only meshes: the default choice is to use
the new algorithm defined by UniformRefinement3D; the second option
is to use the old default - call LocalRefinement (marking all
elements) to perform 3 levels of bisection. The new algorithm
always produces elements with better shape (aspect ratio) than the
old default (at least for the meshes in the data/ directory and a
few other meshes).
* Make the method Finalize virtual - its implementation in parallel
requires updates in the ParMesh data.
* Add a consistency check in ParMesh::ReorientTetMesh that verifies
the assumption made in the method about the update of the shared
triangles.
* Simplify implementation of some methods in class ParMesh by
separating common code in a new protected method: FinalizeParTopo.
Other updates:
* In the examples and miniapps, when using a tet-only mesh which is
first refined uniformly and then locally, it is now necessary to
call the method Mesh::Finalize(true) (which is now virtual) in order
to mark the elements for local refinement after the uniform
refinement.
* In example 12p, use better random seed values.
* In examples 3/3p, add a sample run with order=2 on a tet mesh - this
will test the methods {Mesh,ParMesh}::ReorientTetMesh. Previously,
these were only tested by one sample run in example 4p.
* In the mesh-explorer miniapp, add a refinement option to perform
uniform refinement of tet-only meshes using bisection.
* In the MFEM_LOCATION macro print the <file> and <line> location
using a standard format: <file>:<line>, as used by most compilers
when reporting warnings and errors.
* Remove FIXME comments about mesh format v1.0.1.
Based on commits by Mark Stowell:
- Adding time integrators for Hamiltonian systems. This family of integrators is
taken from the paper "A Symplectic Integration Algorithm for Separable
Hamiltonian Functions" by J. CANDY AND W. ROZMUS. They do a marvelous job of
conserving energy in coupled first order PDEs.
- If others agree we should probably move these classes into the linalg/ode.?pp
files (or other files nearby). First I would like to change the names of these
integrators so if anyone has a suggestion...
- This is a first draft of a time domain electromagnetics code. It is not yet
ready for trials but it will soon support two different current sources.
- There are many ways this could advance but we'll try to follow the example set
in the statics codes and keep it simple.
- Renamed the symplectic integration solvers to follow a convention implied in
the paper describing them. It also fits fairly well with the other ODE solvers
in MFEM.
- Improved the way source terms are handled. Also fixed a problem with the field
update.
- Moving the Symplectic integrator methods to the ode.?pp files.
- Changing the ess_tdof array argument to 'const' so that FormLinearSystem can
be used inside an ODE integrator.
- Modified VectorFECurlIntegrator so that it can compute either the Curl of an
H(curl) vector or the weak Curl of an H(div) vector.
- Adding a simple test of the symplectic integrator which integrates a scalar
valued ODE in time. The test code writes a datafile and a gnuplot input file
which can plot the datafile.
- Added support for Dirichlet boundary conditions. The code is still in a very
immature state but various features have been successfully tested. It now
remains to simplify and clean up the implementation and prepare a series of
example problems.
- Making some changes to conform to the new makefile design (which is a big
improvement by the way)
- First draft of a Halbach array example.
- Small post-merge changes