Reference documentation for deal.II version Git 3ff8e288d2 20200220 17:30:00 +0100

This is the list of changes made since the last release of deal.II. All entries are signed with the names of the authors.
Following are a few modifications to the library that unfortunately are incompatible with previous versions of the library, but which we deem necessary for the future maintainability of the library. Unfortunately, some of these changes will require modifications to application programs. We apologize for the inconvenience this causes.
Removed: The DataOutBase namespace contained a number of write_*
functions that had already been deprecated in deal.II 9.1. These were removed, but all were of mostly internal interest and unlikely to be used in user programs.
(Wolfgang Bangerth, 2020/02/05)
Changed: Adjusted ranges for GridRefinement::refine_and_coarsen_fixed_fraction(): Now criteria of every cell will be considered.
(Marc Fehling, 12/05/2019)
Changed: Adjusted threshold for fixed number adaptation: The last qualifying cells for refinement and coarsening now specify their respective threshold. This affects both GridRefinement::fixed_number_refinement() and parallel::distributed::GridRefinement::fixed_number_refinement().
(Marc Fehling, 12/05/2019)
Removed: The type alias FunctionParser::ConstMapIterator has been removed.
(David Wells, 2019/12/05)
Deprecated: The include files in deal.II/base/std_cxx11
have been deprecated. Just use the corresponding C++11 header files.
(Wolfgang Bangerth, 2019/08/21)
Removed: The include files in include/deal.II/base/std_cxx1x
, deprecated since 2014, have been removed. They had introduced a namespace std_cxx1x
at a time when deal.II did not yet require C++11compatible compilers, and this namespace was later also made available via the name std_cxx11
once C++11 was actually published. In any case, none of this is necessary any more since we now have C++11 compilers.
(Wolfgang Bangerth, 2019/12/02)
Removed: The deprecated method MatrixFree::get_size_info() has been removed. Please use the method MatrixFree::get_task_info() to access the same information.
(Peter Munch, 2019/12/01)
Removed: The typedefs DataOut::active_cell_iterator and DataOut_DoFData::active_cell_iterator have been removed. These typedefs are an implementational detail that should have never exposed in the interface.
(Matthias Maier, 2019/11/25)
Changed: The variable level_mg_handler has been renamed to mg_level in MatrixFree and its associated AdditionalData.
(Peter Munch, 2019/10/17)
Changed: The type of exact_solution in VectorTools::integrate_difference() was double and fe_function could have any numerical type (double, float, std::complex<double> or std::complex<float>). This would lead in certain cases to unnecessary casts, for example from double to float. In addition it was not possible to compare a std::complex exact_solution to a std::complex fe_function. Now the types of exact_solution and fe_function must be the same, as a result integrate_difference() can be used to compare a std::complex exact_solution to a std::complex fe_function. The old version of the function has been deprecated.
(Daniel GarciaSanchez, 2019/10/09)
Changed: Several variations of the DoFTools::make_periodicity_constraints() function expressed the direction
as an int
variable. But it's really an unsigned quantity, and as a consequence was changed to unsigned int
.
(Wolfgang Bangerth, 2019/09/26)
Changed: The parallel::TriangulationBase class does not store the number of active cells of all MPI processes any more. Instead, the information is computed ondemand when calling the function parallel::TriangulationBase::compute_n_locally_owned_active_cells_per_processor.
(Peter Munch, 2019/09/20)
Removed: The enum TimestepControl::Strategy is removed.
(Reza Rastak, 2019/09/18)
Changed: The Algorithms::TimeStepControl::file_name_format() functions have been removed. They were setters and getters for an internal field of that class that turned out to be unused anywhere – in other words, the functions had no real functionality.
(Wolfgang Bangerth, 2019/09/18)
Removed: BlockVectorBase::equ(a, U, b, V) is removed.
(Reza Rastak, 2019/09/03)
Changed: The interface to the parallel::CellWeights class was generalized by introducing static member functions. This way, users are capable of connecting and disconnecting callback functions manually if desired without instantiating an object of this class. The legacy interface has been deprecated.
(Marc Fehling, 2019/09/03)
Changed: A number of classes implementing tensorvalued polynomials had a member function called compute_n_pols()
. This name has now been changed to n_polynomials()
, better reflecting our usual naming scheme as well as what the function does – which in many cases is not actually computing but just returning something.
(Wolfgang Bangerth, 2019/08/2)
Changed: The complex operator overloads for multiplication and division are restricted to floating point types.
(Daniel Arndt, 2019/08/21)
Changed: Various classes implementing tensor polynomials had a function compute()
. This function has been renamed to evaluate()
since this name more adequately represents the fact that the function does not in fact compute the polynomial, but only evaluates it for a given value of the unknown variable.
(Wolfgang Bangerth, 2019/08/21)
Changed: The parallel::Triangulation class has been renamed to parallel::TriangulationBase to better reflect its purpose of a base to a series of parallel triangulations such as parallel::distributed::Triangulation or parallel::shared::Triangulation.
(Peter Munch, 2019/08/19)
Replaced: boost::optional was replaced by std_cxx17::optional that wraps the former and std::optional depending on compiler support for C++17.
(Daniel Arndt, 2019/08/17)
Changed: The test suite now requires numdiff (i.e., it cannot be run with simply diff).
(David Wells, 2019/08/10)
Improved: CellDataStorage stores a reference to a single unique triangulation to ensure that cells from other triangulations cannot store any data on the current object.
(Reza Rastak, 2019/08/08)
Changed: mapping.h referred to different kinds of mappings in an enum MappingType; however, since it's an enum, MappingType is a misleading name. All instances of MappingType and mapping_type have been changed to MappingKind and mapping_kind, respectively. The documentation has been updated in order to reflect these changes as well.
(Graham Harper, 2019/08/06)
Changed: The GridOut::write_svg() function now no longer outputs the cell level and number by default; this also obviates the need for the colorbar and the caption. This is achieved by changing the defaults in the constructor of the GridOutFlags::Svg structure. This likely comes closer to what most users want to see from this function – namely, just the mesh for inclusion into text.
(Wolfgang Bangerth, 2019/08/05)
Removed: The deprecated PreconditionChebyshev member variables nonzero_strarting and matrix_diagonal_inverse were removed.
(Daniel Arndt, 2019/07/11)
Changed: The CoarseningStrategies struct has been moved out of the parallel::distributed::CellDataTransfer class into a separate header and is now treated as a namespace. Its static member functions are now free functions and only take a std::vector
as a parameter that contains all the data from the children. Therefore, the coarsening_strategy
parameter for the constructor of the parallel::distributed::CellDataTransfer class has to be adjusted accordingly as well.
(Marc Fehling, 2019/06/26)
Removed: The deprecated headers deal.II/grid/tria_boundary.h
and deal.II/grid/tria_boundary_lib.h
have been removed.
(Martin Kronbichler, 2019/06/13)
Fixed: During coarsening, we need to decide which finite element is assigned to parent cells. The decision criterion was not consistent, but is now unified: The least dominant element of their children will be picked, according to hp::FECollection::find_dominated_fe_extended(). This affects the implementations of SolutionTransfer, parallel::distributed::SolutionTransfer, parallel::CellWeights, and hp::DoFHandler.
(Marc Fehling, 2019/06/06)
Changed: The functions DoFHandler::n_locally_owned_dofs_per_processor(), DoFHandler::locally_owned_dofs_per_processor() and DoFHandler::locally_owned_mg_dofs_per_processor() previously returned a reference to an internally stored array of index sets on all processors. As this cannot scale to large processor counts, these functions have been marked deprecated and only populate the internal vectors on the first demand. This means that the first call must be a collective call on all MPI ranks to ensure that the underlying MPI_Allgather function completes. Use the new functions DoFHandler::compute_n_locally_owned_dofs_per_processor(), DoFHandler::compute_locally_owned_dofs_per_processor() and DoFHandler::compute_locally_owned_mg_dofs_per_processor() instead or, even better for scalability, avoid them in favor of some local communication.
(Martin Kronbichler, 2019/06/03)
New: The step47 tutorial program demonstrates the solution of the biharmonic equation, a fourthorder differential equation.
(Natasha Sharma, Guido Kanschat, Timo Heister, Wolfgang Bangerth, Zhuoran Wang, 2020/01/15)
New: The SymbolicFunction<dim> class allows one to leaverage the SymEngine library to generate Function objects where the gradients, Laplacians, and Hessians are computed symbolically providing also the possibility to extract the time derivative of the SymbolicFunction<dim> object as another SymbolicFunction<dim> object.
(Luca Heltai, 2019/12/14)
New: Implementation of the IDR(s) Krylov solver for nonsymmetric, indefinite linear systems.
(Thomas Clevenger, 2019/12/05)
New: ParticleHandler::insert_global_particles() allows one to pass to a ParticleHandler object a vector of positions and a vector of properties to insert. Differently from the other insert* methods, this one allows particles to fall within artificial cells. In this case, the method infers who should receive the positions and the properties, and sends this information to that process. This is useful when constructing particles from nonmatching triangulations, where the distribution of the particle positions is arbitrary, and possibly not related to the locally owned cells.
(Luca Heltai, 2019/11/25)
New: Add new GridGenerator tool to create a Ctype mesh around a NACA or Joukowski airfoil.
(Elias Dejene, Peter Munch, 2019/11/12)
New: The step12 tutorial program has been changed to use FEInterfaceValues. The old version of step12 is still available as step12b.
(Timo Heister, 2019/08/27)
New: The FEInterfaceValues class provides a new abstraction to assemble interface terms between two neighboring cells. This is commonly used in Discontinous Galerkin methods.
(Timo Heister, 2019/08/24)
New: Introduce a new distributed triangulation class parallel::fullydistributed::Triangulation. It partitions the coarsegrid as well as works for hanging nodes, geometric multigrid, and arbitrary dimensions.
(Peter Munch, 2019/07/26)
Improved: deal.II now bundles a subset of Boost 1.70 instead of a subset of Boost 1.62.
(Daniel Arndt, 2019/07/19)
New: The step65 tutorial program presents TransfiniteInterpolationManifold, a manifold class that can propagate curved boundary information into the interior of a computational domain, and MappingQCache for fast operations for expensive manifolds.
(Martin Kronbichler, 2019/06/06)
New: An IndexSet::split_by_block() function is added which partitions the set indices, for example based on a block structure, into blocks.
(Katrin Mang, 2020/02/14)
Add: python binds for Triangulation::create_triangulation, GridTools::scale and GridGenerator::hyper_cube_with_cylindrical_hole.
(Alexander Grayver, 2020/02/11)
Fixed: The output message generated by ExcInvalidBoundaryFunction() in deal.II/numerics/error_estimator.h, i.e. "However, the finite element in use has arg2 components" should be "However, the finite element in use has arg3 components". This is now fixed.
(Jihuan Tian, 2020/02/09)
Improved: Add a constructor to ArrayView that takes as argument a reference to an arbitrary value type (like int, double, ...).
(Peter Munch, 2020/01/02)
New: The function Utilities::MPI::min_max_avg() can now compute the sum, average, minimum, maximum, and the process id of the minimum and maximum for each entry of a ArrayView.
(Peter Munch, 2020/02/03)
Changed: The GridOutFlags::Svg constructor may now take an additional argument supporting the output of boundary ids on faces.
(Graham Harper, 2020/02/02)
Fixed: Calling DataOut::merge() with objects that were created using a mapping and more than one number of subdivisions greater than one sometimes resulted in an unwarranted triggering of an assertion. This is now fixed.
(Paras Kumar, Wolfgang Bangerth, 2020/02/02)
New: added ParameterHandler::subsection_path_exists() method.
(Pasquale Claudio Africa, 2020/01/29)
Add an optional std::function parameter to make_flux_sparsity_pattern which can be used to specify over which faces there should be a flux coupling in the created sparsity pattern.
(Simon Sticko, 2020/01/28)
Improved: ParameterHandler class can now optionally print parameters in the same order as they are declared, rather than sorted in alphabetical order.
(Pasquale Claudio Africa, 2020/01/28)
Improved: ParameterHandler::parse_input_from_json() can handle values of type `"a" : 1', in addition to `"a" : {"value" : 1}'.
(Peter Munch, 2020/01/27)
New: ParameterHandler::parse_input_from_json() and ParameterHandler::parse_input_from_xml() can skip undifined sections and entries.
(Peter Munch, 2020/01/27)
New: Python bindings for the Quadrature class.
(Alexander Grayver, 2020/01/20)
New: Utilities::compress() and Utilities::decompress() allow to compress and decompress a string using gzip.
(Luca Heltai, Nicola Giuliani, 2020/01/17)
New: FESeries::Fourier and FESeries::Legendre have been extended by an equality operator (==) and the functionality to save and load previously calculated transformation matrices.
(Marc Fehling, 2020/01/16)
New: Equality operator (==) for hp::QCollection.
(Marc Fehling, 2020/01/16)
Deprecated: The CellAccessor::active() function did not satisfy the usual naming scheme of that class in which functions are called CellAccessor::is_ghost(), CellAccessor::is_locally_owned(), etc. As a consequence, there is now a new function CellAccessor::is_active(), with the old function deprecated.
(Wolfgang Bangerth, 2020/01/16)
Fixed: The GridOut::write_svg() function was not instantiated for the case dim=3, spacedim=3
by accident. This is now fixed.
(Wolfgang Bangerth, 2020/01/14)
New: Added a new function GridGenerator::replicate_triangulation() for creating a new triangulation by copying a given triangulation repeatedly along the coordinate axes.
(David Wells, Victor Zheng, 2020/01/13)
Fixed: DataOut::write_vtu_in_parallel() used to generate invalid .vtu files if some processors had 0 patches to write. This is now fixed.
(Timo Heister, 2020/01/12)
Improved: GridTools::delete_duplicated_vertices() now runs, for cubelike geometries, in \(O(n^{3/2})\) time in 2D and \(O(n^(5/3))\) time in 3D instead of \(O(n^2)\) time.
(David Wells, 2020/01/12)
New: The mechanism implemented by DataOut via the first_cell()
and next_cell()
virtual functions has been deprecated. In its place, the DataOut::set_cell_selection() function allows doing the same but without the need for deriving classes.
(Wolfgang Bangerth, 2020/01/11)
New: ParticleHandler::get_particle_positions() and ParticleHandler::set_particle_positions() allow to set and get particle positions from various types of sources.
(Bruno Blais, Luca Heltai, 2020/01/10)
New: There are new versions of DoFTools::count_dofs_per_component() and DoFTools::count_dofs_per_block() that return their results as a std::vector
object, rather than doing so through an output argument. The versions that did the latter have been deprecated.
(Wolfgang Bangerth, 2020/01/09)
New: A variant of CellwiseInverseMassMatrix::apply() defining the inverse of the diagonal by FEEvaluationBase::JxW() from the provided FEEvaluationBase variable has been implemented.
(Martin Kronbichler, 2020/01/05)
New: Add method is_ancestor_of to CellId.
(Peter Munch, 2020/01/02)
New: The function MatrixFree::get_dof_handler() has been templated to enable to return either a DoFHandler<dim> or an hp::DoFHandler<dim>.
(Bruno Turcksin, 2020/01/02)
New: The function Threads::TaskGroup::size() allows querying the size of a task group.
(Wolfgang Bangerth, 2019/12/31)
Improved: mu_parser functions now use random number generation facilities provided by the standard library.
(Reza Rastak, 2019/20/30)
New: The SparseDirectUMFPACK class is now able to solve complexvalued problems as well.
(Wolfgang Bangerth, 2019/12/30)
New: The method memory_consumption has been implemented in and added to a variety of classes, e.g. FE_DGQ.
(Peter Munch, 2019/12/22)
New: There are new versions of DoFTools::extract_dofs() that return their results as an IndexSet, rather than doing so through an output argument of type std::vector<bool>
. The versions that did the latter have been deprecated.
(Wolfgang Bangerth, 2019/12/19)
New: The TensorFunctionParser class allows to read in a function similarly to the FunctionParser class using the MuParser.
(Konrad Simon, 2019/12/17)
Added python wrappers for the FunctionManifold class
(Alexander Grayver, 2019/12/17)
Added: Python wrappers for the CellAccessor's methods: active, level, index, vertex_index, neighbor_is_coarser, neighbor_of_neighbor and GridTools' methods: find_cells_adjacent_to_vertex, minimal_cell_diameter, maximal_cell_diameter, and Mapping::project_real_point_to_unit_point_on_face
(Alexander Grayver, 2020/01/06)
Improved: GridGenerator::channel_with_cylinder() now places some of the points at the transition between the cylinder mesh and the outer structured mesh slightly farther away from the cylinder center, thereby improving mesh quality.
(Martin Kronbichler, 2019/12/16)
New: IndexSet::tensor_product() creates a new IndexSet with global size equal to this>size()*other.size(), containing for every element n of this IndexSet, the indices of the other IndexSet, contained in the interval [n*other.size(), (n+1)*other.size()).;
;(Luca Heltai, 2019/12/12)
Fixed: The introduction of step18 had a mistake in the description of the weak formulation. However, given that we choose the boundary forces equal to zero, the program correctly implements the equations.
(Ming Yang, 2019/12/06)
Added: Python wrappers for the CellAccessor::center, GridTools::transform, GridTools::distort_random, GridGenerator::extrude_triangulation, GridTools::find_active_cell_around_point
(Alexander Grayver, 2019/12/06)
Improved: GridGenerator::subdivided_hyper_cube() gained an option to also set boundary ids.
(Bruno Blais, 2019/12/05)
Changed: step61 no longer generates two output files for the interior pressures and the Darcy velocities, respectively. Instead, it puts all of this information into a single graphical output file.
(Wolfgang Bangerth, 2019/12/02)
Changed: The step61 program now has a separate function compute_postprocessed_velocity()
that computes the velocity field as a postprocessing step after computing the pressure variable. The resulting velocity field is used in both computing errors and when creating graphical output.
(Wolfgang Bangerth, 2019/12/02)
New: Particles::Particle::set_id() allows to set a particle ID number.
(Luca Heltai, 2019/12/02)
Fixed: Utilities::MPI::some_to_some() now allows sending to our own mpi process.
(Luca Heltai, 2019/12/02)
Fixed: ParticleHandler::insert_particles() taking a std::vector of Point objects starts numbering the particles with 0 instead of 1 to be consistent with the other ParticleHandler::insert_particles() function and the ParticleHandler::insert_particle() function.
(Daniel Arndt, 2019/11/30)
Improved: Allow using ParticleHandler with serial triangulations.
(Daniel Arndt, 2019/11/29)
Added: New python wrappers for the Manifold class with a possibility to assign manifold object to a python triangulation object.
(Alexander Grayver, 2019/11/28)
Improved: The setup of MappingQGeneric::InternalData within the constructor of FEValues would previously unconditionally allocate memory for all shape functions and all quadrature points, also for the case where we use the tensor product and the full interpolation is unnecessary. This has been fixed, improving the situation for very high orders and numbers of quadrature points (e.g., avoiding 400 MB of memory for mapping degrees of 15 with \(16^3\) quadrature points in 3D).
(Martin Kronbichler, 2019/11/26)
Fixed: MatrixFree::reinit() would sometimes perform invalid index accesses on continuous elements with hanging nodes when data structures for face integrals are requested. This is now fixed.
(Martin Kronbichler, Peter Munch, Laura Prieto Saavedra, 2019/11/26)
New: ParticleHandler::locally_relevant_ids() generates an IndexSet of the locally owned particles. This can be used to construct linear algebra vectors to be used with particles.
(Luca Heltai, Bruno Blais, 2019/11/18)
Added: New python wrappers for the MappingQGeneric class
(Alexander Grayver, 2019/11/18)
Changed: Indent scripts now also format files related to the python bindings
(Alexander Grayver, 2019/11/15)
Fixed: MappingQGeneric::transform_real_to_unit_cell() would previously ignore the moved vertex locations of derived classes such as MappingQEulerian for linear mappings in 1D and 2D. This is now fixed.
(Martin Kronbichler, 2019/11/14)
New: DoFTools::locally_owned_dofs_per_component() returns a vector of IndexSet, containing the locally owned dofs that refers to the ComponentMask passed as an argument.
(Bruno Blais, Luca Heltai, 2019/11/26)
Added: extend python bindings to allow for working with cell's neighbors, iterate over faces and modify boundary ids.
(Alexander Grayver, 2019/11/14)
New: Added reading writing capabilities for STL files.
(Nicola Giuliani, 2019/11/13)
New: add more quadrature choices to QuadratureSelector class.
(Daniel Jodlbauer, 2019/11/11)
Fixed: In step54, the std namespace was missing for some calls to cout and endl.
(Mohammed Hassan, Bruno Turcksin, 2019/11/07)
New: template argument for type of vectorized array (vector width) in matrixfree operators.
(Daniel Jodlbauer, 2019/11/06)
Fixed: Computations with block vectors with more than 4 billion degrees of freedom reported incorrect values for locally_owned_elements(). This is now fixed by implementing IndexSet::add_indices() for large offsets.
(Timo Heister, 2019/11/05)
New: The Utilities::MPI::CollectiveMutex helper class allows protection of critical sections in code using MPI.
(Timo Heister, 2019/11/04)
Fixed: FESubfaceValues::reinit() would previously throw an exception when called on a face behind a refined periodic neighbor. This case is now handled properly.
(Peter Munch, 2019/11/03)
Changed: Fixed the computation of the finite element degree in VectorTools::project_boundary_values_curl_conforming_l2 to be based on the degree of the finite element selected for the application of the boundary values and not of the whole finite element.
(Winnifried Wollner, 2019/11/02)
New: DoFTools::make_periodicity_constraints() can now be used to implement Bloch periodic conditions.
(Daniel GarciaSanchez, 2019/11/01)
Changed: parallel::TriangulationBase::copy_triangulation does not copy the MPI communicator from the given source triangulation.
(Alexander Grayver, 2019/10/31)
New: Added convenience functions CellAccessor::face_iterator_to_index() and TriaAccessor::child_iterator_to_index() for computing face and child numbers from iterators.
(David Wells, 2019/10/27)
New: Added two new overloads of FEValues::reinit() that take face and subface iterators instead of face and subface numbers.
(David Wells, 2019/10/27)
New: The Utilities::MPI::DuplicatedCommunicator helper class allows safe duplication and freeing of an MPI communicator.
(Timo Heister, 2019/10/22)
Improved: VectorTools::interpolate() now works for a parallel::distributed::Triangulation
(Pasquale Claudio Africa, Doug ShiDong, 2019/10/24)
New: new function Utilities::truncate_to_n_digits() that can be used to cutoff floating point numbers after a specified number of digits of accuracy (decimal places) in scientific floating point notation.
(Niklas Fehn, 2019/10/18)
Refactor: improve implementation of Utilities::needed_digits() by using functionality from the standard library.
(Niklas Fehn, 2019/10/18)
Changed: SolverControl returns number of iterations of ArpackSolver after solving for Eigenvalues. It also checks if the requested eigenvalues are supported by the solver, depending on symmetry.
(Roland Richter, 2019/10/17)
New: Extend function GridGenerator::torus<3,3>() so that one can generate an open torus with an angle of 0 < phi <= 2*pi.
(Niklas Fehn, 2019/10/16)
New: Provide cell iterators to interior and exterior cells of a macro face through the function MatrixFree::get_face_iterator().
(Martin Kronbichler, Peter Munch, Michal Wichrowski, 2019/10/16)
New: The function DataOutInterface::write_vtu_with_pvtu_record() combines write_vtu() and write_pvtu_record() into a single function and generates the file extensions with counter, processor ID, and .vtu/.pvtu ending automatically.
(Niklas Fehn, 2019/10/14)
New: The class VectorizedArray now provides STLlike member functions: VectorizedArray::size() returns the number of array elements and VectorizedArray:begin() as well as VectorizedArray::end() provide iterators enabling rangebased iterations.
(Martin Kronbichler, Peter Munch, Daniel Arndt, 2019/10/12)
Improved: Make the output of cells, (all noninternal) faces and (all noninternal) cofaces optional in GridOut::write_vtk.
(Peter Munch, Niklas Fehn, 2019/10/11)
Fixed: Take in account p::d::Triangulation when using DoFHandler<dim, spacedim>::n_boundary_dofs() and its hp version. It now returns locally owned dofs instead of attempting a global count.
(Doug ShiDong, 2019/10/11)
New: The function GridTools::compute_maximum_aspect_ratio() computes the maximum aspect ratio of a mesh with arbitrarily deformed elements.
(Niklas Fehn, 2019/10/08)
Fixed: Make sure that merge_triangulations() does not forget about where the boundary is (the problem has actually been in create_triangulation(), which assigned numbers::internal_face_boundary_id to boundary faces)
(Sebastian Stark, 2019/10/08)
Improved: CUDAWrappers::MatrixFree::cell_loop() can now detect whether the given vectors have the same parallel MPI partitioner as the matrixfree class, which circumvents vector copies and speeds up execution. This approach has also been applied to step64.
(Martin Kronbichler, Peter Munch, 2019/09/27)
Fixed: Manifold::get_new_point() previously ignored points weighted negatively. The original intent was to avoid to divide by a 0 weight, but the condition weight < tolerance resulted in ignoring negative weights. Additionally, the same function previously avoided get_intermediate_point() when the weight of of the first point was 0, but forgot to assign the new intermediate point to be the second point. The issues would mainly occur for derived Manifold classes that only implement the get_intermediate_point() function. Both issues are now fixed.
(Doug ShiDong, 2019/09/26)
Improved: Evaluate/integrate the gradients in CUDAWrappers::EvaluatorTensorProduct with collocation method if both values and gradients are requested.
(Peter Munch, 2019/09/24)
New: Provide new methods in CUDAWrappers::FEEvaluation that do neither take the local dof index nor the quadrature point but recompute them based on the thread id.
(Peter Munch, 2019/09/24)
Fixed: When called with update_volume_elements, MappingFEField had an assertion that accidentally checked the wrong field's size. This is now fixed.
(Doug ShiDong, 2019/09/23)
Improved: Unify compute_vertices_with_ghost_neighbors in parallel::TriangulationBase, parallel::distributed::Triangulation, and parallel::fullydistributed::Triangulation..
(Peter Munch, 2019/09/21
Changed: The storage type of MGLevelGlobalTransfer::copy_indices, MGLevelGlobalTransfer::copy_indices_global_mine, MGLevelGlobalTransfer::copy_indices_level_mine has been changed to a std::vector of Table<2,unsigned int>, in order to simplify some copy operations.
(Martin Kronbichler, 2019/09/20)
Improved: MGTools::make_boundary_list() has been made faster.
(Martin Kronbichler, 2019/09/19)
Improved: IndexSet::add_indices() could previously have quadratic complexity in the number of ranges if many ranges were added. This is now fixed. Note, however, that calling IndexSet::add_indices() many times still is of quadratic complexity.
(Martin Kronbichler, 2019/09/19)
New: MGTransferMatrixFree::build() now takes an optional second argument to specify partitioner objects for LinearAlgebra::distributed::Vector types in use elsewhere. If the ghost indices required by the multigrid algorithm are contained in the ghosts of the given partitioners, they can be used, saving some vector copy operations during MGTransferMatrixFree::restrict_and_add() and MGTransferMatrixFree::prolongate().
(Martin Kronbichler, 2019/09/18)
Improved: The ghost setup of Utilities::MPI::Partitioner has been rewritten using Utilities::MPI::ConsensusAlgorithm to avoid global alltoall communication, speeding up computations on many MPI ranks.
(Peter Munch, Martin Kronbichler, 2019/09/17)
Improved: The gzip compression previously applied by GridTools::exchange_cell_data_to_ghosts() has been disabled because network throughput is typically higher than the rate by which gzip is able to compress. This speeds up DoFHandler::distribute_dofs(), among others.
(Martin Kronbichler, 2019/09/16)
Added: Add a new particle generation function that can generate particles at random positions controlled by a probability density function.
(Rene Gassmoeller, 2019/09/13)
New: Allow to create parallel::fullydistributed::ConstructionData by groups, in which only one process actually creates ConstructionDatas and distributes them within the group.
(Peter Munch, 2019/09/13)
New: Add Boost serialization function to ::fullydistributed::CellData and ::fullydistributed::ConstructionData.
(Peter Munch, 2019/09/13)
New: Add Boost serialization function to CellData.
(Peter Munch, 2019/09/13)
Fixed: DoFHandler::distribute_mg_dofs() for distributed triangulations has been made up to ten times faster by replacing an inefficient function for the exchange of ghosted level degrees of freedom.
(Martin Kronbichler, 2019/09/13)
New: MGConstrainedDoFs now allows the user to define constraints on each multigrid level to be applied during prolongation in a matrixfree transfer.
(Conrad Clevenger, 2019/09/13)
New: Add method is_parent_of to CellId.
(Peter Munch, 2019/09/11)
New: There is a new variant of MatrixFree::cell_loop() which takes two std::function objects with ranges on the locally owned degrees of freedom, one with work to be scheduled before the cell operation first touches some unknowns, and one after the cell operation last touches them. The goal of these functions is to bring vector operations close to the time when the vector entries are accessed by the cell operation which increases the cache hit rate of modern processors (temporal locality).
(Martin Kronbichler, 2019/09/10)
New: compare_and_apply_mask() allows to use a ternary operater idiom with VectorizedArray that is based on generating a mask via componentwise comparison. Such a computational idiom is useful as an alternative to branching whenever the control flow itself would depend on (computed) data (which is not possible for vectorized data).
(Matthias Maier, 2019/09/05)
Fixed: Implementing LinearAlgebra::Vector::has_ghost_elements() improves compatibility between vector types.
(Daniel Arndt, 2019/09/05)
Added: GeometryInfo<dim>::unit_normal_vector provides outwardfacing unit vectors for each face of the reference cell in the form of Tensor<1, dim>.
(Reza Rastak, 2019/09/04)
Fixed: PreconditionChebyshev can be used with LinearAlgebra::distributed::Vector with MemorySpace::CUDA. In particular, PreconditionChebyshev can set constrained indices to zero in the initial guess.
(Daniel Arndt, 2019/09/03)
New: Add a function, which creates a parallel::fullydistributed::ConstructionData from a serial and a distributed triangulation. This data structure can be used to initialize parallel::fullydistributed::Triangulation.
(Peter Munch, 2019/09/02)
Bugfix: In PolynomialsBDM, the degree() function is corrected to return a polynomial degree of k+1, instead of its previous value of k.
(Graham Harper, 2019/09/02)
Fixed: Reading the variable debug
using ParameterHandler for the class Algorithms::Newton<VectorType> is fixed within the method Algorithms::Newton<VectorType>::parse_parameters().
(Reza Rastak, 2019/08/31)
Fixed: CUDAWrappers::MatrixFree::cell_loop() now works on adapted mesh even in two dimensions with finite elements of even degree.
(Bruno Turcksin, 2019/08/31)
New: Added a GridGenerator::generate_from_name_and_arguments() that leverages the MutableBind class to parse two strings, and generate a grid from them interpreting one as a GridGenerator function name to call, and the other as a tuple of arguments to pass to the function.
(Luca Heltai, 2019/08/27)
Changed: No of lines reported in step3 documentation results section is corrected to two
(Krishnakumar Gopalakrishnan, 2019/08/27)
Changed: In step3 docs, clarify wording on which objects belong to SparseMatrix & Vector classes.
(Krishnakumar Gopalakrishnan, 2019/08/27)
Bugfix: For parallel::distributed::Triangulation objects, p4est determines which cells will be refined and coarsened. Thus, refinement flags are not a good measure to predict refinement behavior for transferring active finite element indices. We now provide a matching coarsening strategy to the parallel::distributed::CellDataTransfer object responsible for their transfer. This fixes assertions being triggered in parallel::distributed::SolutionTransfer::interpolate().
(Marc Fehling, 2019/08/27)
New: There is a new constructor for DiagonalMatrix that immediately initializes the underlying vector.
(Daniel Arndt, 2019/08/23)
Changed: step3 now uses VTK as the output file format.
(Wolfgang Bangerth, 2019/08/23)
New: method try_get_data() added to CellDataStorage in both const and nonconst forms. It returns a std_cxx17::optional which determines whether a cell has a data associated with it.
(Reza Rastak, 2019/08/21)
Fixed: OpenCASCADE::interpolation_curve() returned a TopoDS_Shape that was not properly closed. This is now fixed.
(Luca Heltai, 2019/08/21)
Fixed: Make sure that begin() and end() of PETScWrappers::MatrixBase can only be called on a processor owning all rows of the matrix. Also fix a bug which caused begin() to fail when the first row(s) of the matrix is(are) empty.
(Sebastian Stark, 2019/08/19)
New: Implement DoFAccessor::set_mg_dof_indices and get_mg_dof_indices for 1D.
(Peter Munch, 2019/08/18)
New: Introduce new class parallel::DistributedTriangulationBase between parallel::TriangulationBase and parallel::distributed::Triangulation.
(Peter Munch, 2019/08/17)
Fixed: Forward declarations in header files are prevented from confusing doxygen.
(Reza Rastak, 2019/08/16)
New: Enable internal::DoFHandlerImplementation::Policy::ParallelDistributed for 1D.
(Peter Munch, 2019/08/16)
New: Add method to get the coarsegrid cell from CellID.
(Peter Munch, 2019/08/15)
Added: Add a Particles::Generators namespace and a first implementation that generates particles at regular position in the reference domain.
(Rene Gassmoeller, 2019/08/14)
New: Add CellAccessor::face_iterators() and DoFCellAccessor::face_iterators() which return an iterator range over the faces of a cell.
(Peter Munch, Wolfgang Bangerth, Daniel Arndt, 2019/08/14)
New: Generalize internal::DoFHandlerImplementation::Policy::ParallelDistributed such that it uses the new definition of CellId.
(Peter Munch, 2019/08/14)
New: The definition of CellID has been modified so that it depends on the unique coarsecell id and no longer on the coarsecell index.
(Peter Munch, 2019/08/13)
Fixed: MatrixFree::loop() and MatrixFree::cell_loop() forgot to exchange ghosted vector entries located on the first active cell of an MPI rank for continuous elements when face integrals are activated. This is now fixed.
(Martin Kronbichler, Fabian Castelli, 2019/08/11)
Improved: Make a large number of prose, grammar, and various other improvements to the library.
(Ashna Aggarwal, Mario Zepeda Aguilar, Manaswinee Bezbaruah, Bruno Blais, Kirana Bergstrom, Katherine Cosburn, Luel Emishaw, Rebecca Fildes, Andres Galindo, Brandon Gleeson, Bang He, Nicole Hayes, Jiuhua Hu, LiseMarie ImbertGerard, Mannu Jayadharan, Marie Kajan, Charu Lata, Adriana Morales Miranda, Emily Novak, Rebecca Pereira, Geneva Porter, Irabiel Romero, Tonatiuh SanchezVizuet, Sara Tro, 2019/08/08)
New: Added the function GridGenerator::subdivided_hyper_L().
(Mae Markowski, 2019/08/10)
Improved: parallel::distributed::ContinuousQuadratureDataTransfer allows the number of data values per quadrature points vary across the mesh. It also allows a cell to not have any associated quadrature data during refinement.
(Reza Rastak, Marc Fehling, Peter Munch, 2019/08/09)
New: Add a possible extension to step2.
(Wenjuan Zhang, 2019/08/08)
Added: GridGenerator::eccentric_hyper_shell() a volume contained between two circles or spheres centered around two different points.
(Melanie Gerault, 2019/08/08)
Fixed: Fixed two functions in GridTools::Cache class, namely GridTools::Cache::get_used_vertices_rtree() and GridTools::Cache::get_cell_bounding_boxes_rtree() where the update flags were not cleared. Fixed that by adding a line to both functions at the end of the if clause checking the flag.
(Manu Jayadharan, 2019/08/08)
New: Added Utilities::MutableBind class and Utilities::mutable_bind() method.
(Luca Heltai, Matthias Maier, 2019/08/08)
New: Added std_cxx17::apply() method.
(Luca Heltai, 2019/08/08)
New: Add a new parameter to CUDAWrappers::MatrixFree::AdditionalData to choose between graph coloring and atomics in CUDAWrappers::MatrixFree::cell_loop(). The atomic implementation is faster on Pascal and newer architectures.
(Bruno Turcksin, 2019/08/08)
Fixed: Bug in CellDataStorage that produced error when applying adaptive refinement in multimaterial grids.
(Reza Rastak, Peter Munch, 2019/08/07)
Changed: The saturation equation in step21 is explained further for consistency with literatures in porous media transport.
(Omotayo Omosebi, 2019/08/07)
Improved: CellDataStorage::get_data() now checks whether we are retrieving using a data type that matches the type we used to initialize the cell data.
(Reza Rastak, 2019/08/06)
New: Added BlockMatrixBase::frobenius_norm(). (Jonathan Robey, 2019/08/06)
Improved: Unified inline journal citations in steps 1, 6, and 18; Bibtex style formatting in a central bibliography.
(Adam Lee, 2019/08/06)
Changed: The step5 program no longer uses EPS to output the solutions, but the far more modern VTK/VTU format.
(Wolfgang Bangerth, 2019/08/03)
Changed: The step1 program no longer uses EPS to output the meshes, but the far more modern SVG format.
(Wolfgang Bangerth, 2019/08/03)
Improved: DoFTools::make_periodicity_constraints() can now be used with std::complex<double> numbers.
(Daniel GarciaSanchez, 2019/08/02)
New: Amend VectorizedArray with a default constructor and a constructor taking a scalar value.
(Peter Munch, 2019/07/29)
New: The content of a VectorizedArray object can be printed using the output operator.
(Daniel Arndt, 2019/07/29)
Fixed: AffineConstraints::set_zero() can be used with LinearAlgebra::distributed::Vector with MemorySpace::CUDA.
(Daniel Arndt, 2019/07/28)
New: Enable periodicity for 1D triangulations (only for DoFHandler).
(Peter Munch, 2019/07/27)
New: The function LinearAlgebra::distributed::Vector::import() allows to copy the data from a LinearAlgebra::distributed::Vector of a given MemorySpace to another LinearAlgebra::distributed::Vector of a different MemorySpace.
(Bruno Turcksin, 2019/07/24)
Improved: Add assignment operator for two Point objects with different underlying scalar types.
(Daniel GarciaSanchez, 2019/07/23)
Fixed: When compiling with CUDA support, the call to LinearAlgebra::distributed::Vector::compress() would failed if the vector's memory space was MemorySpace::Host, the header deal.II/lac/la_parallel_vector.templates.h was included, and the call was done in a .cu file.
(Bruno Turcksin, 2019/07/23)
New: MappingFEField can now also be initialized on multigrid levels by handing in an appropriately sized vector of position vectors for the levels.
(Martin Kronbichler, Johannes Heinz, 2019/07/22)
New: CUDAWrappers::MatrixFree::initialize_dof_vector() can be used to initialize vectors suitable for the parallel partitioning of the degrees of freedoms similar to MatrixFree::initialize_dof_vector().
(Daniel Arndt, 2019/07/19)
Improved: constexpr evaluation is enabled in SymmetricTensor and TableIndices.
(Reza Rastak, 2019/07/13)
New: Provide a list of all possible VectorizedArray<Number, width> instances for a given hardware and optimization level. The list can be used during template instantiation.
(Peter Munch, 2019/07/13)
Improved: The additional roots of the HermiteLikeInterpolation with degree \(p\) greater than four have been switched to the roots of the Jacobi polynomial \(P^{(4,4)}_{p3}\), making the interior bubble functions \(L_2\) orthogonal and improving the conditioning of interpolation slightly.
(Martin Kronbichler, 2019/07/12)
Improved: FE_PolyTensor now supports finite elements with different mapping types for each shape function. The member variable mapping_type is now of type std::vector<MappingType>. If the vector contains only one MappingType, then the same mapping is applied to every shape function. If a list of MappingTypes is provided, mapping_type[i] will be applied to shape function i.
(Graham Harper, 2019/07/12)
New: It is possible to access the value type Number of VectorizedArray<Number,width> directly via VectorizedArray<Number, width>::value_type.
(Peter Munch, 2019/07/10)
New: CUDAWrappers::FEEvaluation::get_dof_values() and CUDAWrappers::FEEvaluation::submit_dof_values() provide access to the values stored for the degrees of freedom.
(Daniel Arndt, 2019/07/09)
New: The library contains a new manual page describing how to package deal.II for distribution in a Unixlike distribution.
(David Wells, 2019/07/07)
New: An additional optional template parameter VectorizedArrayType has been added to the MatrixFree framework. It lets the user switch between no vectorization (only auto vectorization) and vectorization over elements.
(Peter Munch, 2019/07/06)
Improved: All member functions and free functions related to Point that can be used in CUDA code so far have been annotated accordingly.
(Daniel Arndt, 2019/07/05)
New: A second template parameter has been added to VectorizedArray. This template parameter optionally controls the number of vectorization lanes to be used, i.e., which instruction set architecture extension to be used, at the time the application is built.
(Peter Munch, 2019/07/04)
Improved: All member funtions and free functions related to Tensor that can be used in CUDA code so far have been annotated accordingly.
(Daniel Arndt, 2019/07/03)
Fixed: CUDAWrappers::MatrixFree::cell_loop() would deadlock on adaptively refined meshes when using Volta GPU.
(Bruno Turcksin, 2019/07/02)
New: Class CellDataTransfer has been introduced to transfer cell by cell data across meshes in case of refinement/serialization.
(Marc Fehling, 2019/06/26)
Improved: The functions vectorized_load_and_transpose() and vectorized_transpose_and_store() for AVX512 were rewritten to better utilize execution units with two load units and one shuffle/swizzle unit as common on recent Intel CPUs.
(Martin Kronbichler, 2019/06/24)
Improved: The function project_boundary_values_curl_conforming_l2() can now be used with std::complex<double> numbers.
(Daniel GarciaSanchez, 2019/06/22)
New: The function schur_product was added for the Tensor class, allowing the entrywise multiplication of tensor objects of general rank.
(Roland Richter, 2019/06/10)
New: Namespace hp::Refinement offering decision tools for p adaptivity.
(Marc Fehling, 2019/06/07)
Unified DoFTools::extract_dofs() for DoFHandler and hp::DoFHandler.
(Daniel Arndt, Mathias Anselmann, 2019/06/07)
New: The class MappingQCache implements a cache for the points generated by MappingQGeneric and derived classes to speed up consumers of the mapping for expensive manifolds.
(Martin Kronbichler, 2019/06/06)
New: The function Utilities::MPI::compute_index_owner() provides the owner of the ghost degrees of freedom relative to a set of locally owned ones.
(Peter Munch, 2019/06/03)
Improved: A number of places in deal.II previously called MPI_Allgather
followed by some local sums to compute prefix sums. Now the more appropriate MPI_Exscan
is used instead, which improves scalability of setup routines on more than 10k processors.
(Martin Kronbichler, Peter Munch, 2019/06/03)
New: Add functions SparseMatrix::print_as_numpy_arrays() and LinearAlgebra::Vector::print_as_numpy_array() to output the object in a format readable with numpy.loadtxt.
(Bruno Turcksin, 2019/06/02)
New: Tensor<rank, dim, Number> can be constructed and manipulated in constexpr setting (if supported by the compiler).
(Reza Rastak, 2019/05/26)
Fixed: FullMatrix can now be packed into std::vector and unpacked from it using std::copy and the begin() and end() iterators.
(Reza Rastak, 2019/05/24)
Fixed: TrilinosWrappers::SparsityPattern can deal with empty column maps.
(Daniel Arndt, Mathias Anselmann, 2019/05/22)
Improved: The function GridGenerator::torus() run in 3D (volume mesh) would previously only use a single cell to represent the poloidal shape, which leads to singular mappings similar to how a circle degenerates when meshed with a single cell. The poloidal shape is now represented with 5 cells just like the circle. Furthermore, the function GridGenerator::torus() has gained an optional argument to control the number of cell layers in the toroidal direction. The default manifold set to the torus has also been improved: Now, the TorusManifold is applied on the surface, a CylindricalManifold to the middle cells in toroidal coordinates, and a TransfiniteInterpolationManifold on the cells between the surface and the inner ring. This leads to an excellent mesh quality for all supported scenarios.
(Niklas Fehn, Martin Kronbichler, 2019/05/16)
Fixed: Fix a bug in tutorial step46, which caused the ydisplacement (zdisplacement in 3d) to be slightly unsymmetric and rectify the interface traction term.
(Sebastian Stark, 2019/05/15)
New: The InterpolatedUniformGridData::gradient() function was not previously implemented. It is now.
(Bob Myhill, Anne Glerum, Wolfgang Bangerth, 2018/09/27)