action functions
|
Please note that the library has not been "officially" released. While we continue to work on the documentation, these web pages are likely to contain broken links and documents in draft form. Please send an email to if you wish to be informed of the library's "official" release. |
This document provides an overview of the major changes between different "official" releases of oomph-lib. We provide access to the complete log from our previous (non-public) svn repository. This covers all changes from the intial release of the library (svn revision 132) up to the move to the new public repository, see here for details on how to access this repository, which contains a detailed log of subsequent changes.
You may also want to consult the entries in our bugzilla-based bug-and-feature-tracking system, accessible online at
for known bugs and their resolution.
The remainder of this document covers the following issues:
Problem::actions_before_solve()
Problem::actions_before_newton_solve()
FiniteElement::n_nodal_position_type()
FiniteElement::nnodal_position_type()
FiniteElement::get_x(Vector<double>& s, const unsigned& t,...)
FiniteElement::get_x(const unsigned& t, Vector<double>& s,...)
Changes to the order of function arguments can be very dangerous: if the order of two arguments of the same type is exchanged the compiler cannot detect the change to the interface but the code is likely to compute different results. To facilitate the detection of such changes, the new version of such functions contains an explicit warnings that can be enabled by compiling the library with the macro WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES. (For a gcc compiler this is done with the compiler flag -DWARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES).
Here is an example of a function in which the order of the two unsigned arguments was changed. If compiled with WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES, the code will issue an appropriate warning every time this function is called.
// Function of two unsigned arguments whose order has changed // since the previous release void SomeClass::some_function(const unsigned& t, const unsigned& i) { [...] #ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES // Throw an oomph-lib warning to alert the user to the change // in the oder of the arguments OomphLibWarning("Warning: Order of interfaces has changed", "SomeClass::some_function(...)", OOMPH_EXCEPTION_LOCATION); #endif [...] }
Obviously, you should only compile the library with WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES if you encounter problems after upgrading to a new version.
oomph-lib's parallel processing capabilities. The library's solver and (block) preconditioning framework is now fully parallelised; the parallel assembly of the Jacobian and residual vector has been optimised, and problems can be now distributed by domain decomposition techniques. A new tutorial and various new demo driver codes demo driver codes provide an overview of these capabilities. oomph-lib's solid mechanics (large-displacement elasticity) capabilities. We provide an overview of the theory and implementation, as well as numerous tutorials discussing the solution of steady and unsteady, 2D and 3D problems with compressible and incompressible materials on structured and unstructured meshes. oomph-lib meshes from medical images. The methodology is used in the following driver codes: ElementWithExternalElement as base class for multi-physics elements in which elements in different meshes/ domains interact via source/load functions (e.g. in fluid-structure interaction or thermal convection problems). See the new tutorials discussing the serial and parallel solution of multi-physics problems by multi-domain approaches. MeshAsGeomObject class to use bin structures to accelerate the search in locate_zeta(...). FiniteElements are now GeomObjects within which their local coordinates act as their intrinsic coordinates. Z2ErrorEstimator so that the elemental error estimate can be based on the maximum of various distinct fluxes -- useful for multi-field problems such as Boussinesq convection. See the tutorial for details. FaceElements to be attached to same node, while providing the ability to distinguish between different Lagrange multipliers stored at the same node. This is discussed in a separate tutorial.
SolidFiniteElement::add_jacobian_for_solid_ic()
SolidFiniteElement::fill_in_jacobian_for_solid_ic()
SolidFiniteElement::add_residuals_for_ic()
SolidFiniteElement::fill_in_residuals_for_solid_ic()
SolidFiniteElement::get_residuals_for_ic()
SolidFiniteElement::fill_in_residuals_for_solid_ic()
PVDEquationsBase::BodyForceFctPt so that time goes first (as it should!). AlgebraicMeshes and MacroElementNodeUpdateMeshes should now specify the GeomObjects involved in their node update functions. (This must be done if such meshes are to be used in parallel computations involving domain decomposion). The declaration of the GeomObjects should use the functions AlgebraicMesh::add_geom_object_list_pt(...) and MacroElementNodeUpdateMesh::set_geom_object_vector_pt(...), respectively. NavierStokesEquations<DIM>::get_body_force_nst(const double& time, const Vector<double> &s, const Vector<double> &x, Vector<double> &result)
NavierStokesEquations<DIM>::get_body_force_nst(const double& time, const unsigned& ipt, const Vector<double> &s, const Vector<double> &x, Vector<double> &result)
GeomObject::drdt(...) is now GeomObject::dposition_dt(...) to make it consistent with all other functions of that type. FSI_functions::setup_fluid_load_info_for_solid_elements(...) now requires a pointer to the Problem to be specified as the first argument. FSIPreconditioner changed from read/write access functions FSIPreconditioner::navier_stokes_mesh_pt() and FSIPreconditioner::wall_mesh_pt() to FSIPreconditioner::set_navier_stokes_mesh(...) and FSIPreconditioner::set_wall_mesh(...), respectively. NavierStokesLSCPreconditioner changed from read/write access function FSIPreconditioner::navier_stokes_mesh_pt() to FSIPreconditioner::set_navier_stokes_mesh(...). MPI_COMM_WORLD and the parameters MPI_Helpers::Nproc MPI_Helpers::My_rank. The total number of processors and the rank of each processor should be obtained from the appropriate OomphCommunicator. MPI_Helpers::setup(...) with MPI_Helpers::init(...) and added MPI_Helpers::finalize(). These should be called instead of MPI's own init() and finalize() functions. DoubleVector -- a distributable vector storing double precision numbers. CRDoubleMatrix and DistributableCRDoubleMatrix into CRDoubleMatrix. (Note: CRDoubleMatrix is the only distributable matrix within oomph-lib.) SuperLU and SuperLU_dist into SuperLUSolver. If oomph-lib is compiled with MPI support, the parallel version of the (exact) preconditioner is used automatically. This behaviour can be over-ruled with the member function SuperLUSolver::set_solver_type(...)
SuperLUSolver::Type. This allows the serial version of the solver to be used even if oomph-lib is compiled with MPI support. SuperLUPreconditioner and SuperLUDistPreconditioner into SuperLUPreconditioner. If oomph-lib is compiled with MPI support, the parallel version of the solver is used automatically. CRDoubleMatrix and DoubleVector. NavierStokesLSCPreconditioner void set_f_preconditioner(Preconditioner& new_f_preconditioner)
void set_p_preconditioner(Preconditioner& new_f_preconditioner)
void set_f_preconditioner(Preconditioner* new_f_preconditioner_pt)
void set_p_preconditioner(Preconditioner* new_f_preconditioner_pt)
FiniteElement::get_block_numbers_for_unknowns(...)
FiniteElement::get_dof_numbers_for_unknowns(...)
FiniteElement::nblock_types()
FiniteElement::ndof_types()
make dist). To make sure that the self-test procedure doesn't break if there's no validata, configure now assesses the availability of validata by checking the existence of demo_drivers/poisson/one_d_poisson/validata/one_d_poisson_results.dat.gz
bin/validate_no_python.sh
bin/dummy_validate.sh
node_update(...) functions were changed to const bool& (rather than bool).
oomph-lib's Least-Squares-Commutator Navier-Stokes preconditioner. oomph-lib's FSI preconditioner.oomph-lib's fluid-structure interaction capabilities: oomph-lib's segregated solvers for fluid-structure-interaction problems. oomph-lib's FSI preconditioner.#ifdef OOMPH_HAS_MPI [...] #endif. They are only compiled if the --enable-MPI flag is specified at the configure stage. pdflatex installed on your machine, the documentation is now not only built in html format (pretty but hard to print) but we also create associated pdf files. These are accessible via the link at the bottom of relevant html page. oomph-lib's build script, autogen.sh now allows for parallel compilation. This can lead to considerable speedups on multicore processors that are now widely available. To build oomph-lib in parallel, using up four threads run autogen.sh as follows ./autogen.sh --jobs=4
./autogen.sh --jobs=4 --rebuild
oomph-lib's output to the vtu format that can be read by paraview, an open-source 3D plotting package. This is discussed in separate tutorial. FaceElements to apply non-trivial boundaries to beams and shells, ...). Feel free to have a look around the distribution. You're welcome to use it all, but please remember that you use any functionality for which no documentation is available at your own risk; while we reserve the right to change interfaces for all objects in the library, such changes are almost certain to happen for objects that are not yet docmented (in the form of tutorials).
Problem::actions_before_solve() becomes Problem::actions_before_newton_solve() Problem::actions_after_solve() becomes Problem::actions_after_newton_solve() TCrouzeixRaviartElement<DIM> becomes TCrouzeixRaviartElement<DIM> QCrouzeixRaviartElement<DIM> becomes QCrouzeixRaviartElement<DIM> RefineableQCrouzeixRaviartElement<DIM> becomes RefineableQCrouzeixRaviartElement<DIM> FaceElements so that the faces are represented by an integer face_index, rather than the combination s_fixed_index and s_limit which was not sufficiently general.
1.4.7