------------------------------------------------------------------------ r1367 | mheil | 2021-06-24 10:38:52 +0100 (Thu, 24 Jun 2021) | 3 lines Added output of the sparse indexed Jacobian to BlackBox FD Newton solver in oomph_utilities if the Doc_Progress flag is set to true. ------------------------------------------------------------------------ r1366 | ahazel | 2021-06-20 16:30:15 +0100 (Sun, 20 Jun 2021) | 9 lines Added functions to allow updating a faceted surface mesh to allow unstructured remeshing of three-dimensional free-surface problems. This is not yet complete by any means, but part of the plan to include this functionality. The next step in the process is to change the way the surface coordinates are calculated to use only the vertex nodes (and not all nodes) when computing the extreme values of coordinate. ------------------------------------------------------------------------ r1364 | bergemann | 2021-06-18 09:39:34 +0100 (Fri, 18 Jun 2021) | 3 lines Fixed bug in viscosity gradient and introduced a high viscosity plateau at low shear rates. ------------------------------------------------------------------------ r1363 | mheil | 2021-06-16 17:01:18 +0100 (Wed, 16 Jun 2021) | 3 lines Added std:: in front of max(...) in Nico's tweaked constitutive eqn. ------------------------------------------------------------------------ r1362 | bergemann | 2021-06-16 10:30:38 +0100 (Wed, 16 Jun 2021) | 3 lines Changed blending in modified Tanner Milthorpe regularisation of the Herschel Bulkley model. ------------------------------------------------------------------------ r1361 | ahazel | 2021-06-15 10:13:41 +0100 (Tue, 15 Jun 2021) | 12 lines 1. Modified the problem read() function so that a dump file generated by a code with MPI included, but run on a single processor can be read from a code compiled without MPI support. 2. Added unstructured elements for advection_diffussion_reaction and a new unstructured demo. 3. Added an unstructured demo for the Navier Stokes two-layer interface problem. 4. Renamed a number of variables to remove the now deprecated master/slave terminology. ------------------------------------------------------------------------ r1360 | mheil | 2021-06-01 16:34:24 +0100 (Tue, 01 Jun 2021) | 10 lines Added boolean flag to CollapsibleChannelDomain that rotates the coordinates clockwise to make it consistent with an axisymmetric pipe (with the current coordinates the elastic segment is on the wall where y=const, which becomes z=const, so rather than getting an elastic axisymmetric tube whose walls deform radially we'd have a barrel in which an annular region in the top lid deforms. Not what we want. Note that the rotation of the domain is the only thing that needs to be changed. The mesh and GeomObject describing the wall can stay as it is. ------------------------------------------------------------------------ r1359 | mheil | 2021-05-26 15:24:58 +0100 (Wed, 26 May 2021) | 2 lines Trivial indentation fix in triangle_mesh.template.h ------------------------------------------------------------------------ r1358 | mheil | 2021-05-26 11:42:41 +0100 (Wed, 26 May 2021) | 3 lines Changed all python scripts to demand python3 since python2 (a.k.a. python) is now obsolete in some linux distributions. Code itself still works (on my machine!). Let's keep an eye on it. ------------------------------------------------------------------------ r1357 | mheil | 2021-04-14 09:22:33 +0100 (Wed, 14 Apr 2021) | 3 lines Pointer in linear_solver.cc was defined inside PARANOID block and used outside. ------------------------------------------------------------------------ r1356 | mheil | 2021-04-09 16:14:19 +0100 (Fri, 09 Apr 2021) | 7 lines -- Emptied all Domain destructors because removal of MacroElement pointers is now handled in base class. -- Also fixed some copy-and-paste naming errors (inside paranoid blocks) in some of Puneet's linear algebra stuff. ------------------------------------------------------------------------ r1355 | mheil | 2021-02-08 10:23:49 +0000 (Mon, 08 Feb 2021) | 8 lines Small tidy downstream of Puneet's end-of-PhD commit: macro elements are now deleted in the destructor of the Domain base class; this causes problems if they're also deleted (with nulling put pointers etc.) elsewhere! Added a .c_str() to make one of Puneet's new demo drivers work without this new-fangled c++11 stuff! ------------------------------------------------------------------------ r1354 | mbbx2pm2 | 2021-02-07 15:07:36 +0000 (Sun, 07 Feb 2021) | 5 lines Fix for demo_drivers/extrude_quad_mesh_to_cube_mesh/extrude_with_macro_ element_representation.cc which was broken by a class name change in a previous revision. ------------------------------------------------------------------------ r1353 | mbbx2pm2 | 2021-02-06 21:20:38 +0000 (Sat, 06 Feb 2021) | 17 lines Updates to: (1) self_test/poisson/octree_test/validata/results.dat.gz (2i) src/meshes/rectangle_with_moving_cylinder_mesh.template.h (2ii) src/meshes/rectangle_with_moving_cylinder_mesh.template.cc The updates address: (1) the broken self-test in self_test/poisson/octree_test/ which was broken after changing some formatting in the generic/octree.{h,cc} (to make it more readable), and; (2) the redefinition of RectangleWithHoleDomain and RectangleWithHoleMesh inside rectangle_with_moving_cylinder_mesh.template.{h,cc}. Curiously, this only broke the drivers in demo_drivers/linearised_free_surface_ axisym_navier_stokes/two_layer_interface_nonaxisym_perturbations/. ------------------------------------------------------------------------ r1352 | mbbx2pm2 | 2021-02-04 08:36:32 +0000 (Thu, 04 Feb 2021) | 10 lines Fixes for: - src/generic/problem.h - src/generic/problem.cc - demo_drivers/unsteady_heat/two_d_unsteady_heat_2adapt/validata/ In my big upload, I had somehow deleted the work that MH had added in revision 1337 (specifically, stuff related to Problem::Keep_temporal_error_below_tolerance). I've added this code back in. This, in turn, affected the validata data file in two_d_unsteady_heat_2adapt, so that needed to be reset too (i.e. the one that I had claimed was incorrect in revision 1351). ------------------------------------------------------------------------ r1351 | mbbx2pm2 | 2021-01-25 19:36:19 +0000 (Mon, 25 Jan 2021) | 3 lines A fix for a demo driver test that was broken in revision 1337, i.e. the driver in unsteady_heat/two_d_unsteady_heat_2adapt/. I'm replacing the new data file with the old (non-breaking) file to fix the problem. ------------------------------------------------------------------------ r1350 | mbbx2pm2 | 2021-01-25 15:49:04 +0000 (Mon, 25 Jan 2021) | 5 lines Update to fix the problem with Hypre not installing because of the newly installed files in src/space_time/space_time_block_preconditioner/. Now including the approriate Hypre solver header in src/generic. ------------------------------------------------------------------------ r1349 | mbbx2pm2 | 2021-01-24 15:11:09 +0000 (Sun, 24 Jan 2021) | 121 lines Final commit of my (PM) work to oomph-lib: ------------------------------------------ The additions/contributions can be split into three groups: (1) helper code, (2) actual production code, and (3) API additions/changes. (1) Helper code: -- I added a couple of helper namespaces to oomph_utilities.*: (i) [ANSIEscapeCode]: Used to prettify the commandline output and to make the specified output clearly visible. This is used by passing ANSIEscapeCode::Red (or any of the other available colours) to the standard output (e.g. through std::cout or oomph_info). All ensuing text will be printed in red. To return the output to normal, pass ANSIEscapeCode::Reset to the standard output. (ii) [DebugHelpers]: Used for debugging purposes. Instead of placing oomph_info << "Here" << std::endl; statements everywhere when a run-time issue occurs, then having to edit each one so that you know which is which, you can use: oomph_info << DebugHelpers::debug_string(__FILE__,__LINE__,true) << [optional text] << std::endl; and it will process the macros __FILE__ and __LINE__ and output the point of invokation in bold red text, e.g. placing the above line in demo_drivers/two_d_unsteady_heat/two_d_unsteady_heat.cc on line 394 will result in the output: TDUH394: [optional text] where "TDUH394:" is in bright red. This means the above code can just be littered all around your code without needing to be edited to know where it is placed. NOTE: The optional third argument is used to determine whether this string will start on a new line. (2) Production code: -- Additions to demo_drivers/: (i) [extrude_quad_mesh_to_cube_mesh/]: validates the mesh extrusion machinery that takes an arbitrary quad mesh, which may be based on a triangle mesh or using a macro-element representation and extrudes it into a 3D mesh. This was developed to generate space- time meshes and takes time-dependent mesh motion (prescribed by a macro-element representation) into account. For example, when applied to the oscillating cylinder problem, the space-time mesh contains a sinusoidal-shaped cylinder in the z-direction (which plays the role of time). This machinery is not restricted to time-dependent problems. You can extrude a 2D mesh and prescribe mesh motion in the z-direction by letting the z-coordinate play the role of time. See extrude_with_macro_element_representation.cc for an example. (ii) [unsteady_heat/space_time_two_d_unsteady_heat/]: validates the space-time unsteady heat code (2D spatially, 3D space-time). There are three primary space-time discretisations that are tested: * Galerkin * Equal-order Petrov-Galerkin * Mixed-order Petrov-Galerkin (iii) [navier_stokes/flow_past_oscillating_cylinder/]: implements and validates time-integration of the flow past an oscillating cylinder. It uses a macro-element representation to deform the mesh around the cylinder in response to the cylinder motion. (iv) [navier_stokes/space_time_flow_past_oscillating_cylinder/]: implements and validates the direct computation of the time- periodic flow past the oscillating cylinder with a space-time discretisation. -- Additions to src/meshes/: (i) [rectangle_with_moving_cylinder_mesh.template.*:] Creates a mesh with a (possibly moving) cylinder in it. The RectangleWithHoleDomain class definition here may appear to be a duplicate of that already in src/meshes but it's not. My implementation creates an annular region around the cylinder that can be made arbitrarily thick/thin to ensure high mesh resolution close to the cylinder. This can be helpful to accurately resolve the flow close to the cylinder. (i) [extruded_cube_mesh_from_quad_mesh_with_macro_elements.template.*:] Extrudes a 2D mesh in the z-direction and creates a 3D mesh. Originally created for creating space-time meshes. Takes into account time-dependent motion in the time-direction (i.e. the z-direction) described by the macro-element representation of the 2D mesh. -- Additions to src/space_time/: (i) [space_time/space_time_block_preconditioner/]: implementation of a banded block-triangular preconditioner that only extract blocks on diagonals within the specified block bandwidth. Greatly reduces the block extraction time when you know that blocks outside a certain bandwidth are all going to be zero. Helpful for the space- time discretisation where only the block diagonal and block subdiagonal contain non-zero values. (ii) [space_time/space_time_unsteady_heat/]: contains all the code for implementing the three space-time discretisations (mentioned above) for the unsteady heat equation. (ii) [space_time/space_time_navier_stokes/]: contains all the code for implementing the space-time Navier-Stokes discretisation; combines the Taylor-Hood discretisation (spatial) with the mixed-order Petrov-Galerkin discretisation (temporal). (3) API additions/changes: -- There are a large number of additions to implement periodicity in 3D (previously there was only functionality for 2D periodicity). -- Also contains a number of additional little functions that I needed. ------------------------------------------------------------------------ r1348 | mheil | 2020-11-20 11:01:27 +0000 (Fri, 20 Nov 2020) | 18 lines -- Reset the fpu control flag (that caused bizarre behaviour for Christian) after each call to triangulate(...). Self-tests pass on linux; Puneet will (hopefully) be able to confirm that it still works on mac (where we don't have the fpu_control header). -- Added a script that opens (in emacs) all the files that contain a certain string (like "triangulate"; see above...). -- Made it clear that Vector-returning version of Integral::knot(...) is broken virtual (and, in fact, not implemented for any actual integration scheme!) -- Made the function that assigns the beam shape from an undeformed geometric object (in 1D line mesh) public to allow resets. ------------------------------------------------------------------------ r1347 | ahazel | 2020-08-25 11:39:33 +0100 (Tue, 25 Aug 2020) | 11 lines Rewritten the two dimensional soluble surfactant transport equations to exhibit more code reuse. Written refineable version of the code using Lagrange multipliers to enforce periodicity of the solid positions over the periodic boundary. This required fixing a bug in memory management in the BoundaryNodes (the map to index stored by FaceID was not being cleared in periodic nodes). Also fixed a bug in the marangoni_convection.cc driver and tweaked a couple of error tolerances. ------------------------------------------------------------------------ r1346 | mheil | 2020-04-30 16:54:01 +0100 (Thu, 30 Apr 2020) | 3 lines Minor edits to get rid of compiler warnings. ------------------------------------------------------------------------ r1345 | mheil | 2020-04-27 17:30:15 +0100 (Mon, 27 Apr 2020) | 57 lines Changed build machinery to facilitate installation and subsequent move to permament location of external distributions, as well as blas and lapack, which are the most time-consuming third-party codes compiled during the oomph-lib installation. New procedure (1) clean checkout of oomph-lib from repository (or unpack tar file) (2) Run the script bin/get_external_distribution_tar_files.bash from the oomph-lib home directory to get the tar files needed to build hypre, trilinos and mumps. (Checks that it's run from the right directory and that there's an internet connection). (3) Build oomph-lib as before with ./autogen.sh (4) When done run the script bin/move_external_libraries_and_distributions_to_permanent_location.bash PERMANENT_DIR where PERMANENT_DIR is the absolute path to the directory in which the third party libraries/distributions (blas, lapack, cgal, boost, mprf, gmp, trilinos, mumps, blacs, scalapack, pord and mumps) are to be installed. Something like /home/mheil/oomph-lib_local would do. Script then lists the commands to be inserted into the config/configure_options/current file to avoid rebuilding of these libraries. There's a certain amount of sanity checking (e.g. the directory is supposed to be empty to avoid over-writing of existing installations; flags are only listed for libraries that were actually moved, etc.). NOTE: Once moved, linking to mpfr and gmp create warnings like this: libtool: warning: library '/home/mheil/junk_local/gmp_default_installation/lib/libgmp.la' was moved. libtool: warning: library '/home/mheil/junk_local/mpfr_default_installation/lib/libmpfr.la' was moved. libtool: warning: library '/home/mheil/junk_local/gmp_default_installation/lib/libgmp.la' was moved. libtool: warning: library '/home/mheil/junk_local/mpfr_default_installation/lib/libmpfr.la' was moved. Googling suggests that these are indeed just harmless (and in my view unnecessary) warnings. They can be suppressed by editing these (plain text) files to replace these paths by the paths to the directories the libraries have now been moved to. Comments on problems would be helpful! I suspect there may be distributions where the warning does alert the user to an actual problem. ------------------------------------------------------------------------ r1344 | mheil | 2020-04-13 20:52:26 +0100 (Mon, 13 Apr 2020) | 4 lines Fixed stupid cut and paste bug in bin/check_for_dynamic_linking_flag.bash Dyanamic linking for trilinos now works again. ------------------------------------------------------------------------ r1343 | mheil | 2020-04-10 16:32:02 +0100 (Fri, 10 Apr 2020) | 34 lines -- Added check to see if libtool is installed and, if not, shout when oomph-lib needs reconfiguring, e.g. after adding a directory somewhere; this can only be done when libtool is available! Now bails out more gracefully. -- Add instructions to autogen.sh to explain how to customise configure options (now that the command-line-based version is gone). -- Added machinery to check for request to build trilinos with dynamic linking flags (by pre-scanning configure options file). We're now only adding -fPIC and -DPIC if they're actually needed to avoid any portability problems if the default (static) build is used. Machinery is a bit clunky because the grep command hung when executed directly in non_interactive_autogen.sh. Moved that bit into a separate script. -- Tidied up many demo driver codes that died following Christian's (very sensible!) decision to turn the FE::output(...) function into a properly broken virtual one. Problems arose typically when meshes contained multiple element types (and why would anybody write code like that; not naming any names...). Validata had to be tidied up to remove the (stupid) default output that we created in the non-broken version. -- Added a soluble_surfactant_transport_equations.h to the dependencies in two_layer_soluble_surfactant code, otherwise it doesn't get shipped with tar file and causes the compilation of the self test to fail. -- Added a missing "n" in the Makefile.am for cgal. Now the default installation does get wiped when doing a make distclean :) ------------------------------------------------------------------------ r1342 | mbcxwcv3 | 2020-03-31 12:33:00 +0100 (Tue, 31 Mar 2020) | 8 lines -- autogen.sh: Option 0, which allowed users to enter build configuration options on the commandline, has been removed due to bugs in how delimiters were handled in the on-screen input. MH will later add instructions for how to customise these options (both in autogen.sh and the build instructions in the documentation). ------------------------------------------------------------------------ r1341 | mbbx2pm2 | 2020-03-31 11:57:14 +0100 (Tue, 31 Mar 2020) | 67 lines Update to the installation of Trilinos to provide the user with the flexibility to build it as a static library or shared library. In short, the static build causes the Trilinos library to get "copied" into each individual executable (causing it to be duplicated several times). In contrast, a shared build means only a single version of the library gets built which every executable points to (thereby avoiding the duplication of the library). As such, to save space, the user should *really* build the library dynamically, however, this may not always be possible (e.g. in cases where oomph-lib has to be shipped statically, like when used on Condor). Therefore, to ensure we don't "break" the user's distribution when they try to upgrade, the default build of Trilinos will be static; how things were originally done. To switch to a dynamic build, the user needs to provide the flag --enable-dynamic-linking-for-trilinos in their config file. For the shared library build to work, three things need to happen: (1) Position-independent code (PIC) flags have to be provided in the configure options (i.e. -fPIC and -DPIC; the latter is required to ensure we use code enclosed by #ifdef PIC /* ... */ #endif directives). However, the user shouldn't have to deal with this themselves, so we (...well, I) have built this into the autogen process so it is automatically done. [TO DO (@MH)]: We should probably only bother including these flags when the Trilinos library is built dynamically to emulate what we were doing before, when Trilinos was built as a shared library (which is now the default). This should just be a quick job of grep-ing through the user's config file. (2) The run-time path of the shared library files needs to be specified (which is now only added when the library is being build dynamically; see configure.ac). (3) A flag indicating that we want to build a shared library needs to be passed to automake or cmake (depending on which version of Trilinos we're dealing with). With automake this requires the '--enable-shared' flag and with cmake this requires the '-D BUILD_SHARED_LIBS=ON' flag. The appropriate disable and OFF options are provided if we want to build as static. Extra third-party library installation update: -- I noticed that untarring the third-party library tarballs was done verbosely. When we run autogen this can end up killing the buffer which causes a "write error" which the autogen script mistakes for a genuine error (because it thinks any error is a "proper" error). I've now removed the -v (verbose) flag to avoid this (for this, hypre, mumps and scalapack). If the user finds a "write error" in the future it can also be eliminated by running autogen quietly (i.e. say 'y' when it asks to build silently). ------------------------------------------------------------------------ r1340 | mbcxwcv3 | 2020-03-30 15:09:11 +0100 (Mon, 30 Mar 2020) | 4 lines -- Output functions for the FiniteElement class now properly broken to avoid error messages being written silently to the output file / stream. ------------------------------------------------------------------------ r1339 | mbcxwcv3 | 2020-03-26 13:56:25 +0000 (Thu, 26 Mar 2020) | 4 lines -- Corrected the order of the split_corner_elements argument in the call to the TetgenMesh constructor from the RefineableTetgenMesh constructor. ------------------------------------------------------------------------ r1338 | mbcxwcv3 | 2020-03-25 17:22:38 +0000 (Wed, 25 Mar 2020) | 54 lines -- autogen.sh: Option 0 which allowed users to enter build configuration options on the commandline has been removed, due to bugs in how delimiters were handled in the on-screen input. MH will later add instructions for how to customise these options (both in autogen.sh and the build instructions in the documentation). -- QElement and TElement output has been simplified and harmonised. Previously there were discrepancies between different function overloads which resulted in incorrect tecplot headers in some cases. For QElements, the pin status of nodes was being output for some versions of the output fct. This is superfluous at this level in the hierachy and should be implemented in a more derived class (if needed; nobody seemed to rely on this feature anyway). For both Q and TElements these functions do now no longer duplicate code but forward the call to the output function with n_plot set to NNODE_1D. -- Default behaviour for a non-existent output directory has been changed; now throws an exception (DocInfo::Directory_must_exist = true). Associated comment has been updated. -- Default behaviour for an unrecognised commandline option has been changed; now throws an exception (CommandLineArgs::parse_and_assign() default argument is now const bool& throw_on_unrecognised_args=true). -- TetMeshBase::split_elements_in_corners() has been updated to re-compute the lookup schemes for elements in a given region, and boundary elements in a given region. Paranoid check has been added if a corner element to be split is not found in the original region lookup. This change now allows for compatibility between the use_attributes flag and split_corner_elements flag in the TegenMesh constructor, and so accordingly, the follows changes have been made: -- new private member variable added: bool RefineableTetgenMesh::Corner_elements_must_be_split; -- Overloaded RefineableMeshTetgenMesh constructor which takes pointers to the outer boundary object and a vector of internal surfaces now has an additional optional argument const bool& split_corner_elements which defaults to false (and the call to this constructor in RefineableTetgenMesh::adapt() has been updated), and this constructor now updates the new private boolean Corner_elements_must_be_split; -- the constructor to the non-refinable TetgenMesh now includes the same default argument (const bool& split_corner_elements = false) as the refineable version; -- the check and subsequent exception throwing have been removed from all TetgenMesh constructors for the case where use_attributes and split_corner_elements are both true, since the above changes render these options mutually compatible. ------------------------------------------------------------------------ r1337 | mheil | 2019-11-06 08:38:41 +0000 (Wed, 06 Nov 2019) | 19 lines -- checked in Puneet's update to autogen_helpers.sh which can now handle commented out lines at the end of the configure options file. -- Problem has new protected member bool Problem::Keep_temporal_error_below_tolerance which defaults to true, so adaptive timesteps are now rejected if the error is above the tolerance (rather than the next timestep being reduced). Message is issued when this happens (and also when the default behaviour is over-ruled (because the flag has been set to false). Updated a few validata files to accomodate the resulting changes. ------------------------------------------------------------------------ r1336 | mbbx2pm2 | 2019-10-09 16:38:41 +0100 (Wed, 09 Oct 2019) | 8 lines Update to the (non-interactive) autogen process to add the -fPIC and -DPIC flag to the user's configure options. Previously forced the flags into the user's configuration options file (which was a bit naughty since they're in charge of that file, but it worked). I've updated the non_interactive_autogen.sh file so this doesn't happen but the flags are still included. This also required a small update of InsertExtraFlags() in /bin/autogen_helpers.sh. ------------------------------------------------------------------------ r1335 | mbbx2pm2 | 2019-10-07 13:59:10 +0100 (Mon, 07 Oct 2019) | 39 lines (1) Update for the external distributions to ensure certain libraries don't keep getting rebuilt every time autogen.sh is run. -- I've updated the build_script.bash file in the Boost, CGAL, GMP & MPFR folders in external_distributions/ to abort the installation of an external distribution if we can find a previously built version of the code. For example, if boost_1_65_1/ can be found in the external_distributions/boost/ folder then we will say Boost doesn't need to be re-installed. -- I've also updated the Makefile.am files in the external_distribution/ subdirectories to ensure that you only wipe the "official" build of a distribution if 'make distclean' is run (i.e. running 'make clean' won't wipe trilinos_default_installation/ if it's there but 'make distclean' will). The user will then have to re-run autogen.sh to regenerate the corresponding Makefile. (2) Updated autogen process to add the -fPIC and -DPIC flag to the user's configure options. This is necessary for GCC and Clang to build and properly configure shared third-party libraries (e.g. Trilinos). -- I've added a function to bin/autogen_helpers.sh to add the extra flags to config file. This function is called during non_interactive_autogen.sh. (3) Updated the Makefile.am in demo_drivers/multi_physics/two_layer_soluble_surfactant/Makefile.am which was complaining about being provided *_SOURCES and *_LDADD info in the Makefile.am but not being provided it's name to check_PROGRAMS. (4) Update for people with access to the private repository: -- Updated all Makefile.am files in private/ directories to ensure they use AM_CPPFLAGS instead of INCLUDES which has been depreciated (as pointed out by the many, many warnings during the autogen process). ------------------------------------------------------------------------ r1334 | mbbx2pm2 | 2019-09-12 15:28:57 +0100 (Thu, 12 Sep 2019) | 4 lines Fixed an accidental commit which committed all of my modified files rather than just the configure.ac. Have used "svn up -r1332" to revert to the previous version. ------------------------------------------------------------------------ r1333 | mbbx2pm2 | 2019-09-12 14:54:05 +0100 (Thu, 12 Sep 2019) | 53 lines Fix for Trilinos not installing (and linking) properly as a shared library. NOTE: Your configure options (i.e. all CXXFLAGS, CFLAGS, FLAGS & FFLAGS_NO_OPT) should include the "-fPIC" flag (which ensures position-independent code). After the -fPIC flag is included, Trilinos can still complain about a couple of things. 1. If your Trilinos tar file has version >10.8.5 (like the one on the oomph-lib website) then the teuchos library files (found as libteuchos.so in trilinos_default_installation/) no longer exists and instead there are multiple teuchos library files (e.g. libteuchosnumerics.so), normally indicated using the --enable-multiple_teuchos_libraries flag in your configure options. During the build of an executable, this comes up as a compile-time error of the form "Can't find -lteuchos" (because it doesn't exist!). To address this (and avoid anyone having to add the flag above if they don't understand the build system) I've added a check in the configure.ac file which looks at the Trilinos_version.h file (in trilinos_default_installation/) and if the version is greater than 10.8.5, then it decides that there are multiple teuchos libraries and tries to link against them (not libteuchos). 2. Once you've got the multiple teuchos libraries problem fixed (if you had a recent enough version of Trilinos) then there is likely one more problem you'll encounter which is a run-time error. In particular, there will be a complaint about not being able to find Trilinos-specific functions and this is due to a missing run-time path specification. Namely, the executable (when linking against a shared library) needs to know the address of the shared library at run-time. If this path isn't provided then you encounter the aforementioned error. This is easily fixed by ensuring, in the configure.ac file, that the path external_dist_libraries_lib contains the string -Wl,-rpath,$TRILINOS_LIB where $TRILINOS_LIB is substituted for the path of the built library files. This is in addition to the -L flags (i.e. "-L"$TRILINOS_LIB) that are already specified. I've made the appropriate changes to fix this problem. I've also changed the configure.ac options to link against the previously installed trilinos_default_installation/ folder if no path is provided in the configure options file (using --with-trilinos[=DIR]) and if the folder actually exists. This also means that if there is a tar file in the external_distributions/trilinos/ folder then it won't automatically be unpacked and installed (thereby overwriting the previously installed version of the library). ------------------------------------------------------------------------ r1332 | ahazel | 2019-05-24 13:29:26 +0100 (Fri, 24 May 2019) | 3 lines Committing the change to Trilinos build script to prevent static libraries being the default. This should save *lots* of disk space. ------------------------------------------------------------------------ r1331 | ahazel | 2019-04-26 15:12:06 +0100 (Fri, 26 Apr 2019) | 18 lines Added demo driver for a two-layer soluble surfactant code This required modification of hijacking functions so that the option to NOT return a custom data object is possible and specified by a boolean flag in the command line. The default is true so the behaviour in existing codes is unchanged. The other changes have been to remove deprecated MPI calls MPI_Address -> MPI_Get_address MPI_Type_struct -> MPI_Create_type_struct and MPI_Errhandler -> MPI_Comm_set_errhandler These are the standard with MPI2 and shouldn't cause any problems, but need to be tested on a variety of machines. ------------------------------------------------------------------------ r1330 | mheil | 2019-02-07 08:22:50 +0000 (Thu, 07 Feb 2019) | 5 lines Added all_foeppl_von_karman to list of subdirs in demo_drivers/Makefile.am and changed "=" to "+=" in specification of EXTRA_DIST in all_foeppl_von_karman/Makefile.am ------------------------------------------------------------------------ r1329 | mheil | 2019-02-06 18:01:02 +0000 (Wed, 06 Feb 2019) | 12 lines Added demo_drivers/all_foeppl_von_karman/ which contains all four version ({2D cartesian and axisymmetric} x {displacement-based and Airy-stress fct based}) for circular disk with "slippy" clamp, subject to spatially constant pressure. All agree beautifully. There's a script that runs the codes and tecplot layout files that facilitate the comparison. ------------------------------------------------------------------------ r1328 | mheil | 2019-02-06 17:58:56 +0000 (Wed, 06 Feb 2019) | 20 lines Renamed FoepplvonKarmanDisplacementElement to DisplacementBasedFoepplvonKarmanElement with associated changes to file names. Turns out this version of the equations wasn't actually used anywhere. Also had bugs in the computation of the stress, and didn't use eta. Both now fixed and the definition of eta is consistent with the Airy-stress fct based version and the two axisymmetric equivalents. All are being test-driven in demo_drivers/all_foeppl_von_karman/ to be committed next. ------------------------------------------------------------------------ r1327 | mbbx2pm2 | 2019-01-18 10:02:26 +0000 (Fri, 18 Jan 2019) | 5 lines Updated configure.ac file in the base directory of oomph-lib to ensure that 'glibtool' (the Mac OS X equivalent of 'libtool') is used instead of 'libtool' during the build process. If 'glibtool' isn't used then CGAL can't get built. ------------------------------------------------------------------------ r1326 | mheil | 2019-01-18 08:20:24 +0000 (Fri, 18 Jan 2019) | 34 lines Puneet spotted that the gmsh self-tests currently assume that gmsh lives in /home/mheil/gmesh/bin/bin/. Which it does. On my laptop anyway... -- Fixed by providing configure flag which should be set as follows (if gmsh lives in /home/mheil/gmesh/bin/bin/; otherwise use your own path, obviously!) --with-gmsh-self-tests="/home/mheil/gmesh/bin/bin/gmsh" If this isn't provided, the gmsh self-tests won't be run. Note that the validate.sh script also checks that the gmsh version is 3.0.6. This is probably somewhat over-paranoid but oomph-lib works with that version (but not with 2.8.3, say; haven't investigated why yet!). -- Modified config/makefile_templates/demo_drivers so that in any of the demo driver directories make spit_out_gmsh_command spits out the gmsh command specified with the above flag. -- Stopped ignoring the return from the system command when gmsh is called. The C++ standard isn't prescriptive about what that should be (there's a suggestion that it should return the return flag from the command that's being executed).so I'm simply reporting it "on screen" for information... ------------------------------------------------------------------------ r1325 | mheil | 2019-01-08 07:58:51 +0000 (Tue, 08 Jan 2019) | 7 lines Forgot to list a header file in demo_drivers/navier_stokes/navier_stokes_with_singularity/Makefile.am so it wasn't included in tar file and caused build failure. ------------------------------------------------------------------------ r1324 | mheil | 2019-01-07 08:59:36 +0000 (Mon, 07 Jan 2019) | 3 lines Forgot to add meshing/adaptive_tet_meshes. Here it comes! ------------------------------------------------------------------------ r1323 | mheil | 2019-01-07 08:51:58 +0000 (Mon, 07 Jan 2019) | 139 lines Finally committing refineable tetgen/gmsh meshes. They work with curvilinear boundaries that are specified by DiskLikeGeomObjectWithBoundaries; no machinery yet for dealing with genuine free boundaries. Andrew's code that sort of had this functionality currently doesn't compile (and was never run anyway; see below) and he's volunteered to use this as an exercise to check things out himself. -- Created base class TetMeshBase for all tet meshes. Previously we only had Tetgen; to avoid confusion, previously existing "Tet...Mesh..." classes were renamed to "Tetgen...Mesh...". Generic functions were moved there. NOTE: Base class is template-free, therefore some of the member functions that previously existed in tetgen-specific (templated) classes had to be turned into templated member functions. Re-implemented setup of boundary coordinates to take possible presence of TetMeshFacetedSurfaces (see below) into account. If a boundary turns out to be non-planar (before "snapping to geom objects"!) setup of boundary coordinates is terminated for this boundary. -- Provided base class RefineableTetMeshBase with common functionality for such meshes (currently gmsh and tetgen-based ones exist). -- Implemented (and/or tidied up previously existing versions of) classes describing boundaries for tet meshes: TetMeshVertex: Can be associated with boundaries and with a specific intrinsic coordinate in an associated GeomObject. TetMeshFacet: Has vertices, can be associated with a boundary and (for gmsh purposes) be adjacent to a specified region or be embedded in one. TetMeshFacetedSurface: Has facets and vertices, and may be associated with a specific DiskLikeGeomObjectWithBoundaries that can be used to upgrade the representation of the (planar) boundary to a curvilinear one. A key feature is the option to specify how (for triangular facets only!) the intrinsic coordinate in the associated DiskLikeGeomObjectWithBoundaries varies with a normalised (0 \to 1) coordinate along the facets' edges. Default implementation interpolates linearly between the coordinates stored at the vertices. Overload in derived classes. TetMeshFacetedClosedSurface: Derived from TetMeshFacetedSurface. Provides additional information required to identify regions/holes. gmsh and tetgen do this differently so function names all end with "_for_gmsh" or "_for_tetgen" to make this clear. When implementing a specific TetMeshFacetedClosedSurface, the functionality for BOTH should be implemented though there is, of course, no way to police this. NOTE: There's potential for confusion since some of the third party mesh generators expect boundaries/regions/... to be enumerated with a one-based system (which also has certain advantages for dealing with defaults). It's now all consistent (and explicit) and obeys the following rules: -- once the mesh is created, normal oomph-lib/C++ convention apply, so all indices are zero-based. -- where appropriate (during mesh generation/boundary specification) one-based indices are sometimes used. If so, functions/member data are prefixed explicitly with "{O/o}ne_based_" to avoid any ambiguity. -- Elaborated on fact that Region_attribute stores doubles (because tetgen forces us to!) while we only use it to store unsigneds (representing region IDs). Now checking that the double is actually (exactly representable as) an unsigned. -- Added header file for DiskLikeGeomObjectWithBoundaries. It's derived from a GeomObject<2,3> and provides interfaces for representation of boundaries (which normal GeomObjects don't). After much messing around, decided a dimension-specific implementation was most appropriate. Header file contains two sample implementations (both of which are used in demo_drivers/meshing/adaptive_tet_meshes). -- RefineableTetgenMesh and RefineableGmshTetMesh require CGAL for target element size transfer and will throw an error if used without CGAL being available. Associated demo drivers won't be built/run in those cases. -- New demo driver directory meshing/adaptive_tet_meshes demonstrates use of adaptivity for tet meshes. Contains two demo drivers, one with planar, the other with curvilinear boundaries. By default they get built with gmsh; compiler flag can switch to tetgen-based meshes. -- All TetgenMeshes now set up boundary coordinates automatically. -- Deleted broken virtual function Mesh::output_boundary_coordinates(...) since it was only ever implemented in triangle mesh (where it remains as a stand-lone function). Also removed the corresponding collective call Mesh::output_boundaries_coordinates(). The function sort of duplicates the generically implemented function Mesh::doc_boundary_coordinates(...). -- Added Christian's finite Re perturbation to navier_stokes_with_singularity demo codes. -- Removed uns_adapt_3d_fs from list of build targets in demo_drivers/navier_stokes/unstructured_adaptive_3d_ALE It was never run anyway (and when it did, mesh adaptation ended up in some endless loop). Currently doesn't compile because transfer to new classes wasn't finished. Andrew volunteered to look into this. Updated non-fs version of code to new TetgenMesh/RefineableTetgenMesh. Note: won't be compiled if there's no cgal! -- Changed build script for cgal to bypass rounding check. ------------------------------------------------------------------------ r1322 | mheil | 2018-12-18 13:52:17 +0000 (Tue, 18 Dec 2018) | 5 lines Made boolean Linear_bending_model protected (rather than private) in axisym displacement based fvk (to allow overloading for contact problem). ------------------------------------------------------------------------ r1321 | mheil | 2018-09-20 13:53:04 +0100 (Thu, 20 Sep 2018) | 8 lines David's correction to various triangle based integration schemes which had a factor of 1/2 missing in the weights.... Also moved instantiations of some MG fcts (which used to live in src/generic/geometric_multigrid.h and were therefore potentially built repeatedly, causing confusion at linking time, into a separate cc file. ------------------------------------------------------------------------ r1320 | mheil | 2018-08-21 09:17:25 +0100 (Tue, 21 Aug 2018) | 5 lines Fixed a parsing problem in documentation of internal boundaries in triangle meshes. Two lines of code were skipped and made the resulting displayed html rather confusing... ------------------------------------------------------------------------ r1319 | mheil | 2018-08-20 16:47:35 +0100 (Mon, 20 Aug 2018) | 3 lines ...and actually commited the Twomersley_elements.cc and .h files. ------------------------------------------------------------------------ r1318 | mheil | 2018-08-20 16:47:00 +0100 (Mon, 20 Aug 2018) | 21 lines Implemented TWomersleyElements and tidied up some of the machinery associated with the imposition of impedance-type boundary conditions. -- We're now checking that some dofs have been pinned in the Navier-Stokes problem (since this is assumed but hard to police; warning can be suppressed by global boolean as usual) -- Faciliated use in steady problems (by providing interfaces that don't require specification of in that case meaningless parameters). -- Check if any of the WomersleyElements created in the ImpedanceTube are inverted; if so revert their node numbering which should (and in all cases encountered so far did) turn them the right way around. Error is thrown if they still have negative Jacobians at any of their integration points. ------------------------------------------------------------------------ r1317 | mheil | 2018-08-18 15:34:00 +0100 (Sat, 18 Aug 2018) | 14 lines Provided FiniteElement::check_J_eulerian_at_knots(...) and FaceElement::check_J_eulerian_at_knots(...) to be able to assess inversion of elements (judged at integration points) from the "outside" and warning in comment above FiniteElement::J_eulerian() to say that it's always positive. ------------------------------------------------------------------------ r1316 | ahazel | 2018-06-18 10:10:32 +0100 (Mon, 18 Jun 2018) | 16 lines Small changes to make the code work with gcc8. The problems were all inheritence-related and the solutions were that specific versions of overloaded functions needed to be explicitly called, or final overloads provided. Note that there is also a problem if difference versions of mpfr happens to be installed on your machine and you don't ask to use it. The problem is essentially due to how shared libraraies work in Linux and there is no easy fix that I have found. The solution is to make sure that the LD_LIBRARY_PATH in your local shell has an explicit path to oomph-lib's installation location of mpfr. ------------------------------------------------------------------------ r1315 | mheil | 2018-05-23 17:49:38 +0100 (Wed, 23 May 2018) | 3 lines Implemented point_output_data(...) for Poisson equations/elements. ------------------------------------------------------------------------ r1314 | ahazel | 2018-05-03 23:12:26 +0100 (Thu, 03 May 2018) | 1 line Bumped revision numbers in doc/doc.txt doc/the_distribution/the_distribution.txt by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1313 | ahazel | 2018-05-03 23:12:11 +0100 (Thu, 03 May 2018) | 17 lines Development for book chapter about adaptive bifucation tracking. Added continuous formulation of the linearised Navier--Stokes equations to the libraray *NOT FULLY TESTED* and wrote a demo driver that computes the base flow and eigenproblem on separate meshes. The demo appears to work, but considerably more testing needs to be done in order to understand the best type of error measure to use on each mesh. This required one additional function interpolated_dudx to be added to the vanilla Navier--Stokes elements. NOTE: I have had to delete the demo_drivers/unsteady_heat/*_midpoint directory because there was a tree clash. I don't know why, but if this needs to be reinstated then please feel free to use an earlier revision to get hold of the files. ------------------------------------------------------------------------ r1312 | mheil | 2018-02-26 08:34:07 +0000 (Mon, 26 Feb 2018) | 5 lines Got rid of superfluous variable in helmholtz_geometric_multigrid.h and (partially) fixed some compiler warnings re multi-line comments (though the latex code doesn't quite do what I believe to be intended). ------------------------------------------------------------------------ r1311 | mheil | 2018-02-24 08:17:46 +0000 (Sat, 24 Feb 2018) | 69 lines Main change: If cgal is available we perform the target area transfer in unstructured triangle meshes not by uniform bin (with associated (slow!) bin diffusion but by cgal (first a limited version of locate_zeta; it that fails nearest point). See below for details. -- Deleted two-argument version of bool FiniteElement::local_coord_is_valid(Vector &s, const double & rounding_tolerance) and replaced by void move_local_coord_back_into_element(Vector &s) const The single argument version remains alive. The two-arg version was only used in locate_zeta where the machinery for dealing with "just outside the element"-cases has been changed: we now get the Newton method to converge, possibly returning a coordinate outside the element. If so, we move the coordinate back inside, using the new function and check if the residual for the Newton method is still below the threshold and, if so, accept. This also removes the awkward need for two not necessarily compatible tolerances. -- Moved two bin related functions into base class: BinArray::coords_to_bin_index(const Vector& zeta) BinArray::coords_to_vectorial_bin_index(...) -- Fixed problem with counting of allocated bins in non-refineable bin. -- Function BinArray::get_neighbouring_bins_helper(...) now has optional final argument to decide which version to use. Default: Old version since it seems to be faster after all... Can re-investigate using the new function BinArray::profile_get_neighbouring_bins_helper() -- Provided new function void CGALSamplePointContainer::limited_locate_zeta(...) which tries to locate specified point (using up to specified number of nearest sample points as initial guess for Newton method. If none of these converge, use the nearest sample point (needed for area transfer in triangle meshes with non-convex boundaries but could be useful in other cases too). Number of sample points to try for Newton method when used for area transfer in triangle mesh is specified by, guess what: RefineableTriangleMesh::Max_sample_points_for_limited_locate_zeta_during_target_area_transfer and currently defaults to 5; can be adjusted via access fct. -- Adjusted a few fpdiff tolerances. -- Checking more gracefully that the machine has the required version of cmake and libtool before embarking on cgal (and friends) installation. (cgal needs a certain version of cmake; and I suspect that the problems with the loading of dynamic libraries are associated with an old(er) version of libtool. There's a certainly a 100% correlation between the (assumed) cause and effect.) ------------------------------------------------------------------------ r1310 | mbbx2pm2 | 2018-02-09 15:13:39 +0000 (Fri, 09 Feb 2018) | 26 lines Update of scalar multigrid demo drivers and commit of Helmholtz multigrid demo drivers. -- Running 'make check' in the scalar multigrid directory caused the validate.sh script to be run but it did not check that the correct number of tests had returned the value 'OK'. Thus, by default, it said that the self-tests always passed. -- Updated the validata files in scalar_multigrid. -- Updated src/pml_helmholtz/complex_smoother.h to grab the Problems OomphCommunicator pointer in HelmholtzGMRES and HelmholtzFGMRES so it doesn't break when run with MPI. A warning has also been added to both to warn the user that the codes have not been run in parallel with more than one processor (as this functionality hasn't been tested yet). -- Cleaned up some extraneous output in src/pml_helmholtz/helmholtz_geometric_multigrid.h and added a warning to warn the user if they try to use the solver in parallel with more than one processor (as this functionality hasn't been tested yet either). -- Added helmholtz_multigrid/ to the demo_drivers/multigrid directory ------------------------------------------------------------------------ r1309 | mheil | 2018-02-01 14:23:38 +0000 (Thu, 01 Feb 2018) | 3 lines ...and therefore removed the "-S" from the call to that script. ------------------------------------------------------------------------ r1308 | mheil | 2018-02-01 14:22:53 +0000 (Thu, 01 Feb 2018) | 4 lines Added self-test to descruct test script (was previously spawned in non_interactive_autogen.sh) ------------------------------------------------------------------------ r1307 | mheil | 2018-01-18 11:30:14 +0000 (Thu, 18 Jan 2018) | 205 lines MH's rewrite of locate zeta, based on work Louis Calot's internship -- Added machinery to build CGAL (and associated pre-requisite third party distributions: GMG, MPFR and boost) to the oomph-lib build machinery. Tar files are distributed with oomph-lib. By default they are unpacked and the libraries built and installed within the oomph-lib directory structure. The following flags modify this behaviour: --enable-suppress-cgal-build Suppresses cgal (etc) build cgal-related code is bypassed with #ifdef OOMPH_HAS_CGAL [...] #endif constructions. --with-cgal-permanent-installation-dir Specifies an alternative (assumed to be permanent) directory, typically outside the oomph-lib directory, where libraries get installed. They can then be linked against without having to rebuild. Instructions on what to add to the oomph-lib configure script are provided at the end of the build process. Assuming oomph-lib has been built with the configure option --with-cgal-permanent-installation-dir=/home/mheil/junk then any subsequent build with the flags --with-boost=/home/mheil/junk/boost_default_installation --with-gmp=/home/mheil/junk/gmp_default_installation --with-mpfr=/home/mheil/junk/mpfr_default_installation --with-cgal=/home/mheil/junk/cgal_default_installation will link against the existing installations. It should also be possible to set the arguments to these options to "auto" (without the quotation marks) in which case it's assumed that the libraries are provided by the system (where they (especially boost) may have been installed already). Hasn't been tried yet and is a bit risky because the versions of the library may be inconsistent with each other... All explained on webpage (doc/the_distribution/the_distribution.txt) Puneet provided the machinery required to adjust things for macs. -- Major, major, major tidy up of the multi-domain machinery and its interaction with MeshAsGeomObject etc. Lots of confusing overlap between scopes has been tidied up. As a result, many members of the Multi_domain_functions namespace no longer exist but have been moved to more sensible places -- many of them (sensibly, at the time) assumed that locate_zeta would always be performed using what we now call a non-refineable bin structure. This has now been changed significantly. The MeshAsGeomObject has a SamplePointContainer and there are currently three different versions available. Default is set by MeshAsGeomObject_Helper::Default_sample_point_container_version which can take (enumerated) values: UseCGALSamplePointContainer UseRefineableBinArray and UseNonRefineableBinArray By default we use the CGAL-based sample point container (if the oomph-lib has been compiled with CGAL support; see above), otherwise we revert to the refineable bin. The non-refineable bin is used in the area transfer for refineable triangle meshes (because it allows the propagation of target areas "by diffusion"; it's not actually used for locate zeta purposes). Time for setup of sample point containers (incl. time spent in any third-party fcts; cgal) can be documented by setting SamplePointContainer::Enable_timing_of_setup to true. -- Changed "lower left" comparison in triangle mesh to allow for tolerance. Warning is issued if points are within tolerance in x and y directions! -- Moved SparseVector into its own file. -- INTERFACE CHANGE: Added optional boolean to: void FiniteElement::get_s_plot(const unsigned& i, const unsigned& nplot, Vector& s, const bool& use_equally_spaced_interior_sample_points=false) const If bool is set to true, the plot points within elements are placed such that in a uniform mesh they are uniformly spaced. This avoids duplication of sample points along element faces/edges/vertices. Implemented for all existing geometric finite elements. -- Introduced Locate_zeta_helpers::Radius_multiplier_for_fast_exit_from_locate_zeta (defaults to 1.5) as multiplier for (zeta-based) outer radius of element used for deciding that point is outside element when calling FiniteElement::locate_zeta(...). Set to negative value to suppress test. Element radius based on centre of gravity and distance to all nodes. -- Default output function for TElements no longer includes pin status (the other element types didn't either). -- demo_drivers/mpi/distribution/two_d_unstructured_adaptive_poisson/validate.sh can now run with flag to use specified sample point container. -- Added timing for individual self-tests via wrapper script bin/wrapper_for_validate.sh which is called from config/makefile_templates/demo_drivers NOTE: This script can also be modifed trivially to make sure that demo driver codes are only compiled but not run. Item added to FAQs. -- Added new script that runs self-tests only for driver codes (in specifiable directories) that contain a certain string. Item added to FAQs -- Added Puneet's changes to vorticity smoother. Here are his comments: -- Added the namespace VorticityRecoveryHelpers which is used to decide how many velocity/vorticity derivatives the user wants. -- Added several helper functions to facilitate the generalisation of the code to output however many velocity/vorticity derivatives would like. -- Changed the interface of ExactVorticityFctPt to requiring the Eulerian coordinates and a vector of vectors where the i-th vector contains the i-th derivatives of the vorticity. The onus then falls on the user to provide the correct number of derivatives in the vector. -- Added functions to allow the user to output the vorticity and it's derivatives directly to Paraview format rather than having to use oomph-convert which could take a very long time in cases where all possible velocity/vorticity derivatives were output in the Tecplot format. -- Originally when the code was about to compute a smoothed derivative it would compute all derivatives of that order, use the entry it required and would then throw the rest of the data away instead of using it to compute other derivatives of that order. The code has now been changed so that only the required derivative is computed and used. N.B. This only really makes a noticeable difference if you're computing high order derivatives... -- Implemented compute_norm() functions for various elements. -- Made validate scripts in demo_drivers/FAQ demo_drivers/interaction/fsi_driven_cavity demo_drivers/navier_stokes/free_surface_rotation functional. -- Tweaked lots of fpdiff tolerances and in some cases used norms rather than solution itself (not sure why these tests never failed before when triangle generated a different mesh; it obviously didn't...). -- Suppressed fpdiff test in demo_drivers/interaction/fsi_osc_ring because the data was too rough to allow meaningful comparison (impulsive start). Marked up as such in output to validation.log -- Redirected output in demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner into OUTPUT files. ------------------------------------------------------------------------ r1306 | ahazel | 2017-11-21 16:36:08 +0000 (Tue, 21 Nov 2017) | 1 line Bumped revision numbers in doc/doc.txt doc/the_distribution/the_distribution.txt by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1305 | ahazel | 2017-11-21 16:35:34 +0000 (Tue, 21 Nov 2017) | 2 lines Added fixed validation data and drivers for multigrid from Puneet ------------------------------------------------------------------------ r1304 | ahazel | 2017-11-14 15:03:08 +0000 (Tue, 14 Nov 2017) | 1 line Bumped revision numbers in doc/doc.txt doc/the_distribution/the_distribution.txt by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1303 | ahazel | 2017-11-14 14:48:30 +0000 (Tue, 14 Nov 2017) | 2 lines Modified the quick guide to include correct syntax for templated classes in exercise. ------------------------------------------------------------------------ r1302 | bergemann | 2017-10-23 12:52:19 +0100 (Mon, 23 Oct 2017) | 7 lines Added functionality to (under-)relax the Newton correction step using a floating point number which defaults to 1.0 Added a hook (empty virtual function) which provides access to the continuation parameter in arc-length continuation ------------------------------------------------------------------------ r1301 | mbbssjd5 | 2017-10-17 08:14:01 +0100 (Tue, 17 Oct 2017) | 1 line Fix residuals in pml time harmonic lin elast elements ------------------------------------------------------------------------ r1300 | mbbssjd5 | 2017-10-14 15:02:28 +0100 (Sat, 14 Oct 2017) | 1 line Add pml_mapping_functions.h which was missing from previous commit ------------------------------------------------------------------------ r1299 | mbbssjd5 | 2017-10-06 07:40:18 +0100 (Fri, 06 Oct 2017) | 17 lines -- Interface change: GeneralisedTimeHarmonicLinearElasticity is now PMLTimeHarmonicLinearElasticity (PMLTHLE) -- Move PMLMapping and derived classes into its own generic file called pml_mapping_functions to be used by PMLTHLE and PMLHelmholtz. Made more generic by changing references to k_squared to wavenumber_squared -- Add interface for PMLMapping functions to be used in PMLTHLE in a very similar interface to PMLHelmholtz -- Note: no change to the maths of PMLTHLE, still same validata and mapping function is used -- Add the imaginary unit (I) to MathematicalConstants -- Fix bug in triangle mesh template when compiled without OOMPH_HAS_MPI ------------------------------------------------------------------------ r1298 | mheil | 2017-08-25 08:46:00 +0100 (Fri, 25 Aug 2017) | 22 lines -- removed empty line after output in beam elements since it confuses paraview conversion. Updated validata accordingly. -- Fixed ability to specify area constraint in triangle meshes by region. -- Fixed "not checking for pinned eqn number" bug in Poisson elements with singularity. Thanks to Puneet for spotting this! -- Fixed various problems with appending to global validation.log file. Incorrect relative paths made the data end up in the wrong place. Probably an idea to check this every once in a while. find . -name 'validation.log' | grep -v Validation should only find ./validation.log ./self_test/analyse_self_tests/validation.log ------------------------------------------------------------------------ r1297 | mheil | 2017-08-21 13:56:24 +0100 (Mon, 21 Aug 2017) | 48 lines -- Added Thierry's demo drivers for Poisson and Navier-Stokes equations with subtracted off singularities. Everything lives in demo driver directories since it (probably) still requires some more work. Things to look into: -- imposing constraint on FE solution that regularises it (and provides equation for amplitude) at finite Re. With hindsight (now that I've fixed the amplitude of the Stokes corner solution to 1) it's clear why regularation by setting dp/dy=0 won't work very well at finite Reynolds number: The full solution is still "quite steep", indicating either that the Stokes solution is only valid VERY locally or that the exponent of the singularity is different at finite Re... -- blending seems to work fine for Poisson, but caused problems in NSt. Can't now remember if it was OK for Stokes flow... -- Acknowledged Thierry's contributions in people/people.txt -- Added script that combines sequence of vtu files specified on command line flag into single pvd file: bin/make_combined_pvd.bash -- Redirected output from line visualiser self test to correct top level validation script. -- Implemented fix in nodes.h/.cc to automatically constrain any values that are hanging. It's possible to unpin such values while the node retains its hanging status, something that ("obviously") leads to zero rows in the Jacobian. Spotted and diagnosed by Matthew Russell -- many thanks! Fix is applied automatically in the newly written Node::assign_eqn_numbers(...) and a warning message is issued (if compiled with paranoia). Didn't provide a global "suppress warning" flag since the user should really fix the code that causes this behaviour, even though there's now (no longer) any negative downstream effect... -- Made the function that computes derivatives of the pressure shape/test function in Navier-Stokes elements public (because I needed access in the "Navier-Stokes with singularity" elements. ------------------------------------------------------------------------ r1296 | ahazel | 2017-08-17 16:13:15 +0100 (Thu, 17 Aug 2017) | 7 lines Added small changes to the unstructured mesh generation to allow the point that specifies the inside of a hole to be fixed by the user (rather than updated on the fly) and also to allow a user-specified function (via a function pointer) to be used to compute an updated interior point, rather than our default. ------------------------------------------------------------------------ r1295 | mheil | 2017-07-27 08:03:47 +0100 (Thu, 27 Jul 2017) | 5 lines Black box Newton solver in oomph_utilities.cc kept outputting the Jacobian; possibly uncommented by somebody while debugging something. Commented out again. ------------------------------------------------------------------------ r1294 | mheil | 2017-04-17 14:08:43 +0100 (Mon, 17 Apr 2017) | 4 lines Added vorticity smoother (with declaimer that it's only ever been used in 2D). ------------------------------------------------------------------------ r1293 | mrussell | 2017-03-21 21:13:28 +0000 (Tue, 21 Mar 2017) | 1 line Fix fig2poly Makefile - now actually installs symlink into bin ------------------------------------------------------------------------ r1292 | mbbx2pm2 | 2017-03-06 18:57:19 +0000 (Mon, 06 Mar 2017) | 6 lines -- Restored rayleigh_traction_channel.cc and rayleigh_channel.cc. The appropriate changes will be made to the documentation instead of the demo drivers to ensure the documentation is consistent with the driver codes. ------------------------------------------------------------------------ r1291 | mbbx2pm2 | 2017-03-06 11:32:53 +0000 (Mon, 06 Mar 2017) | 6 lines -- Updated the Rayleigh traction channel demo driver to ensure that the exact solution was consistent with the documentation. This is same issue as in the original Rayleigh problem which pinned nodes on the top boundary instead of imposing a traction condition. ------------------------------------------------------------------------ r1290 | mbbx2pm2 | 2017-03-06 11:30:19 +0000 (Mon, 06 Mar 2017) | 4 lines -- Updated the Rayleigh channel demo driver to ensure that the exact solution was consistent with the documentation. ------------------------------------------------------------------------ r1289 | mbbx2pm2 | 2017-02-27 09:47:23 +0000 (Mon, 27 Feb 2017) | 9 lines -- Updated the (complex) GMRES solver used in the Helmholtz multigrid solver stored in src/pml_helmholtz. GMRES makes use of the block preconditioner framework used in the Helmholtz solver. This functionality requires that the distribution of vectors be set by the block preconditioner which was not the case in some places. This issue has now been addressed. NOTE: This update should only affect Jonathan as he is the only one with access to the Helmholtz multigrid demo drivers. ------------------------------------------------------------------------ r1288 | mbbssjd5 | 2017-02-14 13:42:45 +0000 (Tue, 14 Feb 2017) | 9 lines Add missing bracket in pml fourier helmholtz residual and small website fix -- Bracket missing in pml_fourier_decomposed_helmholtz_equations.cc residual, update validata to agree with this fix. -- Fix javascript which detects if website is hosted locally -- Fix search button 'Go' ------------------------------------------------------------------------ r1287 | ahazel | 2017-02-03 16:40:30 +0000 (Fri, 03 Feb 2017) | 6 lines Modified triangle_mesh.template.cc so that it actually compiles! (under my set of options) delete project_problem_pt was in the wrong place which meant that it was out of scope. ------------------------------------------------------------------------ r1286 | mrussell | 2017-01-25 23:19:58 +0000 (Wed, 25 Jan 2017) | 7 lines Add boolean flag and accessor methods to RefineableTriangleMesh for disabling projection The default behaviour is to do projection as usual. Linear, steady problems should solve in a single Newton iteration and projection onto the refined mesh is unnecessary (and expensive) in this case. ------------------------------------------------------------------------ r1285 | mbbx2pm2 | 2017-01-17 18:08:23 +0000 (Tue, 17 Jan 2017) | 7 lines -- Sorted out a warning about the variable 'n_sons' in src/geometric_multigrid.h. This variable was unused and is not needed in the setup of the interpolation matrices when using the locate_zeta functionality (which where it was deleted from). ------------------------------------------------------------------------ r1284 | mbbx2pm2 | 2017-01-17 11:06:24 +0000 (Tue, 17 Jan 2017) | 1 line ------------------------------------------------------------------------ r1283 | mheil | 2017-01-16 08:30:16 +0000 (Mon, 16 Jan 2017) | 1 line Bumped revision numbers in doc/doc.txt doc/the_distribution/the_distribution.txt by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1282 | mheil | 2017-01-16 08:27:53 +0000 (Mon, 16 Jan 2017) | 71 lines Puneet's commit of scalar geometric multigrid. -- Added new configure options file for mpi debug on mac. -- Added functionality to output the exact solution to a Paraview format using the fct called output_fct_paraview(...) which works in the same way as output_paraview(...) but requires a function pointer to the exact solution (i.e. FiniteElement::SteadyExactSolutionFctPt). The function is broken in the FiniteElement class and must be fully implemented in the derived class in which it is being used. Note, it has been fully implemented for the PMLHelmholtzElement class. -- INTERFACE CHANGE: The inputs to the function gamma(...) in the class PMLMapping have been changed to include the value of alpha used in the complex-shifted Helmholtz equation \nabla^{2}u+(1+i\alpha)k^2u=0. This is a necessary change for the Helmholtz multigrid solver. -- Added disable_pml() function into the PMLElementBase class to allow the user to disable the PML mapping in an element. -- Added the PMLMeshBase class to sit below all PML meshes. This is currently only relevant for the PMLQuadMeshBase class as 3D PML meshes have not been implemented. This class introduces the pml_locate_zeta(...) functionality which provides a more efficient form of locate_zeta for PML meshes as they are always axis-aligned meshes. -- Added the function refine_base_mesh_as_in_reference_mesh_minus_one(...) to refine the input mesh in the same way as the current mesh but stops just before the last refinement is complete. -- Added demo_drivers/multigrid/scalar_multigrid and the files within it. -- Added src/pml_helmholtz/complex_smoother.h used specifically in the Helmholtz multigrid solver. Contains the HelmholtzSmoother class which mimics the Smoother class in iterative_linear_solver.h but can cater to the complex-valuedness of the Helmholtz problem. Also contains the implementation of the damped Jacobi iteration, complex GMRES and complex FGMRES. This is still work in progress and is not checked by any of the driver codes currently checked in. -- Added src/pml_helmholtz/helmholtz_geometric_multigrid.h which contains the full multigrid preconditioner for the Helmholtz equation. Again, not validated yet. -- Added the Smoother class as a derived class of IterativeLinearSolver to be used inside the scalar multigrid (MG) solver. This class provides the two extra functions smoother_setup(...) and smoother_solve(...) which are typically only called inside an MG solver. Both damped Jacobi and Gauss-Seidel have been implemented. Gauss-Seidel was already implemented previously but was very inefficient for sparse matrices. An explicit template specialisation has been written to cater to CRDoubleMatrix objects. It has also been changed to derive from the Smoother class. -- Added the function sort_entries() to the class CRDoubleMatrix to sort the entries in the value and column_index vectors. This function ensures that the entries in column index associated with each row are arranged in ascending order. The function entries_are_sorted() was also added to check that the entries have been sorted correctly. The struct Comparison_struct was also added to CRDoubleMatrix to provide an overload for the sort function when the inputs are pairs (i.e. pair) to sort the column_index and value entries. -- Added the function get_matrix_transpose(...) to return the transpose of a matrix. This was a necessary function for the MG solver to calculate the Galerkin approximation. -- New matrix fcts are not mpi proofed and issue a warning if used on distributed matrices. ------------------------------------------------------------------------ r1281 | mrussell | 2017-01-06 14:51:23 +0000 (Fri, 06 Jan 2017) | 9 lines Fix the direct Paraview output for QElements The VTK element types for 2D and 3D QElements were incorrect and resulted spurious "wiggles" in the output. The axisym_navier_stokes/raleigh_instability validata has been regenerated using the correct Paraview output. ------------------------------------------------------------------------ r1280 | mheil | 2017-01-06 08:18:31 +0000 (Fri, 06 Jan 2017) | 1 line Bumped revision numbers in doc/doc.txt doc/the_distribution/the_distribution.txt by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1279 | mheil | 2017-01-03 14:31:53 +0000 (Tue, 03 Jan 2017) | 12 lines Deleted final remaining TriangleMesh constructor that uses TriangulateIO and the use_attributes flag: TriangleMesh(TriangulateIO& triangulate_io, TimeStepper* time_stepper_pt= &Mesh::Default_TimeStepper, const bool &use_attributes=false, const bool &allow_automatic_creation_of_vertices_on_boundaries) Wasn't used anywhere anyway. ------------------------------------------------------------------------ r1278 | mheil | 2017-01-03 08:40:57 +0000 (Tue, 03 Jan 2017) | 4 lines Accept repeated nodes during Mesh::self_test() if at least one of them is a copied node, but issue diagnostic anyway. ------------------------------------------------------------------------ r1277 | mly | 2016-12-30 06:46:52 +0000 (Fri, 30 Dec 2016) | 6 lines Added 2v22 to momentum AMG preconditioner. Changes to be committed: modified: doc/preconditioners/lgr_navier_stokes/lgr_navier_stokes.txt modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1276 | mly | 2016-12-30 06:46:52 +0000 (Fri, 30 Dec 2016) | 3 lines Changed strength of dependence for 3D momentum problem, 0.668->0.8 Changes to be committed: modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc ------------------------------------------------------------------------ r1275 | mly | 2016-12-30 06:46:51 +0000 (Fri, 30 Dec 2016) | 4 lines Fixed spelling mistake Changes to be committed: modified: src/navier_stokes/impose_parallel_outflow_element.h ------------------------------------------------------------------------ r1274 | mly | 2016-12-30 06:46:51 +0000 (Fri, 30 Dec 2016) | 3 lines Added more info to the error output of add_to_boundary() Changes to be committed: modified: src/generic/nodes.cc ------------------------------------------------------------------------ r1273 | mbbx2pm2 | 2016-12-19 14:16:24 +0000 (Mon, 19 Dec 2016) | 47 lines Puneet resolved some inconsistencies with the definitions of regions in triangle meshes that were generated inline and from polyfiles. generic/unstructured_two_d_mesh_geometry_base.h: - the function nregion_element(i) has been rewritten to use an iterator to find the entry in Region_element_pt associated with the unsigned i. If the index i was not stored then memory was accidentally allocated to compensate for it which in turn affected the value of nregion(). The new (old?) method avoids this problem. A similar thing has been done for region_element_pt(...). meshes/triangle_mesh.template.cc: - previously, in build_from_scaffold(...), the region 0 was not added to the mesh if the .poly file used to construct the mesh did not contain it. If the user tried to add the region 0 into this file then oomph-lib produced an error as users are not allowed to assign any region the ID 0. This did not conform with the numbering used when constructing a mesh with TriangleMeshParameters as this, by default, assigned everything the default region ID 0. This created errors later down the line which only assigned region information when the number of regions was strictly greater than 1. - the function build_triangulateio(...) has been changed to include the boolean use_attributes in its inputs. The value of this boolean will be changed to true if the .poly file supplied specifies regions. This allows the TriangleMesh constructor, which passes in ONLY a .poly file (as opposed to the .node, .ele and .poly files), to eliminate use_attributes from its inputs. NOTE: There's one more constructor left with the old usage. However, it seems obsolete and (if true) will be deleted in the next iteration... meshes/triangle_mesh.template.h: - the boolean use_attributes is no longer passed to any TriangleMesh or derived class constructor which constructs the mesh from a .poly or .node, .ele AND .poly file. The reasoning for this is that region attributes and region IDs only need to be stored if the .poly file supplies them. Thus, the user should not have to decide whether or not to use this information. - the SolidTriangleMesh constructor which uses .node, .ele and .poly can also assign the value of allow_automatic_creation_of_vertices_on_boundaries, a boolean which is passed to the TriangleMesh constructor. It is not a necessary change but allows the user to decide on whether or not to use the functionality. It defaults to true. ------------------------------------------------------------------------ r1272 | mheil | 2016-11-16 15:36:58 +0000 (Wed, 16 Nov 2016) | 1 line Bumped revision numbers in doc/doc.txt doc/the_distribution/the_distribution.txt by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1271 | mheil | 2016-11-16 15:36:36 +0000 (Wed, 16 Nov 2016) | 3 lines removed dummy edit... ------------------------------------------------------------------------ r1270 | mheil | 2016-11-16 13:16:33 +0000 (Wed, 16 Nov 2016) | 1 line Bumped revision numbers in doc/doc.txt doc/the_distribution/the_distribution.txt by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1269 | mheil | 2016-11-16 13:12:16 +0000 (Wed, 16 Nov 2016) | 3 lines Dummy change to doc/the_data_structure/the_data_structure.txt to check out new, extended bumping machinery. ------------------------------------------------------------------------ r1268 | mheil | 2016-11-16 11:27:53 +0000 (Wed, 16 Nov 2016) | 8 lines Updated bump_doc_txt.bash so that it also bumps doc/the_distribution/the_distribution.txt. Other files can be added to the list at the beginning of this file (though, currently this doesn't seem necessary since no other *.txt files in doc contain the svn revision related strings that need to be updated during commit). ------------------------------------------------------------------------ r1267 | mheil | 2016-11-16 11:25:15 +0000 (Wed, 16 Nov 2016) | 1 line Bumped revision numbers in doc/doc.txt doc/the_distribution/the_distribution.txt by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1266 | mheil | 2016-11-16 11:24:53 +0000 (Wed, 16 Nov 2016) | 1 line Bumped revision numbers in doc/doc.txt doc/the_distribution/the_distribution.txt by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1265 | mheil | 2016-11-16 11:23:53 +0000 (Wed, 16 Nov 2016) | 3 lines changed propset for doc/the_distribution/the_distribution.txt ------------------------------------------------------------------------ r1264 | mheil | 2016-11-16 11:19:16 +0000 (Wed, 16 Nov 2016) | 1 line Bumped revision numbers in doc/doc.txt doc/the_distribution/the_distribution.txt by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1263 | mheil | 2016-11-10 11:13:25 +0000 (Thu, 10 Nov 2016) | 1 line Bumped doc/doc.txt revision number by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1262 | mheil | 2016-11-10 11:09:42 +0000 (Thu, 10 Nov 2016) | 11 lines Changed the static boolean UnstructuredTwoDMeshGeometryBase::Suppress_warning_about_regions_and_boundaries to false since it cluttered up too much of the output. Failure of the associated test is unlikely to actually indicate a real problem anyway. Also removed dummy stuff from doc.txt to avoid bumping. This is now going to be the next release. ------------------------------------------------------------------------ r1261 | mheil | 2016-11-09 13:17:15 +0000 (Wed, 09 Nov 2016) | 5 lines Added lagrange_enforced_flow_preconditioner to navier stokes demo drivers Makefile.am (otherwise self-tests never descend into this) ------------------------------------------------------------------------ r1260 | mheil | 2016-11-09 07:57:35 +0000 (Wed, 09 Nov 2016) | 1 line Bumped doc/doc.txt revision number by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1259 | mbbssjd5 | 2016-11-08 23:52:03 +0000 (Tue, 08 Nov 2016) | 16 lines -- Interface change: Pml changed to PML. For example, PmlHelmholtz is now PMLHelmholtz. (This impacts the src files, demo drivers, docs and spelling corpus) -- PML Fourier decomposed Helmholtz - Rewrote residuals and jacobian for src/pml_fourier_decompose_helmholtz - Added hook for a class which contains the PML mapping and transformed coordinate - Changed validata, and checked that for the test case, the error converges to 0 under merge refinement -- Added include cstring to matrices.cc after memcpy undefined error during compilation using g++ 5.4.0. -- Fixed manifest and brwoserconfig with correct relative file path ------------------------------------------------------------------------ r1258 | mly | 2016-10-12 07:13:28 +0100 (Wed, 12 Oct 2016) | 6 lines Fixed comments and spelling mistakes in: Changes to be committed: modified: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/two_d_tilted_square.cc modified: src/generic/elements.cc modified: src/generic/quad_mesh.cc ------------------------------------------------------------------------ r1257 | mly | 2016-10-12 07:13:27 +0100 (Wed, 12 Oct 2016) | 4 lines Removed some comments in documentation. Changes to be committed: modified: doc/preconditioners/lgr_navier_stokes/lgr_navier_stokes.txt ------------------------------------------------------------------------ r1256 | mly | 2016-10-10 19:28:17 +0100 (Mon, 10 Oct 2016) | 6 lines Final modification of the demo driver and documentation. Changes to be committed: new file: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/run.sh modified: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/two_d_tilted_square.cc modified: doc/preconditioners/lgr_navier_stokes/lgr_navier_stokes.txt ------------------------------------------------------------------------ r1255 | mly | 2016-10-10 16:23:41 +0100 (Mon, 10 Oct 2016) | 4 lines C++ thinks pow(double,int) is ambiguous, so I changed it to pow(double,double). Changes to be committed: modified: src/generic/Qelements.h ------------------------------------------------------------------------ r1254 | mly | 2016-10-10 15:09:11 +0100 (Mon, 10 Oct 2016) | 7 lines Deleted auxiliary files. Changes to be committed: modified: Makefile.am deleted: lagrange_enforced_flow_preconditioner_new.cc deleted: lagrange_enforced_flow_preconditioner_new.h deleted: lagrange_enforced_flow_preconditioner_old.h ------------------------------------------------------------------------ r1253 | mly | 2016-10-10 13:03:16 +0100 (Mon, 10 Oct 2016) | 9 lines Everything finally works. Changes to be committed: modified: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/two_d_tilted_square.cc new file: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/validata/two_d_tilted_square_iter.dat.gz new file: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/validata/two_d_tilted_square_soln.dat.gz new file: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/validate.sh modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1252 | mly | 2016-10-10 13:03:14 +0100 (Mon, 10 Oct 2016) | 8 lines Okay, I think everything works properly now. I just need to get AMG working again. Changes to be committed: modified: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/two_d_tilted_square.cc modified: src/navier_stokes/Makefile.am new file: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1251 | mly | 2016-10-10 13:03:13 +0100 (Mon, 10 Oct 2016) | 11 lines Somehow the initial merger went wrong, it's producing incorrect results. (significantly higher iteration counts). I am now reverting back and re-doing. Changes to be committed: modified: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/two_d_tilted_square.cc modified: src/navier_stokes/Makefile.am modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h renamed: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc -> src/navier_stokes/lagrange_enforced_flow_preconditioner_new.cc new file: src/navier_stokes/lagrange_enforced_flow_preconditioner_new.h new file: src/navier_stokes/lagrange_enforced_flow_preconditioner_old.h ------------------------------------------------------------------------ r1250 | mly | 2016-10-10 13:03:11 +0100 (Mon, 10 Oct 2016) | 6 lines Fixed a lot of formatting errors Doxygen file/documentation for the lgr preconditioner. Changes to be committed: modified: Doxyfile modified: lgr_navier_stokes.txt ------------------------------------------------------------------------ r1249 | mly | 2016-10-10 13:03:10 +0100 (Mon, 10 Oct 2016) | 6 lines Added default AMG settings for augmented momentum and pressure blocks. Changes to be committed: modified: lagrange_enforced_flow_preconditioner.cc modified: lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1248 | mly | 2016-10-10 13:03:09 +0100 (Mon, 10 Oct 2016) | 24 lines Changes to be committed: modified: .gitignore modified: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/two_d_tilted_square.cc modified: doc/navier_stokes/vmtk_fluid/vmtk_fluid.txt modified: doc/preconditioners/lgr_navier_stokes/Doxyfile modified: doc/preconditioners/lgr_navier_stokes/lgr_navier_stokes.txt .gitignore Added a lot of auto generated files from doc directory demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/two_d_tilted_square.cc Added comment: // Create oomph-lib iterative linear solver doc/navier_stokes/vmtk_fluid/vmtk_fluid.txt cartesian -> Cartesian doc/preconditioners/lgr_navier_stokes/Doxyfile EXAMPLE_PATH = ../../../demo_drivers/linear_solvers -> EXAMPLE_PATH = ../../../demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner doc/preconditioners/lgr_navier_stokes/lgr_navier_stokes.txt almost finished documentation ------------------------------------------------------------------------ r1247 | mly | 2016-10-10 13:03:07 +0100 (Mon, 10 Oct 2016) | 4 lines Almost fixed all errors,... Changes to be committed: modified: lgr_navier_stokes.txt ------------------------------------------------------------------------ r1246 | mly | 2016-10-10 13:03:06 +0100 (Mon, 10 Oct 2016) | 8 lines I've just found out that the html file does not generate properly. So I'll need to fix this now. Changes to be committed: new file: figures/SimAng30Rey100Noel4.eps new file: figures/SimAng30Rey100Noel4.gif new file: figures/SimAng30Rey100Noel4.png modified: lgr_navier_stokes.txt ------------------------------------------------------------------------ r1245 | mly | 2016-10-10 13:03:04 +0100 (Mon, 10 Oct 2016) | 8 lines lgr prec completed - fully documented. Changes to be committed: modified: doc/preconditioners/Makefile.am new file: doc/preconditioners/lgr_navier_stokes/Doxyfile new file: doc/preconditioners/lgr_navier_stokes/Makefile.am new file: doc/preconditioners/lgr_navier_stokes/lgr_navier_stokes.txt modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc ------------------------------------------------------------------------ r1244 | mly | 2016-10-10 13:03:02 +0100 (Mon, 10 Oct 2016) | 4 lines Documented Step 3 - create the augmentation blocks. Changes to be committed: modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc ------------------------------------------------------------------------ r1243 | mly | 2016-10-10 13:03:01 +0100 (Mon, 10 Oct 2016) | 4 lines Moved variable declarations and fixed comments. Changes to be committed: modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc ------------------------------------------------------------------------ r1242 | mly | 2016-10-10 13:03:00 +0100 (Mon, 10 Oct 2016) | 5 lines Removed W_preconditioner_pt and all related functions/variables. Changes to be committed: modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1241 | mly | 2016-10-10 13:02:59 +0100 (Mon, 10 Oct 2016) | 4 lines Now using the more efficient way of solving the w blocks. Changes to be committed: modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc ------------------------------------------------------------------------ r1240 | mly | 2016-10-10 13:02:58 +0100 (Mon, 10 Oct 2016) | 4 lines Fixed a small bug. Changes to be committed: modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc ------------------------------------------------------------------------ r1239 | mly | 2016-10-10 13:02:57 +0100 (Mon, 10 Oct 2016) | 6 lines About to change the way we soulve the W block to make it more efficient. Changes to be committed: modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1238 | mly | 2016-10-10 13:02:56 +0100 (Mon, 10 Oct 2016) | 6 lines Changes to be committed: modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Header file is completely finished and well documented. Still need to clean up the .cc file. ------------------------------------------------------------------------ r1237 | mly | 2016-10-10 13:02:55 +0100 (Mon, 10 Oct 2016) | 18 lines Changes to be committed: modified: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/two_d_tilted_square.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h 1) Renamed: set_superlu_preconditioner_for_navier_stokes_block() -> set_superlu_for_navier_stokes_preconditioner() get_lagrange_multiplier_preconditioner() -> get_w_cg_preconditioner() Use_default_norm_of_f_scaling -> Use_norm_f_for_scaling_sigma Got rid of if(Use_diagonal_w_block), and the else block. 2) Fixed a lot of comments ------------------------------------------------------------------------ r1236 | mly | 2016-10-10 13:02:53 +0100 (Mon, 10 Oct 2016) | 5 lines Indented all the things. Changes to be committed: modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1235 | mly | 2016-10-10 13:02:52 +0100 (Mon, 10 Oct 2016) | 25 lines Changes to be committed: modified: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/two_d_tilted_square.cc modified: src/generic/double_vector.cc modified: src/generic/double_vector.h modified: src/generic/matrices.cc modified: src/generic/matrices.h modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h 1) two_d_tilted_square.cc Renamed: LagrangeEnforcedflowPreconditioner -> LagrangeEnforcedFlowPreconditioner set_navier_stokes_lsc_preconditioner -> set_navier_stokes_preconditioner 2) Taken out debug flag and timers in: double_vector.h double_vector.cc matrices.h matrices.cc 3) Removed namespace RRR from matrices.cc 4) Fixed a lot of comments in: lagrange_enforced_flow_preconditioner.h lagrange_enforced_flow_preconditioner.cc ------------------------------------------------------------------------ r1234 | mly | 2016-10-10 13:02:51 +0100 (Mon, 10 Oct 2016) | 6 lines Changes to be committed: modified: navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: navier_stokes/lagrange_enforced_flow_preconditioner.h Moved stuff around, deleted scaling_sigma_multiplier variable, this was used for testing purposes. ------------------------------------------------------------------------ r1233 | mly | 2016-10-10 13:02:49 +0100 (Mon, 10 Oct 2016) | 35 lines Changes to be committed: modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc 1) Deleted auxiliary code to dump out matrices and timing different functions. 2) Using the proper get_diagonal_entries() function instead of repeating code. modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h 3) Renamed Lagrange_multiplier_subsidiary_preconditioner_function_pt to Lagrange_multiplier_subsidiary_preconditioner_fct_pt 4) Deleted the following: void add_scaling_to_diag(double &Scaling, CRDoubleMatrix *&block_pt); void get_diag(CRDoubleMatrix *&block_pt, Vector& diag); void add_matrices(CRDoubleMatrix *&block_pt1, CRDoubleMatrix *&block_pt2); void enable_doc_prec() {Doc_prec = true;} void disable_doc_prec() {Doc_prec = false;} void enable_doc_time() {Doc_time = true;} void disable_doc_time() {Doc_time = false;} void set_label_pt(std::string* label_pt) void set_doc_prec_directory_pt(std::string* doc_prec_directory_pt) void set_doc_linear_solver_info_pt(DocLinearSolverInfo* doc_linear_solver_info_pt) bool Do_matcat_test; bool Do_vec_test; std::string* Label_pt; std::string *Doc_prec_directory_pt; bool Doc_time; bool Doc_prec; DocLinearSolverInfo* Doc_linear_solver_info_pt; ------------------------------------------------------------------------ r1232 | mly | 2016-10-10 13:02:48 +0100 (Mon, 10 Oct 2016) | 4 lines Cleaned up the self test driver code. Changes to be committed: modified: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/two_d_tilted_square.cc ------------------------------------------------------------------------ r1231 | mly | 2016-10-10 13:02:46 +0100 (Mon, 10 Oct 2016) | 7 lines Self test works, just need to comment everything and tidy up the code Changes to be committed: modified: demo_drivers/navier_stokes/lagrange_enforced_flow_preconditioner/two_d_tilted_square.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1230 | mly | 2016-10-10 13:02:45 +0100 (Mon, 10 Oct 2016) | 5 lines Got the driver code to work properly. Still needs cleaning up. Changes to be committed: modified: two_d_tilted_square.cc ------------------------------------------------------------------------ r1229 | mly | 2016-10-10 13:02:43 +0100 (Mon, 10 Oct 2016) | 6 lines I've made every variable an optional parameter. This is a bit complicated, so I'll take it out and make it more static. Changes to be committed: modified: two_d_tilted_square.cc ------------------------------------------------------------------------ r1228 | mly | 2016-10-10 13:02:42 +0100 (Mon, 10 Oct 2016) | 5 lines demo driver for lgr enforced flow compiles. Just need to make it work now. Changes to be committed: modified: two_d_tilted_square.cc ------------------------------------------------------------------------ r1227 | mly | 2016-10-10 13:02:41 +0100 (Mon, 10 Oct 2016) | 1 line Added new demo driver for lagrange enforced flow preconditioner. ------------------------------------------------------------------------ r1226 | mly | 2016-10-10 13:02:39 +0100 (Mon, 10 Oct 2016) | 6 lines Split lagrange_enforced_flow_preconditioner.h into header and c file. Changes to be committed: modified: src/navier_stokes/Makefile.am renamed: src/navier_stokes/lagrange_enforced_flow_preconditioner.h -> src/navier_stokes/lagrange_enforced_flow_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1225 | mly | 2016-10-10 13:02:38 +0100 (Mon, 10 Oct 2016) | 4 lines Temporarily made some accessors public. Changes to be committed: modified: src/generic/block_preconditioner.h ------------------------------------------------------------------------ r1224 | mly | 2016-10-10 13:02:37 +0100 (Mon, 10 Oct 2016) | 4 lines Moved my changes back - to be cleaned up. Changes to be committed: modified: lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1223 | mly | 2016-10-10 13:02:36 +0100 (Mon, 10 Oct 2016) | 16 lines Changes to be committed: modified: .gitignore Added more auto generated files and executables. modified: src/generic/double_vector.cc Added timing tags, to be taken out. modified: src/generic/double_vector.h Added timing tags, to be taken out. modified: src/generic/matrices.cc Improved the concatenate_without_communication functionality with some pre-processing. modified: src/generic/matrices.h ------------------------------------------------------------------------ r1222 | ahazel | 2016-09-19 15:37:15 +0100 (Mon, 19 Sep 2016) | 3 lines Including Martina's changes to the generic functions that determine elements adjacent to mesh boundaries so that multiple faces of the same element can be located on the same boundary. ------------------------------------------------------------------------ r1221 | mheil | 2016-08-12 17:04:57 +0100 (Fri, 12 Aug 2016) | 1 line Bumped doc/doc.txt revision number by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1220 | mheil | 2016-08-12 17:04:34 +0100 (Fri, 12 Aug 2016) | 22 lines -- Further fix for malloc.h problem. Dummy files are now created from the Makefile above (i.e. from external_src) by descending into the parmetis directory and then coming back out BEFORE following the SUBDIRS. -- Added public static boolean flag UnstructuredTwoDMeshGeometryBase::Suppress_warning_about_regions_and_boundaries which does what it says (namely suppress a warning that may (or may not) be useful informing the user that a region in an unstructured 2D mesh does touch a certain boundary; this is not (usually) a problem and the warning is mainly there for information; Julio obviously found it helpful at the time to track down obscure errors so I decided to keep it there by default. Now we know how to shut it up... -- Changed lots of (supposed-to-be) doxygen-able comments from // to /// in unstructured_two_d_mesh_geometry_base.h ------------------------------------------------------------------------ r1219 | mheil | 2016-08-08 10:59:03 +0100 (Mon, 08 Aug 2016) | 1 line Bumped doc/doc.txt revision number by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1218 | mheil | 2016-08-08 10:58:44 +0100 (Mon, 08 Aug 2016) | 5 lines Few missing "this->"; also quad_from_triangle_mesh needs to include triangle_mesh.template.h not triangle_mesh.h because the latter isn't necessarily built yet. ------------------------------------------------------------------------ r1217 | mheil | 2016-08-08 08:53:55 +0100 (Mon, 08 Aug 2016) | 1 line Bumped doc/doc.txt revision number by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1216 | mheil | 2016-08-06 15:23:30 +0100 (Sat, 06 Aug 2016) | 35 lines Checking in Puneet's quad-ified triangle mesh plus self tests. This required breaking up of triangle_mesh.* and triangle_mesh.template.* files so functionality that describes the geometry of the 2D domain (in terms of polylines, curvilines and the like) can be used by triangle and "quad from triangle" meshes. These functions have moved to unstructured_two_d_mesh_geometry_base.h/.cc. -- The setup_boundary_coordinates(...) function used to live in a templated class and has now been moved into the template-free UnstructuredTwoDMeshGeometryBase base class. The template parameter is therefore provided by making it a templated member functions. Calls like this this->setup_boundary_coordinates(1); now need to become this->template setup_boundary_coordinates(1); -- Added script to run only those driver codes that use triangle meshes (could easily be modified to grep for another pattern!) -- Additional mac osx configure options. -- Introduced compute_norm() fct in SolidFiniteElements (L2 norm of displacements). This required final overload in various pseudo-elastic node update classes. -- configure.ac now checks for presence of malloc.h which doesn't exist on macs but is required by parmetis. Since the functionality is provided elsewhere in osx we simply create an empty dummy file. ------------------------------------------------------------------------ r1215 | mheil | 2016-07-01 07:56:16 +0100 (Fri, 01 Jul 2016) | 4 lines Fixed destruct test script so that it sends email when complete. Also bumped doc.txt. ------------------------------------------------------------------------ r1214 | mheil | 2016-06-29 17:10:45 +0100 (Wed, 29 Jun 2016) | 5 lines Andrew's addition to change_log.txt (and a dummy change to doc.txt to avoid bumping). Unless we spot any major howlers, this could be the long overdue next official release. Beer's on ice... ------------------------------------------------------------------------ r1213 | mheil | 2016-06-25 14:07:00 +0100 (Sat, 25 Jun 2016) | 1 line Bumped doc/doc.txt revision number by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1212 | mheil | 2016-06-25 14:05:08 +0100 (Sat, 25 Jun 2016) | 4 lines Updated change log to include "my" additions since the last release (had overlooked quite a few). Prompted Andrew to do the same. ------------------------------------------------------------------------ r1211 | mheil | 2016-06-25 08:20:35 +0100 (Sat, 25 Jun 2016) | 1 line Bumped doc/doc.txt revision number by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1210 | mbbssjd5 | 2016-06-24 23:46:15 +0100 (Fri, 24 Jun 2016) | 3 lines Yet another double escape error from me... ------------------------------------------------------------------------ r1209 | mheil | 2016-06-24 17:19:00 +0100 (Fri, 24 Jun 2016) | 1 line Bumped doc/doc.txt revision number by running bin/bump_doc_txt.bash ------------------------------------------------------------------------ r1208 | mbbssjd5 | 2016-06-24 16:57:22 +0100 (Fri, 24 Jun 2016) | 5 lines Another speech mark needed double escaping in picture_show script, hadn't been thorough enough the first time... ------------------------------------------------------------------------ r1207 | mheil | 2016-06-24 15:10:32 +0100 (Fri, 24 Jun 2016) | 23 lines Lots of little changes in response to beta testing of now live new website: -- Updated destruct test script to send email attachments with outcome of tests. -- Got rid of (finally all) manual redefinitions of pi in src and demo driver codes. -- Removed all references to xfig.org, since it seems to be a dormant project (sad!). Redirected links to wikipedia page. -- Completed change log; now lists all the (major) new directories in src. -- Redirected email from download page to oomphlib rather than mheil. Also changed subject line to make clear it's from the new release. -- Fixed few more broken urls (generated via source files that were included by doxygen -- subtle!). ------------------------------------------------------------------------ r1206 | mbbssjd5 | 2016-06-22 17:54:13 +0100 (Wed, 22 Jun 2016) | 5 lines Modified turn_into_rotation_instructions.sh - Turned ">". -- fixed a few fpdiff tolerances but left others for double checking. REMAINING PROBLEMS ON MACS: -- seg fault in demo_drivers/reaction_diffusion/one_d_act_inhibit/ -- linking problem (when linking against pre-installed oomph-lib libraries from outside autotools framework) -- diagnosing if we have an mpi compiler goes wrong so all mpi codes are diagnosed as not having been built). -- Left a few fpdfiff-based failures because tolerances seem too big. Will check again after re-running this version of the code on a linux box. ------------------------------------------------------------------------ r1175 | mbbssjd5 | 2016-05-11 15:31:02 +0100 (Wed, 11 May 2016) | 10 lines Documentation style changes --Removed colouring and background from code tags --Mended a couple of minor html errors (hanging tags etc) --Applied consistent style to picture show and pointed to external site so that php script runs ------------------------------------------------------------------------ r1174 | mheil | 2016-05-11 10:03:56 +0100 (Wed, 11 May 2016) | 8 lines -- Updated links to tetgen homepage. -- Made references to fe tutorial more consistent. -- Re-organised the documention drop down menu slightly and made capitalisation consistent. ------------------------------------------------------------------------ r1173 | mbbxgcj2 | 2016-05-09 22:03:08 +0100 (Mon, 09 May 2016) | 1 line Some typo fixes in the docs ------------------------------------------------------------------------ r1172 | mheil | 2016-05-07 14:27:05 +0100 (Sat, 07 May 2016) | 19 lines -- Updated download form/php script; it's now the "real thing". -- Changed drop down menus slightly to make it more explicit what tar files/subversion gets you. -- Updated links to third party tar files. Will need to check this again when thing is finally installed. Currently works if oomph-lib home directory is installed (via symbolic link) under Oomphlib/public_html. TODO: Check/update any references to: oomph-lib_external_distfiles tar_file_director when the thing is finally installed properly. ------------------------------------------------------------------------ r1171 | mheil | 2016-05-05 15:12:36 +0100 (Thu, 05 May 2016) | 16 lines Moved FiniteElement::raw_nodal_position(const unsigned &n, const unsigned &i) const from elements.h to elements.cc to avoid inlining which can cause a very very bizarre seg fault when compiled with gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 and -O3. Offensive "illegal read" is in an optimised-out section of code and data that is allegedly illegal is readily readable (by other means) just before this function is called so I can't really see how we could possibly be responsible for this, so it may (dare I say it?) just be a compiler bug... ------------------------------------------------------------------------ r1170 | mheil | 2016-05-05 08:03:38 +0100 (Thu, 05 May 2016) | 3 lines Added configure options for clang with full optimisation. ------------------------------------------------------------------------ r1169 | mheil | 2016-05-03 13:30:29 +0100 (Tue, 03 May 2016) | 3 lines Changed include guard in projection.h. ------------------------------------------------------------------------ r1168 | mheil | 2016-05-02 09:42:45 +0100 (Mon, 02 May 2016) | 7 lines Minor tweaks; removed warnings that only show up on my laptop; acknowledged Chris Johnson's contributions; added minimum apt-gets needed relative to "default" ubuntu installation; removed statement that trilinos takes very long to compile; updated reference to new tar file format (no dash but dots throughout). ------------------------------------------------------------------------ r1167 | mbbxgcj2 | 2016-04-28 22:07:51 +0100 (Thu, 28 Apr 2016) | 3 lines Moved a method call outside a typeid to avoid a repeated clang warning. ------------------------------------------------------------------------ r1166 | mbbssjd5 | 2016-04-26 09:14:28 +0100 (Tue, 26 Apr 2016) | 6 lines (forgot to include in previous commit) -- Added link to external font files, solving known font problem in Chromium and its derivatives. ------------------------------------------------------------------------ r1165 | mbbssjd5 | 2016-04-26 09:03:13 +0100 (Tue, 26 Apr 2016) | 6 lines -- Reverted to original branding (logo, favicon etc) -- Removed divide by 0 error in pml_fourier code, PML coefficents were being needlessly (and dangerously) calculated ------------------------------------------------------------------------ r1164 | ahazel | 2016-04-22 16:33:35 +0100 (Fri, 22 Apr 2016) | 4 lines Modified the oomph-convert script so that it explicitly calls python2 (this may break on some installations, let me know if it does) Updated the subversion documentation to reflect the new public repository location ------------------------------------------------------------------------ r1163 | ahazel | 2016-04-20 16:36:18 +0100 (Wed, 20 Apr 2016) | 10 lines Fixed remaining clang warnings. Mostly uninitialised variables and hidden overloaded functions. The most nasty was an issue to do with namespace encapsulation and friends. Essentially, if a friend class is implicitly defined within a namespace then the class definition must also be defined within the same namespace ... and not the global scope. g++ incorrectly allows the definition to be at the global scope. ------------------------------------------------------------------------ r1162 | mheil | 2016-04-18 13:27:54 +0100 (Mon, 18 Apr 2016) | 35 lines First round of clang-warning-swatting (with clang 3.5 on ubutu_box) NOTE: 3.5 may (is likely to be) older than the version that's actually used on macs at the moment but the correlation between apple's wraps and the clang revision numbers is unclear (deliberately it seems). -- Added config/configure_options/clang3.5. -- Updated prettyprint*.h to the latest versions though that still doesn't fix the somewhat obscure warning generated by clang. Have therefore removed them from generic, but kept the files alive (redistributed via EXTRA_DIST so David's ODE demo codes can include them directly). -- Commented out clang pragmas. I suppose they were introduced to suppress warnings but with clang3.5 they generate new ones! Index: src/generic/mesh.h =================================================================== #ifdef __clang__ | /* #ifdef __clang__ */ #pragma clang diagnostic push | /* #pragma clang diagnostic push */ #pragma clang diagnostic ignored "-Wpotentially-evaluated-expression" | /* #pragma clang diagnostic ignored "-Wpotentially-evaluated-expression" */ #endif | /* #endif */ #ifdef __clang__ | /* #ifdef __clang__ */ #pragma clang diagnostic pop | /* #pragma clang diagnostic pop */ #endif | /* #endif */ Index: src/solid/solid_preconditioners.cc =================================================================== #pragma clang diagnostic push | // #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpotentially-evaluated-expression" | // #pragma clang diagnostic ignored "-Wpotentially-evaluated-expression" #pragma clang diagnostic pop | //#pragma clang diagnostic pop ------------------------------------------------------------------------ r1161 | mbbssjd5 | 2016-04-14 18:23:35 +0100 (Thu, 14 Apr 2016) | 16 lines Mostly small website tweaks -- Changed from minified css and js to non-minified for better revision control. remember that you shouldn't need to directly edit these files anyway, look at doc/js/README for more info -- Fixed a few style problems -- Added features tab on home page -- Added warning when using search functionality on a local copy -- Added hacky script to the_distribution which parses the svn revision number for web ------------------------------------------------------------------------ r1160 | julio | 2016-04-11 03:32:19 +0100 (Mon, 11 Apr 2016) | 6 lines -- Modified virtual method reset_boundary_element_info() in Mesh class to match the number of parameters in derived TriangleMesh class. The method was not used in other parts of the library. ------------------------------------------------------------------------ r1159 | mheil | 2016-03-26 11:56:04 +0000 (Sat, 26 Mar 2016) | 4 lines A few more tweaks to the webpage; removed ToDo and get_involved. The text of the latter has been included into Contact. ------------------------------------------------------------------------ r1158 | mheil | 2016-03-25 14:41:07 +0000 (Fri, 25 Mar 2016) | 8 lines -- Added separate people page and separated this from the acknowledgements -- various other webpage hacks; some things stil need to be tidied by Jonathan/myself but we're getting there. ------------------------------------------------------------------------ r1157 | mheil | 2016-03-24 15:48:11 +0000 (Thu, 24 Mar 2016) | 3 lines Another fpdiff adjustment ------------------------------------------------------------------------ r1156 | mheil | 2016-03-24 15:44:43 +0000 (Thu, 24 Mar 2016) | 3 lines Another fpdfiff adjustment from puneet's mac ------------------------------------------------------------------------ r1155 | mheil | 2016-03-24 11:52:23 +0000 (Thu, 24 Mar 2016) | 3 lines ...and another one. ------------------------------------------------------------------------ r1154 | mheil | 2016-03-24 11:48:58 +0000 (Thu, 24 Mar 2016) | 3 lines another fpdfiff adjustment ------------------------------------------------------------------------ r1153 | mheil | 2016-03-24 11:44:25 +0000 (Thu, 24 Mar 2016) | 3 lines ...another fpdiff adjustment from Puneet ------------------------------------------------------------------------ r1152 | mheil | 2016-03-24 11:40:41 +0000 (Thu, 24 Mar 2016) | 3 lines Another adjusted validation script with adjusted fpdiff tolerances ------------------------------------------------------------------------ r1151 | mheil | 2016-03-24 11:24:08 +0000 (Thu, 24 Mar 2016) | 3 lines Punnet's first check in from Mac. Changed fpdiff tolerance in melting. ------------------------------------------------------------------------ r1150 | mbbssjd5 | 2016-03-22 17:11:52 +0000 (Tue, 22 Mar 2016) | 8 lines -- Removed reference to generalised_helmholtz in data structure Doxyfile -- Added reference to pml_helmholtz and pml_fourier_decomposed_helmholtz in data structure Doxyfile (they were previous undocumented) -- Fixed several Doxygen markup warnings in pml files ------------------------------------------------------------------------ r1149 | mheil | 2016-03-21 15:43:17 +0000 (Mon, 21 Mar 2016) | 6 lines Yet more Makefile.ams fixed (re-fixed actually). AM_CPPFLAGS needs += rather than = (because it's already defined in the included template. Also: Nico's Makefile.ams in src still referred to a private directory which will in general not be there. Removed/commented out. ------------------------------------------------------------------------ r1148 | mbbssjd5 | 2016-03-21 10:13:12 +0000 (Mon, 21 Mar 2016) | 12 lines Very small visual and wording tweaks -- changed font-weight of headings to 300 (200 doesn't work on mobile) -- spruced up alphabetical class index (buttons and headings) -- Removed reference of version 0.9 in doc.txt (now version 1.0) -- Introduced panel styling to a warning in the_distribution.txt ------------------------------------------------------------------------ r1147 | mheil | 2016-03-19 14:10:49 +0000 (Sat, 19 Mar 2016) | 4 lines More Makefile.am tidy up (arpack and INCLUDES). Also fixed an odd equation referencing problem in doc/pml_helmholtz/scattering/scattering.txt. ------------------------------------------------------------------------ r1146 | mheil | 2016-03-19 11:47:53 +0000 (Sat, 19 Mar 2016) | 18 lines -- Created refined refineable (Q) PML Helmholtz elements, to be used by Puneet (driver code in my private user driver directory). -- Provided link to (undocumented) clamped shell (with QHermite elements) from example code list. -- Fixed INCLUDES -> AM_CPPFLAGS problems in various recently committed Makefile.ams -- Added "rectangle with hole" mesh and domain code so src/meshes. Not a particularly nice mesh but... -- Fixed problem with bypassing arpack based driver codes. (check_PROGRAMS needs to start in first column; can't be indented inside if block in Makefile.am). ------------------------------------------------------------------------ r1145 | mbbssjd5 | 2016-03-18 18:26:54 +0000 (Fri, 18 Mar 2016) | 12 lines -- Spruced up example_code_list, making it more responsive, more consistently styled and made some corrections to wording. -- Removed several more references to generalised, variable wavespeed and alpha in pml documentation -- Changed acknowledgements to look like "panels" -- Changed version number in the_distribution.txt ------------------------------------------------------------------------ r1144 | mheil | 2016-03-18 13:35:47 +0000 (Fri, 18 Mar 2016) | 28 lines DUMMY CHECK IN TO COMMIT JONATHAN'S COMMIT MESSAGE FROM THE PREVIOUS CHECK-IN (SOMETHING WENT WRONG): (Note mostly changes which should have been made in revision 1139, many issues highlighted by mheil) -- Deleted commented out, redundant code in src/pml_helmholtz -- Improved comments in src/pml_helmholtz in references to complex shift parameter alpha. -- Removed references to alpha in demo_drivers/pml_helmholtz, this demo driver doesn't demonstrate or test this capability. -- Small doc changes - Improved look of tables in order_of_action_functions and example_code_list - Sorted broken links in acknowledgements (wrong relative form) - Removed reference to css/Doxygen.css (doesn't exist) - Version controlled 3 missing favicons (favicon16x16.png 32x32 and 96x96) - Increased resolution of logo for hiDPI screens - prettified lastChangedRevision svn code using shamefully hacky javascript - Decreased the size of all headers (knocked them all down one, ie h1 now size of h2 etc) - Rebuilt bootstrap.min.js to include missing package which extended and collapsed menu for mobile screens - Removed reference to "disappeared documentation", as it has now been made (thanks ahazel) ------------------------------------------------------------------------ r1143 | mbbssjd5 | 2016-03-18 09:35:20 +0000 (Fri, 18 Mar 2016) | 1 line ------------------------------------------------------------------------ r1142 | mheil | 2016-03-17 11:18:49 +0000 (Thu, 17 Mar 2016) | 3 lines and another Makefile.in hits the bin. ------------------------------------------------------------------------ r1141 | mheil | 2016-03-17 11:18:26 +0000 (Thu, 17 Mar 2016) | 17 lines -- Deleted another accidentally checked in Makefile.in. -- Changed Makefile.am in demo_drivers/eigenproblem demo drivers so that executables never get declared as build targets if we don't have arpack. SUBDIRS variable in the directory above already bypasses these directories, but we visit them (by other means) when checking for unbuilt executables -- these are usually interpreted as compilation failures. -- Also had to modify bin/find_compilation_failures_for_demo_drivers.bash and top level Makefile.am to deal (in a shockingly hacky way) with the fact that when the script is called during the normal self-test process, its call to make happens within an already ongoing make operation; this creates lots of extra output that I now filter out... Best not to look how... ------------------------------------------------------------------------ r1140 | mheil | 2016-03-16 08:08:04 +0000 (Wed, 16 Mar 2016) | 11 lines -- modified "failed compilation test" by excluding directories with "/mpi/" in path from tests if no mpi compiler has been specified. The latter is detected via "make do-we-have-mpi" in the top level directory. This returns the whitespace-less mpi compiler. If it's an empty string, we don't have mpi... -- Also deleted a Makefile.in that Jonathan must accidentally have checked in. ------------------------------------------------------------------------ r1139 | mheil | 2016-03-15 14:39:17 +0000 (Tue, 15 Mar 2016) | 97 lines Jonathan's first check in (so blame him if it goes wrong!). -- INTERFACE CHANGE Renamed GeneralisedHelmholtz... to PmlHelmholtz... [still to be uppercased to PMLHelmholtz WILL BE CHANGED SOON] -- Changed anything called generalised_helmholtz to pml_helmholtz, and all references to it -- INTERFACE CHANGE Renamed GeneralisedFourierDecomposedHelmholtz... to PmlFourierDecomposedHelmholtz... [still to be uppercased to PMLFourierDecomposedHelmholtz WILL BE CHANGED SOON] -- Introduced a class (and pointers to it) to specify the pml mapping fct in PML Helmholtz elements. -- INTERFACE CHANGE Removed the ability to have a variable wavespeed "c" and complex wavenumber "k" from PmlHelmholtz and PmlFourierDecomposedHelmholtz -- Added complex shift to PmlHelmholtzEquations, "alpha" (new), replacing k^2 with k^2(1+i*alpha) for use in Puneet's shifted Laplacian preconditioner. - Access function is alpha_pt(), private member Alpha_pt. - points by default to static Default_Physical_Constant_Value = 0.0; - NOT YET VALIDATED FOR alpha \neq 0 -- Changed adaptive pml_validata due to bug in GeneralisedFourierDecomposedHelmholtz, where the old "alpha" was actually taking the value of the old "c" inside the PML. ======== Changes to doc ========== -- Changed files names and class references from generalised to pml like above -- Removed references to Alpha and C in pml helmholtz and pml fourier decomposed demo drivers -- Added oomph-lib_footer.html to all Doxyfiles (as the HTML_FOOTER) -- Changed COLS_IN_ALPHA_INDEX to 1 (just in the_data_structure as it's the only one that matters) -- Added oomph-lib_footer.html.template (it is currently very plain, but I plan to expand it later) - Moved all non vital script stuff into here, so that pages does not have to wait for all resources before rendering - Added script which adds bootstrap classes to certain Doxygen class, for example container class is added to contents so that it renders as in bootstrap style -- build_oomph_html_header.sh now builds footer template too. Should possibly be renamed (if anybody can be asked) -- doc makefile template now clears the generated footers along with the headers "rm -f oomph-lib_footer.html" -- Added css folder, with boostrap.min.css and config.json Note: boostrap.min.css was built from getbootstrap.com, and therefore only contains the packages required. Use config.json to rebuild (using LESS locally or getboostrap.com) -- Added js folder, with: - jquery-1.12.0.min.js minified jquery, necessary for some dynamic Doxygen stuff and bootstrap (note it is centrally stored now, previously Doxygen just spawned a new jquery.js in every doc folder) - jquery.powertip.min.js provides powertips in the code listings, previously this was tacked on at the end of the Doxygen provided jquery.js - dynsections.js again used by Doxygen to provide collapsable things, again now centrally stored. (The previous three are now centrally stored in js to allow for easier future modification and stop website reloading resources on every new page) - bootstrap.min.js, javascript required for bootstrap. Generated from getbootstrap.com, see previous comment for information to regenerate -- Removed navbar_toggle.js, functionality is now provided by doc/js/bootstrap -- Moved oomph_header.css to doc/css -- Modified oomph-lib_header.html.template, using bootstrap components. See file to see all changes, too numerous to list here. -- Added every kind of favicon, generically generated thanks to http://realfavicongenerator.net/ (favicons now stored in doc/figures, linked from oomph-lib_header.html.template) -- Changed logo, removing old logo files (doc/figures/oomph.png etc) -- Changes to homepage: - Added Carousel (bootstrap component) at top, displaying the 3 slides in doc/figures - Simplified content into tabs, moved contributors/acknowledgements to seperate page -- Added doc/acknowledgements and template doc, moved in content from homepage. ------------------------------------------------------------------------ r1138 | mheil | 2016-03-14 15:12:28 +0000 (Mon, 14 Mar 2016) | 14 lines -- Added extra machinery to find/report failed self-tests that weren't even run because the driver code didn't compile. This is done by modification to the makefile template for all demo driver codes which calls bin/check_if_executable_exists.bash in response to "make check-if-executables-exist". This is all executed automatically by self_test/analyse_self_tests/analyse.sh. -- Incorporated Ray's changes to block preconditioning framework. -- Removed some superfluous Makefile and Makefile.ins that were checked in accidentally bu Julio. ------------------------------------------------------------------------ r1137 | julio | 2016-03-11 23:20:17 +0000 (Fri, 11 Mar 2016) | 12 lines -- Found and removed memory leak arising when having multiple meshes and reading a custom mesh distribution from file. The change was performed in the src/generic/problem.cc file in the distribute() methods(). -- Changes to the triangle_mesh.cc file so that library versions compiled with PARANOID enabled or disabled end up with the same results. ------------------------------------------------------------------------ r1136 | julio | 2016-02-28 15:41:10 +0000 (Sun, 28 Feb 2016) | 12 lines --- Fixed compilation errors for demo drivers when MPI is not enabled. --- Elimination of warnings reported by unused variables associated to unstructured meshes when MPI is not enabled --- Removed unwanted files in the repository from validata folder demo_drivers/mpi/distribution/two_d_unstructured_adaptive_poisson/validata ------------------------------------------------------------------------ r1135 | mly | 2016-02-27 12:47:53 +0000 (Sat, 27 Feb 2016) | 4 lines Got rid of RAYTIME flags. modified: src/generic/block_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1134 | julio | 2016-02-25 01:19:51 +0000 (Thu, 25 Feb 2016) | 8 lines --- Included #ifdefs OOMPH_HAS_MPI around MPI only code to avoid compilation problems when MPI in not available. Modified files triangle_mesh.template.cc triangle_mesh.template.h ------------------------------------------------------------------------ r1133 | julio | 2016-02-23 05:48:31 +0000 (Tue, 23 Feb 2016) | 10 lines --- Added missing file external_src/parmetis.h. Removed from previous commit since an error as the following was presented svn: Entry '/external_src/parmetis.h' has unexpectedly changed special status Solved using the recommendation from the following link: http://truthbehind-ravn.blogspot.mx/2008/05/messing-with-svn.html ------------------------------------------------------------------------ r1132 | julio | 2016-02-23 05:43:26 +0000 (Tue, 23 Feb 2016) | 43 lines --- MAJOR changes to unstructured mesh adaptation to implement parallel unstructured mesh adaptation. The adapt() method automatically performs the adaptation strategies for distributed unstructured meshes over multiple processors. The boundary coordinates for nodes on the boundaries are computed considering whether the boundaries were split or not over multiple processors. These changes are implemented in the files triangle_mesh.template.cc and triangle_mesh.template.h. --- Implementation of load balancing for distributed unstructured meshes. The load balancing methods allow to perform load balancing for problems using multiple meshes whatever their type (structured or unstructured). This feature required to perform changes in the problem.cc, problem.h, mesh.cc and mesh.h files. --- The projection problem for unstructured mesh adaptation is now solved by default by an iterative solver (Conjugate Gradient with a diagonal preconditioner). The iterative solver is chosen by considering whether Trilinos is installed or not, and whether the problem is solved using multiple processors or not. Therefoe, the iterative solver is that implemented by Trilinos or that from oomph-lib's own implementation. We can choose to use a direct solver for the projection problem by calling the method disable_use_iterative_solver_for_projection() from the RefineableTriangleMesh class. The default direct solver is SUPERLU. --- Demo drivers to show the parallel unstructured mesh adaptation features are included in the folder: demo_drivers/mpi/distribution/two_d_unstructured_adaptive_poisson/ --- Multiple outer boundaries to define the geometry of the domain are now supported when working with unstructured meshes. This feature is required to work with distributed unstructured meshes, demo drivers can be found in the same folder as above. --- Additionaly changes in the computation of neighbouring bins for locate_zeta functions during multi_domain setup were performed. These changes reduce the time to compute neighbouring bins. The current implementation only visit those bins at the given distance. --- Changes in the implementation of connections among (internal) boundaries to be cleaner than previous implementation. ------------------------------------------------------------------------ r1131 | mheil | 2016-02-20 09:25:16 +0000 (Sat, 20 Feb 2016) | 4 lines ...and some more; added instructions for how to suppress the complaints about the (deliberately introduced) warnings/errors. ------------------------------------------------------------------------ r1130 | mheil | 2016-02-20 09:12:50 +0000 (Sat, 20 Feb 2016) | 3 lines yet another tweak to the instructions issued by the destruct test script. ------------------------------------------------------------------------ r1129 | ahazel | 2016-02-18 14:05:43 +0000 (Thu, 18 Feb 2016) | 3 lines Modified the code to (hopefully) prevent mac errors about hidden virtual functions. ------------------------------------------------------------------------ r1128 | mheil | 2016-02-18 07:54:25 +0000 (Thu, 18 Feb 2016) | 8 lines Fixed (most of) the clang/mac warnings reported by Puneet. A few more will be commited by Andrew shortly. Also updated destruct test script so it announces that tests will be run in the newly created destruct_test directory; instructions for how to assess the outcome of these tests now include this directory in the path to the relevant post-processing script. ------------------------------------------------------------------------ r1127 | mheil | 2016-02-16 10:10:19 +0000 (Tue, 16 Feb 2016) | 5 lines Generic build instructions in INSTALL had the order of "make install" and "make check" the wrong way around. Fixed. Thanks to David Robinson for spotting this! ------------------------------------------------------------------------ r1126 | mheil | 2016-02-15 17:08:04 +0000 (Mon, 15 Feb 2016) | 6 lines Removed explicit reference to src/linear_elasticity/elasticity_tensor.cc in the two homogenisation demo drivers in demo_drivers/homogenisation/two_dim and added the relevant library to the LDADD variables instead. This should now work even if library is installed in non-oomph-lib-default location. ------------------------------------------------------------------------ r1125 | mheil | 2016-02-06 13:21:44 +0000 (Sat, 06 Feb 2016) | 15 lines -- Corrected instructions for how to post-process/analyse the destruct tests in bin/destruct_test_distribution.bash (had specific version number in it). -- Added self_test/deliberately_broken_code_for_self_test_test which contains one code (always built) that creates a warning (under gcc, for an unusued variable) and one that doesn't compile (is built (or rather not) from validate.sh. These are merely there to test the destruct test. Always a bit suspicious if it returns nothing; these two errors/warnings should definitely be found (and then ignored). ------------------------------------------------------------------------ r1124 | mheil | 2016-02-04 07:54:20 +0000 (Thu, 04 Feb 2016) | 10 lines Deleted two stranded/abandoned doc directories: doc/axisym_navier_stokes/single_layer_free_surface_axisym doc/mpi/distributed_block_preconditioners (one was always empty; the other one has become obsolete/replaced). They've been removed from the parent Makefile.am's subdir list some time ago. ------------------------------------------------------------------------ r1123 | mheil | 2016-02-03 14:30:52 +0000 (Wed, 03 Feb 2016) | 2 lines Fixed pdflatex problem (and typo) in solid_theory.txt ------------------------------------------------------------------------ r1122 | mheil | 2016-02-03 08:59:22 +0000 (Wed, 03 Feb 2016) | 3 lines Updated find missing doxygen hooks script. ------------------------------------------------------------------------ r1121 | ahazel | 2016-02-01 09:51:17 +0000 (Mon, 01 Feb 2016) | 4 lines Fixed the script bin/make_index.py to be compatible with python 3 Fixed the documentation so that there are no latex errors ... I hope ------------------------------------------------------------------------ r1120 | mheil | 2016-02-01 08:50:30 +0000 (Mon, 01 Feb 2016) | 4 lines Fixed more broken links iin Wassamon's stuff (also found/fixed the problem with the links in axisym_navier_stokes/two_layer_interface_axisym). ------------------------------------------------------------------------ r1119 | mheil | 2016-01-30 12:30:37 +0000 (Sat, 30 Jan 2016) | 11 lines -- Fixed many broken includes from Nico's checked. The reason why this wasn't spotted earlier is that they looked for src/generic in a wrong (but commonly existing...) location. Also included new header file in generic into list (otherwise it doesn't get installed!). -- Made bin/find_missing_doxygen_hooks.sh output the directory it's running from (as I suspect it's called from the wrong place in the build script on vummath (deliberately broken includes aren't flagged up when run from the top level). ------------------------------------------------------------------------ r1118 | mheil | 2016-01-29 07:49:35 +0000 (Fri, 29 Jan 2016) | 3 lines Tweaked tolerances for Nico's new demo drivers to 1%. ------------------------------------------------------------------------ r1117 | bergemann | 2016-01-28 15:06:31 +0000 (Thu, 28 Jan 2016) | 4 lines --Added generalised_newtonian_constitutive_models.h to generic, which contains constitutive models for generalised Newtonian fluids ------------------------------------------------------------------------ r1116 | bergemann | 2016-01-28 13:33:13 +0000 (Thu, 28 Jan 2016) | 7 lines -- Added Nico's cartesian and axisymmetric generalised newtonian Navier-Stokes elements and associated test cases (shell draining). -- In the course of this we added the namespace SecondInvariantHelper to oomph utilities. ------------------------------------------------------------------------ r1115 | mheil | 2016-01-25 17:20:06 +0000 (Mon, 25 Jan 2016) | 5 lines fixed misplaced #ifdefs in triangle_mesh.h (which caused code to die if/when oomph-lib doesn't have triangle (the library)). Thanks to Chris Johnson for spotting/fixing this. ------------------------------------------------------------------------ r1114 | ahazel | 2016-01-25 14:12:22 +0000 (Mon, 25 Jan 2016) | 8 lines Tidied up broken links and missing figures in doc directories. Created missing gif files (using convert) from eps in shell/linear_shell and c1_element directories. Modified the broken links (wrong paths) in the associated .txt files. *Should* now all be working. ------------------------------------------------------------------------ r1113 | mheil | 2016-01-25 08:37:53 +0000 (Mon, 25 Jan 2016) | 4 lines Updated destruct test script to include instructions for how to analyse output. ------------------------------------------------------------------------ r1112 | mheil | 2016-01-23 08:45:25 +0000 (Sat, 23 Jan 2016) | 3 lines Fixed a few more broken links... ------------------------------------------------------------------------ r1111 | mheil | 2016-01-22 08:57:38 +0000 (Fri, 22 Jan 2016) | 19 lines -- Added a deliberately broken url to doc/deliberately_broken_doc_for_checking/deliberately_broken_doc_for_checking.txt to test the broken link checker. -- Fixed all remaining broken links (hopefully) apart from "Andrew's" (in the Bell element etc. tutorials) -- Changed reference to doc/mpi/distributed_block_preconditioner to doc/mpi/block_preconditioner in header. -- Added suppress_latex_in_this_directory=1 to doc/order_of_action_functions/Makefile.am and removed latexonly bits from actual file. ------------------------------------------------------------------------ r1110 | mheil | 2016-01-19 07:46:59 +0000 (Tue, 19 Jan 2016) | 37 lines -- Removed directory doc/axisym_navier_stokes/single_layer_free_surface_axisym since the documentation's been empty ever since it's been created. -- Introduced additional check into doc build: config/makefile_templates/doc now checks if the variable suppress_latex_in_this_directory has been set to 1 and, if so, suppresses the generation of the pdf file (and also suppresses any reference to it at the bottom of the html-based documentation) only in that directory. See doc/creating_doc/creating_doc.txt for details and doc/example_code_list/Makefile.am doc/order_of_action_functions/Makefile.am for an example. This is useful to suppress the generation of pdf files with particularly convoluted tables etc. that either don't render well in pdf or keep tripping up doxygen/pdflatex and cause endless maintenance problems. -- Suppressed the redistribution of the vector in the mumps solver. Always seemed a bit odd (had to cast away constness!). Retained the warning to alert the user that there's something wrong (option to suppress the warning already exists and we say how to do it). ------------------------------------------------------------------------ r1109 | mheil | 2016-01-16 11:07:41 +0000 (Sat, 16 Jan 2016) | 8 lines Suppressed table listing the many tutorials in doc/example_code_list in latex build because pdflatex keeps hanging on vummath. ------------------------------------------------------------------------ r1108 | mheil | 2016-01-15 15:27:44 +0000 (Fri, 15 Jan 2016) | 43 lines -- Changed bin/customise_latex.bash There's a problem with the refman.tex file generated by doxygen. It includes the latex code \hypersetup{pageanchor=false, bookmarks=true, bookmarksnumbered=true, pdfencoding=unicode } and the final one causes problem with the versions of texlive on vummath and leylandii (and, according to Chris Paul, almost certainly many other machines. Have therefore modified the script to strip out that line (and the comma in the preceding line). -- Related to the above problem with texlive: Included additional latex style files into a new directory doc/extra_latex_style_files Symbolic links to this directory are made in every doc directory via modifications in config/makefile_templates/doc The potentially missing files are then included via the LATEX_EXTRA_FILES variable in all Doxyfiles. Seems to cause no problems on machines where a more up to date version texlive already exists. -- Changed bin/run_svnversion_if_it_exists.bash to replace any ":" by "_" in revision number. ------------------------------------------------------------------------ r1107 | mheil | 2016-01-14 16:53:59 +0000 (Thu, 14 Jan 2016) | 6 lines -- Added further excludes for false warnings. -- Checked/fixed lots of broken urls. ------------------------------------------------------------------------ r1106 | mheil | 2016-01-12 07:53:23 +0000 (Tue, 12 Jan 2016) | 5 lines Further tweaks to get rid of warnings (and another ifdef related error). Also adjusting destruct test script in an attempt to get all the output (incl. warnings) into the log file. ------------------------------------------------------------------------ r1105 | mheil | 2016-01-09 13:45:43 +0000 (Sat, 09 Jan 2016) | 14 lines One run through self-build on vummath. -- Excluded a few more dummy warnings/errors ignored in test script. -- Replaced Tony's insane chains of \:\:\:\:\:\:\:\: by hspace since they seemed to confuse doxygen on vummath. -- Moved a few unused variables into ifdef blocks -- added a space to (void)this-> construction in dg elements. Not actually sure what the problem is... ------------------------------------------------------------------------ r1104 | mheil | 2016-01-09 08:06:50 +0000 (Sat, 09 Jan 2016) | 15 lines Next round of attempt to get rid of all errors and warnings in oomph-lib's own code (not external or third party). -- added script: bin/find_errors_and_warnings_in_build_log.bash which takes as an argument the file containing the on-screen output from a build session and looks for error messages and warnings, ignoring known spurious ones (such as "ErrorEstimator". There are few doxygen related ones I really can't track down and plenty from Andrew/Wassamon's documentation. Also serious latex errors in Andrew's new free-surface documentation. ------------------------------------------------------------------------ r1103 | mheil | 2016-01-08 08:14:32 +0000 (Fri, 08 Jan 2016) | 4 lines Tidied up screwed up validation script for simple linear elasticity preconditioner. ------------------------------------------------------------------------ r1102 | mheil | 2016-01-08 08:05:34 +0000 (Fri, 08 Jan 2016) | 35 lines More tidying of broken documentation. -- Added new directory doc/deliberately_broken_doc_for_checking which contains two of the most common parsing problems that the script bin/find_missing_doxygen_hooks.sh checks for (one of the tests looks for patterns that are generated when doxygen can't find a hook/target for including code and this looks different on different versions of doxygen so it's important to have at least one deliberately broken case so we can see if the test still works... -- IMPORTANT: Latest version(s) of doxygen get confused when using dashes as hooks, so \dontinclude code.cc \skipline --validate say, won't work (in the sense that doxygen can't find the line that contains "--validate". Lots of Patrick's documentation used that pattern. -- doc/time_harmonic_linear_elasticity/elastic_annulus contained some bizarre stuff that Radu appears to have introduced (presumably by accidentally editing the wrong file a long time ago!) ------------------------------------------------------------------------ r1101 | mheil | 2016-01-07 14:09:07 +0000 (Thu, 07 Jan 2016) | 4 lines Updated doc.txt and actually removed distributed_block_preconditioner doc subdirectory. ------------------------------------------------------------------------ r1100 | mheil | 2016-01-07 13:03:06 +0000 (Thu, 07 Jan 2016) | 3 lines changed properties on doc/doc.txt ------------------------------------------------------------------------ r1099 | mheil | 2016-01-07 09:05:59 +0000 (Thu, 07 Jan 2016) | 71 lines Post-Christmas getting-ready-for-release check-in: -- fixed problem with make distclean. Was called twice (obviously failing the second time around because there aren't any Makefiles left). -- Updated destructed test script. Now much more robust and comprehensive. destruct_test directory needs about 220G (without building the documentation). -- Added additional pattern search to find_missing_doxygen_hooks.sh as new version of doxygen create different "emtpy box" when a hook cannot be located. TODO: Add test for this by creating deliberately broken documentation. -- Updated run_svnversion_if_it_exists.bash to catch case when svn client is out of date. -- Added brief doc of Anton's "how to create paraview files from with oomph-lib" to paraview tutorial. Works with Rayleigh instab code. -- fixed odd self-test probolms wiith demo_drivers/darcy/unstructured_two_d_circle/ (Validata included some intermediate output that wasn't relevant). -- Put the two_d_linear_elasticity_with_simple_block_diagonal_preconditioner code back in (had been removed previously). Is now used for doc (and self-tested). -- Major tidy up of multi-poisson preconditioning driver code. -- INTERFACE CHANGE: Changed push_back_mesh(...) to add_mesh(...) in general purpose block preconditioners (and in simple demo version). -- updated all Doxyfiles. -- decided that we won't offer tar files with partial content (e.g. no doc) and removed statement from homepage. -- Made statement re licencing consistent on homepage. -- Updated names of contributors. -- Finished tutorial for block preconditioning framework (at last!) and updated/made consistent various other preconditioning related tutorials, incl. the one describing the distributed linear algebra stuff which now pulls in code from test code. -- Fixed many broken bits of documentation. -- Removed doc/mpi/distributed_block_preconditioners/. Its replacement is doc/mpi/block_preconditioners/. -- Updated oomph-lib related publications (my own!) but removed theses and talks (since I'm losing the plot). -- Added "S" as command line option to non_interactive_autogen.sh If specified, script runs the self-tests at the end. -- Block preconditioners should have a mesh set but this is not necessary if they only act as subsidiary block preconditioners (because in that case the dof classification is handled by the master -- this is the only thing the mesh is used/needed for). Updated paranoid tests in line with this philosophy. ------------------------------------------------------------------------ r1098 | julio | 2015-12-24 18:54:53 +0000 (Thu, 24 Dec 2015) | 12 lines -- Fixed bug when setting the unrefinement/refinement tolerances for individual polylines/curvilines. Previously these tolerances were overwriten by the tolerances specified for the ClosedCurve containing the polylines/curvilines. - Details: The constructor of the ClosedCurve does not longer copy its default value to its polylines/curvilines. The polyline/curviline is in charge of setting its unrefinement/refinement tolerances when it is created. ------------------------------------------------------------------------ r1097 | mheil | 2015-12-17 11:53:17 +0000 (Thu, 17 Dec 2015) | 6 lines Changed licence text in bin (to include svn revision information) and applied it to all relevant files. Also set the relevant svn property to make sure the relevant information is updated automatically (without appearing as a change) every time we commit. ------------------------------------------------------------------------ r1096 | mheil | 2015-12-17 11:45:28 +0000 (Thu, 17 Dec 2015) | 8 lines Used M4 magic in configure.ac to include svn revision number as last digit in autotools-perceived revision number, so tar files are now called oomph-lib-1.0.1234.tar.gz if made from the svn revision 1234. If a tar file is created on a machine that doesn't have svnversion installed or if the directory isn't under svn control (because the .svn directories haven't been moved across, say) a dummy revision number of 0000 is used. ------------------------------------------------------------------------ r1095 | mheil | 2015-12-15 18:31:01 +0000 (Tue, 15 Dec 2015) | 3 lines Added configure file for web build ------------------------------------------------------------------------ r1094 | julio | 2015-12-10 17:53:12 +0000 (Thu, 10 Dec 2015) | 11 lines - Change in the "locate zeta" strategy when spiraling out and visiting neighbour bins during the setting up of multi-domain interaction. The current strategy only visits the bins at a given level, the previous strategy visited all the bins at levels less and equal to a given level. - The above change reduces the times for projection during unstructured mesh adaptation, specially when having a large number of (small) elements and using a large number of bins for the projection step. ------------------------------------------------------------------------ r1093 | mheil | 2015-11-23 11:31:43 +0000 (Mon, 23 Nov 2015) | 7 lines Tidy up for displacement-based FvK: -- removed eta parameter and various other flags that are no longer used. Still one or two hierhers for Julio. Also need a test case in demo driver directory! ------------------------------------------------------------------------ r1092 | mheil | 2015-11-21 11:53:08 +0000 (Sat, 21 Nov 2015) | 4 lines Updates to biharmonic preconditioner. This is what was used for the siam paper. ------------------------------------------------------------------------ r1091 | mheil | 2015-10-01 10:18:05 +0100 (Thu, 01 Oct 2015) | 28 lines Finally oomph-lib works on macs again! The key is to specify the specification of the configure flag --disable-shared because mac-osx struggles with shared libraries. There's a new configure options file, specifically for macs mac_osx_paranoid_debug_range_checking (currently only for the "go extra slow" build options, but it shows what needs to be done). Also had to provide a dummy replacement for fpu_control.h which triangle uses to get floating point characteristics of the machine. Sadly this file doesn't exist on macs... Also fixed various issues in David Shepherds rewrite of the noninteractive autogen script that didn't work on macs. Finally, fixed a problem with a header path in tetgen_scaffold_mesh.h and the associated Makefile.am. Not sure why this used to work (or why it stopped now). ------------------------------------------------------------------------ r1090 | ahazel | 2015-09-09 18:14:47 +0100 (Wed, 09 Sep 2015) | 6 lines Added new soluble surfactant demo code that also tests the Elastic version of the surfactant transport equations. Validation is via comparison with Campana & Saita (2006), which appears to be favourable. Neede to modify the SurfactantTransportInterfaceElement class to make a few things protected rather than private ------------------------------------------------------------------------ r1089 | ahazel | 2015-09-08 22:18:19 +0100 (Tue, 08 Sep 2015) | 2 lines Fixed small error that prevented compliation on older machines (my laptop) ------------------------------------------------------------------------ r1088 | ahazel | 2015-09-08 14:21:46 +0100 (Tue, 08 Sep 2015) | 19 lines Yet more changes to the FluidInterface formulation A generic SurfactantTransportInterfaceElement class has been added to test the generic functionality and (of course) certain interfaces have had to be changed accordingly. More functions have been merged into the base FluidInterfaceElement class. The surface derivatives are now implemented in separate classes that are introduced into the inheritence hierarchy as a template parameter in the final specialised functions. The 3d_rayleight_instability_surfactant.cc demo has now been rewritten to use these generic elements, but the axisymmetric version still implements in place, as before. The Elastic version of the surfactant elements has not yet been tested. This will feature in the next check-in I hope. ------------------------------------------------------------------------ r1087 | ahazel | 2015-09-05 00:24:33 +0100 (Sat, 05 Sep 2015) | 18 lines Next modification in free-surface capabilities. Introduction of function that computes surface gradients and surface divergence in FluidInterfaceElement. This neatly packages away all the mathematics, so that the equations can be implemented generically. Note that the Jacobian computed by this function includes the factor of r in Axisymmetric cases which has corrected an oversight in the previous implementation (although it only changed the definition of the fake Lagrange multiplier that enforced the kinematic condition in ElasticMeshes so doesn't really matter, but it's nice to get it correct!). The interfaces have changed sufficiently that anybody who actually used this will have to work out what is going on because the code will fail to compile. I should also have mentioned last time that the add_additional_values() function has changed so that the number of values assigned to a particular ID can be resized but only if the storage is at the end of the node's values. ------------------------------------------------------------------------ r1086 | ahazel | 2015-08-24 16:55:53 +0100 (Mon, 24 Aug 2015) | 12 lines Added next set of changes to FluidInterface elements, which introduces doubly-templated classes to handle the final geometric-update information. This means: 1) The code will be easier to maintain 2) Additional equations can be implemented once (rather than twice) in spine and elastic formualtions. Also added "include guards" to stop undefined pragma warnings from gcc in response to Chris's clang patches Finally tweaked a validation tolerance ------------------------------------------------------------------------ r1085 | ahazel | 2015-08-14 09:33:53 +0100 (Fri, 14 Aug 2015) | 6 lines This revision includes Chris Johnson's patch to make the library work with Clang. In addition minor changes to documentation and the script bin/find_failed_directorites.bash to use the correct quotes (I hope) so that it actually works rather than hanging. ------------------------------------------------------------------------ r1084 | ahazel | 2015-08-12 21:28:21 +0100 (Wed, 12 Aug 2015) | 16 lines This revision include the initial version of documentation accompanying the newly developed and validated surface transport equations. The main contributions are a new surface_theory document that describes the theory of free surfaces and surface transport equations in enough detail (I hope) that the implementation is transparent. It also describes implementation details and the design decisions taken in the FluidInterface elements. There is also a description of the rayleigh_instability_surfactant demos based on the paper by Campana et al (2004), showing how the surfactant transport equations can be included into the library. The equations should be rationalised and incorporated into the library rather than just in the driver code, but that's for the future. ------------------------------------------------------------------------ r1083 | ahazel | 2015-08-10 17:04:48 +0100 (Mon, 10 Aug 2015) | 13 lines Added 3D surfactant demo, which solves the Rayleigh--Plateau problem in three dimensions in the presence of an insoluble surfactant. This is a "hard" test because the system is formulated in Cartesians, but remains axisymmetric. In addition, the (old) insoluble_surfactant and soluble_surfactant demos have been updated to include the curvature terms properly in the new formulation. These are two-dimensional (non-axisymmetric) problems, so the complete range of equations for insoluble surfactant are now tested. Documentation will be written for the next submission, including the general theory ... watch this space. ------------------------------------------------------------------------ r1082 | ahazel | 2015-08-03 10:31:36 +0100 (Mon, 03 Aug 2015) | 15 lines The main work in this commit is the inclusion of an axisymmetric insoluble surfactant transport problem that has been validated against the literature (Campana et al, 2004). The code is relatively self-contained and is in demo_drivers/multi_phsyics/rayleigh_instability_surfactant In addition a pressure-driven torus driver has been added in axisym_navier_stokes/unstructured_torus (although it is not tested) Finally, a modification has been made to the bifurcation tracking so that an eigenvector can be provided as an initial guess to the simple fold tracking which allows different symmetry-mode bifurcations to be detected (although it is not the most robust method). ------------------------------------------------------------------------ r1081 | julio | 2015-07-31 17:32:05 +0100 (Fri, 31 Jul 2015) | 61 lines FOEPPL-VON KARMAN DISPLACEMENT FORM New files implementing the Foeppl-von Karman equations in its displacement form in "src/foeppl_von_karman/" - The equations foeppl_von_karman_displacement_elements.cc foeppl_von_karman_displacement_elements.h - The triangular element Tfoeppl_von_karman_displacement_elements.cc Tfoeppl_von_karman_displacement_elements.h There are two different versions based on the nondimensionalisation. 1) The default one where there are no nondimensional parameters 2) The implementation that requires the specification of the eta parameter You can switch between implementations by calling the functions - enable_eta_version() - disable_eta_version() - You can use a linear model (only Biharmonic eq.) by calling the function use_linear_bending_model() The indices of the unknowns are as follow: 0: W (vertical displacement) 1: L (laplacian) 2: Ux (In-plane displacement x) 3: Uy (In-plane displacement y) UNSTRUCTURED MESH ADAPTATION - The minimum of the target areas associated to the elements in each bin is computed before assigning the target area to the elements in the background mesh. In the previous implementation, this value was computed every time an integration point of the elements in the background mesh was visited. This reduces the time spend in the "transferring of target area" stage - Change of a std::map structure to std::Vector to store the transferred target area to reduce the time at the "transferring of target area" stage - New methods to set the number of bins for the x and y direction for the "projection" stage during mesh adaptation. The methods are: - nbin_x_for_projection() - nbin_y_for_projection() both implemented as part of the RefineableTriangleMesh class. - New variable Multi_domain_functions::Setup_multi_domain_for_projection to indicate that the setup of multi-domain interaction is performed for the projection problem. The value of this variable is set to "true" only before performing the projection during mesh adaptation, and is reset to "false" after the projection. It is used in the file multi_domain.cc to decide which method to call during the spiraling for the location of zeta. There is a specialised version for location of zeta for the "projection" stage. ------------------------------------------------------------------------ r1080 | mheil | 2015-07-27 08:57:14 +0100 (Mon, 27 Jul 2015) | 3 lines Updated validata for two poro-elastic test problems (fp differences). ------------------------------------------------------------------------ r1079 | mheil | 2015-07-25 14:49:06 +0100 (Sat, 25 Jul 2015) | 34 lines WARNING: EMERGENCY CHECK IN FOR JULIO WHO URGENTLY NEEDS THIS CAPABILITY. NO COMPLETE SELF TESTS RUN YET! Changed files: M src/generic/mesh_as_geometric_object.cc M src/generic/mesh_as_geometric_object.h M src/meshes/triangle_mesh.template.cc -- Introduced SparseVector class to allow much sparser bin representation of a MeshAsGeomObject. Implemetation has flaws -- I do reveal the underlying implementation (as a map) but the comment provides a warning against using the non-const version. -- Sort_the_bin capability has now been disabled precisely because it needs write-access to the contents of the SparseVector that represents the bin in the MeshAsGeomObject. Should be easy to re-install, using the non-const map access provided by the SparseVector. The sort_the_bin function should actually only take the bin number as an argument and not pass around the entire vector of pairs. -- MeshAsGeomObject::bin_content(i) is gone because direct access is now no longer possible. -- MeshAsGeomObject::bin_content(...) which gives access to all the content of all the bins is still there. It's not used by any-one and would be quite costly... ------------------------------------------------------------------------ r1078 | julio | 2015-07-14 06:13:26 +0100 (Tue, 14 Jul 2015) | 5 lines -- Fixed problem with pow function in "src/meshes/triangle_mesh.template.cc" file that prevented some demo drivers to compile. ------------------------------------------------------------------------ r1077 | mheil | 2015-07-10 16:03:33 +0100 (Fri, 10 Jul 2015) | 97 lines -- Created shell script that finds directories with failed self-tests. These are now documented at the end of each self-test run and another script is created that allows re-running of only the previously failed tests. Very neat, innit? -- Created script bin/meld_changed_files.bash that (subject to minor editing to specify directories) allows meld-based comparisons between old and new versions of the changed files (uses a "clean" checkout as reference, rather than svn diff which isn't half as neat as meld and doesn't allow editing). TRIANGLE MESH REWRITE: ====================== -- Corrected bug in MeshAsGeomObject::get_bin(...) where bin_number should have been (and now is) re-initialised to 0 after passing the initial tests. -- Ensured that MeshAsGeomObject::fill_bin_by_diffusion(...) fills bins one level at a time (rather than allowing filling from just-filled bins). Furthermore, we now loop over all adjacent filled bins and use the one-and-only element/local coordinate pair that is closest. -- Introduced static boolean MeshAsGeomObject::Use_eulerian_coordinates_during_setup which defaults to false. If set to true before a MeshAsGeomObject is constructed, the MeshAsGeomObject will fill the bin based on and record this in its own boolean member data MeshAsGeomObject::Have_used_eulerian_coordinates_during_setup More elegant version would be to pass arguments to the (many!) different versions of the constructor via a struct/class (as done for the triangle meshes) but no time at the moment. The new functionality is currently only needed/used in the triangle mesh adaptation. -- Created additional bin output functions in MeshAsGeomObject. -- Rewrite of triangle mesh adaptation: -- removed Do_area_transfer_by_projection option completely -- new strategy: -- quantise target areas for existing elements (to mimick structured refinement and to minimise diffusion of small elements). -- make MeshAsGeomObject of existing mesh, filling the bin, based on Eulerian coordinates if it's a SolidMesh (that's because the background mesh created in the next step will set the Lagrangian to the Eulerian coordinates when created. Searching corrresponding points in the old and new meshes based on their Lagrangian coordinates therefore won't work. Note that the Lagrangian coordinates are (correctly!) projected across at the very end of the mesh adaptation process). -- create coarse background mesh and sample the bin structure to obtain target areas for elements in new mesh. Choose target area for the element to be the minimum requested at any of the sampling (integration) points. -- limit refinement/coarsening to factor of 3 but record if the target area was limited. -- create new mesh (by refining the existing one, based on the target areas) and keep going until all area targets are realised. -- Lots more self-tests built in. -- Timings of various stages retained: something to keep an eye on! -- Retained commented-out debugging output in case we ever have to go back in there (hope we don't!). -- Updated lots of validata (after painstakingly checking that the new triangle-mesh based solutions still agree against the previous ones (in the eyeball norm). ------------------------------------------------------------------------ r1076 | athompson | 2015-07-07 20:55:03 +0100 (Tue, 07 Jul 2015) | 1 line Fix of misplaced OOMPH_HAS_MPI ifdefs in block_preconditioner.cc. Was preventing builds without MPI. ------------------------------------------------------------------------ r1075 | mheil | 2015-06-20 12:36:25 +0100 (Sat, 20 Jun 2015) | 16 lines -- Fixed a major problem with NewmarkBDF<...> timestepper. It was invented as a timestepper that computes the first derivative using a BDF scheme. However, the BDF weights were also used when updating history values and I've just come across a case where this made the scheme unstable. Rectified this so that updates of genuine Newmark history values (which include the "velocity at the previous timestep") are actually computed correctly from Newmark scheme. While doing this I also removed unnecessary use of NewmarkBDF in the Jeffery orbit code. -- Added fct to Hermite shells that allows output of position, veloc and accel. ------------------------------------------------------------------------ r1074 | mheil | 2015-06-20 08:27:40 +0100 (Sat, 20 Jun 2015) | 4 lines Added missing declaration of preconditioner_solve fct in CoarseTwoIntoOne class. Function body was still there. Odd. ------------------------------------------------------------------------ r1073 | mheil | 2015-06-19 16:07:27 +0100 (Fri, 19 Jun 2015) | 14 lines -- Clarified some of Ray's queries that arose during his recent tidy: -- flux control elements in demo_drivers/womersley/one_d_womersley didn't seem to be used so parked them in a separate file. -- clarified/corrected misleading/wrong comments regarding the dof/block enumeration in various elements. A few more queries (RAYRAY) are stil outstanding and on Ray's todo list. ------------------------------------------------------------------------ r1072 | mly | 2015-06-18 16:36:08 +0100 (Thu, 18 Jun 2015) | 133 lines Moved BlockPreconditioner::set_nmesh and set_mesh to protected. Changes to be committed: modified: demo_drivers/interaction/fsi_channel_seg_and_precond/fsi_chan_precond_driver.cc modified: demo_drivers/linear_solvers/multi_poisson_block_preconditioners.h modified: demo_drivers/linear_solvers/simple_block_preconditioners.h modified: demo_drivers/linear_solvers/two_d_linear_elasticity_with_simple_block_diagonal_preconditioner.cc modified: demo_drivers/linear_solvers/two_d_multi_poisson.cc modified: demo_drivers/mpi/solvers/airy_cantilever.cc modified: demo_drivers/mpi/solvers/fsi_channel_with_leaflet.cc modified: demo_drivers/mpi/solvers/two_d_multi_poisson.cc modified: demo_drivers/ode/my_problem.h modified: src/generic/block_preconditioner.h modified: src/generic/general_purpose_block_preconditioners.cc modified: src/generic/general_purpose_block_preconditioners.h src/generic/block_preconditioner.h Moved the following functions from public to protected: void set_mesh(const unsigned& i, const Mesh* const mesh_pt, const bool &allow_multiple_element_type_in_mesh = false) void set_nmesh(const unsigned& n) The reason being that the writer of the preconditioner should be the one who calls set_mesh(...), since the writer knows the DOF type ordering the preconditioner s/he writes expects. So, the writer of the preconditioner needs to provide functions such as "set_fluid_mesh(...)", "set_solid_mesh(...)", etc..., for the user of the preconditioner to call. Then the writer of the preconditioner knows which position to put the mesh in. For example, if a preconditioner takes two meshes, a fluid mesh (Fluid_mesh_pt) and a solid mesh (Solid_mesh_pt), then at some point, before the call to BlockPreconditioner::block_setup(...), the functions set_nmesh(...) and set_mesh(...) needs to be called. But in which position do we put the two meshes? Only the preconditioner itself (and therefore, the writer of the preconditioner) knows that. So in the function BlockPreconditioner::setup(...), the writer of the preconditioner calls set_nmesh(2); set_mesh(0,Solid_mesh_pt); set_mesh(1,Fluid_mesh_pt); and provides the functions set_fluid_mesh(...) and set_solid_mesh(...) for the user to set the mesh pointers. The user does not have to know which positiont the meshes have to be set. Upside: 1) The user does not have to know the position of the mesh. 2) The user cannot set an erroneous number of meshes. Downside: Each preconditioner has to hold mesh pointers which are also stored in the BlockPreconditioner base class. But mesh pointers don't take up much space, the extra security provided is worth it. ///////////////////////////////////////////////////////////////////// The following are modified to make everything work: src/generic/general_purpose_block_preconditioners.h New variable: Vector > Gp_mesh_pt; to store the meshes and if multiple elements are allowed in the mesh. We have to store this so we can set the meshes later. New function: void push_back_mesh(const Mesh* mesh_pt, const bool &allow_multiple_element_type_in_mesh = false) to push meshes into the container above. New function: void gp_preconditioner_set_all_meshes() Called buy all derived general purpose block preconditioners to call set_nmesh and set_mesh on the container above. New function: unsigned gp_nmesh() returns the number of meshes currently set in the GeneralPurposeBlockPreconditioner base class. src/generic/general_purpose_block_preconditioners.cc The classes derived from GeneralPurposeBlockPreconditioner are calling the function gp_preconditioner_set_all_meshes() in the setup function. ////////////////////////////////// demo_drivers/linear_solvers/simple_block_preconditioners.h New variable: Vector Multi_poisson_mesh_pt; container for the meshes New function: void push_back_mesh(const Mesh* const mesh_pt) To fill in the above container. Modified: void SimpleBlockDiagonalPreconditioner::setup() Calling set_nmesh and set_mesh if this is a master block preconditioner. ////////////////////////////////// demo_drivers/interaction/fsi_channel_seg_and_precond/fsi_chan_precond_driver.cc demo_drivers/mpi/solvers/airy_cantilever.cc demo_drivers/linear_solvers/two_d_linear_elasticity_with_simple_block_diagonal_preconditioner.cc New using the new push_back_mesh(...) function instead of calling set_nmesh(...) and set_mesh(...) explicitly. ////////////////////////////////// demo_drivers/mpi/solvers/fsi_channel_with_leaflet.cc Wraped the calls to set_nmesh(...) and set_mesh(..) functions inside if statements to check if this is a master block preconditioner. ////////////////////////////////// demo_drivers/ode/my_problem.h Added comment about the code never being used and so not fixing the out dated calls to set_nmesh(...) and set_mesh(...), I just commented them out for now. ////////////////////////////////// demo_drivers/linear_solvers/multi_poisson_block_preconditioners.h demo_drivers/linear_solvers/two_d_multi_poisson.cc demo_drivers/mpi/solvers/two_d_multi_poisson.cc Have a new variable to store mesh pointers, setup functions now call set_nmesh and set_mesh Driver codes are modified to reflect the changes. ------------------------------------------------------------------------ r1071 | mly | 2015-06-18 16:36:07 +0100 (Thu, 18 Jun 2015) | 5 lines Added paranoia test in BlockPreconditioner::turn_into_subsidiary_block_preconditioner(...) to check if meshes are set and tells the user that subsidiary block preconditioners do not have meshes set. modified: src/generic/block_preconditioner.cc ------------------------------------------------------------------------ r1070 | mly | 2015-06-18 16:36:07 +0100 (Thu, 18 Jun 2015) | 2 lines Removed comments and added comments in: modified: self_test/mpi/crdoublematrix_copy_constructor/crdoublematrix_copy_constructor.cc ------------------------------------------------------------------------ r1069 | mly | 2015-06-18 16:36:07 +0100 (Thu, 18 Jun 2015) | 17 lines Added self test for CRDoubleMatrix copy constructor. .gitignore: Added the following files: self_test/mpi/crdoublematrix_copy_constructor/crdoublematrix_copy_constructor demo_drivers/reaction_diffusion/one_d_act_inhibit/one_d_act_inhibit demo_drivers/poisson/eighth_sphere_poisson_hp_adapt/eighth_sphere_poisson_hp_adapt bin/minimal_mpi_test.out self_test/mpi/Makefile.am: Added the directory crdoublematrix_copy_constructor to the variable variablenp_dir The CRDoubleMatrix self test and related files: new file: self_test/mpi/crdoublematrix_copy_constructor/Makefile.am new file: self_test/mpi/crdoublematrix_copy_constructor/crdoublematrix_copy_constructor.cc new file: self_test/mpi/crdoublematrix_copy_constructor/validata/crdoublematrix_copy_constructor.dat.gz new file: self_test/mpi/crdoublematrix_copy_constructor/validate.sh ------------------------------------------------------------------------ r1068 | mly | 2015-06-18 16:36:06 +0100 (Thu, 18 Jun 2015) | 18 lines Fixed bugs in CRDoubleMatrix src/generic/matrices.h 1) Added const accessor method for the following functions in CRDoubleMatrix serial_matrix_matrix_multiply_method() distributed_matrix_matrix_multiply_method() 2) Slight modification to CRDoubleMatrixHelpers::deep_copy(): Now copying over the *_matrix_matrix_multiply_method() flags. I didn't copy it over before, since they are always initialised to 2. However, if it's a deep copy, I should copy over as much as possible. The only thing I cannot copy over is the solver pointers, that's because I don't know how to tell which Solver object to create. src/generic/matrices.cc 1) Fixed the CRDoubleMatrix copy constructor. ------------------------------------------------------------------------ r1067 | mly | 2015-06-18 16:36:06 +0100 (Thu, 18 Jun 2015) | 5 lines Removed commented out legacy code in block_preconditioner.cc modified: generic/block_preconditioner.cc See previous commit for the commented out code. ------------------------------------------------------------------------ r1066 | mly | 2015-06-18 16:36:06 +0100 (Thu, 18 Jun 2015) | 138 lines Removing legacy code from block_preconditioner.cc: modified: src/generic/block_preconditioner.cc Attempting to remove all legacy code to do with not being able to re-classify dof types (done at the element level). Commented out the block of code which checks that if row has been imported the block number is the same. A bit of history: A long time ago, the block preconditioner will loop through the meshes and get all the global dof numbers, along with the associated dof type numbers via the function GeneralisedElement::get_dof_numbers_for_unknowns(...) and put the results in a set of pairs. This is the comment from a old commit of mine: ========================================================================== $ git log -S"hen a FaceElement will re-classify the bulk element's DOFs" . commit 3935ae6f98fc45e8313edbbc75ba1be50c40795d Author: mly Date: Mon Dec 2 14:55:49 2013 +0000 Fixed distributed mesh problem in generic/block_preconditioner.cc The old code used a set of pairs to store the global equation and dof type pair. If a dof is re-classified, then this is also stored. This the set is used later to get the number of dofs and such. This means we have more dofs then there actually is. So, we used a map instead. ========================================================================== This is the code commented out block_preconditioner.cc:1514 { unsigned u = first_dof_to_send[p] + ndof_to_recv[p]; for (unsigned i = first_dof_to_send[p]; i < u; i++) { #ifdef PARANOID // RAYRAY Legacy code, this checks that the DOFs have not // been // re-classified. This has been changed so that we can // re-classify // the DOFs. Example: Bulk element classifies it's own DOF // types, // then a FaceElement will re-classify the bulk element's // DOFs. // See ImposeParallelOutflowElement. // I have not deleted the below so we can easily "revert" // back if // required. // paranoid check // check that if row has been imported the block number is // the // same // if (dof_recv[my_global_dofs[i]-first_row]) // { // if (Dof_number_dense[my_global_dofs[i]-first_row] // != my_dof_numbers[i]) // { // std::ostringstream error_message; // error_message // << "Inconsistency in assigment of block numbers\n" // << "Global dof " << my_global_dofs[i] // << "was previously assigned to block " // << Dof_number_dense[my_global_dofs[i]-first_row] // << "\nNow it's been reassigned to block " // << my_dof_numbers[i] << ".\n" // << "This is most likely because one of your\n" // << "elements has classified its degrees of freedom\n" // << "wrongly. You should remember that \n" // << // "GeneralisedElement::get_block_numbers_for_unknowns()\n" // << "should only classify the element's OWN dofs and // not \n" // << "deal with dofs that were created by resizing // nodes, \n" // << "say. Check that loops over nodal values in that // \n" // << "function do not use Node::nvalue() to determine // the\n" // << "dofs to be classified!\n"; // throw OomphLibWarning(error_message.str(), // OOMPH_CURRENT_FUNCTION, // OOMPH_EXCEPTION_LOCATION); // } // } // indicate that this dof has ben recv dof_recv[my_global_dofs[i]-first_row] = true; #endif Dof_number_dense[my_global_dofs[i]-first_row] = my_dof_numbers[i]; } } As you can see, it loops through the dofs, if it has been received, it checks that the dof type number is the same as the one defined in the my_dof_numbers array. The arrays my_dof_numbers and my_global_dofs form a pair of vectors which contains the global dof types and dof types numbers accordingly. SO, in the old code (before the commit above, using a set instead of a map), if we re-classify global dofs, (say, global dof 5 from 3 to 6) we have the following vectors: index: 0,1, 2 ,3, 4 ,5,6 my_global_dofs = [3,4,*5*,7,*5*,8,9] my_dof_numbers = [1,2,*3*,1,*6*,3,2] The above commented out loop will catch this since my_dof_numbers[4] is 6, but Dof_number_dense[5] is already assigned 3 (via a previous loop iteration). HOWEVER! - when using a map and just changing the value (dof type number), the vectors are now: index: 0,1,2, 3 ,4,5 my_global_dofs = [3,4,7,*5*,8,9] my_dof_numbers = [1,2,1,*6*,3,2] As you can see, only the last visited dof classification is kept. So the check for re-classification of dof types will always pass, since there is no trace of re-classification. Thus this paranoia check is safe to take out. HOWEVER! - I have left the array dof_recv in since it's used to check if every local dof has been received. ------------------------------------------------------------------------ r1065 | mheil | 2015-06-09 08:32:24 +0100 (Tue, 09 Jun 2015) | 3 lines changed config file ------------------------------------------------------------------------ r1064 | mheil | 2015-06-09 08:29:37 +0100 (Tue, 09 Jun 2015) | 3 lines new config options file ------------------------------------------------------------------------ r1063 | mly | 2015-05-31 22:42:31 +0100 (Sun, 31 May 2015) | 3 lines Put timing outputs within if statements do it doesn't affect anyone else's output modified: src/navier_stokes/navier_stokes_preconditioners.cc ------------------------------------------------------------------------ r1062 | mly | 2015-05-31 22:42:31 +0100 (Sun, 31 May 2015) | 20 lines Removed some of my RAYRAY flag from demo drivers: demo_drivers/axisym_navier_stokes/counter_rotating_disks/linearised_axisym_navier_stokes_elements.h Removed a comment. I left in the RAYRAY flag which questions where is the function function get_dof_numbers_for_unknowns(...) demo_drivers/multi_physics/3d_boussinesq_convection/3d_ref_b_convect.cc Removed a RAYRAY flag - the ndof_types() function had no comments. I put in a commnet to say that it has no comment. demo_drivers/womersley/one_d_womersley/flux_control_elements_bk.h Removed my RAYRAY flag, commented out the following functions: unsigned nblock_types() get_block_numbers_for_unknowns() They don't seem to be used, and they're not even the correct function name. src/linearised_axisym_navier_stokes/linearised_axisym_navier_stokes_elements.h Fixed some comments. ------------------------------------------------------------------------ r1061 | mly | 2015-05-31 22:42:31 +0100 (Sun, 31 May 2015) | 8 lines Added more files to .gitignore Files added: demo_drivers/heat_transfer_and_melting/OUTPUT demo_drivers/heat_transfer_and_melting/result_spring_contact_kuhn_tucker.dat demo_drivers/heat_transfer_and_melting/two_d_unsteady_heat_melt/OUTPUT demo_drivers/heat_transfer_and_melting/two_d_unsteady_heat_melt/result_spring_contact_single_kink.dat demo_drivers/result_spring_contact_old_version.dat src/ode/ode.h ------------------------------------------------------------------------ r1060 | mly | 2015-05-31 22:42:30 +0100 (Sun, 31 May 2015) | 15 lines Womersley demo driver code: The file demo_drivers/womersley/one_d_womersley/flux_control_elements.h does not seem to be used. Instead of deleting it, I decided to rename it in case it in needed in the future. Renamed: demo_drivers/womersley/one_d_womersley/flux_control_elements.h -> demo_drivers/womersley/one_d_womersley/flux_control_elements_bk.h Modified: demo_drivers/womersley/one_d_womersley/Makefile.am Removed flux_control_elements.h from one_d_womersley_SOURCES. Modified: src/generic/matrices.cc Fixed some comments. ------------------------------------------------------------------------ r1059 | mly | 2015-05-31 22:42:30 +0100 (Sun, 31 May 2015) | 2 lines Removed the replace_all_f_block code switch, we are doing this by default now. ------------------------------------------------------------------------ r1058 | mly | 2015-05-31 22:42:30 +0100 (Sun, 31 May 2015) | 2 lines Took out more RAYRAY comments modified: src/generic/block_preconditioner.h ------------------------------------------------------------------------ r1057 | mly | 2015-05-31 22:42:29 +0100 (Sun, 31 May 2015) | 2 lines Added comments to double_vector.cc - detailing why I've decided to not use STL functionality for the overloaded operators +, -, *, / ------------------------------------------------------------------------ r1056 | mly | 2015-05-31 22:42:29 +0100 (Sun, 31 May 2015) | 48 lines Removed all offending RAYRAY tags. There are a few left, these are for other people to fix (mainly comments which needs updating) Replaced some for loops with std::copy and std::fill_in Removed some legacy code where I outputted data for debugging purposes. Files modified: modified: demo_drivers/biharmonic/two_d_biharmonic/two_d_biharmonic.cc modified: src/biharmonic/biharmonic_preconditioner.cc modified: src/biharmonic/biharmonic_preconditioner.h modified: src/generic/block_preconditioner.cc modified: src/generic/block_preconditioner.h modified: src/generic/double_vector.cc modified: src/meshes/brick_from_tet_mesh.template.cc modified: src/solid/solid_preconditioners.cc Details: demo_drivers/biharmonic/two_d_biharmonic/two_d_biharmonic.cc src/biharmonic/biharmconditioner.cc Removed come legacy code which I have commented out already. src/generic/block_preconditioner.h Removed a "RAYRAY" comment. src/generic/double_vector.cc Where possible, use std::copy and std::fill_in src/meshes/brick_from_tet_mesh.template.cc src/solid/solid_preconditioners.cc Took out a RAYRAY flagonic_preconditioner.cc modified: src/biharmonic/biharmonic_preconditioner.h Commented out a few lines where I outputted data for bebugging. Note: this has always been within it's own if statement and would never affect any other code or performance. src/generic/block_preconditioner.cc Removed come legacy code which I have commented out already. src/generic/block_preconditioner.h Removed a "RAYRAY" comment. src/generic/double_vector.cc Where possible, use std::copy and std::fill_in src/meshes/brick_from_tet_mesh.template.cc src/solid/solid_preconditioners.cc Took out a RAYRAY flag ------------------------------------------------------------------------ r1055 | mly | 2015-05-31 22:42:28 +0100 (Sun, 31 May 2015) | 4 lines Changed the initialiser for some arrays back to () instead of {}. {} only works in C++11. modified: generic/block_preconditioner.cc ------------------------------------------------------------------------ r1054 | mly | 2015-05-31 22:42:28 +0100 (Sun, 31 May 2015) | 11 lines Reverted code back to before debugging parallel AMG stuff, and fixed some block preconditioner code. modified: src/generic/block_preconditioner.cc Removed some old code commented out code from block_setup, and optimised a few lines. modified: src/generic/block_preconditioner.h modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h modified: src/navier_stokes/navier_stokes_preconditioners.cc modified: src/navier_stokes/navier_stokes_preconditioners.h ------------------------------------------------------------------------ r1053 | mly | 2015-05-31 22:42:28 +0100 (Sun, 31 May 2015) | 78 lines Changes required to output matrices, for debugging parallel stuff. modified: src/generic/block_preconditioner.h modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h modified: src/navier_stokes/navier_stokes_preconditioners.cc modified: src/navier_stokes/navier_stokes_preconditioners.h Details: src/generic/block_preconditioner.h Commented out "private:" on line 2517, I needed the internal_get_block(...) functionality from the subsidiary block preconditioner. ===================================================================== src/navier_stokes/lagrange_enforced_flow_preconditioner.h * Added class variable "unsigned Setup_counter" - this is used to label the matrix output each time the setup(...) function is called. This is initialised to 0 in the constructor. * Added three functions (self-explanatory): void set_replace_all_f_blocks() { Replace_all_f_blocks = true; } void set_replace_modified_blocks_only() { Replace_all_f_blocks = false; } bool replace_all_f_blocks() { return Replace_all_f_blocks; } * Added code in setup(...) to output various matrices: blocked matrix via get_block(...), dof matrix via (get_dof_level_block), and internal blocks via (internal_get_block(...)) Both before and after the replacement is done. ===================================================================== src/navier_stokes/navier_stokes_preconditioners.h * Added unsigned Setup_counter, initialised to 0. * Added functions (self-explanatory): void set_replace_all_f_blocks() { Replace_all_f_blocks = true; } void set_replace_modified_blocks_only() { Replace_all_f_blocks = false; } bool replace_all_f_blocks() { return Replace_all_f_blocks; } unsigned Setup_counter; bool Replace_all_f_blocks; ===================================================================== src/navier_stokes/navier_stokes_preconditioners.cc * Like the lgr preconditioner, outputting various matrices, including * internal blocks from the master preconditioner (hence I commented out * the private part in BlockPreconditioner). ------------------------------------------------------------------------ r1052 | mly | 2015-05-31 22:42:27 +0100 (Sun, 31 May 2015) | 5 lines Moved the "output of bottom right entry" functionality into it's own function which each matrix has to implement. This is so it works in parallel - CRDoubleMatrix has to output the (nrow_local,ncol) entry - which cannot be generalised in the Matrix base class. ------------------------------------------------------------------------ r1051 | mly | 2015-05-31 22:42:27 +0100 (Sun, 31 May 2015) | 7 lines Added output to oomph_info when telling the user that the timestep is rejected. (As opposed to declaring it on a new time). It's better for me when working with parallel output, I want to be able to grep for a certain processor and grep for the tag "REJECTED". modified: src/generic/problem.cc ------------------------------------------------------------------------ r1050 | mly | 2015-05-31 22:42:27 +0100 (Sun, 31 May 2015) | 4 lines Added switch for replacing the whole f block vs replacing only modified f block. modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1049 | mly | 2015-05-31 22:42:26 +0100 (Sun, 31 May 2015) | 4 lines modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Doing new relacement of all the dof blocks again from the lgr preconditioner. This is to test with test3_7 in annularwedge 3D ------------------------------------------------------------------------ r1048 | mly | 2015-05-31 22:42:26 +0100 (Sun, 31 May 2015) | 1 line Reverted back the replacement blocks code for lgr prec, for testing. ------------------------------------------------------------------------ r1047 | mly | 2015-05-31 22:42:26 +0100 (Sun, 31 May 2015) | 2 lines lgrprec: now replacing all blocks extracted. This is so that subsidiary preconditioner will not need to extract it again. ------------------------------------------------------------------------ r1046 | mly | 2015-05-31 22:42:25 +0100 (Sun, 31 May 2015) | 1 line Corrected some indentations for lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r1045 | mly | 2015-05-31 22:42:25 +0100 (Sun, 31 May 2015) | 1 line Fixed the bottle neck in block preconditioning framework. ------------------------------------------------------------------------ r1044 | mly | 2015-05-31 22:42:25 +0100 (Sun, 31 May 2015) | 6 lines Added timers for debugging purposes, these must be taken out. modified: src/generic/block_preconditioner.cc modified: src/generic/block_preconditioner.h modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h modified: src/navier_stokes/navier_stokes_preconditioners.cc ------------------------------------------------------------------------ r1043 | mheil | 2015-05-27 16:27:45 +0100 (Wed, 27 May 2015) | 10 lines Added projectable Taxisymmetric linear elasticity elements and INTERFACE CHANGE in problem.h: void add_eigenvector_to_dofs(const double &epsilon, - DoubleVector &eigenvector); + const DoubleVector &eigenvector); ------------------------------------------------------------------------ r1042 | mheil | 2015-05-23 15:45:34 +0100 (Sat, 23 May 2015) | 10 lines Provided machinery to reset the subdiary preconditioner in block diagonal one to default, using -- wait for it -- a new fct called reset_subsidiary_preconditioner_function_to_default() This used to be done by nulling out the pointer to the preconditioner generation function. Ray quite rightly put an end to this but didn't provide an elegant way to return to the default. ------------------------------------------------------------------------ r1041 | mheil | 2015-05-23 11:13:32 +0100 (Sat, 23 May 2015) | 18 lines Little tweaks to preconditioning stuff to clarify error messages etc. [stumbled across these while trying to get 3D collapsible tube code to work again; it still works (now...)!] -- INTERFACE CHANGE: NetFluxControlElement::ndof_number_for_unknown() has become NetFluxControlElement::dof_number_for_unknown() (with consistent rename for associated private variable. Also dim() function has become read-only (since its value is assigned automatically; there was some confusion about its role...). ------------------------------------------------------------------------ r1040 | mheil | 2015-05-11 13:24:09 +0100 (Mon, 11 May 2015) | 20 lines Updated build instructions doc/the_distribution/the_distribution.txt to match the new build machinery and updated configure.ac user_drivers/Makefile.am and user_src/Makefile.am so that directories in there are again (and now fully automatically) included in the build process. ------------------------------------------------------------------------ r1039 | mheil | 2015-04-27 17:24:56 +0100 (Mon, 27 Apr 2015) | 14 lines Swapped autogen.sh --> non_interactive_autogen.sh interactive_autogen.sh --> autogen.sh and restored old behaviour of autogen.sh: Only two command line options which are checked; rest done by interactive Q&A which now includes question about "make -k" and "make -s". Documentation still has to be updated but am checking this in now so it can self-test itself overnight. ------------------------------------------------------------------------ r1038 | mheil | 2015-04-21 08:21:29 +0100 (Tue, 21 Apr 2015) | 26 lines -- A few layout tweaks to interactive_autogen.sh -- Added function to compute enclosed volume via line integral to axisymmetric poroelastic fsi face elements. -- introduced eulerian-to-lagrangian translation factor in bjs normal flux condition to ensure conservation of volume flux across fsi interface when (linearised) poro-elasticity is coupled to finite amplitude (ALE-based) fluids. This introduces two multi-physics interactions into LinearisedAxisymPoroelasticBJS_FSIElement: One interaction with an external element that provides the velocity of the adjacent linear elasticity element; one with the associated face element that provides the geometric normalisation. Eulerian to Lagrangian translation is only taken into account if this second interaction is set up! -- various additional bits of output addded to point-by-point output for axisymmetric poroelasticity bulk elements -- additional output in axisymmetric poroelasticity face elements. -- tweaked some of the poroelasticity validata. ------------------------------------------------------------------------ r1037 | mheil | 2015-04-04 13:59:44 +0100 (Sat, 04 Apr 2015) | 10 lines Triangle mesh doesn't refine properly if (I think!) region of refinement is so narrow that it gets ignored on the coarsest mesh in refinement hierarchy. Also bin diffusion doesn't actually do what it claims (I think!). Changes to code are commented out but will be helpful to track this down (need to check in to get this out cleanly on another machine; also worth documenting this problem here -- it arises most dramatically in Nico's oscillating non-Newtonian droplet). ------------------------------------------------------------------------ r1036 | mheil | 2015-04-04 13:45:55 +0100 (Sat, 04 Apr 2015) | 4 lines MH's check in of latest version of block preconditioner documentation and driiver code (maybe it does rain in sicily...) ------------------------------------------------------------------------ r1035 | julio | 2015-04-03 18:06:24 +0100 (Fri, 03 Apr 2015) | 9 lines Fixed bug when setting unrefinement/refinement tolerance for curve sections. The user defined tolerance was changed to the default one when creating a new instance of the closed/open curve containing the curve sections. See helper function closed_curve_to_polygon_helper() in src/meshes/triangle_mesh_template.h ------------------------------------------------------------------------ r1034 | bergemann | 2015-03-27 14:40:52 +0000 (Fri, 27 Mar 2015) | 5 lines fixed "dangling closing bracket" in autogen.sh and added leylandii debug configure options. ------------------------------------------------------------------------ r1033 | mheil | 2015-03-24 14:42:48 +0000 (Tue, 24 Mar 2015) | 4 lines Added further missing files to EXTRA_DIST variables to make distribution from tar file work. Also got rid (again?) of demo_drivers/ode/imr_ode. ------------------------------------------------------------------------ r1032 | ahazel | 2015-03-24 13:53:53 +0000 (Tue, 24 Mar 2015) | 9 lines Modified source code to be consistent with gcc 4.9, which essentially means moving all default arguments to be in the first definition of a function. In addition some links to the navier_stokes library were required when FSI preconditioners were used in acoustic_fsi, prescribed_displ_lag_mult, etc. It's not really clear how to treat this any more nicely. Also added a 1D reaction-diffusion example. ------------------------------------------------------------------------ r1031 | mheil | 2015-03-21 15:43:38 +0000 (Sat, 21 Mar 2015) | 7 lines Maybe finally fixed this check_mpi_command.sh rubbish. Old test had been re--written, missing features, and despite the script saying that it'll continue building if there are no working mpi compilers and run commands it stopped. Changed this back to what it was. ------------------------------------------------------------------------ r1030 | mheil | 2015-03-20 17:45:25 +0000 (Fri, 20 Mar 2015) | 3 lines Bloody bin/check_mpi_command.sh again. ------------------------------------------------------------------------ r1029 | mheil | 2015-03-20 17:18:09 +0000 (Fri, 20 Mar 2015) | 10 lines Replaced MathematicalConstants::Pi by pre-computed (maple) number, defined in oomph_utilities.h. Removed counterpart in orthpoly.h/.cc and replaced various other (but not all) instances of from-scratch computations. Added yet another "eval" to build machinery. This time bin/check_mpi_command.sh. I could swear I'd done that one before... ------------------------------------------------------------------------ r1028 | mheil | 2015-03-12 08:11:39 +0000 (Thu, 12 Mar 2015) | 8 lines mesh_names.aux mesh_instructions.aux mesh_clean.aux are now no longer deleted my distclean-local in src/meshes (change necessary because of the way David has re--written the make machinery). ------------------------------------------------------------------------ r1027 | dshepherd | 2015-03-11 11:49:19 +0000 (Wed, 11 Mar 2015) | 4 lines Tell automake that this is not a GNU project This means that it doesn't overwrite INSTALL with the GNU version of the file even in a forced rebuild. ------------------------------------------------------------------------ r1026 | mly | 2015-02-26 11:54:05 +0000 (Thu, 26 Feb 2015) | 3 lines Added more comments to bin/string_contains.sh Added a working example in the comments. ------------------------------------------------------------------------ r1025 | mly | 2015-02-26 11:43:54 +0000 (Thu, 26 Feb 2015) | 2 lines Fixed the validate script for BlockSelector We needed to check if paranoia is on for one of the tests. ------------------------------------------------------------------------ r1024 | mly | 2015-02-26 11:43:54 +0000 (Thu, 26 Feb 2015) | 3 lines modified: compare_block_selector_nonnull_replacement_block_pt.sh Added more comments ------------------------------------------------------------------------ r1023 | mly | 2015-02-26 11:43:53 +0000 (Thu, 26 Feb 2015) | 5 lines BlockSelector self test: Re-named the validate_helper.sh script to compare_block_selector_nonnull_replacement_block_pt.sh Added a block of comments the above script ------------------------------------------------------------------------ r1022 | dshepherd | 2015-02-25 17:55:34 +0000 (Wed, 25 Feb 2015) | 5 lines Automatically include all private dirs in make dist Add automatic detection of all dirs in private/ when running make dist. Based on the code removed (by me) in commit 927. ------------------------------------------------------------------------ r1021 | dshepherd | 2015-02-25 17:55:34 +0000 (Wed, 25 Feb 2015) | 5 lines In user_{drivers,src} Makefile.am use better variable name DIST_SUBDIRS makes it clear that the dirs in the list are only considered when running `make dist` (since make doesn't recurse into those directories otherwise). ------------------------------------------------------------------------ r1020 | dshepherd | 2015-02-25 17:55:34 +0000 (Wed, 25 Feb 2015) | 5 lines In configure.ac (re)add private folder detection This is a partial revert of commit 927. It turns out that the PRIVATE_DIR Makefile/autoconf variable was needed for `make dist` with private user_drivers. ------------------------------------------------------------------------ r1019 | dshepherd | 2015-02-25 17:55:34 +0000 (Wed, 25 Feb 2015) | 4 lines Fix bug in customise_dist.sh include all I removed the "t" (terminate early) option, but forgot to modify the default options to not use "t". ------------------------------------------------------------------------ r1018 | dshepherd | 2015-02-24 16:17:47 +0000 (Tue, 24 Feb 2015) | 15 lines Fix bug in distributing user_drivers/src The dirs to distribute in user_drivers/src used to be determined by a dir_list file (via setting the SUBDIRS variable in the appropriate Makefile.am), but those have now been removed. This meant that joe_cool etc. were never being distributed which caused crashes in customise_dist.sh. Fixed this by adding joe_cool etc. to the SUBDIRS variables directly. Distribution of user_drivers/src is now also done by setting SUBDIRS directly. Also added messages/comments explaining this. There may be a similar issue in the private drivers/src dirs, but I don't have them so I can't check. ------------------------------------------------------------------------ r1017 | dshepherd | 2015-02-24 16:17:47 +0000 (Tue, 24 Feb 2015) | 10 lines In autogen.sh use autoreconf --force rather than deleting helper scripts Deleting the scripts is problematic when we only want to generate the config files because they may not be re-created, resulting in a dist tar file which cannot be built without automake installed. So instead we set the autoreconf --force flag to force regeneration of the helper scripts. May also have additional benefits because all autoconf files are regenerated, which is what we want when we specify -r to autogen.sh. ------------------------------------------------------------------------ r1016 | dshepherd | 2015-02-24 16:17:47 +0000 (Tue, 24 Feb 2015) | 4 lines Fix bug in customise_dist.sh when removing user drivers With set -o errexit you can't rm non-existant files, so we need to touch temp dirs before deleting them. ------------------------------------------------------------------------ r1015 | dshepherd | 2015-02-24 16:17:47 +0000 (Tue, 24 Feb 2015) | 24 lines Fix make mydist to work with new build machinery In customise_dist.sh: * Added shell error check settings * Removed places where (now removed) dir list files were modified * Use autogen.sh to regenerate config files * Force creation of "doc" dir in dist to fix bug. When `--enable-suppress-doc` was set `make mydist` would not recurse into doc, meaning that the doc dir was not copied to the dist file. This caused automake to fail. Now an empty doc dir is created in this case. * Removed the ability to terminate customisation early because it makes the logic much more complex, and would require lots of copy-pasted code or a major refactoring to work now. In autogen.sh: * Added ability to just regenerate the config files Signed-off-by: David Shepherd ------------------------------------------------------------------------ r1014 | dshepherd | 2015-02-24 16:17:47 +0000 (Tue, 24 Feb 2015) | 1 line Add error catching settings in hypre/trilinos build scripts ------------------------------------------------------------------------ r1013 | dshepherd | 2015-02-24 16:17:46 +0000 (Tue, 24 Feb 2015) | 4 lines Reimplement "Fix bug in build machinery when trilinos/hypre are present" New implementation is cleaner and will work even when directories are missing. ------------------------------------------------------------------------ r1012 | dshepherd | 2015-02-24 16:17:46 +0000 (Tue, 24 Feb 2015) | 6 lines Revert "Fix bug in build machinery when trilinos/hypre are present" It was a hack that turned out not to work for certain cases, e.g. if the doc directory is deleted (as in certain tar file versions). This reverts commit 2ed90fc2b92de98645d6d082a62b646f37de14c0. ------------------------------------------------------------------------ r1011 | dshepherd | 2015-02-24 16:17:46 +0000 (Tue, 24 Feb 2015) | 9 lines In autogen.sh detect missing Makefile in root and regenerate everything if this happens. This is what you get after a `make distclean`, so it's good to handle it. Also check for Makefile.in, which shouldn't really be missing but might be... ------------------------------------------------------------------------ r1010 | dshepherd | 2015-02-24 16:17:46 +0000 (Tue, 24 Feb 2015) | 4 lines In customise_dist.sh: don't use == in test Using == in test is non-posix (see the bash manpage), and so may or may not work on different machines. ------------------------------------------------------------------------ r1009 | dshepherd | 2015-02-24 16:17:45 +0000 (Tue, 24 Feb 2015) | 1 line In customise_dist.sh: use OptionRead's default option ------------------------------------------------------------------------ r1008 | dshepherd | 2015-02-24 16:17:45 +0000 (Tue, 24 Feb 2015) | 1 line In customise_dist.sh: exit with failure code on missing arguments ------------------------------------------------------------------------ r1007 | dshepherd | 2015-02-24 16:17:45 +0000 (Tue, 24 Feb 2015) | 1 line Fix whitespace, comment formatting in customise_dist.sh ------------------------------------------------------------------------ r1006 | dshepherd | 2015-02-24 16:17:45 +0000 (Tue, 24 Feb 2015) | 1 line Add more missing scripts to bin/Makefile.am EXTRA_DIST ------------------------------------------------------------------------ r1005 | mly | 2015-02-13 16:59:55 +0000 (Fri, 13 Feb 2015) | 1 line Finished BlockSelector self tests ------------------------------------------------------------------------ r1004 | mly | 2015-02-13 16:59:55 +0000 (Fri, 13 Feb 2015) | 8 lines Changed variable name in BlockSelector and the related self test. Block_pt was changed to Replacement_block_pt. Other variable/function names are changed to reflect this. E.g. null_block_pt() -> null_replacement_block_pt() modified: self_test/generic/block_selector_test/block_selector_test.cc modified: src/generic/block_preconditioner.h ------------------------------------------------------------------------ r1003 | mly | 2015-02-13 16:59:55 +0000 (Fri, 13 Feb 2015) | 1 line Added BlockSelector self test executable to .gitignore ------------------------------------------------------------------------ r1002 | mly | 2015-02-13 16:59:54 +0000 (Fri, 13 Feb 2015) | 5 lines Added some timers for the Augmented Lagrangian preconditioner and LSC preconditioner. modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h modified: src/navier_stokes/navier_stokes_preconditioners.cc ------------------------------------------------------------------------ r1001 | mly | 2015-02-13 16:59:54 +0000 (Fri, 13 Feb 2015) | 8 lines Commit of BlockSelector self test. modified: self_test/generic/Makefile.am new file: self_test/generic/block_selector_test/Makefile.am new file: self_test/generic/block_selector_test/block_selector_test.cc new file: self_test/generic/block_selector_test/validata/block_selector_test_data.dat new file: self_test/generic/block_selector_test/validate.sh modified: src/generic/block_preconditioner.h ------------------------------------------------------------------------ r1000 | mly | 2015-02-13 16:59:54 +0000 (Fri, 13 Feb 2015) | 4 lines Fixed indentation, about to tidy up the code so it's both easier to read and more logical. At the moment I'm not making full use of the most recent change to the block preconditioning framework - the ability to replace dof blocks. ------------------------------------------------------------------------ r999 | mheil | 2015-02-10 10:16:00 +0000 (Tue, 10 Feb 2015) | 4 lines Another tweak to the dreaded bin/check_mpi_command.sh script (the error actually appeard in two places). ------------------------------------------------------------------------ r998 | mheil | 2015-02-09 17:54:00 +0000 (Mon, 09 Feb 2015) | 3 lines Added configure.ac ------------------------------------------------------------------------ r997 | mheil | 2015-02-09 17:34:25 +0000 (Mon, 09 Feb 2015) | 5 lines Added interaction_autogen.sh to EXTRA_DIST in root Makefile.am Removed accidentally checked-in src/ode/ode.h ------------------------------------------------------------------------ r996 | mheil | 2015-02-09 17:30:57 +0000 (Mon, 09 Feb 2015) | 31 lines -- Fixed problem in bin/check_mpi_command.sh (command wasn't quoted). -- Merged Ray and MH's changes to block preconditioning framework, especially the multi-poisson stuff. -- Made sure that the parallel multi-poisson self tests only run if we have trilinos since the code needs a parallel Krylov solver. Added appropriate number of fake OKs to validation.log -- Lots of rewrite of multi-poisson block preconditoner tutorial (but still incomplete!) -- INTERFACE CHANGE: In block preconditiong stuff replaced {b,B}lock_pt by {r,R}eplacement_block_pt where this is what was meant. -- Fixed NNODE_1D vs nnode() problem in 2D spectral elements (function was never used, but...). NOTE: make mydist is still not working; David is looking into this. ------------------------------------------------------------------------ r995 | mly | 2015-01-30 14:39:29 +0000 (Fri, 30 Jan 2015) | 2 lines Fixed a small bug in the paranoid tests for getting concatenated blocks in the BPF. ------------------------------------------------------------------------ r994 | mly | 2015-01-30 14:39:28 +0000 (Fri, 30 Jan 2015) | 6 lines Fixed the replace dof block indices. Recall that I changed this so that we use the dof ordering (Matthias wanted to always be able to replace blocks regardless of the parameter to block_setup - I.e. we no longer have to use the identity mapping). modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r993 | mly | 2015-01-30 14:39:27 +0000 (Fri, 30 Jan 2015) | 6 lines Added automatically generated *.aux files to .gitignore Added the following files: src/meshes/mesh_clean.aux src/meshes/mesh_instructions.aux src/meshes/mesh_names.aux ------------------------------------------------------------------------ r992 | julio | 2015-01-22 14:41:26 +0000 (Thu, 22 Jan 2015) | 6 lines - Fixed compilation problem - The current version does not support multiple outer closed polygons for unstructured meshes ------------------------------------------------------------------------ r991 | mly | 2015-01-22 13:57:22 +0000 (Thu, 22 Jan 2015) | 13 lines Fixed validate scripts for two_d_multi_poisson. There were lots of dummy oks missing. In mpi/solvers/ we use fpdiff.py for the convergence history. This is because the driver code outputs the number of iterations as a whole number. So testing the number of lines in the file does not make sense. I have unzipped the following file: new file: linear_solvers/validata/one_plus_four_with_two_coarse_iterative_solver_convergence.dat deleted: linear_solvers/validata/one_plus_four_with_two_coarse_iterative_solver_convergence.dat.gz because the line comparison script is not smart enough to unzip it for me, this was the cause of the failed test. ------------------------------------------------------------------------ r990 | mly | 2015-01-19 14:35:56 +0000 (Mon, 19 Jan 2015) | 1 line Added the file compile to .gitignore, fixed warnings in Lgr prec. ------------------------------------------------------------------------ r989 | mly | 2015-01-19 14:35:56 +0000 (Mon, 19 Jan 2015) | 11 lines Tidied up some code: modified: block_preconditioner.cc modified: block_preconditioner.h Renamed the Raydebug flag and respective access functions to Recursive_debug_flag modified: trilinos_solver.cc modified: trilinos_solver.h Removed the reading in and dumping of matrices and RHS which I added to test out some AMG algorithm for Milan. ------------------------------------------------------------------------ r988 | mly | 2015-01-19 14:35:56 +0000 (Mon, 19 Jan 2015) | 1 line Multipoisson: Added MPI tests for two level coarsening. ------------------------------------------------------------------------ r987 | mly | 2015-01-19 14:35:55 +0000 (Mon, 19 Jan 2015) | 1 line multi poisson - updated comments. ------------------------------------------------------------------------ r986 | mly | 2015-01-19 14:35:55 +0000 (Mon, 19 Jan 2015) | 16 lines src/generic/problem.h Added in some convergence stuff by accident, git merge is acting weird. Now removed. src/generic/block_preconditioner.cc src/generic/block_preconditioner.h Added comments and modified the set_replacement_dof_block(...) function to allow replacement without calling block_setup() with default arguments. src/multi_physics/pseudo_elastic_preconditioner.cc Modified to replace dof-level blocks. This has a different numbering scheme than the block numbering. demo_drivers/linear_solvers/multi_poisson_block_preconditioners.h demo_drivers/linear_solvers/two_d_multi_poisson.cc Added two-level coarsening self test Fixed up code. ------------------------------------------------------------------------ r985 | mly | 2015-01-19 14:35:54 +0000 (Mon, 19 Jan 2015) | 1 line About to use a new demo preconditioner for coarsening DOF types ------------------------------------------------------------------------ r984 | mly | 2015-01-19 14:35:54 +0000 (Mon, 19 Jan 2015) | 3 lines Changed the source function in two_d_biharmonic back to original. modified: demo_drivers/biharmonic/two_d_biharmonic/two_d_biharmonic.cc ------------------------------------------------------------------------ r983 | mly | 2015-01-19 14:35:54 +0000 (Mon, 19 Jan 2015) | 5 lines Modified biharmonic demo driver and preconditioner to do Milan's tests modified: demo_drivers/biharmonic/two_d_biharmonic/two_d_biharmonic.cc modified: src/biharmonic/biharmonic_preconditioner.cc modified: src/biharmonic/biharmonic_preconditioner.h ------------------------------------------------------------------------ r982 | mly | 2015-01-19 14:35:53 +0000 (Mon, 19 Jan 2015) | 1 line Changed the output functions of DoubleVector to consts ------------------------------------------------------------------------ r981 | mly | 2015-01-19 14:35:53 +0000 (Mon, 19 Jan 2015) | 4 lines Added functionality to dump the matrices only modified: src/generic/trilinos_solver.cc modified: src/generic/trilinos_solver.h ------------------------------------------------------------------------ r980 | mly | 2015-01-19 14:35:53 +0000 (Mon, 19 Jan 2015) | 1 line Cleaned up a bit of modified: src/generic/trilinos_solver.cc ------------------------------------------------------------------------ r979 | mly | 2015-01-19 14:35:52 +0000 (Mon, 19 Jan 2015) | 1 line Added functionality to dump out the read-in matrices modified: src/generic/trilinos_solver.cc modified: src/generic/trilinos_solver.h ------------------------------------------------------------------------ r978 | mly | 2015-01-19 14:35:52 +0000 (Mon, 19 Jan 2015) | 1 line Added access function for Problem_is_nonlinear modified: src/generic/problem.h ------------------------------------------------------------------------ r977 | mly | 2015-01-19 14:35:52 +0000 (Mon, 19 Jan 2015) | 1 line loading in residual vector ------------------------------------------------------------------------ r976 | mly | 2015-01-19 14:35:51 +0000 (Mon, 19 Jan 2015) | 1 line Added functionality to dump matrices and residual in if statements Also, functionality to read in a matrix ------------------------------------------------------------------------ r975 | mly | 2015-01-19 14:35:51 +0000 (Mon, 19 Jan 2015) | 1 line Added some output to the below file for testing purposes Need to revert later modified: src/generic/trilinos_solver.cc ------------------------------------------------------------------------ r974 | mly | 2015-01-19 14:35:51 +0000 (Mon, 19 Jan 2015) | 1 line Moved the output bottom right zero functionality to sparse_indexed_output_herlper functions, this is because we need to use nrow_local for distributed matrices. modified: src/generic/matrices.h ------------------------------------------------------------------------ r973 | mly | 2015-01-19 14:35:50 +0000 (Mon, 19 Jan 2015) | 4 lines Added stuff to output jacobian before solving. Revert back to original. modified: src/generic/trilinos_solver.cc modified: src/generic/trilinos_solver.h ------------------------------------------------------------------------ r972 | mly | 2015-01-19 14:35:50 +0000 (Mon, 19 Jan 2015) | 1 line Added more biharmonic output for Milan, lgr_prec now outputs the vmm, trying to do the augmented lgr prec by benzi modified: demo_drivers/biharmonic/two_d_biharmonic/two_d_biharmonic.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r971 | mly | 2015-01-19 14:35:50 +0000 (Mon, 19 Jan 2015) | 1 line Added more timing stuff modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h modified: src/navier_stokes/navier_stokes_preconditioners.cc modified: src/navier_stokes/navier_stokes_preconditioners.h ------------------------------------------------------------------------ r970 | mly | 2015-01-19 14:35:49 +0000 (Mon, 19 Jan 2015) | 1 line Made slight change in block_preconditioner.h to fix a race condition in the LSC preconditioner. ------------------------------------------------------------------------ r969 | mly | 2015-01-19 14:35:49 +0000 (Mon, 19 Jan 2015) | 4 lines modified: demo_drivers/biharmonic/two_d_biharmonic/two_d_biharmonic.cc Added code to print out the connectivity matrix for Milan. This will not affect the self tests modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Fixed one timing output, I forgot to use oomph_info (I used cout) ------------------------------------------------------------------------ r968 | mly | 2015-01-19 14:35:49 +0000 (Mon, 19 Jan 2015) | 1 line Added timing output for LSC and Lagrangian preconditioners for testing purposes ------------------------------------------------------------------------ r967 | mly | 2015-01-19 14:35:49 +0000 (Mon, 19 Jan 2015) | 1 line Modified the Lagrangian enforced flow preconditoner for testing purposes ------------------------------------------------------------------------ r966 | mly | 2015-01-19 14:35:48 +0000 (Mon, 19 Jan 2015) | 1 line Again with the DocLinearSolverInfo class, removed a check for popping out an empty vector. This function should not be called if the vector is empty ------------------------------------------------------------------------ r965 | mly | 2015-01-19 14:35:48 +0000 (Mon, 19 Jan 2015) | 1 line Fixed bug in my own DocLinearSolver object ------------------------------------------------------------------------ r964 | mly | 2015-01-19 14:35:48 +0000 (Mon, 19 Jan 2015) | 1 line Added new clear_current_time_step function to DocLinearSolverTime ------------------------------------------------------------------------ r963 | mheil | 2015-01-13 08:38:07 +0000 (Tue, 13 Jan 2015) | 4 lines Removed simple_block_preconditioner.h from dependency list in mpi/solvers/Makefile.am ------------------------------------------------------------------------ r962 | mheil | 2015-01-13 08:31:36 +0000 (Tue, 13 Jan 2015) | 3 lines Created/added basic_ode/validata ------------------------------------------------------------------------ r961 | mheil | 2015-01-13 08:30:34 +0000 (Tue, 13 Jan 2015) | 4 lines Added various missing files to the EXTRA_DIST variables in bin Makefile.am ------------------------------------------------------------------------ r960 | dshepherd | 2015-01-07 15:24:29 +0000 (Wed, 07 Jan 2015) | 6 lines Make fpdiff.py compatible with python3 We have to get exceptions manually using `sys.exc_info()` instead of the usual `except IOError as err:` or `except IOError, err:` for compatibility with both the ancient version of python on the wulfling and python3+. ------------------------------------------------------------------------ r959 | dshepherd | 2015-01-07 15:24:28 +0000 (Wed, 07 Jan 2015) | 1 line Remove reference to dir_list from doc/the_distribution ------------------------------------------------------------------------ r958 | dshepherd | 2015-01-07 15:24:28 +0000 (Wed, 07 Jan 2015) | 1 line Update doc/the_distribution.txt for new autogen scripts ------------------------------------------------------------------------ r957 | dshepherd | 2015-01-07 15:24:28 +0000 (Wed, 07 Jan 2015) | 1 line Fix wrong makefile include in doc/the_distribution ------------------------------------------------------------------------ r956 | dshepherd | 2015-01-07 15:24:28 +0000 (Wed, 07 Jan 2015) | 1 line Fix broken code tags in doc/the_distribution ------------------------------------------------------------------------ r955 | dshepherd | 2015-01-07 15:24:28 +0000 (Wed, 07 Jan 2015) | 1 line Fix bug in build machinery when not in oomph dir ------------------------------------------------------------------------ r954 | dshepherd | 2015-01-07 15:24:27 +0000 (Wed, 07 Jan 2015) | 1 line Fix some whitespace in autogen.sh ------------------------------------------------------------------------ r953 | dshepherd | 2015-01-07 15:24:27 +0000 (Wed, 07 Jan 2015) | 1 line Fix bug in build machinery when trilinos/hypre are present ------------------------------------------------------------------------ r952 | bsaxby | 2014-12-16 18:44:44 +0000 (Tue, 16 Dec 2014) | 123 lines General updates, mainly relating to hp-adaptivity. Also some bug fixes in parallel. Modifications to the src directory: ----------------------------------- -- Changed how master and slave edges were determined for mortaring. Now we choose the longest edge as master, or the edge with the lower p-order as master if both edges have the same length. While the previous formulation was mathematically correct in its imposition of weak continuity, this version makes more sense and recovers strong continuity in more cases. -- Interface change: made PRefineableQElement<3,INITIAL_NNODE_1D>::oc_hang_helper() virtual. -- Generalised hp-refineable elements to 3D case. -- Removed superfluous functions interpolated_zeta_on_edge/face_before_p_refinement(). -- Added 3D versions of p-refineable Navier-Stokes elements. Also changed 2D PRefineableQCrouzeixRaviartElements so that for NNODE_1D=3 linear rather than piecewise constant pressure interpolation is used. This is the same as the standard QCrouzeixRaviartElements. -- Made NavierStokesEquations::interpolated_p_nst() virtual so that it can be overridden to calculate enriched pressures. -- Added p-refineable versions of linear elasticity elements -- Fixed problem with halo nodes' positions differing from their haloed counterparts in situations where the node was created on the haloed process by an element that does not exist on the halo processor. e.g. in the case of h-refinement of elements with different p-orders that share an edge on the outer edge of the halo layer on one of the processors. This requires communication of nodal positions from the haloed nodes to the corresponding halo nodes. If the stored global coordinate of the haloed node is not consistent with its interpolated coordinate then this is sent to corresponding nodes that may be shared with elements that do not exist on the halo processor and were therefore created with a different global coordinate. This is done in the new function TreeBasedRefineableMeshBase::synchronise_nonhanging_nodes(), called just before synchronise_hanging_nodes(). -- Updated the missing master node functions to search in more places for missing nodes before giving up. -- Updated the missing master node functions to handle MacroElementNodeUpdate stuff. Now fully functioning MacroElementNodeUpdateElements can be created for missing master nodes that get added to the external storage in order to facilitate their node updates. * This required an INTERFACE CHANGE to the function initial_setup() that now takes an optional argument const unsigned &initial_p_order=0 that allows the initial p-order to be specified for elements not in a tree. However, this functionality causes some problems for specific processor layouts when "duplicate" nodes are deleted. So instead an error is thrown inside additional_synchronise_hanging_nodes() if MacroElementNodeUpdateNodes are used, are before any additional nodes are created. -- Added flag in RefineableMeshBase() to control whether additional synchronisation of hanging nodes is performed. The function TreeBasedRefineableMesh::additional_synchronise_hanging_nodes() is used when the masters of hanging nodes cannot be found on the local processor. If all the master nodes are located in synchronise_hanging_nodes() then the function is never called, as is the case when uniformly-spaced nodes are used. If some masters are not found then the required nodes are constructed on the local processor in the external storage and the corresponding nodes become haloed. This process requires communication. However, if this synchronisation is not required then the user may set the flag RefineableMeshBase::Additional_synchronisation_of_hanging_nodes_not_required=true to prevent this additional cost. The result will be the possibility that the hanging status of nodes on the outer edge of the halo layer could differ if nonconforming meshes are used with elements with nonuniformly-spaced nodes. -- New function TreeBasedRefineableMeshBase::synchronise_nonhanging_nodes(). For any haloed node whose position is determined by an element that does not exist on the processor on which the halo copy exists, its position is communicated. This ensures that the nodal positions are consistent across all processors when using nonconforming meshes. Communication always occurs, but the ammount of data communicated is limited to just the positions of the nodes whose positions differ. For elements with uniformly spaced nodes no such nodes exist, and so each processor sends a single integer (0) to every other processor. -- Removed call to delete_all_external_storage() that caused hangs in refine_base_mesh(). -- Removed MPI_Barrier() that caused hangs in Mesh::check_halo_schemes(). -- Replaced some Comm_pt!=0 with mesh_is_distributed(). -- Changed order of rebuild_from_sons() in MacroElementNodeUpdateElement -- Added alternative constructor for TElement to allow bypass of check for maximum NNODE_1D for higher orders. -- Removed BENFLAGS from nearly everywhere. Modifications to the demo_drivers directory: -------------------------------------------- -- Added demo driver eighth_sphere_poisson_hp_adapt.cc to test 3D hp-adaptivity. -- Changed validata in demo drivers that use the updated mortaring algorithm. Modifications to the doc directory: ----------------------------------- -- Changed equation markup in doc/linear_elasticity/periodic_load/periodic_load.txt so that it compiles with doxygen. ------------------------------------------------------------------------ r951 | dshepherd | 2014-11-12 17:18:43 +0000 (Wed, 12 Nov 2014) | 1 line Rename mass_matrix_solver_pt to mass_matrix_solver_for_explicit_timestepper_pt ------------------------------------------------------------------------ r950 | dshepherd | 2014-11-12 17:18:43 +0000 (Wed, 12 Nov 2014) | 1 line In interactive_autogen.sh sort the list of options files ------------------------------------------------------------------------ r949 | dshepherd | 2014-11-12 17:18:43 +0000 (Wed, 12 Nov 2014) | 2 lines In interactive_autogen.sh correctly handle the case where current does not exist ------------------------------------------------------------------------ r948 | dshepherd | 2014-11-12 17:18:42 +0000 (Wed, 12 Nov 2014) | 4 lines In autogen.sh etc use the default options file by default If 'current' options file doesn't exist then we have to pick some file to use or crash. Using the 'default' options file seems sensible. ------------------------------------------------------------------------ r947 | dshepherd | 2014-11-12 17:18:42 +0000 (Wed, 12 Nov 2014) | 1 line Minor changes to autogen.sh etc. help text ------------------------------------------------------------------------ r946 | dshepherd | 2014-11-12 17:18:42 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh use piped input for ProcessOptionsFile ------------------------------------------------------------------------ r945 | dshepherd | 2014-11-12 17:18:41 +0000 (Wed, 12 Nov 2014) | 5 lines Fix bools passed by copy instead of const ref As specified by coding conventions. Mostly my mistakes but I also found a few in some demo drivers. ------------------------------------------------------------------------ r944 | dshepherd | 2014-11-12 17:18:41 +0000 (Wed, 12 Nov 2014) | 3 lines Replace _pts by _pt in various places As specified by the coding conventions page (and by Matthias). ------------------------------------------------------------------------ r943 | dshepherd | 2014-11-12 17:18:40 +0000 (Wed, 12 Nov 2014) | 3 lines Modify fpsmall for compatibility with ancient python (for the wulfling) ------------------------------------------------------------------------ r942 | dshepherd | 2014-11-12 17:18:40 +0000 (Wed, 12 Nov 2014) | 1 line Add self tests for adaptive TR and IMR on ODEs ------------------------------------------------------------------------ r941 | dshepherd | 2014-11-12 17:18:40 +0000 (Wed, 12 Nov 2014) | 5 lines Add a python script to check that all entries of a file are small Similar to fpdiff.py, useful for files where the length is not known (so we can't compare with a file full of zeros), such as when testing error norms for adaptive time stepping. ------------------------------------------------------------------------ r940 | dshepherd | 2014-11-12 17:18:40 +0000 (Wed, 12 Nov 2014) | 6 lines Rename copy_dof_pt_to_history_value(..) to set_dofs(..) * Consistent with similar functions. * Also removed an overzealous paranoid check in various dof_pt functions that was causing problems when compiled with MPI. ------------------------------------------------------------------------ r939 | dshepherd | 2014-11-12 17:18:39 +0000 (Wed, 12 Nov 2014) | 1 line In ODE demo drivers do much more rigorous tests ------------------------------------------------------------------------ r938 | dshepherd | 2014-11-12 17:18:39 +0000 (Wed, 12 Nov 2014) | 1 line Merge all ode tests together and refactor ------------------------------------------------------------------------ r937 | dshepherd | 2014-11-12 17:18:39 +0000 (Wed, 12 Nov 2014) | 1 line Improve comments in trapezoid_rule.h ------------------------------------------------------------------------ r936 | dshepherd | 2014-11-12 17:18:39 +0000 (Wed, 12 Nov 2014) | 3 lines Rename midpoint method to implicit midpoint rule (this is what most people actually call it) ------------------------------------------------------------------------ r935 | dshepherd | 2014-11-12 17:18:38 +0000 (Wed, 12 Nov 2014) | 1 line Improve comments in imr code ------------------------------------------------------------------------ r934 | dshepherd | 2014-11-12 17:18:38 +0000 (Wed, 12 Nov 2014) | 1 line Add ODE self test using the "real" implementation of IMR ------------------------------------------------------------------------ r933 | dshepherd | 2014-11-12 17:18:38 +0000 (Wed, 12 Nov 2014) | 3 lines Add implementation of trapezoid rule and a very basic self test using an ODE. ------------------------------------------------------------------------ r932 | dshepherd | 2014-11-12 17:18:38 +0000 (Wed, 12 Nov 2014) | 1 line In ode demo driver add command line args and also test IMR ------------------------------------------------------------------------ r931 | dshepherd | 2014-11-12 17:18:37 +0000 (Wed, 12 Nov 2014) | 1 line Initial commit of a working ODE example ------------------------------------------------------------------------ r930 | dshepherd | 2014-11-12 17:18:37 +0000 (Wed, 12 Nov 2014) | 4 lines In autogen.sh fix bug when using current options file * Tried to copy 'current' file to itself, which gives an error, wrap in an if to avoid this. ------------------------------------------------------------------------ r929 | dshepherd | 2014-11-12 17:18:37 +0000 (Wed, 12 Nov 2014) | 1 line Force git to keep the directory config/configure.ac_scripts ------------------------------------------------------------------------ r928 | dshepherd | 2014-11-12 17:18:36 +0000 (Wed, 12 Nov 2014) | 1 line Add configure option: wulfling paranoid without doc ------------------------------------------------------------------------ r927 | dshepherd | 2014-11-12 17:18:36 +0000 (Wed, 12 Nov 2014) | 24 lines Remove all *.dir_list files and associated variables * The list of Makefiles is automatically generated by autogen.sh. So there is no need to have manually updated dir_list files anymore. * Some variables in Makefiles relied on these dir list files but did not appear to do anything (and I checked with Matthias) so they have been removed. The variables are: USER_DRIVER_SUBDIRECTORIES USER_SRC_SUBDIRECTORIES PRIVATE_DIR HAVE_PRIVATE_USER_SRC PRIVATE_SUBDIRECTORIES PRIVATE_USER_DRIVER_SUBDIRECTORIES HAVE_PRIVATE_USER_DRIVERS * The variable HAVE_PRIVATE_DIRECTORY was used to decide if we should recurse into ./private when running make clean etc. I've replaced this by just running the command with a `-` prepended (so that it is allowed to fail without stopping make). Unfortunately I can't test it still works in exactly the same way because I've never used the private folder. ------------------------------------------------------------------------ r926 | dshepherd | 2014-11-12 17:18:36 +0000 (Wed, 12 Nov 2014) | 8 lines In autogen.sh use a cleaner method to modify automake options Avoid modifying configure.ac in autogen.sh. Instead #include another macro file (which is generated by autogen.sh) containing the automake init command. This means that configure.ac is not modified by the build process, which makes version control much easier. ------------------------------------------------------------------------ r925 | dshepherd | 2014-11-12 17:18:36 +0000 (Wed, 12 Nov 2014) | 4 lines In autogen.sh fix bug when -r was used in a fresh build autoreconf was called before the makefile_list was generated, and so failed because the list of makefiles to create with configure was empty. ------------------------------------------------------------------------ r924 | dshepherd | 2014-11-12 17:18:36 +0000 (Wed, 12 Nov 2014) | 1 line Work around lack of diff -N support on Wulfling ------------------------------------------------------------------------ r923 | dshepherd | 2014-11-12 17:18:35 +0000 (Wed, 12 Nov 2014) | 1 line Add an ODE element ------------------------------------------------------------------------ r922 | dshepherd | 2014-11-12 17:18:35 +0000 (Wed, 12 Nov 2014) | 5 lines Remove ConvergenceData class Added by me, but I'm not using it anymore (I found it easier to implement something equivalent in my own problem class). Removed since it is not used by anyone else as far as I know. ------------------------------------------------------------------------ r921 | dshepherd | 2014-11-12 17:18:35 +0000 (Wed, 12 Nov 2014) | 4 lines Remove Interpolator class * Only needed for one (older) implementation of implicit midpoint rule, so no point leaving it around. ------------------------------------------------------------------------ r920 | dshepherd | 2014-11-12 17:18:35 +0000 (Wed, 12 Nov 2014) | 1 line Remove some unnecessary includes in preconditioner.h ------------------------------------------------------------------------ r919 | dshepherd | 2014-11-12 17:18:34 +0000 (Wed, 12 Nov 2014) | 4 lines Move null Preconditioner::comm_pt check inside ifdef MPI It was breaking some preconditioners in serial + paranoid mode (in serial the comm_pt should be null). ------------------------------------------------------------------------ r918 | dshepherd | 2014-11-12 17:18:34 +0000 (Wed, 12 Nov 2014) | 3 lines Remove polynomial interpolation code * Only used for an old implementation of adaptive IMR, so no longer needed. ------------------------------------------------------------------------ r917 | dshepherd | 2014-11-12 17:18:34 +0000 (Wed, 12 Nov 2014) | 1 line Update .gitignore ------------------------------------------------------------------------ r916 | dshepherd | 2014-11-12 17:18:34 +0000 (Wed, 12 Nov 2014) | 1 line Add option to run self tests to interactive autogen.sh ------------------------------------------------------------------------ r915 | dshepherd | 2014-11-12 17:18:34 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh refactor autodetection of makefile locations ------------------------------------------------------------------------ r914 | dshepherd | 2014-11-12 17:18:33 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh allow "$confdir/makefile_list" to not exist ------------------------------------------------------------------------ r913 | dshepherd | 2014-11-12 17:18:33 +0000 (Wed, 12 Nov 2014) | 3 lines In autogen.sh add warning not to modify makefile_list because it is auto generated. ------------------------------------------------------------------------ r912 | dshepherd | 2014-11-12 17:18:33 +0000 (Wed, 12 Nov 2014) | 1 line Remove unsteady heat midpoint demo driver ------------------------------------------------------------------------ r911 | dshepherd | 2014-11-12 17:18:33 +0000 (Wed, 12 Nov 2014) | 4 lines In linearised_axisym_navier_stokes demo driver fix const functions Demo driver contains a new time stepper class, need to change some functions to const due to an earlier patch. ------------------------------------------------------------------------ r910 | dshepherd | 2014-11-12 17:18:33 +0000 (Wed, 12 Nov 2014) | 1 line Fix a warning in element_with_moving_nodes.cc describe_local_dofs(..) ------------------------------------------------------------------------ r909 | dshepherd | 2014-11-12 17:18:32 +0000 (Wed, 12 Nov 2014) | 1 line Update comments for Preconditioner::setup(..) ------------------------------------------------------------------------ r908 | dshepherd | 2014-11-12 17:18:32 +0000 (Wed, 12 Nov 2014) | 7 lines Move some mesh communicator functions out of #ifdef OOMPH_HAS_MPI Moved functions: is_mesh_distributed() and communicator_pt(). Both do the obvious thing for the case without MPI (return false and null respectively). This is needed to compile the line visualiser header without mpi. ------------------------------------------------------------------------ r907 | dshepherd | 2014-11-12 17:18:32 +0000 (Wed, 12 Nov 2014) | 1 line Make LinearSolver::is_doc_time_enabled() const ------------------------------------------------------------------------ r906 | dshepherd | 2014-11-12 17:18:31 +0000 (Wed, 12 Nov 2014) | 6 lines Move Problem::distributed() out of #ifdef MPI So that we can easily check if a problem is distributed without having to write our own ifdefs around it. If we don't have MPI the function just returns false. ------------------------------------------------------------------------ r905 | dshepherd | 2014-11-12 17:18:31 +0000 (Wed, 12 Nov 2014) | 4 lines Move explicit predictor stuff from midpoint to TimeStepper base * This allows us to write other time steppers which work in the same way, I need this for debugging... ------------------------------------------------------------------------ r904 | dshepherd | 2014-11-12 17:18:31 +0000 (Wed, 12 Nov 2014) | 10 lines Add function to create mesh boundary node lookups from the nodes Since the nodes themselves already store data on which boundary(s) they are on we can build the mesh's lookup schemes from the node data. This makes life much simpler when using old meshes to create the nodes for new meshes. Only takes O(Nnode) time (unlike some of the other boundary lookup initialisation functions). ------------------------------------------------------------------------ r903 | dshepherd | 2014-11-12 17:18:31 +0000 (Wed, 12 Nov 2014) | 4 lines Add broken virtual vertex_node_pt(..) to FiniteElement It's implemented by both T and Q elements so it makes sense to be able to call it using pointers to the base class! ------------------------------------------------------------------------ r902 | dshepherd | 2014-11-12 17:18:31 +0000 (Wed, 12 Nov 2014) | 1 line In oomph-convert.py clean up booleans and flag naming ------------------------------------------------------------------------ r901 | dshepherd | 2014-11-12 17:18:30 +0000 (Wed, 12 Nov 2014) | 1 line In oomph-convert.py overwrite outdated output files automatically ------------------------------------------------------------------------ r900 | dshepherd | 2014-11-12 17:18:30 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh etc. update usage ------------------------------------------------------------------------ r899 | dshepherd | 2014-11-12 17:18:30 +0000 (Wed, 12 Nov 2014) | 1 line In interactive_autogen update args and don't write "current" file ------------------------------------------------------------------------ r898 | dshepherd | 2014-11-12 17:18:30 +0000 (Wed, 12 Nov 2014) | 3 lines In interactive autogen auto detect oomph root, and do it sooner in autogen Simplifies echoing of options. ------------------------------------------------------------------------ r897 | dshepherd | 2014-11-12 17:18:30 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh automatically find Makefile.am's in private/ ------------------------------------------------------------------------ r896 | dshepherd | 2014-11-12 17:18:29 +0000 (Wed, 12 Nov 2014) | 3 lines In autogen.sh auto detect the oomph-lib root It is always the dir where autogen.sh is stored. ------------------------------------------------------------------------ r895 | dshepherd | 2014-11-12 17:18:29 +0000 (Wed, 12 Nov 2014) | 4 lines In autogen.sh fix bug in checking of options It was always checking the options file current instead of whatever was actually being used. ------------------------------------------------------------------------ r894 | dshepherd | 2014-11-12 17:18:29 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh check configure options file exists ------------------------------------------------------------------------ r893 | dshepherd | 2014-11-12 17:18:29 +0000 (Wed, 12 Nov 2014) | 5 lines In autogen.sh combine all "first build" stuff There are a number of things that need to run if this is the first time we have built oomph-lib here (or if a rebuild has been forced). Move them all into one section of the code. ------------------------------------------------------------------------ r892 | dshepherd | 2014-11-12 17:18:29 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh clarify some comments ------------------------------------------------------------------------ r891 | dshepherd | 2014-11-12 17:18:29 +0000 (Wed, 12 Nov 2014) | 1 line In interactive_autogen.sh check we are in the correct dir ------------------------------------------------------------------------ r890 | dshepherd | 2014-11-12 17:18:28 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh fix bug with -h if run from another directory ------------------------------------------------------------------------ r889 | dshepherd | 2014-11-12 17:18:28 +0000 (Wed, 12 Nov 2014) | 29 lines Remove regenerate_config hacks from build machinery Now running autogen.sh should automatically select the required build steps in every case! Everything should just work and you should never need to run it with the --rebuild option. This will also massively speed up rerunning autogen in many cases because ./configure is only run if it is really needed (previously it was always run). We are now almost using autotools in the "approved" way, except that we generate the list of user directories automatically and allow specification of configure options from a file. The changes needed were: * Include the directory list file into configure.ac properly. * Use `autoreconf -i` instead of attempting (and failing) to run the right selection of autotools commands manually. This allows make to automatically detect when the driver list file has changed and rerun the necessary commands. * Add code to autogen.sh to detect when the configure options have changed and force the rerunning of autoreconf automatically (instead of needing to specify a rebuild). * Remove regenerate_config_files.sh and related files because they are no longer needed. ------------------------------------------------------------------------ r888 | dshepherd | 2014-11-12 17:18:28 +0000 (Wed, 12 Nov 2014) | 1 line Move automake compatability hack into autogen.sh ------------------------------------------------------------------------ r887 | dshepherd | 2014-11-12 17:18:28 +0000 (Wed, 12 Nov 2014) | 7 lines In autogen.sh automatically handle new builds Set generate_config_files flag by default if this is a new build, i.e. if ./configure does not exist. This means everything normally done by --rebuild will run by default for new builds. ------------------------------------------------------------------------ r886 | dshepherd | 2014-11-12 17:18:28 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh improve comments/output ------------------------------------------------------------------------ r885 | dshepherd | 2014-11-12 17:18:27 +0000 (Wed, 12 Nov 2014) | 1 line Fix white space in config/configure.ac_scripts/*.dir_list ------------------------------------------------------------------------ r884 | dshepherd | 2014-11-12 17:18:27 +0000 (Wed, 12 Nov 2014) | 6 lines Add resize() and default constructor for shape/dshape * Useful to not absolutely have to initialise them immediately. * Actually shape already had a default constructor but it didn't initialise everything, fixed now. ------------------------------------------------------------------------ r883 | dshepherd | 2014-11-12 17:18:27 +0000 (Wed, 12 Nov 2014) | 7 lines Change some functions in TimeStepper to const Functions are: order(), nprev_values() and ndt(). Should have always been const really. INTERFACE CHANGE: If these are overloaded anywhere in your personal code they will need to be made const there as well. ------------------------------------------------------------------------ r882 | dshepherd | 2014-11-12 17:18:26 +0000 (Wed, 12 Nov 2014) | 4 lines Add node position and value functions returning vectors This is much more convenient and not inefficient these days because of return value optimisation. ------------------------------------------------------------------------ r881 | dshepherd | 2014-11-12 17:18:26 +0000 (Wed, 12 Nov 2014) | 4 lines Improve out of range error for empty Vectors Just say that it is empty instead of printing "not in the range (0, ??)" where ?? is unsigned(0-1). ------------------------------------------------------------------------ r880 | dshepherd | 2014-11-12 17:18:26 +0000 (Wed, 12 Nov 2014) | 3 lines Allow OneDMesh to be used with T elements (it works fine but the paranoid check stopped it) ------------------------------------------------------------------------ r879 | dshepherd | 2014-11-12 17:18:26 +0000 (Wed, 12 Nov 2014) | 8 lines In FullCircleMesh add paranoid check of input sizes Mesh constructor can only generate meshes of 5 elements, so the size of the input vectors must be 4. This was not checked anywhere in the code, and trying to create more refined meshes by adding new "theta_position"s resulted in singular elements. Added a paranoid check to stop other people wasting time on this. ------------------------------------------------------------------------ r878 | dshepherd | 2014-11-12 17:18:26 +0000 (Wed, 12 Nov 2014) | 1 line BrickFromTetMesh requires nnode1d=3: add paranoid check ------------------------------------------------------------------------ r877 | dshepherd | 2014-11-12 17:18:25 +0000 (Wed, 12 Nov 2014) | 3 lines Add function + enum to check element geometry i.e. either T or Q ------------------------------------------------------------------------ r876 | dshepherd | 2014-11-12 17:18:25 +0000 (Wed, 12 Nov 2014) | 3 lines In autogen.sh fix bug in default for build dir Wasn't working correctly when the root dir was changed. ------------------------------------------------------------------------ r875 | dshepherd | 2014-11-12 17:18:25 +0000 (Wed, 12 Nov 2014) | 6 lines In problem add actions_after_implicit_timestep_and_error_estimation() New actions function called both unsteady newton solve functions. This is needed if your actions_after_implicit_timestep() modify the solution in a way that affects the error estimate. ------------------------------------------------------------------------ r874 | dshepherd | 2014-11-12 17:18:25 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh with -s arg also shut up configure's spam ------------------------------------------------------------------------ r873 | dshepherd | 2014-11-12 17:18:24 +0000 (Wed, 12 Nov 2014) | 7 lines Properly handle running autogen from other directories * Add function to portably get absolute paths * Use it to get paths for build dir and config file * Now we can cd to oomph root near the start of autogen ------------------------------------------------------------------------ r872 | dshepherd | 2014-11-12 17:18:24 +0000 (Wed, 12 Nov 2014) | 5 lines In autogen.sh etc fix a bug in ProcessOptionsFile I previously tried to replace `tr '\n' ' '` with a sed command. However it seems that on some (or all possibly all) machines sed cannot replace newlines. ------------------------------------------------------------------------ r871 | dshepherd | 2014-11-12 17:18:24 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh add some flags which set useful make options ------------------------------------------------------------------------ r870 | dshepherd | 2014-11-12 17:18:24 +0000 (Wed, 12 Nov 2014) | 1 line Rename autogens: non-interactive one is now the default ------------------------------------------------------------------------ r869 | dshepherd | 2014-11-12 17:18:24 +0000 (Wed, 12 Nov 2014) | 6 lines In autogen.sh etc fix bug when choosing raw build (quite an old bug) It was directly checking the truth value of a string containing "true" or "false", which doesn't do what would be expected. ------------------------------------------------------------------------ r868 | dshepherd | 2014-11-12 17:18:23 +0000 (Wed, 12 Nov 2014) | 4 lines In autogen etc. implement command line interface and use the appropriate cli commands in the interactive autogen to run the requested settings in non-interactive autogen. ------------------------------------------------------------------------ r867 | dshepherd | 2014-11-12 17:18:23 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh allow proper editing when reading options ------------------------------------------------------------------------ r866 | dshepherd | 2014-11-12 17:18:23 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh etc: minor tweaks to formatting ------------------------------------------------------------------------ r865 | dshepherd | 2014-11-12 17:18:23 +0000 (Wed, 12 Nov 2014) | 15 lines Break autogen.sh into three parts 1) bin/autogen_helpers.sh Contains function so that they are accessible from both parts of autogen and from other shell scripts. 2) non_interactive_autogen.sh Contains the actual build process 3) autogen.sh Contains interactive parts, calls non_interactive_autogen.sh for the build. ------------------------------------------------------------------------ r864 | dshepherd | 2014-11-12 17:18:23 +0000 (Wed, 12 Nov 2014) | 5 lines In autogen.sh always wipe links to helper scripts No reason not to: it takes no time and they are automatically rebuilt. Also: move wiping into non-interactive section ------------------------------------------------------------------------ r863 | dshepherd | 2014-11-12 17:18:22 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh remove pause before starting build ------------------------------------------------------------------------ r862 | dshepherd | 2014-11-12 17:18:22 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh move user_drivers detection to build section ------------------------------------------------------------------------ r861 | dshepherd | 2014-11-12 17:18:22 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh send errors to std::err ------------------------------------------------------------------------ r860 | dshepherd | 2014-11-12 17:18:22 +0000 (Wed, 12 Nov 2014) | 8 lines In autogen.sh rewrite configure options selection loop * List normal and private configure options by just using find instead of some weird stuff with symlinks. * Greatly simplified! * Use cut to select nth options file rather than looping! ------------------------------------------------------------------------ r859 | dshepherd | 2014-11-12 17:18:22 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh always display full list of config options ------------------------------------------------------------------------ r858 | dshepherd | 2014-11-12 17:18:22 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh fix indentation ------------------------------------------------------------------------ r857 | dshepherd | 2014-11-12 17:18:22 +0000 (Wed, 12 Nov 2014) | 7 lines In autogen.sh simplify and improve ProcessOptionsFile * Only need one sed command * No point in echo `...`! * Also delete blanklines with whitespace ------------------------------------------------------------------------ r856 | dshepherd | 2014-11-12 17:18:21 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh accept build dir by default ------------------------------------------------------------------------ r855 | dshepherd | 2014-11-12 17:18:21 +0000 (Wed, 12 Nov 2014) | 7 lines In autogen.sh add function YesNoRead and use it Better to encapsulate this stuff in a function, so that we are consistent. I don't think entering garbage at a y/n prompt was handled at all in some places before, it is now. ------------------------------------------------------------------------ r854 | dshepherd | 2014-11-12 17:18:21 +0000 (Wed, 12 Nov 2014) | 4 lines In autogen.sh etc. use /bin/bash Since most of oomph-lib would not work with pure POSIX sh it's ok to assume we have bash here. ------------------------------------------------------------------------ r853 | dshepherd | 2014-11-12 17:18:21 +0000 (Wed, 12 Nov 2014) | 6 lines In autogen.sh don't ask about wiping build directory This should never be needed and could be dangerous. If you think that your build is completely broken then use "make clean" (which is safe) instead. ------------------------------------------------------------------------ r852 | dshepherd | 2014-11-12 17:18:21 +0000 (Wed, 12 Nov 2014) | 10 lines In autogen.sh remove running of self tests Adding options to autogen.sh to choose "make check" or "./bin/parallel_self_test.py" and to pass options to them would massively over complicate things. If you want to automatically run self tests afterwards just use normal shell commands, e.g: ./autogen.sh && ./bin/parallel_self_test.py ------------------------------------------------------------------------ r851 | dshepherd | 2014-11-12 17:18:21 +0000 (Wed, 12 Nov 2014) | 10 lines In autogen.sh remove recording of file sizes If you really need this it's easy enough to do using shell commands, e.g: du -h > inital_du ./autogen.sh du -h > post_build_du make check du -h > post_test_du ------------------------------------------------------------------------ r850 | dshepherd | 2014-11-12 17:18:20 +0000 (Wed, 12 Nov 2014) | 1 line In autogen.sh move testing of mpi commands to new script ------------------------------------------------------------------------ r849 | dshepherd | 2014-11-12 17:18:20 +0000 (Wed, 12 Nov 2014) | 1 line Update .gitignore ------------------------------------------------------------------------ r848 | dshepherd | 2014-11-12 17:18:20 +0000 (Wed, 12 Nov 2014) | 1 line Add optional jacobian function to SolutionFunctorBase ------------------------------------------------------------------------ r847 | dshepherd | 2014-11-12 17:18:20 +0000 (Wed, 12 Nov 2014) | 6 lines Add prettyprint header to use for later c++ standards * prettyprint98.h is not forwards compatible. * Added prettyprint.h which is forwards compatible, and added ifdef to automatically include the correct header depending on version. * Also added some comments about the origin of these headers. ------------------------------------------------------------------------ r846 | dshepherd | 2014-11-12 17:18:19 +0000 (Wed, 12 Nov 2014) | 1 line Add storage of maximum residuals in newton solve ------------------------------------------------------------------------ r845 | dshepherd | 2014-11-12 17:18:19 +0000 (Wed, 12 Nov 2014) | 4 lines Change get_node_at_local_coordinate(..) to const INTERFACE CHANGE: If it is overloaded anywhere in your personal code it will need to be made const there as well. ------------------------------------------------------------------------ r844 | dshepherd | 2014-11-12 17:18:19 +0000 (Wed, 12 Nov 2014) | 6 lines Fix non-resize of s in local_coordinate_of_node(..) The comment on the pure virtual function in elements.h says that it should set the size of the returned vector s. However some (but not all) of the implementations in TElements did not do this, which causes segfaults. ------------------------------------------------------------------------ r843 | dshepherd | 2014-11-12 17:18:19 +0000 (Wed, 12 Nov 2014) | 7 lines Add interface for Integral::knot(..) returning vector * So much easier to work directly with vectors instead of looping over entries and copying. * Not inefficient because of return value optimisation (returned vectors are not copied unnecessarily). ------------------------------------------------------------------------ r842 | dshepherd | 2014-11-12 17:18:18 +0000 (Wed, 12 Nov 2014) | 4 lines Make FiniteElement::local_coordinate_of_node(...) const INTERFACE CHANGE: If it is overloaded anywhere in your personal code it will need to be made const there as well. ------------------------------------------------------------------------ r841 | dshepherd | 2014-11-12 17:18:18 +0000 (Wed, 12 Nov 2014) | 4 lines Add Functor classes for exact solutions This allows us to have exact solutions which depend on problem parameters without having to use global variables. ------------------------------------------------------------------------ r840 | dshepherd | 2014-11-12 17:18:18 +0000 (Wed, 12 Nov 2014) | 3 lines Add interface for elemental history output function i.e. FiniteElement::output(time_step, ....) ------------------------------------------------------------------------ r839 | dshepherd | 2014-11-12 17:18:18 +0000 (Wed, 12 Nov 2014) | 9 lines Change some functions required by output(..) to const * get_s_plot * nplot_points * tecplot_zone_string * write_tecplot_zone_footer INTERFACE CHANGES: If these are overloaded anywhere in your personal code they will need to be made const there as well. ------------------------------------------------------------------------ r838 | dshepherd | 2014-11-12 17:18:17 +0000 (Wed, 12 Nov 2014) | 1 line Add proper not implemented errors in midpoint ------------------------------------------------------------------------ r837 | dshepherd | 2014-11-12 17:18:17 +0000 (Wed, 12 Nov 2014) | 1 line In SumOfMatrices: generalise multiply to rectangular matrices ------------------------------------------------------------------------ r836 | dshepherd | 2014-11-12 17:18:17 +0000 (Wed, 12 Nov 2014) | 1 line In SumOfMatrice: Add function to construct lookup from nodes ------------------------------------------------------------------------ r835 | dshepherd | 2014-11-12 17:18:17 +0000 (Wed, 12 Nov 2014) | 1 line Make Node::is_pinned(...) const ------------------------------------------------------------------------ r834 | dshepherd | 2014-11-12 17:18:16 +0000 (Wed, 12 Nov 2014) | 1 line In SumOfMatrices::multiply(...) fix a small memory leak ------------------------------------------------------------------------ r833 | dshepherd | 2014-11-12 17:18:16 +0000 (Wed, 12 Nov 2014) | 7 lines Remove some unimplemented LinearAlgebraDistribution::build * Some of the LinearAlgebraDistribution::build(....) functions were declared but never defined! They were the functions taking communicator pointers by reference instead of by pointer. * Removed them because they were clearly never needed. ------------------------------------------------------------------------ r832 | dshepherd | 2014-11-12 17:18:16 +0000 (Wed, 12 Nov 2014) | 4 lines Move has_hanging_nodes into FiniteElement (was implemented separately in RefineableElement, FaceElement and InterpolationHelpers before, which seems stupid.) ------------------------------------------------------------------------ r831 | dshepherd | 2014-11-12 17:18:16 +0000 (Wed, 12 Nov 2014) | 1 line Clean up some comments in RefineableElement ------------------------------------------------------------------------ r830 | dshepherd | 2014-11-12 17:18:16 +0000 (Wed, 12 Nov 2014) | 8 lines Add default implementation of RefineableElement::get_interpolated_values get_interpolated_values at present time was a pure virtual function. But it can always be written in terms of get_interpolated_values at arbitrary times. Added default implementation which calls `get_interpolated_values(0, s, values)`. ------------------------------------------------------------------------ r829 | dshepherd | 2014-11-12 17:18:15 +0000 (Wed, 12 Nov 2014) | 1 line Add output operator for nodes ------------------------------------------------------------------------ r828 | dshepherd | 2014-11-12 17:18:15 +0000 (Wed, 12 Nov 2014) | 8 lines In specify command line args add optional documentation argument Documentation is a string which is outputted when the program is run with -help/--help. Also tidied up: * Braces added to oomph-lib standards * Make things like ((*it).first).second more readable ------------------------------------------------------------------------ r827 | dshepherd | 2014-11-12 17:18:15 +0000 (Wed, 12 Nov 2014) | 1 line Implement adaptive BDF<1> ------------------------------------------------------------------------ r826 | dshepherd | 2014-11-12 17:18:15 +0000 (Wed, 12 Nov 2014) | 19 lines Allow make_node_periodic(..) to make copies of copies of nodes In make_node_periodic(...) if the node to be copied is already a copy it now handles it instead of crashing. It handles it by making the node a copy of the "node_to_be_copied"'s copied node (we need better terminology here... sorry). So starting with n1 not a copy and n2 a copy of N: n1 n2 -> N if we call make_node_periodic(n1, n2) we get: n1 -> N n2 -> N which seems sensible. ------------------------------------------------------------------------ r825 | dshepherd | 2014-11-12 17:18:14 +0000 (Wed, 12 Nov 2014) | 4 lines Make clear_copied_pointers() public It is useful to be able to convert copied (i.e. periodic) nodes back into normal nodes. ------------------------------------------------------------------------ r824 | dshepherd | 2014-11-12 17:18:14 +0000 (Wed, 12 Nov 2014) | 1 line Add more detailed error message in imr update ------------------------------------------------------------------------ r823 | dshepherd | 2014-11-12 17:18:14 +0000 (Wed, 12 Nov 2014) | 1 line Fix bug where copied nodes were updated twice by imr ------------------------------------------------------------------------ r822 | dshepherd | 2014-11-12 17:18:14 +0000 (Wed, 12 Nov 2014) | 21 lines Add function get_dvaluesdt and use it instead of get_inverse_mass_... Motivation: * Before this was done by modifying the time steppers then calling get_inverse_mass_matrix_times_residuals(...). * This name is more representative of what the function is actually for. * Now modification of time steppers only needs to be done in one place rather than multiple places (in TR::actions_before_timestep(..) for TR and in Problem::explicit_timestep(...) for explicit time steppers). * Any additional pre-get_dvaluesdt modifications to the problem can now be easily added by overloading. (e.g. in LLG problems we sometimes need to modify the residual function being used.) Implementation: * For normal problems get_dvaluesdt(..) just modifys time steppers then calls get_inverse_mass_matrix_times_residuals(...). * All explicit time steppers now call get_dvaluesdt instead. ------------------------------------------------------------------------ r821 | dshepherd | 2014-11-12 17:18:14 +0000 (Wed, 12 Nov 2014) | 1 line Rename Explicit_solver_pt to Mass_matrix_solver_pt ------------------------------------------------------------------------ r820 | dshepherd | 2014-11-12 17:18:13 +0000 (Wed, 12 Nov 2014) | 1 line Add output operator for Data objects ------------------------------------------------------------------------ r819 | dshepherd | 2014-11-12 17:18:13 +0000 (Wed, 12 Nov 2014) | 1 line In problem add function to set history values of dofs ------------------------------------------------------------------------ r818 | dshepherd | 2014-11-12 17:18:13 +0000 (Wed, 12 Nov 2014) | 1 line In SumOfMatrices rename maps and add access functions ------------------------------------------------------------------------ r817 | dshepherd | 2014-11-12 17:18:13 +0000 (Wed, 12 Nov 2014) | 1 line Add option: crash if a Newton step fails even inside adaptive time step ------------------------------------------------------------------------ r816 | dshepherd | 2014-11-12 17:18:12 +0000 (Wed, 12 Nov 2014) | 3 lines In Problem::calculate_predictions() fix unused variable warning (Needed PARANOID flags) ------------------------------------------------------------------------ r815 | dshepherd | 2014-11-12 17:18:12 +0000 (Wed, 12 Nov 2014) | 4 lines In explicit time stepping move f calculations inside actions_before... Otherwise we can have issues with segragated solves where values aren't correctly pinned for the first f evaluation. ------------------------------------------------------------------------ r814 | dshepherd | 2014-11-12 17:18:12 +0000 (Wed, 12 Nov 2014) | 4 lines Add magic number for pinning only for a segregated solve Having a separate number to normal pinning allows us to easily undo the segregation at the end of the solve. ------------------------------------------------------------------------ r813 | dshepherd | 2014-11-12 17:18:11 +0000 (Wed, 12 Nov 2014) | 4 lines In parallel_self_tests.py improve detection of hlib tests Prevent it from detecting "oomphlib" as containing hlib in check_if_hlib_driver(). ------------------------------------------------------------------------ r812 | dshepherd | 2014-11-12 17:18:11 +0000 (Wed, 12 Nov 2014) | 9 lines In MidpointMethodByBDF also shift pinned values in update step * This implementation of midpoint rule uses a BDF1 step to the midpoint followed by an algebraic update to get to the end of the time step. * The update should probably be applied to all values, but was only working on dofs before. * Shifting pinned values is still optional in case it breaks something. ------------------------------------------------------------------------ r811 | dshepherd | 2014-11-12 17:18:11 +0000 (Wed, 12 Nov 2014) | 3 lines Make shift_time_values() virtual So it can be overloaded in my semi-implicit problems. ------------------------------------------------------------------------ r810 | dshepherd | 2014-11-12 17:18:11 +0000 (Wed, 12 Nov 2014) | 7 lines Reorder time stepper/problem actions_after_implicit_timestep() Time stepper actions are done first so that the time step is completely finished before the problem calculates any auxiliary values. This is needed to make midpoint work with semi-implicit magnetostatic calculations. ------------------------------------------------------------------------ r809 | dshepherd | 2014-11-12 17:18:10 +0000 (Wed, 12 Nov 2014) | 1 line Make get_dofs(...) functions const ------------------------------------------------------------------------ r808 | dshepherd | 2014-11-12 17:18:10 +0000 (Wed, 12 Nov 2014) | 3 lines In explicit predictor calculation loosen tol on time paranoid check (was often failing due to numerical errors) ------------------------------------------------------------------------ r807 | dshepherd | 2014-11-12 17:18:10 +0000 (Wed, 12 Nov 2014) | 7 lines In fpdiff.py handle IO Errors better * When run as a script exit with non-zero status and print message * When run from inside python throw an exception as normal * Done by catching exception in run as script wrapper function ------------------------------------------------------------------------ r806 | dshepherd | 2014-11-12 17:18:10 +0000 (Wed, 12 Nov 2014) | 3 lines In fpdiff.py add calculation of maximum error and largest wrong value Makes it easier to distinguish real problems from floating point errors. ------------------------------------------------------------------------ r805 | dshepherd | 2014-11-12 17:18:10 +0000 (Wed, 12 Nov 2014) | 3 lines In adaptive unsteady newton make REJECT_TIMESTEP a bool Because it is a bool... ------------------------------------------------------------------------ r804 | dshepherd | 2014-11-12 17:18:09 +0000 (Wed, 12 Nov 2014) | 4 lines Add get_bulk_node_number function for TElements Get the number in the bulk element of nodes on the face. Basically just an access function to Node_on_face. ------------------------------------------------------------------------ r803 | dshepherd | 2014-11-12 17:18:09 +0000 (Wed, 12 Nov 2014) | 1 line Rename TElement::NodeOnFace to Node_on_face to match conventions ------------------------------------------------------------------------ r802 | dshepherd | 2014-11-12 17:18:09 +0000 (Wed, 12 Nov 2014) | 1 line In oomph-convert report which file can't be opened in error message ------------------------------------------------------------------------ r801 | dshepherd | 2014-11-12 17:18:09 +0000 (Wed, 12 Nov 2014) | 4 lines In CommandLineArgs::doc_all_flags(..) quote blank strings otherwise trying to parse the output in any way (e.g. for plotting) will go wrong ------------------------------------------------------------------------ r800 | dshepherd | 2014-11-12 17:18:08 +0000 (Wed, 12 Nov 2014) | 3 lines Add option to disable triangulateio specific parts for dump/restart Doesn't work with some elements and isn't needed if not using adaptivity. ------------------------------------------------------------------------ r799 | dshepherd | 2014-11-12 17:18:08 +0000 (Wed, 12 Nov 2014) | 5 lines Add option in fpdiff(..) to output data to streams other than stdout * No different when called as a script * Default is just to use sys.stdout ------------------------------------------------------------------------ r798 | dshepherd | 2014-11-12 17:18:08 +0000 (Wed, 12 Nov 2014) | 6 lines In fpdiff.py don't call sys.exit in the middle of functions It crashes any python code calling fpdiff(..)! Instead return the err code and exit as normal. Also: add default args for fpdiff(...) when called from inside python. ------------------------------------------------------------------------ r797 | dshepherd | 2014-11-12 17:18:08 +0000 (Wed, 12 Nov 2014) | 5 lines In nrow_local() and first_row() only check for comm_pt != 0 if distributed Because in the non-distributed case: 1. We don't need the comm_pt to get the values 2. Null comm_pt is commonly used as a dummy communicator. ------------------------------------------------------------------------ r796 | dshepherd | 2014-11-12 17:18:08 +0000 (Wed, 12 Nov 2014) | 4 lines Fix bug in problem::get_dofs(t, ...) for elemental data I was using the wrong index to get the values of dofs stored as elemental data. ------------------------------------------------------------------------ r795 | dshepherd | 2014-11-12 17:18:07 +0000 (Wed, 12 Nov 2014) | 16 lines Add option to order dump output by x position * Off by default. * The following self tests fail if using it (mostly due to inconsistent nodal dimension) /home/david/oomph-lib/demo_drivers/helmholtz/scattering /home/david/oomph-lib/demo_drivers/unsteady_heat/two_d_unsteady_heat_midpoint /home/david/oomph-lib/demo_drivers/interaction/fsi_channel_seg_and_precond /home/david/oomph-lib/demo_drivers/bifurcation_tracking /home/david/oomph-lib/demo_drivers/interaction/fsi_channel_with_leaflet /home/david/oomph-lib/demo_drivers/interaction/acoustic_fsi /home/david/oomph-lib/demo_drivers/navier_stokes/channel_with_leaflet /home/david/oomph-lib/demo_drivers/axisym_navier_stokes/torus /home/david/oomph-lib/demo_drivers/time_harmonic_linear_elasticity/elastic_annulus /home/david/oomph-lib/demo_drivers/optimisation/disable_ALE/unsteady_heat ------------------------------------------------------------------------ r794 | dshepherd | 2014-11-12 17:18:07 +0000 (Wed, 12 Nov 2014) | 4 lines Implement Mesh::reorder_nodes() in terms of Mesh::get_node_reordering Makes sense to have only one implementation of the reordering algorithm rather than two. ------------------------------------------------------------------------ r793 | dshepherd | 2014-11-12 17:18:06 +0000 (Wed, 12 Nov 2014) | 1 line Add dump helper functions which take a filename and open the stream ------------------------------------------------------------------------ r792 | dshepherd | 2014-11-12 17:18:06 +0000 (Wed, 12 Nov 2014) | 3 lines Add code and Problem parameter to use predictor values as initial Newton guess Turned off by default. ------------------------------------------------------------------------ r791 | dshepherd | 2014-11-12 17:18:06 +0000 (Wed, 12 Nov 2014) | 7 lines Move Predictor_storage_index into timestepper base * Stores the location of the predicted values so that they can be used by other code. * Store an index of -1 if not assigned (e.g. if time stepper is not adaptive). Paranoid mode checks for -1 and throws an error. ------------------------------------------------------------------------ r790 | dshepherd | 2014-11-12 17:18:06 +0000 (Wed, 12 Nov 2014) | 1 line Add function to doc all the command line flags (in oomph_utilities) ------------------------------------------------------------------------ r789 | dshepherd | 2014-11-12 17:18:05 +0000 (Wed, 12 Nov 2014) | 5 lines Remove deprecated variable from Makefile.am s INCLUDES is deprecated in automake and displays a warning since automake version 1.13. Replace uses of INCLUDE by AM_CPPFLAGS as recommended by the warning message. ------------------------------------------------------------------------ r788 | dshepherd | 2014-11-12 17:18:03 +0000 (Wed, 12 Nov 2014) | 6 lines Rename functions, variables and update comments in SumOfMatrices Used to be lots of things related to "nodal to global mapping", but the code is actually much more general than that implies. In fact it only needs some form of mapping from the added matrix to the overall sum matrix and back. ------------------------------------------------------------------------ r787 | dshepherd | 2014-11-12 17:18:03 +0000 (Wed, 12 Nov 2014) | 5 lines Add functions to construct SumOfMatrices lookups from an array of ints * This is the data format for HLib's lookup schemes, so this is useful for creating hierarchical matrices with some non-hierarchical additions. E.g. for BEM corner contibutions. ------------------------------------------------------------------------ r786 | dshepherd | 2014-11-12 17:18:03 +0000 (Wed, 12 Nov 2014) | 7 lines Make set_dimension() and set_nnodal_position_type() public This is required to be able to set element geometry properties in a factory function rather than a constructor. These are only access functions, which are ususally public, so this change is consistent with other similar functions. ------------------------------------------------------------------------ r785 | dshepherd | 2014-11-12 17:18:02 +0000 (Wed, 12 Nov 2014) | 1 line Add patches and instructions for building oomph-lib with Hlib ------------------------------------------------------------------------ r784 | dshepherd | 2014-11-12 17:18:02 +0000 (Wed, 12 Nov 2014) | 12 lines Add hlib into oomph build system * Linking handled automatically in the same way as other libraries * New configure option --with-hlib (only works with default hlib install location for now). Doesn't build it for you (yet?). * Define a symbol: OOMPH_HAS_HLIB * Conditional build of demo_drivers using hlib in parallel_self_test.py ------------------------------------------------------------------------ r783 | dshepherd | 2014-11-12 17:18:02 +0000 (Wed, 12 Nov 2014) | 53 lines Move build_face_element into FiniteElement Particular changes: * Add functions to obtain face element information from QElements * Make a general build_face_element() function which works for all geometries ** virtual so it can be overloaded for e.g. solid elements ** requires the face element info functions ** reduces copied code Main idea: This (in combination with some other code) allows us to not need to inherit from QElements to create a final element, and so get rid of the diamond of death inheritence currently in elements. This will mean that: * We don't need to copy bits of code like void output(std::ostream &outfile, const unsigned &n_plot=5) {MicromagEquations::output(outfile,n_plot);} into hundreds of places throughout oomph-lib. * We never need to worry about virtual inheritance * We can use (checked) static_casts (casting done at compile time instead of run time so potentially faster) * No need to force building of all possible templates of an element i.e. we can get rid of template class QMicromagElement<2,2>; template class QMicromagElement<2,3>; template class QMicromagElement<2,4>; template class QMicromagElement<3,2>; template class QMicromagElement<3,3>; template class QMicromagElement<3,4>; template class TMicromagElement<2,2>; template class TMicromagElement<2,3>; template class TMicromagElement<2,4>; template class TMicromagElement<3,2>; template class TMicromagElement<3,3>; template class TMicromagElement<3,4>; which will reduce compilation time and binary size. To achieve this we need be able to separate out geometric properties into a non-element class, which can then be accessed via a pointer instead of via inheritance. The problem is that build_face_element accesses the element's nodes. Hence we need to move into FiniteElement. Other notes: * No changes to other geometries yet, but completely backwards compatible * All self tests pass ------------------------------------------------------------------------ r782 | dshepherd | 2014-11-12 17:18:01 +0000 (Wed, 12 Nov 2014) | 4 lines Use nodal_dimension rather than node_pt(0)->ndim() in T/Q Elements Because it doesn't crash if they don't have any nodes (i.e. if nodal dimension just represents the dimension of space). ------------------------------------------------------------------------ r781 | dshepherd | 2014-11-12 17:18:01 +0000 (Wed, 12 Nov 2014) | 1 line In sumofmatrices add paranoid check and be more consistent with equation number types ------------------------------------------------------------------------ r780 | dshepherd | 2014-11-12 17:18:01 +0000 (Wed, 12 Nov 2014) | 3 lines Return true/false rather than error codes in fpdiff called as a python function Error codes only really make sense in shell scripts. ------------------------------------------------------------------------ r779 | dshepherd | 2014-11-12 17:18:01 +0000 (Wed, 12 Nov 2014) | 9 lines Fix bug in fpdiff when called as a python function A global variable was leaking into the fpdiff function from the code executed when fpdiff.py was run as a script. This global relative difference variable was used instead of the relative difference parameter passed into the fpdiff function. Fixed this and moved the script code into a function to prevent global variables leaking again. ------------------------------------------------------------------------ r778 | dshepherd | 2014-11-12 17:18:00 +0000 (Wed, 12 Nov 2014) | 3 lines Fix bug in sparse indexed output of empty matrices Don't try to output the bottom right zero of an empty matrix. ------------------------------------------------------------------------ r777 | dshepherd | 2014-11-12 17:18:00 +0000 (Wed, 12 Nov 2014) | 11 lines Add Explicit_solver_pt to Problem for explicit (mass matrix) solves * Almost always better to use different solver for mass matrix solve than for Jacobian solves. * By having a separate pointer we avoid needing to swap the solver before and after every explicit step. * By default it is just initialised as a copy of Linear_solver_pt ??ds might break Andrew's explicit timestepping code if he changes solvers? ------------------------------------------------------------------------ r776 | dshepherd | 2014-11-12 17:18:00 +0000 (Wed, 12 Nov 2014) | 3 lines Add option to throw error on convergence failure in iterative solvers Off by default. ------------------------------------------------------------------------ r775 | dshepherd | 2014-11-12 17:18:00 +0000 (Wed, 12 Nov 2014) | 1 line Fix bug in CG where convergence failures were not reported ------------------------------------------------------------------------ r774 | dshepherd | 2014-11-12 17:17:59 +0000 (Wed, 12 Nov 2014) | 1 line Add second order Runge-Kutta explicit time stepper ------------------------------------------------------------------------ r773 | dshepherd | 2014-11-12 17:17:59 +0000 (Wed, 12 Nov 2014) | 13 lines Add more actions functions in explicit time stepper **Incompatibility**: actions_after_explicit_step() is now called at different times. It used to be called after each _stage_ of a time step but is now called after each step (as implied by the name). The new function actions_after_explicit_stage() is called at the same times as the old actions_after_explicit_step(). Actions functions now available are: * Before/after stage functions for e.g. updating boundary conditions * Before/after step functions for e.g. updating solver data ------------------------------------------------------------------------ r772 | dshepherd | 2014-11-12 17:17:58 +0000 (Wed, 12 Nov 2014) | 1 line Initial commit of midpoint by bdf1 implementation ------------------------------------------------------------------------ r771 | dshepherd | 2014-11-12 17:17:58 +0000 (Wed, 12 Nov 2014) | 7 lines Clean up adaptive_unsteady_newton_solve(..) function * Combine the two do while loops into one * Move all time step/scaling factor checks into one place * Move all revert to pre timestep code into one place ------------------------------------------------------------------------ r770 | dshepherd | 2014-11-12 17:17:58 +0000 (Wed, 12 Nov 2014) | 1 line Add option to StringConversion::to_string to specify precision ------------------------------------------------------------------------ r769 | dshepherd | 2014-11-12 17:17:58 +0000 (Wed, 12 Nov 2014) | 1 line Fix some missing throws of OomphLibErrors in sum_of_matrices.h ------------------------------------------------------------------------ r768 | dshepherd | 2014-11-12 17:17:58 +0000 (Wed, 12 Nov 2014) | 4 lines Update .gitignore * Use more general matching for files when possible * Add some new demo driver binaries ------------------------------------------------------------------------ r767 | dshepherd | 2014-11-12 17:17:57 +0000 (Wed, 12 Nov 2014) | 1 line Force builds of iterative solvers for SumOfMatrices ------------------------------------------------------------------------ r766 | dshepherd | 2014-11-12 17:17:57 +0000 (Wed, 12 Nov 2014) | 1 line Clean up and add error check in SumOfMatrices ------------------------------------------------------------------------ r765 | dshepherd | 2014-11-12 17:17:57 +0000 (Wed, 12 Nov 2014) | 1 line Add support for face elements in interpolator class ------------------------------------------------------------------------ r764 | dshepherd | 2014-11-12 17:17:57 +0000 (Wed, 12 Nov 2014) | 6 lines Add safe global_to_node lookup in SumOfMatrices code * Rename old method to unsafe_... * Safe version is better for normal use (throws error on failure) but unsafe (return -1 on failure) is needed for some things. ------------------------------------------------------------------------ r763 | dshepherd | 2014-11-12 17:17:56 +0000 (Wed, 12 Nov 2014) | 1 line Fix memory leak: delete predictor_pt in midpoint destructor ------------------------------------------------------------------------ r762 | dshepherd | 2014-11-12 17:17:56 +0000 (Wed, 12 Nov 2014) | 7 lines Improve check-makefile-subdirs.py * Better formatted output * Smarter input * Use function from parallel_self_test.py ------------------------------------------------------------------------ r761 | dshepherd | 2014-11-12 17:17:56 +0000 (Wed, 12 Nov 2014) | 1 line Allow multiple meshes and clean up in copy_dof_pt_to_data_history_value(...) ------------------------------------------------------------------------ r760 | dshepherd | 2014-11-12 17:17:56 +0000 (Wed, 12 Nov 2014) | 4 lines Combine rebuild_global_mesh() and merge_meshes() functions They were copy pasted from each other so might as well be one function for consistency. ------------------------------------------------------------------------ r759 | dshepherd | 2014-11-12 17:17:55 +0000 (Wed, 12 Nov 2014) | 1 line Initial commit of script to check makefiles' subdir variable ------------------------------------------------------------------------ r758 | dshepherd | 2014-11-12 17:17:55 +0000 (Wed, 12 Nov 2014) | 6 lines Initial commit of explicit timestep predictor work * Idea is to be able to use a (higher order) explicit time stepper to estimate the local trunction error for time adaptivity. * Working test in demo_drivers/unsteady_heat/two_d_unsteady_heat_midpoint ------------------------------------------------------------------------ r757 | dshepherd | 2014-11-12 17:17:55 +0000 (Wed, 12 Nov 2014) | 1 line Add new demo driver binaries and generated headers to gitignore ------------------------------------------------------------------------ r756 | dshepherd | 2014-11-12 17:17:55 +0000 (Wed, 12 Nov 2014) | 5 lines Make vector time_derivative calc use individual time_derivative function Cleaner code and easier to overload. Also fixed some comments. ------------------------------------------------------------------------ r755 | dshepherd | 2014-11-12 17:17:54 +0000 (Wed, 12 Nov 2014) | 4 lines Add paranoid check for empty matrix when running SuperLu Otherwise we get a segfault inside SuperLu, with no easy way to find out what went wrong. ------------------------------------------------------------------------ r754 | dshepherd | 2014-11-12 17:17:54 +0000 (Wed, 12 Nov 2014) | 9 lines Move undo_make_steady up into Timestepper base * Avoids duplicate code - all implementations did the same thing * Virtual so still easy to overload if needed * Also very slightly increased tol in fpdiff in axisym_navier_stokes/torus Not sure if this is related to this change but it was needed to make the test pass on my machine. Changed zero from 1e-12 -> 1.1e-12 . ------------------------------------------------------------------------ r753 | dshepherd | 2014-11-12 17:17:54 +0000 (Wed, 12 Nov 2014) | 7 lines Additional capabilities for interpolator class * Can optionally set the timestepper to be used * Store local position * Needed to make nprev_values_for_value_at_evaluation_time() const ------------------------------------------------------------------------ r752 | dshepherd | 2014-11-12 17:17:54 +0000 (Wed, 12 Nov 2014) | 1 line Add a function to get the (unmangled) type name of an object as a string ------------------------------------------------------------------------ r751 | dshepherd | 2014-11-12 17:17:53 +0000 (Wed, 12 Nov 2014) | 13 lines Clean up of some of my (David) code in oomph-lib core * Move interpolator.h to generic. * Clean up comments in interpolator.h. * Add ability to interpolate time and space derivative of values (i.e. d2v/dxdt). * Move some large functions from midpoint_method.h and poly_interp.h to .cc files. * Clean up comments and add paranoid checks in poly_interp.h. ------------------------------------------------------------------------ r750 | dshepherd | 2014-11-12 17:17:53 +0000 (Wed, 12 Nov 2014) | 1 line In parallel self tests: add option to build but not run tests ------------------------------------------------------------------------ r749 | dshepherd | 2014-11-12 17:17:53 +0000 (Wed, 12 Nov 2014) | 1 line In parallel_self_test.py always get the absolute path (less error prone) ------------------------------------------------------------------------ r748 | dshepherd | 2014-11-12 17:17:53 +0000 (Wed, 12 Nov 2014) | 4 lines In parallel_self_test.py write make output to file "make_check_output" Instead of dumping it to /dev/null. Useful if make failures are not reproducible for some weird reason. ------------------------------------------------------------------------ r747 | dshepherd | 2014-11-12 17:17:52 +0000 (Wed, 12 Nov 2014) | 1 line Add option to parallel_self_test.pt to run in serial mode for debugging ------------------------------------------------------------------------ r746 | dshepherd | 2014-11-12 17:17:52 +0000 (Wed, 12 Nov 2014) | 3 lines Fix bug in parallel_self_test.py where specified number of cores was ignored and slightly improve comments and layout ------------------------------------------------------------------------ r745 | julio | 2014-10-30 09:42:52 +0000 (Thu, 30 Oct 2014) | 8 lines --- Fixed a bug in TriangleMeshCurveSection::connect_final_vertex_to_curviline(). The s_value must be in the range [z_min, z_max], where z_min = min(z_initial, z_final) and z_max = max(z_initial, z_final). ------------------------------------------------------------------------ r744 | mheil | 2014-09-30 15:21:46 +0100 (Tue, 30 Sep 2014) | 4 lines Jonathan's final commit (for now!). Tweaks to contact_elements.h and drivers. ------------------------------------------------------------------------ r743 | mheil | 2014-09-23 13:59:15 +0100 (Tue, 23 Sep 2014) | 4 lines Added mpi_build_mumps_and_scalapack configure options and fixed misleading description in mpi_debug configure options file. ------------------------------------------------------------------------ r742 | mheil | 2014-09-23 13:57:30 +0100 (Tue, 23 Sep 2014) | 4 lines typo in the_distribution.txt (wrong flag for mpi include directory listed in documentation). ------------------------------------------------------------------------ r741 | mheil | 2014-09-12 17:20:20 +0100 (Fri, 12 Sep 2014) | 38 lines Jonathan's commit before Euromech conference... -- Re-enabled (and made more systematic) the imposition of the contact constraint in contact elements. We can now do: -- hat-function or isoparametric representation [default] of the contact pressure. -- collocation [default] or "hat-function-based-averageing" for working out -- discrete penetrations and -- contact pressures to be used in (what we've now recognised as) the semi-smooth Newton method for the enforcement of the contact constraint. Updated validata to be consistent with that. Options chosen via private pointers to bools (and access functions). -- INTERFACE CHANGE: Added extra boolean to indicate intersection in penetration(...) function of Penetrator (i.e. does the unit normal away from the (potentially) penetrated body actually meet the penetrator. Also returns penetration itself via args rather than return. All still needs a final sanity check and the heated linear contact problem still needs a self-test. ------------------------------------------------------------------------ r740 | mheil | 2014-09-02 17:01:22 +0100 (Tue, 02 Sep 2014) | 3 lines Tidied up a few more wobbles with the multi poisson tests. ------------------------------------------------------------------------ r739 | mheil | 2014-09-02 16:27:57 +0100 (Tue, 02 Sep 2014) | 16 lines Another commit from Tony! -- Fixed an issue with -h in the oomph-convert script, where it would output just -e. -- Added missing serial multi_poisson driver code files. -- Added parallel test for multi_poisson (uses same preconditioner header file as in serial version). -- Changed self tests for parallel trilinos tests -- they now monitor the iteration counts of the linear solver (rather than the Newton method). ------------------------------------------------------------------------ r738 | mheil | 2014-09-02 10:54:35 +0100 (Tue, 02 Sep 2014) | 39 lines Tony's commit! -- Finally (!) wrote demo driver code and associated documentation to illustrate/self-test the use of the block preconditioning framework and Ray's recent additions to it. Still to be tweaked by Matthias (and Ray!). Will also add parallel version in next commit. New/updated documentation lives in doc/mpi/block_preconditioners/block_preconditioners.txt The version in doc/mpi/distributed_block_preconditioners/distributed_block_preconditioners.txt is still Richard Muddle's old version which should be merged with (or cross-referenced from) the new version. -- INTERFACE CHANGE: Removed communicator pointer from Preconditioner::setup(...). It's now inferred from the associated matrix. -- Added Problem::describe_dofs(...) function which describes the dofs in terms of the global equation number, i.e. what type of value (nodal value of a Node; value in a Data object; value of internal Data in an element; etc) is the unknown with a certain global equation number. This sits on top of a deep hierarchy of calls that ultimately descends (through meshes and elements) to Data. Occasionally, the addition of this functionality requires the provision of final over-riders for elements that inherit from multiple other elements. -- Tidied up line visualiser so that it works if run on a single processor in an mpi installation and added self-tests (serial and parallel). ------------------------------------------------------------------------ r737 | ahazel | 2014-08-13 16:16:24 +0100 (Wed, 13 Aug 2014) | 20 lines Tweaked some of the validation parameters for Patrick's new demos Adjusted the Makefile.am's so that the appropriate files get included in make mydist *Only checked* Patrick's tests after distribution and untar-ing Added some more modifications as part of the big continuation/bifurcation rewrite: Added a new boolean flag to set_timestepper() functions that specifies whether existing data is to be wiped. The default behaviour is that only the current value is preserved, but if the boolean is set to true then all exising time history and auxillary data is preserved (or all that will fit within the newly allocated storage) Added new get_inner_product() functions to assembly handlers and elements that are to be used in bifurcation location and continuation. The plan is to merge the required functionality with that in projection problems because the information required is almost the same. ------------------------------------------------------------------------ r736 | phurley | 2014-08-12 21:32:49 +0100 (Tue, 12 Aug 2014) | 10 lines Update to fix the errors in the following makefiles, created as part of the previous check-in (version 735): - demo_drivers/linearised_axisym_navier_stokes/counter_rotating_disks/Makefile.am - demo_drivers/linearised_axisym_navier_stokes/time_periodic_taylor_couette/Makefile.am - demo_drivers/linearised_free_surface_axisym_navier_stokes/two_layer_interface_nonaxisym_perturbations/Makefile.am These fixes involve adding those .h and .cc files to the `SOURCES' list which were previously overlooked. ------------------------------------------------------------------------ r735 | phurley | 2014-08-07 16:37:18 +0100 (Thu, 07 Aug 2014) | 41 lines Patrick Hurley's check-in after his PhD Viva. This check-in mostly contains implementations of the linearised axisymmetric Navier--Stokes equations, and associated demo drivers for self-test purposes. - A new src directory, `linearised_axisym_navier_stokes' has been added, containing the implementation of the linearised axisymmetric Navier--Stokes elements and their refineable counterparts. These equations are only valid if used in problems where the nodes are not moving! - The machinery implemented in the above directory is tested using two new demo drivers. These are both located in the /demo_drivers/linearised_axisym_navier_stokes directory. The first of these, `counter_rotating_disks', replicates the investigation of C. Nore, M. Tartar, O. Daube and L.S. Tuckerman's paper `Survey of instability thresholds of flow between exactly counter-rotating disks' (2003), and tests the implementation of both the new linearised axisymmetric Taylor--Hood and Crouzeix--Raviart elements. A refineable version of this code also tests the refineable versions of these elements. The second demo driver, `time_periodic_taylor_couette', replicates the investigation of B.T. Murray, G.B. McFadden and S.R. Coriell in the 1990 paper `Stabilization of Taylor-Couette flow due to time-periodic outer cylinder oscillation'. This code only tests the non-refineable versions of the new linearised axisymmetric Taylor--Hood and Crouzeix--Raviart elements. - Located in the /demo_drivers/linearised_free_surface_axisym_navier_stokes/ directory, a driver code entitled `two_layer_interface_nonaxisym_perturbations' simulates the relaxation of a non-axisymmetric perturbation to an otherwise axisymmetric interface between two fluids. The source files for this problem are also all stored in this directory. ------------------------------------------------------------------------ r734 | mly | 2014-08-07 06:13:08 +0100 (Thu, 07 Aug 2014) | 2 lines Fixed a memory leak in the lagrangian enforced preconditioner. modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r733 | ahazel | 2014-08-05 09:51:33 +0100 (Tue, 05 Aug 2014) | 8 lines Fixed validation script in fsi_channel_seg_and_pecond so that it does not use bc (which is not guaranteed to be installed on all distributions) Fixed movement of nodes on boundaries of geometric object after projection so that only data corresponding to previous positions (rather than any auxilliary data) are moved. ------------------------------------------------------------------------ r732 | mheil | 2014-07-26 10:44:43 +0100 (Sat, 26 Jul 2014) | 22 lines -- Work-around for doxygen problems (nested html tables don't work). Acknowledged by Dimitri van Heesch who provided the work-around. For now we use a new script bin/tweak_doxygen_latex_style_file.bash which is called automatically before pdflatexing the documentation to sed-replace "xtabular" by "tabular" in the style file. xtabular is better and we should at some point get rid of this; the script can of course also be used to make other tweaks to the latex source before running pdflatex and should therefore stay around as a hook to allow us to interfere with latex. -- Also stripped out practically all "\n" from doxygen based documentation (in doc) since some of these caused latex to complain about "no newline". This didn't actually ever cause things to hang, but reported an error. Most of them were unnecessary anyway and led to minor tweaks in layout. Bloody pain, so please don't re-introduce them! ------------------------------------------------------------------------ r731 | mheil | 2014-07-19 08:34:19 +0100 (Sat, 19 Jul 2014) | 4 lines Fixed range checking error in axisym poro-elastic face elements (used 1D local coordinate rather than that of the bulk...) ------------------------------------------------------------------------ r730 | mheil | 2014-07-18 13:34:07 +0100 (Fri, 18 Jul 2014) | 5 lines Added yet more output to poro-elastic face elements (fsi and non--fsi should now be consistent in terms of what they output; they just do so at different places). ------------------------------------------------------------------------ r729 | mly | 2014-07-17 13:32:53 +0100 (Thu, 17 Jul 2014) | 3 lines Fixed bug get_concatenated_block(...) where I used block_row_index instead of block_col_index. This is fixed and seems to be working! ------------------------------------------------------------------------ r728 | mly | 2014-07-17 13:32:53 +0100 (Thu, 17 Jul 2014) | 5 lines Slightly modified the two_d_biharmonic.cc file: Quick modification to print the jacobian of problem 1. Again, this is for Milan's testing purposes. This does not affect the self test ------------------------------------------------------------------------ r727 | mly | 2014-07-17 13:32:52 +0100 (Thu, 17 Jul 2014) | 6 lines modified: two_d_biharmonic.cc (Milan biharmonic testing...) Modified the code to print out elemental jacobians. This is for testing purposes for Milan. The self test code is not affected. ------------------------------------------------------------------------ r726 | mly | 2014-07-17 13:32:52 +0100 (Thu, 17 Jul 2014) | 4 lines Modified lagrangian preconditioner to do the scaling sigma bit after the matrix solve, so we can use CG, since CG only works well if positive definite matrices, multiplying by a negative sigma will produce a negative definite matrix. ------------------------------------------------------------------------ r725 | mly | 2014-07-17 13:32:52 +0100 (Thu, 17 Jul 2014) | 1 line Removed a lot of personal files from .gitignore ------------------------------------------------------------------------ r724 | mly | 2014-07-17 13:32:51 +0100 (Thu, 17 Jul 2014) | 4 lines modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Made mesh_pt const in: void set_meshes(const Vector &mesh_pt) ------------------------------------------------------------------------ r723 | mly | 2014-07-17 13:32:51 +0100 (Thu, 17 Jul 2014) | 3 lines modified: src/navier_stokes/navier_stokes_preconditioners.cc Fixed comments ------------------------------------------------------------------------ r722 | mly | 2014-07-17 13:32:51 +0100 (Thu, 17 Jul 2014) | 13 lines modified: src/generic/matrix_vector_product.h and .cc The variable col_dist_pt has been made const: void MatrixVectorProduct::setup(CRDoubleMatrix* matrix_pt, LinearAlgebraDistribution* col_dist_pt) void MatrixVectorProduct::setup(CRDoubleMatrix* matrix_pt, const LinearAlgebraDistribution* col_dist_pt) { Also updated comments. ------------------------------------------------------------------------ r721 | mly | 2014-07-17 13:32:50 +0100 (Thu, 17 Jul 2014) | 4 lines modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Fixed bug in My_ndof_types_in_mesh, where I did not use the correct variable during the creation of the Vector... ------------------------------------------------------------------------ r720 | mheil | 2014-07-15 11:13:06 +0100 (Tue, 15 Jul 2014) | 3 lines Updated biolaptop_lam configure options ------------------------------------------------------------------------ r719 | mheil | 2014-07-11 16:50:27 +0100 (Fri, 11 Jul 2014) | 5 lines Commit changes to allow oomph-lib to build trilinos 11.8.1. NOTE: trilinos 11.4.3 seems to have problems with matrix matrix product and probably shouldn't (and now doesn't have to) be used. ------------------------------------------------------------------------ r718 | mheil | 2014-07-05 16:15:30 +0100 (Sat, 05 Jul 2014) | 4 lines Missing this pointers and std:: prefixes; now works fine with very latest version of ubuntu (14.04LTS, I think) ------------------------------------------------------------------------ r717 | ahazel | 2014-06-27 00:24:54 +0100 (Fri, 27 Jun 2014) | 5 lines Modified the adaptive_hopf.cc demo so that the eigenfunction can be computed directly rather than read in from disk. This is essentially pedagogical so that people can see how it is intended to be done. ------------------------------------------------------------------------ r716 | mheil | 2014-06-21 15:20:38 +0100 (Sat, 21 Jun 2014) | 15 lines -- Commented out warning about no elements being associated with certain boundaries in triangle mesh. -- made inheritance of LinearElasticityEquations from LinearElasticityEquationsBase virtual. -- Added boolean flag Accept_failed_locate_zeta_in_setup_multi_domain_interaction to Multi_domain_functions namespace. -- Tweak to node reordering in mesh.cc ------------------------------------------------------------------------ r715 | mheil | 2014-06-21 14:58:38 +0100 (Sat, 21 Jun 2014) | 15 lines Bit of tidying of contact problems and associated driver codes in anticipation of Jonathan's arrival... The two contact with gravity problems are in good shape but quite complicated/convoluted, so I'm hoping that we can tidy up the original (displacement loaded) solid_contact.cc some more. At the moment it diverges at the end of the first period or so of the oscillatory motion of the penetrator; almost certainly because of the extremely rough discretisation (the gravity loaded cases which work fine certainly use much finer meshes). Also checked in the linear contact problem with heat transfer added too; seems to work but certainly needs more work/tidying before we bolt this together with even more stuff. ------------------------------------------------------------------------ r714 | mheil | 2014-06-20 17:45:44 +0100 (Fri, 20 Jun 2014) | 14 lines -- Fixed various warnings about conversions between unsigned/doubles -- Commented out unusused stuff in Wassamon's driver codes; can probably go altogether but that's for Andrew to assess. -- Added divergence and pore pressure to output of axisym poro-elastic traction elements. -- Moved variable into PARANOID only block in triangle code. -- Changed various atan to atan2 and initialised values in values in Wassamon's Subparametric_Telements.h. ------------------------------------------------------------------------ r713 | ahazel | 2014-06-20 08:32:06 +0100 (Fri, 20 Jun 2014) | 4 lines Fixed some left over mistakes from commit 711 to include additional parameters when assigning local equation numbers that get triggered in demo drivers. ------------------------------------------------------------------------ r712 | ahazel | 2014-06-18 13:40:08 +0100 (Wed, 18 Jun 2014) | 2 lines Fixed tolerance problem with new eigenproblem test ------------------------------------------------------------------------ r711 | ahazel | 2014-06-18 10:30:43 +0100 (Wed, 18 Jun 2014) | 26 lines This is a check-in to ensure that the new complex_harmonic eigenproblem is included. The demo includes complex eigenvalues and eigenvectors and is even documented as well (although this may need some revision/improvement). Also coming in are modifications to the boundary conditions in the multi_domain_boussinesq_convection demo so that it will work with either TaylorHood or CrouzeixRaviart Elements without other changes. The changes to src/generic and the brethreton.cc demo results from the inclusion of an option to create and store vectors of pointers to dofs within each element. This is not normally required, but is needed in the revised formulation of continuation/bifurcation tracking problems. This is still "work in progress". However, it has lead to an INTERFACE CHANGE: All functions that assign LOCAL equation numbers now take a boolean flag that determines whether the pointers to LOCAL dofs should be stored within the element. If this affects you at all it will be because you need to change assign_local_eqn_numbers() to include the boolean option in your custom elements. This change was required in the bretherton.cc demo_driver, so look into that one if you are unsure. ------------------------------------------------------------------------ r710 | ahazel | 2014-06-05 09:13:10 +0100 (Thu, 05 Jun 2014) | 7 lines Moved all function definitions into .cc files in src/generic so that multiple compilation units that include generic.h can be linked together. Also removed using namespace pollution using namespace oomph from certain header files! Tweaked validation tolerances in matrix_matrix_multiply_validation. ------------------------------------------------------------------------ r709 | mheil | 2014-05-29 15:44:49 +0100 (Thu, 29 May 2014) | 5 lines Updated the max. number of gmres iterations in pseudo_solid_collapsible tube code (following the recent reduction in the default of 1000 (which caused problems in aztec) to 100 -- not enough here). ------------------------------------------------------------------------ r708 | mheil | 2014-05-29 11:23:05 +0100 (Thu, 29 May 2014) | 28 lines INTERFACE CHANGE: -- Changed role of the FiniteElement::size() function (now non-virtual) to ALWAYS compute the size of the element in Eulerian computational coordinates, e.g. the size (area) of a 2D element in the r-z plane of the the computational domain -- no Jacobian factors (or factors of 2\pi etc.) are taken into account. To compute the ACTUAL size of the element the new (broken virtual) function FiniteElement::compute_physical_size() should be overloaded in specific equation classes -- only they know what actual physical dimension they're to be solved in what we're supposed to mean by "size". Currently implemented for axisymmetric Navier Stokes, where we compute 2\pi \int r dr dz, i.e. the actual 3D volume of the annular region defined by the element. Renamed corresponding implementation of this function in axisymmetric spherical solid elements where this functionality was implemented by overloading FiniteElement::size(). No other demo driver/src files appear to have provided other overloaded implementations. ------------------------------------------------------------------------ r707 | ahazel | 2014-05-19 11:44:12 +0100 (Mon, 19 May 2014) | 4 lines Modification to eigen solver to issue a warning if the number of Arnoldi vectors in ARPACK is smaller than the number of requested eigenvectors. ------------------------------------------------------------------------ r706 | mheil | 2014-05-19 08:24:41 +0100 (Mon, 19 May 2014) | 15 lines -- Reduced default number of iterative solver iterations to 100 to avoid awkward problem when aztec runs out of memory because of large workspace requirements (doesn't die gracefully at all!). Needed to re-set max iter manually in demo_drivers/linear_solvers/adv_diff_iterative_linear_solver_tester.cc which tests some rubbish solvers. -- Made self-test for matrix matrix multiply in self_test/matrix_matrix_multiply/ functional. For some reason results were never checked. ------------------------------------------------------------------------ r705 | mheil | 2014-05-15 10:06:14 +0100 (Thu, 15 May 2014) | 3 lines Added leylandii configure options ------------------------------------------------------------------------ r704 | mheil | 2014-05-15 08:19:33 +0100 (Thu, 15 May 2014) | 12 lines Tidied up a few warnings in mumps solver and added ElementWithExternalElement::output_external_elements(...) which draws vector from integration point in element to corresponding point in external element and FaceElement::output_zeta(...) which does what it says. ------------------------------------------------------------------------ r703 | mheil | 2014-05-03 16:35:21 +0100 (Sat, 03 May 2014) | 17 lines Added flag that allows "gap" between axisym poro-elastic solid and adjacent FSI element (i.e. ignores the test that they match in paranoid mode). Needed for "hybrid" geometrically linear/nonlinear computations where the fluid mesh moves even though it's a small displacement problem that's described by geometrically linear elasticity. Done via publically modifiable boolean Allow_gap_in_FSI (which defaults to false) in namespace AxisymmetricPoroelasticityTractionElementHelper ------------------------------------------------------------------------ r702 | ahazel | 2014-05-02 09:27:26 +0100 (Fri, 02 May 2014) | 13 lines Small changes to demo drivers to remove compiler warnings Renamed Problem::dof_pt() to Problem::global_dof_pt() to make explicit that it returns a pointer to the dof index by the GLOBAL equation number Modified the HSL frontal solver wrapper so that it issues and error if you try to run the solver in parallel. Fixed a quoting problem in Makefile.am of the build machinary for MUMPS Tweaked a tolerance in the heat_transfer_and_melting directory ------------------------------------------------------------------------ r701 | mly | 2014-04-28 10:05:24 +0100 (Mon, 28 Apr 2014) | 6 lines modified: src/generic/block_preconditioner.cc Renamed a few function variables to get rid of all references to "precomputed"-ness. This has been split up into replacing dof-blocks and coarsening dof types (see the many previous commits for incremental details...). ------------------------------------------------------------------------ r700 | mly | 2014-04-28 09:24:53 +0100 (Mon, 28 Apr 2014) | 4 lines modified: src/generic/block_preconditioner.cc Clean up: deleted a lot of commented out code, generally used for debugging when I was re-writing the whole framework. ------------------------------------------------------------------------ r699 | mly | 2014-04-28 09:24:53 +0100 (Mon, 28 Apr 2014) | 6 lines modified: src/generic/block_preconditioner.h and .cc Synchronised comments between header and cc files. Fixed bug in internal_return_block_vectors(...) where I forgot to call the other function... ------------------------------------------------------------------------ r698 | mly | 2014-04-28 09:24:52 +0100 (Mon, 28 Apr 2014) | 16 lines modified: src/generic/block_preconditioner.h Finished commenting: const LinearAlgebraDistribution* internal_preconditioner_matrix_distribution_pt() const const LinearAlgebraDistribution* preconditioner_matrix_distribution_pt() const MapMatrix Replacement_dof_block_pt; Vector Block_distribution_pt; Vector > Block_to_dof_map_coarse; Vector > Block_to_dof_map_fine; ------------------------------------------------------------------------ r697 | mly | 2014-04-28 09:24:52 +0100 (Mon, 28 Apr 2014) | 10 lines modified: src/generic/block_preconditioner.h and .cc Renamed functions: dof_number(...) to internal_dof_number(...) index_in_dof(...) to internal_index_in_dof(...) block_dimension(...) to internal_block_dimension(...) dof_block_dimension(...) to internal_dof_block_dimension(...) master_dof_number(...) to internal_master_dof_number(...) and added paranoid tests. ------------------------------------------------------------------------ r696 | mly | 2014-04-28 09:24:52 +0100 (Mon, 28 Apr 2014) | 27 lines modified src/generic/block_preconditioner.h Finished commenting: void internal_return_block_vector(const unsigned& n, const DoubleVector& b, DoubleVector& v) const; void internal_get_block_vector( const unsigned& n, const DoubleVector& v, DoubleVector& b) const; void internal_get_block_vectors( const Vector& block_vec_number, const DoubleVector& v, Vector& s) const; void internal_get_block_vectors( const DoubleVector& v, Vector& s) const; void internal_return_block_vectors( const Vector& block_vec_number, const Vector& s, DoubleVector& v) const; void internal_return_block_vectors( const Vector& s, DoubleVector& v) const; void internal_get_block(const unsigned& i, const unsigned& j, MATRIX& output_block) const; ------------------------------------------------------------------------ r695 | mly | 2014-04-28 09:24:51 +0100 (Mon, 28 Apr 2014) | 3 lines modified: src/generic/block_preconditioner.h Finished commenting setup_matrix_vector_product(...) functions ------------------------------------------------------------------------ r694 | mly | 2014-04-28 09:24:51 +0100 (Mon, 28 Apr 2014) | 18 lines modified: src/generic/block_preconditioner.h and .cc 1) Renamed: internal_ndof_types_in(...) to nfine_grain_dof_types_in(...) 2) Finished commenting: Vector > doftype_coarsen_map_fine() const Vector get_fine_grain_dof_types_in(const unsigned& i) const unsigned nfine_grain_dof_types_in(const unsigned& i) const 3) Moved to private: void internal_get_block_vectors(...) const; void internal_return_block_vectors(...) const; 4) Moved to protected: void set_replacement_dof_block(...) ------------------------------------------------------------------------ r693 | mly | 2014-04-28 09:24:50 +0100 (Mon, 28 Apr 2014) | 20 lines modified: src/generic/block_preconditioner.h 1) Moved from public to private: internal_block_distribution_pt(...) 2) Finished commenting: const LinearAlgebraDistribution* block_distribution_pt(const unsigned& b) const LinearAlgebraDistribution* block_distribution_pt(const unsigned& b) LinearAlgebraDistribution* dof_block_distribution_pt(const unsigned& b) unsigned ndof_types_in_mesh(const unsigned& i) const 3) Cleaned up function: void clear_block_preconditioner_base() ------------------------------------------------------------------------ r692 | mly | 2014-04-28 09:24:50 +0100 (Mon, 28 Apr 2014) | 21 lines modified: src/generic/block_preconditioner.cc modified: src/generic/block_preconditioner.h modified: src/navier_stokes/navier_stokes_preconditioners.cc Details: 1) Renamed functions: block_number(...) to internal_block_number(...) index_in_block(...) to internal_index_in_block(...) external_block_number(...) to block_number(...) external_index_in_block(...) to index_in_block(...) 2) Updated comments for the above functions. 3) Moved functions from public to private: internal_block_number(...) internal_index_in_block(...) 4) in navier_stokes_preconditioners.cc, changed external_block_number(...) to block_number(...) and external_index_in_block(...) to index_in_block(...). ------------------------------------------------------------------------ r691 | mly | 2014-04-24 18:30:00 +0100 (Thu, 24 Apr 2014) | 35 lines modified: src/generic/block_preconditioner.h modified: src/navier_stokes/navier_stokes_preconditioners.cc ------------------------------------------------------------------------------- src/generic/block_preconditioner.h: 1) Finished commenting functions: const Mesh* mesh_pt(const unsigned& i) const unsigned nmesh() const 2) Moved from protected to private: void internal_return_block_vector(const unsigned& n, const DoubleVector& b, DoubleVector& v) const; void internal_get_block_vector( const unsigned& n, const DoubleVector& v, DoubleVector& b) const; void internal_get_block_vectors( const DoubleVector& v, Vector& s) const; void internal_return_block_vectors( const Vector& s, DoubleVector& v) const; void internal_get_block(const unsigned& i, const unsigned& j, MATRIX& output_block) const; ------------------------------------------------------------------------------- src/navier_stokes/navier_stokes_preconditioners.cc: 3) Removed some redundant code. ------------------------------------------------------------------------ r690 | mly | 2014-04-24 18:30:00 +0100 (Thu, 24 Apr 2014) | 11 lines modified: src/generic/block_preconditioner.h Finished commenting the functions: unsigned internal_nblock_types() const unsigned nblock_types() const unsigned internal_ndof_types() const unsigned ndof_types() const Moved the functions internal_nblock_types and internal_ndof_types to private. ------------------------------------------------------------------------ r689 | mly | 2014-04-24 18:29:59 +0100 (Thu, 24 Apr 2014) | 17 lines modified: src/generic/block_preconditioner.h and .cc Finished commenting the functions: void get_block_ordered_preconditioner_vector(const DoubleVector& v, DoubleVector& w); void return_block_ordered_preconditioner_vector(const DoubleVector& w, DoubleVector& v) const; void internal_get_block_ordered_preconditioner_vector( const DoubleVector& v, DoubleVector& w) const; void internal_return_block_ordered_preconditioner_vector( const DoubleVector& w, DoubleVector& v) const; Moved internal_get_block_ordered_preconditioner_vector(...) and internal_return_block_ordered_preconditioner_vector(...) to private. ------------------------------------------------------------------------ r688 | mly | 2014-04-24 16:03:46 +0100 (Thu, 24 Apr 2014) | 25 lines modified: src/generic/block_preconditioner.h and .cc Getting rid of all references to "precomputed" and "original" to distinguish between Richard's old code and my new code. Functions with names containing the word "precomputed" has already been deleted in a previous commit. The functions which uses them have been re-written (again, in a previous commit) to work more efficiently. Now we re-name a lot of function names: get_block_vectors_with_original_matrix_ordering to internal_get_block_vectors return_block_vectors_with_original_matrix_ordering to internal_return_block_vectors get_block_from_original_matrix to internal_get_block return_block_vector_with_original_matrix_ordering to internal_return_block_vector get_block_vector_with_original_matrix_ordering to internal_get_block_vector ------------------------------------------------------------------------ r687 | mly | 2014-04-24 16:03:45 +0100 (Thu, 24 Apr 2014) | 9 lines modified: src/generic/block_preconditioner.h and .cc Finshed commenting the functions void get_block_vector(const unsigned& n, const DoubleVector& v, DoubleVector& b) const; void return_block_vector(const unsigned& n, const DoubleVector& b, DoubleVector& v) const; ------------------------------------------------------------------------ r686 | mly | 2014-04-24 16:03:45 +0100 (Thu, 24 Apr 2014) | 17 lines modified: src/generic/block_preconditioner.h and .cc Finished commenting the following functions: void get_block_vectors(const Vector & block_vec_number, const DoubleVector& v, Vector& s) const; void get_block_vectors(const DoubleVector& v, Vector& s) const; void return_block_vectors(const Vector& block_vec_number, const Vector& s, DoubleVector& v) const; void return_block_vectors(const Vector& s, DoubleVector& v) const; ------------------------------------------------------------------------ r685 | mly | 2014-04-24 16:03:44 +0100 (Thu, 24 Apr 2014) | 13 lines modified: src/generic/block_preconditioner.h and .cc 1) Everywhere: renamed Auxiliary_distribution_pt to Auxiliary_block_distribution_pt 2) Move Auxiliary_block_distribution_pt to private. 3) Private function "insert_auxiliary_block_distribution(...)" to store a Vector/LinearAlgebraDistribution* pair. This performs paranoia checks. 4) Finished commenting the function return_concatenated_block_vector(...) ------------------------------------------------------------------------ r684 | mly | 2014-04-24 16:03:44 +0100 (Thu, 24 Apr 2014) | 6 lines modified: src/generic/block_preconditioner.h and .cc 1) Everywhere: Rename required_vector to block_vec_number 2) Added lots of comments to the function get_concatenated_block_vector(...). ------------------------------------------------------------------------ r683 | mly | 2014-04-24 11:07:54 +0100 (Thu, 24 Apr 2014) | 3 lines modified: src/generic/block_preconditioner.h and .cc Removed functions with names containing the word "precomputed". ------------------------------------------------------------------------ r682 | mly | 2014-04-24 11:07:54 +0100 (Thu, 24 Apr 2014) | 23 lines modified: src/generic/block_preconditioner.h and .cc 1) New function: void setup_matrix_vector_product(MatrixVectorProduct* matvec_prod_pt, CRDoubleMatrix* block_pt, const Vector& block_col_indices) Caters for concatenated block distributions, making use of the distributions in Auxiliary_distribution_pt. ------------------------------------------------------------------------------- 2) The function void setup_matrix_vector_product(MatrixVectorProduct* matvec_prod_pt, CRDoubleMatrix* block_pt, const unsigned& block_col_index) has been modified to be a wrapper around the new function above. ------------------------------------------------------------------------------- 3) Commented out all functions with names containing the word "precomputed", everything still works! ------------------------------------------------------------------------ r681 | mly | 2014-04-24 11:07:54 +0100 (Thu, 24 Apr 2014) | 3 lines modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Removed the get/return block vector debugging, now using the new functions, everything is shiny and great. ------------------------------------------------------------------------ r680 | mly | 2014-04-24 11:07:53 +0100 (Thu, 24 Apr 2014) | 4 lines modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Included temporary de-bugging tools for testing the new get/return vector functions in the BlockPreconditioner base class. ------------------------------------------------------------------------ r679 | mly | 2014-04-24 11:07:53 +0100 (Thu, 24 Apr 2014) | 56 lines modified: src/generic/block_preconditioner.h and .cc 1) Added two new functions: void get_concatenated_block_vector( const Vector& required_vector, const DoubleVector& v, DoubleVector& b); void return_concatenated_block_vector( const Vector& required_vector, const DoubleVector& b, DoubleVector& v) const; For get_concatenated_block_vector(...): given a Vector of unsigns describing which block vectors we want to get, this function will extract the relevant DoubleVectors all in one go and concatenate them for the user. For return_concatenated_block_vector(...): given a Vector of unsigns describing the block positions the concatenated vector should be returned to, this function splits the DoubleVector into the relevant sub-vectors and returns, all at once, for the user. The get_concatenated_block_vector function is not const because if the concatenated distribution is not used before i.e. not stored in Auxiliary_distribution_pt, it is created then stored for future use. ------------------------------------------------------------------------------- 2) The functions: void get_block_ordered_preconditioner_vector(const DoubleVector& v, DoubleVector& w); and void return_block_ordered_preconditioner_vector(const DoubleVector& w, DoubleVector& v) const; are re-implemented in terms of the function get_concatenated_block_vector(...) and return_concatenated_block_vector(...) respectively, calling them with the identity mapping. ------------------------------------------------------------------------------- 3) The function void get_block_ordered_preconditioner_vector( const DoubleVector& v, DoubleVector& w) const; is made non-const since it invokes get_concatenated_block_vector(...) which is not const since it may create distributions and store them for future use. ------------------------------------------------------------------------ r678 | mly | 2014-04-24 11:07:52 +0100 (Thu, 24 Apr 2014) | 49 lines modified: src/generic/block_preconditioner.cc 1) The function get_block_vectors_with_original_matrix_ordering( const DoubleVector& v, Vector& s) const is now a wrapper around get_block_vectors_with_original_matrix_ordering( const Vector& required_vector, const DoubleVector& v, Vector& s) const with the identity required_block vector. 2) The function return_block_vectors_with_original_matrix_ordering( const Vector& s, DoubleVector& v) const is now a wrapper around return_block_vectors_with_original_matrix_ordering( const Vector& required_vector, const Vector& s, DoubleVector& v) const with the identity required_vector vector. 3) The function get_block_vector(const unsigned& b, const DoubleVector& v, DoubleVector& w) const has been re-written to make use of the function get_block_vectors_with_original_matrix_ordering(...) to reduce communication. It no longer calls the function get_block_vector_with_precomputed_block_ordering(b,v,w); 4) The function return_block_vector(const unsigned& b, const DoubleVector& w, DoubleVector& v) const is re-written to make use of the function return_block_vectors_with_original_matrix_ordering(...) to reduce communication. It no longer calls the function return_block_vector_with_precomputed_block_ordering(b,w,v); ------------------------------------------------------------------------ r677 | mly | 2014-04-24 11:07:52 +0100 (Thu, 24 Apr 2014) | 13 lines modified: src/generic/block_preconditioner.h and .cc Re-wrote the get_block_vectors(...) and return_block_vectors(...) functions to make use of the new functions get_block_vectors_with_original_matrix_ordering(...) and return_block_vectors_with_original_matrix_ordering(...). Advantages: Communication is done once for all the dof-level block vectors we need. Disadvanges: None. This has massively reduced communication. ------------------------------------------------------------------------ r676 | mly | 2014-04-24 11:07:52 +0100 (Thu, 24 Apr 2014) | 32 lines modified: src/generic/block_preconditioner.h and .cc src/generic/block_preconditioner.h Added two new functions: void get_block_vectors_with_original_matrix_ordering(...) void return_block_vectors_with_original_matrix_ordering(...) These take a Vector of unsigned to indicate which block vector is required and extract all indicated block vectors at the same time. This functionality never existed, previously, if we want block vectors 1 and 3, we would have to extract them one at a time. Each extraction requires communication, this is done per Newton step and could be very costly! src/generic/block_preconditioner.cc Implementation of "void get_block_vectors_with_original_matrix_ordering(...)" and "void return_block_vectors_with_original_matrix_ordering(...)". In the function get_block_vector_with_precomputed_block_ordering(...) we use the Block_to_dof_map_fine variable instead of re-constructing the most fine grain block to dof mapping. Everywhere: There now exists a new interface for splitting and concatenation which takes Vectors of DoubleVectors of the form Vector instead of Vector<*DoubleVector>, so all the code to convert Vector to Vector is removed. ------------------------------------------------------------------------ r675 | mly | 2014-04-24 11:07:51 +0100 (Thu, 24 Apr 2014) | 28 lines modified: src/generic/double_vector.cc and .h Wrote wrappers around the following functions: DoubleVectorHelpers::split(...) DoubleVectorHelpers::split_without_communication(...) DoubleVectorHelpers::concatenate(...) DoubleVectorHelpers::concatenate_without_communication(...) These wrappers take a Vector of DoubleVectors, (as opposed to a Vector of pointers to DoubleVectors), created a tmp Vector of pointers to DoubleVector and passes it to the functions above. This is done to hide ugly code, namely creating the Vector of pointers to DoubleVector objects by either invoking new and delete, or creating Vector foo then creating Vector<*DoubleVector> bar and performing the following loop: for... foo[i] = &bar[i]; end The following self tests are modified to take advantage of this new interface: modified: self_test/mpi/vector_concatenation/vector_concatenation.cc modified: self_test/mpi/vector_concatenation_without_communication/vector_concatenation_without_communication.cc modified: self_test/mpi/vector_split/vector_split.cc modified: self_test/mpi/vector_split_without_communication/vector_split_without_communication.cc ------------------------------------------------------------------------ r674 | mly | 2014-04-24 11:07:50 +0100 (Thu, 24 Apr 2014) | 10 lines modified: src/generic/block_preconditioner.cc modified: src/generic/block_preconditioner.h src/generic/block_preconditioner.cc Fixed comment in internal_get_block_ordered_preconditioner_vector(...) Put in paranoia test in get_dof_level_block(...) src/generic/block_preconditioner.h Fixed comments in get/return block vector(s) functions ------------------------------------------------------------------------ r673 | mly | 2014-04-24 11:07:50 +0100 (Thu, 24 Apr 2014) | 14 lines modified: src/generic/block_preconditioner.h and .cc Changed get_block(...)'s argument so that ignore_replacement_block is passed by const reference, not by value (also changed the .cc file to reflect this change). Renamed set_master_preconditioner_matrix(...) to set_master_matrix_pt(...). Added comments to the functions following functions: get_block(...), set_master_matrix_pt(...), get_dof_level_block(...), get_concatenated_block(...). ------------------------------------------------------------------------ r672 | mly | 2014-04-17 16:01:32 +0100 (Thu, 17 Apr 2014) | 4 lines modified: src/generic/block_preconditioner.h Added more comments, even included ASCII art-like depiction of what I'm doing in get_block(...). ------------------------------------------------------------------------ r671 | mly | 2014-04-17 16:01:32 +0100 (Thu, 17 Apr 2014) | 8 lines modified: src/generic/block_preconditioner.cc modified: src/generic/block_preconditioner.h Moved the contents of get_coarsened_block(...) into get_block(...). Deleted the get_coarsened_block function. Fixed a lot of comments. ------------------------------------------------------------------------ r670 | mly | 2014-04-17 16:01:31 +0100 (Thu, 17 Apr 2014) | 2 lines modified: src/generic/block_preconditioner.h Fixed a lot of comments. ------------------------------------------------------------------------ r669 | mly | 2014-04-17 16:01:31 +0100 (Thu, 17 Apr 2014) | 3 lines modified: src/generic/preconditioner.h Put the Setup_time back in, I required it in my code. ------------------------------------------------------------------------ r668 | dshepherd | 2014-04-17 13:51:32 +0100 (Thu, 17 Apr 2014) | 4 lines Fix wrong function name in Preconditioner base Preconditioner::turn_into_subsidiary_block_preconditioner was called Preconditioner::turn_into_subsidiary_preconditioner ------------------------------------------------------------------------ r667 | dshepherd | 2014-04-15 15:00:04 +0100 (Tue, 15 Apr 2014) | 4 lines Slightly increase numerical zero (to 1e-10) in axisym_navier_stokes/torus The test was failing due to errors of ~1e-15 in a few values in the solution. ------------------------------------------------------------------------ r666 | dshepherd | 2014-04-15 15:00:04 +0100 (Tue, 15 Apr 2014) | 6 lines Fix bug where block_setup was allowed to modify its input vector This caused problems when the input vector was stored elsewhere, because the stored version would be silently modified by block setup. In particular it broke all general purpose block preconditioners with non-trivial dof-to-block mappings. ------------------------------------------------------------------------ r665 | dshepherd | 2014-04-15 15:00:04 +0100 (Tue, 15 Apr 2014) | 7 lines Move setup calculations from turn_into_subs_block to block_setup * No need to do them immediately * Moving to block_setup allows much more flexibility in construction of preconditioners. In particular all the construction can take place in a constructor/factory instead of needing to put some in setup(). ------------------------------------------------------------------------ r664 | dshepherd | 2014-04-15 15:00:03 +0100 (Tue, 15 Apr 2014) | 6 lines Small tidy ups in preconditioners * Remove redundant semi-colons * Rearrange logic in upper/lower triangular preconditioners to make more sense. ------------------------------------------------------------------------ r663 | dshepherd | 2014-04-15 15:00:03 +0100 (Tue, 15 Apr 2014) | 6 lines Add turn_into_subsidiary_preconditioner in Preconditioner base The versions in the base class do nothing. The interface functions greatly simplify writing preconditioners which can have both block and non-block subsidiary preconditioners. ------------------------------------------------------------------------ r662 | dshepherd | 2014-04-15 15:00:03 +0100 (Tue, 15 Apr 2014) | 1 line Make input vectors const in turn_into_subsidiary_block_preconditioner ------------------------------------------------------------------------ r661 | dshepherd | 2014-04-15 15:00:02 +0100 (Tue, 15 Apr 2014) | 7 lines Rename block setup overload in GPBlockPreconditioners for safety * block_setup is non-virtual so would have to be very careful when calling it. * Renamed it instead since it should only be called from inside the preconditioners own setup() anyway. ------------------------------------------------------------------------ r660 | dshepherd | 2014-04-15 15:00:02 +0100 (Tue, 15 Apr 2014) | 11 lines In block preconditioners have matrix_pt() get pt from master * matrix_pt() for block preconditoners always needs to be the full Jacobian. * But setup(...) sets it to the block (in subs block preconditioners), so we had to manually change it always * Instead just get the correct one from the master! * Might need some renames to make all this clearer ------------------------------------------------------------------------ r659 | dshepherd | 2014-04-15 15:00:02 +0100 (Tue, 15 Apr 2014) | 4 lines Make all functions in preconditioner base class virtual * This is needed for preconditioners which operate only on the main matrix of a sum of matrices (we need to be able to overload the functions). ------------------------------------------------------------------------ r658 | dshepherd | 2014-04-15 15:00:02 +0100 (Tue, 15 Apr 2014) | 1 line Remove unused Setup_time variable from preconditioner base ------------------------------------------------------------------------ r657 | mly | 2014-04-11 04:46:43 +0100 (Fri, 11 Apr 2014) | 1 line Fixed memory leak in block_preconditioner.h and .cc ------------------------------------------------------------------------ r656 | mly | 2014-04-11 04:46:42 +0100 (Fri, 11 Apr 2014) | 5 lines modified: src/generic/block_preconditioner.h Fixed comments for BlockSelector modified: src/generic/vector_matrix.h Fixed comments ------------------------------------------------------------------------ r655 | mly | 2014-04-08 15:27:56 +0100 (Tue, 08 Apr 2014) | 3 lines modified: src/generic/block_preconditioner.cc Fixed comments ------------------------------------------------------------------------ r654 | mly | 2014-04-03 10:28:11 +0100 (Thu, 03 Apr 2014) | 2 lines modified: src/generic/Makefile.am Fixed a conflict with the previous merge ------------------------------------------------------------------------ r653 | mly | 2014-04-03 10:28:11 +0100 (Thu, 03 Apr 2014) | 3 lines modified: src/multi_physics/fsi_preconditioners.h Moved the timing to the correct place. I moved it to an incorrect place in the previous modification ------------------------------------------------------------------------ r652 | mly | 2014-04-03 10:28:10 +0100 (Thu, 03 Apr 2014) | 163 lines Block preconditioning framework is fully working. Needs cleaning up. List of modified and new files: modified: .gitignore modified: config/configure.ac_scripts/core.dir_list modified: self_test/Makefile.am new file: self_test/generic/Makefile.am new file: self_test/generic/vector_matrix_test/Makefile.am new file: self_test/generic/vector_matrix_test/validata/vector_matrix_test.dat.gz new file: self_test/generic/vector_matrix_test/validate.sh new file: self_test/generic/vector_matrix_test/vector_matrix_test.cc modified: src/biharmonic/biharmonic_preconditioner.cc modified: src/generic/Makefile.am modified: src/generic/Vector.h modified: src/generic/block_preconditioner.cc modified: src/generic/block_preconditioner.h modified: src/generic/general_purpose_block_preconditioners.cc modified: src/generic/linear_algebra_distribution.cc modified: src/generic/linear_algebra_distribution.h modified: src/generic/matrices.cc modified: src/generic/matrices.h modified: src/generic/oomph_utilities.h new file: src/generic/prettyprint98.h new file: src/generic/vector_matrix.h modified: src/multi_physics/fsi_preconditioners.h modified: src/multi_physics/pseudo_elastic_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h modified: src/navier_stokes/navier_stokes_preconditioners.cc modified: src/navier_stokes/navier_stokes_preconditioners.h In detail: Modified: src/biharmonic/biharmonic_preconditioner.cc In void ExactSubBiharmonicPreconditioner::setup(), using BlockPreconditioner::get_concatenated_block() function to get the preconditioner matrix. ------------------------------------------------------ Modified: src/generic/Makefile.am Added vector_matrix.h and prettyprint98.h to Makefile.am ------------------------------------------------------ New file: src/generic/prettyprint98.h ------------------------------------------------------ Modified: src/generic/oomph_utilities.h Included printpretty98.h ------------------------------------------------------ New file: src/generic/vector_matrix.h Self tests for VectorMatrix: New file: self_test/generic/Makefile.am New file: self_test/generic/vector_matrix_test/Makefile.am New file: self_test/generic/vector_matrix_test/validata/vector_matrix_test.dat.gz New file: self_test/generic/vector_matrix_test/validate.sh New file: self_test/generic/vector_matrix_test/vector_matrix_test.cc Modified: "self_test/Makefile.am to" include generic subdirectory. Modified: "config/configure.ac_scripts/core.dir_list" to include self_test/generic and self_test/generic/vector_matrix_test Modified: .gitignore: added the binary file: "self_test/generic/vector_matrix_test/vector_matrix_test" ------------------------------------------------------ Modified: src/generic/Vector.h: Fixed spelling mistake in comment. ------------------------------------------------------ Modified: src/generic/linear_algebra_distribution.h and .cc Changed the argument of << operator to take a reference, not a copy! Fixed a few spelling errors in comments. ------------------------------------------------------ Modified: src/generic/matrices.h and .cc Fixed a few comments. ------------------------------------------------------ Modified: src/generic/general_purpose_block_preconditioners.cc The ExactBlockPreconditoner::setup() function now gets the preconditioner matrix by calling the function get_concatenated_block(...). This function has superceeded the function get_preconditioner_matrix(...). The get_preconditioner_matrix function is very restrictive, the only block it can return is a block corresponding to the whole Jacobian. I.e. you cannot get a sub-set of the Jacobian. For example, if the Jacobian is blocked as: J_00 J_01 J_02 J_10 J_11 J_12 J_20 J_21 J_22 Then calling get_preconditioner_matrix will return a concatenation (without communication) of all the blocks. There is no way to get just the concatenation of the blocks: J_00 J_01 J_10 J_11 Whereas you can via the function get_concatenated_block(...). ------------------------------------------------------ Modified: src/multi_physics/fsi_preconditioners.h In SimpleFSIPreconditioner::setup(), now using the function get_concatenated_block(...). Removed calls to new CRDoubleMatrix, replaced it with an encapulated version which does not use new, but will be automatically destroyed when it goes out of scope. Also, the matrices are kept for are too long... I don't know why was the block extracted, then two different MatrixVectorProducts were set up before the block was used to set up the preconditioner. ------------------------------------------------------ Modified: src/multi_physics/pseudo_elastic_preconditioner.cc Using the new this->set_replacement_dof_block(...) functionality - it works! Using new get_concatenated_block(...) functionality, this part refers to the old code... which is being kept alive but never tested. ------------------------------------------------------ Modified: src/navier_stokes/navier_stokes_preconditioners.h Cleaned up the code. ------------------------------------------------------ Modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Using the "get_concatenated_block" function when exact preconditioning for the whole NS block. ------------------------------------------------------ Modified: src/generic/block_preconditioner.h and .cc There is still some tidying up to be done, but it's all working. A few new features are get_concatenated_block() and set_dof_level_block There are still a few functions and variables which needs renaming and comments to update. I'll do this soon. ------------------------------------------------------------------------ r651 | mly | 2014-04-03 10:28:09 +0100 (Thu, 03 Apr 2014) | 8 lines block_preconditioner.h - re-implemented Richard's binary seach function in terms of STL functions. I also renamed it to get_index_of_value instead of get_index_of_element. There is an optional parameter for the user to indicate if the vector is sorted or not. The old function only works if the vector is sorted, this is not the case anymore! Both version is tested and it works. ------------------------------------------------------------------------ r650 | mly | 2014-04-03 10:28:08 +0100 (Thu, 03 Apr 2014) | 13 lines New function CRDoubleMatrixHelpers::deep_copy(...) There is a new function in matrices.h: inline void deep_copy(const CRDoubleMatrix* const in_matrix_pt, CRDoubleMatrix& out_matrix) Also auto-indented the CRDoubleMatixHelpers namespace. The cr_double_matrix_deep_copy(...) function was moved out. matrices.cc - comment added about the incorrect copy constructor for CRDoubleMatrix... it is clearly wrong. I can't be bothered fixing it as I don't use it, and there is currently no code to test it in parallel. ------------------------------------------------------------------------ r649 | mly | 2014-04-03 10:28:08 +0100 (Thu, 03 Apr 2014) | 1 line block_preconditioner.cc and .h - cleaned up code. ------------------------------------------------------------------------ r648 | mly | 2014-04-03 10:28:07 +0100 (Thu, 03 Apr 2014) | 70 lines Block Preconditioning Framework always work the most fine grain blocks. demo_drivers/interaction/fsi_channel_seg_and_precond/validate.sh Fixed typo. =============================================================================== src/generic/block_preconditioner.h Renamed variable Preconditioner_matrix_distribution_pt to Internal_preconditioner_matrix_distribution_pt. This is the concatenation of the internal block distributions. Renamed access function preconditioner_matrix_distribution_pt() to internal_preconditioner_matrix_distribution_pt(). New variable Preconditioner_matrix_distribution_pt, contains the concatenation of the external blocks. New access function preconditioner_matrix_distribution_pt(), for the above variable. Modified get_block() to always work with the most fine grained blocks (the dof-level blocks). The two functions get_block_ordered_preconditioner_vector and return_block_ordered_preconditioner_vector are renamed to internal_... in their place, two new functions (with the same name) is written to get and return the vectors based on the external block distributions. The function block_distribution_pt(...) is renamed to internal_... in it's place, a function with the same name is written to return the distributions of the external blocks. Modified setup_matrix_vector_product(...) function to always use the correct external block distribution. =============================================================================== src/generic/block_preconditioner.cc block_setup(...): Always set up the external block distributions, in Block_distribution_pt Created the concatenation of external block distributions in Preconditioner_matrix_distribution_pt get_blocks(): Fixed bug with the incorrect number of blocks used. =============================================================================== The following files were affected: demo_drivers/linear_solvers/driven_cavity_with_simple_lsc_preconditioner.cc demo_drivers/mpi/solvers/fsi_channel_with_leaflet.cc src/multi_physics/fsi_preconditioners.h src/multi_physics/pseudo_elastic_fsi_preconditioner.cc src/multi_physics/pseudo_elastic_preconditioner.cc src/solid/solid_preconditioners.cc Using setup_matrix_vector_product(...) method. src/biharmonic/biharmonic_preconditioner.cc src/generic/general_purpose_block_preconditioners.cc src/multi_physics/fsi_preconditioners.h src/multi_physics/pseudo_elastic_preconditioner.cc src/navier_stokes/lagrange_enforced_flow_preconditioner.h src/navier_stokes/navier_stokes_preconditioners.cc Now uses the correct external block distributions. All preconditioner self tests pass. ------------------------------------------------------------------------ r647 | mly | 2014-04-03 10:28:06 +0100 (Thu, 03 Apr 2014) | 13 lines Still modifying the block preconditioning framework, still something wrong when I take out the precomputed-ness... Slight modifications: src/generic/block_preconditioner.cc src/generic/block_preconditioner.h Renamed Precomputed_block_distribution_pt to Block_distribution_pt Renamed Doftype_to_block_map to Block_to_dof_map_coarse src/navier_stokes/navier_stokes_preconditioners.cc Changed to reflect the renaming of variables above. All preconditioner self tests still pass. ------------------------------------------------------------------------ r646 | mly | 2014-04-03 10:28:05 +0100 (Thu, 03 Apr 2014) | 13 lines Fixed replacement dof block bug within general purpose block preconditioner. I lied, I was too quick to commit, now all the self tests actually passes. src/generic/general_purpose_block_preconditioners.cc Fixed bug with replace blocks. I forgot to take out some legacy code which affected the new framework. src/multi_physics/pseudo_elastic_preconditioner.cc Fixed comment. All self test, and my self tests still pass. ------------------------------------------------------------------------ r645 | mly | 2014-04-03 10:28:05 +0100 (Thu, 03 Apr 2014) | 4 lines modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Auto indented the file using GNU C++ style. Nothing else has changed. All preconditioner self tests, and my self test still pass ------------------------------------------------------------------------ r644 | mly | 2014-04-03 10:28:04 +0100 (Thu, 03 Apr 2014) | 20 lines Modified a few preconditioners... src/generic/block_preconditioner.cc 1) Corrected/added comments. 2) Fixed bug with replacement blocks, we now build the concatenated block distribution with Internal_block_distribution_pt src/multi_physics/pseudo_elastic_preconditioner.cc 1) Corrected/added comments 2) Now we pass only the modified blocks to the subsidiary block preconditioners. src/navier_stokes/lagrange_enforced_flow_preconditioner.h Almost a complete re-write of the setup(...) function. 1) Move a lot of code around. 2) Tighter encapsulation of variables. 3) Fixed several memory leaks 4) Added tonnes more comments, it's practically a novel now. 5) Now we pass only the modified blocks to subsidiary block preconditioners. ------------------------------------------------------------------------ r643 | mly | 2014-04-03 10:28:04 +0100 (Thu, 03 Apr 2014) | 18 lines Modified: lagrange_enforced_flow_preconditioner.h The following variables are now stored locally as class variables: 1) Vector Mesh_pt, since there is no mapping between master and subsidiary block preconditioner meshes. 2) unsigned My_nmesh, since this preconditioner requires the number of meshes relevant to this preconditioner to create the dof maps (for both block_setup() and turn_into_subsidiary_block_preconditioner() ). 3) Vector My_ndof_types_in_mesh, for the same reason as above, we need the know how many dof types are in each mesh relevant to this block preconditioner. There is no mapping for the meshes between master and subsidiary block preconditioner. Added a lot more comments and improved efficiency in general. All self tests and my own self tests still pass. ------------------------------------------------------------------------ r642 | mly | 2014-04-03 10:28:04 +0100 (Thu, 03 Apr 2014) | 9 lines New functions Mesh::elemental_dimension(...), Mesh::nodal_dimension() modified: src/generic/mesh.cc modified: src/generic/mesh.h These two new functions return the elemental / nodal dimension of a mesh from the first element in the mesh. Some fancy (and long) MPI coding is required in cases where the mesh is distributed such that there is no element on a particular processor. ------------------------------------------------------------------------ r641 | mly | 2014-04-03 10:28:03 +0100 (Thu, 03 Apr 2014) | 12 lines Changed lagrange_enforced_flow_preconditioner.h: Took out the variable Preconditioner* W_preconditioner_pt Renamed Vector W_preconditioner_pts to Lagrange_multiplier_preconditioner_pt. Added functionality to set the lagrange multiplier preconditioners via function pointers. src/multi_physics/pseudo_elastic_preconditioner.h: Fixed some comments. ------------------------------------------------------------------------ r640 | mly | 2014-04-03 10:28:03 +0100 (Thu, 03 Apr 2014) | 19 lines block_preconditioner.h - added error checking to make it more rigorous, details below: set_mesh(...) - corrected error message. mesh_pt(...) - changed the code so that only the upper-most master block preconditioner can call this function. Otherwise an error is outputted. nmesh(...) - changed the code so that only the upper-most master block preconditioner can call this function. Otherwise an error is outputted. ndof_types_in_mesh(...) - changed the code so that only the upper-most master block preconditioner can call this function. Otherwise an error is outputted. demo_drivers/linear_solvers/driven_cavity_with_simple_lsc_preconditioner.cc: Added comment regarding incorrect code which is never executed. All preconditioner self tests still pass. ------------------------------------------------------------------------ r639 | mly | 2014-04-03 10:28:02 +0100 (Thu, 03 Apr 2014) | 3 lines linear_algebra_distribution.h and .cc: Fixed comments. Fixed some spelling mistakes for the function LinearAlgebraDistributionHelpers::concatenate(...). ------------------------------------------------------------------------ r638 | mly | 2014-04-03 10:28:02 +0100 (Thu, 03 Apr 2014) | 11 lines block_preconditioner.h: added two new vectors of distributions. Added the two class variables: Vector Dof_block_distribution_pt; Vector Block_distribution_pt; These will be used to store the distribution of the dof level blocks and the actual blocks. We store the distributions instead of calculating them on the fly since concatenating distributions requires communication. All preconditioner self tests still pass ------------------------------------------------------------------------ r637 | mly | 2014-04-03 10:28:01 +0100 (Thu, 03 Apr 2014) | 9 lines block_preconditoner.h and .cc Ranamed Block_distribution_pt to Internal_block_distribution_pt Changed the following files to reflect the renaming: src/biharmonic/biharmonic_preconditioner.cc src/generic/general_purpose_block_preconditioners.cc src/multi_physics/fsi_preconditioners.h src/multi_physics/pseudo_elastic_preconditioner.cc src/navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r636 | mly | 2014-04-03 10:28:01 +0100 (Thu, 03 Apr 2014) | 11 lines block_preconditoner.h and .cc changed the nblock_types() function. Changed the nblock_types() function to return Doftype_to_block_map.size(). This lookup list should always be set up, it is set up in the block_setup(...) function. Removed the function nblock_types_precomputed(). Replaced everywhere where nblock_types_precomputed with nblock_types() All preconditioner self tests still pass ------------------------------------------------------------------------ r635 | mly | 2014-04-03 10:28:00 +0100 (Thu, 03 Apr 2014) | 18 lines block_preconditioner.h: changed how ndof_types() works. modified: demo_drivers/multi_physics/3d_boussinesq_convection/3d_ref_b_convect.cc Put a comment above ndof_types() to put a comment on top of ndof_types(). modified: src/generic/block_preconditioner.h Changed the ndof_types() function to return Doftype_to_coarsen_map_coarse.size() if it is a subsidiary block preconditioner, otherwise the internal_ndof_types() function is called. This is the correct way to report the ndof types required by the preconditioner within the re-write. Because the Doftype_to_coarsen_map_coarse vector is always filled in, if no dof types are coarsened, then Doftype_coarsen_map_coarse.size() == Internal_ndof_types. Removed the function ndof_types_precomputed(). All preconditioner self tests still pass. ------------------------------------------------------------------------ r634 | mly | 2014-04-03 10:28:00 +0100 (Thu, 03 Apr 2014) | 57 lines block_preconditioner.h and .cc: changed internal_ndof_types(...) and internal_nblock_types() functions. The internal_ndof_types() and internal_nblock_types() accepted an optional parameter (a boolean) which indicated if the underlying number of dof / block types should be returned or the block/dof types that the preconditioner expects. The separation between the underlying dof/block types and the dof/blocks the preconditioner expects comes from the coarsening of dof types machinery. Since I wish to hide the coarsening machinery from the writer of the preconditioner (that is, the internal_ndof_types should not be considered when writing a block preconditioner), I have separated the functions internal_ndof_types(const bool& foo = real_ndof_types) and internal_nblock_types(const bool& foo = real_nblock_types) into two functions: internal_ndof_types(true) -> internal_ndof_types() internal_ndof_types(false) -> ndof_types() internal_nblock_types(true) -> internal_nblock_types() internal_nblock_types(false) -> nblock_types() I have had to make the following changes: Changed calls to internal_ndof_types() to ndof_types() in the following files: ./src/generic/block_preconditioner.cc ./src/multi_physics/pseudo_elastic_preconditioner.cc ./src/solid/solid_preconditioners.cc ./src/navier_stokes/navier_stokes_preconditioners.cc ./src/navier_stokes/lagrange_enforced_flow_preconditioner.h Changed calls to internal_ndof_types(true) to internal_ndof_types() in the following files: ./src/generic/block_preconditioner.h ./src/generic/block_preconditioner.cc ./src/navier_stokes/navier_stokes_preconditioners.cc Changed calls to internal_nblock_types() to nblock_types() in the following files: ./demo_drivers/linear_solvers/simple_block_preconditioners.h ./src/generic/general_purpose_block_preconditioners.cc ./src/biharmonic/biharmonic_preconditioner.cc ./src/multi_physics/pseudo_elastic_preconditioner.cc ./src/multi_physics/fsi_preconditioners.h ./src/navier_stokes/lagrange_enforced_flow_preconditioner.h Changed calls to internal_nblock_types(true) to internal_nblock_types() in the following files: ./src/generic/block_preconditioner.h ./src/generic/block_preconditioner.cc ./src/navier_stokes/navier_stokes_preconditioners.cc I also fixed a comment in ./src/generic/block_preconditioner.h ------------------------------------------------------------------------ r633 | mly | 2014-04-03 10:27:59 +0100 (Thu, 03 Apr 2014) | 33 lines block_preconditioner.h and .cc: fixed dof type coarsening look up lists. block_preconditioner.h void turn_into_subsidiary_block_preconditioner(...) Renamed dof_number_in_master_preconditioner_coarse -> doftype_in_master_preconditioner_coarse Renamed dof_coarsen_map_coarse -> doftype_coarsen_map_coarse Added functions: Vector get_fine_grain_dof_types_in(unsigned& i) const Vector > doftype_coarsen_map_fine() const unsigned internal_ndof_types_in(unsigned& i) const Added variables: Vector > Doftype_coarsen_map_fine Vector Doftype_in_master_preconditioner_coarse src/generic/block_preconditioner.cc Changed the two turn_into_subsidiary_block_preconditioner(...) functions to set up the look up lists Doftype_in_master_preconditioner_fine and Doftype_coarsen_map_fine block_setup(...) sets up the identity mapping for the vectors Doftype_coarsen_map_fine Doftype_coarsen_map_coarse It will also set up the Doftype_to_block_map vector. lagrange_enforced_flow_preconditioner.h: Added some debugging stuff, which has been commented out. I will remove it once everything works. All preconditioner self tests still pass! ------------------------------------------------------------------------ r632 | mly | 2014-04-03 10:27:59 +0100 (Thu, 03 Apr 2014) | 10 lines block_preconditioner.h and .cc: Renamed variables: Block_to_block_map to Doftype_to_block_map Doftype_to_doftype_map to Doftype_coarsen_map_coarse Dof_number_in_master_preconditioner to Doftype_in_master_preconditioner_fine Files affected: modified: src/navier_stokes/navier_stokes_preconditioners.cc Changed Block_to_block_map to Doftype_to_block_map ------------------------------------------------------------------------ r631 | mly | 2014-04-03 10:27:58 +0100 (Thu, 03 Apr 2014) | 11 lines modified: src/generic/block_preconditioner.cc modified: src/generic/block_preconditioner.h get_block(...) function - uses cr_double_matrix_deep_copy checks for precomputed blocks by Replacement_dof_block_pt.get(i,j) == 0. get_coarsened_block(...) Checks if replacement blocks have been set by checking if Replacement_block_pt.get(i,j) == 0 fixed memory leak. All preconditioner self tests still pass! ------------------------------------------------------------------------ r630 | mly | 2014-04-03 10:27:58 +0100 (Thu, 03 Apr 2014) | 53 lines Changed the recplacement block container from a DenseMatrix to MapMatrix Details: * block_preconditioner.h and .cc Deleted class variable Preconditioner_blocks_have_been_precomputed. bool preconditioner_blocks_have_been_precomputed() const now returns Replaced_dof_block_pt.nnz()!= 0 set_replacement_block(...) renamed to set_replacement_dof_block(...) which now takes indices i, j and a pointer to the replaced dof block. Affected files: * general_purpose_block_preconditioners.cc Because we need to have a DenseMatrix, we created a temporary variable to hold the blocks from the Replacement_dof_block_pt. Soon this will have to be replaced get_block(...), which will return the correct block. I.e. only the else statement should exist. I will do this later. * pseudo_elastic_preconditioner.cc Since the norm still has to be precomputed with DenseMatrix, we have left the "solid_matrix_pt" as it is, and looped through this, setting the replaced blocks: // Set the replacement blocks. for (unsigned row_i = 0; row_i < n_solid_dof_types; row_i++) { for (unsigned col_i = 0; col_i < n_solid_dof_types; col_i++) { s_prec_pt->set_replacement_dof_block(row_i,col_i, solid_matrix_pt(row_i,col_i)); } } * lagrange_enforced_flow_preconditioner.h: Similarly as above, we loop through "f_subblock_pt", and setting each replace block: // Set the replacement blocks. for (unsigned row_i = 0; row_i < N_fluid_doftypes; row_i++) { for (unsigned col_i = 0; col_i < N_fluid_doftypes; col_i++) { navier_stokes_block_preconditioner_pt ->set_replacement_dof_block(row_i,col_i, f_subblock_pt(row_i,col_i)); } } * navier_stokes_preconditioners.cc modified to reflect the renaming of the function above. All self tests still pass. ------------------------------------------------------------------------ r629 | mly | 2014-04-03 10:27:57 +0100 (Thu, 03 Apr 2014) | 2 lines modified: src/generic/map_matrix.h Made arguments of the copy constructor const. ------------------------------------------------------------------------ r628 | mly | 2014-04-03 10:27:57 +0100 (Thu, 03 Apr 2014) | 19 lines modified: block_preconditioner.h and .cc Renamed class variable Precomputed_block_pt to Replacement_block_pt. Renamed function variable n_dof_types to internal_n_dof_types in function "void BlockPreconditioner::block_setup()". Renamed function set_precomputed_blocks(...) to set_replacement_block(...) Affected files: general_purpose_block_preconditioner.cc: Renamed variable Precomputed_block_pt to Replacement_block_pt Renamed function set_precomputed_blocks(...) to set_replacement_block(...) pseudo_elastic_preconditioner.cc and lagrange_enforced_flow_preconditioner.h: Renamed function set_precomputed_blocks(...) to set_replacement_block(...) All preconditioner self tests passes. ------------------------------------------------------------------------ r627 | mly | 2014-04-03 10:27:56 +0100 (Thu, 03 Apr 2014) | 36 lines block_preconditioner.h and .cc: changed ndof_types() to internal_ndof_types() and nblock_types() to internal_nblock_types() The following files were modified as ndof_types() and nblock_types() are public functions called by other preconditioners. modified: demo_drivers/linear_solvers/simple_block_preconditioners.h modified: src/biharmonic/biharmonic_preconditioner.cc modified: src/generic/block_preconditioner.cc modified: src/generic/block_preconditioner.h modified: src/generic/general_purpose_block_preconditioners.cc modified: src/multi_physics/fsi_preconditioners.h modified: src/multi_physics/pseudo_elastic_preconditioner.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h modified: src/navier_stokes/navier_stokes_preconditioners.cc modified: src/solid/solid_preconditioners.cc All preconditioner self tests passes (listed below): demo_drivers/bifurcation_tracking demo_drivers/mpi/distribution/bifurcation_tracking demo_drivers/mpi/solvers demo_drivers/mpi/multi_domain/fsi_channel_with_leaflet demo_drivers/mpi/multi_domain/pseudo_solid_collapsible_tube demo_drivers/biharmonic/two_d_biharmonic demo_drivers/multi_physics/3d_boussinesq_convection demo_drivers/solid/prescribed_displ_lagr_mult demo_drivers/linear_solvers demo_drivers/interaction/fsi_channel_with_leaflet demo_drivers/interaction/turek_flag demo_drivers/interaction/pseudo_solid_fsi_channel_with_leaflet demo_drivers/interaction/fsi_channel_seg_and_precond demo_drivers/interaction/pseudo_solid_collapsible_tube demo_drivers/navier_stokes/schur_complement_preconditioner demo_drivers/navier_stokes/flux_control demo_drivers/axisym_navier_stokes/torus demo_drivers/womersley/one_d_womersley ------------------------------------------------------------------------ r626 | mly | 2014-04-03 10:27:55 +0100 (Thu, 03 Apr 2014) | 4 lines block_preconditioner.h and .cc: changed renamed Nblock_types and Ndof_types to Internal_nblock_types and Internal_nblock_types respectively. All self tests passed. ------------------------------------------------------------------------ r625 | mly | 2014-04-03 10:27:55 +0100 (Thu, 03 Apr 2014) | 4 lines modified: src/generic/linear_algebra_distribution.cc Moved a "my_rank" variable inside MPI headers, since it appeared unused when compiled without mpi ------------------------------------------------------------------------ r624 | mly | 2014-04-03 10:27:55 +0100 (Thu, 03 Apr 2014) | 10 lines modified: demo_drivers/womersley/one_d_womersley/flux_control_elements.h This "block preconditionable" element has the two functions: nblock_types() and get_block_numbers_for_unknowns(...) These function names have been changed to: ndof_types() and get_dof_numbers_for_unknowns(...) I have added comments but have not fixed this since I have no self test for this. ------------------------------------------------------------------------ r623 | mly | 2014-04-03 10:27:54 +0100 (Thu, 03 Apr 2014) | 50 lines Modified all block preconditionable elements: Have looked at all instances of the functions: unsigned ndof_types() and made it const. get_dof_numbers_for_unknowns is also made consts. Lots of comments are changed. Variable names are changed to reflect what they really mean, for example, the vector block_map is now called dof_map. ALL SELF TESTS PASS List of files changed in this commit: demo_drivers/axisym_navier_stokes/counter_rotating_disks/linearised_axisym_navier_stokes_elements.h demo_drivers/interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc demo_drivers/interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube_work.cc demo_drivers/interaction/pseudo_solid_fsi_channel_with_leaflet/fsi_channel_with_leaflet_precond.cc demo_drivers/linear_solvers/driven_cavity_with_simple_lsc_preconditioner.cc demo_drivers/linear_solvers/two_d_linear_elasticity_with_simple_block_diagonal_preconditioner.cc demo_drivers/mpi/multi_domain/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc demo_drivers/multi_physics/3d_boussinesq_convection/3d_ref_b_convect.cc demo_drivers/multi_physics/3d_boussinesq_convection/my_boussinesq_elements.h demo_drivers/solid/prescribed_displ_lagr_mult/prescribed_displ_lagr_mult_precond.cc src/axisym_linear_elasticity/axisym_linear_elasticity_elements.h src/axisym_navier_stokes/Taxisym_navier_stokes_elements.h src/axisym_navier_stokes/axisym_navier_stokes_elements.cc src/axisym_navier_stokes/axisym_navier_stokes_elements.h src/beam/beam_elements.cc src/beam/beam_elements.h src/biharmonic/biharmonic_elements.h src/generalised_time_harmonic_linear_elasticity/generalised_time_harmonic_linear_elasticity_elements.h src/generic/displacement_control_element.h src/generic/elements.h src/generic/pseudosolid_node_update_elements.h src/linear_elasticity/linear_elasticity_elements.h src/multi_physics/multi_domain_boussinesq_elements.h src/navier_stokes/Tnavier_stokes_elements.h src/navier_stokes/impose_impenetrability_element.h src/navier_stokes/impose_parallel_outflow_element.h src/navier_stokes/navier_stokes_elements.cc src/navier_stokes/navier_stokes_elements.h src/navier_stokes/navier_stokes_flux_control_elements.h src/shell/shell_elements.cc src/shell/shell_elements.h src/solid/solid_elements.h src/solid/solid_traction_elements.h src/spherical_navier_stokes/spherical_navier_stokes_elements.cc src/spherical_navier_stokes/spherical_navier_stokes_elements.h src/time_harmonic_fourier_decomposed_linear_elasticity/time_harmonic_fourier_decomposed_linear_elasticity_elements.h src/time_harmonic_linear_elasticity/time_harmonic_linear_elasticity_elements.h src/womersley/womersley_elements.h ------------------------------------------------------------------------ r622 | mly | 2014-04-03 10:27:52 +0100 (Thu, 03 Apr 2014) | 1 line .gitignore: added make_check_output ------------------------------------------------------------------------ r621 | mly | 2014-04-03 10:27:52 +0100 (Thu, 03 Apr 2014) | 5 lines modified: demo_drivers/mpi/multi_domain/pseudo_solid_collapsible_tube/validate.sh A small change to the if condition so that it actually works does the correct thing. ------------------------------------------------------------------------ r620 | mly | 2014-04-03 10:27:52 +0100 (Thu, 03 Apr 2014) | 33 lines modified: src/generic/map_matrix.h 1) MapMatrix now inherits from MapMatrixMixed. Why was this not done in the first place I do not know... template class MapMatrix is changed to template class MapMatrix : public MapMatrixMixed 2) Deleted almost everything from the MapMatrix class since it is now inherited from MapMatrixMixed. Only the copy constructor and destructor is left. 3) Made MapMatrixMixed's destructor virtual. 4) Added function to get an element without changing the container: "VALUE_TYPE get(const KEY_TYPE_ROW& i, const KEY_TYPE_COL& j) const" 5) Changed "private" to "protected", so MapMatrix has access to everything in MapMatrixMixed. 6) Added a const version of MapMatrixMixed::size() 7) Added a const version of MapMatrixMixed::nnz() 8) Added a get() const function to access an element without changing the container. ------------------------------------------------------------------------ r619 | mly | 2014-04-03 10:27:51 +0100 (Thu, 03 Apr 2014) | 13 lines modified: .gitignore Added the following to .gitignore # private OOMPH-LIB directory configure lists are automatically # generated. config/configure.ac_scripts/private.dir_list config/configure.ac_scripts/private_user_drivers.dir_list config/configure.ac_scripts/private_user_src.dir_list # arpack and hsl files which are automatically generated. external_src/oomph_arpack/all_arpack_sources.f external_src/oomph_arpack/debug.h external_src/oomph_arpack/stat.h external_src/oomph_hsl/frontal.f ------------------------------------------------------------------------ r618 | mheil | 2014-04-02 08:17:38 +0100 (Wed, 02 Apr 2014) | 5 lines Added configure options for ubtunu 13.10 (work-around for hanging pdflatex and linking against gfortran libraries when building fortran based lapack). ------------------------------------------------------------------------ r617 | mheil | 2014-03-29 11:55:26 +0000 (Sat, 29 Mar 2014) | 4 lines Added output function that shows total field (incoming plus scattered) for generalised helmholtz. ------------------------------------------------------------------------ r616 | mheil | 2014-03-29 10:48:44 +0000 (Sat, 29 Mar 2014) | 3 lines ...oops -- added problem.h too... ------------------------------------------------------------------------ r615 | mheil | 2014-03-29 10:28:46 +0000 (Sat, 29 Mar 2014) | 9 lines Introduced protected member Problem::Timestep_reduction_factor_after_nonconvergence which defaults to 0.5 and allows adjustment of the amount by which timestep is reduced in temporally adaptive unsteady Newton solve following non-convergence. ------------------------------------------------------------------------ r614 | mheil | 2014-03-24 16:25:36 +0000 (Mon, 24 Mar 2014) | 24 lines -- "Fixed" problem with pdflatex hanging in doxygen-based documentation building by introducing new configure flag --enable-suppress-pdf-doc (the problem is actually a bug in doxygen -- nested html tables (i.e. tables in tables, which we occasionally use for improved layout) break latex). -- "Fixed" gfortran linking problems for ubuntu >= 13.10 by introduction of new configure flag --enable_use_gfortran_libraries_for_oomph_flapack Strongly suspect that the underlying problem is in the gcc linker but this works (thanks to David Shepherd for suggesting this work-around). -- Added typeinfo header to generalised_timesteppers.h -- Added David Shepherd's compatility fix for automake > version 1.13. in bin/regenerate_config_files.sh ------------------------------------------------------------------------ r613 | mheil | 2014-03-22 16:08:51 +0000 (Sat, 22 Mar 2014) | 7 lines Commented out over-zealous error check in projectable linear elasticity elements: They work absolutely fine with resized nodes; they just ignore the additional nodal values. Same change should probably be applied to other projectable elements. ------------------------------------------------------------------------ r612 | mheil | 2014-03-22 16:06:36 +0000 (Sat, 22 Mar 2014) | 3 lines Missing validata fron linear contact test ------------------------------------------------------------------------ r611 | mheil | 2014-03-21 17:47:25 +0000 (Fri, 21 Mar 2014) | 6 lines -- Driver code for linear elasticity contact on top of nonlinear elasticity. -- Made unstructured linear elasticity refineable/projectable. -- Added a few virtual destructors. ------------------------------------------------------------------------ r610 | mheil | 2014-03-14 11:49:47 +0000 (Fri, 14 Mar 2014) | 23 lines -- Changed the embarrassing (and embarrassingly common) typo Wormesley to Womersley (thanks to Chris Bertram for spotting these!). -- Added seepage flux and skeleton velocity to output of axisym poroelastic face elements. -- Perform computation of "flux due to skeleton veloc" as well as "flux due to seepage" in contribution_to_total_porous_flux(...) in axisym poroelastic face elements. Changed interface to accommodate this. -- Added boolean flag and access fct to report if darcy (seepage flow) has been switched off in axisymmetric poro-elastic bulk elements. -- Added skeleton velocity to output of axisymmetric poro-elastic bulk elements. -- Tweaked fpdiff tolerances in unstructured contact problem (vertical resultant force (which should be zero) is computed via residual eqn and can therefore be as big as the max. permitted residual in the Newton iteration). ------------------------------------------------------------------------ r609 | ahazel | 2014-03-13 09:27:55 +0000 (Thu, 13 Mar 2014) | 40 lines A number of changes in the core so that the data used in continuation problems can be stored in the Data objects, rather than at the Problem level. This is achieved by replacing the original TimeStepper(s) by a custom ContinuationStorageScheme, so that all spatial adaptivity can be handled by the same mechanisms as used for history values in time-dependent problems. The assumption is the continuation and time-stepping will never be done at the same time (which is true, I think). At the moment the new functionality can be activated using the Problem::Use_continuation_timestepper=true flag, but the default is false. This is a mid-way check-in because the next stage is to adapt the bifurcation detection and continuation routines to use the same idea (auxilliary data stored in the place of history values). This is a reasonably large job and so I want to have a definite check point before going further. One new interface has been added for arc_length_continuation when the continuation parameter is already Data in the problem. A few validation tolerance tweaks have also taken place. I've had to add a new function Mesh::set_mesh_level_time_stepper() that is called to reset the timesteppers for any Mesh level storage, i.e. SpineData in SpineMeshes and the TimeStepper that is stored in TriangleMeshes. This should be overloaded if you want to do continuation problems and you have Mesh level data to worry about. IMPORTANT: For continuation problems the projection must include all Data not just those that don't have time-history values (e.g. pressure in Navier--Stokes). I have rewritten the projection in the TTaylorHoodElement to ensure this works (the storage is already allocates), but not yet for TCrouzeixRaviart because there is no test case ... yet. IMPORTANT: The parallel continuation has not been tested for cases with ExternalHaloData. An error should be thrown, but be aware that this is work in progress. ------------------------------------------------------------------------ r608 | mheil | 2014-03-11 10:55:39 +0000 (Tue, 11 Mar 2014) | 3 lines Added missing validata files for heat transfer/contact stuff ------------------------------------------------------------------------ r607 | mheil | 2014-03-11 08:45:21 +0000 (Tue, 11 Mar 2014) | 38 lines Mainly check in of heat transfer/melt/contact stuff with contact stuff working. -- Fixed unsteady heat elements, adding missing beta factor. -- SolidFaceElement::interpolated_xi(...) called interpolated_x(...) (rather than interpolated_xi(...) of underlying bulk element). Fixed. -- Solid-traction elements stored Lagrangian coordinate in Eulerian coordinate. Fixed. -- INTERFACE CHANGE: TriangleMeshPolyLine *boundary_polyline(...) becomes TriangleMeshPolyLine *boundary_polyline_pt(...) in src/meshes/triangle_mesh.template.h. Renamed various local variables that were called boundary_polyline_pt. -- Added face mesh projection capability (needed to project Lagrange multiplier across to new mesh. Code is in src/generic/face_mesh_project.h and required minor change to nodes.h -- Added new constructor for hijack(able) FaceElements which allows specification of the ID of any fields that are added by this face element (e.g. Lagrange multipliers) -- Added fct Mesh::total_size() that adds up the FiniteElement::size() contributions of all constituent finite elements (non finite elements are ignored). ------------------------------------------------------------------------ r606 | mheil | 2014-03-03 13:55:02 +0000 (Mon, 03 Mar 2014) | 4 lines Added line visualiser output to axisym nst and poro-elasticity elements and tidied up a few things (incl. one bug fix) in line visualiser code. ------------------------------------------------------------------------ r605 | ahazel | 2014-02-27 10:32:05 +0000 (Thu, 27 Feb 2014) | 13 lines Small modification to fix an unintended bug : If Nodes were shared between submeshes the equation numbering could have gone wrong. We never do/did this, so the problem was never spotted. The problem has been fixed by assigning global equation numbers on the global mesh (only) and explicitly treating spines differently (which are something of an exception to most of our rules anyway). In addition the virtual status of Problem::assign_eqn_numbers() and Mesh::assign_local_eqn_numbers() have been removed because they are not needed. ------------------------------------------------------------------------ r604 | ahazel | 2014-02-25 09:04:21 +0000 (Tue, 25 Feb 2014) | 13 lines Included proof-of-concept code for spatially adaptive continuation, but the method will not work for problems in which the Nodes move. A complete rewrite of the scheme is planned for the remainder of this week, in which the additional data is stored at the Data rather than the Problem level. This will allow seamless use of the spatial adaptivity with minimum overhead. In addition, corrected a few bugs in the dump and reload, which meant that it didn't work if the min_permitted error was set to exactly 0.0 ------------------------------------------------------------------------ r603 | mheil | 2014-02-15 10:31:58 +0000 (Sat, 15 Feb 2014) | 3 lines Added porous skeleton velocity to output for axisymmetric BJS BC elements. ------------------------------------------------------------------------ r602 | mheil | 2014-02-13 09:10:21 +0000 (Thu, 13 Feb 2014) | 31 lines -- Added (nearly) emtpy virtual functions Problem::actions_before_read_unstructured_meshes() Problem::actions_after_read_unstructured_meshes() They should be overloaded for any problems in which face elements are attached to unstructured bulk meshes and/or where any pointers to elements/nodes in such meshes are stored. The functions are only needed when a restart is performed, so may be left empty. Their content is likely to be the same as the actions_before/after_adapt() and if such functions already exist no additional actions are required since these are called automatically. To minimise the danger of the user overlooking the need to provide these functions (nasty seg faults arise if they're not provided in non-adaptive problems) suitable warnings are issued. These may be suppressed. -- Changed all config options files to the suppress building of the documentation by default since there appear to be problems (on recent versions of ubuntu) which can cause the build process to "hang". This is still under investigation... -- Changed the non-existent "O6" optimisation to "O3" in all gcc-based config option files. ------------------------------------------------------------------------ r601 | athompson | 2014-01-31 16:31:59 +0000 (Fri, 31 Jan 2014) | 21 lines Alice's check in ---------------- Changes to include a FD_tolerance in Hessian calculation as member data of the Problem class Added calls to actions_before_newton_convergence_check() in assembly hander functions and the hessian vector products so that bifurcation tracking in moving-mesh problems will work Added get_jacobian_and_mass_matrix() function in ElementsWithMovingNodes so that we can solve linear stability problems for moving mesh (spine) problems. Slightly modified Trilinos eigensolver interface to use its defaults for the number of blocks, which will vary depending on the required number of eigenvalues. ------------------------------------------------------------------------ r600 | mheil | 2014-01-22 17:19:06 +0000 (Wed, 22 Jan 2014) | 4 lines changed self-test machinery so mpi pseudo-solid collapsible tube isn't run if we don't have trilinos/hypre. ------------------------------------------------------------------------ r599 | mheil | 2014-01-22 16:01:40 +0000 (Wed, 22 Jan 2014) | 5 lines Switched pseudo_solid_collapsible_tube mpi test to use iterative solver and test iteration counts (with tolerance of 10%). ------------------------------------------------------------------------ r598 | mheil | 2014-01-13 10:24:03 +0000 (Mon, 13 Jan 2014) | 18 lines -- Added function that allows computation of porous flux to axisymmetric poro-elasticity elements. -- Updated makePvD, oomph-convert and oomph-convert.py to MH's latest version for: -- better handling of files from parallel runs -- existing output (vtu/vtp files) now don't get re-generated unless -o flag (for overwrite) is used in call to oomph-convert. -- various improvements to the way various data formats are handled (e.g. in exponential notation etc). -- improved automatic generation of Makefiles in private during build stage -- we only try to create these in directories that actually contain a Makefile.am (so not in result directories, say) ------------------------------------------------------------------------ r597 | mheil | 2014-01-11 14:43:25 +0000 (Sat, 11 Jan 2014) | 32 lines Changed build machinery to accomodate more recent versions of trilinos in which teuchos has been broken up into multiple sub-libraries (whose names need to be specified at linking time...). Solution/logic: (1) If trilinos is built from source (i.e. from a tar file) we know which version we need and the automachinery now takes the right decision. There are only a relatively small number of "legal" tar files for which we know that oomph-lib works with them (the others are almost certainly fine too but only these can be used in our automated build process). (2) We're linking against a pre-installed version of trilinos in which case it's difficult (or certainly very tedious) to find out which version it needs (unless we write linking tests...). In that case we assume that we have the old version, i.e. we link with -lteuchos. (3) This can be over-ruled by the user (the person installing oomph-lib) by using the configure flag --enable-multiple_teuchos_libraries This over-rules even inferred requirements (from the tar file) but a warning is issued if this happens. (4) Finally, we explicitly comment on this issue during the build process and alert the user/installer to the fact that there may be problems with teuchos. ------------------------------------------------------------------------ r596 | mheil | 2013-12-20 16:00:08 +0000 (Fri, 20 Dec 2013) | 4 lines Added fluid pressure as final column in output of axisymmetric poroelastic bjs fsi elements. ------------------------------------------------------------------------ r595 | mheil | 2013-12-19 07:49:13 +0000 (Thu, 19 Dec 2013) | 10 lines Added ability to specify different initial areas for different regions in a triangle mesh via TriangleMeshParameters::set_target_area_for_region(...) function. Test added to Julio's most extreme inline-triangle self-test. ------------------------------------------------------------------------ r594 | mly | 2013-12-16 09:53:08 +0000 (Mon, 16 Dec 2013) | 6 lines BlockPreconditioner::turn_into_subsidiary_block preconditioner(...) function to take in an 'optional' Vector which describes if preconditioner DOF types requires coarsening. Under-the-hood it's really done with a wrapper around the function since optional arguments and vectors don't play nicely in C++ ------------------------------------------------------------------------ r593 | mly | 2013-12-16 09:53:08 +0000 (Mon, 16 Dec 2013) | 2 lines CRDoubleMatrix::add(...): more self tests added. New self test for unordered column indices ------------------------------------------------------------------------ r592 | mly | 2013-12-16 09:53:07 +0000 (Mon, 16 Dec 2013) | 1 line Added more comments to navier_stokes_preconditioners.cc and .h ------------------------------------------------------------------------ r591 | mheil | 2013-12-14 17:17:42 +0000 (Sat, 14 Dec 2013) | 10 lines -- Removed Chris "spine problem" and associated files from demo_drivers -- Implemented output fct for poro-elastic BJS FSI face elements. -- Fixed an odd bug in fsi poro-elastic traction elements where the traction was computed using the wrong bulk coordinate. ------------------------------------------------------------------------ r590 | mly | 2013-12-10 14:54:56 +0000 (Tue, 10 Dec 2013) | 1 line Updated comments for the re-re-written CRDoubleMatrix::add(...) function ------------------------------------------------------------------------ r589 | mly | 2013-12-10 14:54:56 +0000 (Tue, 10 Dec 2013) | 1 line Added more binary files to .gitignore ------------------------------------------------------------------------ r588 | mly | 2013-12-10 14:54:56 +0000 (Tue, 10 Dec 2013) | 3 lines CRDoubleMatrix::add(...) can handle unordered column indices. This is done by using a map to store the column indices-value pair. Complexity is logrithmic in size. ------------------------------------------------------------------------ r587 | mly | 2013-12-10 14:54:55 +0000 (Tue, 10 Dec 2013) | 2 lines About to modify the CRDoubleMatrix::add(...) function to deal with column indices not in ascending order. ------------------------------------------------------------------------ r586 | mly | 2013-12-10 14:54:55 +0000 (Tue, 10 Dec 2013) | 1 line Added even more self tests to matrix_addition ------------------------------------------------------------------------ r585 | mheil | 2013-12-09 17:22:18 +0000 (Mon, 09 Dec 2013) | 17 lines -- added Chris' spine driver code and associated postprocessing routines to demo_drivers/interaction/linearised_poroelastic_fsi_pulsewave -- add permeability ratio to axisymmetric poro-elasticity elements; also used by FSI counterpart in the application of the BJS slip conditition. -- Added max_spiral_level() to MeshAsGeomObject -- limits the number of spiral levels to specified value before giving up. Similar to max. radius. -- Added Chris information about proxy problems with subversion to subversion tutorial. ------------------------------------------------------------------------ r584 | julio | 2013-12-09 13:20:05 +0000 (Mon, 09 Dec 2013) | 8 lines -- Unstructured meshes from polyfiles Added the polyfile names to the extradist variable in the "Makefile.am" file in the "demo_drivers/meshing/mesh_from_triangle/" directory so that the self-tests work when working with a version built from a tar file. ------------------------------------------------------------------------ r583 | mly | 2013-12-09 08:53:21 +0000 (Mon, 09 Dec 2013) | 1 line Updated validata for matrix_addition self tests ------------------------------------------------------------------------ r582 | mly | 2013-12-09 08:53:21 +0000 (Mon, 09 Dec 2013) | 1 line Added more tests to matrix_addition.cc ------------------------------------------------------------------------ r581 | ahazel | 2013-12-08 21:33:21 +0000 (Sun, 08 Dec 2013) | 2 lines Corrected typo in Makefile.am (whoops) ------------------------------------------------------------------------ r580 | ahazel | 2013-12-08 20:49:04 +0000 (Sun, 08 Dec 2013) | 9 lines Added EXTRA_DIST flags to Makefile.am's for Wassamon's tests so that make dist works properly (sorry) Modified comments in elements.cc to make the difference between assemble_local_to_eulerian_jacobian() and J_eulerian() clearer. Added an additional index entry. ------------------------------------------------------------------------ r579 | julio | 2013-12-06 16:41:34 +0000 (Fri, 06 Dec 2013) | 11 lines --- A pair of test codes were added to the directory "demo_drivers/meshes/mesh_from_triangle/" that show how to enable adaptation for unstructured meshes created from polyfiles (*.1.node, *.1.ele and *.1.poly). --- When creating an unstructured mesh from polyfiles, the element size for elements associated to a specific region is no longer used. ------------------------------------------------------------------------ r578 | mly | 2013-12-03 17:26:57 +0000 (Tue, 03 Dec 2013) | 1 line Removed binary self_test/mpi/matrix_addition/matrix_addition ------------------------------------------------------------------------ r577 | mly | 2013-12-03 17:17:20 +0000 (Tue, 03 Dec 2013) | 2 lines Re-wrote CRDoubleMatrix::add(...) to make it more efficient. Added more self tests for the CRDoubleMatrix::add(...) function ------------------------------------------------------------------------ r576 | julio | 2013-12-03 14:10:30 +0000 (Tue, 03 Dec 2013) | 10 lines -- When using adaptation for unstructured meshes created from input polyfiles (*.1.node *.1.ele and *.1.poly) it may be possible that the nodes that define the internal closed boundaries are listed before the nodes that define the outer closed boundaries. If that is the case then a warning message is thrown and the user should double check that the generated mesh is according with the domain defined in the polyfiles. ------------------------------------------------------------------------ r575 | mly | 2013-12-02 14:55:49 +0000 (Mon, 02 Dec 2013) | 17 lines Fixed distributed mesh problem in generic/block_preconditioner.cc The old code used a set of pairs to store the global equation and dof type pair. If a dof is re-classified, then this is also stored. This the set is used later to get the number of dofs and such. This means we have more dofs then there actually is. So, we used a map instead. Fixed all spelling mistakes and layout in generic/iterative_linear_solver.cc generic/matrices.cc generic/oomph_utilities.cc generic/oomph_utilities.h generic/problem.cc meshes/tetgen_mesh.template.cc navier_stokes/lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r574 | mly | 2013-12-02 14:55:49 +0000 (Mon, 02 Dec 2013) | 1 line .gitignore: added more automatically generated header files ------------------------------------------------------------------------ r573 | mly | 2013-12-02 14:55:49 +0000 (Mon, 02 Dec 2013) | 3 lines Small changes to block_preconditioners.h and lagrange_enforced_flow_preconditioner.h Changed some strings, not worth mentioning. ------------------------------------------------------------------------ r572 | mly | 2013-12-02 14:55:48 +0000 (Mon, 02 Dec 2013) | 1 line Fixed a lot of comments in block_preconditioners.cc and .h ------------------------------------------------------------------------ r571 | mly | 2013-12-02 14:02:52 +0000 (Mon, 02 Dec 2013) | 1 line Merged block_preconditioner.cc and .h ------------------------------------------------------------------------ r570 | julio | 2013-11-18 13:21:19 +0000 (Mon, 18 Nov 2013) | 12 lines Fixed a problem related to connections of TriangleMeshPolylines. When specifying a connection to the 1st node of the i-th TriangleMeshPolyline of a TriangleMeshClosedCurve it is also possible to perform the same connection in the last node of the previous TriangleMeshPolyline of the TriangleMeshClosedCurve. Fixed some issues related to the automatic generation of TriangleMeshPolylines and TriangleMeshClosedCurves when the domain is specified via the "*.node, *.ele and *.poly" files. ------------------------------------------------------------------------ r569 | ahazel | 2013-10-22 16:47:39 +0100 (Tue, 22 Oct 2013) | 9 lines Corrected problem with index file and pdf by including a \htmlonly at the beginning and \endhtmlonly at the end. Modified the python script that generates the index in /bin Adjusted Wassamon's drivers and validate.sh to make the tests pass on my machine. Some of the tolerances are a bit higher than I would like, but I don't have time to investigate now... just mark this as a warning. ------------------------------------------------------------------------ r568 | ahazel | 2013-10-18 11:31:43 +0100 (Fri, 18 Oct 2013) | 10 lines Commit of Wassamon's material including C1 continuous triangular elements as implented for shell and biharmonic problems. At present the unstructured meshes still read in data from files, but this can be fixed later. The changes to the core library are the introduction of new integration schemes and a new subparametric element class. The other changes are all in demo_drivers, with associated documentation. ------------------------------------------------------------------------ r567 | mheil | 2013-10-17 18:06:37 +0100 (Thu, 17 Oct 2013) | 5 lines Changed definition of point source for generalised Fourier decomposed Helmholtz according to Rob Harter's wishes and updated the validata accordingly. ------------------------------------------------------------------------ r566 | mheil | 2013-10-08 18:13:08 +0100 (Tue, 08 Oct 2013) | 23 lines Massive fix of all the doxygen problems that have accumulated over the years. -- Remade lots of apparently broken gif/eps files. -- Fixed latex errors -- Removed any "\n" from doxygen-type comments in source files since this tended to break doxygen. -- bypassed complicated html-based constructs that were difficult (or pointless) to replictate in latex, e.g. huge tables) -- Added various files that were regularly dropped during make dist to the EXTRA_DIST and deleted others from repository. -- Killed old superlu sources but included additional files that aren't currently built (e.g. single precision versions) to the EXTRA_DIST -- Tweaked some fpdiff tolerances. ------------------------------------------------------------------------ r565 | mly | 2013-10-02 17:26:19 +0100 (Wed, 02 Oct 2013) | 34 lines Modified matrices, block preconditioning framework, LSC preconditioner and augmented lagrangian preconditioner. modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Include code to either use sigma = norm of whole momentum block, just u direction or the maximum gershgorin disc. modified: src/generic/matrices.cc modified: src/generic/matrices.h Added new function "gershgorin_eigenvalue_estimate(...)" modified: src/generic/block_preconditioner.cc modified: src/generic/block_preconditioner.h Modified the precomputed preconditioner blocks functionality. Now set_precomputed_blocks(...) takes a vector of vectors which indicates which dof type belongs together. For example, say we use the Navier-Stokes LSC preconditioner as a subsidiary preconditioner in the augmented_lagrangian_preconditioner. The augmented Lagrangian preconditioner requires the following dof type splitting (in 2D with one constraint): 0 1 2 3 4 5 u uc v vc p L We call the set_precomputed_blocks(...) function with the vector: [0 1] [2 3] [4] The LSC preconditioner requires the dof type splitting u v p. Thus, calling get_block(0,0,*block_pt) will actually concatenate blocks (0,0), (0,1), (1,0), and (1,1). modified: src/navier_stokes/navier_stokes_preconditioners.cc Added some debugging information. This is to be taken out. ------------------------------------------------------------------------ r564 | mly | 2013-10-02 17:26:19 +0100 (Wed, 02 Oct 2013) | 38 lines Getting ready for re-writing the BlockPreconditioner::ndof_types(...) functionality. =============================================================================== File: demo_drivers/linear_solvers/simple_block_preconditioners.h File: demo_drivers/linear_solvers/two_d_linear_elasticity_with_simple_block_diagonal_preconditioner.cc Comment: Added comments and "hooks" for Doxygen. Cleaned up the code. =============================================================================== File: doc/mpi/block_preconditioners/Doxyfile File: doc/mpi/block_preconditioners/block_preconditioners.txt Comment: Updated documentation for the Block Preconditioning Framework. Note: This is not complete. I stopped doing this at Matthias' request. The full documentation is now in a separate latex file. =============================================================================== File: src/generic/block_preconditioner.cc File: src/generic/block_preconditioner.h Comment: Getting things ready for the ndof_type re-write. =============================================================================== File: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Comment: Commented out some unused variables. =============================================================================== File: src/navier_stokes/navier_stokes_preconditioners.cc File: src/navier_stokes/navier_stokes_preconditioners.h Comment: Re-writing the code for turning block preconditioners into subsidiary preconditioners (where ndof_types(true) is used). ------------------------------------------------------------------------ r563 | mly | 2013-10-02 17:26:18 +0100 (Wed, 02 Oct 2013) | 16 lines Block Preconditioner documentation and updated lgr preconditioner. .gitignore Added all the .pdf files generated. Added / modified the following files for the new block_preconditioners documentation: config/configure.ac_scripts/doc.dir_list doc/mpi/Makefile.am doc/mpi/block_preconditioners/Doxyfile doc/mpi/block_preconditioners/Makefile.am doc/mpi/block_preconditioners/block_preconditioners.txt src/navier_stokes/lagrange_enforced_flow_preconditioner.h Updated some outputting matrices and rhs. Now works properly with the new output functions for CRDoubleMatrices and DoubleVectors ------------------------------------------------------------------------ r562 | mheil | 2013-09-23 14:39:58 +0100 (Mon, 23 Sep 2013) | 3 lines A few more std:: fixes from Matthew. ------------------------------------------------------------------------ r561 | mheil | 2013-09-19 13:59:04 +0100 (Thu, 19 Sep 2013) | 5 lines Further fixes: std:: in front of various things and switched on flag that suppresses warning about un-assigned history values in axisym poro-elasticity. ------------------------------------------------------------------------ r560 | mheil | 2013-09-19 08:46:58 +0100 (Thu, 19 Sep 2013) | 4 lines Fixed array over-run in linear wave equations and removed accidentally checked in Makefile from doc. ------------------------------------------------------------------------ r559 | mheil | 2013-09-18 09:51:10 +0100 (Wed, 18 Sep 2013) | 41 lines -- Added src/driver code for axisymmetric poro-elasticity and some run scripts. -- Added src/driver code (and various associated run scripts and post-processing tools -- this is still work in progress) for poro-elastic version of linearised fsi pulse wave. -- Implemented complete assignment of history values on boundaries for linear wave and axisymmetric linear elasticity In the process changed the output fcts which now includes first and second time derivs. NOTE: timestepper_pt->assign_initial_data_values(...) etc should now really be renamed to assign_history_data_values(...), say, since it can also (and should always have been) used to assign history values for time-varying boundary conditions. -- Assignment of initial/history values can now handle cases when function pointers are provided for fewer than the number of data values (only the first ones are then used) or if some (any) are nulled out. This is useful if history values are to be assigned only for a subset of fields. -- Provided the option to degrade bdf2 to bdf1 behaviour. -- A few tidies for cartesian Darcy elements. -- Added src (but not driver code -- needs to much work right now; need to discuss with Matthew when he gets back) for cartesian poroelasticity. -- Now actually added the documentation for Matthew Walker's generalised Fourier decomposed Helmholtz elements... -- Removed various namespace-polluting statements (std and oomph). ------------------------------------------------------------------------ r558 | mheil | 2013-09-17 09:35:56 +0100 (Tue, 17 Sep 2013) | 8 lines -- Added Matthew Walker's pml-ified/generalised azimuthally Fourier-decomposed Helmholtz equations and documentation. -- Updated the list of contributors to include the 2013 people. -- Added new tutorials to example code list. ------------------------------------------------------------------------ r557 | mheil | 2013-09-16 17:30:59 +0100 (Mon, 16 Sep 2013) | 10 lines Anton's final check in before the start of term (he'll be back (we hope!)) -- Added displacement based axisymmetric Foeppl von Karman and associated demo driver code. -- changed paraview output to use uppercase E in scientific notation of floating point numbers. ------------------------------------------------------------------------ r556 | ahazel | 2013-09-10 09:28:28 +0100 (Tue, 10 Sep 2013) | 6 lines Fixed a few typos in comments Added tecplot_header information to output functions for InterfaceElements Provided documentation for hijacking data and a simple eigenproblem that explains the overall framework. ------------------------------------------------------------------------ r555 | mheil | 2013-09-05 14:42:23 +0100 (Thu, 05 Sep 2013) | 48 lines -- Fixes to paraview output machinery, gives me a chance to list the three functions that need to be implemented for any elements that are supposed to be output by it (and that need to be overloaded in multi-physics elements whose constituents provide independent (re-)implementations of these functions). You need: /// \short Number of scalars/fields output by this element. unsigned nscalar_paraview() const; /// \short Write values of the i-th scalar field at the plot points. void scalar_value_paraview(std::ofstream& file_out, const unsigned& i, const unsigned& nplot) const; /// \short Name of the i-th scalar field. std::string scalar_name_paraview(const unsigned& i) const; -- Moved pvd file helper functions into separate namespace (rather than Mesh class) Call: ParaviewHelper::write_pvd_header(...) ParaviewHelper::write_pvd_information(...) ParaviewHelper::write_pvd_footer(...) -- Added pml/dtn option to demo_drivers/fourier_decomposed_helmholtz/sphere_scattering/unstructured_sphere_scattering.cc -- Adjusted validata for unstructured paraview test cases ('cos adding that data to the validata is just as pointless as for the tecplot equivalent -- the mesh may change!) -- Const-ified various traction related functions in axisymmetric Navier-Stokes. -- Created fsi version of axisymmetric fvk. -- Added option to pass timestepper to PML mesh generators (doesn't make much sense for the time-harmonic elements that they were originally written for, of course, but the machinery is useful in other contexts too.). ------------------------------------------------------------------------ r554 | mheil | 2013-09-04 09:48:31 +0100 (Wed, 04 Sep 2013) | 25 lines Anton's check-in of paraview output. -- New function Mesh::output_paraview(...) which outputs data (via the elements) in paraview vtu format. The elements' functions are broken virtual and ought to be implemented when needed. We've done a few (Navier-Stokes, axisymmetric Navier-Stokes, Poisson, ...). -- also provide the option to write a pvd file (wrapper for multiple vtu files, with time information to facilitate animations in paraview) with Mesh::write_pvd_header(...) Mesh::write_pvd_information(...) Mesh::write_pvd_footer(...) Usage demonstrated in demo_drivers/axisym_navier_stokes/rayleigh_instability/rayleigh_instability.cc -- Const-ified FiniteElement::get_s_plot(...) functions. ------------------------------------------------------------------------ r553 | radu | 2013-08-27 13:36:54 +0100 (Tue, 27 Aug 2013) | 5 lines -- Change of the default of the PML strength parameter for generalised time-harmonic linear elasiticity to 1.0. -- Adaptation of validata ------------------------------------------------------------------------ r552 | radu | 2013-08-23 11:14:25 +0100 (Fri, 23 Aug 2013) | 14 lines Radu's commit. Various fixes to pml (and other!) machinery -- Added new pure virtual fct values_to_be_pinned_on_outer_pml_boundary(...) to PMLElementBase class. Has to do what it says. Implemented for gen. Helmholtz and time-harmonic lin elast. -- Little tweaks to documentation of gen time-harmonic lin elast. -- Fixed a (ancient!) bug in rectangular quad mesh -- the nodes on the right hand side of the top-right corner element weren't added to the rightmost boundary if there was just a single column of elements (nx=1). Now works like a dream! ------------------------------------------------------------------------ r551 | radu | 2013-08-21 14:04:47 +0100 (Wed, 21 Aug 2013) | 7 lines -- Tweaks to generalised time harmonic linear elasticity tutorial and associated driver code. -- Change to driver code and validata to make computation of norm more robust. ------------------------------------------------------------------------ r550 | dshepherd | 2013-08-21 13:31:13 +0100 (Wed, 21 Aug 2013) | 6 lines Set svn:ignore property on onfig/configure_options/current The file should not be automatically added to commits by svn anymore, hopefully... ------------------------------------------------------------------------ r549 | dshepherd | 2013-08-21 12:13:03 +0100 (Wed, 21 Aug 2013) | 3 lines Fix a stray semicolon and re-remove "current" configure options Semicolon caused compile failure in paranoid mode. ------------------------------------------------------------------------ r548 | radu | 2013-08-20 15:27:12 +0100 (Tue, 20 Aug 2013) | 22 lines Radu's commit -- generalised (pml-able) time harmonic linear elasticity: -- Added pml-ed generalised time-harmonic linear elasticity src, demo driver and documention. Works like a dream! -- Tidied up the pml layer mesh generation by creating PMLElementBase class that forms the basis for the (increasing number of) elements that can be used with pml. Also moved the (now generic) pml mesh layer generation into src/generic. Used this functionality for generalised time-harmonic linear elasticity (for which it was developed) and for generalised Helmholtz. Gen Fourier-decomposed version to be converted as soon as Matthew makes it available. -- Fixed bug in computation of stresses in linear elasticity and its time-harmonic counterpart. -- Fixed a few typos in documentation. ------------------------------------------------------------------------ r547 | mheil | 2013-08-17 15:19:30 +0100 (Sat, 17 Aug 2013) | 13 lines Matthias' check in of Philippe's final changes: -- Added FSI elements for generalised Helmholtz and (non-generalised) time harmonic linear elasticity. -- Added include guards in a few header files. -- Added Julio's change to triangle's internal command line handling (there was a conflict during the update; Julio is yet to confirm that the rectified version is the desired one -- the self-tests all pass). ------------------------------------------------------------------------ r546 | dshepherd | 2013-08-13 10:29:29 +0100 (Tue, 13 Aug 2013) | 25 lines Initial work on fixing Doxygen generation * Marked a number of places which cause errors or warnings that I can't fix because I don't know the maths with the tag DOXYERROR. * Fixed a number of mistakes in doxygen comment syntax in the source code that were causing errors or warnings in doxygen ** Latex maths mistakes ** Capitalisation mistakes ** Excess newlines (\n) -- latex cannot handle forced newlines in some places! * Hints for future debugging of doc generation: ** Enable latex errors! In the Doxyfile *in the folder you are debugging* replace LATEX_BATCHMODE = YES with LATEX_BATCHMODE = NO ** doxygen versions between 1.7.4 and 1.8.3 may have a major bug which results in the .tex file for the folder the_data_structure not being generated. If you have this problem use a more recent version of doxygen. Not sure when the bug was introduced, only that it was after 1.7.4. The bug definitely exists in version 1.8.2 which is the version used by distributions based on Ubuntu 12.10. * More generated documentation files in .gitignore ------------------------------------------------------------------------ r545 | dshepherd | 2013-08-13 10:29:27 +0100 (Tue, 13 Aug 2013) | 19 lines Clean up sparse_indexed_output(...) implementations Basically just fix it so that we are properly using the class hierarchy to avoid lots of copy-pasted code. * Implement variable precision output and bottom right zeroes as a function in the base class which calls "sparse_indexed_output_helper(ostream)" to do the main output. * Similarly for output to files rather than ostreams * Remove lots of unnecessary functions which used to be all copy pasted code * Rename the remaining DerivedMatrix::sparse_indexed_output(..) functions to sparse_indexed_output_helper(...). * Improve implementation of variable precision: ** Only set the precision once (instead of before every double is output) ** Properly reset the precision afterwards ------------------------------------------------------------------------ r544 | mheil | 2013-08-09 11:26:32 +0100 (Fri, 09 Aug 2013) | 7 lines Joris' commit: -- adding axisymmetric Foeppl von Karman -- enabled uniform refinement for adaptive triangle meshes. ------------------------------------------------------------------------ r543 | mheil | 2013-08-04 09:48:28 +0100 (Sun, 04 Aug 2013) | 3 lines Added Ray's validate_ok_count to EXTRA_DIST variable. ------------------------------------------------------------------------ r542 | ahazel | 2013-07-30 15:38:38 +0100 (Tue, 30 Jul 2013) | 4 lines ... and another modification to the core.dir_list to remove an unwanted directory ------------------------------------------------------------------------ r541 | ahazel | 2013-07-30 14:39:26 +0100 (Tue, 30 Jul 2013) | 3 lines Removal of the oomph_superlu_3.0 sources from the core.dir_list ------------------------------------------------------------------------ r540 | mly | 2013-07-29 23:50:15 +0100 (Mon, 29 Jul 2013) | 7 lines Modified .gitignore : Added more executables in demo drivers. The following were added: demo_drivers/generalised_helmholtz/scattering/unstructured_two_d_helmholtz_scattering demo_drivers/heat_transfer_and_melting/two_d_unsteady_heat_melt/stefan_boltzmann demo_drivers/heat_transfer_and_melting/two_d_unsteady_heat_melt/stefan_boltzmann_melt demo_drivers/linear_solvers/two_d_linear_elasticity_with_simple_block_diagonal_preconditioner ------------------------------------------------------------------------ r539 | mly | 2013-07-29 13:13:54 +0100 (Mon, 29 Jul 2013) | 19 lines Hidden the precomputed preconditioner blocks mechanism "under the hood". * src/generic/block_preconditioner.cc * src/generic/block_preconditioner.h modified ndof_types() and and nblock_types so that the returned unsigned depends on if the precomputed blocks (if passed down). This is required since the ndof_types or nblock_types may be more fine grain in the preconditioner above. This can be overridden with the optional boolean parameter to give the actual ndof_types or nblock_types. New function: setup_matrix_vector_product(...), sets up a MatrixVectorProduct. This is created to "hide" the "under the hood" machinery of precomputed preconditioner blocks. * src/navier_stokes/navier_stokes_preconditioners.cc * src/generic/general_purpose_block_preconditioners.cc Cleaned up places where "Preconditioner_blocks_have_been_precomputed" were checked. ------------------------------------------------------------------------ r538 | mly | 2013-07-29 13:13:53 +0100 (Mon, 29 Jul 2013) | 34 lines New dof type grouping strategy implemented for the block preconditioning framework. When we precompute preconditioner blocks used for the subsidiary preconditioner, we only need to know which dof types a subsidiary expects. We no longer need to know how the subsidiary preconditioner groups the dof types. For example, if the (master) lagrangian preconditioner has dof types (in 3D) 0 1 2 3 4 5 6 7 ub vb wb uc vc wc p L and if we want to use the LSC preconditioner for the Navier-Stokes block, the LSC preconditioner expects dof types: u v w p. Before, we had to give the 2D vector doftype_to_doftype_map: [0 1 2 3 4 5] [6] this requires knowledge that the LSC preconditioner groups the velocity and pressure separately. Now, we give the 2D vector: u: [0 3] v: [1 4] w: [2 5] p: [6] Modified the following files: src/generic/block_preconditioner.cc src/generic/block_preconditioner.h src/multi_physics/pseudo_elastic_preconditioner.cc src/navier_stokes/lagrange_enforced_flow_preconditioner.h src/navier_stokes/navier_stokes_preconditioners.cc ------------------------------------------------------------------------ r537 | julio | 2013-07-25 20:21:53 +0100 (Thu, 25 Jul 2013) | 6 lines The decimal precision for the element size in unstructured meshes has been fixed to 14 digits. There is a warning message for element size values smaller than that. ------------------------------------------------------------------------ r536 | mheil | 2013-07-25 15:59:42 +0100 (Thu, 25 Jul 2013) | 32 lines -- Commit of Matthew's cartesian Darcy equations and associated demo code. -- Forgot to spell this out earlier. If errors are caught, the error message (which now appears in std::cerr) should be suppressed like this: try { steady_newton_solve(); } catch (OomphLibError &error) { error.disable_error_message(); cout << "Caught solver error -- continuing regardless \n."; } Added this to the mpi pitchfork tracking code. -- Changed pinning/unpinning of dofs in projection.h. We now brutally pin everything (rather than doing it field by field) and then unpin the dofs associated with the field that is being projected. This is necessary to handle cases the like the projectable darcy equations where some values are not associated with any field but only created to allow the projection of the coordinates. -- Added additional compute_error(...) functions that allow the return of individual components of errors (rather than a lumped scalar). ------------------------------------------------------------------------ r535 | julio | 2013-07-24 13:27:46 +0100 (Wed, 24 Jul 2013) | 11 lines New feature that allows adaptation of unstructured meshes created from polyfiles. This version does not currently support to work with internal non-closed boundaries defined from polyfiles. INTERFACE CHANGES: There is a new constructor for the RefineableTriangleMesh class that receives the three files created by triangle (*.1.node, *.1.ele and *.1.poly). ------------------------------------------------------------------------ r534 | mly | 2013-07-23 14:08:21 +0100 (Tue, 23 Jul 2013) | 26 lines DoubleVectors, hypre_solver lgr_prec and brickification src/navier_stokes/lagrange_enforced_flow_preconditioner.h Now using the tranpose mass matrices. Before we assume that the mass matrices of the contrained velocity were square. This is incorrect. src/generic/double_vector.h src/generic/double_vector.cc Added optional variable output_precision to output functions. Fixed some comments. src/generic/hypre_solver.h /// Return function for Max_iter unsigned& amg_iterations() /// \short Return function for the AMG_using_simple_smoothing_flag bool& amg_using_simple_smoothing_flag() src/meshes/brick_from_tet_mesh.template.cc src/meshes/brick_from_tet_mesh.template.h Added functions to brickify a Tetgen mesh. src/meshes/tetgen_mesh.template.h Added setup_boundary_coordinates(b,switch_normal), required for the brickification of Tetgen meshes ------------------------------------------------------------------------ r533 | ahazel | 2013-07-08 22:22:21 +0100 (Mon, 08 Jul 2013) | 3 lines Tiny fix to make the code compile under g++ 4.6 ------------------------------------------------------------------------ r532 | dshepherd | 2013-06-28 17:12:50 +0100 (Fri, 28 Jun 2013) | 1 line Add virtual destructors in poly_interp.h ------------------------------------------------------------------------ r531 | dshepherd | 2013-06-28 17:12:49 +0100 (Fri, 28 Jun 2013) | 14 lines Automatically lookup meshes from master in subsidiary preconditioners * So we don't have to set meshes in subsidiary preconditioners * Meshes never used for subs prec (in block preconditioning framework) Might be used elsewhere, which is why we need a lookup and not just no mesh_pt() allowed at all. * Updated existing block preconditioners * Plenty of PARANOID checks to see if any meshes are being ignored anywhere e.g. if a mesh is set for a preconditioner then it is turned into a subsidiary preconditioner, user might expect that mesh to be used so we throw an error. ------------------------------------------------------------------------ r530 | dshepherd | 2013-06-28 17:12:49 +0100 (Fri, 28 Jun 2013) | 11 lines Move large functions from block_preconditioner.h to .cc file * Remove some now-unused header files * Had to add specification of which templates to build in .cc file * Comment out some calls to functions that don't exist In blockPreconditioner::document() there are calls to first_lookup_row() and nlookup_rows() which don't exist. The function document() is never used as far as I can tell. Not sure how this wasn't caught by the compiler sooner. ------------------------------------------------------------------------ r529 | dshepherd | 2013-06-28 17:12:49 +0100 (Fri, 28 Jun 2013) | 34 lines Made general purpose block preconditioners work with block sub preconditioners * Required a nasty amount of if statements. It would be nice to fix it in the future so that the arguments to preconditioner setup and solve for subsidiary block preconditioners are not completely different from everything else. * Needed to make master_block_preconditioner_pt() const Also made it return a BlockPreconditioner* rather than Preconditioner*. Since the pointer is stored as that type it must be safe. * Corrected mistake in anti-diagonal block preconditioner Should use blocks: (i, nblock - i -1), I missed the -1 before. * Changed BlockDiagonalPreconditioner to use the right block_setup() Before it forced the use of the version in BlockPreconditioner, which is wrong if there is any dof_to_block mapping set. * PARANOID check in exact block preconditioner can't have subsidiary block preconditioners * Replace calls to new in exact block preconditioner * Move large functions into a .cc file Speed up compilation times/reduce binary sizes. Also needed to specify templates to build in the cc file. * Probably still needs some work to: Make things more efficient when we have multiple levels of block preconditioner, at the moment there is unecessary swapping back and forth between block representation and full representation of various vectors. Make some internal code cleaner. ------------------------------------------------------------------------ r528 | dshepherd | 2013-06-28 17:12:48 +0100 (Fri, 28 Jun 2013) | 1 line Check in subsidiary block preconditioners: matrix_pt must be same as master ------------------------------------------------------------------------ r527 | mly | 2013-06-26 19:15:02 +0100 (Wed, 26 Jun 2013) | 4 lines Modified: self_test/matrix_matrix_multiply/Makefile.am Inserted: include $(top_srcdir)/config/makefile_templates/demo_drivers ------------------------------------------------------------------------ r526 | mly | 2013-06-25 16:48:33 +0100 (Tue, 25 Jun 2013) | 4 lines Modified all validate.sh scripts in demo_drivers and self_test * Moved the extraction of OOMPH_ROOT_DIR to the top of the validate.sh scripts so we can use it anywhere in the validate.sh script. ------------------------------------------------------------------------ r525 | mly | 2013-06-25 16:48:28 +0100 (Tue, 25 Jun 2013) | 5 lines Make files have the target print-top_builddir, which echo out the top_builddir variable. All validate.sh scripts have been modified so that we source bin/validate_ok_count ------------------------------------------------------------------------ r524 | mly | 2013-06-24 19:07:24 +0100 (Mon, 24 Jun 2013) | 2 lines lagrange_enforced_flow_preconditioner.h uses the new get_block() interface. ------------------------------------------------------------------------ r523 | mly | 2013-06-24 18:24:12 +0100 (Mon, 24 Jun 2013) | 3 lines matrices.h: Optional parameter in all sparse_indexed_output functions. Optional unsigned to set the precision of the output stream. ------------------------------------------------------------------------ r522 | mly | 2013-06-24 18:24:12 +0100 (Mon, 24 Jun 2013) | 8 lines Updated comments in some validate.sh scripts: bin/validate_ok_count self_test/mpi/distribution_concatenation/validate.sh self_test/mpi/matrix_concatenation_without_communication/validate.sh self_test/mpi/vector_concatenation/validate.sh self_test/mpi/vector_concatenation_without_communication/validate.sh self_test/mpi/vector_split/validate.sh self_test/mpi/vector_split_without_communication/validate.sh ------------------------------------------------------------------------ r521 | mly | 2013-06-24 18:24:11 +0100 (Mon, 24 Jun 2013) | 26 lines Modified gitigore and all the configure options. .gitignore: These file are automatically generated by automake 1.13 parallel test harness test-driver test-suite.log validate.sh.log validate.sh.trs self_test/analyse_self_tests/analyse.sh.log self_test/analyse_self_tests/analyse.sh.trs Added "--with-mpi-self-tests-variablenp" to the following configure options: config/configure_options/bluefern_xlc_linux config/configure_options/horace_with_mpi_self_tests config/configure_options/private_configure_options/biolaptop_lam config/configure_options/private_configure_options/biolaptop_lam_paranoid_debug config/configure_options/private_configure_options/biolaptop_lam_paranoid_debug_range_check config/configure_options/private_configure_options/csf_gcc config/configure_options/private_configure_options/mpi_simple config/configure_options/private_configure_options/mpi_with_paranoid_and_range_checking_and_blas_lapack_trilinos_hypre config/configure_options/private_configure_options/wulf_gcc4.3.2 config/configure_options/private_configure_options/wulf_gcc4.3.2_debug_paranoid_no_doc-patrick_edit config/configure_options/private_configure_options/wulfling config/configure_options/private_configure_options/wulfling_debug_paranoid config/configure_options/private_configure_options/wulfling_debug_paranoid_rangecheck ------------------------------------------------------------------------ r520 | mly | 2013-06-24 18:24:11 +0100 (Mon, 24 Jun 2013) | 7 lines Reverted "demo_drivers/navier_stokes/unstructured_three_d_fluid" These two files where changed when I coding the 3D time stepping bifurcation code. This is now moved into my user_driver directory. demo_drivers/navier_stokes/unstructured_three_d_fluid/fsi_bifurcation_fluid.poly demo_drivers/navier_stokes/unstructured_three_d_fluid/unstructured_three_d_fluid.cc ------------------------------------------------------------------------ r519 | mly | 2013-06-24 18:24:11 +0100 (Mon, 24 Jun 2013) | 3 lines Modified unstructured_three_d_fluid.cc to do time stepping. Modified fsi_bifurcation_fluid.poly so that the outflow boundary is not aligned with the cartesian coordinates ------------------------------------------------------------------------ r518 | mly | 2013-06-24 18:24:10 +0100 (Mon, 24 Jun 2013) | 2 lines modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Fixed a bug with the number of meshes. ------------------------------------------------------------------------ r517 | mly | 2013-06-24 18:24:10 +0100 (Mon, 24 Jun 2013) | 7 lines src/generic/oomph_utilities.h Modified DocLinearSolverInfo to document preconditioner setup time as well. src/generic/preconditioner.h Added a variable Setup_time to document the last setup time. Have accessor functions for easy access! ------------------------------------------------------------------------ r516 | mly | 2013-06-24 18:24:10 +0100 (Mon, 24 Jun 2013) | 6 lines modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Commented out some outputs. modified: src/navier_stokes/navier_stokes_preconditioners.cc Made to work with old codes. Self tests for NavierStokesSchurComplementPreconditioners pass. ------------------------------------------------------------------------ r515 | mly | 2013-06-24 18:24:09 +0100 (Mon, 24 Jun 2013) | 5 lines modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h modified: src/navier_stokes/navier_stokes_preconditioners.cc Took out all debug outputs. About to make the LSC preconditioner compatible with the other code again (it is currently broken since I have modified the function to get mass matrices) ------------------------------------------------------------------------ r514 | mly | 2013-06-24 18:24:09 +0100 (Mon, 24 Jun 2013) | 8 lines Added loads of debugging flags to the following files: src/navier_stokes/lagrange_enforced_flow_preconditioner.h src/navier_stokes/navier_stokes_preconditioners.cc src/navier_stokes/navier_stokes_preconditioners.h I will need to take these out once I make sure that everything is working. ------------------------------------------------------------------------ r513 | mly | 2013-06-24 18:24:09 +0100 (Mon, 24 Jun 2013) | 47 lines modified: src/generic/block_preconditioner.h modified: src/generic/matrix_vector_product.cc modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h modified: src/navier_stokes/navier_stokes_preconditioners.cc modified: src/navier_stokes/navier_stokes_preconditioners.h Details: src/generic/block_preconditioner.h * Modified the get_block_vector_with_original_matrix_ordering and return_block_vector_with_original_matrix_ordering functions to be more efficient with single sub-block vectors (so no concatenation or splitting is required). src/generic/matrix_vector_product.cc * Fixed spacing. src/navier_stokes/lagrange_enforced_flow_preconditioner.h * Removed a lot of class variables which I no longer need. * Calling the BlockPreconditioner::set_mesh from the set_meshes function instead of the setup function (so it is only done once!). * Generally changed a lot of stuff to make it more efficient and nicer. src/navier_stokes/navier_stokes_preconditioners.cc src/navier_stokes/navier_stokes_preconditioners.h * Made to work with blocks passed down. It is still very messy and needs cleaning up. I will do this later, but it works for now. Here's a cat: _ \`*-. ) _`-. . : `. . : _ ' \ ; *` _. `*-._ `-.-' `-. ; ` `. :. . \ . \ . : .-' . ' `+.; ; ' : : ' | ; ;-. ; ' : :`-: _.`* ; .*' / .*' ; .*`- +' `*' `*-* `*-* `*-*' ------------------------------------------------------------------------ r512 | mly | 2013-06-24 18:24:08 +0100 (Mon, 24 Jun 2013) | 17 lines Modified: block_preconditioner.h * set_mesh(...) Added paranoid test to see if the mesh pointer to be set is null. Changed variable names (so it makes more sense). * Moved the following variables from private to protected since they are useful in derived preconditioners: Vector Mesh_pt; Vector Ndof_types_in_mesh; unsigned Nblock_types; unsigned Ndof_types; * block_setup(...) added more comments and tidied up the code a bit (functionality has not changed). All self tests currently pass! ------------------------------------------------------------------------ r511 | mly | 2013-06-24 18:24:08 +0100 (Mon, 24 Jun 2013) | 2 lines modified: src/navier_stokes/lagrange_enforced_flow_preconditioner.h Fixed a bug, the preconditioner now works in parallel (for exact solve) ------------------------------------------------------------------------ r510 | mly | 2013-06-24 18:24:08 +0100 (Mon, 24 Jun 2013) | 8 lines modified: src/navier_stokes/Makefile.am Added impose_impenetability_element.h new file: src/navier_stokes/impose_impenetrability_element.h New impenetrability element. new file: src/navier_stokes/lagrange_enforced_flow_preconditioner.h New lagrange_enforced_flow_preconditioner.h ------------------------------------------------------------------------ r509 | ahazel | 2013-06-21 11:03:54 +0100 (Fri, 21 Jun 2013) | 12 lines Fixed the "Copy of Boundary Node is not a Boundary Node" error. The problem is that HijackedNodes are copies, but they are not BoundaryNodes. This case is now tested and excluded. Fixed an out-of-range error by commenting out the local variable s in temporary_stefan_boltzman.h (which is never used) For some reason the parallel solver failed to convergene in track_pitch.cc It worked in serial, but I have fixed this by taking two steps to get to Re=25, rather than one. I don't know what has changed on the solver side, but we might want to keep an eye on this. ------------------------------------------------------------------------ r508 | mheil | 2013-06-17 14:31:21 +0100 (Mon, 17 Jun 2013) | 35 lines Matthias' check in of Philippe's bug fixes (and additions) to the Helmholtz machinery: -- New demo driver (not self-tested yet!) demo_drivers/generalised_helmholtz/scattering/unstructured_two_d_helmholtz_scattering.cc does scattering problem with pmls (rather than DtN). Agrees extremely well! -- Added flux elements to generalised helmholtz equation (essentially the same as those in the normal helmholtz equations). Also provide FaceElements that allow the post-processing of the radiated power and/or the (ejected volume) flux. NOTE: Like many things to do with Helmholtz, these are unlikely to work in 3D. There's actually no good reason for this (since, unlike the DtN stuff in the normal Helmholtz equations) things should work in any dimension, but too much has just been copied across from there. Will need to be fixed at some point when somebody gets around to writing a 3D test case. -- Fixed enumeration problem in the setup of PML meshes -- as written this only worked for the one-and-only test case we had. Now it should (!) work in general. -- removed the dim() function from FaceElements in src/helmholtz/helmholtz_bc_elements.h since it created total confusion (by an inappropriate overloading of the FE::dim() function). ------------------------------------------------------------------------ r507 | mheil | 2013-06-15 08:35:58 +0100 (Sat, 15 Jun 2013) | 56 lines -- Change in exception handling. Error messages now get spawned in destructor of the OomphException. This allows them to be suppressed, e.g. when an exception is caught. If it's not caught, the destructor may not be called. This is handled via the set_terminate(...) function implemented in the TerminateHelper namespace. It's called automatically in the problem constructor but can be called by everybody. -- Changed all test for hanging nodes in specific FaceElements that can't (yet) deal with hanging nodes so that the test is only done on their own nodes -- also dealt with various memory leaks that the old (stupid) method of checking this had created. IMPORTANT: The new method should be used for all new face elements! Strategy: build face element first, then check if any of its nodes are hanging (this works because face elements are only attached to meshes after adaptation (if any) so hang status of nodes is already clear). Check that bulk element is 3D and refineable first. If it's not the test is obviously not needed. -- Introduced a flag that allows navier stokes preconditoner to work with meshes that contain elements that are not of the "right type" without issuing warnings -- they get ignored anyway). -- Made autogen.sh's "order of argument checker" work with variable rather than hard-coded config/configure_options/current. -- Changed parallel mumps test code so that mpi doesn't work with copy of mpi_comm_world to stop complaints. -- Changed boundary enumeration in unstructured torus and point source Helmholtz to suppress warnings about missing boundaries -- Allowed use of non-navier-stokes elements in ns preconditioner for flux control. -- Deleted various no-longer used files (headers and demo drivers) in melting/heat transfer directory. -- Added Stefan Boltzmann test code. -- Added demo-code (working) to demo_drivers/linear_solvers/ to illustrate how to write a simple block diagonal preconditioner from scratch (using linear elasticity as an example). Not self-tested at the moment, but could form basis of tutorial. There's also an (incomplete) code that will/may at some point do the same for the LSC preconditioner -- doesn't compile yet so added via EXTRA_DIST. -- Added empty disable_ALE() to spherical_advection_diffusion_elements.h to suppress warning; ALE isn't implemented anyway. ------------------------------------------------------------------------ r506 | mheil | 2013-06-14 13:30:09 +0100 (Fri, 14 Jun 2013) | 5 lines Bypassed David's wo_d_unsteady_heat_midpoint self-tests (bdf and midpoint) since both fail fairly spectacularly and David isn't around to fix them at the moment. ------------------------------------------------------------------------ r505 | ahazel | 2013-06-10 09:26:11 +0100 (Mon, 10 Jun 2013) | 4 lines Modified the fpdiff.py script so that it *should* work with python 2.x and 3.x ------------------------------------------------------------------------ r504 | dshepherd | 2013-06-07 15:27:45 +0100 (Fri, 07 Jun 2013) | 1 line parallel_self_tests: Add ability to run tests on a list of dirs given in a file ------------------------------------------------------------------------ r503 | dshepherd | 2013-06-05 18:51:34 +0100 (Wed, 05 Jun 2013) | 3 lines Revert "Move minimal mpi tests out of autogen.sh and into a separate script" This reverts commit eee65514534162ead8e91e58ce2a07b93b11f7c9. ------------------------------------------------------------------------ r502 | dshepherd | 2013-06-05 18:51:34 +0100 (Wed, 05 Jun 2013) | 5 lines Partially reverted commit 485 I had used -isystem instead of -I for Hypre/Trilinos/Mumps includes. However this doesn't seem to work with Mumps so that part of the change has been reverted. ------------------------------------------------------------------------ r501 | dshepherd | 2013-06-05 18:12:49 +0100 (Wed, 05 Jun 2013) | 7 lines Usability improvements to parallel_self_test script * Clearer errors if no Makefile is found from which to extract parameters * Parameter extraction works with Makefiles in current dir or other directories * More python3 compatability ------------------------------------------------------------------------ r500 | dshepherd | 2013-06-05 17:02:28 +0100 (Wed, 05 Jun 2013) | 13 lines Updated exisiting preconditioners and demo drivers to use new get_block(...) * See previous patch for details of the change Basically get_block(..) now takes a matrix by reference rather than a null pointer (into which a new'd matrix was inserted) for output. * This required moving the calls to "new" out into the preconditioner Ideally they can be completely gotten rid of at some point, perhaps by someone who understands the preconditioners. * Also null'd many deleted pointers * Removed the old get_block(...) functions ------------------------------------------------------------------------ r499 | dshepherd | 2013-06-05 17:02:27 +0100 (Wed, 05 Jun 2013) | 39 lines Many improvements to the general purpose block preconditioners * Modify to use the new interface to get_block(...) So there are no calls to new hidden inside functions. * Move some repeated code into the base class * Add a "BlockAntiDiagonalPreconditioner" * Rename clean up function to have names consistent with Preconditioner base clean_memory() -> clean_up_memory() in BlockTriangularPreconditioner. * Change clean up function to only clean up and not delete subs preconditioners This seems to be the intention of clean_up_memory(). Previously sub preconditioners were deleted and re-created in every call to setup() in a general purpose preconditioner. This allows us to: ** Remove some uneccessary deletion/recreation of subs preconditioners ** Assign subs preconditioners in a more normal C++ style Before we had to assign function pointers to create preconditioners, but this is complex and messy because C++ has almost no support for functional programming. * Make destructors virtual Destructors should be virtual for any class that could be inherited from. * Add a dummy PreconditionerArray implementation to remove lots of ifdef MPI This reduces the complexity of the code and removes the need for extra ifdefs in higher level code (e.g. before some functions didn't exist in non-MPI builds, so they would need to be surrounded by ifdef anywhere they are called even if there are normal if statements used at the same time). We also need to move the preconditioner array files in Makefile.am so that they are always built. * Add lots more comments ------------------------------------------------------------------------ r498 | dshepherd | 2013-06-05 17:02:26 +0100 (Wed, 05 Jun 2013) | 7 lines Collection of smaller changes * Fix spellings in error message in preconditioners * Add const version of time() function to TimeStepper * Ignore hypre/trilinos demo driver binaries ------------------------------------------------------------------------ r497 | dshepherd | 2013-06-05 17:02:26 +0100 (Wed, 05 Jun 2013) | 3 lines Add function to split a string up into substrings e.g. for use when parsing parts of a command line argument. ------------------------------------------------------------------------ r496 | dshepherd | 2013-06-05 17:02:26 +0100 (Wed, 05 Jun 2013) | 6 lines Move some processing from turn_into_subs_prec(..) to block_setup() This allows us to construct and assign subsiduary block preconditioners at any time (e.g. in the setup phase of the driver code) whereas before it could only be done somewhere in the middle of setup() in the master preconditioner. ------------------------------------------------------------------------ r495 | dshepherd | 2013-06-05 17:02:26 +0100 (Wed, 05 Jun 2013) | 3 lines Moved error test in master_block_preconditioner_pt() from ifdef MPI to PARANOID Presumably it was just a mistake to have it in ifdef MPI in the first place ------------------------------------------------------------------------ r494 | dshepherd | 2013-06-05 17:02:25 +0100 (Wed, 05 Jun 2013) | 14 lines Remove calls to new from inside BlockPreconditioner::get_block(...) * This should massively reduce the risk of memory leaks in block preconditioners * Also removed old obsolete functions in BlockPreconditioner base * Also added obsolete wrapper functions to allow existing block preconditioners to continue working unmodified. * Removed get_block(...) because CC matrices don't have any way of filling in the values except in the constructor (i.e. using new). * Moved BlockPreconditioner::get_block(...) to the header (because it's only a tiny dispatch function now). ------------------------------------------------------------------------ r493 | dshepherd | 2013-06-05 17:02:25 +0100 (Wed, 05 Jun 2013) | 4 lines Initial commit of midpoint method Includes a self test for unsteady heat (and so requires some slightly different unsteady heat elements which can use an Interpolator object). ------------------------------------------------------------------------ r492 | dshepherd | 2013-06-05 17:02:24 +0100 (Wed, 05 Jun 2013) | 3 lines Move minimal mpi tests out of autogen.sh and into a separate script This allows them to be easily reused in other build scripts. ------------------------------------------------------------------------ r491 | dshepherd | 2013-06-05 17:02:24 +0100 (Wed, 05 Jun 2013) | 4 lines Add option to CommandLineArgs to throw error on unrecognised args Default value is false, so nothing should change for currently existing code. ------------------------------------------------------------------------ r490 | dshepherd | 2013-06-05 17:02:24 +0100 (Wed, 05 Jun 2013) | 1 line Python 3 compatability for parallel_self_test.py ------------------------------------------------------------------------ r489 | dshepherd | 2013-06-05 17:02:24 +0100 (Wed, 05 Jun 2013) | 5 lines Add an untemplated base class for UnsteadyHeatEquations This allows us to do things like setting the source function and getting the type of the function pointer without needing to know the dimension at compile time (i.e. without templating the problem class by dimension). ------------------------------------------------------------------------ r488 | dshepherd | 2013-06-05 17:02:23 +0100 (Wed, 05 Jun 2013) | 4 lines Add const versions of some functions * Problem::time_stepper_pt() * TimeStepper::adaptive_flag() ------------------------------------------------------------------------ r487 | dshepherd | 2013-06-05 17:02:23 +0100 (Wed, 05 Jun 2013) | 8 lines Fix bug in variable_from_makefile in parallel_self_test.py If there is no Makefile in the pwd then this function would always fail because make fails (even though a Makefile in the pwd is not really needed). Fixed by setting the cwd for the make command to be that of the Makefile from which the variable is being extracted. ------------------------------------------------------------------------ r486 | dshepherd | 2013-06-05 17:02:23 +0100 (Wed, 05 Jun 2013) | 14 lines A bunch of small changes * Initialise Nnewton_iter_taken * Make get_some_non_boundary_node const * Add broken virtual nvertex_node() function to FiniteElement * Rename nprev_values_for_value_at_evaluation_time (new function added by me) to nprev_values_for_value_at_evaluation_time, more consistent. * Move some variable declarations into/out of #ifdefs to get rid of warnings: ** f_ml_settings in demo_drivers/womersley/one_d_womersley/one_d_womersley.cc ** nproc in src/generic/block_preconditioner.h ------------------------------------------------------------------------ r485 | dshepherd | 2013-06-05 17:02:22 +0100 (Wed, 05 Jun 2013) | 5 lines Use -isystem instead of -I for external distributions (hides warnings) This has one side effect: the external distributions are moved to the end of the list of libraries. I very much doubt that this could break anything but it's something to keep in mind. ------------------------------------------------------------------------ r484 | dshepherd | 2013-06-05 17:02:22 +0100 (Wed, 05 Jun 2013) | 1 line Add file open PARANOID checks in creation of triangle meshes from files ------------------------------------------------------------------------ r483 | dshepherd | 2013-06-05 17:02:21 +0100 (Wed, 05 Jun 2013) | 9 lines Fix warning spam generated by src/generic/partitioning.cc Many METIS partitioning functions were declared in one place and then declared again when they were defined (as though they were part of a class). This gives warnings for redundant function declarations. Removed the unnecessary extra declarations. ------------------------------------------------------------------------ r482 | dshepherd | 2013-06-05 17:02:21 +0100 (Wed, 05 Jun 2013) | 12 lines Remove "current" options file and "user_drivers.dir_list" from version control * Useless but constantly cause clashes when updating svn because everyone uses different settings. * Add code to autogen.sh to copy in the "defaults options if no current options exists. * user_drivers.dir_list is already automatically generated in autogen.sh * Both files are already in .gitignore, I need someone who uses svn directly to do the equivalent in svn. ------------------------------------------------------------------------ r481 | dshepherd | 2013-06-05 17:02:21 +0100 (Wed, 05 Jun 2013) | 5 lines Quote the compiler names in hypre and trilinos build scripts Otherwise compiler commands that contain spaces (e.g. "ccache mpicc") crash the build scripts in weird ways, even if they are quoted in the configure options file. ------------------------------------------------------------------------ r480 | dshepherd | 2013-06-05 17:02:20 +0100 (Wed, 05 Jun 2013) | 3 lines Make fpdiff work when python3 is default By explicitly specifying python2 in the hashbang line. ------------------------------------------------------------------------ r479 | dshepherd | 2013-06-05 17:02:20 +0100 (Wed, 05 Jun 2013) | 14 lines Remove strange line from "config/configure.ac_scripts/end" The line is "AS_DIRNAME([/* automatically generated */], $ac_prefix_conf_OUT)". The autoconfig documentation says this should get the directory name of "/* automatically generated */" which obviously is not a file... Instead I think it attempts to get the dirname of everything in the glob "/*", i.e. everything in your root dir. Depending on the version of autotools this either gives an error or a (long) list of "/"s. It can't possibly be doing anything useful because the result of the macro isn't assigned to a variable. So I removed it. ------------------------------------------------------------------------ r478 | dshepherd | 2013-06-05 17:02:20 +0100 (Wed, 05 Jun 2013) | 5 lines Modernize config/configure.ac_scripts/start Old version no longer works with new autoconfig. Changes made as specified by the error messages. ------------------------------------------------------------------------ r477 | mly | 2013-05-30 20:26:29 +0100 (Thu, 30 May 2013) | 81 lines Modified: src/generic/block_preconditioner.h src/generic/general_purpose_block_preconditioners.h src/generic/matrices.cc src/generic/oomph_utilities.h src/navier_stokes/impose_parallel_outflow_element.h src/generic/elements.h src/generic/elements.cc .gitignore bin/parallel_self_test.py config/configure_options/private_configure_options/wulfling_debug_paranoid ==================================================================== src/generic/block_preconditioner.h Now using an assignment instead of resizing the vector, then copying all the entries over with a for loop. "Dof_number_in_master_preconditioner = block_map;" ==================================================================== src/generic/general_purpose_block_preconditioners.h Now using an assignment instead of resizing the vector, then copying all the entries over with a for loop. "Dof_to_block_map = dof_to_block_map;" ==================================================================== src/generic/matrices.cc Modified the the PARANOID tests in CRDoubleMatrix::add(...) so we can add matrices "in-place". ==================================================================== src/generic/oomph_utilities.h Added new class DocLinearSolverInfo: Added Vector > > Iterations_and_times Which stores the timing and iteration counts for each GMRES iteration per Newton step, per time step. The accessor function (both read/write and const) for this is iterations_and_times(). To begin a new time step (or even your first and only newton solve), call setup_new_time_step(). Get the current number of time step via current_ntime_step() ==================================================================== src/navier_stokes/impose_parallel_outflow_element.h is made block-preconditionable by implementing the functions unsigned ndof_types() and get_dof_numbers_for_unknowns. ==================================================================== src/generic/elements.h src/generic/elements.cc Added a private static boolean Ignore_discontinuous_tangent_warning to the FaceElement class, which switches the warning for discontinous tangent vectors on and off. It is initialised to false in the constructor. It can be turned "on" or "off" via turn_on_warning_for_discontinuous_tangent() and turn_off_warning_for_discontinuous_tangent() respectively. ==================================================================== Added more files to .gitignore ==================================================================== Dave's new bin/parallel_self_test.py, now you can run selected self tests! Awesome! ==================================================================== config/configure_options/private_configure_options/wulfling_debug_paranoid This is the config setting that I use. I noticed that this was missing. So I added it. ------------------------------------------------------------------------ r476 | mly | 2013-05-30 20:26:28 +0100 (Thu, 30 May 2013) | 11 lines Modified: src/generic/elements.cc src/navier_stokes/impose_parallel_outflow_element.h Moved the method for creating tangent vectors on a surface which does not use a direction vector from impose_parallel_outflow_element.h to elements.cc's continuous_tangent_and_outer_unit_normal function. We use the old method if no direction vector is set. This avoids creating new validata and all previous tests will still work and pass. ALL SELF TESTS PASSED! ------------------------------------------------------------------------ r475 | mly | 2013-05-30 20:26:27 +0100 (Thu, 30 May 2013) | 22 lines src/generic/Vector.h Added a namespace VectorHelpers with the following functions: dot() - calculated the dot product of two vectors. magnitude() - calculates the 2-norm of "length" of a vector angle() - calcuates the angle between two vectors. cross() - calculates the cross product of two vectors of length 3. src/generic/elements.cc src/generic/elements.h Tangent_direction_pt - a vector describing the general direction we want the tangent to be. This is used for 3 spatial dimensions to create continuous tangent vectors along the surface. continuous_tangent_and_outer_unit_normal() Creates continuous tangent vectors and the outer unit normal. Replaced cross product calculations with VectorHelpers::cross() src/navier_stokes/impose_parallel_outflow_element.h Has an if-else statement to determine if the we should call continuous_tangent_and_outer_unit_normal(...) or get_tang_vec(...) ------------------------------------------------------------------------ r474 | ahazel | 2013-05-29 09:49:01 +0100 (Wed, 29 May 2013) | 19 lines Minor tweaks to validation tolerances Changed meaning of Problem::Bifurcation_detection The sign change of the determinant of the Jacobian will only be monitored during arc-length stepping if Problem::Bifurcation_detection = true (default is false). Added the additional flag Problem::Bisect_to_find_bifurcation which plays the role previously assigned to Bifurcation_detection. It does as it says and will adjust the arc-length to use bisection to find the point at which the determinant of the Jacobian matrix is zero. Note that Bifurcation_detection must be true in order for the Bisection method to work. Fixed a mistake in the boundary coordinates of FaceElements in Telements.cc Modified the spherical_navier_stokes elements so that the LSC preconditioner still works with them! ------------------------------------------------------------------------ r473 | mly | 2013-05-21 16:39:46 +0100 (Tue, 21 May 2013) | 17 lines Added new minimal_mpi_variablenp_test and edited a few files to get rid of warnings. autogen.sh bin/minimal_mpi_variablenp_test.cc In autogen.sh, we test for "--with-mpi-self-tests-variablenp" If the flag exists, we then test for "OOMPHNP" The file bin/minimal_mpi_variablenp_test.cc is compiled and ran on 1, 2, 3, and 4 cores. The results are checked. In the following files, we move variables inside ifdef OOMPH_HAS_MPI, and PARANOID sections of the code to get rid of unused variable warnings if OOMPH-LIB is compiled without PARANOID and/or MPI enabled: src/generic/block_preconditioner.h src/generic/linear_algebra_distribution.cc src/generic/matrices.cc src/multi_physics/pseudo_elastic_preconditioner.cc ------------------------------------------------------------------------ r472 | mheil | 2013-05-21 08:05:46 +0100 (Tue, 21 May 2013) | 19 lines -- added missing RESLT* directories to various self-test directories to suppress warnings. -- Moved most of the demo_drivers/two_d_unsteady_heat_melt directory to a new one, demo_drivers/heat_transfer_and_melting which now contains systematic self-tests for various heat transfer/melting problems. Also includes test code for imposition of "contact/melt/..." by clever (?) method, plus many post-processing scripts that aid the documentation (they'll be moved at some point). -- Fixed broken links to doxygen generated class lists etc. in doc/the_data_structure. Not sure why they were pointing to ToBeWritten... ------------------------------------------------------------------------ r471 | mly | 2013-05-15 22:00:53 +0100 (Wed, 15 May 2013) | 2 lines block_preconditioner.h: Fixed initialisation list, we don't get warnings anymore! ------------------------------------------------------------------------ r470 | mly | 2013-05-15 11:46:03 +0100 (Wed, 15 May 2013) | 3 lines mpi configuration files in config/configure_options/mpi* Added the new option: --with-mpi-self-tests-variablenp="mpirun -np OOMPHNP" ------------------------------------------------------------------------ r469 | mly | 2013-05-15 11:22:06 +0100 (Wed, 15 May 2013) | 39 lines autogen.sh * New autogen.sh script from Matthias, the CheckOptions(...) function is fixed! demo_drivers/interaction/fsi_channel_seg_and_precond/fsi_chan_precond_driver.cc demo_drivers/navier_stokes/flux_control/flux_control.cc demo_drivers/womersley/one_d_womersley/one_d_womersley.cc * Changed comments, when set_mesh, we pass in "true" to indicate that we TOLERATE multiple element types in the same mesh. demo_drivers/interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube_work.cc * Added comments to explain that the variable ps_prec_type is a flag to switch between different types of pseudo-solid preconditioners src/biharmonic/biharmonic_preconditioner.cc * Fixed typo in comments src/generic/block_preconditioner.cc * Put in OOMPH_CURRENT_FUNCTION in places which are missed out. src/generic/block_preconditioner.h * Changed variable name: "Multiple_element_type_in_mesh" to "Allow_multiple_element_type_in_mesh" src/generic/matrices.h src/generic/matrices.cc * The function inf_norm(...) added to the namespace * CRDoubleMatrixHelpers. src/multi_physics/fsi_preconditioners.h src/navier_stokes/navier_stokes_preconditioners.cc src/navier_stokes/navier_stokes_preconditioners.h * Changed variable name Multiple_element_type... to Allow_multiple_element_type... src/multi_physics/pseudo_elastic_preconditioner.cc * Using new function CRDoubleMatrixHelpers::inf_norm(...) * Throwing error in default switch statement. ------------------------------------------------------------------------ r468 | mly | 2013-05-15 11:22:05 +0100 (Wed, 15 May 2013) | 8 lines Modified: config/configure.ac_scripts/start config/configure_options/current We do not need to put --enable-MPI_VARIABLENP In the current file, only pass --with-mpi-self-tests-variablenp="mpirun -np OOMPHNP" ------------------------------------------------------------------------ r467 | mly | 2013-05-15 11:22:04 +0100 (Wed, 15 May 2013) | 4 lines Modified: config/configure_options/current Updated the current configure option with new flag for mpi tests on more than two processors. ------------------------------------------------------------------------ r466 | mly | 2013-05-15 11:22:04 +0100 (Wed, 15 May 2013) | 2 lines Modified: matrices.cc Found more places where OOMPH_CURRENT_FUNCTION is missed out ------------------------------------------------------------------------ r465 | mly | 2013-05-15 11:22:04 +0100 (Wed, 15 May 2013) | 9 lines Modifed: config/configure.ac_scripts/start config/makefile_templates/demo_drivers self_test/mpi/Makefile.am New flag added for self tests which involves more than two processors. In your config/configure_options/current, put: --enable-MPI_VARIABLENP --with-mpi-self-tests-variablenp="mpirun -np OOMPHNP" ------------------------------------------------------------------------ r464 | mly | 2013-05-15 11:22:03 +0100 (Wed, 15 May 2013) | 24 lines Modified all the new Vector and Matrix manipulation driver codes: self_test/mpi/distribution_concatenation/distribution_concatenation.cc self_test/mpi/distribution_concatenation/validate.sh self_test/mpi/matrix_concatenation/matrix_concatenation.cc self_test/mpi/matrix_concatenation/validate.sh self_test/mpi/matrix_concatenation_without_communication/matrix_concatenation_without_communication.cc self_test/mpi/matrix_concatenation_without_communication/validate.sh self_test/mpi/vector_concatenation/validate.sh self_test/mpi/vector_concatenation/vector_concatenation.cc self_test/mpi/vector_concatenation_without_communication/validate.sh self_test/mpi/vector_concatenation_without_communication/vector_concatenation_without_communication.cc self_test/mpi/vector_split/validate.sh self_test/mpi/vector_split/vector_split.cc self_test/mpi/vector_split_without_communication/validate.sh self_test/mpi/vector_split_without_communication/vector_split_without_communication.cc Details: * .cc files: All driver codes have their comments updated. Very detailed comments are added at the start of the main functions to describe what is going on, with cross references to other self tests where appropriate. * validate.sh files: All modified to use the new flag for running tests on more than two processors. ------------------------------------------------------------------------ r463 | mly | 2013-05-15 11:22:03 +0100 (Wed, 15 May 2013) | 14 lines Modified: pseudo_solid_collapsible_tube_work.cc src/multi_physics/pseudo_elastic_preconditioner.cc src/multi_physics/pseudo_elastic_preconditioner.h Detail: 1) pseudo_solid_collapsible_tube_work.cc * Removed some RAYRAY flags. 2) src/multi_physics/pseudo_elastic_preconditioner.cc src/multi_physics/pseudo_elastic_preconditioner.h * Separated the new PseudoElasticPreconditioner code, Richard's implementation is appended with "Old". ------------------------------------------------------------------------ r462 | mly | 2013-05-15 11:22:02 +0100 (Wed, 15 May 2013) | 8 lines Modified: src/generic/block_preconditioner.cc src/generic/block_preconditioner.h Deleted build_preconditioner_matrix(...), this is replaced by CRDoubleMatrixHelpers::concatenate_without_communication(...) - which is more flexible, rigorously and has the same computational complexity. It is able to cope with non-square matrices and is stand-alone code. ------------------------------------------------------------------------ r461 | mly | 2013-05-15 11:22:02 +0100 (Wed, 15 May 2013) | 37 lines Modified: src/generic/block_preconditioner.h src/generic/general_purpose_block_preconditioners.h src/multi_physics/pseudo_elastic_preconditioner.cc ALL SELF TESTS HAS PASSED. Details: src/generic/block_preconditioner.h * Created four new functions: get_block_vectors_with_original_matrix_ordering(...) get_block_vectors_with_precomputed_block_ordering(...) return_block_vectors_with_original_matrix_ordering(...) return_block_vectors_with_precomputed_block_ordering(...) * Modifed the get_block_vectors(...) function such that it calls get_block_vectors_with_precomputed_block_ordering(...) or get_block_vectors_with_original_matrix_ordering(...) depending on if the preconditioner blocks have been precomputed or not. * Modifed the return_block_vectors(...) function such that it calls return_block_vectors_with_precomputed_block_ordering(...) or return_block_vectors_with_original_matrix_ordering(...) depending on if the preconditioner blocks have been precomputed or not. * Updated LOTS of comments, and added a few more paranoid tests. src/generic/general_purpose_block_preconditioners.h Modified BlockTriangularPreconditioner to deal with precomputed blocks. This is a minor change, we simply change the nblocks depending on if there are precomputed preconditioner blocks or not (simple "if" statement). src/multi_physics/pseudo_elastic_preconditioner.cc Modified to use re-use the preconditioners from general_purpose_block_preconditioners.h. Next step is to separate my code from Richard's code. ------------------------------------------------------------------------ r460 | mly | 2013-05-15 11:22:01 +0100 (Wed, 15 May 2013) | 5 lines About to modify generic_purpose_block_preconditioners.h. BlockDiagonalPreconditioner and BlockTriangularPreconditioner are about to be modifed to cope with modified blocks. At the moment, all self tests pass! ------------------------------------------------------------------------ r459 | mly | 2013-05-15 11:22:01 +0100 (Wed, 15 May 2013) | 13 lines src/generic/block_preconditioner.h * Moved the creation of the distributions in Precomputed_block_distribution_pt[] to block_setup(...) - this is where the distributions in Block_distribution_pt[] is also created. If any distibutions in Precomputed_block_distribution_pt already exist, we delete them. * In the destructor, we delete the distributionsi in Precomputed_block_distribution_pt[], then clear the Vector. I tried to delete it in clear_block_preconditioner_base(...), but it just won't work... not sure why. Doing it this way is equivalent, combined with the modification above, this is probably more robust. ------------------------------------------------------------------------ r458 | mly | 2013-05-15 11:22:01 +0100 (Wed, 15 May 2013) | 47 lines Modified: src/generic/block_preconditioner.cc src/generic/block_preconditioner.h src/generic/matrix_vector_product.cc src/generic/matrix_vector_product.h src/multi_physics/pseudo_elastic_preconditioner.cc The Upper / Lower block preconditioner for the Pseudo-elastic preconditioner now works properly. Next step is to swap these out for the ones in general_block_preconditioners.h Details: src/generic/block_preconditioner.cc *get_precomputed_block(...): We are now building the CRDoubleMatrix with the distribution from Precomputed_block_distribution_pt[] before CRDoubleMatrixHelpers::concatenate_without_communication(...) is invoked. The Vector Precomputed_block_distribution_pt[] is filled in when set_precomputed_blocks(...) is called, this is new functionality in this commit! src/generic/block_preconditioner.h * Replaced the function name string with OOMPH_CURRENT_FUNCTION * Renamed precomputed_blocks_nrow to precomputed_block_nrow * set_precomputed_blocks(...): We now store the distribution of each "super block" in Precomputed_block_distribution_pt[]. The distributions are deleted in clear_block_preconditioner_base(). * get_block_vector_with_precomputed_ordering(...): Now we build the DoubleVector with the correct distribution from Precomputed_block_distribution_pt[] before DoubleVectorHelpers::concatenate_without_communication(...) is invoked. src/generic/matrix_vector_product.cc src/generic/matrix_vector_product.h * In setup(...), there is an optional argument for the * Column_distribution_pt. This means the Vector x in Ax = y does not need to be uniformly distibuted. Before this change, it is assumed that x is uniformly distributed and will not work otherwise! * Re-wrote a few erronous error comments, there may be more, I only fixed the ones I came across. src/multi_physics/pseudo_elastic_preconditioner.cc * When setting up the Lower / Upper block preconditioners, we need to * set up a MatrixVectorProduct. We now pass in the correct distribution pointer from Precomputed_block_distribution_pt only if Preconditioner_blocks_have_been_precomputed is true. ------------------------------------------------------------------------ r457 | mly | 2013-05-15 11:22:00 +0100 (Wed, 15 May 2013) | 9 lines src/generic/block_preconditioner.h Fixed a bug, I forgot to initialise the Vector before using indices to fill up the said Vector. Maybe I should leave it uninitialised and use push_back instead? Upper and Lower block triangular pseudo_elastic_preconditioner almost works, on 4 cores, it complains that MatrixVectorProduct::multiply() assumes that the vector to operate on has to have a uniform distribution. I will try to fix this... ------------------------------------------------------------------------ r456 | mly | 2013-05-15 11:21:59 +0100 (Wed, 15 May 2013) | 30 lines Modified: src/generic/block_preconditioner.cc src/generic/block_preconditioner.h src/generic/matrices.cc src/multi_physics/pseudo_elastic_preconditioner.cc ALL SELF TESTS HAVE PASSED. For pseudo_solid_collapsible_tube_work, 1) Exact preconditioning of the solid is done. 2) Exact block diagonal works, need to re-use code now. 3) Upper block triangular and lower block triangular still needs tweaking. What has changed: src/generic/block_preconditioner.cc get_precomputed_block(...) now does non-square matrices properly by passing the correct col_distribution_pt src/generic/block_preconditioner.h Added some comments. src/generic/matrices.cc concatenate_without_communication(...) now returns a matrix with the proper number of columns as per the rows in col_distribution_pt. Richard's version only works with square matrices, so there are bugs to be ironed out - this should be the last. src/multi_physics/pseudo_elastic_preconditioner.cc This works for Exact and block diagonal. Upper and lower block triangular still needs tweaking. ------------------------------------------------------------------------ r455 | mly | 2013-05-15 11:21:59 +0100 (Wed, 15 May 2013) | 8 lines Put OOMPH_CURRENT_FUNCTION in the following files: src/generic/block_preconditioner.cc src/generic/block_preconditioner.h src/generic/double_vector.cc src/generic/linear_algebra_distribution.cc src/generic/matrices.cc Before, I had "RAYRAYERR", a flag for me to search and replace. ------------------------------------------------------------------------ r454 | mly | 2013-05-15 11:21:58 +0100 (Wed, 15 May 2013) | 19 lines Updated the self test for matrix_concatenation: Concatenating matrices of the following block structure on 1 to 4 cores. Test 0: (7,7)(7,5)(7,3) (5,7)(5,5)(5,3) (3,7)(3,5)(3,3) Test 1: (7,7)(7,5) (5,7)(5,5) (3,7)(3,5) Test 2: (7,7)(7,5)(7,3) (5,7)(5,5)(5,3) Also changed some comments in block_preconditioner.cc ------------------------------------------------------------------------ r453 | mly | 2013-05-15 11:21:58 +0100 (Wed, 15 May 2013) | 2 lines Added stuff which is missed out to .gitignore. Including the new mpi self test binary files ------------------------------------------------------------------------ r452 | mly | 2013-05-15 11:21:58 +0100 (Wed, 15 May 2013) | 4 lines src/multi_physics/pseudo_elastic_preconditioner.cc src/multi_physics/pseudo_elastic_preconditioner.h Modified to use the new block preconditioning framework. Needs cleaning up. ------------------------------------------------------------------------ r451 | mly | 2013-05-15 11:21:57 +0100 (Wed, 15 May 2013) | 2 lines general_purpose_block_preconditioners.h: Fixed indentation ------------------------------------------------------------------------ r450 | mly | 2013-05-15 11:21:57 +0100 (Wed, 15 May 2013) | 4 lines src/generic/general_purpose_block_preconditioners.h ExactBlockPreconditioner::setup() If precomputed blocks are set, we use those. Access the Precomputed_block_pt directly, and concatenate_without_communication. ------------------------------------------------------------------------ r449 | mly | 2013-05-15 11:21:56 +0100 (Wed, 15 May 2013) | 9 lines src/generic/block_preconditioner.h: set_precomputed_blocks(...) Changed variable names. Updated PARANOID tests src/generic/block_preconditioner.cc: get_precomputed_block(...) New code to get a single block more efficiently - since we do not need to invoke the concatenation function ------------------------------------------------------------------------ r448 | mly | 2013-05-15 11:21:56 +0100 (Wed, 15 May 2013) | 2 lines pseudo_solid_collapsible_tube_work.cc: Added option for Block diagonal preconditioning for pseudo elastic prec. ------------------------------------------------------------------------ r447 | mly | 2013-05-15 11:21:56 +0100 (Wed, 15 May 2013) | 20 lines self_test/mpi/matrix_concatenation_without_communication Updated the self test, we now concatenate matrices with dimensions: Test #0 (7,7)(7,5)(7,3) (5,7)(5,5)(5,3) (3,7)(3,5)(3,3) On number of cores: 1,2,3,4 Test #1 (7,7)(7,5) (5,7)(5,5) (3,7)(3,5) On number of cores: 1,2,3,4 Test #2 (7,7)(7,5)(7,3) (5,7)(5,5)(5,3) On number of cores: 1,2,3,4 ------------------------------------------------------------------------ r446 | mly | 2013-05-15 11:21:55 +0100 (Wed, 15 May 2013) | 19 lines matrices.cc/.h: Modified the concatenate_without_communication(...) function 1) Further generalised the concatenate_without_communication(...) function so now it can concatenate matrices where the result is not square. This relies on a Vector of distributions being passed for the block columns, as well as a Vector of distributions for the block rows. The Vector row_distribution_pt tells the function how to permute the rows. The Vector col_distribution_pt tells the function how to permute the columns. 2) Wrote a wrapper around the generalised version which takes only one Vector of distribution to be used as both row_distribution_pt and col_distribution_pt. This is so all current code will work, and it's nicer to not have to pass the same argument twice if it is repeated. 3) Updated various PARANOID tests and added a few more! 4) Updated comments to reflect the change, and explain what row_distribution_pt and col_distribution_pt is. ------------------------------------------------------------------------ r445 | mly | 2013-05-15 11:21:55 +0100 (Wed, 15 May 2013) | 2 lines Added new stuff to gitignore ALL SELF TESTS PASS. ------------------------------------------------------------------------ r444 | mly | 2013-05-15 11:21:54 +0100 (Wed, 15 May 2013) | 5 lines Added a third commandline argument flag to switch between block preconditioners for the pseudo solid block. 0 - Exact 1 - Upper block 2 - Lower block ------------------------------------------------------------------------ r443 | mly | 2013-05-15 11:21:54 +0100 (Wed, 15 May 2013) | 2 lines Modified fsi_chan_precond_driver.cc: In set_mesh functions, added true to indicate that the mesh may contain multiple element types. ------------------------------------------------------------------------ r442 | mly | 2013-05-15 11:21:54 +0100 (Wed, 15 May 2013) | 10 lines Modified flux_control.cc: fsi_preconditioner_pt->set_wall_mesh(...): Passing in true to indicate that the mesh may contain multiple element types. ns_preconditioner_pt->set_navier_stokes_mesh(...): Passing in true to indicate that the mesh may contain multiple element types. ns_preconditioner_pt->set_navier_stokes_mesh(...): Passing in true to indicate that the mesh may contain multiple element types. ------------------------------------------------------------------------ r441 | mly | 2013-05-15 11:21:53 +0100 (Wed, 15 May 2013) | 3 lines one_d_womersley.cc: Calling fsi_preconditioner_pt->set_wall_mesh(...) with true to indicate that the wall mesh may contain multiple element types ------------------------------------------------------------------------ r440 | mly | 2013-05-15 11:21:53 +0100 (Wed, 15 May 2013) | 3 lines biharmonic_preconditioner.cc: replaced call to build_preconditioner_matrix(...), now using CRDoubleMatrixHelpers::concatenate_without_communication(...) ------------------------------------------------------------------------ r439 | mly | 2013-05-15 11:21:53 +0100 (Wed, 15 May 2013) | 2 lines Removed call to build_preconditioner_matrix(...), replaced with CRDoubleMatrixHelpers::concatenate_without_communication(...) ------------------------------------------------------------------------ r438 | mly | 2013-05-15 11:21:52 +0100 (Wed, 15 May 2013) | 11 lines Modified: matrices .cc and .h matrices.cc: fixed a bug with a PARANOID test which can be made to always fail. I incorrectly used || (logical OR), it should be be && (logical AND). Added a lot more PARANOID tests for concatenate_without_communication(...) It now can accept a DenseMatrix of pointers to CRDoubleMatrix which may be null. So we do not have to create a zero matrix, it is now 100% backwards compatible with build_preconditioner_matrix(...) matrices.h: added more to the comments. ------------------------------------------------------------------------ r437 | mly | 2013-05-15 11:21:52 +0100 (Wed, 15 May 2013) | 3 lines block_preconditioner .cc and .h Commented out build_preconditioner_matrix(...) function. This is to be removed once I make sure that everything works ------------------------------------------------------------------------ r436 | mly | 2013-05-15 11:21:51 +0100 (Wed, 15 May 2013) | 1 line Added flags to indicate if a mesh contains multiple element types ------------------------------------------------------------------------ r435 | mly | 2013-05-15 11:21:51 +0100 (Wed, 15 May 2013) | 4 lines pseudo_elastic_preconditioner.cc: In PseudoElasticSubsidiaryPreconditioner, changed build_preconditioner_matrix to CRDoubleMatrixHelpers::concatenate_without_communication ------------------------------------------------------------------------ r434 | mly | 2013-05-15 11:21:51 +0100 (Wed, 15 May 2013) | 1 line LSC preconditioner - added flag to deal with multiple element types ------------------------------------------------------------------------ r433 | mly | 2013-05-15 11:21:50 +0100 (Wed, 15 May 2013) | 5 lines Temporary validate_ok_count, in bin/validate_ok_count Dave S. has a better one, so I will not improve upon this one, but it's required for everything in here to work. I cannot get code from Dave since we are using SVN, not git... ------------------------------------------------------------------------ r432 | mly | 2013-05-15 11:21:50 +0100 (Wed, 15 May 2013) | 1 line Added self test for vector_split_without_communication ------------------------------------------------------------------------ r431 | mly | 2013-05-15 11:21:49 +0100 (Wed, 15 May 2013) | 1 line Added self test for vector_split ------------------------------------------------------------------------ r430 | mly | 2013-05-15 11:21:49 +0100 (Wed, 15 May 2013) | 1 line Added self test for vector_concatenation_without_communication ------------------------------------------------------------------------ r429 | mly | 2013-05-15 11:21:48 +0100 (Wed, 15 May 2013) | 1 line Added self test for vector_concatenation ------------------------------------------------------------------------ r428 | mly | 2013-05-15 11:21:48 +0100 (Wed, 15 May 2013) | 1 line Added self test for matrix_concatenation_without_communication ------------------------------------------------------------------------ r427 | mly | 2013-05-15 11:21:47 +0100 (Wed, 15 May 2013) | 1 line Added self test for matrix_concatenation ------------------------------------------------------------------------ r426 | mly | 2013-05-15 11:21:47 +0100 (Wed, 15 May 2013) | 1 line Added self test for distribution concatenation ------------------------------------------------------------------------ r425 | mly | 2013-05-15 11:21:46 +0100 (Wed, 15 May 2013) | 25 lines In src/generic/linear_algebra_distribution h and cc, the following is implemented, fully tested and working: LinearAlgebraDistributionHelpers::concatenate(...) In src/generic/double_vector h and cc, the following is implemented, fully rested and working: DoubleVectorHelpers::concatenate(...) DoubleVectorHelpers::concatenate_without_communication(...) DoubleVectorHelpers::split(...) DoubleVectorHelpers::split_without_communication(...) In src/generic/matrices h and cc, the following is implemented, fully tested and working: CRDoubleMatrixHelpers::concatenate(...) CRDoubleMatrixHelpers::concatenate_without_communication(...) In src/generic/block_preconditioner.cc, the code has been modified so we have pass in precomputed blocks. If no precomputed blocks are passed down, the logic is the same as before, so no current code will be affected. Various other bits and bobs have changed, mainly bug fixes and comment changes. ALL SELF-TESTS HAVE PASSED. ------------------------------------------------------------------------ r424 | mheil | 2013-05-04 14:10:13 +0100 (Sat, 04 May 2013) | 5 lines Changed enumeration of boundaries in unstructured_adaptive_fs demo codes (doc. not affected) -- this was extremely hacky as only some were enumerated! ------------------------------------------------------------------------ r423 | dshepherd | 2013-04-30 16:39:47 +0100 (Tue, 30 Apr 2013) | 5 lines * Small changes as requested by Matthias * Speed up parallel self tests * Update .gitignore ------------------------------------------------------------------------ r422 | dshepherd | 2013-04-30 16:39:46 +0100 (Tue, 30 Apr 2013) | 8 lines Add exit statuses to some validate.sh scripts that were missing them To check for this in the future you can use the command find -name "validate.sh" | xargs grep -i -L "exit" | xargs grep -i -L "set -o errexit" which will return a list of validate.sh files that do not contain an "exit" or "set -o errexit" statement. ------------------------------------------------------------------------ r421 | dshepherd | 2013-04-30 16:39:46 +0100 (Tue, 30 Apr 2013) | 1 line Added error check on files opened in tetgen mesh construction ------------------------------------------------------------------------ r420 | dshepherd | 2013-04-30 16:39:46 +0100 (Tue, 30 Apr 2013) | 8 lines Add paranoid check to triangle mesh construction to check for 0-based indexing Triangle can output the mesh in 0 or 1-based indexing, but we can only handle 1-based indexing. Previously using 1-based indexing gave a slightly cryptic segfault. Ideally oomph-lib should work with either index base but I don't know enough about the code to implement the fix. ------------------------------------------------------------------------ r419 | dshepherd | 2013-04-30 16:39:45 +0100 (Tue, 30 Apr 2013) | 7 lines Improvements to parallel self test * Automatically extract oomph_root from Makefile if possible * Don't try to record a list of test passes The idea was flawed: tests can have changed without needed to be rebuilt (e.g. if a .cc file changes). ------------------------------------------------------------------------ r418 | dshepherd | 2013-04-30 16:39:45 +0100 (Tue, 30 Apr 2013) | 1 line Remove some unused code from parallel_self_test.py ------------------------------------------------------------------------ r417 | dshepherd | 2013-04-30 16:39:45 +0100 (Tue, 30 Apr 2013) | 1 line oomph-convert.py : Send errors to stderr not stdout ------------------------------------------------------------------------ r416 | dshepherd | 2013-04-30 16:39:44 +0100 (Tue, 30 Apr 2013) | 25 lines Clean up some things in timesteppers.h * Store time in a double rather than double* Simplifies the rest of the class, no benefit to using a pointer. * "const"ify some functions * Replace some function overloads by using default arguments e.g. double& dt(const unsigned &t=0) {return Dt[t];} instead of double& dt(){return Dt[0];} double& dt(const unsigned &t) {return Dt[t];} * Add check to avoid segfaults when getting previous times More than ndt() steps in the past. * Remove some very old commented out code * Add "nprev_values_for_evaluation_time()" function For new style timesteppers. * Paranoid checks for null Time_pts ------------------------------------------------------------------------ r415 | dshepherd | 2013-04-30 16:39:44 +0100 (Tue, 30 Apr 2013) | 6 lines * Add to_upper and to_lower functions for strings * Rename check_static_cast to checked_static_cast (consistency) * Remove an error check (added by me) in MPI_Helpers::communicator_pt() Because "serial_communicator()" doesn't exist without MPI... ------------------------------------------------------------------------ r414 | dshepherd | 2013-04-30 16:39:44 +0100 (Tue, 30 Apr 2013) | 1 line Add paranoid check to operator *= and /= in DoubleVector ------------------------------------------------------------------------ r413 | dshepherd | 2013-04-30 16:39:43 +0100 (Tue, 30 Apr 2013) | 3 lines Update documentation to include OOMPH_CURRENT_FUNCTION macro In code examples and when talking about macros. ------------------------------------------------------------------------ r412 | dshepherd | 2013-04-30 16:39:43 +0100 (Tue, 30 Apr 2013) | 5 lines Add DTSF_min_decrease parameter to Problem * Analogous to DTSF_max_increase * Previously a local variable was used for some reason ------------------------------------------------------------------------ r411 | dshepherd | 2013-04-30 16:39:42 +0100 (Tue, 30 Apr 2013) | 7 lines Add constructor specifying a directory to DocInfo, clean up default constructor * Since we almost never want to use the default "." directory But changing the default would be a bad idea. * Change default DocInfo constructor to use an initialization list Just because it's good standard practice. ------------------------------------------------------------------------ r410 | dshepherd | 2013-04-30 16:39:42 +0100 (Tue, 30 Apr 2013) | 1 line Use std::cerr as output stream for OomphLibErrors and OomphLibWarnings ------------------------------------------------------------------------ r409 | dshepherd | 2013-04-30 16:39:39 +0100 (Tue, 30 Apr 2013) | 14 lines Insert OOMPH_CURRENT_FUNCTION macro into all OomphLibError calls * To check this you can use the command: git diff [this commit] [previous commit] -w -S "OOMPH_CURRENT_FUNCTION" >temp_file && git diff [this commit] [previous commit] -w | fgrep -vxf temp_file or whatever the equivalent is for svn. * Fixed strange use of '<' In two places a '<' character was used instead of a ',' between function arguments in calls to OomphLibError. I have no idea how this would have compiled... Conflicts: src/generic/oomph_utilities.cc ------------------------------------------------------------------------ r408 | dshepherd | 2013-04-30 16:39:33 +0100 (Tue, 30 Apr 2013) | 1 line Add OOMPH_CURRENT_FUNCTION macro and update gitignore ------------------------------------------------------------------------ r407 | dshepherd | 2013-04-30 16:39:33 +0100 (Tue, 30 Apr 2013) | 1 line Updated .gitignore ------------------------------------------------------------------------ r406 | dshepherd | 2013-04-30 16:39:33 +0100 (Tue, 30 Apr 2013) | 10 lines Small improvements to timesteppers * Add const dt() access function to Time * Resize weights in BDF using the resize function Instead of a loop. * Set Weight(0,0) = 1.0 in BDF even if not adaptive Pretty sure this should always be done, although it never seems to be used... ------------------------------------------------------------------------ r405 | dshepherd | 2013-04-30 16:39:32 +0100 (Tue, 30 Apr 2013) | 3 lines Move some code for convergence data out of the newton solver It can easily be done by the ConvergenceData class instead. ------------------------------------------------------------------------ r404 | dshepherd | 2013-04-30 16:39:32 +0100 (Tue, 30 Apr 2013) | 4 lines Add operators *=, /= and << to DoubleVector *= and /= are only for multiplication by a double (otherwise multiplication is slightly ambiguous). ------------------------------------------------------------------------ r403 | dshepherd | 2013-04-30 16:39:31 +0100 (Tue, 30 Apr 2013) | 7 lines Create a serial comm_pt in MPI_Helpers::communicator_pt() if none exists Previously MPI_Helpers::communicator_pt() would fail unless MPI_Helpers::init() had been called even with MPI disabled. Since people are unlikely to call MPI_Helpers::init() if MPI is disabled it's much nicer to create the pointer if it is requested but doesn't yet exist, then MPI_Helpers::communicator_pt() "does the right thing" in all cases. ------------------------------------------------------------------------ r402 | dshepherd | 2013-04-30 16:39:30 +0100 (Tue, 30 Apr 2013) | 1 line Pass by const reference in DoubleVector += and -= operators ------------------------------------------------------------------------ r401 | dshepherd | 2013-04-30 16:39:30 +0100 (Tue, 30 Apr 2013) | 5 lines Remove references to my home dir from parallel_self_tests script * Change default oomph-lib directory to "../" instead of my home dir * Make the help text keep its nice formatting ------------------------------------------------------------------------ r400 | dshepherd | 2013-04-30 16:39:29 +0100 (Tue, 30 Apr 2013) | 9 lines Improve some comments and autogen.sh's output to stdout * Add "-k" to references to running "make check" in output of autogen * Remove "/usr/share/aclocal/glib.m4:8:" from output of autogen Emacs thinks it is a real error but it isn't. Removing the file:line number part fixes this without changing the meaning of the message. * Add citations to Gresho and Sani in the BDF2 timestepper ------------------------------------------------------------------------ r399 | mheil | 2013-04-13 12:45:09 +0100 (Sat, 13 Apr 2013) | 34 lines -- In anticipation of an upgrade of our timesteppers so that we can implement schemes like the midpoint rule (which requires residuals to be evaluated at a time that differs from that at the end of the timestep) REMOVED: GeneralisedElement::time_pt() and the associated storage. Upgraded all elements so that time is now obtained from the timestepper associated with their first node. Genuinely GeneralisedElements (which may not have nodes) will in future have to get time from the timestepper of their internal or external Data (or create storage for a pointer to a Time object themselves). This required the introduction of a dummy timestepper for Steady<>. Incidentally, this identified (only!) one driver code where we'd forgotten to pass the time pointer to the element, which meant that it always evaluated the source function at t=0! It was impossible to warn the user about such oversights with our previous approach so just as well this is gone now! I've TRIED to get rid of all references to the need to pass the time pointer to the elements in all tutorials but am likely to have overlooked a few. Tutorials may therefore refer to a code line that's no longer there... Keep your eyes open... -- Fixed various broken hooks in documentation. ------------------------------------------------------------------------ r398 | mheil | 2013-04-10 08:36:04 +0100 (Wed, 10 Apr 2013) | 11 lines Fixed an \iint problem in static_single_layer tutorial (symbol doesn't exist with the latex packages that doxygen uses). There are three additional (very strange) cases where latex errors occur but I can't figure out what's going on there. Specifically: trying to build the documentation viia the makefilery creates an error; executinig the steps performed by the makefile manually works. Luckily the errors don't occur for tutorials that are likely to be printed but we should still get to the bottom of this. ------------------------------------------------------------------------ r397 | mheil | 2013-04-10 07:56:05 +0100 (Wed, 10 Apr 2013) | 69 lines The analytical/chain-rule based evaluation of shape derivatives is quite broken -- certainly for refineable elements (with hanging nodes!). All the machinery needs to be carefully re-examined (see below). For now we have kept the default method to be ElementWithMovingNodes::Method_for_shape_derivs = ElementWithMovingNodes::Shape_derivs_by_direct_fd and have altered the functions void ElementWithMovingNodes::evaluate_shape_derivs_by_chain_rule(...) void ElementWithMovingNodes::evaluate_shape_derivs_by_fastest_method(...) to throw an error, unless called with a new optional boolean argument, called i_know_what_i_am_doing, that can be used by "expert users". This currently done in a few demo driver codes where we deliberately test this functionality and it works "OK", either because the elements aren't refineable, or the degregation of the Newton method isn't bad (in fact, it generally isn't anyway). The function void ElementWithMovingNodes::evaluate_shape_derivs_by_direct_fd() was kept intact since it just re-asserts the default behaviour and is therefore harmless. The problem (there may be more!) seems to be the lack of distinction between the element's nodes and its shape controlling nodes -- they can differ for refineable elements with hanging nodes. What we (Matthias and Patrick) know is that ElementWithMovingNodes::get_dnodal_coordinates_dgeom_dofs(...) does the right thing (though, interestingly, the comment at the top of the function does not explicitly spell out that the j in dX_{ij} / d s_l refers to the element's shape-controlling rather than its own nodes. Whoever takes this up must work their way backwards through the machinery starting from ElementWithMovingNodes::fill_in_jacobian_from_geometric_data(...) which also seems OK. Specifically, the rank-three tensor dresidual_dnodal_coordinates[] in that function is dimensioned (and then used) correctly when the chain rule is being evaluated, BUT all the elements that actually implement (or overload) get_dresidual_dnodal_coordinates(...) seem to do this wrongly. The call/inheritance sequence for this function is quite deep but it seems that few/none of the implementations use (or can use) the required "shape controlling node" machinery provided by RefineableElement::nshape_controlling_nodes() and RefineableElement::shape_controlling_node_lookup() since much of the machinery is implemented at the level of non-refineable elements (which obviously don't have access to these functions). Note also that some of the specific implementations of get_dresidual_dnodal_coordinates(...) are wrong for other reasons. For instance, RefineablePoissonEquations::get_dresidual_dnodal_coordinates(...) refers to psi(q) (in the shape derivative of the source fct term) where q loops over the shape controlling nodes -- there can be more of those than the number of nodes in the element in which case we'd get a nasty range checking error (or seg fault). More horrors may lurk elsewhere.... ------------------------------------------------------------------------ r396 | ahazel | 2013-04-09 08:14:03 +0100 (Tue, 09 Apr 2013) | 14 lines Mostly further additions to free-surface documentation with concomitant changes in driver codes, including a new pseudo-solid version of the update in 3d_free_surface.cc Also updated the index according to the new format, changing the python script bin/make_index.py where needed. Corrected a little buglet in one_d_womersley.cc for the case when you have Trilinos, but not Hypre. Added some missing FaceGeometry specifications in solid_elements.h ------------------------------------------------------------------------ r395 | phurley | 2013-03-27 14:13:24 +0000 (Wed, 27 Mar 2013) | 15 lines Mainly revisions of documentation with associated changes in demo_driver codes. 1. Revised single_layer_free_surface tutorial 2. Added complete version of two_layer_interface tutorial and updates to both the elastic and spine versions of the associated demo driver 3. Added complete version of two_layer_interface_axisym tutorial and updates to both the elastic and spine versions of the associated demo driver 4. Removed unnecessary PATRICKFLAGS everywhere within the code ------------------------------------------------------------------------ r394 | ahazel | 2013-03-26 15:33:53 +0000 (Tue, 26 Mar 2013) | 20 lines 1. Added additional hexagonal-symmetry test case for the homogenisation problem and tidied up some of the associated code. 2. Removed the unnecesary TriangleMeshParameters::use_attributes() flag from the class and any demo drivers. 3. Updated various bits of free surface documentation so that Patrick can include his stuff. This has included a new elastic two-layer static cap test. 4. Added documentation about MUMPS. 5. Changed the index generation script so that it DOES NOT sort into alphabetical order any more ... it's up to us to maintain it now. 6. Provided the fix for the funny floating point errors in the Helmholtz stuff, which were associated with the pow() function. ------------------------------------------------------------------------ r393 | mheil | 2013-03-23 15:50:18 +0000 (Sat, 23 Mar 2013) | 4 lines fixed typo in one of Andrew's Makefile.ams (and one of my own...) so make dist now works again ------------------------------------------------------------------------ r392 | mheil | 2013-03-23 12:31:19 +0000 (Sat, 23 Mar 2013) | 6 lines Added #ifdefs to ensure pseudo-elastic fsi code can be compiled with various combinatinos of hypre/trilinos being there/not there. demo_drivers/interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube_work.cc is actually built from that source.... Also made sure that working version of ------------------------------------------------------------------------ r391 | mheil | 2013-03-23 09:44:10 +0000 (Sat, 23 Mar 2013) | 31 lines -- Fixed problem with pseudo-elastic fsi preconditioner: forgot to set mesh for GeneralPurposeBlockPreconditioner for "real solid" block (after removal of default mesh and/or the add_mesh() function. -- Added option to use iterative linear solver (preconditioned by our fancy pseudo-elastic fsi preconditioner) to distributed collapsible tube code in mpi/multi_domain/pseudo_solid_collapsible_tube/ (Have checked that self-tests passes with either solver but have not added separate test for use with iterative linear solver since I haven't had time to check all the trilinos/hypre/etc dependencies and don't want to break anything before I disappear for 10 days...). Code can be run with iterative linear solver by specifying the command line flag --use_iterative_solver -- Added additional "work-in-progress" version of non-distributed pseudo-elastic collapsible tube code to demo_drivers/interaction/pseudo_solid_collapsible_tube which uses iterative linear solver (basically a version of the existing code, with the iterative solver code uncommented). This is mainly to give Ray something to play with. ------------------------------------------------------------------------ r390 | dshepherd | 2013-03-21 19:19:34 +0000 (Thu, 21 Mar 2013) | 8 lines Small documentation updates Replace 'make check' with 'make check -k' everywhere in documentation (should always be used otherwise self tests stop after any test fails to build or fails to run). Add a little note on eigensolvers always failing if arpack is not installed to 'bin/parallel_self_test.py'. ------------------------------------------------------------------------ r389 | mheil | 2013-03-21 08:33:54 +0000 (Thu, 21 Mar 2013) | 4 lines Added "How do I build the self tests without running them?" FAQ entry to list of items at beginning of page. ------------------------------------------------------------------------ r388 | mheil | 2013-03-21 07:57:13 +0000 (Thu, 21 Mar 2013) | 22 lines -- Removed GeneralPurposeBlockPreconditioner::add_mesh(...) and associated storage (which duplicated mesh storage already provided in underlying BlockPreconditioner class, resulting in awful code. Meshes now need to be passed with constructions such as prec_pt->set_nmesh(2); prec_pt->set_mesh(0,fluid_mesh_pt); prec_pt->set_mesh(1,solid_mesh_pt); -- Removed PseudoElasticFSIPreconditioner:: set_solid_preconditioner_dof_to_block_map(...) and associated storage -- wasn't used anyway and unclear why it would ever have been needed. ------------------------------------------------------------------------ r387 | mheil | 2013-03-19 07:51:14 +0000 (Tue, 19 Mar 2013) | 3 lines Added output of Newton iteration count to melting demo code. ------------------------------------------------------------------------ r386 | mheil | 2013-03-19 07:44:29 +0000 (Tue, 19 Mar 2013) | 17 lines -- Made SimpleCubicTetMesh inherit from TetMeshBase so that it re-uses the boundary element info setup from that class. Also added a warning about the mesh's general inefficiency (mainly to do with the (in principle avoidable) change of normal nodes to boundary nodes. This was, in fact, the root cause of a problem that bizarrely manifested itself in the Schur complement NSt precond demo code (though that code had nothing to do with it). The problem was the use of a map that used pointers to the original nodes, an increasing number of which got converted to boundary nodes (with a possible change in their pointer addresses!) as the mesh construction proceeded... -- Overwrote the validata for the 3D cantilever with that from around version 375. Seems to be have been undone in David's slightly turbulent branch merge... ------------------------------------------------------------------------ r385 | ahazel | 2013-03-18 21:43:36 +0000 (Mon, 18 Mar 2013) | 25 lines Commit to check that I haven't totally trashed the repository 1. Fixes to remove warning in jeffery_orbit.cc that was because copied data was deleted in the wrong order. It's fixed by changing the order of deletion 2. Final modifications and doc for navier_stokes/inclined_plane.cc (validata updated) 3. Modifications and doc for navier_stokes/unstructured_fluid_ns/ adaptive_drop_in_channel.cc (validata updated) to make it as close as possible to the bubble case. 4. Added homogenisation demo (not complete yet, but just here while I do this check in). It's the basic problem in the paper with Natasha, Will & Dave that will be properly refined over the next couple of days. In the process I have modified the TriangleParameters so that there is an additional boolean that allows suppresion of refinement of boundaries. Also added a new general ElasticityTensor 5. Funny failures in helmholtz/scattering/unstructured_scattering.cc only occur on my machine when NOT optimised! There are Floating Point errors, but I still haven't tracked them down ------------------------------------------------------------------------ r384 | dshepherd | 2013-03-14 10:30:13 +0000 (Thu, 14 Mar 2013) | 3 lines Fix trilinos for gcc 4.7+ (using sed in build_script) Needed to add this pointers in a few places. ------------------------------------------------------------------------ r383 | dshepherd | 2013-03-13 13:55:01 +0000 (Wed, 13 Mar 2013) | 548 lines Dummy commit to log this list of changes made on "david-branch" (merged in r378) %%------------------------------------------------------------------------ %%r377 | dshepherd | 2013-03-11 19:31:33 +0000 (Mon, 11 Mar 2013) | 6 lines %% %%Initial commit of bin/parallel_self_test.py %% %%Python script to run multiple self tests in parallel and print the results %%in a readable way. %% %% %%------------------------------------------------------------------------ %%r376 | dshepherd | 2013-03-11 19:26:21 +0000 (Mon, 11 Mar 2013) | 9 lines %% %%Small changes/fixes as requested by Matthias %% %%* Update documentation for preconditioner setup function %% %%* Update/remove various comments %% %%* Undo accidental revert of doc/axisym_linear_elasticity/cylinder/cylinder.txt %% %% %%------------------------------------------------------------------------ %%r374 | dshepherd | 2013-03-08 15:38:37 +0000 (Fri, 08 Mar 2013) | 5 lines %% %%Re-added src/axisym_linear_elasticity changes %% %%Not sure why they weren't there in the first place... %% %% %%------------------------------------------------------------------------ %%r373 | dshepherd | 2013-03-08 15:34:25 +0000 (Fri, 08 Mar 2013) | 6 lines %% %%Fix sum of matrices %% %%Add bool argument to sparse_indexed_output as now required by matrix base %%class. %% %% %%------------------------------------------------------------------------ %%r372 | dshepherd | 2013-03-08 08:56:29 +0000 (Fri, 08 Mar 2013) | 33 lines %% %%Merge trunk into branch %% %%Needed to fix a few things to get it compiling + self tests passing on my %%computer: %% %%* Add "this->" as needed for newer GCC versions %% To demo_drivers/helmholtz/point_source %% %%* Increase the numerical zero threshold in navier_stokes/inclined_plane %% From ~ 1e-11 to 1.0e-9, should be fine seeing as Newton method treats %% 1e-8 as zero... %% %%* Add problem_pt to preconditioner constructor PseudoElasticFSIPreconditioner %% In fsi_channel_with_leaflet_precond.cc %% Required because of problem pointer removal from preconditioner base class. %% %%* linearised_fsi_pulsewave still broken, not sure what's going on there %% %%* Add set meshes in subsidiary preconditioner of pseudo-elastic %% Again, needed becase we removed problem pointer from preconditioner base %% class. It used to use a default mesh. %% %%* Not yet merged axisym_linear_elasticity - svn is weird... %% Commiting before I lose anything. %% %%Not working: /home/david/svn-oomph-lib/demo_drivers/interaction/linearised_fsi_pulsewave %% /home/david/svn-oomph-lib/demo_drivers/axisym_linear_elasticity/cylinder %% %% %%There could be other small changes that I don't remember. I expected svn to %%make a commit as soon as I merged but it doesn't, so the changes I made to %%get everything to compile are now lost in the noise of a large merge... %% %%------------------------------------------------------------------------ %%r371 | dshepherd | 2013-03-07 11:40:46 +0000 (Thu, 07 Mar 2013) | 1 line %% %%Changes for updated version of gcc (unistd and this pointers) %%------------------------------------------------------------------------ %%r370 | dshepherd | 2013-03-07 11:40:45 +0000 (Thu, 07 Mar 2013) | 242 lines %% %%Changes from git %% %%commit 9e70a5144bd96bda27d8456be9cfbe7cb22b8fea %%Author: David Shepherd %%Date: Thu Mar 7 10:13:54 2013 +0000 %% %% Fix autogen.sh not working when there is no user_drivers dir_list to backup %% %%commit 191792381c44fb7af758102fdd505aabe09a4129 %%Author: David Shepherd %%Date: Wed Mar 6 15:33:20 2013 +0000 %% %% Remove Ray's extra autogen script %% %%commit 46d882b5b8432ed61040a32e2a8ef93aaa6518d1 %%Author: David Shepherd %%Date: Wed Mar 6 15:17:02 2013 +0000 %% %% Missed some bits of trilinos in the last commit, removed now %% %%commit 6fe13866148965e182dacfa8945db7466cae1190 %%Author: David Shepherd %%Date: Wed Mar 6 15:15:20 2013 +0000 %% %% Removed trilinos from git %% %% Because we defintely don't want it added to svn (at least not by me). %% %%commit 993d79a5af2ec741702ecfaac09aa8c61c91d04e %%Author: David Shepherd %%Date: Wed Mar 6 15:10:43 2013 +0000 %% %% Set mesh pointers and comm_pt in sub preconditioners of pseudoelastic %% %% This is required because they used to use the default mesh, which is no %% longer available. %% %%commit 15a8f72068a91cc09eb0c390f0edc1c38ff70bb0 %%Author: David Shepherd %%Date: Wed Mar 6 12:33:47 2013 +0000 %% %% Fix spelling in preconditioner.h and add changes from outside git %% %% Changes are just unsigned -> long in some places in sum_of_matrices and %% some comments. %% %%commit 1299c0a34084ccde01e182b23a4bd13ea32ed8b3 %%Author: David Shepherd %%Date: Wed Mar 6 11:55:21 2013 +0000 %% %% Remove problem_pt stuff from trilinos_solver.cc %% %%commit 1668c96c3b7d5eca23387579d99502d96fc2aa37 %%Author: David Shepherd %%Date: Wed Feb 20 14:11:24 2013 +0000 %% %% Update mpi self tests for preconditioner changes %% %%commit 296d396df078bb0d571ae9122815a09ea8cebaba %%Author: David Shepherd %%Date: Wed Feb 20 14:08:58 2013 +0000 %% %% Add check for number of cores in used in mpi self test command %% %% Added to bin/minimal_mpi_test.cc %% %% Runs in autogen.sh. %% %% If number of cores is not 2 it will fail with a warning (because the self %% tests only work with 2 cores). %% %%commit a6206817cd8348d9bc6529d0895c196abc337334 %%Author: David Shepherd %%Date: Wed Mar 6 11:31:43 2013 +0000 %% %% Relevant changes from 51a3e4a60285e6021e04929707a10b9679a0203e %% %%commit 3624054efda68af9458368950f08b32c4908b5a4 %%Author: David Shepherd %%Date: Fri Jan 25 14:47:24 2013 +0000 %% %% Cleaned up .gitignore, added some more binaries %% %% Conflicts: %% .gitignore %% %%commit 11eca21f0482c51c284a4ff378f0f7b1c7d486dc %%Author: David Shepherd %%Date: Fri Jan 25 14:44:16 2013 +0000 %% %% Clean up dummy validate scripts and add -k to make check in autogen %% %% Some validate.sh scripts do nothing. A previous patch made doing nothing %% return a non-zero exit status. Changed them to just return 0. %% %% -k means don't stop if a build fails. %% %%commit 7c9c706631bbeb7c5b3011f5cc668c83f557a538 %%Author: David Shepherd %%Date: Wed Jan 23 19:44:34 2013 +0000 %% %% Add exit statuses to validate scripts. %% %%commit 56b2463f39d8c76ca1134db4d40eb7a5a6013301 %%Author: David Shepherd %%Date: Mon Jan 21 17:29:13 2013 +0000 %% %% Remove problem pointer from preconditioners and related changes %% %% * Updates to preconditioners class %% %% ** Changed setup function to take an OomphCommunicator* instead of Problem* %% *** Allows the preconditioners to be used in parallel outside of a problem %% For example GMRES always uses a preconditioner (identity preconditioner %% if nothing else) so it segfaulted if used in parallel outside of a %% problem. %% %% *** Gives proper segregation %% If every preconditioner has a non-const problem pointer then it can %% modify the problem in any way it likes. For most preconditioners this %% is unecessary and when it is needed it should really be explicit. %% %% *** Since that is all the problem pointer is used to get in almost all %% cases. %% %% *** Defaults to zero (for non-parallel cases). %% %% *** Wrapper function to allow old code to still work. %% %% *** Added storage, set and get functions for the OomphCommunicator* and %% removed those for the Problem*. %% %% *** Updated preconditioner array in a similar way %% %% * Updates to block preconditioners class %% %% ** New function any_mesh_distributed() in block preconditioner %% To replace problem_pt->distributed() since we no longer have a problem_pt %% in preconditioners and the two conditions are equivalent (according to %% Matthias). %% %% ** Do not choose a default mesh in block preconditioners if none is set %% Required a problem pointer since it just picked problem_pt->mesh_pt(). %% %% Was probably a bad idea: silently uses all meshes instead of what is %% specified. In particualar in subsidiary preconditioners default meshes %% were sometimes used unecessarily which could have caused problems if used %% in cases with meshes that the preconditioner should not know about. %% %% *** Some preconditioners were using the default mesh setting %% Now set it explicitly. %% %% These should probably be double checked by someone else... %% **** "Block_sub_prec_1_pt" in biharmonic_preconditioner.cc %% **** "F_block_preconditioner_pt" in navier_stokes_preconditioners %% %% * Updates to linear solvers %% %% ** Fixed comments on solve(..) without a problem_pt %% They now reflect the real code (no changes to the code itself). %% %% ** Removed problem_pt argument from iterative linear solver solve_helper() s %% %% *** Unecesary because it was only used to get a communicator pointer %% But the communicator pointer is already been stored in the linear solver %% itself (since it is a DistributableLinearAlgebraObject)! solve_helper() %% is private so this is not an interface change. %% %% *** Adjusted function calls to work with these changes %% %% *** Adjusted comments to reflect these changes %% %% * Updated demo drivers to work with new function parameters %% %% * Some preconditioners still require a problem pointer %% Namely the NavierStokesSchurComplementPreconditioner and anything %% containing it as a subpreconditioner. Added storage, set, get functions %% for a non-const problem pointer in this class. %% %% Added problem pointer as a constructor argument for these cases: %% ** NavierStokesSchurComplementPreconditioner %% ** BoussinesqPreconditioner %% ** FSIPreconditioner %% ** PseudoElasticFSIPreconditioner %% %% * Misc %% ** In block preconditioner moved mesh_pt PARANOID checks into get function %% Check inside the mesh_pt(..) function instead of checking the result %% everywhere it is used. %% %% ** Removed unecessary "virtual" specifiers %% BoussinesqPreconditioner : public virtual BlockPreconditioner %% %% ** Added const specifier to Mesh::finite_element_pt %% It is always a get function because it does not return by %% reference. Hence there is no reason not to be const. %% %% ** Removed manual caching of problem pointer in solid_preconditioners with MPI %% Code was: %% %% #ifdef OOMPH_HAS_MPI %% // store the problem pt %% const Problem* problem_pt = this->problem_pt(); %% #endif %% %% No idea why this would ever be needed. %% %%commit bc0fc9b1040b75d126295902cd34a65166b6ee77 %%Author: David Shepherd %%Date: Mon Jan 21 14:54:01 2013 +0000 %% %% Removed "current" config file since it constantly changes %% %% Also updated .gitignore to ignore that and a few other generated files. %% %%commit 68004a4d81ab8814706e8fd6f4e0262e81ee1852 %%Author: David Shepherd %%Date: Mon Jan 21 14:48:55 2013 +0000 %% %% Add missing .dat files and modify .gitignore to include them %% %%commit 9fac32c361d577c2270493605ee1839bd0d018df %%Author: David Shepherd %%Date: Tue Jan 15 19:45:10 2013 +0000 %% %% Update .gitignore and remove some generated files %% %% Added all the files that were generated (for me, with this config) by %% autogen. %% %%------------------------------------------------------------------------ %%r342 | dshepherd | 2012-12-13 11:28:48 +0000 (Thu, 13 Dec 2012) | 1 line %% %%Tiny bug fix: missed the const specifier on a couple of dump functions %%------------------------------------------------------------------------ %%r341 | dshepherd | 2012-12-12 19:21:12 +0000 (Wed, 12 Dec 2012) | 1 line %% %%Merge trunk to david-branch %%------------------------------------------------------------------------ %%r340 | dshepherd | 2012-12-11 12:08:40 +0000 (Tue, 11 Dec 2012) | 16 lines %% %%Some small tweaks to previous patches %% %%* Make all dump functions const %% Since we can do this now %% %%* Fix some whitespace that got ruined by me previously %% %%* Rename some of the new functions as suggested by Matthias %% get_non_boundary_node -> get_some_non_boundary_node %% polymorphic_cast -> checked_dynamic_cast %% %%* Clean up a few comments %% %%* Remove "poisson_elemental_flux" function %% It was always a bad idea for a function. No one else uses it. %% %%------------------------------------------------------------------------ %%r337 | dshepherd | 2012-11-23 11:32:05 +0000 (Fri, 23 Nov 2012) | 1 line %% %%Some small fixes to the previous patch, all self tests now pass %%------------------------------------------------------------------------ %%r336 | dshepherd | 2012-11-22 18:28:23 +0000 (Thu, 22 Nov 2012) | 197 lines %% %%Initial commit containing changes that were previously stored in git %% %%* General changes from git log %% %%** Add another example list of tests to run_selected_tests.bash %% %%** Fix a possible divide by zero in adaptive timestepping %% If the timestepping error came out as zero (probably by some fluke) then %% calculating the rescaling factor results in a divide by zero. So we %% check for this case and change to a small but finite error. This should %% have no effect on the rescaling factor because it is already limited to %% 4. %% %%** Add possibility for "elemental flux" to poisson elements %% Takes position within element as argument. This allows us to use data from %% within the element as an imposed flux (e.g. for multiphysics). Default is %% no change from before. %% %%** Change block preconditioners to use new version of functions %% Without passing matrix/problem pointer around everywhere. %% %%** Speed up Mesh::convert_to_boundary_node(..) by caching pointers. %% Allow user to supply a list vector of finite element pointers to %% Mesh::convert_to_boundary_node in order to avoid the (very large) slowdown %% caused by repeatedly dynamic casting GenericElement* to FiniteElement*. %% %% (We can't just use static_cast because of the diamond inheritance, see %% http://stackoverflow.com/questions/6044527/downcast-in-a-diamond-hierarchy .) %% %% The function is still slow (it's still O(N) per call) but less so. %% %%** Add function Mesh::get_non_boundary_node() %% Returns a pointer to the "first" node which is not on the %% boundary. Possibly slow/inelegant... %% %%** Added return values to fpdiff.py %% Now returns 0 (success) if files are the same and 2 (failure, but not %% "standard failure" which is usually 1). %% %%** Do not permanently reorder nodes in Mesh::dump() %% This was causing subtle bugs when used with multiple processors (and it %% is a bad idea to change data in an output function anyway). %% %% Added a function to get a vector giving the reordering and changed to use %% that vector for the output loop (instead of changing the mesh's node %% ordering). %% %%** Changed one_d_poisson.cc to use real strings (instead of cstrings) %% For output filename construction, hopefully this will set a good example. %% %% The reason cstrings are bad is because filename is longer than some %% arbitrary limit (we use 100 characters) everything will break. If the %% result goes in some descriptively named subdirectories then this is easy %% to do. %% %%** Added function to_string(...) for converting most objects to a string %% Useful for creating strings for e.g. output filenames. Stored in the %% namespace StringConversion. %% %% Added a function number_as_string() in doc_info to get the labelling %% number as a string. %% %%** Added ObsoleteCode::obsolete() to obsolete block preconditioner functions %% %%** Moved construction of Euclid (a Hypre solve) settings to a function %% So that it can be easily reused--I needed it for a Euclid based AMG %% smoother. %% %%** Made some LinearSolver and IterativeLinearSolver access functions const %% %%** Fixed a possible range check error in sparse_indexed_output %% The function always outputs a final matrix entry (for ease of use with %% matlab etc.) but if the matrix is completely empty then checking for a %% non-zero final entry will give an error. %% %% Added a condition to avoid this problem. %% %%** Initialise data in TegenMesh constructor %% Avoiding ever having random pointers is good! %% %%** Slightly improved SuperLU error messages %% Say what the error code means instead of just giving the code. %% %%** Changed some mesh pointers to const in preconditioners. %% %%** Moved SumOfMatrices to its own header file. Changed SumOfMatrices class. %% %%** Comments, added const to functions %% %%* Additional general changes not in git %% %%** Add a new checked dynamic cast function "polymorphic_cast" %% Automatically checks for null pointer if PARANOID is on but works exactly %% as dynamic cast otherwise. Adapted from a function in the boost library, %% name is taken from boost library: %% http://www.boost.org/doc/libs/1_52_0/libs/conversion/cast.htm %% %%** Add FAQ entry on compiling self tests without running. %% %%** Clean up some code that was giving warning spam %% In demo_drivers/womersley/one_d_womersley/one_d_womersley.cc and %% src/generic/multi_domain.template.cc (just moved variable declarations %% inside the appropriate ifdef tags). %% %%* Store problem and matrix pointers in Preconditioner base class %% %%** Reasoning: %% %%*** Removes the need to pass around these two pointers all over the place. %%*** Allows consistent error checking on the pointers. %%*** A few preconditioners already stored one or both pointers %% so this makes everything more consistent. %%*** More "object oriented" and consistent with the rest of oomph-lib. %%*** No change in interface required outside of preconditioners %% Only difference is that the code will (automatically) call the setup %% function in the base class %% %%** General changes %% %%*** Change Preconditioner::setup(Problem*, DoubleMatrixBase*) %% Now stores the pointers then calls DerivedPreconditioner::setup(). %% %%*** Change all setup(...) functions in derived preconditioners to setup() %% No arguments needed since the pointers are already stored. %% %%*** Added access functions (with error checking in PARANOID mode) %% Overloaded access function in block preconditioner to automatically %% perform the dynamic cast (and check for errors in PARANOID). %% %%*** Replace problem_pt and matrix_pt by access function calls %% Optimisation will inline these functions so no performance loss. %% %%*** Remove unnecessary parameters from some BlockPreconditioner functions %% i.e. where matrix_pt or problem_pt was passed in. Compatibility %% functions allow old code to work unchanged. Much cleaner code. %% %%*** Remove "virtual" specifier from inheritance of Preconditioner %% i.e. BlockPreconditioner : public virtual Preconditioner %% -> BlockPreconditioner : public Preconditioner %% %% Was used unnecessarily in a few places. Caused problems with determining %% which overloaded version of setup to call in a few places. %% %%*** Change Preconditioner::solve(...) to be pure virtual %% Before it was implemented but always gave an error message. Making it %% pure virtual allows errors to be detected at compile time and simplifies %% overloading. %% %%*** Remove some (now) un-needed matrix_pts and casts in preconditioners %% %%** Changes to specific precondtioners %% %%*** Add function get_block_different_matrix to BlockPrecondtioner %% Allows the use of the same blocking scheme on a different matrix. This is %% valid in at least one place. %% %%*** In MatrixBasedLumpedPreconditioner remind compiler about Preconditioner::setup %% Note sure why we need to do this here but nowhere else, possibly because %% of the templating. The code needed is simply "using Preconditioner::setup;" %% Also needed for NavierStokeSchurComplement precondtioner. %% %%*** In PseudoElasticPreconditionerScalingHelper assign pointers in constructor %% For some reason it doesn't use setup(...) so we need to assign the %% pointers "manually". Also remove local storage for the matrix pointer %% since we have already stored it. %% %%* Added ConvergenceData class and hooked into Newton solve %% %%** ConvergenceData class %% At each Newton step store: %% %% double Max_residual; %% unsigned Iterative_solver_iterations; %% double Iterative_solver_time; %% double Preconditioner_setup_time; %% double Jacobian_setup_time; %% double Dt; %% %% Provide easy access functions for averages etc. %% %% Should be easy to extend if other data is needed. %% %% Easy output functions to files/streams. %% %%** Hooking into Problem::newton_solve %% Add a pointer Convergence_data_pt to Problem. Defaults to null, if it is %% set to non-null then do the following: %% %% At the start of a newton solve tell it that this is a new newton solve. %% %% After each newton step record the data. %% %%** Added headers and forward declaration as needed to problem.h/cc %% %%** Unfortunately also stores data for failed timesteps, %% probably need to add a flag to say that a timestep passed. %% %%------------------------------------------------------------------------ %%r335 | dshepherd | 2012-11-22 14:42:07 +0000 (Thu, 22 Nov 2012) | 1 line %% %%Created new working branch ------------------------------------------------------------------------ r382 | dshepherd | 2013-03-13 13:44:49 +0000 (Wed, 13 Mar 2013) | 1 line Added new binaries and generated headers to .gitignore ------------------------------------------------------------------------ r381 | dshepherd | 2013-03-13 13:44:49 +0000 (Wed, 13 Mar 2013) | 1 line Fix ifdef for UNISTD in oomph_utilities.cc ------------------------------------------------------------------------ r380 | dshepherd | 2013-03-13 13:44:48 +0000 (Wed, 13 Mar 2013) | 5 lines Re-apply Matthias' previous patch (r375) Didn't manage to merge the svn branch correctly because the server version of svn is so old it dones't have the right commands. So one patch went missing somewhere, this patch adds it back in. ------------------------------------------------------------------------ r379 | dshepherd | 2013-03-13 13:44:47 +0000 (Wed, 13 Mar 2013) | 4 lines Small fix to parallel_self_test.py When removing the old test results it is possible that the old file doesn't exist. Ignore this error (with a try/catch statement) if it occurs. ------------------------------------------------------------------------ r378 | dshepherd | 2013-03-12 11:04:29 +0000 (Tue, 12 Mar 2013) | 3 lines Merge "david-branch" into the trunk ------------------------------------------------------------------------ r375 | mheil | 2013-03-09 08:10:14 +0000 (Sat, 09 Mar 2013) | 38 lines -- Final (?) re-adjustment of procedures involving macro elements in solid mechanics computations: Nodal positions are now NEVER adjusted automatically according to the underlying macro element -- not even if positions are pinned. Logic: Pinnning indicates that the position should not be changed by the solver, not that the node is pinned in place (or onto a macro-element) -- the user may well have pinned a position and then manually assigned a particular value to it. We shouldn't trample over that! The (unavoidable) downside of this is that solid computations are always constrained by the geometry representation of the initial mesh, "initial" meaning before the first solve -- it IS sensible call Mesh::node_update(...) with the optional argument set to true (which will adjust the position of ALL solid nodes according to the underlying macro element representation (if it exists)) to improve the initial geometry. Updated validata of the 3D cantilever test cases (serial and parallel). -- Removed superfluous output (in paranoid mode) generated by Andrew's adjustment of no-longer-hanging nodes in 3D macro-element-based elements. Also dealt with the Lagrangian coordinates properly rather than throwing a warning -- note that they ARE inferred from the underlying "undeformed macro element" (if one exists). -- Added check for presence of unistd.h header. If it's not there we can't do the local memory tests which need getpid(). Compiliation of the relevant functions is bypassed if the header isn't found. -- Added counter for number of Newton iterations taken in the most recent call to Newton solver to Problem class. -- Adjusted various fpdiff tolerances (Helmholtz point source and Andrew's flow down an inclined plane) -- Fixed a few typos in Fourier decomposed time harmonic acoustic FSI doc (thanks to Rob Harter for spotting these). ------------------------------------------------------------------------ r369 | ahazel | 2013-03-06 08:37:24 +0000 (Wed, 06 Mar 2013) | 28 lines WARNING: Temporary check-in some validata may be broken (but I don't think it is) I'm working on the laptop at the moment and want to update documentation, so it's easiest to go via the repository.... A quick update will follow if any data is broken! 1. Renamed the constrained volume elements used in steady free surface problems to be consistent with our naming schemes. Thus ...VolumeConstraintBoundingSolidElement has become Elastic...VolumeConstraintBoundingElement so that in order to switch from a Spine to an Elastic representation all you need to do is swap the word Spine to Elastic 2. Removed all hierhers from src/fluid_interface. The most significant change is the use of Amine's general ID scheme instead of relying on NBulk to find the location of Lagrange multiplier variables in all elements. 3. Added a check for SpineElements in all spine meshes in src/meshes, so that an error is thrown if they are constructed with a template argument that is not a SpineElement. 4. Modified inclined_plane.cc so that it is now a cleaner, leaner code and can produce the pretty time-dependent pictures that Matthias wants... 5. Tweaked a couple of validata tolerances. ------------------------------------------------------------------------ r368 | mheil | 2013-03-04 07:46:08 +0000 (Mon, 04 Mar 2013) | 8 lines -- navier_stokes/adaptive_interface/adaptive_interface.cc contained various bits of code that wouldn't compile with "vanilla" gcc though they were fine with the mpi wrappers (mainly missing std:: and vector vs Vector etc). Latest revisions to this code have also kept all kinds of coding standard crimes alive (upper case local variables etc). Left those alone. ------------------------------------------------------------------------ r367 | mheil | 2013-03-02 16:50:09 +0000 (Sat, 02 Mar 2013) | 9 lines -- new residual for melting (and landscape plot) and added dependency on *.h file (to make sure it gets included in distribution). -- removed long-commented-out stuff from navier_stokes/unstructured_fluid/unstructured_two_d_fluid.cc -- Added intro.txt oomph.idx and to EXTRA_DIST variable in doc/index/Makefile.am ------------------------------------------------------------------------ r366 | mheil | 2013-03-01 17:30:24 +0000 (Fri, 01 Mar 2013) | 5 lines -- Added point source for helmholtz driver code. -- Implemented new melt condition in unsteady heat melt code. ------------------------------------------------------------------------ r365 | mheil | 2013-02-28 18:28:49 +0000 (Thu, 28 Feb 2013) | 24 lines -- Removed all numerical recipes code from the library. This breaks the computation of the principal stresses in the solid mechanics elements. All that's needed to make this work again is for somebody to re-implement the eigenvalue computations for dense matrices (without looking at the numerical recipes book -- read their pathetic licencing conditions in the book!). Various other functionality (e.g. Levenberg Marquart fits that were occasionally useful for post-processing data) were removed too but were not in active use in any of the demo drivers. -- Fixed bug in matrix vector product with transpose of CR matrix (result vector wasn't (re-)initialised!) -- Made globally convergent Newton methods in global namespace and the problem class consistent (and -- in the problem-based case -- correct by doing the multiplication with the transpose of the Jacobian). -- Fixed the (broken) layout of the links to the doxygen-generated class (etc) lists in doc/the_data_structure by suppressing the automatic generation of links and writing my own. ------------------------------------------------------------------------ r364 | mheil | 2013-02-26 17:29:05 +0000 (Tue, 26 Feb 2013) | 51 lines -- Finalised Fourier decomposed FSI and time-harmonic linear elasticity tutorials. Ready to hand over to Rob. -- Removed ^M from time_harmonic_fourier_decomposed_linear_elasticity_elements.cc and axisym_linear_elasticity_elements.cc -- Fixed string vs. std::string problem in domain.h -- Added globally-convergent Newton solver capabilities to melt problem. Not very good! -- Error in globally convergent Newton solver is now only thrown if mpi is actually initialised. -- INTERFACE CHANGE: In Problem class: -- Private member data Use_glob_conv_newton_method becomes Use_globally_convergent_newton_method -- Member fct glob_conv_line_search(...) becomes globally_convergent_line_search(...) -- Member fcts enable_glob_conv_newton_method() disable_glob_conv_newton_method() become enable_globally_convergent_newton_method() disable_globally_convergent_newton_method() ------------------------------------------------------------------------ r363 | mheil | 2013-02-25 08:18:15 +0000 (Mon, 25 Feb 2013) | 3 lines Fixed problem in the_data_structure/Doxyfile. ------------------------------------------------------------------------ r362 | mheil | 2013-02-23 15:05:58 +0000 (Sat, 23 Feb 2013) | 55 lines -- Removed reference to now superfluous fix_volume_.... header files in Makefile.ams (Andrew's killed/moved these). -- Provided missing capabilities to allow adaptive solution of time-harmonic Fourier decomposed linear elasticity problems on unstructured meshes (projection; error estimator;...). -- Added new tutorial discussing the unstructured adaptive solution of time-harmonic Fourier decomposed linear elasticity problems (Code merged into pressure loaded cylinder driver code). -- Added new tutorial for adaptive unstructured solution of Fourier decomposed Helmholtz equation. -- Added new tutorials and driver codes for Fourier decomposed acoustic fsi. Interaction elements live in src/multi_physics. There are two seperate tutorials explaing the structured and unstructured solution (note that currently we can't do such problems with structured refinement). -- Removed all calls to el_pt->enable_evaluate_jacobian_by_fd(); that were inserted into various driver codes during some (now long forgotten) development. -- INTERFACE CHANGE: FourierDecomposedHelmholtzEquations::n_fourier_pt() becomes FourierDecomposedHelmholtzEquations::fourier_wavenumber_pt() and FourierDecomposedHelmholtzEquations::n_fourier() becomes FourierDecomposedHelmholtzEquations:fourier_wavenumber() for consistency with other equations. -- Added output of radiated power to single physics Fourier decomposed Helmholtz (also included into validata). This has now been quintuple checked and written up in the acoustic fsi tutorial because it's such a bloody pain to derive. -- Udated fsi setup in linear fsi to the new version (and removed associated hierher). ------------------------------------------------------------------------ r361 | ahazel | 2013-02-21 09:04:07 +0000 (Thu, 21 Feb 2013) | 20 lines Modified spine meshes in src/meshes so that they do not add the interface elements to the element_pt, apart from bretherton_mesh (which is complex and specific enough that I didn't want to touch it). Thus, the spine meshes now only take one template parameter (the element type) Modified all demo drivers that use spines to add the interface elements explicitly as a separate submesh. Regenerated validata because the order of the element output in the output files has changed, but, of course, checked that the solutions were identical. Modified all demo drivers that use spines to use the generic VolumeConstraintElements, rather than custom elements defined in the demo_driver directory. Deleted the associated fix_..._elements.h files in the specific demo_driver directories. Culled a number of unused spine meshes (moved to private/src/old_meshes) Commented out a division by zero in the new linearised_fsi_pulsewave demo. ------------------------------------------------------------------------ r360 | mheil | 2013-02-18 18:31:32 +0000 (Mon, 18 Feb 2013) | 14 lines -- Added driver code for small-displacement, linearised FSI (pulsewave). -- Added fluid-traction elements for axisymmetric Navier Stokes eqns incl. FSI version where (traction-like) Lagrange multipliers are employed to enforce no-slip. -- Added time-dependence to axisymmetric linear elasticity (Matthew's code) -- Added FSI fluid traction elements for axisymmetric small-displacement linear elasticity. ------------------------------------------------------------------------ r359 | ahazel | 2013-02-12 16:35:50 +0000 (Tue, 12 Feb 2013) | 16 lines -Tweaked some validate.sh tolerances so that the test pass on my machine. -Checked that the new constitutive laws for hyperelastic materials do indeed give zero residuals for a zero displacement and pressure initial guess, after the redefinition of the pressure, so that it *really* is the mechanical pressure -Slightly changed the output functions for solid_elements. -Modified the build script for scalapack and MUMPS so that it correctly uses the compiler flags specified in the oomph-lib build machinery. -Minor updates to doc and publications. ------------------------------------------------------------------------ r358 | mheil | 2013-02-12 10:33:25 +0000 (Tue, 12 Feb 2013) | 74 lines -- Added FaceElements for time-harmonic acoustic FSI to src/multi_physics -- Pointed out (in all comments) that the unsigned returned by the nhistory_values_*() functions in projectable elements must include the current value (otherwise absolutely nothing gets projected). -- Time harmonic linear elasticity elements now work with Omega^2 rather than Omega itself to make them consistent with other elements. -- Provided projectable time harmonic linear elasticity elements. (so we can now do unstructured adaptivity for these equations) and added driver code/tutorial. -- Elasticity tensor for linear elasticity and time-harmonic linear elasticity now has member functions to update the parameters nu and E. -- Removed (commented out) unnecessary warning about no region elements being associated with a specific boundary in triangle mesh. -- Added an explicit notification that further refinement in triangle meshes was supressed because of the min. element area which defaults to 0.01. Without this, the user (me!) may not be aware of that restriction and be surprised why no refinement is performed at all. -- Added annular mesh and associated Domain to src/meshes (also added it to the mesh list in the documentation) -- Removed reference to raw nodal values from various computations in Helmholtz elements. -- Added further output functions for Domains -- can now just provide a string to specify the filename. -- Moved the CompareBoundaryCoordinate class to generic/face_element_as_geometric_object.h to make it accessible from fsi and general multi-domain computations. -- Moved Doc_boundary_coordinate_file from FSI_functions namespace to Multi_domain_functions (also updated all driver codes and documentation). -- Provided new helper functions Multi_domain_functions::setup_bulk_elements_adjacent_to_face_mesh(...) that encapsulate the multi-domain functionality previously used exclusively for (large-displacement) fsi problems. The corresponding functions in the FSI_functions namespace now become very thin wrappers and mainly provide a more FSI-specific explanation of the variables. -- Wrote two tutorials for cartesian time-harmonic acoustic fsi (structured and unstructured) -- Wrote two tutorials for cartesian time-harmonic linear elasticity (structured and unstructured) -- Wrote brief tutorial for unstructured Helmholtz. -- Added -loomph_crbond_bessel to external libs in build process (otherwise all hell breaks lose in multi-physics now that it includes Helmholtzy things which require Bessel fcts). Should have been stored in that variable anyway. Removed it from the Makefile.ams that used it. -- Set ENABLE_PREPROCESSING = NO in all Doxyfiles, to make sure that classes inside #ifdefs are picked up properly (RefineableTriangleMesh wasn't visible in doxygen-generated class list, for instance) ------------------------------------------------------------------------ r357 | bergemann | 2013-02-06 11:17:15 +0000 (Wed, 06 Feb 2013) | 6 lines Communication pointer in Mesh(...) and SolidMesh(...) constructors will only be initialised if oomph-lib was compiled with MPI (#ifdef OOMPH_HAS_MPI was missing) ------------------------------------------------------------------------ r356 | bergemann | 2013-01-18 16:04:29 +0000 (Fri, 18 Jan 2013) | 55 lines -- INTERFACE CHANGE: In NavierStokesTractionElement the interface for the function pointer that specifies the traction has been extended to include the outer unit normal (which can, of course, be ignored when computing the imposed traction in the driver code). The new interface for the user specified function is: void prescribed_traction(const double& t, const Vector& x, const Vector& n, Vector& traction) Demo drivers have been updated accordingly. -- Have added capability for turning the problem's Newton solver into a globally convergent one. New boolean Problem::Use_glob_conv_newton_method and corresponding access fcts control this. Defaults to false. -- In the process of implementing this capability we (Nico!) also detected an error in the black box Newton solver (sqr had been interpreted (not by Nico!) as sqrt...). -- The "globally converging" capability required changes to the LinearSolver class which now has additional fcts to compute the gradient of the (nonlinear) residual (via a matrix vector product of Jacobian and residual vector -- this can only be computed in the linear solver (since it's the only object that sets up the Jacobian!). Broken by default since some solvers (e.g. frontal) never assemble the Jacobian in the first place. -- Introduced public static double FiniteElement::Tolerance_for_singular_jacobian that specifies the (now user-tweakable) tolerance for checking singular Jacobians in mapping of elements). -- Set Comm_pt to null in additional mesh constructor (where mesh gets built from multiple existing meshes; fixed problem with uninitialised (and therefore potentially non-null) pointer which then wrongly indicates that the mesh has been distributed). -- NOTE: problem.h/.cc were temporarily in a strange state because some recently added functionality (the ability to supress the re-solve following a spatial adaptation seemed to have disappeared; added it back in manually so this part of the code should be unaffected by this commit; if there are any problems later on, have a look here...) ------------------------------------------------------------------------ r355 | mheil | 2013-01-17 13:39:59 +0000 (Thu, 17 Jan 2013) | 3 lines Update of validata for disk compression. ------------------------------------------------------------------------ r354 | mheil | 2013-01-17 09:40:15 +0000 (Thu, 17 Jan 2013) | 53 lines -- Incorporated Richard's changes into pseudo-elastic fsi preconditioner tutorial. -- Changed definition of pressure in strain-energy-based large-displacement solid mechanics so that undeformed configuration corresponds to zero pressure (hopefully exactly -- Andrew to confirm). This required updates of various validata because we've redistributed the stress slightly from displacement-related quantities to the (lower-order) pressure. Only significant difference is in airy cantilever which is particularly sensitive because of the singularities in the corners. [Note that this is checked in on behalf of Andrew -- not that I'm trying to pass blame to anyone else if it goes wrong, but...] -- Added two pressure-based self-tests to mpi 3D cantilever (was commented out and didn't converge initially because pressure increment was too large (certainly much larger than in serial counterpart)). -- Added check to projection machinery to check that the element's nodes have at least one value which can be used to store the coordinates during the projection. Trivially true for all ours and it seems hard to imagine a case where this would not be true The only counterexample I can think of is an element in which all actual data is stored as internal data, i.e. we have a completely discontinuous representation of all fields. If such a case ever appears, we can udate the machinery. -- Finally removed all calls to enable_use_of_undeformed_macro_element_for_new_lagrangian_coords(); in driver codes which were only introduced to make self-tests pass after changing default assingment for corresponding boolean. Note that the logic behind the default assignment is explained in various comments all over the code and in doc/solid/disk_compression/html/index.html It's never to be touched again! -- Removed all references to actual_contact_angle_left() and actual_contact_angle_right() in free surface codes (fcts are gone but there was still some dummy output in trace files). -- Added optional boolean to sparse indexed output fcts for for sparse matrices so the (non-intuitive) addition of a zero in the "bottom right corner" (for matlab purposes) now has to be requested explicitly. -- Removed some unnecessary output from matrices.cc ------------------------------------------------------------------------ r353 | mheil | 2013-01-09 18:19:39 +0000 (Wed, 09 Jan 2013) | 15 lines -- Tidied/completed adaptive bubble in channel tutorial incl. lots of cross-references. -- Wrote a relatively brief tutorial for the Bretherton problem, discussing the awkward issues and how they're solved at a high level. Declared this to be complete too. -- Fixed body force in Rob's time-harmonic Fourier decomposed elasticity tutorial. -- Completed spine mesh tutorial and marked it as such. -- Added my publications to publication list. ------------------------------------------------------------------------ r352 | mheil | 2013-01-08 15:16:43 +0000 (Tue, 08 Jan 2013) | 27 lines Big de-hierher-ification and broken link fixing -- All the hierhers in src and demo_drivers have either been fixed (deleted), allocated to somebody else, or deliberately left because they occur in sufficiently obscure contexts (or are genuinely important but beyond fixing right now). Common remaining queries: el_pt->evaluate_shape_derivs_by_direct_fd(); or variants thereof ( el_pt->evaluate_shape_derivs_by* ) el_pt->enable_use_of_undeformed_macro_element_for_new_lagrangian_coords(); apparently often introduced "to ensure that self-tests still pass" el_pt->enable_evaluate_jacobian_by_fd(); -- INTERFACE CHANGE: In triangle meshes: boundary_element_pt_in_region(...) --> boundary_element_in_region_pt(...) updated in all driver codes. ------------------------------------------------------------------------ r351 | mheil | 2013-01-07 13:12:33 +0000 (Mon, 07 Jan 2013) | 4 lines Tweaks to various bits of documentation (incl. Richard's feedback to prescribed displacement pseudo-solid preconditioner). ------------------------------------------------------------------------ r350 | mheil | 2013-01-03 07:36:23 +0000 (Thu, 03 Jan 2013) | 67 lines -- Added driver code and tutorial for Richard's pseudo-elastic FSI preconditioner. -- Added load balancing tutorial and updated associated driver codes. -- Added FAQ entry to explain how to compile/run demo driver codes (lots of people still try "g++ my_code.cc", blissfully unaware of the Makefiles; those who do notice them often use "make" and are surprised that nothing happens). -- Experimentally added customised search engine to oomph-lib header on top of all documentation. Note that this only searches the live website. -- Added links to the three distributed linear algebra/preconditioning tutorials to example code list and made them visible in the parallel tab. -- Re-enabled/completed adaptive unsteady heat/melt code. Works well for sufficiently fine initial discretisation but Newton method fails to converge for coarse initial meshes. To try: Nico's globally convergent Newton method (hopefully being written at the moment) and transfer of old Lagrange multiplier/ melt rate onto new mesh. -- Added namespace MeshChecker with single doubly-templated member function template void assert_geometric_element(const unsigned& dim, const unsigned& nnode_1d=0) which can (should be!) used to check that element specified as template argument to meshes is of the correct geometric type and dimension. Typical use: // Mesh can only be built with 3D Telements. MeshChecker::assert_geometric_element(3); Test is only executed in PARANOID mode. Relevant code has been added to all existing meshes in src/meshes and should be added to any new ones. -- Created new, even more base-most, base class QElementGeometricBase which sits underneath QElements and the quadrilateral HermiteElements (both can be used with meshes that are written for quadrilateral elements). -- Major cleanup of parallel/distributed mesh operations. The fact that a mesh is distributed is now indicated by non-NULL pointer to OomphCommunicator. This makes it unnecessary to pass that pointer around manually throughout the code (and, in some cases, where it simply wasn't accessible use the (possibley different!) communicator in MPI_Helpers). This resulted in many INTERFACE CHANGES: Pointers to OomphCommunicators were removed from virtually all mesh-adaptation-related functions. Demo driver codes were updated. -- Fixed various broken links in documentation. ------------------------------------------------------------------------ r349 | julio | 2012-12-23 17:13:16 +0000 (Sun, 23 Dec 2012) | 6 lines --- Problem with demo driver (because of interface change) interaction/unstructured_fsi/unstructured_two_d_fsi.cc now solved ------------------------------------------------------------------------ r348 | julio | 2012-12-20 17:25:45 +0000 (Thu, 20 Dec 2012) | 4 lines Made sure that temporary driver code in two_d_unsteady_heat_melt at least compiles... (sorry -- should never have been checked in!). ------------------------------------------------------------------------ r347 | mheil | 2012-12-20 17:21:46 +0000 (Thu, 20 Dec 2012) | 3 lines Missing "melting" demo drivers. ------------------------------------------------------------------------ r346 | julio | 2012-12-20 14:30:52 +0000 (Thu, 20 Dec 2012) | 13 lines -- Fixed TriangleMesh constructor so that region information in *ele etc files is processed correctly. INTERFACE CHANGES: The use_attributes flag in the TriangleMesh constructor (used to default to false) is now set automatically and has therefore been removed from the list of arguments. TriangleHelper::create_triangulateio_from_polyfiles(...) now returns a flag that indicates if regions have been specified. ------------------------------------------------------------------------ r345 | ahazel | 2012-12-20 10:55:10 +0000 (Thu, 20 Dec 2012) | 4 lines Tiny change to remove the lines that change the default number of bins in unstructured_fsi demo. Not needed in 2D! ------------------------------------------------------------------------ r344 | ahazel | 2012-12-18 14:33:49 +0000 (Tue, 18 Dec 2012) | 15 lines Fixed a bug in the check_links_in_example_list script so that it can now be run in any directory. Added instructions about compiling Trilinos version 10 (and higher) using the new build machinery. Modified the spherical navier stokes equations so that they can use the latest version of the LSC preconditioners. Updated the mesh_as_geometric_object.cc to issue a warning if the number of elements per bin is too large (greater than 100) and increase the number of bins in the demo unstructured_adaptive_fsi.cc so that it runs at a sensible speed again. ------------------------------------------------------------------------ r343 | mheil | 2012-12-15 15:55:38 +0000 (Sat, 15 Dec 2012) | 7 lines Check in of "melt" unsteady heat driver code and a few files used in the still-not-complete attempt to resolve the pressure jump problem in unstructured simulations of volume constrained free surface problems (driver code lives in private). ------------------------------------------------------------------------ r339 | mheil | 2012-12-08 13:24:20 +0000 (Sat, 08 Dec 2012) | 14 lines -- Added tutorial and demo code describing preconditioner for prescribed displacement pseudo-solid problem. -- Added sub-sections in navigation bar to make meshing, solvers, etc more visible again. -- Added recent additions to tutorials to list in doc/example_code_list. -- Fixed bug in auto-generated makefile.sample -- it didn't pass the CXXFLAGS into the makefile.sample, causing enormous problems when the library was recompiled with paranoia, say. ------------------------------------------------------------------------ r338 | mheil | 2012-11-30 17:25:54 +0000 (Fri, 30 Nov 2012) | 15 lines -- Added inertia to the cartesian linear elasticity elements. NOTE: Still to add to the refineable version! -- Changed the function pointer for the traction elements for the cartesian linear elasticity elements to take continuous time as an argument. (Updated existing driver codes accordingly). -- Added axisymmetric linear elasticity elements (plus demo driver and doc). ------------------------------------------------------------------------ r334 | mheil | 2012-11-13 15:52:40 +0000 (Tue, 13 Nov 2012) | 3 lines Updated two paranoidified configure options for laptop. ------------------------------------------------------------------------ r333 | mheil | 2012-10-25 08:10:04 +0100 (Thu, 25 Oct 2012) | 10 lines -- Made scope of Problem::Shut_up_in_newton_solve more comprehensive. Now suppresses ranges of element assemble in parallel (but non-distributed computations too). -- Suppressed extensive solver-related output during projection phase in unstructured mesh adaptation by default. Can be re-enabled/disabled with enable_suppress_output_during_projection() disable_suppress_output_during_projection() ------------------------------------------------------------------------ r332 | mheil | 2012-10-20 15:11:56 +0100 (Sat, 20 Oct 2012) | 6 lines Corrected minor oversight in demo_drivers/mpi/solvers/direct_solver_test.cc. We actually called the global SuperLU_dist solve twice. Keep an eye on this in case the distributed solve starts failing (now that we actually run it...). ------------------------------------------------------------------------ r331 | julio | 2012-10-19 15:02:45 +0100 (Fri, 19 Oct 2012) | 14 lines Julio's fix: --- In 2D unstructured mesh generation when defining connections between internal open curves the order in which they were stored in the internal open curves container was important. It was necessary to first store all the open curves that received connections and then the ones connected to them. This is no longer necessary since these dependencies are now resolved internally. The internal open curves in the container are sorted according to their connections dependencies. ------------------------------------------------------------------------ r330 | mheil | 2012-10-17 08:40:29 +0100 (Wed, 17 Oct 2012) | 9 lines Fixed problem with load balancing for non-distributed problem. Two independent attempts to fix problem arising from empty processors clashed... Andrew's clean up loop (which was triggered unnecessarily) is no longer needed but a new sanity check (not paranoidified!) checks integrity of assembly scheme every time the assembly process gets re-distributed. ------------------------------------------------------------------------ r329 | mheil | 2012-10-16 08:48:34 +0100 (Tue, 16 Oct 2012) | 9 lines Odd... change to Foeppl von Karman driver code doesn't seem to have committed itself on previous commit. Fixed now. There's also a strange problem with the mpi fish poisson demo code which fails fairly stubbornly on laptop but sometimes passes even though nothing obvious has changed between revisions. Investigation continues... ------------------------------------------------------------------------ r328 | mheil | 2012-10-15 14:39:57 +0100 (Mon, 15 Oct 2012) | 33 lines -- Removed over-lealous self-test in triangle mesh restart (number of boundary nodes before and after restart can change). -- Made Foeppl von Karman volume control much faster (and more memory efficient) by putting the Foeppl von Karman elements in charge of assembling the contribution to the residuals and the Jacobian. INTERFACE CHANGE: Must now set control pressure as external Data for Foeppl von Karman elements using their new member function set_volume_constraint_pressure_data_as_external_data(..) rather than just FE::add_external_data(...) -- Added fct to compute in-plane stresses to Foeppl von Karman elements (returns zero if linear equations are solved). -- Changed private boolean Linear_Bending_Model to Linear_bending_model in FvK. -- Sorted out book-keeping issue with parallel assembly of Jacobian in non-distributed problems. If the last element was so costly that it totally dominated the assembly times, all elements ended up on first processor. -- Added FE::dJ_eulerian_at_knot(...) which does what it says. ------------------------------------------------------------------------ r327 | mheil | 2012-10-10 10:38:33 +0100 (Wed, 10 Oct 2012) | 5 lines Removed private copy of mpi_with_blas_lapack_trilinos_hypre because it clashed with the non private one in config/configure_options/. Note sure where how this clash arose or why we never noticed it before. ------------------------------------------------------------------------ r326 | mheil | 2012-10-09 13:34:41 +0100 (Tue, 09 Oct 2012) | 192 lines David Shepherd's first check in! Many useful changes; everything is backwards compatible, autogen.sh is a little more user friendly, some new functions were added. General ======= * Added lots of const access functions to member variables. This has no effect on existing code but will allow other, higher level function to become const if needed. * Added (class) const to a number of functions that do not (and should not) change the private data of their class (mostly output functions). * Added forced output of the final element of a sparse matrix in sparse_indexed_output(...) functions, even if it is zero. This allows matlab etc. to automatically recognise the size of the matrix. Block preconditioning ===================== * Many functions in the block preconditioning framework unnecessarily required problem and matrix pointers as arguments. There are now (preferred) alternative versions which do not require these pointers. Compatibility functions are included which allow code written for the old versions of the functions to work unchanged. The affected functions are: get_block, get_blocks, block_matrix_test, set_mesh and block_setup. * Changed the stored mesh pointers to "pointers to const mesh", i.e. the mesh(es) are not changed by the preconditioner. * Added output functions: set a base filename to output the blocks to and they will be automatically output after the preconditioner is set up. * Added a dummy block preconditioner which just allows access to the blocked Jacobian without affecting the solve. * Elements are now allowed to reorder the labelling of degrees of freedom. This allows e.g. face elements to specify that their fluid velocities are determined differently to the bulk and so should be treated seperately by the blocking scheme (Ray's change, only need to remove a PARANOID check). autogen.sh ============================== * autogen.sh will now automatically detect if --rebuild is required because you have just pulled from the svn repository. * autogen.sh will now automatically fill in /config/configure.ac_scripts/user_drivers.dir_list by looking (recursively) for sub directories of user_drivers containing a Makefile.am, so you no longer need to manually add entries. * autogen.sh will now immediately fail if a subcommand fails (e.g. if automake fails it will stop after automake instead of carrying on but failing on the self-tests). LOW LEVEL CHANGES ============================================================ New classes ============================== * SumOfMatrices matrix class. Combine multiple matrices (of different types) into a single object with a matrix vector multiply operator. This allows the combination to be solved with GMRES or similar solvers. Used for hybrid FEM/BEM methods where the Jacobian contains a dense sub block. * ShapeWithDeepCopy class. Works exactly as the Shape (shape function) class except that deep copying is done by default. This allows it to be used with STL containers. General/other changes ============================== * Changed operator() on matrices to return double rather than const double& since returning by reference is impossible with SumOfMatrices and there seems to be no reason to do it. * Added an access functions to Newton solver tolerance, max_steps and max_residuals in Problem. * Added some timers to GeneralPurposeBlockPreconditioners. * Fixed many comments - spelling, grammar, text wrapping, doxygen markup, clarifications etc. * Renamed DTSF to dt_max_rescaling_factor (and similarly in output) for clarity. * Added ndof_types(...) function to Mesh. Taken from block preconditioning framework, see below. * Fixed collapsible_channel_mesh to work with nnode_1d != 3. Block Preconditioning ============================== * Added initialisation to null for all class member pointers in constructor. * Changed Mesh_pt from Vector to Vector (not allowed to change the mesh via the preconditioner). * Removed unnecessary if statements from is_subsidiary_block_preconditioner(), is_master_block_preconditioner(). * Removed Nmesh variable from BlockPreconditioner class. For some reason the size of the vector Mesh_pt was stored in a seperate class variable as well as in Mesh_pt.size(). Also changed set_nmesh(...) to resize Mesh_pt. * Moved calculations out of set_mesh(..). The set mesh function used to also calculate the number of dofs in the mesh and check for consistency over multiple processors. This caused issues if you tried to add mesh pointers to the vector before finishing building the mesh. Also it seems strange to have a calculation about the mesh done in a member function for a specific type of preconditioner instead of in the Mesh class. I moved the calculations to a new function ndof_types(...) in the Mesh class. The function is called for each mesh_pt at the start of block_setup and the result stored, as before. If the number of dof types in a mesh is requested before it has been calculated and stored then Mesh::ndof_types(...) is used to get the value. * Stored Matrix_pt in the BlockPreconditioner class. A matrix pointer was passed around various functions within the BlockPreconditioner but it makes no sense to set up a blocking scheme for one matrix then to try to apply it to a different matrix before block_setup(...) has been called then Mesh::ndof_types(...) is used to get the value. * Stored Matrix_pt in the BlockPreconditioner class. A matrix pointer was passed around various functions within the BlockPreconditioner but it makes no sense to set up a blocking scheme for one matrix then to try to apply it to a different matrix. I added Matrix_pt as a class variable (with set and access functions). I changed get_block(...), get_blocks(...) and block_matrix_test(...) to use this class variable rather than requiring an input. Also created compatability wrapper functions which take the same arguments as previously, change the member Matrix_pt before running the function and change it back afterwards (if it was not null before). * Made use of the Problem_pt class member variable. Some functions required a problem pointer as an argument even though the block preconditioner is set up for a specific problem (similar to the previous change). I added set and access functions for the Problem_pt variable and changed the set_mesh(...), block_setup(...), get_block(...), get_blocks(...) and block_matrix_test(...) functions to make of use them. I also wrote compatability wrappers so that the old style of functions can be used as described for the Matrix_pt change above. * Changed some function arguments to take MATRIX* instead of DenseDoubleMatrix*. We know the matrix type is MATRIX (from the template) so it makes sense to be more specific and consistent. * Changed all GeneralPurposeBlockPreconditioners to use the new functions. Also the matrix pointers in preconditioner_solve(...) are dynamically cast to the templated matrix type before passing to block_setup(...). * Added output_block(...) and output_blocks_to_files(...) functions: write out all blocks to a file whose name is constructed from a given string and the block numbers. * Added a class member string "Basefilename" which determines the base of the filenames to which the blocks are written. Empty by default. If empty no output is done. Also added access functions. * Output all blocks at end of get_blocks if basefilename is set. The output function needs to run after get blocks (so that the blocks exist). However this is hard/impossible to do from main(). Hence we set a flag (the string basefilename) which tells get_blocks to also output the blocks when it is done. * Replaced "Master_block_preconditioner_pt == 0" with is_master_block_preconditioner() which does the same thing but more clearly. Similarly for checking if this is a subsidiary block preconditioner. ------------------------------------------------------------------------ r325 | mheil | 2012-10-01 17:35:56 +0100 (Mon, 01 Oct 2012) | 18 lines Deemed dump/restart for triangle meshes whose boundary lookup schemes have been manually messed with (e.g. in the constructor of a mesh that's derived from a TriangleMesh) to be "impossible" (for now). Removed corresponding test from demo_drivers/navier_stokes/unstructured_fluid/unstructured_two_d_fluid.cc and added suitable paranoid test to restart function. to catch such cases and issue a meaningful error message. The issue is that when dumping the triangulateio data structure to disk, the manually altered boundary lookup schemes will not have been incorporated into it. Given that this is quite hacky anyway (and in the example mentioned above is only done because the mesh was initially generated with xfig -- not really recommended for serious applications) it not anticipated to be a major problem. If it is, somebody will have to sort this out by updating the triangulateio data structure before dumping... ------------------------------------------------------------------------ r324 | mheil | 2012-09-29 15:20:34 +0100 (Sat, 29 Sep 2012) | 14 lines -- changed dump/restart for triangle meshes. Boundary coordinates now get written to disk and read back in. -- Foeppl von Karmann elements didn't use the time level argument during the projection so history values weren't copied across correctly in time-dependent (multi-physics -- FvK itself is steady) simulations. -- Mesh::doc_boundary_coordinates(...) now returns without seg fault if boundary coordinates haven't been set up. -- Changed bin/big_diff.bash back to ignore whitespace. ------------------------------------------------------------------------ r323 | mheil | 2012-09-26 14:57:23 +0100 (Wed, 26 Sep 2012) | 1 line Adding config file for gcc-based computation on csf ------------------------------------------------------------------------ r322 | mheil | 2012-09-22 14:22:30 +0100 (Sat, 22 Sep 2012) | 9 lines Modified Data::read(...) so that we can gracefully handle the case where the number of values in the restart file exceeds those of the Data object that currently exists in the code. The assumption is that storage for the additional values will be created when FaceElements that haven't been attached yet in the restarting code. We issue a warning and ignore the assignment ('cos what else can we do?). ------------------------------------------------------------------------ r321 | mheil | 2012-09-20 10:53:54 +0100 (Thu, 20 Sep 2012) | 3 lines Minor fix to Foeppl von Karman (still needs tidy -- marked with hierher) ------------------------------------------------------------------------ r320 | ahazel | 2012-09-19 15:49:11 +0100 (Wed, 19 Sep 2012) | 19 lines Modified the unstructured adaptivity so that we no longer need to link against the rigid_body library, unless there is a rigid body in the problem Updated documentation on free surfaces (nearly complete) and added much more content to the index. Also shortened the number of entries in the documentation header. Added some more hooks to documentation and made several small changes when errors were spotted. Added a new script to check for documentation that is not included in the main example list. Changed a few validation tolerances in the Helmholtz problems. Added LDFLAGS to the Makefile.am's in external_distributions, which is required by a particular compiler combination. Updated the licence information to be consistent between website and code. ------------------------------------------------------------------------ r319 | hewitt | 2012-08-28 17:50:11 +0100 (Tue, 28 Aug 2012) | 3 lines Many this-> included for compilation under g++ version 4.7.1 under Debian. Similar changes made to trilinos -- diffs to be emailed. ------------------------------------------------------------------------ r318 | mheil | 2012-08-28 15:08:08 +0100 (Tue, 28 Aug 2012) | 47 lines Check in from hector ("version292") via laptop... -- Introduced boolean MemoryUsage::Suppress_mpi_synchronisation (default true) in MemoryUsage namespace which suppresses the mpi-based synchronisation of memory usage (needed to avoid hanging when only certain processors visit memory-analysed code). -- Commented out but retained calls to MemoryUsage calls for future further study. OBSERVATION: -- Hypre can be very memory intensive during certain phases. -- Pruning can be VERY costly in terms of memory (even though it improves the efficiency of the mesh distribution by reducing the number of halo elements) because the quad/octree forest lookup schemes become VERY big when they are re-built. -- Provided optional argument to constructor of HyprePreconditioner which allows specification of a context -- useful to label/keep track of cumulative run times of various different instantiations of the preconditioner. Can also document cumulative times for all instantiations of HyprePreconditioner. -- Provided default settings for Hypre parameters in HypreHelpers namespace HypreHelpers::AMG_strength HypreHelpers::AMG_coarsening HypreHelpers::AMG_truncation This allows these paramters to be set globally for all instantiations of Hypre. -- Commented out call to classify_halo_and_haloed_nodes() that Ben introduced in refineable_mesh.cc and that causes code to hang. Not sure why it's needed in the first place -- but allegedly it is (for hp refinement only). Am leaving it to Ben and Andrew to re-enable (it's marked up with "@@@@@@@@@@@@@@@") ------------------------------------------------------------------------ r317 | mheil | 2012-08-24 14:57:32 +0100 (Fri, 24 Aug 2012) | 7 lines -- Made changes to generalised Helmholtz doc suggested by Radu. -- Generalised Helmholtz elements now need pointer to wavespeed and frequency to be set (error thrown in paranoid mode; seg fault if not....) ------------------------------------------------------------------------ r316 | mheil | 2012-08-23 14:59:13 +0100 (Thu, 23 Aug 2012) | 4 lines Final non-dimensionalisation for Foeppl-von Karman (remove lambda parameter and redefine eta). Also introduce flag to allow use of pure bending model in FvK elements. ------------------------------------------------------------------------ r315 | mheil | 2012-08-21 19:55:24 +0100 (Tue, 21 Aug 2012) | 8 lines -- Tweaks to Foeppl von Karman. Various things get passed as pointers rather than doubles and vice versa. get_integral_w() changed to get_bounded_volume() (virtual so it can be overloaded in multi-physics) ------------------------------------------------------------------------ r314 | mheil | 2012-08-20 12:00:17 +0100 (Mon, 20 Aug 2012) | 8 lines -- Matthew's update to Foeppl von Karman elements and driver code, following the changes required to make elastic Hele Shaw work. -- added figures and nondist_figures directories in Andrew's new index directory (needed for make dist) ------------------------------------------------------------------------ r313 | mheil | 2012-08-19 12:25:08 +0100 (Sun, 19 Aug 2012) | 4 lines First revision to generalised Helmholtz/PML tutorial and driver code; still needs approval from Radu. ------------------------------------------------------------------------ r312 | mheil | 2012-08-18 14:43:44 +0100 (Sat, 18 Aug 2012) | 14 lines -- Fixed typo in src/poisson/poisson_flux_elements.h that broke things when compiled in PARANOID mode... -- next iteration on generalised PML stuff: -- first revision of tutorial (still subject to another read-through before giving it back to Radu) -- included adaptive generalised Helmholtz in self-test. -- got rid of compilation warning in triangle mesh ------------------------------------------------------------------------ r311 | mheil | 2012-08-17 13:38:50 +0100 (Fri, 17 Aug 2012) | 6 lines Radu's generalised Helmholtz elements, which allow us to impose the Sommerfeld radiation condition by perfectly matched layers, associated demo driver and documentation (the latter still subject to a final read through). ------------------------------------------------------------------------ r310 | mheil | 2012-08-17 13:28:58 +0100 (Fri, 17 Aug 2012) | 5 lines Major bug fix, courtesy of Radu! The Node's Obsolete flag wasn't initialised with obvious disastrous consequences. It now is initialised to false. ------------------------------------------------------------------------ r309 | ahazel | 2012-08-07 00:34:47 +0100 (Tue, 07 Aug 2012) | 8 lines Modified the python index script to make it actually work properly with cross references. Fixed some typos and added a README to describe the format of the .idx file Added some extra anchors in the poisson documentation ------------------------------------------------------------------------ r308 | ahazel | 2012-08-06 23:23:46 +0100 (Mon, 06 Aug 2012) | 43 lines The main contribution here is the prototype oomph-lib index. A simple flat nested input, doc/index/oomph.idx contains the meta-information: Tag1 @ %link.html @end gives a hyperlink from Tag1 to link.html relative to the doc root directory Tag1 @ Tag2 @ %link2.html @end gives a hyperlink from Tag2 (which is a sub-item of Tag1) to link2.html Tag1 @ Tag3 @ ^Tag1.Tag2 @end gives a (cross-reference) hyperlink from Tag3 (another sub-item of Tag1) to Tag2 of Tag1. The tags are all sorted alphabetically within each class and entries can be split over multiple lines. HTML anchors are automatically generated for each entry: Poisson @ Weak form @ %link3.html @end will have the anchor doc/index/html/index.html#P.Poisson.Weakform These are used to generate the cross-references. In addition: -------------- Fixed memory leak in poisson_flux_elements Fixed stupid oversight in trilinos eigen solver (spotted by Alice Thompson) Fixed problem with assembly handler in parallel problems (Alice again) Minor leak fixes to superlu_dist when trying to debug a problem on BlueFern, but they don't make a significant difference. ------------------------------------------------------------------------ r307 | mheil | 2012-08-05 06:01:46 +0100 (Sun, 05 Aug 2012) | 19 lines -- Modified FaceElement::J_eulerian(const Vector &s) so that it returns 1.0 if the element dimension is 0 (i.e. for point elements). Not sure what this quantity is supposed to mean for such elements, but the return is correct/harmless if used in evaluations of integrals. -- Added projectable version of Fourier decomposed Helmholtz elements and gave them compute_norm(...) function for validation. -- Added adpative unstructured demo code to spherical scattering in Fourier decomposed Helmholtz (ifdefs in driver code, plus validation (for both versions) changed to output of norm of the fe solution). ------------------------------------------------------------------------ r306 | mheil | 2012-08-02 08:02:14 +0100 (Thu, 02 Aug 2012) | 4 lines Update of foeppl von karman test code (triangle mesh interfaces had been updated in the meantime). ------------------------------------------------------------------------ r305 | mheil | 2012-07-31 16:17:34 +0100 (Tue, 31 Jul 2012) | 5 lines Matthew's check in of Foeppl von Karman equations and associated demo driver code. Still work in progress but should work! ------------------------------------------------------------------------ r304 | mheil | 2012-07-31 09:20:34 +0100 (Tue, 31 Jul 2012) | 17 lines -- Added Mesh::compute_norm(...) which calls the equally new, broken virtual GeneralisedElement::compute_norm(...) which allows the computation of element-specific norms of the solution (augments the compute_error(...) machinery. -- changed validata for unstructured sphere scattering to norm of the solution. ------------------------------------------------------------------------ r303 | mheil | 2012-07-30 17:05:21 +0100 (Mon, 30 Jul 2012) | 10 lines -- Added unstructured Fourier decomposed Helmholtz elements and associated demo driver code (does the sphere scattering problem on an unstructured mesh). -- Fixed problem with sign of mapping between s and phi in computation of DtN coefficients in cartesian and Fourier-decomposed versions of Helmholtz equations. DtN Now works for unstructured meshes too! ------------------------------------------------------------------------ r302 | mheil | 2012-07-30 08:47:47 +0100 (Mon, 30 Jul 2012) | 5 lines Changed validate for unstructured Helmholtz demo drivers (because, as usual, the meshes aren't always the same). Now using radiated power as validata. ------------------------------------------------------------------------ r301 | mheil | 2012-07-29 10:23:43 +0100 (Sun, 29 Jul 2012) | 4 lines -- removed an unused variable in problem.cc to get rid of warning. ------------------------------------------------------------------------ r300 | mheil | 2012-07-29 09:20:00 +0100 (Sun, 29 Jul 2012) | 52 lines -- Added yet another Problem::doubly_adaptive_unsteady_newton_solve(...) which allows the suppression of the resolve following the spatial adaptation. -- Provided alternative version of BoundaryNode::index_of_first_value_assigned_by_face_element(...) which allows throwing of quiet error (which can be caught) if node hasn't been resized (may not be possible to predict if it has or hasn't in unstructured 3D refinement where a node ends up on two boundaries). -- Added (non-dim) thermal inertia and conductivity to unsteady heat equation. Both default to 1 (so don't change the equations as described in the existing tutorials) but their presence is required in problems with multiple materials to ensure consistent flux across element boundaries. -- Provided refineable/projectable unsteady heat elements. -- Provided refineable/projectable Helmholtz elements and fixed bug in THelmholtzElements (each node stores 2 values!) NOTE: Currently DtN is not working for triangles; not sure why (yet!). -- Added driver code for unstructuctured adaptive and non-adaptive Helmholtz demo_drivers/helmholtz/scattering/unstructured_scattering.cc Currently contains option to solve problem in rectangular domain with no flux boundary conditions (rather than the Sommerfeld radiation condition). This will be used as basis for PML. NOTE: Currently DtN is not working for triangles; not sure why (yet!) but I've disable the corresponding test. -- Replaced the GaussLobattoLegendre integration scheme in the normal and Fourier decomposed Helmholtz equations with the elements own (GaussLobattoLegendre don't work for triangles and this scheme was overkill anyway; update validate to accomodate the very small changes). -- Fixed bug in 1D Lagrangian mesh: Now bypasses the generalised coordinates when they don't exist... ------------------------------------------------------------------------ r299 | julio | 2012-07-12 14:09:20 +0100 (Thu, 12 Jul 2012) | 22 lines -- Fixed compilation problem on demo drivers demo_drivers/interaction/pseudo_solid_collapsible_tubes demo_drivers/mpi/multi_domain/pseudo_solid_collapsible_tubes -- Added validation data for triangle mesh internal boundaries. demo_drivers/meshing/mesh_from_inline_triangle_internal_boundaries -- Fixed bugs when establishing the refinement tolerance on TriangleMeshCurve - TriangleMeshCurve::enable_polyline_refinement_tolerance() - TriangleMeshCurve::enable_polyline_unrefinement_tolerance() - TriangleMeshCurve::set_polyline_refinement_tolerance() - TriangleMeshCurve::set_polyline_unrefinement_tolerance() - TriangleMeshCurve::disable_polyline_refinement() - TriangleMeshCurve::disable_polyline_unrefinement() ------------------------------------------------------------------------ r298 | julio | 2012-07-10 14:01:44 +0100 (Tue, 10 Jul 2012) | 37 lines - New features for triangle mesh generation: - Added ability to specify an specific unrefinement/refinement tolerance for each TriangleMeshCurveSection (if the assignment is made to the TriangleMeshClosedCurve the information is passed on to the constituent TriangleMeshCurveSections). - Added ability to specify a maximum length for the segments that define a TriangleMeshCurveSection with TriangleMeshCurveSection::set_maximum_length() --- INTERFACE CHANGES: The TriangleMeshParameters no longer specify the time stepper, therefore when calling the TriangleMesh constructor or one of its derived classes one needs to specify the time stepper explicitly. By default the TriangleMesh constructor uses the Steady time stepper (as usual). --- INTERFACE CHANGES: When specifying a region by using the TriangleMeshParameter object call the method "add_region_coordinates()", rather than the now-deleted function "region_coordinates_pt()" --- INTERFACE CHANGES: New methods "enable_use_attributes()", "disable_use_attributes()" in the TriangleMeshParameters to enable or disable the use of attributes (regions). --- INTERFACE CHANGES: Deleted the incorrect "_pt" postfix on the "extra_holes_coordinates" method in the TriangleMeshParameters class. - Demo drivers changed to accommodate the new interfaces. - Minor changes to tutorials. ------------------------------------------------------------------------ r297 | julio | 2012-07-09 17:34:34 +0100 (Mon, 09 Jul 2012) | 4 lines Julio's Test ------------------------------------------------------------------------ r296 | mheil | 2012-07-06 11:28:26 +0100 (Fri, 06 Jul 2012) | 11 lines Added option to continously monitor memory usage (by running top continuously in the background) with option to add comments to relevant output files so we can identify where memory creeps up. Implementation is VERY linux specific, uses system commands to spawn shell scripts and no guarantees are given that this will work (or even be modified to work) on any machine other than those it's been tried on (hector). If you have a better way of doing this, do it. A portable implementation of this functionality is believed to be impossible (says google...). ------------------------------------------------------------------------ r295 | mheil | 2012-06-18 13:38:34 +0100 (Mon, 18 Jun 2012) | 4 lines Julio's minor fixes to machinery that connects internal polylines to outer boundaries. ------------------------------------------------------------------------ r294 | mheil | 2012-06-18 08:36:02 +0100 (Mon, 18 Jun 2012) | 2 lines Fixed virtual inheritance issue in simple cubic mesh. ------------------------------------------------------------------------ r293 | mheil | 2012-06-18 08:34:12 +0100 (Mon, 18 Jun 2012) | 5 lines Added function to compute L2 error between prescribed and actual boundary shape to "impose displacement by lagrange multiplier elements". ------------------------------------------------------------------------ r292 | mheil | 2012-06-15 07:41:54 +0100 (Fri, 15 Jun 2012) | 3 lines Fixed typo inside PARANOID block. ------------------------------------------------------------------------ r291 | mheil | 2012-06-14 16:38:09 +0100 (Thu, 14 Jun 2012) | 4 lines Added a few sanity checks to TriangleMesh to buffer problems that come from "broken" poly files (say). ------------------------------------------------------------------------ r290 | mheil | 2012-06-11 17:39:34 +0100 (Mon, 11 Jun 2012) | 13 lines -- Fixed bug in vector-based multi-domain machinery that only showed up on more than two processors (so was not detected in the self-tests -- bracket in the wrong place!). -- Changed MPI Turek flag driver code to use the vector-based multi-domain machinery by default (ifdefs remain to revert to old mesh-by-mesh version). -- Fixed reference-to-pointer vs pointer problem in fsi.h ------------------------------------------------------------------------ r289 | mheil | 2012-06-11 13:46:08 +0100 (Mon, 11 Jun 2012) | 48 lines Julio's first check in! -- Major changes on: - src/generic/triangle_mesh.h - src/generic/triangle_mesh.cc - src/meshes/triangle_mesh.template.h - src/meshes/triangle_mesh.template.cc and associated demo driver codes. -- New capabilities for unstructured mesh generation are now available: - Specification of internal open boundaries. - Proper interfaces for connecting internal open boundaries to any other boundaries. - Adaptation for internal boundaries. --- INTERFACE CHANGES: When calling the TriangleMesh constructor online, we no longer specify the complete set of {outer boundary, internal closed boundaries, internal open boundaries, maximum element area, coordinates for specifying holes and regions, time stepper}, instead use the TriangleMeshParameters class. This requires at least the specification of the outer boundary; other parameters can be specified as and when required. Complete documentation can be found in the documentation. --- INTERFACE CHANGES: The TriangleMeshOpenCurve has been renamed to TriangleMeshCurveSection. The TriangleMeshOpenCurve is now used for defining internal open boundaries. --- INTERFACE CHANGES: The 'internal' versions of TriangleMeshPolygon and TriangleMeshCurvilinearClosedCurve classes no longer exist. Use the TriangleMeshClosedCurve class and define its constituent curves as TriangleMeshCurvilines instead. - Few demo driver changes performed to accommodate the new interfaces. - Demo drivers added for showing the internal open boundaries features: demo_drivers/meshing/mesh_from_inline_triangle_internal_boundaries - Changed bin/big_diff.bash to ignore non-backward compatible (?) -x -w flags to svn diff. ------------------------------------------------------------------------ r288 | mheil | 2012-05-29 17:25:17 +0100 (Tue, 29 May 2012) | 29 lines -- Provided option to locate_zeta simultaneously for multiple meshes. Important in parallel computations with large number of meshes (e.g. parallel unstructured FSI where locate zeta for each sub-mesh triggers global comms). Old version is currently still kept alive with #ifdefs and "hierher"s to indicate where we need to tidy once everything works properly on hector. Main idea: Info for multiple meshes is joined together and sent in one big batch of data, with padding introduced where necessary to indicate end of data for each mesh. -- Bin sizes are now always set from current value of Multi_domain_functions::N{x,y,z}_bin (rather than using 1 when setting up MeshAsGeomObjects for which the mesh just had a single element). This is required to make sure the bin search can progress consistently for multiple meshes. In driver codes where excessive memory usage was avoided by automatic assignment of Multi_domain_functions::N{x,y,z}_bin=1, the assignment is now done explicitly in driver code (to avoid excessive memory usage). -- Introduced automatic monitoring of total number of bin cells assigned anywhere in the code. Warning is issued (just once) if it exceeds a (static, public) threshold defined in MeshAsGeomObject::Threshold_for_total_bin_cell_number_warning which is initialised to 50000000. -- Reduced the default number of (1D) bins to Multi_domain_functions::N{x,y,z}_bin=100. ------------------------------------------------------------------------ r287 | bsaxby | 2012-05-17 11:50:05 +0100 (Thu, 17 May 2012) | 56 lines Check in to allow build using older compilers (e.g. gcc 3.2.3) for which covariant return types are not implemented. Modifications to the src directory: ----------------------------------- -- The temporary clone of an element required for p-refinement is now created and deleted in the tree, and passed as an argument to the PRefineableElement::p_refine() function. Here the tree uses the ELEMENT template parameter in order to construct an element of the correct type, rather than using a create_backup_clone() function (with a covariant return type) which was overloaded in the derived classes. Other, related changes are: * INTERFACE CHANGES -- In class PRefineableElement void p_refine(const int &inc, Mesh* const &mesh_pt) is now void p_refine(const int &inc, Mesh* const &mesh_pt, GeneralisedElement* const &clone_pt) and in class RefineableElement void initial_setup() is now void initial_setup(Tree* const &adopted_father_pt=0) * Various changes to Tree and TreeBasedRefineableMesh classes to allow p-refinement to be performed with the help of the tree. -- Other changes to allow build using older compilers including: * Adding lots of this-> pointers in hp_refineable_elements.cc * Changing the assignment of std::complex numbers to avoid using member functions real() and imag() as access functions (gcc 3.2.3 thinks they are const) in time_harmonic_fourier_decomposed_linear_elasticity_traction_elements.h and time_harmonic_linear_elasticity_traction_elements.h, and the demo driver time_harmonic_elastic_annulus.cc * Used correct syntax for calling an object's templated member function i.e. object->f(...) is now object->template f(...) in schur_complement_preconditioner/two_d_fp.cc and three_d_fp.cc Modifications to the demo_drivers directory: -------------------------------------------- -- Modified demo driver one_d_poisson_hp_adapt.cc so that p-refinement of the the modal elements implemented there is consistent with that in the rest of the library. This is necessary because modal hp-refineable elements are only defined in this demo driver. If their implementation is to be consistent with that of the nodal equivalents in the library then any changes must me made here too. ------------------------------------------------------------------------ r286 | mheil | 2012-05-12 16:35:11 +0100 (Sat, 12 May 2012) | 37 lines -- Changed Vector global_node_pt(n_dof,0); to std::map global_node_pt; in void Problem::remove_duplicate_data(...) as it turned out be the main bottleneck in the code execution time (!) for large problems. Function is called a lot if there are large numbers of submeshes (as in cough code) and the repeated allocation of the vector (of which only a relatively small number of entries is actually used -- making the map better suited) took far longer than the (lengthy!) rest of the function. I insist that this wasn't perfectly obvious initially; (cost of accessing entries in the map (slow) vs. cost of initial allocation of vector and then fast access). Anyway -- now we know and it is pleasing to reduce total execution times for this function from 1000 sec to 1 sec in one particular test case. -- Rewrote Problem::synchronise_dofs(...) and Problem::copy_haloed_eqn_numbers_helper(...) yet again so halo data can be dealt with before external halo (achieved via two bools so we can do both at the same time if we feel like it; however doing this degrades the convergence rate of the Newton method so something must go wrong (at least for cough code!). Keep other option alive so we can explore further at some point. -- Added static member Cumulative_preconditioner_solve_time to HyprePreconditioner and TrilinosPreconditionerBase classes. Can be reset to zero from outside -- mainly used to assess parallel scaling of preconditioners without having to track handles to the many sub-preconditioners involved in a multi-physics preconditioner. ------------------------------------------------------------------------ r285 | mheil | 2012-05-09 13:09:51 +0100 (Wed, 09 May 2012) | 20 lines QUICK CHECK-IN FOR TRANSFER FROM LAPTOP TO HECTOR; SOME TIDIES STILL DO BE DONE ONCE IT WORKS (REMOVE OLD REMOVE_NULL_POINTERS FCT AND MESH::NULL_EXTERNAL_HALO_NODE(...) -- MAKE IT WORK WITH ENTIRE VECTOR WHICH IS NOW AVAILABLE [SEE BELOW]) -- Created new function Problem::remove_null_pointers_from_external_halo_node_storage() to remove null pointers at Problem level (for all meshes simultaneously) to avoid huge numbers of all-to-alls in problems with large numbers of sub-meshes when run on large number of processors. -- Provided set/get functions to entire vector of external halo[ed] node pointers in Mesh. Does sort of reveal the implementation but crucial for efficiency (because of the need to remove duplicate data at the problem level; see above). ------------------------------------------------------------------------ r284 | mheil | 2012-05-08 11:25:40 +0100 (Tue, 08 May 2012) | 4 lines Turns out the unistd.h header isn't actually required so I've deleted it from oomph_utilities.cc ------------------------------------------------------------------------ r283 | mheil | 2012-05-08 08:46:55 +0100 (Tue, 08 May 2012) | 12 lines Added MemoryUsage helper namespace to oomph_utilities.* Provides functions to document memory usage via system(...) command. NOTE 1: Portability is not guaranteed (and likely to be impossible to achieve) -- default settings work on various linux machines; that's all. NOTE 2: May need to check for presence of header if if it's not there by default (which it may not be...). ------------------------------------------------------------------------ r282 | mheil | 2012-05-08 08:17:00 +0100 (Tue, 08 May 2012) | 57 lines -- Pseudo elastic preconditioner can now choose between Hypre AMG (default) and Trilinos ML for elastic subsidiary system. -- Public static member int TrilinosMLPreconditioner::Default_n_cycles can be changed to set the default number of V cycles for default (SA setting) of TrilinosML preconditioner. Defaults to 1 to be consistent with previous (and TrilinosML's own) settings. -- Rewrote access functions to map-based halo/haloed lookup schemes in Mesh class to avoid massive memory allocation in problems with large number of meshes (unstructured fsi), running on large numbers of processors. WARNING: Constructions like return Halo_node_pt[p].size(); for a container that stores vectors of maps, such as std::map > Halo_node_pt; are extremely memory hungry! See rewrites all over Mesh class for detail. -- Rewrite/merge of Problem::synchronise_dofs(mesh_pt) and Problem::synchronise_external_dofs(mesh_pt) to Problem::synchronise_dofs() which deals with all sub-meshes and drastically reduces the number of all-to-all comms in problems with large numbers of submeshes. -- Similar with Problem::copy_haloed_eqn_numbers_helper(mesh_pt) and Problem::copy_external_haloed_eqn_numbers_helper(mesh_pt) which becomes Problem::copy_haloed_eqn_numbers_helper() ------------------------------------------------------------------------ r281 | bsaxby | 2012-04-24 15:22:17 +0100 (Tue, 24 Apr 2012) | 5 lines Re-adding a few lines in multi_domain.template.cc which were overzealously deleted (by Matthias and I) in r280. ------------------------------------------------------------------------ r280 | mheil | 2012-04-19 07:53:17 +0100 (Thu, 19 Apr 2012) | 7 lines A few more fixes following a self-test with paranoid and range checking. Main fix were two howlers in Ben's code: Zero sized sends in refineable_mesh.template.cc and overlooked possibility (or rather wrongly processed) option of meshes without elements in multi_domain.template.cc ------------------------------------------------------------------------ r279 | mheil | 2012-04-18 09:52:20 +0100 (Wed, 18 Apr 2012) | 14 lines -- Removed most of the "assigned but not used" warnings (left a few warnings in triangle mesh since this part is almost certainly being re-written by Julio at the moment). -- Added call to synchronise all dofs with Problem::synchronise_all_dofs() at end of Problem::load_balance() to allow halo/haloed tests to pass. -- Added Mesh::output_external_haloed_elements(...) functions. -- Added TrilinosMLPreconditioner::set_DD_default_values() and TrilinosMLPreconditioner::set_DDML_default_values() ------------------------------------------------------------------------ r278 | ahazel | 2012-04-17 11:43:06 +0100 (Tue, 17 Apr 2012) | 6 lines Fixed three memory leaks associated with unstructured remeshing in two-dimensions. The most subtle was a failure to delete HijackedData that had been created and added as external data in ImmersedRigidBodElements. The others were simple failures to delete temporary objects. ------------------------------------------------------------------------ r277 | ahazel | 2012-04-15 09:56:42 +0100 (Sun, 15 Apr 2012) | 10 lines Added the changes that *should* allow compilation without stacktrace.h (automagicaly detected) Also added the FFLAGS_NO_OPT environment variable for use with blas library when there are compilers that need flags other than -O0. This could probably still be tidied up further. Changed all config files to include the new flag, if it is not set then no arguments will be passed to the compiler when compiling the two files in the blas library. ------------------------------------------------------------------------ r276 | ahazel | 2012-04-14 07:25:59 +0100 (Sat, 14 Apr 2012) | 17 lines Fixed a small error in one_d_poisson_hp_adapt.cc so that the test passes (again) Added an additional output function to navier_stokes_surface_drag_torque_elements.h Modified the source so that it will compiler using the IBM xlc compiler under AIX. This required changing a few iterators to const_iterators, moving one destructor into the .cc file rather than the .h file and "casting" the arguments of certain mathematical functions to be double rather than integer. Suitable config files are provided in configure_options. Build machinery that still needs to be modified is a specific option to include non-optimised fortran compiler flags and to include the stacktrace library explicitly. ------------------------------------------------------------------------ r275 | bsaxby | 2012-04-13 10:25:46 +0100 (Fri, 13 Apr 2012) | 162 lines Check in to improve the hp-adaptive stuff, and to fix a bug in mesh distribution when using elements with non-uniformly spaced nodes. Changes include merging of the structures and behaviour of pure h-refineable and mixed hp-refineable problems, meshes and elements. Note that some further tidying (uniformity of interfaces) may be required later. Modifications to the src directory: ----------------------------------- -- Made changes to the PRefineableElement class to allow them to be used with macro elements. This includes the addition of the pure virtual function make_backup_clone() in the PRefineableElement class which is defined in derived classes to return a pointer to a backup clone of the current element. This copy is not "fully-functional" but it is sufficient to act as the element's "father" in order to provide the information required while it rebuilds itself with its new p-order. It performs a deep copy of the element's node storage (but not of the nodes themselves) and it doesn't introduce any memory leaks when the standard destructor is called on the clone. -- CHANGED the INTERFACE to the function pre_build() to be consistent with that of the build() function. This enables new nodes created as part of the pre_build procedure to be documented along with those created by build(). -- Made hang-helper functions protected rather than public for p-refineable elements. -- Moved function node_created_by_son_of_neighbour() from PRefineableQElement to RefineableQElement. This is returns a NULL pointer by default but is then overloaded for the p-refineable case. This enables us to search sons of neighbours in the build() phase of refineable Q-elements without having to overload the build() function for p-refineable elements. -- Moved the function rebuild_from_sons() from the specific derived p-refineable Poisson and Navier-Stokes elements to the PRefineableQElement base class. -- Made minor changes to the quad_hang_helper() function which implements mortaring for p-refineable elements. -- Made changes to the function check_integrity() for p-refineable elements. Now integrity is not checked along mortared element edges, or for macro elements. This is because strong continuity of neither position nor value is guaranteed across mortar patches or between macro elements. -- Merged classes RefineableMeshBase and PRefineableMeshBase, and their derived templated classes. -- Removed all p-refineable versions of meshes in the src/meshes directory. This functionality is now contained within the RefinableMeshBase class. -- Changed the criteria for p-unrefinement of an element to check if unrefinement would take the element below its initial p-order. A new function initial_p_order() facilitates this by returning the template parameter in PRefineableQElement and alleviates the need for the adjustment of Min_p_order in specific mesh constructors. -- Made changes to the uniform p-unrefinement functions at the Problem and Mesh levels to simply p-unrefine each element in the mesh. This now differs from the h-unrefinement case which runs p_adapt() with dummy error values in order to merge sons. This includes an INTERFACE CHANGE because a DocInfo object must be passed rather than a Communicator since p_adapt_mesh() is now called instead of p_adapt(). -- Fixed typos and changed variable names in Quadtree::stick_neighbouring_leaves_into_vector(). -- Fixed a bug which caused a crash when a distributed mesh tried to reconcile the hanging status of the nodes in its halo layer with their nonhalo counterparts: * It was correctly assumed for elements with uniformly spaced nodes that the master nodes of hanging nodes on the outer edge of the halo layer existed on both processors and were therefore 'shared'. However, when using elements with nonuniformly spaced nodes it is possible that these master nodes are not shared and do not exist on the processor on which their slaves are halos. * This is fixed by borrowing functionality from the Multi_domain_setup namespace. This is implemented in the new namespace Missing_masters_functions and collects and sends the required information about the master nodes and then either finds them in the shared storage or creates them from the received data from the other processor. A new function, TreeBasedRefinableMeshBase::additional_synchronise_hanging_nodes(), is called at the end of synchronise_hanging_nodes() and constructs the missing master nodes required by each processor which were not reconciled locally. The function must be implemented in the templated derived class because the node-creating namsepace functions require the template class ELEMENT. NOTE: This function will only be called on meshes containing elements with nonuniformly spaced nodes because with uniform node spacing all masters will have been found in the normal way. * This required changes to be made to the function Mesh::delete_all_external_storage() so that hanging nodes with masters in the external storage have their data made consistent with their hanging schemes and then are made nonhanging. This allows their external master nodes to be safely deleted. This does mean that for distributed meshes if no refinement is required then the halo/ed and shared node schemes must be recomputed and synchronised so that the missing master nodes are recreated and the hanging scheme can be reconciled in halo layers. * An error is now thrown if the multidomain setup functions are called for meshes with elements which have nonuniformly spaced nodes. This is because the missing masters are stored in the external storage which is wiped and populated by the multi-domain routines. * Also removed flag Synchronise_hanging_nodes_not_required from class TreeBasedRefineableMeshBase as it is nolonger required. -- Changed Mesh::check_halo_schemes() so that it nolonger assumes all elements in a mesh have the same number of nodes. Now the ammount of data to be sent is calculated at the end and communicated before the data is sent, rather than populating a vector allocated with a precomputed size. -- Added dummy return to Z2ErrorEstimator::integral_rec() to avoid compiler warning. -- Explicitly instantiated templated classes QSpectralPoissonElement<2,8> and QSpectralPoissonElement<3,8>. -- Added broken copy constructor and assignment operator to class RefineableQCrouzeixRaviartElement. -- CHANGED the INTERFACE to the function PRefineableElement::p_refine(...) to remove the default value of the pointer to the mesh (which is always required) and instead pass it as a constant pointer. Modifications to the demo_drivers directory: -------------------------------------------- -- Added demo driver circular_driven_cavity_hp_adapt.cc to demo_drivers/navier_stokes/hp_adaptive_driven_cavity to check the use of hp-refineable elements with macro elements (i.e. on a quarter-circle domain). -- Added demo driver hp_adaptive_driven_cavity.cc to demo_drivers/mpi/distribution/hanging_node_sync to check for the correct synchronisation of the hanging status of nodes in halo layers of meshes containing elements with nonuniformly spaced nodes (i.e. to check the code added to fix the bug described above). ------------------------------------------------------------------------ r274 | mheil | 2012-03-28 09:54:28 +0100 (Wed, 28 Mar 2012) | 6 lines Added two missing figure files to doc/meshes/mesh_from_inline_triangle/figures (Not sure why they didn't get checked in (much!) earlier...) ------------------------------------------------------------------------ r273 | mheil | 2012-03-26 16:44:09 +0100 (Mon, 26 Mar 2012) | 4 lines Removed non-existent extra dist file from demo_drivers/mpi/distribution/eigenproblem/Makefile.am ------------------------------------------------------------------------ r272 | mheil | 2012-03-21 11:02:58 +0000 (Wed, 21 Mar 2012) | 33 lines Nico's check in. -- Made "need for refinement" for more fine-grained for triangle meshes: Refinement (by complete mesh regeneration) is now not only performed if the bulk error estimate demands it but also if the boundary needs to be refined/unrefined. INTERFACE CHANGE: RefineableTriangleMesh::update_polygon_using_face_mesh(...) RefineableTriangleMesh::surface_remesh_for_inner_hole_boundaries(...) now return a bool and has an optional boolean argument (default false) which if set to true only checks if the polygon wants to be refined/unrefined. -- Fixed Matthias' range checking bug when dealing with final vertices during boundary unrefinement. -- Fixed bizarre range checking error in FiniteElement::self_test() where shape functions didn't take generalised dofs into account. Failed for tensioned string. Why this ever worked, we'll never know... -- Tweaked the tolerances for demo_drivers/interaction/unstructured_adaptive_fsi/ very slightly. ------------------------------------------------------------------------ r271 | mheil | 2012-03-18 09:38:52 +0000 (Sun, 18 Mar 2012) | 28 lines -- Fixed bug in BrickFromTetMesh where various nodes on mesh boundaries weren't built as boundary nodes. -- Updated Problem::store_current_dof_values() and Problem::restore_dof_values() to work correctly with distributed problems. NOTE: Halo_dof_pt is left alone. It's a bit of an odd data structure (and in my view in the wrong place -- it's only used by the pitchfork assembly handler which should therefore store/maintain it). Andrew said he'd look into this... -- Avoided division by zero in arclength continuation by bypassing scaling operation if Parameter_derivative=1.0 (most likely because it hasn't been updated) -- only seems to happen when solution hasn't actually changed following the change in the control parameter (shouldn't happen!) but makes things more robust. -- Removed output of pin status from TElement's output function and gave them proper tecplot footer. -- Commented out non-existing include files in demo_drivers/mpi/distribution/hp_adaptive_driven_cavity/Makefile.am -- Tweaked tolerances in demo_drivers/navier_stokes/two_layer_interface and /demo_drivers/spherical_navier_stokes/spin_up ------------------------------------------------------------------------ r270 | ahazel | 2012-03-16 10:15:46 +0000 (Fri, 16 Mar 2012) | 26 lines Chased down an elusive bug when running several instances of the code on a few processors (known as oversubscribing a processor). The problem was in Problem::recompute_load_balanced_assembly(), which did not check that every processor assembled a contribution from at least one element in the case when the problem was run in parallel, but not distributed ... now it does! It's a slightly pathological case, when assembly is very quick and round-off comes into play. Whilst hunting, upgraded i) SuperLU_DIST -> version 3.0 ii) SuperLU -> version 4.3 with minor changes in the associated interface codes src/generic/superlu*.c Changed a few validation tolerances Fixed a "bug" in the timer() function in oomph_utilities.cc where MPI_Wtime() was called in serial runs compiled with OOMPH_HAS_MPI. In other words, this MPI function was called without MPI_Init having been called. OpenMPI handles this case, but Mpich2 doesn't. According to the internet: "This function does not return an error value. Consequently, the result of calling it before MPI_Init or after MPI_Finalize is undefined.", so now you know. ------------------------------------------------------------------------ r269 | ahazel | 2012-03-13 11:05:31 +0000 (Tue, 13 Mar 2012) | 8 lines Minor changes: 1) Fixed typo in a PARANOID block in problem.h 2) Added a fixed distribution to harmonic.cc to ensure repeatability 3) Added an extra interface to the Anasazi::MultiVecTraits interface for compatibility with Trilinos 9 ------------------------------------------------------------------------ r268 | ahazel | 2012-03-11 11:55:12 +0000 (Sun, 11 Mar 2012) | 25 lines Added some missing #ifdef OOMPH_HAS_PARALLEL so that the code still compiles in serial. Updated a few convergence tolerances so that the test pass on the work desktop Found a tricky little floating point problem with the Z2 error estimator for hp adaptive elements. The problem is that the integration scheme needs to be of high enough order that the mass matrix of the recovery shape functions is integrated exactly. If not, the mass matrix is nearly singular (numerically speaking) which causes problems in the LU decomposition. The integration scheme used to be taken from the elements, which was not always of high enough order. Moreover, an element author should not need to know that the integration scheme is also going to be used by the error estimator. In the new implementation, the integration scheme is created by the error estimator (although the element type --- quad or triangle) must still be found from the element. The resulting mass matrices are still often near singular for high order recovery shape functions, and the more complete fix is to use a better set of (orthogonal polynomial) shape functions for the polynomial space. For now, I haven't done this, but it should be done soon, particularly given that the error estimator is not really appropriate for the high-order elements. The validation data for the hp-adaptive tests has been regenerated. ------------------------------------------------------------------------ r267 | ahazel | 2012-03-06 17:24:43 +0000 (Tue, 06 Mar 2012) | 26 lines Check in after trip to Sandia: 1) Added interface for (parallel and serial) eigensolves using the Trilinos Anasazi package. Tested in mpi/distribution/eigenproblem (parallel) and eigenproblem (serial). This involved creating a new DoubleMultiVector class which is not yet as efficient as it should be. 2) Fixed a funny bug in LinearAlgebraDistribution which only showed up on my machine. A particular construtor labelled the data as distributed even if there was only one processor on the communicator, which messed things up. What worries me is that the tests passed on the wulfling, so I fear that there may be another more subtle bug lurking... 3) Added basic periodic orbit tracking capability, tested in bifurcation_tracking/periodic_orbit.cc. Again not as efficient as the ultimate implementation should be, but is a working proof of concept. Need to work on better temporal error estimators. 4) Fixed an oversight in frontal_solver.cc that allocated memory from stack instead of heap and so died when elements had large numbers of dofs. 5) Relabelled a compiler macro in tetgen to avoid a clash with Anasazi. 6) Sightly hacked the immersed rigid bodies to better solve Tom's problem. ------------------------------------------------------------------------ r266 | mheil | 2012-02-23 08:44:19 +0000 (Thu, 23 Feb 2012) | 19 lines -- Fixed unstructured triangle mesh bug detected by Alice yet again (it appeared in two places...) -- Fixed massive howler in surface refinement/unrefinement -- mis-interpreted entries 0 and 1 and in size three vector whose first entry stores the boundary coordinate (for sorting purposes) as x and y coordinates of the relevant vertex node. Fixing this gets rid of VERY odd refinement patterns in Hele Shaw code (now functional again; also needed manual reset of Lagrangian coordinates after adaptation as this is now no longer performed automatically (compared to when that code was written). Now works like a dream. Updated relevant validata after checking that solution is qualitatively "the same" even though fix to the bug generates very slightly different meshes. -- Also changed all abs and std::abs to std::fabs (where appropriate). ------------------------------------------------------------------------ r265 | mheil | 2012-02-15 18:02:11 +0000 (Wed, 15 Feb 2012) | 23 lines -- Checked in Alice's fix for two bugs in triangle mesh code (abs for check of size of g and typo in the computations of one of the auxiliary factors). Had a minor effect on the adaptive unstructured solid test case; updated validata. -- Fixed problem that made code hang during parallel restarts. Number of refinements for the meshes now has to be consistent across all processors (incl. empty ones). -- Commented out huge chunks of Ben's hp-refinement sanity checks as they made the code break when a mesh contained non-finite elements. Marked up with "hierher" and "BENFLAG" -- Copied code from refineable_quad_element.cc to refineable_brick_element.cc to (re-)assign all (!) nodal values by interpolation from father element even if node already existed (this fills in values that were inactive (e.g. midside Taylor-Hood pressure nodes) before uniform refinement. ------------------------------------------------------------------------ r264 | ahazel | 2012-02-07 21:35:15 +0000 (Tue, 07 Feb 2012) | 28 lines Modified the build machinery so that we can build and link to Trilinos 10 as well as Trilinos 9. This is still not as nice as I would like because I haven't invested enough time into the autotools part. The script in external_distributions/trilinos will detect any file of the form trilinos*.tar.gz and extract the major version number to do the right thing (autotools vs cmake). I could not find an easy way of making autoconf use wildcards in the same way, so have hard-coded the .tar.gz files to be trilinos-9.0.2.tar.gz (as before) and trilinos-10.8.5-Source.tar.gz (the most current release as of 7th Feb 2012). Needed one change in trilinos_solver.h. The latest version of Trilinos's ML preconditioner uses the communicator of the matrix in its destructor, so the preconditioner must be deleted before the matrix. All tests pass on my machine with Trilinos 9 or Trilinos 10. Also added LAPACK files clarnd.f and zlarnd.f that were required by Trilinos 10 At the same time, I've modified the double_vector_with_halo.h/.cc so that the Halo/Haloed_equations are unsigned and passed between processors with an MPI_UNSIGNED variable. Hopefully this is now robust. I note that I haven't checked all possible configurations of Trilinos/BLAS/LAPACK, etc, so there may be an error, but I have tried to mirror what was done with Trilinos 9, so I *hope* it'll all be OK. If not feel free to shout! ------------------------------------------------------------------------ r263 | mheil | 2012-02-06 13:06:44 +0000 (Mon, 06 Feb 2012) | 30 lines -- Added undeformed macro elements to the solid version of the quarter pipe mesh. -- Problem::initialise_dt(...) now sets the error weights for adaptive timesteppers to make them fully functional by default. -- Checked the entire code for MPI comms in which unsigneds are accidentally sent as MPI_INTs and vice versa. (Quick fix for "Andrew's" double_vector_with_halo.h/.cc; can be done properly after current revision is checked in). -- Bypass reconcilation of non-matching hanging nodes (halo vs haloed) if no clashes are detected. -- Mesh::reorder_nodes() now returns immediately if there are no nodes. -- Now call Mesh::reorder_nodes() before dumping and restarting with Mesh::dump() and Mesh::read(). -- Removed creation of "second layer" of halo elements during distribution in cases where a halo element turns out to contain nodes that are associated with a higher-numbered processor. This was an (early!) attempt to deal with the problem of "overlooked halo nodes". This is now dealt with generically in classify_halo_and_haloed_nodes(). -- "Overlooked" halo/haloed node pairs are now added to the shared node schemes. ------------------------------------------------------------------------ r262 | bsaxby | 2012-02-03 10:59:12 +0000 (Fri, 03 Feb 2012) | 9 lines Annotated (otherwise empty) mesh_smoothing/mesh_smooth.cc. ALSO: (Leftover from previous check-in): Changed the output directory of the demo driver mpi/distribution/restart.cc in for validation runs to avoid filesystem problems in parallel runs. ------------------------------------------------------------------------ r261 | bsaxby | 2012-02-03 10:56:29 +0000 (Fri, 03 Feb 2012) | 119 lines Ben's check in of the hp adaptation Modifications to the src directory: ----------------------------------- -- Added (empty) functions - RefineableElement::initial_setup() and - RefineableElement::pre_build(). The initial_setup() function is called as soon as the element is created (and knows its position in tree structure if it is part of one). In p-refineable elements it is overloaded and used to initially set the correct p-order and integration scheme. The element's pre_build() function must be called prior to the element's and the element's neighbours' build() functions. In p-refineable elements it is overloaded and used to search the father for any pre-existing nodes that it requires and which would otherwise be re-created in the build() procedure. -- Modified Tree::split_if_required() to call initial_setup() on elements that are created during splitting. Modified TreeBasedRefineableMeshBase::adapt_mesh() to call element pre_build() on all newly constructed elements prior to building them. -- Added class PRefineableQElement as a base for all p-refineable rectangular elements. -- Added p-refineable versions of RefineableQPoisson and RefineableQCrouzeixRaviart elements. -- Added function QuadTree::stick_neighbouring_leaves_into_vector() to recursively search the tree and find all neighbouring leaves. This is needed for the mortaring algorithm for matching the solution across non-conforming hp-refineable element boundaries, in which a list of all neighbouring leaf elements--not just neighbouring elements of greater or equal edge length--must be constructed by the slave element. -- Modified RefineableQElement::build() to use the member function nodes_built() rather than just checking if the first node exists. -- Made the following functions virtual; - RefineableQElement<2>::node_created_by_neighbour() and - RefineableQElement<2>::quad_hang_helper() -- The function quad_hang_helper() is overloaded in p-refineable rectangular elements to implement a mortaring algorithm (rather than constrained approximation) to enforce continuity weakly at nonconforming element boundaries. This sets the hanging status of master and slave nodes to minimise the jump in function value accross the mortar patch. This enforces continuity of the solution in a weak sense. -- Added p-refineable versions of tree-based refineable mesh classes: - TreeBasedPRefineableMeshBase, - TreeBasedPRefineableMesh, - PRefinebleLineMesh, - PRefineableQuadMesh and - PRefineableBrickMesh. Also added specific p-refineable equivalent meshes - PRefineableRectangularQuadMesh and - PRefineableOneDMesh. -- Added boolean flag TreeBasedRefineableMeshBase::Synchronise_hanging_nodes_not_required which turns off the synchronisation of the hanging status of halo/haloed nodes after adaptation of the mesh. This is required because the function TreeBasedRefineableMeshBase::synchronise_hanging_nodes(...) can fail on distributed meshes with spatially adaptive higher order elements, and for those with hp-adaptive elements. -- Added p-refinement/adaptation equivalents to the spatial refinement/adaptation functions in the Problem class: - Problem::p_refine_uniformly_aux(), - Problem::p_refine_uniformly(), - Problem::p_refine_uniformly_and_prune(), - Problem::p_refine_selected_elements(), - Problem::p_unrefine_uniformly() and - Problem::p_adapt(). -- Added class OneDimensionalModalShape and its derivative to shape.h. -- Added warnings to the TreeBasedRefineableMesh::refine_selected_elements(...) functions when used in parallel on distributed meshes. -- Moved TreeBasedRefineableMeshBase::HangHelperStruct inside #idfef OOMPH_HAS_MPI block since it is only used in parallel by the function TreeBasedRefineableMeshBase::synchronise_hanging_nodes(). -- Added an empty mesh_smooth.cc file to allow build of mesh_smoothing library on some fussy compilers. Modifications to the demo_drivers directory: -------------------------------------------- -- Added new demo drivers poisson/one_d_poisson_hp_adapt and poisson/two_d_poisson_hp_adapt. These solve the Poisson equation in one- and two-dimensions using an hp-adaptive mesh refinement strategy. The one-dimensional case uses hp-adaptive elements with nodal and modal elemental basis functions. The two-dimensional case also uses mortaring to enforce continuity weakly at nonconforming element boundaries. -- Added new demo driver navier_stokes/hp_adaptive_driven_cavity. This solves the driven cavity problem using an hp-adaptive mesh refinement strategy. -- Added parallel demo drivers mpi/distribution/hp_adaptive_poisson and mpi/distribution/hp_adaptive_driven_cavity. These solve the 2D poisson and driven cavity problems in parallel using an hp-adaptive mesh refinement strategy. ------------------------------------------------------------------------ r260 | ahazel | 2012-01-16 09:25:24 +0000 (Mon, 16 Jan 2012) | 9 lines Added extra functionality to allow regions to be used in Tetgen meshes. Added an additional constructor to the Elasticity Tensor so that the Lame moduli can be specified. Corrected output functions for Telements so that if they are FaceElements in a higher dimensional space, all three coordinates are output! The specification of regions in the Mesh constructor is still in a slight state of flux. We have decided that a simple vector of region ids and coordinates is the best option, but this has not yet been implemented. ------------------------------------------------------------------------ r259 | mheil | 2012-01-11 14:43:47 +0000 (Wed, 11 Jan 2012) | 14 lines Fixed load balanced turek flag driver code to remove some memory leaks in the driver code. LESSON: Problem::build_mesh() function should not (repeatedly) build timesteppers, error estimators etc. They should be built (once only) in the problem constructor and then passed to the newly built meshes in build_mesh(). Adding new timesteppers with Problem::add_time_stepper(...) even caused errors (which have now been fixed; validata updated -- load balanced and non-load balanced versions now agree perfectly). ------------------------------------------------------------------------ r258 | mheil | 2012-01-09 17:14:29 +0000 (Mon, 09 Jan 2012) | 13 lines -- Mesh::prune_dead_nodes() now returns vector of pointers to deleted nodes so they can be removed from boundary lookup schemes (following Andrew's recent modification of the adapt() routines which caused seg fault if nodes were removed). -- Fixed two embarrasing bugs that led to the creation of repeated shared nodes in Mesh::synchronise_shared_nodes(). -- Removed mesh-wise timings for CPU for assembly of existing global eqns in Problem::remove_duplicate_data(). ------------------------------------------------------------------------ r257 | mheil | 2012-01-09 13:40:01 +0000 (Mon, 09 Jan 2012) | 4 lines Fixed typo in txt file for "Rob Harter's tutorial" that resulted in omission of code (my fault!). ------------------------------------------------------------------------ r256 | mheil | 2012-01-07 11:00:10 +0000 (Sat, 07 Jan 2012) | 14 lines -- Final (?) tidy to doc/demo codes for Fourier decomposed time harmonic linear elasticity and Fourier decomposed Helmholtz. -- NavierStokesSchurComplementPreconditioner now handles the case when an element in the NavierStokesMesh is not a NavierStokesElementWithDiagonalMassMatrices gracefully (replaces the zeros on the diagonal with ones on the assumption that they won't be used anyway and avoids a division by zero (this currently happens with the (presumably slightly hacky) implementation of the preconditioner for the flux control problems). A warning is issued in PARANOID mode. Thanks to David Shepherd for spotting this. ------------------------------------------------------------------------ r255 | mheil | 2012-01-06 10:28:53 +0000 (Fri, 06 Jan 2012) | 5 lines Removed duplicate mention of adaptive_unstructured_fsi directory in demo_drivers/interaction/Makefile.am which caused problems in make distclean (and unnecessarily ran self test twice!) ------------------------------------------------------------------------ r254 | mheil | 2012-01-05 09:37:23 +0000 (Thu, 05 Jan 2012) | 7 lines Added missing external_distributions/trilinos/build_scripts/teuchos_header_prefix_for_gcc4.6.txt (only needed for trilinos build). ------------------------------------------------------------------------ r253 | mheil | 2012-01-04 18:43:49 +0000 (Wed, 04 Jan 2012) | 174 lines Check in after massive mpi rewrites/bug fixes starting from version227. -- Deleted various assigned but unused variables detected by latest version of gcc compilers on hector. -- Fixed memory leak in CylinderWithFlagMesh which now deletes its Domain. -- Added quick return from Quad/OctreeForest constructor if vector of trees is empty. -- Halo status of elements and nodes is now controlled by int (defaults to -1 for "not a halo") that stores the processor that holds the non-halo counterpart. GeneralisedElement/Node::set_halo() now takes an argument that specifies the ID of the non-halo processor. -- Moved huge chunks of code that involved looping over sub-meshes in Problem::assign_eqn_numbers() to the meshes themselves. -- Added various PARANOID-ified sanity checks to Problem::remove_duplicate_data() to ensure that hanging status of original and replacement nodes is consistent. -- Synchronised assessment of need for refinement and pruning in Problem::read() -- Fixed sync problem that arose when externally imposed partitioning is imposed in problem with empty processors (following restart on a larger number of processors). -- Added (possibly expensive) calls to actions_after/before_adapt() (in that order!) in Problem::load_balance() to make sure nodes are resized by attaching FaceElements and then immediately removing them (if that's what these functions do). -- Fixed problems with synchronisation of refinement levels in TreeBasedRefineableMeshBase::refine_base_mesh(). Also made sure that external elements that may still exist on that processor are deleted and nodes re-ordered even though the mesh doesn't need to be adapted in that function. -- Ditto when TreeBasedRefineableMeshBase::adapt() is called but actual adaptation is not deemed worthwhile. -- Moved call to Mesh::classify_halo_and_haloed_nodes() to end of TreeBasedRefineableMeshBase::adapt_mesh(). Not sure why it was ever called from Problem::assign_eqn_numbers() where we used to loop over all the sub-meshes. -- Following re-organisation of code, removed statement that "This synchronisation necesarily takes place before the classification of halo/haloed nodes, so it must be performed on the halo/haloed elements" from TreeBasedRefineableMeshBase::synchronise_hanging_nodes() because it's no longer true (if it ever was). Now looping over the halo/ed nodes directly. -- Changed search in shared node scheme in TreeBasedRefineableMeshBase::synchronise_hanging_nodes() to map-based search as it turned out to be MUCH faster. -- Accounted for triangular dependencies of haloed nodes in TreeBasedRefineableMeshBase::synchronise_hanging_nodes(): Involves potentially expensive all-to-alls and is rarely needed but if it is needed, the code dies on its arse... -- Create dummy empty forest (and flush old one) if setup_octree_forest() or setup_quadtree_forest() are called for empty mesh. -- Fixed range error in block preconditioners. -- Added additional boolean, Allow_use_of_halo_elements_as_external_elements, to multi-domain namespace. It defaults to true (following check that all self-tests still pass). Not sure why we had originally decided that halo elements (that are on the processor already) could not act as external elements for other elements on that processor. -- Made sure that master nodes of master nodes (!) of external haloed nodes are accounted for properly when setting up multi-domain interactions in parallel. (The oversight was that nodes that are not hanging geometrically may hang for some of their values (e.g. for the pressure in Taylor Hood), leading to a discrepancy in the hanging-ness of halo and haloed nodes. -- Overloaded the now virtual Mesh::classify_halo_and_haloed_nodes() in RefineableMeshBase, following its move from Problem::assign_eqn_numbers(). The version in RefineableMeshBase calls the version in Mesh then synchronises the hanging nodes, and resizes halo nodes. -- Mesh::classify_halo_and_haloed_nodes() now calls Mesh::setup_shared_node_scheme() at the beginning, and the newly written functino Mesh::synchronise_shared_nodes() at the end. -- Introduced Mesh::synchronise_shared_nodes(); called from Mesh::classify_halo_and_haloed_nodes() to cater for the the case where: (1) a certain node on the current processor is halo with proc p (i.e. its non-halo counterpart lives on processor p) (2) that node is also exists (also as a halo) on another processor (q, say) where its non-halo counter part is also known to be on processor p. However, without calling this function the current processor does not necessarily know that it shares a node with processor q. This information can be required, e.g. when synchronising hanging node schemes over all processors. -- Included external halo nodes into Mesh::resize_halo_nodes(). -- Fixed problem with "multiply retained" elements in Mesh::distribute(). -- Added Mesh::output_external_halo_elements() which does what it says, either for all or for specified processor. -- Now deleting all external storage before pruning elements and nodes in Mesh::prune_halo_elements_and_nodes() -- Massively expanded output in Mesh::doc_mesh_distribution() and scope of tests in Mesh::check_halo_schemes(). -- Added cstddef header to trilinos_preconditioners.h -- needed from gcc 4.6.* on hector. -- Introduced patch for header files in trilinos' teuchos sources for gcc4.6. -- Provided Node::hang_code() which returns binary representation of the hang status of the nodal values. -- Setting hang_pt=0 in Node::set_hanging_pt() now makes the specified value non-hanging. -- Adjusted demo_drivers/mpi/distribution/prescribed_displ_lagr_mult/resize_hanging_node_tester.cc Following the creation of Lagrange multiplier elements, not all halo nodes are resized automatically, so applying boundary conditions for Lagrange multipliers causes problems unless we call resize_halo_nodes() explicitly: // This is crucial: Lagrange multiplier elements have created additional // unknowns at their nodes. Corresponding halo nodes may have to // resized for consistency (they're not necessarily touched by // a Lagrange multiplier element that would do the resizing for us). solid_mesh_pt()->resize_halo_nodes(this->communicator_pt()); -- Similar problem fixed in demo_drivers/mpi/multi_domain/turek_flag/turek_flag_load_balance.cc where we need to update node update functions for external halo nodes that are created during call to FSI_functions::setup_fluid_load_info_for_solid_elements: + // Call update_node_update for all the nodes of external halo elements + Vector external_halo_node_pt; + fluid_mesh_pt()->get_external_halo_node_pt(external_halo_node_pt); + unsigned n=external_halo_node_pt.size(); + for (unsigned j=0;j + (external_halo_node_pt[j]); + + // Call update_node_update for this node + fluid_mesh_pt()->update_node_update(alg_nod_pt); + } ------------------------------------------------------------------------ r252 | mheil | 2012-01-03 19:26:57 +0000 (Tue, 03 Jan 2012) | 16 lines Post-Christmas check-in: -- Tidied up driver code and documentation for Rob's Fourier decomposed time-harmonic linear elasticity. -- Added source, demo code and tutorial for Fourier decomposed Helmholtz equations. NOTE: temporarily commented out throw for two errors in src/meshes/triangle_mesh.template.cc. (Both alert user to issues to do with multiple regions etc. that still need work -- Julio is working on this). ------------------------------------------------------------------------ r251 | ahazel | 2011-12-21 18:08:40 +0000 (Wed, 21 Dec 2011) | 6 lines Added documentation for unstructured adaptivity of solid mechanics problems and also fluid-structure interaction in two-dimensions. The corresponding driver codes have been slightly modified, but they self tests still pass! ------------------------------------------------------------------------ r250 | mheil | 2011-12-20 13:33:24 +0000 (Tue, 20 Dec 2011) | 5 lines Robert Harter's new Fourier-decomposed time-periodic linear elasticity elements including documentation and demo/test driver. ------------------------------------------------------------------------ r249 | mheil | 2011-12-19 11:42:07 +0000 (Mon, 19 Dec 2011) | 5 lines Changed doubly-adaptive Newton solver so that it bails out immediately if max_adapt==0 rather than performing an (un-requested) adaption regardless. ------------------------------------------------------------------------ r248 | ahazel | 2011-12-02 14:00:59 +0000 (Fri, 02 Dec 2011) | 17 lines Corrected an oversight when refinining structured meshes on curvilinear boundaries in 3D. Spotted by Phil Haines & David X. (Jim Denier's PhD Student). The problem was that Nodes that were hanging on boundaries did not get their position updated to be consistent with a macroelement representation when they became unhanging. I have fixed the problem by keeping track of the nodes for which this could occur in TreeBasedRefineableMesh::adapt_mesh() and then correcting them afterwards. The same problem could arise with Lagrangian coordinates in SolidMeshes and because this is hard to think about (and we don't have a test case), I've settled for simply throwing a warning. A new test for this is included in demo_drivers/navier_stokes/three_d_entry_flow/full_tube.cc ------------------------------------------------------------------------ r247 | ahazel | 2011-11-30 17:56:21 +0000 (Wed, 30 Nov 2011) | 16 lines Corrected the IsotropicStrainEnergyFunction constitutive law so that it (now) correctly computes the second Piola-Kirchhoff stress tensor, rather than the stress tensor used by Green & Zerna (which is almost, but not quite the same). The two are exactly the same if the material is incompressible. Updated the documentation and validation data for all codes apart from the parallel codes because I haven't got MPI installed on this machine. I'll do the parallel in the next commit. In addition, for all pseudo-solid mesh applications, the constitutive law has been changed to GeneralisedHookean. Finally, added another tweak to the parmetis header to ensure that serial compilation works. ------------------------------------------------------------------------ r246 | mheil | 2011-11-29 13:52:42 +0000 (Tue, 29 Nov 2011) | 5 lines Checking in Andrew's correction to parmetis header -- uses oomph-lib's own compiler macro, OOMPH_HAS_MPI to suppress inclusion of mpi.h for serial builds. ------------------------------------------------------------------------ r245 | mheil | 2011-11-25 10:18:20 +0000 (Fri, 25 Nov 2011) | 42 lines -- INTERFACE/NAME CHANGE: Totally removed all references to NavierStokesLSCPreconditioner Replace by NavierStokesSchurComplementPreconditioner which can operate as LSC or Fp preconditioner; the former is the default so it's a straightforward replacement. -- Also removed the (almost verbatim) copies that Andrew made for the axisymmetric and spherically symmetric Navier-Stokes equations (the latter weren't even being tested anywhere). All of them now work with the preconditioner defined in the cartesian Navier-Stokes directory, so to use it you have to link against that directory even if you're only doing an axisymmetric flow problem, say. -- Provided the function get_pressure_and_velocity_mass_matrix_diagonal(...) for axisymmetric Navier Stokes elements (defined in the new base class NavierStokesElementWithDiagonalMassMatrices in elements.h) but left the pressure mass matrix alone (code breaks at run time) since there's no test case for use of axisymmetric Navier-Stokes with the Fp preconditoner. -- Created PressureBasedSolidLSCPreconditioner (no self-test yet; work in progress in private/user_drivers/joel). Works with solid elements that are derived from the base class SolidElementWithDiagonalMassMatrix which defines the pure virtual function get_mass_matrix_diagonal(...). ------------------------------------------------------------------------ r244 | mheil | 2011-11-21 08:44:00 +0000 (Mon, 21 Nov 2011) | 19 lines -- Added pre-stress (added to the stress computed by the constitutive law) to all solid elements. Tested by checking that a pre-stressed tube, left free at one end, contracts by the required amount. Pre-stress is defined similar to a body force via a function pointer that allows it to vary as a fct of the Lagrangian coordinates. -- Created boundary coordinates on inner boundary of quarter pipe mesh. -- Hopefully changed the status of validate.sh in demo_drivers/navier_stokes/unstructured_adaptive_fs to executable via svn command svn propset svn:executable "*" validate.sh We'll find out if it works next time... ------------------------------------------------------------------------ r243 | mheil | 2011-11-15 16:26:12 +0000 (Tue, 15 Nov 2011) | 5 lines Moved call to Problem::recompute_load_balanced_assembly() in Problem::parallel_sparse_assemble() to avoid array over-run. ------------------------------------------------------------------------ r242 | mheil | 2011-11-13 11:25:35 +0000 (Sun, 13 Nov 2011) | 3 lines Attempt to fix the non-executable validate.sh. ------------------------------------------------------------------------ r241 | mheil | 2011-11-12 14:04:23 +0000 (Sat, 12 Nov 2011) | 34 lines Fix for numerous bugs/problems identified by Jean-Luc Fattebert at LLNL -- Thank You!. -- Removed adrivers.c and mdrivers.c from external_src/oomph_parmetis_3.1.1. They're not needed and cause problems for some linkers. -- Replaced oomph_metis_4.0 by oomph_metis_from_parmetis_3.1.1 (the serial version of metis that is shipped with (and therefore fully compatible with) parmetis_3.1.1. -- New metis revealed a few mpi driver codes that didn't read in the partition from disk when doing self test. Fixed these. -- Changed a catch by copy to catch by reference in mesh smoother. -- Removed unnecessary includes in demo code that illustrates problem with missing "this->" -- Removed unnecesary template<> in various axisymmetric multi-physics files. -- Forced an explicit instantiation of the HelmholtzEquations in 1,2 and 3 dimensions. -- Added compute_exact_Z2_error(...) to PseudoSolidNodeUpdateElement and its refineable counterpart (it forwards this to the BASIC element; a bit naughty -- won't work if the BASIC element isn't an ElementWithZ2ErrorEstimator...). -- Tidied up a few conversion warnings (double to int etc) -- Added jeffrey orbit directory to subdir list in navier stokes doc directory. ------------------------------------------------------------------------ r240 | ahazel | 2011-11-10 17:21:58 +0000 (Thu, 10 Nov 2011) | 2 lines Small changes to make the code validate on my other (serial) machine. ------------------------------------------------------------------------ r239 | ahazel | 2011-11-10 14:27:22 +0000 (Thu, 10 Nov 2011) | 17 lines Modified the destruction of data in Periodic BoundaryNodes to avoid a segmentation fault. This required the introduction of an additional function because the way that virtual destruction works means that storage allocated in a derived class cannot be deleted in the base class. This seems obvious, but the mechanics got a little involved. The upshot is that if you have a BoundaryNode, then once you are in the Node destructor a dynamic_cast to a BoundaryNode will fail, even if the Node was originally a BoundaryNode before the destruction started ... clear? In addition, the unstructured adaptive solid and FSI demos have now been included in the self tests with appropriate test data and the unstructured 3D adaptive test now uses a global measure so it *should* pass on other machines. A few tolerance tweaks have also been added to ensure that the adaptive drop and bubble codes pass the tests. ------------------------------------------------------------------------ r238 | mheil | 2011-10-28 08:32:39 +0100 (Fri, 28 Oct 2011) | 3 lines Added missing mesh_from_inline_triangle/mesh_from_inline_triangle_no_adapt.cc ------------------------------------------------------------------------ r237 | mheil | 2011-10-26 12:00:53 +0100 (Wed, 26 Oct 2011) | 3 lines Added Nico's bubble in channel tutorial (this time for real...) ------------------------------------------------------------------------ r236 | mheil | 2011-10-17 16:57:53 +0100 (Mon, 17 Oct 2011) | 67 lines Mainly check in of Nico Bergemann's (cleaned up) changes to triangle meshes (still work in progress: some more tidy up to be done, plus need to figure out why we get the pressure jumps in Navier Stokes when remeshing). -- Enabled polyline refinement/unrefinement during triangle mesh adaptation by default. Can be disabled with TriangleMeshClosedCurve::disable_polyline_refinement() and TriangleMeshClosedCurve::disable_polyline_unrefinement() Further member functions allow setting of tolerances. -- Allowed redistribution of polyline segments between the polylines that make up a polygon with TriangleMeshPolygon::enable_redistribution_of_segments_between_polylines() Obviously disabled by default; tested in Poisson test code. -- Provided hook (via function pointer) to update nodal positions (or whatever) following the generation of a new mesh during adaptation of 2D triangular meshes (performed just after snapping to curvilinear boundaries. -- Added additional codes to demo_drivers/meshing/mesh_from_inline_triangle to test -- case when outer boundary is polygon. This code also test the redistribution of polyline segments between the polylines that make up the polygon. -- non-refineable version of code (to show that inline mesh generation works with original TElements). -- Checked in Nico's "adaptive bubble in channel" tutorial. The code still needs some work to get to the bottom of the pressure jumps following adaptation. Things to try: BDF<1>; ignore ALE terms;... Attempt at applying volume constraint post-mesh-regeneration is currently parked in demo_drivers/navier_stokes/unstructured_adaptive_fs/volume_constrainer.h which uses Fluid_mesh_pt->mesh_update_fct_pt()= &Problem_Parameter::mesh_update_for_volume_conservation; to update nodal positions on interface. Still a few other hierhers left, too. -- Small changes to Andrew's Jeffrey Orbit tutorial and code incl. named access functions that allow pinning of centre of mass or rotation angle for ImmersedRigidBodyElement. -- Changed oomph-convert.py so that it outputs a (dummy) vtu file if the original data file is empty. ------------------------------------------------------------------------ r235 | ahazel | 2011-10-17 09:32:54 +0100 (Mon, 17 Oct 2011) | 2 lines And now added the file that I forgot to check in. ------------------------------------------------------------------------ r234 | ahazel | 2011-10-14 17:01:42 +0100 (Fri, 14 Oct 2011) | 15 lines Log for 233 ----------- Added additional generalised advection diffusion elements in an axisymmetric coordinate system for work with Rachel Bearon in Liverpool. Added a little additional demo driver for non-isotropic diffusion in pipe flow. Log for 234 ------------- Added a little utility script to remove dangling ^M's and ran it on the library. The files that have changed are those that had ^M's in them! I have not checked in private so those will still have ^M's in them for now. ------------------------------------------------------------------------ r233 | ahazel | 2011-10-14 14:45:43 +0100 (Fri, 14 Oct 2011) | 1 line ------------------------------------------------------------------------ r232 | ahazel | 2011-10-13 09:38:20 +0100 (Thu, 13 Oct 2011) | 50 lines 1) Fixed a stupid bug in axi_static_cap.cc demo in which the swirl velocity was never fixed. This lead to a (near) singular matrix that was not always handled gracefully by the linear solver. Note that the error disappeared under valgrind beacause it uses its own implementation of IEEE floating point. In the process of finding the bug, a number of memory leaks in the driver were fixed. 2) Fixed an oversight in VolumeConstraintBoundingElements in the case when the pressure that is traded for the volume constraint is an internal fluid pressure and the fluid elements interpolate the pressure at nodes. It is then possible for the traded pressure to be nodal data of the VolumeConstraintBoundingElement, in which case adding it as external data leads to repeated local equation numbers. This causes a fail when PARANOID error checking is enabled. The case is now handled properly by testing whether the traded data is nodal data when it is added, which is a bit more expensive, but only happens during setup and can be avoided via a boolean argument VolumeConstraintBoundingElement::set_volume_constraint_element(). The default is to do the checking. 3) Removed buoyant_navier_stokes_elements.h from multi_physics/marangoni_convection and multi_physics/insoluble_surfactant demo drivers. These now link to the elements defined in src/multi_physics. 4) The use of finite differences for off-diagonal blocks of multi physics elements was not as efficient as it should have been. If an element is defined via class MultiPhysics : public Physics1, public Physics2 {}; then a call to Physics1::get_residuals(...) will be identical to a call to MultiPhysics::get_residuals(..) because this function is not overloaded and always returns all residuals associated with the element. Within get_residuals() the function fill_in_contribution_to_residuals(...) is called and it is this that it overloaded. Hence in order to compute only the residuals associated with Physics1 we must use Physics1::fill_in_contribution_to_residuals(...) after initialising the residuals to zero. All examples of this pattern in the library have now been changed. 5) Another related problem in PseudoSolidNodeUpdateElements was that the finite-difference loop to determine the shape derivatives was actually replacing the entries in all rows, overwriting the diagonal contribution from the underlying solid elements. This has now been optimised by pre-calculating all solid degrees of freedom and only adding the result of the finite difference calculations to dofs that are not solid dofs. In order to handle the case of solid pressures certain functions have been moved into the PVDEquations base class so that they can be used for all SolidElements. ------------------------------------------------------------------------ r231 | phurley | 2011-10-07 18:36:40 +0100 (Fri, 07 Oct 2011) | 4 lines This check-in is only to fix a typo in "BoundaryNode::reset_copied_pointers()" which stopped the library from compiling. ------------------------------------------------------------------------ r230 | phurley | 2011-10-07 18:06:53 +0100 (Fri, 07 Oct 2011) | 3 lines Extra check in because I (ALH) typed svn commit in the wrong directory. This adds all the stuff not in demo_drivers ------------------------------------------------------------------------ r229 | phurley | 2011-10-07 17:59:44 +0100 (Fri, 07 Oct 2011) | 234 lines Modifications to the src directory: ----------------------------------- -- Added the boolean flag "Suppress_mumps_info_during_solve" (default value is "false") to the MumpsSolver class. When this flag is set to "true" the standard MUMPS output is suppressed. The flag is set to "true" by calling enable_suppress_warning_about_MPI_COMM_WORLD() and set back to "false" by calling disable_suppress_warning_about_MPI_COMM_WORLD() -- Updated the PARANOID check in "DoubleVector::dot(...)" which checks that the distribution pointers of both vectors are the same. The error message now prints out the distribution of both vectors. -- Updated "BoundaryNode::reset_copied_pointers()" to check that the pointer to the copied node is of type "BoundaryNode*". -- Updated "BoundaryNode::clear_copied_pointers()" to additionally copy across the "index_of_first_value_assigned_by_face_element" map data. -- Have made "ElementWithMovingNodes::ngeom_data()" public -- can't remember why... -- Added an extra constructor to the ElasticRectangularQuadMesh class, which has an additional argument. This additional argument is a boolean flag to indicate whether or not the mesh is to be periodic in the x-direction. -- Added an extra constructor to the ElasticRefineableRectangularQuadMesh class, which has an additional argument. This additional argument is a boolean flag to indicate whether or not the mesh is to be periodic in the x-direction. -- Added the function "interpolated_duds_axi_nst(...)" to the AxisymmetricNavierStokesEquations class. This function returns the interpolated derivatives of the velocity w.r.t. the local coordinates. It is used by Patrick's multi-domain linearised axisymmetric Navier--Stokes elements, which need this information from the external element. -- Fixed bug in "AxisymmetricFluidInterfaceElement:: fill_in_generic_residual_contribution_interface" where the contribution residuals[local_eqn] -= (Sigma/Ca)*psif(l)*W*J; was (incorrectly) implemented as residuals[local_eqn] -= (1.0/Ca)*psif(l)*W*J; -- Overloaded the function "dshape_and_dtest_eulerian_at_knot_poisson(...)" in the PoissonEquations class. This is a pure virtual function. -- Overloaded the function "dshape_and_dtest_eulerian_at_knot_poisson(...)" in the QPoissonElement class. The overloaded version additionally computes the derivatives with respect to the nodal coordinates of: i) The eulerian derivatives of the shape functions dpsidx ii) The eulerian derivatives of the test functions dtestdx iii) The Jacobian of the mapping J -- Overloaded the function "dshape_and_dtest_eulerian_at_knot_poisson(...)" in the TPoissonElement class. The overloaded version additionally computes the derivatives with respect to the nodal coordinates of: i) The eulerian derivatives of the shape functions dpsidx ii) The eulerian derivatives of the test functions dtestdx iii) The Jacobian of the mapping J -- Overloaded the function "dshape_and_dtest_eulerian_at_knot_poisson(...)" in the QSpectralPoissonElement class. The overloaded version additionally computes the derivatives with respect to the nodal coordinates of: i) The eulerian derivatives of the shape functions dpsidx ii) The eulerian derivatives of the test functions dtestdx iii) The Jacobian of the mapping J -- Tidied up "PoissonEquations::get_dresidual_dnodal_coordinates(...)". -- Tidied up "RefineablePoissonEquations::get_dresidual_dnodal_coordinates(...)" -- Overloaded the function "dshape_and_dtest_eulerian_at_knot_nst(...)" in the NavierStokesEquations class. This is a pure virtual function. -- Overloaded the function "dshape_and_dtest_eulerian_at_knot_nst(...)" in the QCrouzeixRaviartElement and QTaylorHoodElement classes. The overloaded version additionally computes the derivatives with respect to the nodal coordinates of: i) The eulerian derivatives of the shape functions dpsidx ii) The eulerian derivatives of the test functions dtestdx iii) The Jacobian of the mapping J -- Overloaded the function "dshape_and_dtest_eulerian_at_knot_nst(...)" in the TCrouzeixRaviartElement and TTaylorHoodElement classes. The overloaded version additionally computes the derivatives with respect to the nodal coordinates of: i) The eulerian derivatives of the shape functions dpsidx ii) The eulerian derivatives of the test functions dtestdx iii) The Jacobian of the mapping J -- Tidied up "NavierStokesEquations::get_dresidual_dnodal_coordinates(...)". -- Tidied up "RefineableNavierStokesEquations:: get_dresidual_dnodal_coordinates(...)". -- Provided the warning about only computing the "raw" kinetic energy to "NavierStokesEquations::kin_energy()". -- Fixed miscellaneous typos Modifications to the demo_drivers directory: -------------------------------------------- -- Rewrote spin_up demo driver -- Rewrote single_layer_free_surface demo driver. There are now two (fully validated) codes, spine_single_layer.cc and elastic_single_layer.cc which employ the two different node update strategies. Associated Makefile.am and validate.sh files have been updated to reflect these changes. -- Rewrote two_layer_interface demo driver. There are now two (fully validated) codes, spine_two_layer_interface.cc and elastic_two_layer_interface.cc which employ the two different node update strategies. Associated Makefile.am and validate.sh files have been updated to reflect these changes. -- Rewrote two_layer_interface_axisym demo driver. There are now two (fully validated) codes, spine_two_layer_interface_axisym.cc and elastic_two_layer_interface_axisym.cc which employ the two different node update strategies. Associated Makefile.am and validate.sh files have been updated to reflect these changes. -- Added new demo driver to the "interaction/free_boundary_poisson" directory: "macro_element_free_boundary_poisson_non_ref". This driver tests the non-refineable version of "PoissonEquations::get_dresidual_dnodal_coordinates(...)" and so it evaluates the derivatives of the residual equation w.r.t. the nodal coordinates analytically. -- Modified the following four driver codes, all for the same reason: - "navier_stokes/three_d_bretherton/three_d_breth.cc" - "interaction/elastic_bretherton/elastic_bretherton.cc" - "multi_physics/marangoni_convection/marangoni_convection.cc" - "multi_physics/marangoni_convection/marangoni_convection_box.cc" Each of these drivers cannot be allowed to use the analytical form of get_dresidual_dnodal_coordinates(...) that is implemented in the NavierStokesEquations class, since the elemental residuals have contributions from external data which is not taken into account by that routine. We therefore force the bulk elements to use the fully-finite differenced version. -- Modified the driver code "flux_transport/advection/one_d_advection.cc" so that the periodic node is on the right-hand domain boundary, and therefore a copy of the node on the left-hand domain boundary, rather that the other way around. This was required because the nodes are deleted in reverse order, and the "copied node" must still exist when the node which is a copy of it is deleted. THIS IS NOT THE DESIRED BEHAVIOUR AND SHOULD BE FIXED SOON. Modifications to the doc directory: ----------------------------------- -- Added "good practice" comment to "two_d_unsteady_heat_adapt.txt" in relation to setting initial conditions. -- Rewrote spin_up.txt (spin-up documentation) and created new images, animations, tecplot macros, etc. to accompany it -- Rewrote single_layer_free_surface.txt (first free-surface tutorial) and created new images, animations, tecplot macros, etc. to accompany it -- Rewrote two_layer_interface.txt (second free-surface tutorial) and created new images, animations, tecplot macros, etc. to accompany it WARNING: This tutorial is still in draft form but shouldn't break anything! -- Rewrote two_layer_interface_axisym.txt and created new images, animations, tecplot macros, etc. to accompany it WARNING: This tutorial is still in draft form but shouldn't break anything! ------------------------------------------------------------------------ r228 | mheil | 2011-10-05 16:17:19 +0100 (Wed, 05 Oct 2011) | 9 lines -- Fixed #ifdef OOMPH_HAS_MPI problem spotted by Rich. Library now compiles in serial too :) -- Fixed embrassing division by zero error when documenting time outside linear solver in Newton method. Totally unclear why we never spotted this before... ------------------------------------------------------------------------ r227 | mheil | 2011-10-05 07:54:03 +0100 (Wed, 05 Oct 2011) | 102 lines -- Can now deal with distributed problems in which some processors have no elements at all (this can happen when distributing small problems with FaceElements over large number of processors). Should usually be rectified by load balancing following a sufficient number of refinements. -- Changed default assignement of elements over processors for parallel computations with non-distributed problems. If we have fewer elements than processors we keep at least 10 elements on the first few processors and leave the others empty. When calling the "load balancing" routine for such cases it does nothing. -- Changed removal of boundary nodes in Problem::remove_duplicate_data(...) to avoid invalid reads (still doesn't quite work; needs another look; search for the bit where we deal with "duplicated_node_pt" around line 2566). -- Optimised memory usage in Problem::parallel_sparse_assemble() by shrinking pre-assembled raw C arrays before converting them into oomph-lib CR matrix. -- Added capability to refine meshes uniformly several times and to prune immediately after each refinement in order to keep the number of halo objects to an absolute minimum. (Important in massively parallel computations where assignment of equations numbers becomes very costly otherwise). void Problem::refine_uniformly_and_prune(const Vector& nrefine_for_mesh) where the vector nrefine_for_mesh contains the number of uniform refinements required for each sub-mesh. -- INTERFACE CHANGE: Renamed Mesh/Problem::flush_all_external_storage() to Mesh/Problem::delete_all_external_storage() because it does actually delete the relevant objects (not just "flush" the containers containing pointers to them). -- Fixed two major memory leaks: None of the non-boundary nodes that were scheduled for deletion when distribution a mesh were actually deleted. Furthermore, when deleting a mesh, we did not delete the external halo objects that may have been created in parallel multi-domain computations. This is now done. -- Major rewrite of the way in which Lagrange multipliers impose the solid displacements along the FSI interface on the pseudo-solid fluid mesh in parallel computations. The newly written RefineableFSIImposeDisplacementByLagrangeMultiplierElement or FSIImposeDisplacementByLagrangeMultiplierElement are ElementWithExternalElements that obtain the displacement to be imposed from the adjacent "bulk" solid elements rather than from a lower dimensional mesh of solid FaceElements. The "external" elements can be set up by a call to FSI_functions::setup_solid_elements_for_displacement_bc(...) which is essentially a copy of FSI_functions::setup_fluid_load_info_for_solid_elements(...) and was introduced only to simplify the explanation of its arguments. When using the new elemements it is no longer necessary to retain a layer of halo solid elements along the entire FSI boundary (which becomes a total killer in massively parallel computations!). The old elements still exist though and are useful in free-boundary problems in which the moving boundary is given by a genuine GeomObject (rather than a MeshAsGeomObject that is custom-built from the FaceElements along the moving boundary) and for problems with algebraic node updates, say. -- Changed output of stacktrace so that it's only issued when an OomphLibError is thrown (rather than during warnings). -- Added yet more timings to be output when setting Global_timings::Doc_comprehensive_timings to true. -- Massive leak check operation removed various signacant memory leaks. -- Made the TTimeHarmonicLinearElasticityElements ElementWithZ2ErrorEstimators so they can be used in adaptive unstructured computations (test case in Robert Harter's private user driver directory). -- Removed self-tests during installation of scalapack (doesn't work on machines such as hector where we cross-compile). ------------------------------------------------------------------------ r226 | ahazel | 2011-10-04 16:00:27 +0100 (Tue, 04 Oct 2011) | 4 lines Tiny fix to frontal solver so that it works with arc-length continuation (again). The resolve() function had not be updated to take account of the distributed vector class. ------------------------------------------------------------------------ r225 | ahazel | 2011-09-30 15:08:24 +0100 (Fri, 30 Sep 2011) | 3 lines Added an additional demo for axisymmetric advection diffusion equations for Poiseulle flow in a pipe ------------------------------------------------------------------------ r224 | ahazel | 2011-09-30 06:59:46 +0100 (Fri, 30 Sep 2011) | 2 lines A few small changes to un-break the build ... sorry ------------------------------------------------------------------------ r223 | ahazel | 2011-09-29 21:39:01 +0100 (Thu, 29 Sep 2011) | 20 lines Added a proof-of-concept unstructured adaptive fsi code that should work as soon as Nico's updates to the mesh regeneration are merged. (At present a hack to the triangle_mesh.template.cc is required), so the directory is omitted from the build. This required the fix of a little oversight in the multi domain setup. Documented static free surface problems in two-d using volume constraints and prescribed contact angles. Added new drivers that are essentially the same to solve the same problem using an axisymmetric geometry. Also tidied up the three-d version of the same code. A little more library code clean-up is required, including some global name changes, but this will wait until after Patrick's "introduction to free surface problems" has been checked in so that the changes are only done once. Probably the most significant change is that the volume constraint sign convention has been fixed so that when a fluid volume is enclosed the sign is positive. This means that for an enclosed air bubble (adaptive_bubble_in_channel.cc) the specified volume should be negative. ------------------------------------------------------------------------ r222 | nelliott | 2011-09-15 09:43:10 +0100 (Thu, 15 Sep 2011) | 5 lines Enabled KirchhoffLoveBeamEquations::get_energy() to be called and correctly computed on elements with pre-stress (sigma0). Novak Elliott. ------------------------------------------------------------------------ r221 | mheil | 2011-09-13 09:16:17 +0100 (Tue, 13 Sep 2011) | 7 lines Added stacktrace.h (wonderful code, "licenced" under the WTFPL licence) and modified our exception handler so that it provides a stacktrace with commands that allow the (offline) retrieval of line numbers. This avoids having to debug core files post-mortem (especially useful on hector where they're often corrupted). ------------------------------------------------------------------------ r220 | mheil | 2011-09-09 07:57:33 +0100 (Fri, 09 Sep 2011) | 6 lines Tweaked various fpdiff tolerances to make it work on my laptop. demo_drivers/navier_stokes/unstructured_adaptive_3d_ALE is beyond hope, though -- it really needs validata based on the norm of the solution... Andrew's job as it's his code... :) ------------------------------------------------------------------------ r219 | mheil | 2011-09-08 17:16:16 +0100 (Thu, 08 Sep 2011) | 8 lines -- Upgraded mumps build machinery to version 4.10.0 and rename NewMumps* classes to Mumps*. Also moved new_mumps* to mumps* files. -- Included self-test of mumps (if available) into mpi solver self tests. ------------------------------------------------------------------------ r218 | mheil | 2011-09-08 11:58:49 +0100 (Thu, 08 Sep 2011) | 34 lines -- Changed load balancing/partitioning routines so that load balancing is based on Jacobian assembly times of leaf elements (rather than just the number of elements) if these are available. For this reason the elemental assembly times now get recorded even for distributed problems. This has a fairly dramatic effect on the load balance in (typically multi-physics) problems in which the computation of different element al Jacobians has a vastly different cost. Assembly-time-based load balancing can be disabled (for the next call to Problem::load_balance()) by calling Problem::clear_elemental_assembly_time() As before, elemental assembly times only get re-computed after a call to Problem::assign_eqn_numbers(). Note that this functionality is hard to test in the self-tests because the assembly times (CPU times!) can vary by too much to make this is a reproducible exercise. When doing the partitioning with bypass_metis set to true we therefore assign some stupid but repeatable data to the weights that get passed into METIS (the metis input is still recorded for validation purposes). -- Doc of load imbalance (for assembly) now needs to be requested explicitly by call to Problem::enable_doc_imbalance_in_parallel_assembly(). -- Removed empty virtual function Problem::complete_build_of_halo_elements() which seemed sort of useful (and must have been at some point) but isn't actually called anywhere... -- Fixed problem with oomph-convert.py script that made it incompatible with older versions of python (such as the one on the wulfling) ------------------------------------------------------------------------ r217 | ahazel | 2011-09-07 07:52:31 +0100 (Wed, 07 Sep 2011) | 28 lines Added changes so that Lagrange coordinates are not interpolated in projection problems. For those that want to know, the (variable) solid positions are used as the data in the projection problem. This means that the coordinates will be wrong after solution of the problem and so the residuals cannot be checked. Luckily, it's a linear problem, so we don't need to. After solution, the correct positions are restored so that the next coordinate can be correctly projected. (An alternative would be to compute and store the Jacobian at each integration point before starting, or recycling the mass matrix, which will be the same for all coordinates.) IMPORTANT NOTE: The automatic update of Lagrange coordinates after refinement no longer occurs in the RefineableTriangleMesh (it shouldn't really have been there) and is now implemented in actions_after_adapt() in the appropriate drivers (i.e. jeffery_orbit.cc, adaptive_drop_in_channel.cc, etc). If you are solving a moving mesh problem, then it is generally more robust if the Lagrangian coordinates are reset after each adaptation (or even after each timestep). If you have a user driver that has stopped working, you might need to add this yourself. A demo driver has been added in solid/unstructured_adaptive_solid, but will not work until the remesh of the outer boundary in RefineableTriangleMesh has been fixed. (You have to slightly modify the code to induce a remesh at the moment and Nico has also been working on this, so I've left it alone for now.) Finally, counter_rotating_disks has been added to the Makefile.am in the axisym_navier_stokes directory to avoid problems with make dist. ------------------------------------------------------------------------ r216 | mheil | 2011-09-03 13:09:07 +0100 (Sat, 03 Sep 2011) | 4 lines Added more detailed breakdown of load imbalance during parallel matrix assembly. ------------------------------------------------------------------------ r215 | mheil | 2011-09-03 08:55:24 +0100 (Sat, 03 Sep 2011) | 6 lines Added checks in line visualiser and xda mesh to make sure that input files were properly opened -- otherwise code just hangs which can be very costly if code runs on hector, say. ------------------------------------------------------------------------ r214 | mheil | 2011-09-02 11:14:51 +0100 (Fri, 02 Sep 2011) | 12 lines -- Fixed Problem::distribute() to ensure that it really returns the partitioning vector... -- Committed Jeremy (et al's) much improved oomph-convert and makePvd scripts. -- Committed Jeremy's greatly extended paraview tutorial. -- Added names of various contributors to the oomph-lib homepage and udated URL of Angelo Simone's homepage wherever it appeared. ------------------------------------------------------------------------ r213 | mheil | 2011-09-01 13:59:37 +0100 (Thu, 01 Sep 2011) | 6 lines Checked in the updated tecplot --> paraview conversion scripts (slightly edited after Jeremy's final adjustments). Works on laptop; wulfling seems unhappy about some python stuff; will investigate with a python expert... ------------------------------------------------------------------------ r212 | mheil | 2011-08-31 16:32:19 +0100 (Wed, 31 Aug 2011) | 3 lines -- removed a few stray comments in problem.cc from the last round of debugging. ------------------------------------------------------------------------ r211 | mheil | 2011-08-31 16:17:01 +0100 (Wed, 31 Aug 2011) | 14 lines -- Adapted dump/restart procedure to allow for arbitrary combinations of pruning/load-balancing/refinement for distributed problems (such a short sentence, so much pain...!) NOTE: Number of sub-meshes must now be identical when dumping/reading restart data because we're dealing with each sub-mesh separately when assessing the need to refine/prune it. -- Added demo-driver/self-test for time-harmonic linear elasticity (oscillations of elastic annulus). ------------------------------------------------------------------------ r210 | ahazel | 2011-08-30 11:19:10 +0100 (Tue, 30 Aug 2011) | 27 lines General tidy-up in the jeffery_orbit.cc driver and addition of documentation for that code to describe how to solve problems with immersed solid bodies. New validata has been generated now that everything is consistent. * Changes to RigidBodyElements: - RigidBodyElements are now called ImmersedRigidBodyElements to better reflect their role as rigid bodies that are surrounded by a viscous fluid. - The governing equations have been non-dimensionalised in a manner consistent with the Navier--Stokes equations and, hence, a number of additional dimensionless groups have been added to the class. * Additional flags have been added to TriangleMeshInternalPolygon to specify whether it can update its own reference configuration (like a polygon) or not (if it is a free surface). These flags and an additional virtual function reset_reference_configuration() avoid the need to cast to a RigidBodyElement during unstructured adaptive mesh refinement, so there is no longer a need for all drivers using TriangleMesh to link against rigid_body. Another flag controlled externally by set_fixed() or set_unfixed() can be used to skip a position update completely. * Reynolds number in axisym_navier_stokes/unstructured_torus has been lowered to 10 to make the results less sensitive to modest changes in the mesh. New validata generated. ------------------------------------------------------------------------ r209 | mheil | 2011-08-22 18:09:00 +0100 (Mon, 22 Aug 2011) | 5 lines -- Fixed little include problem in quarter pipe mesh. -- Finished tutorial for inline triangle mesh generatation/adaptation. ------------------------------------------------------------------------ r208 | mheil | 2011-08-22 09:26:41 +0100 (Mon, 22 Aug 2011) | 36 lines -- Provided machinery to build/install mumps and scalapack as external distributions, provided MUMPS_4.8.4.tar.gz and scalapack_installer.tgz are found in external_distributions/mumps_and_scalapack and oomph-lib is built with mpi support. Not mentioned in documentation yet -- want to test it some more first. -- Tidy up of inline triangle mesh generation in parallel with first draft for tutorial (work in progress). -- Removed Problem pointer from refineable triangle meshes. This may break driver codes that still try to set it. -- Provided alternative (default) version for transferring target areas from one mesh to the next during adaptive refinement. We now use a bin-based method, using 100x100 bins. The number of bins can be adjusted by the user and we can also switch back to the (very expensive) multi-domain-based method, using enable_area_transfer_by_bins() or enable_area_transfer_by_multi_domain(). -- Added capability to fill bin structure in MeshAsGeomObject by diffusion, spreading the contents of filled bins to their empty neighbours -- required for bin-based area transfer. Can get very expensive for large number of (mainly empty) bins. -- Multi-domain setup totally dominates the time for the unstructued mesh generation. Sad but true. As a courtesy we now document how long that part of the computation takes. -- Added Jeremy's quarter pipe mesh/domain. ------------------------------------------------------------------------ r207 | nelliott | 2011-08-18 15:33:37 +0100 (Thu, 18 Aug 2011) | 8 lines I have added capability to: - compute energy (potential, kinetic) in solid elements - handle beam elements with non-uniform thickness - decompose the computed potential energy into stretch and bending in beam elements - decompose the computed traction into pressure, normal viscous and tangential viscous contributions, in navier stokes elements - decompose the traction work into pressure, normal viscous and tangential viscous components, in navier stokes surface power elements ------------------------------------------------------------------------ r206 | ahazel | 2011-08-15 20:41:47 +0100 (Mon, 15 Aug 2011) | 72 lines Finished modification to remove all functions that return references to booleans. These types of function have been replaced by void functions to set control flags and read-only functions for testing the status of the flags. If you have set any flags with the construction some_flag_name()=true, your code will almost certainly fail to compile. In most cases the functions have been replaced by disable/enable or set/unset functions. A script called find_dodgy_booleans.bash has been included in bin to track down other offending functions. All those in not in the private directory have been changed. A (hopefully) complete list is given below (some repeated from 205): Problem::shut_up_in_newton_solve() -> dis/enable_info_in_newton_solve() LinearSolver::doc_time() -> dis/enable_doc_time() LinearSolver::resolve_is_enabled() -> is_resolve_enabled() SuperLU::doc_stats() -> dis/enable_doc_stats() SuperLU::compressed_row_flag...() -> use_compressed_row ... () / use_compressed_column ... () HSL::doc_stats() -> dis/enable_doc_stats() HSL::reorder_flag() -> dis/enable_reordering() HSL::use_direct_access_files() -> dis/enable_direct_access_files() DocInfo: doc_flag() -> dis/enable_doc() and is_doc_enabled() DocInfo:: directory_must_exist() -> dis/enable_error_if_directory_does_not_exist() HypreInterface::hypre_error_messages() -> dis/enable_hypre_error_messages() Shell, Beam, Fluid, Traction::normal_points_into_fluid() -> set_normal_pointing_into_fluid() and set_normal_pointing_out_of_fluid() Solid::incompressible() -> set_incompressible(), set_compressible() and is_incompressible() ElementWithMovingNodes::evaluate_dresiduals_dnodal_coordianets_by_fd() -> dis/enable_always_evaluate_dresidual_dnodal_coordinates_by_fd() ElementWithMovingNodes::bypass_ .. -> dis/enable_bypass is_..._bypassed() RefineableMesh::adapt_flag() : dis/enable_adaptation() is_adaptation_enabled() IterativeLinearSolver::setup_preconditioner_before_solve() -> dis/enable_setup_preconditioner_before_solve() GMRES:preconditioner_LHS() -> set_preconditioner_LHS() set_preconditioner_RHS() BlockPrecond: use_two_level_parallelisation() -> dis/enable_two_level_parallelisation() RefineableElement::use_undeformed ... -> dis/enable_use_of_undef.. is_undef....__used. SolidElement::unsteady() -> dis/enable_inertia() is_inertia_enabled SolidElement::evaluate_jacobian_by_fd() -> dis/enable_evaluate_jacobian_by_fd() NavierStokesPreconditioner: use_robin_for_fp() -> dis/enable_robin_for_fp() NavierStokesPreconditioner: p_matrix_using_scaling() -> dis/enable_p_matrix_scaling() NavierStokesPreconditioner: form_BFBt_product() -> dis/enable_form_BFBt_product() PseudoSolidPreconditioner: use_navier_stokes_schur_complement_preconditioner() -> dis/enable_navier_stokes_schur_complement_preconditioner() PseudoElasticPreconditioner: use_inf_norm_of_s_sacling() -> dis/enable_inf_norm_of_s_scaling() SegregatedFSISolver:: has_converged() -> set_solver_converged(), set_solver_not_converged() SegregatedFSISolver: use_pointwise_aitken() -> dis/enable_pointwise_aitken() SegregatedFSISolver: use_under_relaxation(..) -> enable_under_relaxation(..) SegregatedFSISolver:: use_irons ..() -> dis/enable_irons..() Problem::use_default_partition_in_load_balance() -> un/set_default_partition_in_load_balance() SuperLUDist:: delete_matrix_data_in_superlu_dist() -> dis/enable_delete_matrix_data_in_superlu_dist() SuperLUDist:: allow_row_and_col_permutations_in_superlu_dist() -> dis/enable_row_and_col_permutations_in_superlu_dist() Mesh::Mesh_has_been_distributed -> Mesh::Mesh_is_distributed Mesh::mesh_has_been_distributed() -> un/set_mesh_distributed() is_mesh_distributed() Mesh::keep_all_elements_as_halos() -> un/set_keep_all_elements_as_halos() New/MumpsSolver::suppress_solve() -> dis/enable_suppress_solve() New/MumpsSolver::delete_matrix_data() -> dis/enable_delete_matrix_data() NewMumpsSolver::suppress_warning_...() -> enable_suppress_warning_...() TrilinosSolver::delete_matrix() -> dis/enable_delete_matrix() TrilinosSolver::assemble_serial_jacobian() -> dis/enable_assemble_serial_jacobian() EigenSolver::compute_eigenvectors() -> dis/enable_compute_eigenvectors() ProjectableElemetnBase::project_coordinates() -> set_project_coordinates(), set_project_values() FSIWallElement::ignore_shear_stress_in_jacobian() -> dis/enable_shear_stress_in_jacobian() MeshAsGeometricObject:: removed interface suppress_synchronisation_of_bins() SolidElement::solve_for_consistent_newmark_accel_flag() -> dis/enable_solve_for_consistent_newmark_accel() Element/Node::is_halo() -> set_halo() set_nonhalo() and is_halo() Element::must_be_kept_as_halo() -> un/set_must_be_kept_as_halo() Tree:neighbour_periodic() -> set_neighbour_periodic() set_neighbour_nonperiodic() is_neighbour_periodic() ------------------------------------------------------------------------ r205 | ahazel | 2011-08-11 15:00:51 +0100 (Thu, 11 Aug 2011) | 26 lines Modified the spherical_advection_diffusion equations to compute the mass matrix so that the spherical_shell_convection demo can use the eigensolver to find the critical Rayleigh number Added Phil's polar Navier--Stokes equations and a jeffery_hamel demo (it's still a bit of a mess, but we want to get it checked in.) Started the process of removing functions that require the user to set a boolean rvalue in driver codes by changing the following interfaces: Problem::shut_up_in_newton_solve() is now dis/enable_info_in_newton_solve() LinearSolver::doc_time() is now dis/enable_doc_time() LinearSolver::resolve_is_enabled() is now is_resolve_enabled() SuperLU::doc_stats() is now dis/enable_doc_stats() SuperLU::compressed_row_flag...() is now use_compressed_row ... () / use_compressed_column ... () HSL::doc_stats() is now dis/enable_doc_stats() HSL::reorder_flag() is now dis/enable_reordering() HSL::use_direct_access_files() is now dis/enable_direct_access_files() DocInfo: doc_flag() is now dis/enable_doc() and is_doc_enabled() can be used to check DocInfo:: directory_must_exist() is now dis/enable_error_if_directory_does_not_exist() HypreInterface::hypre_error_messages() is now dis/enable_hypre_error_messages() These have been changed in the demo_drivers, but not in the private directories ------------------------------------------------------------------------ r204 | mheil | 2011-08-10 08:26:33 +0100 (Wed, 10 Aug 2011) | 11 lines Updated library for gcc 4.5.2 by introducing default constructors for various classes with complicated templated inheritance structures. Not entirely sure why this is required, but it's probably good practice anyway... Symptoms were that assignment of various quantities weren't executed properly even though relevant code segments were visited; e.g. FiniteElement::Nnode was set to required value, but when inspected later was still zero. Hovering over the assignment in ddd showed that even the debugger was confused -- could read the rhs of the assingment but not the lhs... ------------------------------------------------------------------------ r203 | mheil | 2011-08-08 15:31:20 +0100 (Mon, 08 Aug 2011) | 9 lines Changed output when reporting non-matching meshes in multi-domain projection to use FiniteElement::output(...) for all elements rather than Mesh::output(...) to allow for output even if the elemental output functions require pointers to be set up (which won't have happened when this is done during the projection of the solution to the new mesh). ------------------------------------------------------------------------ r202 | mheil | 2011-08-03 08:07:37 +0100 (Wed, 03 Aug 2011) | 3 lines Checking in Richard's tidied up aztecoo matrix assembly. ------------------------------------------------------------------------ r201 | mheil | 2011-08-02 09:47:12 +0100 (Tue, 02 Aug 2011) | 4 lines Sorry -- yet another check in of the Navier-Stokes preconditioners; this time really with the changes applied. ------------------------------------------------------------------------ r200 | mheil | 2011-08-02 07:43:26 +0100 (Tue, 02 Aug 2011) | 10 lines Fresh check-in with very few changes. Added a few #ifdef OOMPH_HAS_MPI in block_preconditioner.h to make sure it works with serial build but not much else. Nevertheless the problems with re-written (sparsified) block_preconditoner.h seem to have disappeared. Will double check this after new checkout... ------------------------------------------------------------------------ r199 | mheil | 2011-07-25 16:35:47 +0100 (Mon, 25 Jul 2011) | 79 lines -- Fixed dimension of stress tensor in solid_elements.cc when computing principal stresses. (Thanks to Alexandre Raczynski for the bug report). -- Finished (?) mother of all tidy-ups in the free surface elements in src/fluid_interface and the associated driver codes with assorted interface changes. The only (many) "hierher"s left in the code are supposed to point Andrew to things that he should check/confirm, and they have been annotated as such. His part of the tidy up also involves creating the five missing versions of the general volume constraint elements (currently implemented and used for 2D cartesian problems with pseudo-solid node updates). These should replace (or possibly mirror) the various slightly more efficient but considerably messier special-purpose elements defined in the fix_*.h files in various demo drivers -- luckily these are mainly contact angle problems and therefore on Andrew's to-do list... -- Generally changed InterfaceEdgeElement to InterfaceBoundingElement in all class names. -- Ditto with the member functions make_edge_element(...) which have been changed to make_bounding_element(...) -- Ditto with u_index_interface_edge(...) which becomes u_index_interface_boundary(...) -- There are now empty virtual functions in the base classes for fluid interface elements and their bounding elements, FluidInterfaceElement::add_additional_residual_contributions_interface(...) and FluidInterfaceBoundingElement::add_additional_residual_contributions_interface_boundary(...) which can be used to add additional contributions arising from the specific node update strategy (spine, pseudo-elasticity and any others yet to be written) to the relevant boundary integrals. The interface contains the most general arguments, not all of which are used for all specific implementations but introduces some common structure into all these different classes. NOTE: The normal vector is now always the UNIT normal vector (The code for the 2D surface elements attached to 3D bulk elements has been changed accordingly). -- Removed option to specify a constant wall normal directly via pointer to vector since this could cause problems when it's also specified via a function pointer. Now only the latter is allowed and the access function has been given the _unit_ specifier to make sure there's no ambiguity so it's now called FluidInterfaceBoundingElement::wall_unit_normal_fct_pt() -- Removed default assignment for capillary number. It must now be set by the user since 1.0 is not an obvious default (unlike 0.0 for the Reynolds number, or 1.0 for the Strouhal number). ------------------------------------------------------------------------ r198 | mheil | 2011-07-15 15:15:24 +0100 (Fri, 15 Jul 2011) | 44 lines Checked in Richard's updates to block preconditioning framework as sent in email dated 14/07/11 23:36. Only seemingly minor changes to src/axisym_navier_stokes/axisym_navier_stokes_preconditioners.cc src/spherical_navier_stokes/spherical_navier_stokes_preconditioners.cc src/generic/block_preconditioner.h src/generic/trilinos_helpers.cc src/navier_stokes/navier_stokes_preconditioners.cc (one major "-1" change in block_preconditioners.h that probably explains the range checking errors I had after upgrading to the new version). Self-tests all pass but pseudo elastic collapsible tube in private/user_drivers/pseudo_solid_collapsible_tube compiles and runs but doesn't converge any more when run on wulfling with nohup mpirun -H compute-0-0 -npernode 4 ./pseudo_solid_collapsible_tube --no_steady_run --nunsteady 200 --max_adapt 0 --nrefine 1 --dir RESLT > OUTPUT & Initial Maximum residuals 0.138562 Newton Step 1: Maximum residuals 0.0452973 Newton Step 2: Maximum residuals 0.0719481 Newton Step 3: Maximum residuals 0.00918628 Newton Step 4: Maximum residuals 0.020293 (ultimately gives up after 10 steps) whereas the corresponding code with last night's version (version197) gives Initial Maximum residuals 0.138562 Newton Step 1: Maximum residuals 0.0129997 Newton Step 2: Maximum residuals 3.12583e-06 Newton Step 3: Maximum residuals 1.41664e-12 Initial Maximum residuals 5.85581 Newton Step 1: Maximum residuals 0.0430254 Newton Step 2: Maximum residuals 1.31044e-06 Newton Step 3: Maximum residuals 5.6255e-13 About to leave for Barcelona and will ask Richard to investigate. ------------------------------------------------------------------------ r197 | mheil | 2011-07-13 15:11:57 +0100 (Wed, 13 Jul 2011) | 30 lines -- Added Richard's rewrite of block_preconditioner.h which uses sparsified storage for lookup rows. Adjusted Navier-Stokes Axisymmeric Navier-Stokes Spherical Navier-Stokes preconditoners accordingly. -- Added Richard's rewrite of the epetra matrix assembly routine for aztecoo -- hopefully this won't suffer from massive detirioration in parallel performance as the old somewhat "dense" version did. About to find out on hector... Default setting is to use the work-around. This can be altered using TrilinosAztecOOSolver::enable_aztecoo_workaround_for_epetra_matrix_setup() and TrilinosAztecOOSolver::disable_aztecoo_workaround_for_epetra_matrix_setup() NOTE: The rewritten version contains two possibly unnecessary sort operations which may be culled later. Am waiting for feedback from Richard. ------------------------------------------------------------------------ r196 | mheil | 2011-07-12 14:16:43 +0100 (Tue, 12 Jul 2011) | 4 lines Fixed some problems with the non-MPI version of the code (and a missing std::) ------------------------------------------------------------------------ r195 | mheil | 2011-07-11 09:01:42 +0100 (Mon, 11 Jul 2011) | 75 lines -- Added double zeta_nodal(const unsigned &n, const unsigned &k, const unsigned &i) const {return FaceElement::zeta_nodal(n,k,i);} to all specific FaceElements in the src -- this avoids the need to manually introduce this if the underlying bulk element is a SolidElement (in which case there is an ambiguity about which version of zeta_nodal is meant). -- Enabled switching off the membrane stresses in the KirchhoffLoveShellEquations via member function ignore_membrane_terms() -- Modified KirchhoffLoveShellEquations::get_strain_and_bend(...) so that it returns a pair of doubles, representing determinants of the underformed and deformed midplane metric tensors. -- Added new member function use_aztecoo_workaround_for_epetra_matrix_setup() to switch between the different versions of the epetra matrix assembly in TrilinosAztecOOSolver. -- Fixed problem with infinity norm in CRDoubleMatrix. It doesn't need a square root!!! Thanks for spotting this, Ray. Correction leads to very modest improvements for the pseudo-solid fsi beam and the pseudo-solid fsi collapsible tube, but a noticeable increase in iteration counts for the cough code. To be investigated. -- INTERFACE CHANGE: Changed Mesh::max_and_min_area(double& max_area, double& min_area) to Mesh::max_and_min_element_size(double& max_size, double& min_size) -- Added Jeremy's LineVisualiser class which allows the extraction of data along a line. This uses the new empty virtual function /// \short Virtual function to write the double precision numbers that /// appear in a single line of output into the data vector. Empty virtual, /// can be overloaded for specific elements; used e.g. by LineVisualiser. virtual void FiniteElement::point_output_data(const Vector &s, Vector& data) {} which is currently implemented for Navier Stokes elements. Add your own for other elements if you need the line extraction feature. -- Fixed a problem in MeshAsGeomObject -- it doesn't make any sense to re-generate the bin structure if the point to be found is outside the bin boundaries. The function should (and now does) return immediately with a Null pointer. -- Allowed the specification of a maximum search radius in MeshAsGeomObject. This is intialised to DBL_MAX and if overwritten using an access function, excludes bins whose vertices are further than that radius from the point to be located. Can lead to dramatic speedups in parallel computations where most points are not found. "Good choices" for the radius are to be investigated but should be of the order of the element size. Try it. The smaller the value the faster the search, but the more likely it is that points are not located because we haven't searched far enough... -- Added various functions to output bins (mainly used during development of the above functionality but they remain useful). ------------------------------------------------------------------------ r194 | ahazel | 2011-07-04 09:04:38 +0100 (Mon, 04 Jul 2011) | 2 lines And again, this time doing it properly. ------------------------------------------------------------------------ r193 | ahazel | 2011-07-04 09:01:21 +0100 (Mon, 04 Jul 2011) | 5 lines Small changes to Makefile.am to remove a macro that is not defined in earlier versions of automake. $(am__mv) has been replaced by mv -f, which is all the macro did anyway! ------------------------------------------------------------------------ r192 | mheil | 2011-07-02 11:43:36 +0100 (Sat, 02 Jul 2011) | 27 lines -- Adjusted restart machinery (and various directly or indirectly associated functions) to allow restart of parallel computations with larger number of processors. This does ocassionally require modification of user-specific restart functions (to sync data for processors that don't have any restart files -- they still need to be told about the relevant parameters; generic data is being read and synced automatically where needed (mainly time-stepping data). This is illustrated in demo_drivers/mpi/distribution/restart/ The basic process is to restart the computation on the desired number of processors. Following the execution of Problem::restart(...), the processors that don't have any restart data, have completely wiped their meshes (note that they also kill any halo elements that were marked as to-be-retained). The new processors can then get populated by a call to Problem::load_balance(...). (The Newton solver still goes on strike if it comes across processor without elements!) NOTE: There's no self-test for this capability since we perform all our self-tests with 2 processors. ------------------------------------------------------------------------ r191 | ahazel | 2011-07-01 17:27:46 +0100 (Fri, 01 Jul 2011) | 7 lines Fixed an array overrun when combining SphericalAdvectionDiffusion and SphericalNavierStokes and corrected the geometric_jacobian in the SphericalBuoyantNavierStokes elements. Also modified the validation case so that it runs a bit faster (fewer adaptations) ------------------------------------------------------------------------ r190 | ahazel | 2011-07-01 07:13:36 +0100 (Fri, 01 Jul 2011) | 6 lines Added a demo/validation for convection in an axisymmetric sphereical shell. This required actually including the body force in the SphericalNavierStokesEquations and a small interface change to allow it to be virtually over-ridden. ------------------------------------------------------------------------ r189 | ahazel | 2011-06-29 09:13:47 +0100 (Wed, 29 Jun 2011) | 6 lines Modifications to Makefile.am to suppress or reduce optimisation in tetgen and triangle to avoid mysterious segmentation faults. The level may need to go down further for tetgen.cxx, but -O2 was fine on my test machine. ------------------------------------------------------------------------ r188 | ahazel | 2011-06-28 17:22:24 +0100 (Tue, 28 Jun 2011) | 27 lines Check-in part-way through addition of 3D adaptive remeshing capability. A demo is included in navier_stokes that computes the flow past an icosahedron. Interfaces to tetgen have been written and tetgen 1.4.3 is now included in external_src. There is an odd segmentation fault that occurs when tetgen is compiled with full optimisation. The same is true for triangle, so the Makefile.am has been hacked in tetgen. It has not yet in triangle because I want to get this in, but expect a small update soon to remedy this. Wherever possible 2D (triangle) and 3D (tetgen) functionality has been harmonised and more efficient routines have been used to avoid excessive use of maps when building meshes from scaffolds and building the scaffold meshes themselves. Note that we have always required boundary information for nodes, but not said so. Now I'm saying so. Each boundary node must be supplied with an index that indicates one boundary on which it lies. New integration schemes have been added for the TCrouzeixRaviartElements to ensure full integration of the mass matrix. The enrichment of the 3D case to quartic functions (2D is cubic) requires a much higher-order integration scheme which slows things down a lot, but that's the price of accuracy. If validation data has changed, it has been updated. A few little fixes to include std::'s and other cross-complier issues have also been fixed. ------------------------------------------------------------------------ r187 | mheil | 2011-06-27 07:58:37 +0100 (Mon, 27 Jun 2011) | 9 lines -- Fixed a few serious mpi problems, detected on hector (overlapping send and receive buffers in a few comms) -- Adjusted trilinos build script so that it can build with "automatic" blas and lapack provision -- Added configure options for hector phase2b. ------------------------------------------------------------------------ r186 | mheil | 2011-06-23 09:20:32 +0100 (Thu, 23 Jun 2011) | 68 lines Slightly rushed check-in to transfer code to Nico. Wasn't able to run complete self tests. Will commit any fixes immediately if things turn out to be broken. -- Started tidy-up of fluid free surface elements: THIS IS STILL WORK IN PROGRESS AND I'M STILL IN CHARGE... -- Done all the actual free surface elements; the contact angle elements still need work. Fixed (in quick and dirty way) the driver codes in: demo_drivers/navier_stokes/three_d_free_surface demo_drivers/navier_stokes/three_d_bretherton demo_drivers/navier_stokes/three_d_static_cap demo_drivers/navier_stokes/single_layer_free_surface demo_drivers/navier_stokes/falling_jet demo_drivers/navier_stokes/inclined_plane demo_drivers/navier_stokes/adaptive_interface demo_drivers/navier_stokes/bretherton demo_drivers/navier_stokes/free_surface_rotation demo_drivers/navier_stokes/unstructured_adaptive_fs demo_drivers/navier_stokes/static_cap demo_drivers/navier_stokes/two_layer_interface demo_drivers/multi_physics/marangoni_convection demo_drivers/multi_physics/soluble_surfactant demo_drivers/multi_physics/insoluble_surfactant demo_drivers/multi_physics/thermal_fibre demo_drivers/axisym_navier_stokes/rayleigh_instability demo_drivers/axisym_navier_stokes/two_layer_interface_axisym demo_drivers/axisym_navier_stokes/fibre demo_drivers/axisym_navier_stokes/two_fluid_spherical_cap demo_drivers/axisym_navier_stokes/single_layer_free_surface_axisym demo_drivers/interaction/elastic_bretherton -- Started to move the volume constraint elements into src directory. Currently src/fluid_interface/constrained_volume_elements.h only contains versions for 1D boundaries of 2D cartesian Navier Stokes bulk elements. This file will gradually replace the fix_vol_axi_int_el.h and fix_vol_int_elastic_elements.h files that currently exist in various demo driver codes. Some of the latter are "optimised" as they don't require the presence of elements along non-free surfaces for the computation of the enclosed volume. Have changed this now and broken up the elements into "normal" free surface elements that simply apply the kinematic and dynamic boundary conditions, and separate elements that compute the volume and impose the volume constraint. Much easier to explain and not much overhead as they are one dimension lower. Nobody's forced to use them so if you worry about efficiency, use something like the customised fixed volume elements that Andrew provided. They are (and will remain) alive, but now spawn warnings from their constructors, encouraging their users to tidy them and move them to src. [It's still on my list to do this...] The new elements are used in the two (renamed) driver codes in demo_drivers/navier_stokes/unstructured_adaptive_fs which do the propagation of a bubble or a drop through a 2D channel. ------------------------------------------------------------------------ r185 | mheil | 2011-06-16 09:02:35 +0100 (Thu, 16 Jun 2011) | 29 lines -- Final (?) tidy of triangle meshes: -- By default, polygonal vertices that are located on a curved boundary (specified by a Curviline) are now distributed (approximately) equally spaced in terms of arclength along the associted geometric object. Can switch to equal spacing in zeta (which is not necessarily an arclength, by changing the setting of a default boolean argument in the constructor to the Curviline object. -- Changed setup_boundary_conditions so that original vertices retain their position. Meshes will have changed slightly but all self-test still pass (presumably because validation tends to be based on on norm of solution anyway). -- Tidied up the "bubble in channel" demo code demo_drivers/navier_stokes/unstructured_adaptive_fs/adaptive_fs.cc Its "drop in channel" counterpart in the same directory should be re-written in the same way (probably easiest done by copying the bubble version across and making the few changes that turn the bubble into a drop -- there's a huge amount of overlap between the two. ------------------------------------------------------------------------ r184 | mheil | 2011-06-12 10:25:41 +0100 (Sun, 12 Jun 2011) | 4 lines Ooos -- accidentally checked in with global timings enabled. Corrected now. ------------------------------------------------------------------------ r183 | mheil | 2011-06-11 08:17:08 +0100 (Sat, 11 Jun 2011) | 57 lines -- Massive rewrite of triangle mesh generation. There's now just a single constructor for any inline-generated triangle mesh (irrespective of boundaries being defined by polylines or curvilines). Also unified the various objects that define such boundaries. Demo codes have been updated to work with the new constructor and should show anybody else how to use it. Documentation yet to be written (allegedly by somebody who's promised to do this for years, but more likely by Nico). NOTE: One important change is that we now snap onto curvilinear boundaries immediately (i.e. in the mesh constructor). Currently this doesn't always give particularly nice looking elements near the curvilinear boundary if it the boundary highly curved or discretised with few elements. Am about to change this by rewriting TriangeMesh::setup_boundary_coordinates(). Watch this space. -- Given that some people (mac users!) have reported problems compiling the triangle sources, this can now be suppressed at configure time with --enable-suppress-triangle If specified, triangle (external) library isn't built and any triangle-related source code is bypassed with ifdefs, by omitting the compiler flag -DOOMPH_HAS_TRIANGLE_LIB If the oomph-lib is compiled without this compiler flag than refineable triangle meshes etc. "don't exist". -- Made TPoisson elements refineable by changing inheritance structure to virtual and adding Z2 error estimator capability. -- Removed a couple of stray "using namespace std" from Helmholtz sources. -- Problems involving refineable triangle meshes (or any others, in fact) don't have to inherit from ProjectionProblem (this must have propagated through from an old driver code before I tidied up Luigi's mesh projection machinery). Fixed this in a few demo driver codes. -- Fixed (non-existent) mpi self-test problem in resize hanging node test code by renaming the output directory (delay in parallel file system synchronisation caused RESLT directory to be empty.) -- Added a few more timings to Global_timings::Doc_comprehensive_timings -- Updated the default value of Multi_domain_functions::Percentage_offset to 5 (representing the intended 5% -- it was 0.05, oops). ------------------------------------------------------------------------ r182 | mheil | 2011-05-30 14:51:35 +0100 (Mon, 30 May 2011) | 71 lines -- Added demo_drivers/mpi/distribution/hanging_node_reconciliation a driver code that tests the reconciliation of hanging nodes on the very boundary of the a processor's halo region: If a haloed element that is next to a neither-halo-nor-haloed element on a given processor is refined while the neither-halo-nor-haloed element next to it is not, the processor that holds the correspning refined halo element will not realise that some of the nodes on its outermost element edge are hanging. This is spotted (and -- since the previous check-in -- rectified) in classify_halo_and_haloed_nodes(). This driver code checks that it works properly. This goes together with a tidy up of TreeBasedRefineableMeshBase::synchronise_hanging_nodes() which actually does the work. -- Fixed oversight (a.k.a. bug) in RefineableBrickMesh::setup_octree_forest() which caused problems in 3D pruning. (The code hadn't been updated in line with changes to 2D counterpart.) -- Added demo_drivers/mpi/distribution/prescribed_displ_lagr_mult/resize_hanging_node_tester.cc which tests Mesh::resize_halo_nodes() which fixes a similar problem to the one described above: If a FaceElement that introduces additional unknowns (e.g. Lagrange multipliers) to a neither-halo-nor-haloed bulk element that is right next to a haloed element on a given processor, one of the haloed nodes is resized (when the FaceElement is attached to the adjacent neither-halo-nor-haloed bulk element) while the halo nodes is not (because there's no adjacent bulk element on that processor). This is now reconciled by a call to Mesh::resize_halo_nodes() Since this function involves mpi-based communication, it can be suppressed (at the user's risk) by a call to Mesh::disable_resizing_of_halo_nodes() -- Fixed driver codes for adaptive and non-adaptive periodically loaded elastic strip (linear elasticity) and added new tutorials. (outcome of David Rutter's UG project -- THANKS!). The adaptive code tests periodic refineable nodes (to my satisfaction!) so I've now removed the warning that this functionality hasn't been tested. It's still not implemented for 3D elements, though. -- Fixed problem in multi-domain setup. Specifically, MeshAsGeomObject::get_min_and_max_coordinates() didn't actually use Multi_domain_functions::Percentage_offset to increase size of of the bin but used a hard-coded local variable. Ooops. Thanks to Jeremy for spotting this. -- Fixed discussion of periodic hanging nodes in Rayleigh channel. The make_periodic() function doesn't take a direction argument (any more -- hasn't for a long time, actually). Also added a forward reference to hanging counterpart in periodic strip linear elasticity tutorial. ------------------------------------------------------------------------ r181 | mheil | 2011-05-12 13:14:58 +0100 (Thu, 12 May 2011) | 79 lines Long overdue check-in after MH's cleanup/bug fixing/optimisation of much of oomph-lib's parallel machinery. -- Fixed/optimised load balancing and pruning for single and multiple meshes and added/modified driver codes to check the relevant functionality. Note that some of problems (e.g. in the classification of halo/haloed nodes) only occured when run with more than two processors. There's currently no test for this but suitable checks have been addded (in PARANOID mode) to trap the problem. adaptive_driven_cavity_load_balance.cc now has a considerable runtime because it absolutely destruct-tests the load balance/pruning machinery. -- Deleted the resetting of the refinement level to zero following problem distribution/load balancing. Not really sure why this was done anyway. Changed validata for the fish_poisson problem. RefineableMesh::uniform_refinement_level_when_pruned() now provides access to what it says. -- Removed Multi_domain_functions::Check_for_duplicates flag (which was never properly explained anywhere anyway), as it's no longer required following the move of various Multi_domain helper fcts into the Problem class where the relevant action is now performed by Problem::remove_duplicate_data() -- Fixed boundary enumeration problem in thin_layer_brick_on_tet_mesh.template.cc. The In_out_boundary_id container now stores what it says (it was full of duplicates earlier). -- const-ified Tree::OMEGA -- Added namespace Global_output_stream to oomph_definitions.* to facilitate debugging. Use at your own risk and only during debugging! -- Problem::distribute(), Problem::prune_halo_elements_and_nodes() and Problem::load_balance() now check that number of equations doesn't change during the action of these functions. -- Changed Base_mesh_element_number[] to Base_mesh_element_number_plus_one[] to allow zero entry to represent non-existing (removed) element. -- Fixed various problems where entries in sparse map External_halo_node_pt where visited by looping over number of entries rather than using an iterator. -- WARNING: In some mesh contexts I had to (temporarily) use the communicator defined in MPI_Helpers::Communicator_pt which is dangerous. Will fix this soon by giving the Mesh class its own communicator, to be assigned when the mesh is distributed. -- compiler flag ANNOTATE_MULTI_DOMAIN_COMMUNICATION allows (very costly) annotation of the sent/received flat-packed data that is sent during parallel multi-domain setup. -- Fixed OcTree::gteq_true_edge_neighbour() which overlooked edge neighbours in cases where more than four elements met along an edge (can -- and does! -- happen in brickified unstructured meshes) -- Added virtual Problem::debug_hook_fct() that can overloaded in driver codes to perform specific actions during debugging. -- Added stats to ring-based multi-domain search procedure to assess if spiral size was appropriate. -- Allowed option to pre-sort bin entries during multi-domain search procedure. -- Added additional constructor for DummyErrorEstimator that allows specification of rectangular/cubic box within which elements are to be refined. ------------------------------------------------------------------------ r180 | ahazel | 2011-04-27 16:40:42 +0100 (Wed, 27 Apr 2011) | 15 lines Included patches from Alexandre RACZYNSKI : to remove problems with include files and a wrong array dimension in AxisymmetricAdvectionDiffusion class (and removed some ^M's along the way). Also included changes to map nodes onto GeomObject boundaries after construction and remeshing, updating demo_drivers/navier_stokes/unstructure_adaptive_ALE to shift the history values for the prescribed motion of the geometric object. Fixed a missing newline in the dump for the Triangulate data structure. Made sure that the continuation solver respects the Always_take_one_newton_step flag. ------------------------------------------------------------------------ r179 | ahazel | 2011-03-09 13:51:58 +0000 (Wed, 09 Mar 2011) | 32 lines Modified jeffery_orbit test to use a global measure of the solution so that it should now pass even if the mesh varies between different processors. Included Patrick's revision to handle analytic calculation of shape derivatives ... this may still require some refactorisation/cleaning. Modified the triangle mesh so that it can now dump and restart and added test for this in navier_stokes/unstructured_fluid. This is not as tidy as I would like, but this revision must be checked in quickly because IMPORTANT: Added changes to static const member data to avoid a compiler bug(?) in gcc 4.4.4. Such member data of templated classes appears not to be initialised correctly. It will be assumed to be zero, which is an error. I have avoided majority of the problems by removing the static data where possible and using explicit instantiation elsewhere: template const double MyClass::Whatever = 1.0; is replaced by template<> const double MyClass<1>::Whatever = 1.0; template<> const double MyClass<2>::Whatever = 1.0; template<> const double MyClass<3>::Whatever = 1.0; ------------------------------------------------------------------------ r178 | mheil | 2011-01-10 11:36:52 +0000 (Mon, 10 Jan 2011) | 8 lines Check-in after rewrite/tidy of Andy's multi-domain stuff. [Still a few optimisations left: (1) Combining sends of various quantities in MPI data type; (2) sorting entries in bins before search.] Also tweaked tolerance in Andrew's unstructured torus validation to 5%. ------------------------------------------------------------------------ r177 | ahazel | 2011-01-07 16:12:16 +0000 (Fri, 07 Jan 2011) | 16 lines Changes to make the unstructured remeshing more robust (by removing the command switch "c" from the Triangle inputs) In addition, now only Nodes that were not on the original boundary are moved during the snapping phase for curvilinear boundaries. Attempted to make the new validation codes unstructured_torus.cc adaptive_fs.cc and adaptive_two_fluid.cc more robust by only testing integral measures of the solution. This is not ideal, but prevents problems caused by slightly different output from Triangle. These codes still need some tidying, but appear to be working well. Added a little function to create .poly files from Triangulateio data structure (useful for debugging) ------------------------------------------------------------------------ r176 | mheil | 2011-01-05 17:43:03 +0000 (Wed, 05 Jan 2011) | 45 lines Check-in after finally (?!) finishing off load balancing rewrite. Communication is now properly distributed rather than having everything dumped to and then rebroadcast from root. All annotated in great detail... NOTES: - Retained an obscure code segment that deals with FaceElements during the load balancing operation (at a point when I don't think that there should be any FaceElements left). I vaguely recall this being a massive issue in a much earlier stage of the rewrite. None of our tests use this bit of code but I've kept it in for future-proof-ness. If the code segment is executed, the message ================================================ INFO: I've come across a FaceElement while load-balancing a problem. ================================================ is displayed... - The code assumes (and, in paranoid mode, checks) that all leaf elements with a common root are re-distributed to the same processor. This is certainly the case for the two load balancing strategies (metis and fake) that we actually provide. However, the input still allows for a distinct target domain for each leaf. Could rewrite this to only specify a target domain for the roots but can't be bothered at the moment... - Finally managed to get rid of the awkward Problem::attach_and_detach_face_elements_with_new_dofs(); function. Resizing of nodes is now done automatically if FaceElements that require/utilize the extra storage have not yet been attached. The functionality is tested in the Lagrange-multiplier-based prescribed solid displacement problem. - Added reverse lookup scheme between base element numbers and pointers to Problem class. ------------------------------------------------------------------------ r175 | mheil | 2010-12-21 14:04:23 +0000 (Tue, 21 Dec 2010) | 5 lines Tidied away some more timings behind ifs based on Global_timings::Doc_comprehensive_timings ------------------------------------------------------------------------ r174 | mheil | 2010-12-20 18:28:50 +0000 (Mon, 20 Dec 2010) | 3 lines Added a few more (optional) timings. ------------------------------------------------------------------------ r173 | mheil | 2010-12-20 10:20:02 +0000 (Mon, 20 Dec 2010) | 3 lines Quick fix to bypass mpi call when mpi isn't setup... ------------------------------------------------------------------------ r172 | mheil | 2010-12-18 14:18:30 +0000 (Sat, 18 Dec 2010) | 44 lines -- created a new global namespace Global_string_for_annotation that allows storage of global vector of strings. Mainly used to facilitate passing annotation around the code in a cheap and dirty way. -- Fixed linear algebra distribution so that computation of first row doesn't overflow. -- Provided protected flag bool Problem::Doc_time_in_distribute to enable/disable timings in problem distribution (defaults to false). -- Temporarily (?) created namespace in oomph_definitions to store bool bool Global_timings::Doc_comprehensive_timings that allows brute force timings of all kinds of things that need careful profiling throughout the code. Can ultimately change this to a const bool which is set to false (currently used primarily during optimisations on hector). -- IMPORTANT: Reverted the generation of the trilinos matrix in TrilinosAztecOOSolver::solver_setup() to TrilinosEpetraHelpers::create_distributed_epetra_matrix() which creates an epetra matrix thjat does not always work with oomph-lib's enumeration. Richard has written an alternative, TrilinosAztecOOSolver::create_distributed_epetra_matrix_for_aztecoo() which gets the entries in the required order but totally and utterly kills trilinos' parallel performance. Need to look into this again. -- Fixed problem with omitted initialisation of max/min bin coordinates for mesh as geometric object. -- Added more detailed timings to LSC preconditioner (only activated if Doc_time is set to true). -- Total rewrite of Problem::copy_haloed_eqn_numbers_helper(...). ------------------------------------------------------------------------ r171 | ahazel | 2010-12-17 15:54:42 +0000 (Fri, 17 Dec 2010) | 12 lines Check-in before Christmas. Unstructured two-fluid stuff is basically working, but there is a funny problem which I suspect is to do with a tiny error in a point near 0 leading to a reversal of boundary coordinates. Added Axisymmetric Triangular Navier--Stokes elements: (semi-) validated unstructured_torus code (it looks plausible!) Completex adaptive_two_fluid.cc for a droplet moving through a pipe. ------------------------------------------------------------------------ r170 | mheil | 2010-12-16 18:49:57 +0000 (Thu, 16 Dec 2010) | 18 lines Quick check in for Hector (careful: Haven't run full self-tests!) -- Sorted out locate_zeta() clashes by providing a separate spiraling_locate_zeta() function in MeshAsGeomObject. -- Allowed for spiraling search to be performed over multiple spirals before spawning ring-like mpi search. Not tested yet it's about to go onto Hector. Number of spirals to be searched are specified by Multi_domain_functions::N_spiral_chunk which defaults to 1, replicating the previous behaviour. -- removed superfluous repetition/extension of Multi_domain_functions namespace in mesh_as_geometric_object.cc. ------------------------------------------------------------------------ r169 | mheil | 2010-12-15 18:29:50 +0000 (Wed, 15 Dec 2010) | 13 lines -- Removed unnecessary identification and storage of (pointers to) external elements and nodes in meshes. None of this is actually needed any more (if it ever was!) but it's very costly in parallel. -- Added warning to command line arguments namespace to indicate that a command line argument has not been recognised. -- Allowed individual refineable elements to over-rule their refinement with RefineableElement::refinement_is_enabled(). ------------------------------------------------------------------------ r168 | ahazel | 2010-12-09 14:38:12 +0000 (Thu, 09 Dec 2010) | 10 lines Modified the complex variables used in the Helmholtz and (time harmonic) linear elasticity elements to be compatibile with gcc 3.x, in which A.real() and A.imag() are read only. Also added additional functions to TCrouzeixRaviart elements to allow them to be used in refineable problems as in the additional driver adaptive_two_fluid.cc (which is still very much work in progress) ------------------------------------------------------------------------ r167 | ahazel | 2010-12-05 20:38:08 +0000 (Sun, 05 Dec 2010) | 3 lines Oops now also checked in the validata for the new TCrouzeixRaviart element tests ------------------------------------------------------------------------ r166 | ahazel | 2010-12-05 20:35:57 +0000 (Sun, 05 Dec 2010) | 13 lines Added Triangular and Tetrahedral Crouzeix Raviart type elements which required the creation of "BubbleEnriched" TElements. The appropriate triangle and tetgen build_from_scaffold functions have been modified to (hopefully) correctly handle the enriched elements. The elements should still be treated with a pinch of salt, but pass the initial sanity checks, so I wanted to get them into the repository. Note the jeffery_orbit test is failing because Triangle does not (always) produce exactly consistent output. ------------------------------------------------------------------------ r165 | ahazel | 2010-11-19 12:58:00 +0000 (Fri, 19 Nov 2010) | 28 lines A number of changes to include unstructured remeshing of problems involving free surfaces and curvilinear rigid bodies. This new functionality is tested in the jeffery_orbit (curvilinar rigid body) and unstructured_adaptive_fs (free surface) in the navier_stokes directory of the demo drivers and the unstructured_adaptive_ALH (polygonal rigid body) has changed, but the results remain the same. The documentation is not complete, but I want to make sure that this is checked in. There may also be some issues with validation because I have not ensured that the output from triangle is reproducible and robust ... yet. The key changes are: i) establishment of a separate RigidBodyElement class that solves the appropriate Newton laws for rigid bodies. ii) the creation of RigidBodyTriangleMeshPolygons which avoids the need to create any sub-geometric objects for each boundary. iii) the use of a scaled arclength coordinate that always ranges from [0,1] along each boundary. iv) storage of geometric objects that describe mesh boundaries in the TriangleMesh class. iv) the introduction of an additional snap_nodes_to_curvilinear_boundary() in RefineableTriangleMesh which ensures that after a remesh the nodes are moved onto the appropriate curvilinear boundary. Full validation and documentation should happen for the next check-in (I hope). ------------------------------------------------------------------------ r164 | mheil | 2010-11-16 17:48:43 +0000 (Tue, 16 Nov 2010) | 3 lines Added a few missing std:: to new boussinesq header files. (Check in from Novak's laptop). ------------------------------------------------------------------------ r163 | mheil | 2010-11-08 12:55:53 +0000 (Mon, 08 Nov 2010) | 16 lines -- Moved boussinesq header files from demo drivers to src/multi_physics. -- INTERFACE/NAME CHANGE: Changed the (hardcoded) multi-domain Boussinesq elements to doubly-templated versions so they work with any combination of advection-diffusion/Navier-Stokes. -- Problem::load_balance() continues to be work in progress. Temporary fix introduced to attach and detach face elements; also noticed/flagged up inconsistency in use of history vs. previous values. This will hopefully soon be tidied up in one almighty rewrite... -- Introduced tolerance (1e-12) into check of nodal positions in Mesh::check_halo_schemes(...). ------------------------------------------------------------------------ r162 | mheil | 2010-09-24 08:09:08 +0100 (Fri, 24 Sep 2010) | 12 lines Fixed problem with computation of inverse mass matrix in Navier-Stokes preconditioner that -- somewhat bizarrely only showed in pseudo-elastic collapsible tube code when run on four or more processors! Also checked in Richard's final version of the three parallel block preconditioner tutorials. Fixed a problem in setting TrilinosMLPrecondioner (smoothing factor is a double rather than an int). ------------------------------------------------------------------------ r161 | ahazel | 2010-09-14 16:55:00 +0100 (Tue, 14 Sep 2010) | 4 lines Corrected an error that caused failure when serial code was compiled and run with MPI enabled. Turns out that using MPI_Alltoall won't work, even if nothing is being sent! ------------------------------------------------------------------------ r160 | ahazel | 2010-09-14 13:53:50 +0100 (Tue, 14 Sep 2010) | 12 lines Tidied up some parallel communication in member function of the Problem class to use MPI_Alltoall rather than individual (blocking) MPI_Sends and MPI_Recvs. In addition to clarify the high-level algorithms virtual functions have been added to the Node and Elements to add and read the values and equation numbers in to global arrays for use in the MPI communication. Also added Patrick's test case for non-axisymmetric perturbations to an axisymmetric base flow. Fixed a few typos ------------------------------------------------------------------------ r159 | mheil | 2010-09-09 11:46:53 +0100 (Thu, 09 Sep 2010) | 11 lines -- Fixed problem with self-tests in adaptive, distributed restarts and updated the corresponding validata. -- Commented out use of mumps solver in distributed bifucation tracking self test -- added code that optionally outputs the submatrices in the Schur complement preconditioner (default false -- only used during (ongoing) debugging. ------------------------------------------------------------------------ r158 | mheil | 2010-09-01 13:36:13 +0100 (Wed, 01 Sep 2010) | 41 lines -- Added CRDoubleMatrix::sparse_indexed_output_with_offset() to output distributed sparse matrix with global row/colum indices. -- Added optional boolean flag, make_duplicate_of_mpi_comm_world, to MPI_Helpers::init(...). Defaults to true, replicating the original behaviour. If set to false, oomph-lib's communicator is MPI_COMM_WORLD itself, rather than a duplicate of it. Required by Mumps. -- Little tidy in SuperLU_preconditioner.h: Member solver is now called Solver (rather than solver). -- Added re-implementation of MumpsSolver -- currently called NewMumpsSolver -- based on C-structure to enable multiple instances (the fortran based implementation with its pools never seemed to work properly). Will remove old version and rename NewMumpsSolver to MumpsSolver when it's been tested on hector. -- WARNING: The massively increased default number of bins introduced in a previous revision causes enormous problems in codes where we create a large number of MeshAsGeomObjects with modest numbers of elements (greater than one). Will investigate this soon. If you run out of memory (or your code starts swapping as soon as you set up the Problem), set Multi_domain_functions::Nx_bin=10; Multi_domain_functions::Ny_bin=10; Multi_domain_functions::Nz_bin=10; say, in your driver code before multi domain stuff is first called. -- WARNING: Some of the load-balanced self-tests fail in a trivial way; small numbers of ints output to compare input to metis differ. Will look into this (but have to check in now to move stuff to hector). ------------------------------------------------------------------------ r157 | mheil | 2010-08-31 09:22:05 +0100 (Tue, 31 Aug 2010) | 25 lines -- included bifuraction tracking test codes into validation procedure. Pitchfork tracking can be extremely flaky (when done with SuperLU_dist; mumps is fine). This can cause the Newton method to run out of iterations. Am now catching this and accepting whatever comes out of the Newton iteration after the max number of iterations though a warning is, of course, still issued if the Newton method hasn't fully converged. Also had to relax the numerical zero in fpdiff. -- Final (?) tweaks to Luigi's code: Hierarchical refinement now really starts with uniform mesh whose elements have the size of the maximum target area. Also basing the current areas and angles on those of the actual mesh not its previous triangulation (which obviously fails to spot deterioritating angles). -- INTERFACE CHANGE: (from previous check-in) triangulateio struct renamed to TriangulateIO to make it consistent with oomph-lib naming conventions. (We never use either name when talking directly to triangle so we may as well choose something that suits us). ------------------------------------------------------------------------ r156 | mheil | 2010-08-24 17:17:57 +0100 (Tue, 24 Aug 2010) | 6 lines Rewrite of Mesh::distribute() to avoid O(N_elem^2) computational cost in weak scaling runs. Cost of mesh distribution should now scale like O(N_elem). About to check this out on hector to see if it's true... ------------------------------------------------------------------------ r155 | ahazel | 2010-08-23 09:32:00 +0100 (Mon, 23 Aug 2010) | 3 lines Tiny change to add interfaces that allow small perturbations to be added to zero diagnonal entries in the Trilinos::IFPACK::ILU preconditioner. ------------------------------------------------------------------------ r154 | mheil | 2010-08-20 10:39:20 +0100 (Fri, 20 Aug 2010) | 29 lines -- Changed the strategy for partitioning of distributed meshes. METIS now works with the dual graph of the trees (using the equation numbers of their constituent leaf elements); thus all leaves in a tree automatically get moved onto the same partition. This makes the "polling" during the load balancing (which created stupid partitionings and didn't really reflect the connectivity of the elements properly) unnecessary. NOTE: Partitioning vector for each element in a distributed mesh only contains the target domain for the non-halo elements! -- Changed the self-test strategy for load balancing. METIS is now bypassed in the partitioning routine (rather than directly in load_balance()) and if a trivial partitioning is created for validation purposes, the code outputs the (deterministic) input to METIS to disk. This means that we're only bypassing the one-and-only non-deterministic step in the computation while retaining full control over the relevant deterministic data. -- Fixed a few non-#ifdef-ed references to GeneralisedElement::is_halo() spotted by Rich. -- changed validata for unstructured adaptive ALE (Luigi's problem) as triangle is too flaky and generates slightly different meshes at different levels of optimisation. Validation is now based only on L2 norm of velocity field. ------------------------------------------------------------------------ r153 | mheil | 2010-08-18 07:36:18 +0100 (Wed, 18 Aug 2010) | 4 lines Fixed "mpi.h" problem on hector (actually a known bug in mpich) in time_harmonic_linear_elasticity_elements.h. ------------------------------------------------------------------------ r152 | mheil | 2010-08-17 14:41:34 +0100 (Tue, 17 Aug 2010) | 73 lines -- (partially) cleaned up load balancing routines and amended them so that restarts become possible. This is demonstrated in demo_drivers/mpi/distribution/restart NOTE: Load balancing still needs a fair amount of work -- all data is currently accumulated on root and then sent out again -- determining the new destination for root elements (and their associated leaves) via polling the leaves is stupid. METIS should operate on trees directly. Have had a minimal stab at that (there are currently two as yet virtually identical versions of the distributed partitioning routine). -- removed Problem::actions_before/after_load_balance(). They're not needed any more. Load balancing is essentially the same as distributing a problem so a call to actions_before/after_distribute() suffices. Adjusted load balanced Turek flag and driven cavity codes accordingly. -- Increased default number of 1D bins to 1000 to speed up locate_zeta procedures. This doesn't cost much in terms of storage UNLESS the problem involves LOTS of MeshAsGeomObject meshes as is the case in many unstructured FSI problems where each MeshAsGeomObject only contains a single element anyway. In this case the memory usage is prohibtive but the bins aren't required anyway. The code therefore now reduces the number of bins to one if a mesh only contains a single element. -- Broken up the RefineableMeshBase class into an actual base class and the derived class TreeBasedRefineableMeshBase which contains only the functionality required for meshes that do refinement via trees. All previously existing refineable meshes have now been reclassified as being derived from the TreeBasedRefineableMeshBase. -- Major tidy-up of Luigi's changes to the TriangleMesh classes that now allow (projection-based) adaptivity. Problem::adapt() works with tree and projection based meshes. -- Fixed a problem with the determination of the "lower left" node in the determination of boundary coordinates in triangle meshes. This node must always be a vertex node! -- Projection machinery has moved into src/generic as projection.h -- Practically all the mpi stuff used time_stepper_pt->nprev_values(); when time_stepper_pt->ntstorage(); should have been used. Only makes a difference for Newmark or adaptive BDF schemes. Now fixed everywhere. -- Added Mesh::max_and_min_area(...) and Mesh::nnon_halo_element() to mesh.h -- Promoted the TTaylorHood elements to become ElementWithZ2ErrorEstimator. -- Provided projectable version of Taylor Hood elements. -- New demo driver code for projection-based adaptivity in unstructured ALE problem (Luigi's problem). demo_drives/navier_stokes/unstructured_adaptive_ALE ------------------------------------------------------------------------ r151 | mheil | 2010-08-02 07:39:01 +0100 (Mon, 02 Aug 2010) | 3 lines Update to scattering driver code and tutorial ------------------------------------------------------------------------ r150 | mheil | 2010-07-30 16:13:10 +0100 (Fri, 30 Jul 2010) | 5 lines Tarak's final check in! Added power computation to Helmholtz bc elements, tidied up code and completed first draft for helmholtz tutorial. ------------------------------------------------------------------------ r149 | mheil | 2010-07-27 10:06:17 +0100 (Tue, 27 Jul 2010) | 5 lines Cleanup for Helmholtz elements and scattering driver code. Added Node::copied_node_pt() to get access to copied node. ------------------------------------------------------------------------ r148 | mheil | 2010-07-26 17:14:27 +0100 (Mon, 26 Jul 2010) | 5 lines Tarak's check in: Helmholtz elements and scattering demo code. Still needs a bit of work but in the interest of time we're checking this in now.... ------------------------------------------------------------------------ r147 | mheil | 2010-07-23 15:58:05 +0100 (Fri, 23 Jul 2010) | 15 lines -- Added test for restart from distributed problem (currently non-refineable, the refineable version is work in progress, lives in the same directory but isn't used in self-test yet; will be swapped over when it's done). -- Marked up a few potential memory leaks in src as identified by valgrind session with cough code. Don't really understand why there should be leaks but will have to have another look... -- Added doc directory for helmholtz and started scattering tutorial. ------------------------------------------------------------------------ r146 | mheil | 2010-07-23 09:40:44 +0100 (Fri, 23 Jul 2010) | 6 lines Modified the build machinery so that oomph-lib's wrappers to superlu and superlu_dist don't refer to superlu include files if the libraries are provided automatically (as on hector). ------------------------------------------------------------------------ r145 | mheil | 2010-07-17 14:40:08 +0100 (Sat, 17 Jul 2010) | 32 lines -- Distribution now works on hector! See config/configure_options/private_configure_options/hector_parallel -- Introduced configure flags --enable-suppress-oomph-metis --enable-suppress-oomph-parmetis --enable-suppress-oomph-superlu --enable-suppress-oomph-superlu_dist which suppress oomph-lib's own build of these libraries and therefore assumes that they are provided automatically by the compiler/linker (e.g. via petsc). We do NOT provide the option to specify their location explicitly as it's too unpredictable what the libraries are actually called on any specific machine (e.g. on hector...). -- Changed compiler macro HAVE_MUMPS to OOMPH_HAS_MUMPS for consistency. -- Deleted entire superlu_dist_2.0 sub-directory as we've now been compiling the library without it for a long time -- Major tidy up in config/configure.ac_scripts/start NOTE: Not able to run all self-tests on hector so plese regard this distribution as broken until convinced otherwise... ------------------------------------------------------------------------ r144 | mheil | 2010-07-16 12:55:38 +0100 (Fri, 16 Jul 2010) | 7 lines -- Added time-harmonic linear elasticity (no self-tests yet -- they will be moved from private/user_drivers/phil_helmholtz when ready...) -- Added output_fct(...) to linear elasticity elements ------------------------------------------------------------------------ r143 | mheil | 2010-07-14 11:46:11 +0100 (Wed, 14 Jul 2010) | 11 lines Latest Hector tweaks: -- allowed trilinos to be specified by compiler/linker, using the same "auto" construction as for blas and lapack. -- Changed HAVE_HYPRE and HAVE_TRILINOS to OOMPH_HAS_HYPRE and OOMPH_HAS_TRILINOS to avoid clashes with usage in trilinos 10.0.0. -- Added/moved a few more mpi.h includes ------------------------------------------------------------------------ r142 | mheil | 2010-07-13 11:15:20 +0100 (Tue, 13 Jul 2010) | 31 lines First round of tweaks from Hector, based on a stripped down version of the library (generic and poisson) -- Included/moved mpi.h in various files at the very beginning to avoid some odd (Cray-specific?) clash between macros that appear to used (for different purposes) in mpi.h and in some C++ headers. The suggested work-around was to include mpi.h before any C++ headers. Given that we include C++ headers in oomph-lib header files, there was no other way to ensure that mpi.h is the first to be included than to move it to the top of all the relevant files (including some that didn't actually use mpi). -- Added hector configure options for serial and paralle distribution -- Allowed blas and lapack libraries to specified automatically by the compiler/linker (as is the case on Hector) -- this is done by specifying the location of these libraries (required to avoid oomph-lib building/using its own copy) as "auto". -- Added new configure flag that enforces use of static C++ libraries (or something like that) during linking -- currently only required on Hector. ------------------------------------------------------------------------ r141 | mheil | 2010-07-10 11:31:29 +0100 (Sat, 10 Jul 2010) | 9 lines Stripped out a few more possibly double-countable Data objects from elements with external elements and added more diagnostics to help identification of repeated equation numbers (not that it has helped yet -- there's still an odd problem when I try to distribute the "cough" problem with displacement control...) ------------------------------------------------------------------------ r140 | mheil | 2010-07-06 13:26:59 +0100 (Tue, 06 Jul 2010) | 2 lines Further tweaks... ------------------------------------------------------------------------ r139 | mheil | 2010-07-06 12:16:43 +0100 (Tue, 06 Jul 2010) | 2 lines another update... ------------------------------------------------------------------------ r138 | mheil | 2010-07-06 09:52:06 +0100 (Tue, 06 Jul 2010) | 3 lines correction to strip_down.bash ------------------------------------------------------------------------ r137 | mheil | 2010-07-06 09:45:20 +0100 (Tue, 06 Jul 2010) | 7 lines -- Changed assessment of existence of validata in autogen.sh on file that remains present in stripped out version. -- Augmented strip out script to make and recover backups of overwritten files. ------------------------------------------------------------------------ r136 | mheil | 2010-07-06 09:14:24 +0100 (Tue, 06 Jul 2010) | 2 lines A few additional files for generation of stripped out version. ------------------------------------------------------------------------ r135 | mheil | 2010-07-06 08:15:22 +0100 (Tue, 06 Jul 2010) | 6 lines -- Fixed two include/std:: problems in oomph_utilities. -- Added machinery to produce stripped down version of the distribution (for test-installs on hector etc). ------------------------------------------------------------------------ r134 | mheil | 2010-07-05 20:44:34 +0100 (Mon, 05 Jul 2010) | 69 lines -- Major cleanup of linear elasticity: -- removed (commented out) pressure-based versions -- wall inertia is still missing; will be (re-)activated when complex version of the equations has been created. -- INTERFACE CHANGE: Changed arguments to constructor of Isotropic_elasticity_tensor to make it consistent with conventions elsewhere. Stresses in linear and nonlinear elasticity are now non-dimensionlised on Young's modulus and the only default argument to the constructor is the Poisson ratio nu. The second, optional argument represents the ratio of the material's actual Young's modulus to the value used to non-dimensionalise the stresses in the governing equations. Introduced temporary fix in the as-yet-not-documented linear elasticity demo codes to keep their validata intact. Same for mesh smoothing validata. -- INTERFACE CHANGE: Replaced specification of constant wall thickness with function that allows continuous variation of wall thickness in ThinLayerBrickOnTetMesh. -- Made CG solver in PseudoElasticPreconditioner exact by removing the statement that fixed the number of iterations to 4. This did actually cause problems in the cough problem -- preconditioning by a constant iteration Krylov subspace solver is not a constant preconditioner and the outer iteration really needs be done by GMRESR or FGMRES for this to work (though one can ocassionally get away with it...). -- Included (FD-ed) derivatives w.r.t. external Data into SolidTractionElements to make sure they work with displacement control. -- Introduced very clever (even if I say so myself) command line parsing machinery into CommandLineArgs namespace. Specifying flags and parameters (or all shapes and sizes) from the command line is now a total doddle. -- Disabled default reporting of synchronisation stats from Problem::assign_eqn_numbers() as it cluttered up the screen too much for big problems. Can always be re-enabled for debugging purposes. -- Changed dynamic casts to FiniteElements in METIS-based partitioning. We can partition meshes that contain GeneralisedElements. -- Bravely removed (commented out) the warning that multi-domain machinery isn't tested thoroughly for solid elements. -- Fixed major howler in TNavierStokesElements. IMPORTANT LESSON: ================= -------------------------------------------------------------- Classification of dofs in get_dof_numbers_for_unknowns(...) must *only* classify the dofs that the element itself is in charge of, and thus not include Data values that were created by re-sizing nodes, say !!!!! -------------------------------------------------------------- ------------------------------------------------------------------------ r133 | mheil | 2010-06-29 07:44:11 +0100 (Tue, 29 Jun 2010) | 6 lines Fixed a few problems with Luigi's code and updated some of the (out-of-date) function calls in mumps solver that were hidden behind PARANOID flags. ------------------------------------------------------------------------ r132 | mheil | 2010-06-27 16:03:06 +0100 (Sun, 27 Jun 2010) | 45 lines Luigi's check-in: -- Added lots of additional functionality to src/generic/triangle_mesh.* src/meshes/triangle_mesh.template.* that will (soon) allow adaptivity for these meshes. Still needs a final tidy up from Matthias... -- NOTE: src/generic/triangle_scaffold_mesh.cc had lots of clashes -- they appear to have been caused by additional line breaks that got the two versions completely out of sync (in svn's little mind anyway). We're commiting Luigi's version... Self tests pass... The various versions are still available in /home/lcolucci/clash_backup/ on the wulf. -- Added triangle as an oomph-lib accessible library in external_src/oomph_triangle -- Created ElementWithDragFunction to establish base class for elements that can exert a drag and torque on immersed objects. -- Created additional, DocInfo-free interface to Z2ErrorEstimator::get_element_errors(...) -- Renamed SolidTriangleMesh in demo_drivers/interaction/unstructured_fsi/unstructured_two_d_fsi.cc MySolidTriangleMesh after a class of that type was moved into triangle_mesh.template.* Still need to update this in the documentation. -- ifdef-ed away the explicit references to Hypre in interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc ------------------------------------------------------------------------ r131 | ahazel | 2010-06-24 19:29:43 +0100 (Thu, 24 Jun 2010) | 3 lines Corrected a few silly errors and added a this-> pointer to make the FPpreconditioner code compiler under gcc 3.4.6 ------------------------------------------------------------------------ r130 | ahazel | 2010-06-23 23:16:00 +0100 (Wed, 23 Jun 2010) | 18 lines Modified BlockPitchForkLinearSolver so that it works in distributed problems and with continuation. Note that the default parallel solver SuperLU_Dist does not handle the near-singular matrices as well as serial SuperLU. Thus, the Newton solver convergence degrades for the new parallel demo: track_pitch.cc. This problem can be remedied, by not using the Block decomposition or switching to the MUMPS solver. The mumps solver interface has been modified to be consistent with the latest LinearAlgebraDistribution changes. Other small changes have been made to allow the BlockPitchForkLinearSolver to work in parallel by adding Halo_dofs to the Problem (if needed) and modifying the get_derivative.. and get_hessian... functions to work on distributed problems. ------------------------------------------------------------------------ r129 | ahazel | 2010-06-20 23:38:49 +0100 (Sun, 20 Jun 2010) | 3 lines Little fixes to make new code work under INTEL and without #OOMPH_HAS_MPI ------------------------------------------------------------------------ r128 | ahazel | 2010-06-20 18:04:27 +0100 (Sun, 20 Jun 2010) | 20 lines Further through the parallelisation of bifurcation-tracking routines The pitchfork detection works in parallel in non-block mode for distributed problems and in block mode for non-distributed problems. The parallelisation has necessitated the introduction of a new class DoubleVectorWithHalo which are typically "problem level" vectors for which information on other processors is required to construct the augmented system used to detected the pitchfork. The setup of these structures required the introduction of a few other classes in the Problem, Mesh, Elements and Nodes to return the global equation numbers of all possible halo data. A synchronise function has also been added to the AssemblyHandler class and is called whenever synchronisation takes place within a newton step. It is used to synchronise "global data" such as the bifurcation parameter. Some small rewrites of bits of the problem have also been performed to use functions to calculate information that is required in a couple of different contexts. ------------------------------------------------------------------------ r127 | rmuddle | 2010-06-14 09:26:56 +0100 (Mon, 14 Jun 2010) | 39 lines src/generic/ + renamed the LinearAlgebraDistribution method is_distribution_built() as distribution_built() + made RefineablePseudoSolidNodeUpdateElement block preconditionable + modified Problem::partition_global_mesh(...) such that the METIS partitioning is only performed on one processor and result broadcasted to all + Added assorted comments to problem.h + fixed bug in BlockPreconditioner::block_setup(...) which affected the BlockPreconditioner::build_preconditioner_matrix(...) method when run in parallel + added PARANOID checks to TrilinosSolver::solve(...) and TrilinosSolver::resolve(...). Stopped TrilinosSolver document iterations when Doc_time==false + added OOMPH_HAS_MPI #ifdefs around distributed paranoid check in DummyErrorEstimator src/multi_physics + added PseudoElasticPreconditioner and PseudoElasticFSIPreconditioner doc/mpi + added three tutorials - Distributed Linear Algebra Infrastructure - (Distributed) Block Preconditioners - (Distributed) General Purpose Block Preconditioners demo_drivers/interaction/pseudo_solid_collapsible_tube + added pseudo-elastic preconditioning option to this demo driver demo_drivers/mpi/solver + added fsi_channel_with_leaflet driver and validata which is the counterpart to the (Distributed) Block Preconditioners tutorial + modified the airy_cantilever demo driver for the (Distributed) General Purpose Block Preconditioners tutorial demo_drivers/navier_stokes/schur_complement_preconditioner + increased iteration count tolerance in validate.sh. Exact solves (without trilinos or hypre) of subsidiary systems leads to significant decrease in iterations ------------------------------------------------------------------------ r126 | ahazel | 2010-06-12 10:15:30 +0100 (Sat, 12 Jun 2010) | 27 lines 1) Fixed a very nasty bug that arose as a consquence of the use of sets of pointers to assemble the elements adjacent to boundaries. This could lead to different orderings of the elements in FaceMeshes on different processors in parallel runs, which just messed everything up! Have changed brick_mesh.cc quad_mesh.cc line_mesh.cc triangle_mesh.cc and tet_mesh.cc to use vectors instead of sets in this assembly process. 2) Corrected a little bug in the size of the normal in post-processing for axisym_heat_sphere.cc and b_convection_sphere.cc so that these drivers now validate with PARANOID 3) Renamed lots of local variables and arguments to avoid shadowing the names of member functions in generic (not really necesary, but I was getting desparate when trying to track down the bug 1) 4) Removed all char filename[N] constructions in the core library and replaced by stringstreams and strings so that they should not overrun. 5) Added RANGE_CHECKING code to Node::is_hanging(i) and Node::hanging_pt(i) and tidied up the Node::resize() for hanging nodes so that it is a bit more efficient. 6) Removed a few small memory leaks in pseudo_solid_collapsible_tube.cc driver codes ------------------------------------------------------------------------ r125 | ahazel | 2010-06-01 17:48:16 +0100 (Tue, 01 Jun 2010) | 15 lines Modified the parallel assembly of the residuals vector so that they are distributed if the problem has been distributed. The distribution is the natural (element-based) distribution. Removed all fixed-with character arrays in the core library apart from those required in interfaces to third-party solvers. (Look at the HYPRE interface again) Added an additional demo_driver for Boussinesq convection in cylindrical polars. Renamed some Meshes so that they are Refineable (our standard wording) rather than Adaptive. ------------------------------------------------------------------------ r124 | mheil | 2010-05-28 08:34:10 +0100 (Fri, 28 May 2010) | 10 lines -- Created refineable solid version of BrickFromTetMesh. -- Took out doc of default distribution as it's called A LOT when setting up FSI problem with unstructured meshes (because of the huge number of separate FSI boundaries). Probably need to look into the efficiency (or rather lack thereof) at some point. ------------------------------------------------------------------------ r123 | mheil | 2010-05-26 18:23:45 +0100 (Wed, 26 May 2010) | 51 lines -- Created BrickFromTetMesh and its Solid/refineable counterparts. The mesh brickifies a tet mesh (containing 10-noded tets) and turns each tet into four 27-noded bricks. The mesh is built from an xda input file (for 10 noded tets); optionally it returns pointer to the (internally built) XdaTetMesh that is used as a scaffold. This is currently useful for the creation of an accompanying ThinLayerBrickOnTetMesh. Note: We should at some point create a distinct ThinLayerBrickMesh that erects itself on an existing brick mesh rather than having to go through the tet scaffold mesh... -- Changed XdaTetMesh so that it (1) enumerates faces as separate boundaries (lookup scheme between (collective) xda enumeration and oomph-lib "sub"-boundary numbers still exists to figure out what's what (2) always sets up boundary coordinates automatically. This change was required to allow the automatic building of "scaffold"-like tet mesh in its brickified counterpart. Also created SolidMesh version of the mesh. -- Created refineable and solid versions of ThinLayerBrickOnTetMesh. -- Added a new class, TFace, to Telements.h. A TFace is defined by its three vertex nodes, ordered lexicographically by their pointers. It allows an assessment if a TFace is located on a given mesh boundary (decision taken by set intersection of the nodes boundary information). -- Added a namespace BrickFromTetMeshHelper with tolerance for mismatch during brickification of tet meshes. -- Added DummyQElement class; used to interpolate local coordinates during construction of brickified tet meshes -- Added is_on_boundary(...) and is_boundary_edge() to Edge class. -- Fixed BrickMeshBase::setup_boundary_element_info(...) so that it correctly deals with the case when only an element's edge is located on a boundary. In that case the element is now deemed to NOT lie on the boundary (because fewer than four of its vertex nodes are located on the same boundary). This change means that the (ancient) warning referring to (presumably outdated) comments re problems with the intel compiler (in which this situation was diagnosed wrongly) can/are now no longer displayed. ------------------------------------------------------------------------ r122 | mheil | 2010-05-15 18:17:28 +0100 (Sat, 15 May 2010) | 41 lines -- Provided Mesh::scale_mesh(const double& factor) function that scales all nodal coordinates in a mesh by given factor. Overloaded in SolidMesh where it also re-assigns the Lagrangian coordinates. Removed various verbatim copies of this function from existing meshes. -- Specified FaceGeometries for TElements. -- Moved Edge class into mesh.h (was previously defined repeatedly in several unstructured meshes). -- Modified Z2ErrorEstimator so that division by zero is avoided when flux norm turns out to be zero. In this case we simply return the unnormalised error (most likely to be zero anyway...). -- Created more verbose error message and numerous diagnostic files to buffer the case when locate_zeta fails at a global level. -- Provided templated function Mesh::doc_boundary_coordinates(...) which automatically documents the boundary coordinates in a mesh. -- Provided MeshAsGeomObject::output_bins(...) to document contents of bin structure. -- Created XdaTetMesh which allows the construction of an oomph-lib tet mesh (containing ten-noded tets) from an xda input file. -- Created ThinLayerBrickOnTetMesh which allows the creation of a thin layer of brick elements on an existing tet-mesh -- mainly used for vmtk-based FSI. -- Removed the code surrounded by OOMPH_STORED_SHAPE_FUNCTIONS_VERBOSE in generic/stored_shape_function_elements.cc. Not sure why this was still in there after all these years... -- Added timestepper to construct_node functions in SimpleRectangularTriMesh. The absence of this was a serious howler! ------------------------------------------------------------------------ r121 | ahazel | 2010-05-13 21:03:22 +0100 (Thu, 13 May 2010) | 15 lines Added additional axisymmetric advection diffusion equations that solve the (unsteady) advection diffusion equations in cylindrical polar coordinates that are suitable for multi-physics problems. Added the appropriate additional functionality to axisymmetric navier stokes equations so that they can also be used in multi-physics problems. New demo driver that solves for the heat transfer past a sphere using both multi-field and multi-domain formalisms. The multi-physics elements include buoyancy terms so can be used to solve Boussinesq-type convection problems in axisymmetric geometries, ------------------------------------------------------------------------ r120 | ahazel | 2010-05-10 15:59:30 +0100 (Mon, 10 May 2010) | 8 lines Removed a number of Ctrl-M's from the drivers in the curved_pipe demo driver Added axisymmetric advection-diffusion equations in spherical polar coordinates and an "eluting sphere" demo_driver in Refineable and non-Refineable forms. ------------------------------------------------------------------------ r119 | ahazel | 2010-04-27 16:39:39 +0100 (Tue, 27 Apr 2010) | 10 lines Small changes to parallel assembly and refinability to correct a couple of oversights and to ensure that the parallel sparse assembly uses AssemblyHandlers correctly. The previous version of the code counted too many equations for each processor and correcting this lead to a couple of segmentation faults. Also corrected a seg fault that could occur when there are no halo elements to be refined or unrefined. ------------------------------------------------------------------------ r118 | mheil | 2010-04-21 08:00:41 +0100 (Wed, 21 Apr 2010) | 39 lines -- Fixed the message about deleting non-exisiting validation.log files (was generated in the top level validate.sh). -- Created a SolidTetMesh in tetgen_mesh.template.* Renamed the many copies thereof in various driver codes to avoid clashes. -- Created a new src directory mesh_smoothing which contains a single header file that contains the functors that can be used to smooth meshes whose boundary nodes have been moved. (Smoothing can be done by solving a Poisson equation, linear and nonlinear elasticity). -- Moved all the vmtk mesh generation and transfer to quadratic boundary codes to demo_drivers/meshing/quadratic_vmtk_tetgen which contains a script that illustrates how to create quadratic mesh information from a vmtk-generated *.vtp file. The driver code snap_mesh.cc then shows how to smooth the fluid and solid meshes in which the boundary nodes are snapped onto the quadratic boundaries. -- Cleaned up the demo_drivers/interaction/unsteady_vmtk_fsi directory. It now only contains the unsteady vmtk-based FSI code, using the quadratic-ified geometry. ------------------------------------------------------------------------ r117 | ahazel | 2010-04-20 15:07:47 +0100 (Tue, 20 Apr 2010) | 4 lines Modified mesh_as_geometric_object.cc and mesh_as_geometric_object.h to use loops over lagrangian coordinates rather than separate if's ------------------------------------------------------------------------ r116 | ahazel | 2010-04-19 07:46:28 +0100 (Mon, 19 Apr 2010) | 11 lines Modified MeshAsGeomObject so that it no longer requires any template parameters. The dimensions of the GeomObject are read out directly from the (Finite)Elements and Nodes of the Mesh (assuming that all the elements in the Mesh are of the same type, of course). This has simplified the interfaces in many driver codes and in the multi-domain functions because they no longer require the dimensions to be passed as template parameters. All self-tests still pass, but this should be carefully checked on distributions over more than two processors. ------------------------------------------------------------------------ r115 | ahazel | 2010-04-18 10:31:30 +0100 (Sun, 18 Apr 2010) | 11 lines Modified the problem distribution so that meshes of GeneralisedElements can also be distributed. This mainly involved changing Vectors of FiniteElements to GeneralisedElements and then casting where necessary. Also tidied up some of the multi_domain interaction code so that unnecessary function arguments were removed. All tests pass apart from pseudo_solid_collapsible_tube in mpi on my machine (same comment as last time) ------------------------------------------------------------------------ r114 | ahazel | 2010-04-14 18:07:12 +0100 (Wed, 14 Apr 2010) | 23 lines Started the process of parallelising bifurcation tracking and continuation. 1) Added functionality to allow the analytic computation of derivatives of the Jacobian (the hessian) and derivatives of the residuals with respect to parameter (tested in the new demo track_pitch.cc and in fold.cc). 2) Parallelised the arclength continuation routine so that it works with non-distributed problems. Modify to distributions next time. (tested in the new mpi/clamped_shell demo). Also modified/corrected the following: a) Nodes that have copied data can now copy all the values, rather than a single value! b) If a RHS vector with the wrong distribution is passed to parallel SuperLU it will be redistributed with a warning, rather than incorrectly computed. c) Updated documentation on inclined plane demo. d) Added a few std's that were broken in the last check in. Note that the test mpi/multi_domain/pseudo_solid_collapsible_tube fails with tolerance differences that are a little to large for my liking on my machine. This is still work in progress so left for now. ------------------------------------------------------------------------ r113 | mheil | 2010-04-13 17:54:55 +0100 (Tue, 13 Apr 2010) | 3 lines Fixed one dumb mistake and one fpdiff tolerance... ------------------------------------------------------------------------ r112 | mheil | 2010-04-13 13:41:22 +0100 (Tue, 13 Apr 2010) | 25 lines -- Added drag computation to NavierStokesSurfacePowerElement -- Removed the offensive couts from navier_stokes_elements.h -- Added check that halo and haloed elements are subject to the same refinement in refineable_mesh.cc. Without this check all hell breaks lose if someone (me!) is dumb enough to accidentally specify inconsistent refinement patterns on different processors... -- Created DummyErrorEstimator which allows the specification of regions that are to be refined via the extreme coordinates of specified elements in a reference mesh. -- Extended Mesh::node_update() so that auxiliary node update function is also performed for external halo nodes. Important for distributed FSI problems. -- Added self-test for distributed Lagrange-multiplier-based prescribed displacement problem in 3D. -- Added self-test for distributed pseudo-elastic collapsible tube. ------------------------------------------------------------------------ r111 | mheil | 2010-03-30 13:55:48 +0100 (Tue, 30 Mar 2010) | 126 lines NEW SOURCE STUFF ================ -- Provided SuperLU_dist version 2.3. Old version is still available but new one seems to fix the problem with non-convergent Newton solvers for some problems. -- TetgenMesh: Removed some ridiculous inefficiencies that made the creation of the mesh from the scaffold mesh an O(N^2) operation. Added new member function that allows snapping of mid-edge nodes to quadratic boundary representation generated by xda_to_poly_fsi.cc. Still needs proper documentation... -- TriangleMesh: Fixed problem that didn't correctly associate nodes on multiple boundaries with all those boundaries. Turns out that the Navier-Stokes test code did in fact suffer from that. Updated the validata accordingly. -- PseudoSolid elements: Provided default zero density (Lambda_sq) for pseudo-solid part, so it doesn't have to be specified manually. Also provided refineable version for identify_geometric_data(...) -- RefineableSolidElements: Filled the previously broken functions ngeom_data() and geom_data_pt(...), and provided identify_geometric_data(...) all with hanging nodes properly taken into account. -- Provided refineable versions of -- SolidTractionElement -- FSISolidTractionElement -- ImposeDisplacementByLagrangeMultiplierElement They are tested in new demo drivers. -- Resizing Nodes now resizes HangInfo too! -- FSIDiagHermiteShellElement: removed old locate_zeta(...) -- Backward step mesh: Added to meshes directory -- Navier Stokes elements: Added functions required to compute pressure advection diffusion matrices. -- Navier Stokes preconditoners: Added NavierStokesSchurComplementPreconditioner which contains LSC and PCD preconditioners. -- Navier Stokes traction elements: Implemented proper refineable version. -- Black box Newton solver: Added steplength control to make globally convergent. -- problem.cc: Replaced a few direct references to element member functions by assembly handlers. Left Andrew's DG stuff alone, but marked up two questionable bits of code with "hierher" -- Added a mesh-level function that allows checking for inverted elements. NEW DEMO DRIVER CODES ===================== -- demo_drivers/interaction/pseudo_solid_collapsible_tube: Richard's 3D collapsible tube with solid wall mesh. Some random refinement applied in both meshes to test things out. -- demo_drivers/interaction/unsteady_vmtk_fsi: -- Unsteady simulation of pulse wave propagation in iliac artery -- conversion of FSI meshes to quadratic surface (test mesh is OK in bulk but inverted near one of the surface Gauss points where the fluid traction is evaluated!) -- Subdirectory vmtk_files contains script that converts vtk files into tetgen files. -- demo_drivers/solid/three_d_traction: Test refineable and non-refineable 3D solid traction. -- demo_drivers/navier_stokes/schur_complement_preconditioner 2D and 3D tests for Fp/PSC preconditioner on structured and unstructured meshes. ------------------------------------------------------------------------ r110 | rmuddle | 2010-03-19 18:12:21 +0000 (Fri, 19 Mar 2010) | 6 lines Merged Andy's (Gait) fixes for distributed pseudo-elastic fsi problems with the my modifications in version 109. Three src/generic files updated: problem.cc, multi_domain.cc, multi_domain.template.cc. Reverted user_drivers.dir list. ------------------------------------------------------------------------ r109 | rmuddle | 2010-03-10 11:35:47 +0000 (Wed, 10 Mar 2010) | 109 lines DistributableLinearAlgebraObject ================================ + Made LinearAlgebraDistribution member data private to hide implementation from derived classed. + Read access to the distribution is through the public interface: DistributableLinearAlgebraObject::distribution_pt() + Write access to the distribution is now only possible through: DistributableLinearAlgebraObject::build_distribution(...) DistributableLinearAlgebraObject::clear_distribution(...) protected interfaces. LinearAlgrbraDistribution, DistributableLinearAlgebraObject, DoubleVector, CRDoubleMatrix ============================================================ Standardised method naming across all classes. All these classes have methods which allow them to be reconstructed, previously these methods had different names in different classes - e.g. setup(...), build(...), rebuild(...). All are now all called build(...). (Agreed at oomph-lunch some-time ago) Same applies to object to return state of object, all such methods are now called built(). Updated all class necessary affected by this. BlockPreconditioner =================== Fixed bug in block_setup(...) Incorrect data being created for parallel usage of: get_block_ordered_preconditioner_vector(...) return_block_ordered_preconditioner_vector(...) DoubleVector ============ Fixed const-ness of some methods and return arguments. MPI_Helper ========== Currently namespace. Made class with static methods. This allows implementation to be hidden. Instantiation prevented with private constructors. Problem ======= Bug in parallel usage of oomph::GMRES caused by error in get_jacobian(...). get_jacobian(...) was not returning the jacobian and residual with the user defined distribution when required. TrilinosEpetraHelpers ===================== + Renamed to reflect usage. (Formerly TrilinosHelpers) + Significant refactoring interfaces to simplify. Code tidied. TrilinosAztecOOSolver, TrilinosPreconditionerBase and MatrixVectorProduct updated. + Added matrix creation method for AztecOOSolver. AztecOOSolver requires a non-standard column ordering of data in Epetra_CrsMatrix. TrilinosAztecOOSolver ===================== Fixed error which caused solver to fail for certain matrices (e.g. QCroizieuxRaviart Navier Stokes). AztecOO requires data associated with off processor column indices to be after on processor data. MatrixVectorProduct =================== Tidied - refactored and removed old commented out code. Updates due to changes to TrilinosEpetraHelpers. DoubleMatrixBase ================ Made multiply(...) methods const, and updated derived classes. CRDoubleMatrix ============== Added functional copy constructor. Required by MatrixVectorProduct Reduced Demo Driver fpdiff Tolerance ==================================== demo_drivers/bifurcation_tracking/hopf.cc demo_drivers/navier_stokes/inclined_plane ------------------------------------------------------------------------ r108 | phurley | 2010-02-04 17:18:50 +0000 (Thu, 04 Feb 2010) | 20 lines Patrick's first check in. Main highlights are: 1. 1D refineable elements and a test Poisson problem, including a fix so that 1D line mesh can contain a single element. 2. Fixing an error when timestepping in conjunction with spatial adaptivity without overloading the set_initial_conditions() function. In the previous version, this would lead to the first converged (coarse) solution being shifted back, which would, of course, give rubbish previous solutions. 3. Two new demo codes for single and two-layer interface problems in axisymmetric geometry, validated against analytic solutions. 4. Documentation for "spin up" problems and non-axisymmetric free surface problems. 5. Fixed various typos in other documentation. 6. Modified an inconsistency in the definition of the body force term in axisymmetric navier stokes equations compared to the Cartesian formulation. ------------------------------------------------------------------------ r107 | ahazel | 2009-12-22 14:43:36 +0000 (Tue, 22 Dec 2009) | 10 lines Added new demo that describes the flow of a fluid film down an inclined plane using elastic and spine-based formulations with documentation. Corrected little bug in adaptive_interface.cc in which the Capillary number was not passed to one of the elements (didn't matter because that contribution) was hijacked. Minor precision changes so that new rayleigh_instability test passes. ------------------------------------------------------------------------ r106 | mheil | 2009-12-19 15:52:52 +0000 (Sat, 19 Dec 2009) | 30 lines Francisco's commit before he leaves for Spain. Many of the new features still need some tidying up but all new functionality comes with self-tests. -- Added new library for steady axisymmetric advection diffusion equations -- no refineability yet (I think). -- Modified axisymmetric Navier-Stokes elements so that viscosity ratio can be specified by user-specified function (or, in multi-physics problems, come from some another process). TO DO: Still need to finalise the relation of the current (scalar, constant) viscosity ratio to the newly introduced function? Once decided, we'll have to make this consistent across all Navier Stokes elements. Should one replace the other? -- Provided spine mesh suitable for simulation of axisymmetric threads/fibres/ jets of fluids with free surfaces. -- Provided demo driver codes for Rayleigh Plateau instability and the steady flow of an axisymmetric fibre emerging from a nozzle. -- Demo driver code to validate steady axisymmetric advection diffusion with Robin boundary conditions. -- Demo driver for coupled thermo-fluids problem: Viscous jet/thread emerges from a nozzle and cools. Temperature affects the viscosity while the velocity profile affects the temperature distribution. ------------------------------------------------------------------------ r105 | ahazel | 2009-11-03 09:40:44 +0000 (Tue, 03 Nov 2009) | 13 lines Added fill_in_contribution_to_jacobian_and_mass_matrix() to the PVDEquationsWithPressure so that bifurcations can be detected and eigenproblems can be solved for solid mechanics elements. Reformulated the calculation of the Jacobian of solid elements so that the remaining finite-differencing of the constitutive law is handled by the constitutive law and can be overloaded so that a completely analytic Jacobain can be calculated. The default implementation is still finite differences. Also added some slight optimisations so that the calculation is a little bit faster and uses a bit less storage. ------------------------------------------------------------------------ r104 | ahazel | 2009-10-06 20:38:14 +0100 (Tue, 06 Oct 2009) | 13 lines Unrefinement across a periodic boundary that lead to a periodic hanging node was broken in the case when the "original" node was deleted. The clear_copied_pointers() function in BoundaryNode has been modified so that rather than clearing the pointers, new memory is allocated and the values copied over; i.e. a shallow copy is turned into a deep copy before deleting the original. In addition, the "pointer to a pointer" storage scheme for equation numbers in Data is not needed any more because periodic nodes are handled by a simpler approach. Periodicity in Solid Mechanics is enforced by Lagrange multipliers. The Data storage scheme has been changed to a single pointer to equation numbers, saving a pointer per degree of freedom. ------------------------------------------------------------------------ r103 | ahazel | 2009-09-18 17:11:51 +0100 (Fri, 18 Sep 2009) | 12 lines Added new pressure-displacement formulation of Solid mechanics for triangular elements and a couple of tests/demos. Added a full-circle domain and mesh and an associated demo. Added LSC preconditioner for AxisymmNavierStokes (Note all NavierStokes preconditioners should inherit from a common base) Updated SolidElements to correctly identify their geometric data. ------------------------------------------------------------------------ r102 | mheil | 2009-09-17 08:08:09 +0100 (Thu, 17 Sep 2009) | 15 lines -- Added the option to have non-uniformly axial spacing of the elements in the CircularCylindricalShellMesh -- Added function to compute strain and bending tensors in shell elements. -- Provided const versions of various access functions in DocInfo -- Provided SolidFiniteElement::interpolated_dxids(...) -- Updated bin/Makefile.am so that output from mpi tester is removed during cleanup. ------------------------------------------------------------------------ r101 | mheil | 2009-09-08 08:39:08 +0100 (Tue, 08 Sep 2009) | 51 lines -- Fiddled with a few fpdiff tolerances to make tests pass on laptop in paranoid mode. -- PROBLEM/BUG: demo_drivers/mpi/multi_domain/fsi_collapsible_channel/fsi_collapsible_channel_adapt.cc Newton solver diverges but only in paranoid mode and only on my laptop with gcc4.3.3. Not sure what's going on there... -- Defined zeta_nodal(...) in NavierStokesSurfacePowerElements to make it work when used with pseudo-solid Navier Stokes elements. -- Modified the ImposeParallelOutflowElements so that a null pointer for the imposed pressure is interpreted as a zero pressure. -- Fixed serious bug in Problem::recompute_load_balanced_assembly(...). Now the load balancing for the Jacobian assembly is perfect again for non-distributed problems. -- Made name of final default argument in GeomObject::locate_zeta(...) consistent throughout the library. It's now called use_coordinate_as_initial_guess throughout to avoid confusion. Related to this: It's important that all locate_zeta(...) functions for GeomObjects that are defined in driver codes are modified to include the default argument, otherwise the wrong version will be used (this can result in loss of "sparsification" for problems with algebraic node updates and lead to enormous increases in cpu time). -- Provided local_coord_is_valid(...) functions for HermiteElements. -- Commented out the "manual" compilation instructions in the face test codes in self_test/poisson/face_tests as they caused nasty seg faults. This is because the PARANOID flag wasn't passed through. NOTE: It is dangerous to use PARANOID when compiling the library and to omit it when compiling driver codes (or vice versa) as the FaceElements contain additional variables that are only used when compiled with PARANOID on. Using inconsistent compiler flags leads to different memory layout with obvious disastrous consequences. -- Fixed a number of latex problems in doc/unsteady_heat/two_d_unsteady_heat_adapt that stopped the documentation being produced with some versions of doxygen. ------------------------------------------------------------------------ r100 | agait | 2009-08-28 18:39:43 +0100 (Fri, 28 Aug 2009) | 21 lines - Minor check-in + Small modification so that the library compiles using the (default) intel compiler (with MPI) on horace (included map.h in problem.h) + Updated configure_options for horace - see config/configure_options/horace_with_mpi_self_tests. I have managed to build a parallel version that runs jobs fine in serial but breaks down during Problem::parallel_sparse_assemble(..) in parallel jobs - I've left this with Richard as he knows more about that routine than I do. I've also installed Trilinos (9.0.2) on horace, but not Hypre - the build procedure failed with an internal compiler error that I don't understand... + Added private/user_drivers/andy_paper - this is a slimmed-down version of private/user_drivers/andy that contains only the code and scripts that we plan to use in production runs for an upcoming paper. See the private svn log for more details. ------------------------------------------------------------------------ r99 | agait | 2009-08-26 17:10:38 +0100 (Wed, 26 Aug 2009) | 63 lines - Check-in of Problem::load_balance(...) routines + Interface: problem.load_balance(), with the option of a DocInfo object and a report_stats flag. + The user must supply the function build_mesh(), which must build all meshes involved in the problem, assign boundary conditions, complete the build of all elements, and call build_global_mesh() if required. + The load balancing works by considering the partition graph of all elements in the current distributed "old" mesh, and deciding which root elements should be on each processor given a simple polling of all their leaves; once this partition is calculated, a new mesh is created (using the build_mesh() function) and distributed, and then refined according to the same global refinement pattern as the "old" mesh. Finally the solution is transferred from the "old" mesh to the "new" mesh. + The functions actions_before_load_balance() and actions_after_load_balance() are also available to the user, and these typically perform the same functionality as actions_before_distribute() and actions_after_adapt() respectively, since the load balance method involves calls to both the distribute(...) routine and the refine_base_mesh(...) routine. + Helper routines for the load_balance() procedure can be found in both partitioning.cc and problem.cc. + demo_drivers/mpi/distribution/adaptive_driven_cavity/adaptive_driven_cavity_load_balance.cc added, and documented at doc/mpi/adaptive_driven_cavity_load_balance/ + demo_drivers/mpi/multi_domain/turek_flag/turek_flag_load_balance.cc added, and short outline documented at the end of doc/mpi/turek_flag/turek_flag.txt + In order to bypass METIS during load balancing when running in validation, set Problem::use_default_partition_in_load_balance()=true + Further examples of using load_balance() can be found in private/user_drivers/andy - andy_convection.cc, 3d_ref_b_convect.cc, fsi_osc_ring.cc - A bug fix + Now a mesh's external (halo) elements are flushed even if it is not refined during an adaptive Newton step, as this was causing an error in the Turek flag problem when it was run beyond the number of timesteps the validation run uses: the error occurred when the solid mesh refined, but the fluid mesh did not! - Another small change + The refinement level of the root elements on each processor following a call to Problem::distribute() is now re-set to zero (previously the value stored was related to the coarsest base mesh). This required a change to the validata for the adaptive refinement tests in demo_drivers/mpi/distribution/fish_poisson, as this had a direct effect on elements no longer being over-ruled for refinement when their refinement level exceeded the predefined maximum value. ------------------------------------------------------------------------ r98 | mheil | 2009-08-13 17:42:17 +0100 (Thu, 13 Aug 2009) | 2 lines Corrected the release date in doc.txt ------------------------------------------------------------------------ r97 | mheil | 2009-08-13 16:57:58 +0100 (Thu, 13 Aug 2009) | 4 lines First bug fix: create_fluid_and_solid_surface_mesh_from_fluid_xda_mesh.cc needs on some compilers. ------------------------------------------------------------------------ r96 | mheil | 2009-08-13 12:01:20 +0100 (Thu, 13 Aug 2009) | 6 lines The release version -- at last! A few final tweaks to the change log and an update to the list of operating systems that we've successfully installed oomph-lib under. ------------------------------------------------------------------------ r95 | mheil | 2009-08-10 20:21:26 +0100 (Mon, 10 Aug 2009) | 4 lines Removed two references to fenv.h since bloody cygwin doesn't provide it, causing the self-tests to die. Here we go again... ------------------------------------------------------------------------ r94 | mheil | 2009-08-10 08:26:34 +0100 (Mon, 10 Aug 2009) | 8 lines Removed all references to oomph-lib libraries from create_fluid_and_solid_surface_mesh_from_fluid_xda_mesh.cc so it can be installed even before the oomph-lib libraries are installed themselves. ------------------------------------------------------------------------ r93 | mheil | 2009-08-09 15:20:40 +0100 (Sun, 09 Aug 2009) | 11 lines -- Following complaints for the apple mafia, replaced all "echo -n" and "echo -e" with equivalent prinft constructs. -- Defined pi again in orthpoly.h as reference to the definition in MathematicalConstants namespace appeared to cause problems on macs (again!) These changes should ensure that the distribution works (and can be rebuilt) for Mac OS 10.5 (Leopard) ------------------------------------------------------------------------ r92 | mheil | 2009-08-08 13:59:43 +0100 (Sat, 08 Aug 2009) | 7 lines Adjusted customise_dist.sh so that symbolic links (created when rebuilding the autotool helper scripts after stripping out parts of the distribution) get replaced by the files themselves. ------------------------------------------------------------------------ r91 | mheil | 2009-08-08 11:58:19 +0100 (Sat, 08 Aug 2009) | 3 lines make_all_distributions didn't use the correct tar files. ------------------------------------------------------------------------ r90 | mheil | 2009-08-08 07:42:42 +0100 (Sat, 08 Aug 2009) | 3 lines yet another tweak to the self-test scripts. ------------------------------------------------------------------------ r89 | mheil | 2009-08-07 19:08:47 +0100 (Fri, 07 Aug 2009) | 5 lines Fixed a few problems in the makefile/self-test machinery that only showed up in the distributions without validata. Also updated an out-of-date version number in autogen.sh ------------------------------------------------------------------------ r88 | mheil | 2009-08-07 15:56:18 +0100 (Fri, 07 Aug 2009) | 21 lines The release candidate for version 0.90! Fixed all kinds of broken links etc in the documentation. These were picked up by the scripts bin/find_missing_doxygen_hooks.sh and bin/check_oomph-lib_links.bash All seems to be OK. Will make the test tar files from this revision and let the beta testers lose on it... Unless we find any problems (fingers crossed!) the only change required for the release is to update the list of OSs on which we've successfully installed the distribution. ------------------------------------------------------------------------ r87 | mheil | 2009-08-06 18:15:06 +0100 (Thu, 06 Aug 2009) | 16 lines -- Completed vmtk fsi tutorial, accompanied by further slight adjustments to both driver codes to minimise differences. Andrew's comments on the the latest rewrite are still pending (and may never come as he'll soon have more important things to do...) but it's basically ready to go. -- Cached the first_index_... variable in the two FaceElements that use it. -- Ripped out figures that weren't used any more in vmtk tutorial -- Tweaked lots of tutorials a bit and added a few more interface changes to change log (not sure how they slipped through). ------------------------------------------------------------------------ r86 | ahazel | 2009-08-06 10:44:00 +0100 (Thu, 06 Aug 2009) | 8 lines Modified the unstructured_three_d_fsi and vmtk_fsi codes so that they are as similar as possible and updated the documentation accordingly. Updated orthpoly.h to avoid a nasty little bug on the Mac in which the L used in the definition pi caused all sorts of problems in the 1d_dg.cc code (why? who knows?) ------------------------------------------------------------------------ r85 | mheil | 2009-08-05 18:46:32 +0100 (Wed, 05 Aug 2009) | 4 lines Sorry -- somehow a corrupted configure options file got smuggled into the repository... ------------------------------------------------------------------------ r84 | mheil | 2009-08-05 18:38:32 +0100 (Wed, 05 Aug 2009) | 11 lines -- Wrote first half of vmtk fsi tutorial showing the results and discussing the FaceElement story. Andrew's discussion of the driver code to slot in there... (Stripped out the superfluous files too.) -- Moved announcement of number of elements to be binned into Doc_stats block. -- Fixed a few typos in boussinesq tutorial (Thanks Patrick!) ------------------------------------------------------------------------ r83 | rmuddle | 2009-08-05 15:31:04 +0100 (Wed, 05 Aug 2009) | 3 lines fixed static object communicator bug ------------------------------------------------------------------------ r82 | ahazel | 2009-08-04 23:44:58 +0100 (Tue, 04 Aug 2009) | 2 lines More modifications to documentation for unstructured-mesh-based problems. ------------------------------------------------------------------------ r81 | ahazel | 2009-08-04 18:57:45 +0100 (Tue, 04 Aug 2009) | 5 lines Updated various bits of documentation concerned with unstructured FSI and related single-physics problems. This involved a few tweaks in the associated source codes and the removal of the unused unstructured_three_d_fsi_for_doc.cc file. ------------------------------------------------------------------------ r80 | mheil | 2009-08-04 15:57:38 +0100 (Tue, 04 Aug 2009) | 42 lines INTERFACE CHANGE (internal; does not have to be communicated to the outside world) Amine's original construction (*bnod_pt->first_face_element_value_pt())[PARALL_FLOW_ID] was replaced by a (renamed) access function bnod_pt->index_of_first_value_assigned_by_face_element(); which takes an optional unsigned argument that allows the specification of what face element type we're dealing with. If none is provided it's assumed that we're dealing with the one-and-only one. I've retained the (consistently renamed) pointer-based direct interface to the map as that has to be created in the FaceElement class. -- Added "sleep 5" commands between the creation of result directories and the execution of parallel driver codes in the relevant validate.sh scripts to allow parallel file systems to synchronise themselves... -- Wrote tutorials for the VMTK (single physics) fluid and solid codes and adjusted the associated driver codes. -- Updated the example code list, and list of unstructured meshes to make reference to the new vmtk tutorials (incl the fsi one that still needs to be written) -- Added references to vmtk stuff and the parallel outflow elements to the change log. -- Added shell script to bin to check broken internal links in the documentation. -- Added minimal mpi self test to svn (this is possibly asking for trouble -- hasn't it been added before? Possibly from another machine? We'll see when we commit...) ------------------------------------------------------------------------ r79 | mheil | 2009-08-04 09:29:32 +0100 (Tue, 04 Aug 2009) | 16 lines -- Updated licence information etc. to version 0.90 -- removed EXTRA_DIST variable from Makefile.am in Rayleigh traction channel -- Added Minimum_dt_but_still_proceed to Problem class. It's initalised to -1.0 (and hence ignored). If set to a positive number it specifies the minimum timestep that'll be used during adaptive timestepping, while allowing the computation to proceed (accepting that the desired accuracy cannot be reached -- a warning is issued). This is different from the role of the (existing) parameter Minimum_dt (initialised to 1.0e-12): If dt falls below this value the computation stops. ------------------------------------------------------------------------ r78 | ahazel | 2009-08-03 16:23:46 +0100 (Mon, 03 Aug 2009) | 9 lines Added weak imposition of contact angle conditions in 3d free surfaces. Small tidy in SimpleCubicMesh Fixed missing std:: errors in mesh_from_vmtk Fixed warnings in circular_driven_cavity Makefile.am ------------------------------------------------------------------------ r77 | mheil | 2009-08-03 08:32:54 +0100 (Mon, 03 Aug 2009) | 38 lines Final check-in before updating licencing information etc to from version 0.85 to 0.9. INTERFACE CHANGE: -- GeomObject::dpositiondt(...) becomes GeomObject::dposition_dt(...). to make it consistent with general conventions. Not a big deal to the outside world as it had only just been renamed from drdt(...). The change log bypasses the intermedidate step. -- Bizarrely, the Makefile.ams for the circular driven cavity and the Rayleigh traction channel didn't have the makefile template for demo drivers included and this caused some problems (for the first time ever -- odd). Now fixed. -- removed some debugging output of block matrices from the fsi precondioner. -- Corrected interfaces for multi-domain helper functions in multidomain tutorials. (dimensional template arguments have been removed) -- Changed the script that makes all distributions so that the make checks for all four versions run simulataneously. (Appropriate for the wulfling with its lots of cores and lots of memory -- careful when you do this on a PC...). -- Added test to autogen.sh that tries to establish if mpi demo codes can be compiled and run. Since the test hasn't been tested on many machines it only issues warnings if it fails but continues regardless. (On the wulfling it does correctly detect if a compiler that can't handle mpi code is specified via the CXX variable and the lamboot hasn't been called.) ------------------------------------------------------------------------ r76 | mheil | 2009-08-03 08:12:13 +0100 (Mon, 03 Aug 2009) | 14 lines -- updated mesh from vmtk validata after fixing typos in output. -- removed all std::couts in src directories (apart from the ones that assign it to oomph_info and a few instances in the least squares fitter, where output formatting is required (this code is unlikely to be run in parallel anyway). -- Finished changes to Amine's vmtk mesh generation tutorial (stripped out references to actual oomph-lib computations; these got moved into three separate tutorials for fluid. solid and fsi). ------------------------------------------------------------------------ r75 | mheil | 2009-08-01 14:13:55 +0100 (Sat, 01 Aug 2009) | 15 lines -- Moved Amine's vmtk codes (solid, fluid and fsi) into demo drivers and created self tests. -- Created doc directories for vmtk mesh generation, solid, fluid and fsi examples. Mesh generation instructions have been checked and tutorial slightly edited. Probably needs another check. The last part has been commented out and will resurface as brief separate tutorials for he fluid, solid and fsi computations. -- NOTE: When writing vmtk fsi tutorial, remove the figure files that aren't needed! ------------------------------------------------------------------------ r74 | mheil | 2009-07-31 14:48:29 +0100 (Fri, 31 Jul 2009) | 3 lines Amine's latest version of the vmtk tutorial. ------------------------------------------------------------------------ r73 | mheil | 2009-07-31 10:49:14 +0100 (Fri, 31 Jul 2009) | 8 lines Fixed the problem in SuperLU_preconditioner (well, Richard did) and decreed that the CCDoubleMatrix is en route to become obsolete. Also fixed a problem with an eps file in one of the poisson tutorials. ------------------------------------------------------------------------ r72 | mheil | 2009-07-31 08:16:53 +0100 (Fri, 31 Jul 2009) | 26 lines -- removed all remaining references to SuperLU_dist throughout code (These were mainly in commented out sections of code but also caused the two mesh distribution tests in self_tests to crash when compiled without trilinos). -- fixed abs --> fabs problem in navier_stokes_surface_power_elements.h -- adjusted destruct test script so that it uses -g when run in paranoid modes. -- Cleaned up various little doxygen problems. RELEASE STATUS: Getting there... The only failures (on the wulfling) are /home/mheil/version_for_release/destruct_test/paranoia_2_mpi_1_external_dist_0/oomph-lib-0.85/self_test/analyse_self_tests/validation.log /home/mheil/version_for_release/destruct_test/paranoia_1_mpi_1_external_dist_0/oomph-lib-0.85/self_test/analyse_self_tests/validation.log /home/mheil/version_for_release/destruct_test/paranoia_0_mpi_1_external_dist_0/oomph-lib-0.85/self_test/analyse_self_tests/validation.log where the driven cavity and the first, third and fourth air cantilever block preconditioner tests fail when compiled with mpi but without the external distributions (trilinos and hypre). ------------------------------------------------------------------------ r71 | mheil | 2009-07-30 08:06:11 +0100 (Thu, 30 Jul 2009) | 4 lines Here comes the actual change the DoubleVector constructor already announced in the previous commit. Also added a configure options file for the wulfling (full optimisiation) ------------------------------------------------------------------------ r70 | mheil | 2009-07-29 16:08:44 +0100 (Wed, 29 Jul 2009) | 47 lines -- Updated all stray validate.sh scripts that still disabled fpdiff with the outdated no_python flag. Now they all use no_fpdiff (this reflects the fact that the comparison can also be disabled because there's no validata). -- Various little tidies all over the place. -- Removed slamch.c from superlu_dist sources. It caused the usual problems when compiled with optimisation and is available via lapack anyway. -- Completed cross-linking of all new tutorials in the example code list. -- Added direct link to list of tutorials to navigation bar -- Updated change log. -- Added automatic self-test to script that makes all four distributions. -- Changed all references to SuperLU to SuperLUSolver. -- removed search engine capabilities from doxygen-generated files as its functionality depends on the computer its running on not, not on us. This has caused lots of confusion and the search tended to return pretty rubbish results anyway. -- NOTE: The macro-element-based version of mpi/multi_domain/fsi_collapsible_channel/fsi_collapsible_channel_adapt.cc dies (only) on my laptop [gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3]. Still a few hierher's and fenv.h left from the debugging. -- Renabled default argument for DoubleVector constructor. -- Fixed a problem in parallel assembly: A resize of Sparse_assemble_with_arrays_previous_allocation was in the wrong place. -- Moved a few unused mpi-related variables into ifdef blocks. ------------------------------------------------------------------------ r69 | agait | 2009-07-29 15:11:31 +0100 (Wed, 29 Jul 2009) | 23 lines - A few small changes + partitioning.cc: biasing now works for multiple meshes + problem.cc: switched the call to METIS::partition_mesh(...) to pass in the problem rather than the global mesh & communicator + matrix_vector_product.cc: dealt with the case where HAVE_TRILINOS and OOMPH_HAS_MPI are defined but MPI has not been initialised + algebraic_elements.h: fixed memory error + multi_domain.cc: MPI-only variables moved inside OOMPH_HAS_MPI + young_laplace_elements.h: changed an incorrect | to || + demo_drivers - MPI version of fsi_osc_ring.cc: removed deletion of problem_pt before call to MPI_Helpers::finalize() + modified demo_drivers/linear_solvers/Makefile.am to ignore serial Trilinos tests when compiled in parallel ------------------------------------------------------------------------ r68 | mheil | 2009-07-29 14:42:09 +0100 (Wed, 29 Jul 2009) | 23 lines Amine's check in: -- Boundary nodes now provide storage for the first value associated with a given FaceElement ID. This allows multiple FaceElements to be attached to a node, each with their own additional values at the bulk nodes). Resizing of nodes can now be done with new function FiniteElement::add_additional_values( const Vector &nadditional_values, const unsigned &id) which allows the specification of the FacElement id. -- Updated ImposeDisplacementByLagrangeMultiplierElement to allow for the specification of a FaceElement ID (so multiple FaceElements can be attached to a node, each with their own additional values at the bulk nodes). -- Added vmtk tutorial ------------------------------------------------------------------------ r67 | ahazel | 2009-07-27 14:20:25 +0100 (Mon, 27 Jul 2009) | 10 lines Fixed all warnings from Intel compiler about partially-overloaded functions and a few over-rides that should have been overloads. Modified all serial drivers so that the contain no MPI instructions. If the library is compiled in parallel, but run in serial then all serial codes should execute and pass the tests. The only "cheat" here is related to the HYPRE library which, if compiled in parallel, cannot be run in serial. Hence, all serial HYPRE tests are omitted in that case. ------------------------------------------------------------------------ r66 | rmuddle | 2009-07-27 13:53:57 +0100 (Mon, 27 Jul 2009) | 8 lines Two Small Fixes + Removed range checking error from Problem::parallel_sparse_assemble(...) + Reverted default value of NavierStokesLSCPreconditioner::P_matrix_using_scaling to true ------------------------------------------------------------------------ r65 | ahazel | 2009-07-23 11:13:40 +0100 (Thu, 23 Jul 2009) | 7 lines Tiny bug fix in triangle_mesh.cc Updated documentation and code (for consistency) for parallel Boussinesq convection problem, serial Boussinesq convection and the adaptive timestepping example in unsteady_heat ------------------------------------------------------------------------ r64 | rmuddle | 2009-07-22 21:59:26 +0100 (Wed, 22 Jul 2009) | 7 lines Bug Fixes + fixed bug in sparse assemble with maps (problem.cc) + removed debugging line from OomphCommunicator (communicator.h) + removed memory leak from sparse_assemble_test demo driver ------------------------------------------------------------------------ r63 | mheil | 2009-07-22 15:26:34 +0100 (Wed, 22 Jul 2009) | 3 lines Fixed a few "this->" problems, following Richard's check in. ------------------------------------------------------------------------ r62 | mheil | 2009-07-22 14:54:14 +0100 (Wed, 22 Jul 2009) | 25 lines Benjamin's first commit: -- Improved (fixed) the boundary identification scheme for triangle-based meshes. We can now handle the case where all three vertex nodes of a triangle are located on the same boundary. -- added two functions to FiniteElement that allow us to check if a given local coordinate vector is inside the element. Broken virtual fct in the base class overloaded for TElements and QElements. Second version allows for tolerance and moves coordinate back into the element if the point is "just outside" the element. -- Fixed a problem in communicator.h where some parallel stuff was outside the #ifdef block. -- ElementWithExternalElement now has an access fct to number of interactions and the boolean that determines if the internal/geometric interaction data is included in the Jacobian (needed for projection). ------------------------------------------------------------------------ r61 | rmuddle | 2009-07-21 17:49:10 +0100 (Tue, 21 Jul 2009) | 117 lines + added two new methods to LinearAlgebraDistribution - global_to_local_row_map(...) returns the global index corresponding to a local index - rank_of_global_row(...) returns the (processor) rank of a global row + modification to DoubleVector interfaces (double_vector.h / double_vector.cc) - all rebuild(...) methods are now renamed build(...) and default arguments have been removed - made redistribute(...) consistent - argument is now a pointer to a LinearAlgebraDistribution + CRDoubleMatrix - added redistribute(...) method - added inf_norm(...) method - renamed rebuild_*(...) methods build_*(...) - removed Default_linear_solver memory leak + removed memory leaks from: - CollapsibleChannelMesh + added InnerIterationPreconditioner to general_purpose_preconditioners.h + problem.h / problem.cc - added a new sparse_assemble method: sparse_assemble_using_two_arrays - a serial assembly method for matrices that does not use any STL containers that use the STL memory pool - two parameters: - unsigned Sparse_assemble_with_arrays_initial_allocation the number of elements to initially allocate for a matrix row within the sparse_assembly_with_two_arrays(...) method. (This is ignored if a matrix has been assembled previously in which case the number of elements in each row in the last assembly is used) - unsigned Sparse_assemble_with_arrays_allocation_increment the number of elements to add to a matrix row when the initial allocation is exceeded within the sparse_assemble_with_two_arrays(...) method. - the Dof_pt is no longer global (with null elements if the problem is distributed) - it is now local and only the Dofs associated with a particular processor are stored. - the Dof_pt has a LinearAlgebraDistribution associated with it to store the its distribution (Dof_distribution_pt) - replaced previous parallel sparse matrix assembly methods with parallel_sparse_assemble(...) - when a matrix (i.e. the Jacobian) is requested from a distributed problem and no distribution is specified, either - a matrix with a uniform distribution, - problem distribution (matching Dof_distribution_pt), - the default distribution (if the problem distribution is too unbalanced then the uniform distribution is used) is returned as defined by the enum Distributed_problem_matrix_distribution - note: can no longer assemble a CCDoubleMatrix from a distributed problem + linear_solver.h - merged SuperLU and SuperLU_dist into SuperLUSolver + SuperLU_preconditioner.h - merged SuperLUPreconditioner and SuperLUDistPreconditioner into SuperLUPreconditioner + iterative_linear_solver.h / iterative_linear_solver.cc - added interfaces to enable InnerIterationPreconditioner + BlockPreconditioner - add new interfaces for passing meshes to the BlockPreconditioner to handle the situation when a mesh in a distributed problem does not contain any elements on a particular processor - rewritten build_preconditioner_matrix(...) methods to eliminate communication. Note: order of unknowns now changed. + general_purpose_block_preconditioners.h / general_purpose_block_preconditioner.cc - added common base class GeneralPurposeBlockPreconditioner so that all general purpose block preconditioner have the same interface and can be readily switched + updated assembly_handler.h / assembly_handler.cc to handle: - the local Dof_pt in problem - new DoubleVector interfaces + matrix_vector_product.h / matrix_vector_product.cc - removed OOMPH without MPI bug - updates due to DoubleVector change + updated hypre_solver.h / hypre_solver.cc to allow the HypreSolver::solve(...) and HyprePreconditioner::preconditioner_solve(...) arguments to be the same vector. + made block preconditionable: - Tnavier_stokes_elements.h - pseudosolid_node_update_elements.h + updated get_dof_numbers_for_unknowns(...) in: - solid_traction_elements.h - solid_elements.h - navier_stokes_elements.h / navier_stokes_elements.cc + modified due to DoubleVector interface changes: - womersley_elements.h - eigen_solver.cc - trilinos_solver.h - preconditioner_array.cc - explicit_timesteppers.cc + modified due to changes to BlockPreconditioner interfaces: - fsi_preconditioners.h - spherical_navier_stokes_preconditioners.h / spherical_navier_stokes_preconditioners.cc - biharmonic_preconditioner.h / biharmonic_preconditioner.cc - navier_stokes_preconditioner.h / navier_stokes_preconditioner.cc + updated various demo drivers for: - merging of SuperLU and SuperLU_dist wrappers - new BlockPreconditioner interfaces ------------------------------------------------------------------------ r60 | agait | 2009-07-21 10:30:03 +0100 (Tue, 21 Jul 2009) | 18 lines -- More tidying up regarding the multi-domain method + Removed template parameter for element dim from both FSI and non-FSI version of Multi_domain_functions::setup_multi_domain_interaction(...). Added helper function Multi_domain_functions::get_dim_helper(..) and moved the template wrappers from setup_multi_domain_interactions(...) to setup_multi_domain_interaction(...). + Fixed range-checking error in preconditioner_array.cc - MPI_Waitall is now only called if there's anything to wait for + Removed some irrelevant screen output and tidied up the remaining output; within the Multi_domain_functions namespace there are now two flags - (1) Doc_stats (basic stats regarding multi-domain method) and (2) Doc_full_stats (outputs every processor's number of halo(ed) and external halo(ed) elements and nodes with every other processor) ------------------------------------------------------------------------ r59 | mheil | 2009-07-20 13:24:34 +0100 (Mon, 20 Jul 2009) | 16 lines Added two scripts that build all four distributions (as tar files) and do a "destruct test" of a given tar file (using (nearly) all possible permutations of configure options). Running the latter script revealed a few warnings that I've dealt with, and a single failure due to a range checking error in a particular combination of configure flags (mpi with paranoia and range checking enabled and without the trilinos and hypre libaries -- Andy's looking into this). Also included the elastic bretherton self-test properly into the build hierarchy, followed by an immediate adjustment of the fpdiff tolerance to make it pass on the wulfling. ------------------------------------------------------------------------ r58 | mheil | 2009-07-17 18:18:28 +0100 (Fri, 17 Jul 2009) | 27 lines WARNING: SLIGHTLY RUSHED CHECK-IN. HAVEN'T RE-RUN THE SELF-TESTS AFTER MERGING WITH ANDREW'S VERSION 57. WILL CHECK OUT THE FRESH VERSION AND RUN THE SELF-TESTS AS SOON AS I GET HOME... -- Finished off final MPI tutorial discussing the parallel solution of multi-domain problems. Made sure that the parallel driver codes are actually straightforward upgrades of their serial counterparts and renamed them (and associated data files) accordingly. -- Allowed all finite elements to generate plot points for the case when nplot=1, in which case a single plot point should be located in their centre, rather than dividing by zero :) -- Made the number of sampling points in the bin setup a parameter. -- ANDY: There are a few queries in the multi-domain files. -- Fixed a problem with multiple default arguments in the constructor of the MeshAsGeomObject. -- Introduced (re-)compile guards into supg advection diffusion element header. Pretty bizarre that we hadn't noticed their absence so far... ------------------------------------------------------------------------ r57 | ahazel | 2009-07-17 17:15:23 +0100 (Fri, 17 Jul 2009) | 11 lines Added two more demo drivers for the 3D Bretherton problem and the airway reopening (elastic Bretherton) problem mainly to check that the functionality doesn't break. The are reasonably tidy, but not up to proper standards and may never be Also modified SpineNodes so that if they do not have attached Spines the code does not break until you try to call their equation numbers. Small change InterfaceEdgeElements to ensure that they can be hijacked by default, just like InterfaceElements ------------------------------------------------------------------------ r56 | ahazel | 2009-07-13 14:23:57 +0100 (Mon, 13 Jul 2009) | 11 lines Updated documentation for the parallel Turek flag and multi-domain Boussinesq convection problems. Fixed a nasty little bug so that the GeomObject::locate_zeta() function is correctly overloaded by FiniteElements and MeshAsGeomObject Corrected a bug in the definition of local_zeta_for_local_coordinates(). I don't know how this managed to compile under the gnu compiler unless it was never called! ------------------------------------------------------------------------ r55 | ahazel | 2009-07-12 16:29:32 +0100 (Sun, 12 Jul 2009) | 5 lines Updates to MPI documentation Update to build process so that the library builds without a private directory (whoops that's probably been there for some time) ------------------------------------------------------------------------ r54 | agait | 2009-07-11 10:37:24 +0100 (Sat, 11 Jul 2009) | 24 lines -- Tidying up after recent major check-in + Moved various (templated) functions out of multi_domain.h and mesh_as_geometric_object.h into multi_domain.template.cc and mesh_as_geometric_object.template.cc respectively + If the user wishes to change the extreme coordinates of the bin structure used in the multi-domain method, set the boolean Multi_domain_functions::Compute_extreme_bin_coordinates=false (default is true) and then ensure that the requisite number of extrema are specified in the driver code before the first call to any routine that sets up any interaction. See the upcoming tutorial on the multi-domain method for more information... + Minor modifications to navier_stokes_preconditioners.cc and problem.cc + Removed any references to Problem::distribute from serial version of the 3D Boussinesq problem ------------------------------------------------------------------------ r53 | mheil | 2009-07-10 08:19:02 +0100 (Fri, 10 Jul 2009) | 24 lines -- Mainly worked on mpi documentation. -- final revision (apart from Richard's parallel linear solver stuff that still needs to be written) of the general mpi tutorial -- four of the specific mpi tutorials (adaptive driven cavity; Poisson with flux bc; fsi channel with leaflet; Turek flag). Still to cross-link with rest of doc. Also need to write mpi tutorial for Boussinesq convection problem (incl discussion of parallel multi-domain methods, binning, etc). -- Added libtool to the list of helper programs required if distribution is to be messed with locally. -- Major rewrite of (serial) multi-domain Boussinesq convection tutorial (incl. some renamings of source files). A few minor tweaks to multi-field Boussines tutorials. -- Added Patrick's guide of how to write oomph-lib documentation. ------------------------------------------------------------------------ r52 | agait | 2009-07-09 13:16:14 +0100 (Thu, 09 Jul 2009) | 84 lines -- Check-in of new procedure to locate coordinates using the binning method + The communication of coordinates which may require location on another processor now happens in a ring-like structure rather than the (slower) broadcast-gather procedure that was used previously + The method only passes on to the next level in the spiral from the original bin if there are any more coordinates on any process that still have not been correctly located + FiniteElement::locate_zeta(...) can now take an optional boolean which indicates that the local coordinate passed in to the function is to be used as the initial guess in the Newton method. This optional boolean is currently only used from within MeshAsGeomObject::locate_zeta(...) -- Other changes and additions + Mesh::classify_halo_and_haloed_nodes(...) has been modified so that Nodes no longer need to store which processors they are associated with and which processor is in charge of them; this is now all set up and only used within the function itself. The only information a Node stores itself regarding its halo status is a single boolean to say whether it is a halo or not. This function also now ensures that every node on any halo element is aware of any processor that its haloed copy is associated with to avoid any errors which may arise when there is a discrepancy between the two + The addition of this functionality required a change in the order in which functions are called within Problem::assign_eqn_numbers(...); now, Mesh::synchronise_hanging_nodes(...) must be (and is) called before Mesh::classify_halo_and_haloed_nodes(...). + Under PARANOID the code now checks all the halo/ed and shared element and node schemes following the call to classify_halo_and_haloed_nodes(...) in Problem::assign_eqn_numbers(...) + The default output behaviour now in a distributed Problem is to only output non-halo elements. The validata associated with MPI demo_drivers for distributed problems has therefore also been modified. The output of halo elements can be controlled by the use of the functions Mesh::enable_output_of_halo_elements() and Mesh::disable_output_of_halo_elements(). + The majority of references to MPI_COMM_WORLD, MPI_Helpers::Nproc and MPI_Helpers::My_rank have now been replaced by the relevant functions of the appropriate OomphCommunicator object (still some remaining in hypre_solver.cc, linear_solver.cc, and mumps_solver.cc) ------- INTERFACE CHANGES -------- + Multi_domain_functions::set_sources<...>(...) has been renamed to Multi_domain_functions::setup_multi_domain_interactions<...>(...) [NOTE: plural, since it sets up a two-way interaction] and no longer requires the dimensions as template parameters + Multi_domain_functions::set_external_storage<...>(...) has been renamed to Multi_domain_functions::setup_multi_domain_interaction<...>(...) [NOTE: not plural, as it only sets up one interaction]. There are two versions of this function (FSI-like and non-FSI-like) and they each act as a simple wrapper to the function Multi_domain_functions::aux_setup_multi_domain_interaction<...>(...) Note to local developers/users: MPI "destruct tests" are now available in private/user_drivers/andy. You can run any script individually e.g. ./two_d_mesh_dist_mpi_check.sh NPROC START will run the two_d_mesh_dist executable on 2,...,NPROC processors, starting each job at node START (i.e. the first command will be mpirun n20-21 ./two_d_mesh_dist, and so on). There is a "wrapper" script to run all of the mpi tests one after the other (run_big_mpi_tests.sh), and also smaller "wrapper" scripts which run selections of the available tests. Note that some of these driver codes will not currently run on higher numbers of processors due to the initial coarse mesh. ------------------------------------------------------------------------ r51 | ahazel | 2009-06-30 10:37:51 +0100 (Tue, 30 Jun 2009) | 13 lines Added new multimesh double diffusive convection demo drivers, which required fixing an oversight in set_sources. Tidied some of the code in the convection problems. In the multimesh case, far fewer functions needed to be overloaded, so the code is now much shorter and cleaner. Updated the appropriate documentation for multimesh boussinesq convection. Added the required time-dependent version of get_interpolated_values() in RefineableAdvectionDiffusion elements. ------------------------------------------------------------------------ r50 | ahazel | 2009-06-25 17:19:25 +0100 (Thu, 25 Jun 2009) | 6 lines A few little fixes to correct some compiler flag combinations that weren't checked before: One OOMPH_HAS_MPI ifdef One const ------------------------------------------------------------------------ r49 | ahazel | 2009-06-25 08:36:57 +0100 (Thu, 25 Jun 2009) | 15 lines Minor changes so that all parallel tests pass. If a traction element is a halo element its output function no longer calls get_traction() because the required external storage will never have been set up. The finite differencing for the jacobians in the multimesh convection problems now calls ElementWithExternalElement::fill_in_contribution_to_jacobian(), as it should to properly take into account the external interactions (PARANOID) error checking has been added to the ElementWithExternalElement access functions so that if storage is accessed before it has been allocated an error will be thrown. ------------------------------------------------------------------------ r48 | ahazel | 2009-06-24 10:25:48 +0100 (Wed, 24 Jun 2009) | 39 lines A number of modifications to merge and combine ElementWithExternalElements and FSIWallElements, unifying storage for equation numbering schemes and finite-difference routines for supplying entries to the Jacobian. FiniteElements now inherit directly from GeomObjects and the position() and, newly renamed, dposition_dt() functions call FiniteElement::interpolated_x() and FiniteElement::interpolated_dxdt() by default. In addition, a new FiniteElement::zeta_nodal() function has been provided that interpolates the "global" intrinsic coordinate of the FiniteElement when viewed as a compound GeomObject in a Mesh of GeomObjects, the default interpretation. The assumption is ALWAYS that zeta is interpolated using the nodal shape functions and at the FiniteElement level zeta is chosen to be the Eulerian coordinate. In SolidFiniteElements zeta is chosen to be the Lagrangian coordinate. In FaceElements, zeta is chosen to be the boundary coordinate for the boundary of the mesh from which the face is created. There is then an ambiguity for SolidFaceElement which is resolved by choosing zeta to be the FaceElement representation in these cases. The locate_zeta() function using Newton's method is now implemented once in the FiniteElement base class using the zeta_nodal representation or MacroElement representation is a MacroElement is defined. ElementWithExternalElement have now been moved into their own files and have been rewritten to use raw C-style storage underneath, rather than vectors of vectors of vectors. Generic equation numbering routines, finite difference routines for the Jacobian, etc have been unified in these elements. All external field data and external geometric data are stored in separate containers, rather than as external data! Hopefully, all documentation has been updated inline with these changes. Minor changes to the routines that assign local equation numbers so that the required overloading happens more automagically and can also be automagicked in ElementWithExternalElement. INTERFACE CHANGE: The function GeomObject::drdt() is now called GeomObject::dpositiondt() for consistency. ------------------------------------------------------------------------ r47 | ahazel | 2009-06-17 11:03:34 +0100 (Wed, 17 Jun 2009) | 9 lines A temporary commit before a number of important infrastructure changes so that I have something to which to roll back. All self-tests pass and little bits of documentation have been updated. The only other change is a change in the tolerance for detecting zero when calculating the dissipation in spherical Navier--Stokes equations so that the self tests pass under gcc 3.2.3 on an old laptop. ------------------------------------------------------------------------ r46 | mheil | 2009-05-21 13:26:27 +0100 (Thu, 21 May 2009) | 6 lines -- Updated general mpi documentation (worked from the version Andy gave me offline). -- Updated change log and todo list. ------------------------------------------------------------------------ r45 | ahazel | 2009-05-21 11:45:27 +0100 (Thu, 21 May 2009) | 6 lines Fixed hypre_solve() so that it now works in parallel with same RHS and solution vectors Modified the 3D Boussinesq convection problems to work with MPI and delete their meshes and spatial error estimators ------------------------------------------------------------------------ r44 | ahazel | 2009-05-20 19:09:02 +0100 (Wed, 20 May 2009) | 12 lines Fixed sign error in geometric objects in curved and helical pipes so that all coordinate systems are now right-handed and the code compiles and runs under PARANOID (whoops). Added 3d boussinesq convection problem for multidomain and combined element versions. Refineable preconditioned versions are included, but no refinement is done in the test because it gets very big very quickly... Fixed an oversight in the hypre solver so that if the same vector is passed as RHS and solution the correct solution is computed ------------------------------------------------------------------------ r43 | ahazel | 2009-05-13 17:55:19 +0100 (Wed, 13 May 2009) | 10 lines Added a new TubeMesh that uses a TubeDomain to represent a three-dimensional topolgically-tubular mesh. The resulting mesh can be very general and examples of curved and helical tubes are given in demo_drivers/navier_stokes/curved_pipe. Added more useful error message and warning comments to the QuarterTubeMesh to indicate that it cannot be used for general tube shapes and that the domains must be topologically QuarterTubes. ------------------------------------------------------------------------ r42 | mheil | 2009-05-11 13:30:20 +0100 (Mon, 11 May 2009) | 20 lines -- New partitioning routine, now based on dual graph of mesh, constructed via global equation number connectivity. -- Tweaked a few fpdiff tolerances -- Changed default setting for GeneralisedElement::Suppress_warning_about_repeated_external_data to be false. -- Provided pool for Mumps solvers and wrote comprehensive self-test code; currently in private/user_drivers/jonathan/mumps_solver_test.cc ------------------------------------------------------------------------ r41 | mheil | 2009-05-10 20:25:29 +0100 (Sun, 10 May 2009) | 4 lines Added a few "this->" and tweaked the tolerance on the adaptive Hopf bifurcation yet again. ------------------------------------------------------------------------ r40 | agait | 2009-05-09 21:00:17 +0100 (Sat, 09 May 2009) | 54 lines -- Check-in of fixes to problems in MPI + Use of the global rather than local equation number in e.g. AdvectionDiffusionEquations::dinterpolated_u_adv_diff_ddata(...) (used in the analytic Jacobian method for the multi-domain Boussinesq convection problems) + Renamed MacroElementNodeUpdateMesh::dom_pt() to MacroElementNodeUpdateMesh::macro_domain_pt() + Problem::doc_errors(...) is no longer called from a Newton loop which has reached its maximum number of adaptations. The function itself has also been modified so that it no longer calls actions_before_adapt() and actions_after_adapt(). + Further options added for Problem::distribute(...); the options now available are: - no arguments at all - boolean argument allowing screen output - Vector of unsigned integers detailing the partition to be used - DocInfo object to allow documenting of the distribution - any combination of the above (Vector always first, boolean always last) + Various comments that made no real sense have been removed + Renamed Multi_domain_functions::remove_duplicate_eqn_numbers(...) to Multi_domain_functions::remove_duplicate_data(...) + Added GeneralisedElement::Must_be_kept_as_halo to allow elements within a mesh to be told to kept as halos during a distribution (this is used in the new turek_flag parallel driver) + A few tweaks were required to ensure that calls to MPI send and receive functions worked under RANGE_CHECKING + Modifications made to the binning method in mesh_as_geometric_object.h so that it now works consistently across all problems -- Other changes and additions + Restructuring of demo_drivers/mpi/distribution so that every code now has its own directory (deleted old directories two_d and three_d) + Moved two_d_mesh_dist and three_d_mesh_dist into self_test/mpi + Added tests for fsi_channel_with_leaflet and turek_flag to demo_drivers/mpi/multi_domain + Added test for single-domain refineable Boussinesq convection problem in demo_drivers/mpi/multi_domain/boussinesq_convection + Errors in multi-domain Boussinesq demos should now be fixed + Documentation in doc/mpi/general_mpi almost complete! ------- INTERFACE CHANGE -------- + FSI_functions::setup_fluid_load_info_for_solid_elements(...) argument order changed - Problem pointer now at the beginning of the list rather than at the end ------------------------------------------------------------------------ r39 | mheil | 2009-05-07 18:27:48 +0100 (Thu, 07 May 2009) | 36 lines -- NOTE: The two multi_mesh_boussinesq codes in mpi seg fault. Andy's fixed this in his version so I won't replicate his efforts here. The two serial counterparts have been given a temporary fix by initialising mpi -- this (and similar hacks in other serial demo-drivers) will soon be tidied up once a bug in the block preconditioners is fixed). -- Created RefineableNavierStokesFluxControlElement which works correctly with hanging nodes in 3D. A separate refineable version was needed because of the need to access hanging local equations etc. Modified the error message in the non-refineable version to suggest using the refineable version when in 3D just to be on the safe side. NOTE: This element now provides a template for the upgrade of all other FaceElements that don't work properly in the presence of 3D hanging nodes. -- Created the NonRefineableElementWithHangingNodes class primarily to faciliate the upgrade of FaceElements to their refineable counterparts. The point is that even though the elements are refineable (and therefore have/need access to hanging node information etc.) they will never be built by oomph-lib's automatic (bulk-)mesh adaptation routines but by detaching/re-attaching themselves from/to the adapted bulk meshes. The main purpose of this class is therefore to break all the pure virtual functions that the RefineableElement base class requires for the purpose of automatic mesh adaptation. ------------------------------------------------------------------------ r38 | ahazel | 2009-04-30 17:56:56 +0100 (Thu, 30 Apr 2009) | 15 lines Modified the Z2 Error estimator so that it now calculates the maximum of a number of specified compound fluxes for use in multiphysics problems where different fields are interpolated by the same element. For example, velocity and temperature in boussinesq convection. More exotic error estimates can be specified by means of a funciton pointer. The fluxes that make up each compound flux are specified in individual ElementWithZ2ErrorEstimator elements. Weakend the error tolerance in refineable_b_convection.cc so that the test is faster and it is consistence with the multidomain approach. Removed a strange output from linear_solver.cc Fixed some warnings introduced in my last check in ------------------------------------------------------------------------ r37 | mheil | 2009-04-30 08:27:55 +0100 (Thu, 30 Apr 2009) | 3 lines minor tweak to mumps solver ------------------------------------------------------------------------ r36 | ahazel | 2009-04-28 19:21:38 +0100 (Tue, 28 Apr 2009) | 18 lines Modified the multi-domain boussinesq problems so that the off-diagonal terms are calculated anlytically, which required the addition of one extra reverse lookup function in elements.h that finds the local_eqn_number corresponding to a given global number. In addition, extra functions were provided in navier_stokes and advection-diffusion elements to calculate the derivatives of the velocity and advected field, respectively, with respect to unknowns in the elements. Added serial multi-domain boussinesq problems to multi_physics/boussinesq_convection and added analytic calculation of the off-diagonal jacobian terms in the refineable single-element driver as well. Jacobian assembly is about 6 times faster using the analytic methods. The next stage is to modify the error estimator so that refinement in the combined element is based on whether the velocity OR temperature error is above the threshold. ------------------------------------------------------------------------ r35 | ahazel | 2009-04-26 21:20:24 +0100 (Sun, 26 Apr 2009) | 18 lines 1. Added new functionality to permit adaptive refinement of bifurcation-tracking problems. This lead to a couple of new functions in Problem class and some new methods in the AssemblyHandler. At present, the approach is to create copies of the problem, transfer the eigenfunction(s) to the mesh of the copy and ensure that the original problem and the copy are refined in exactly the same way. In the future, the approach will be merged with vector-type multigrid methods and use an interpolation matrix on the eigenfunction dofs to avoid storing the additional copies of the problem. 2. Written a block solver for the PitchFork tracking that uses the original Jacobian rather than an augmented Jacobian as a block. The method is much faster and even though the Jacobian is singular at the bifurcation iterative methods seem to work fine. 3. Fixed some minor library include problems when upgrading to gcc 4.3.2 ------------------------------------------------------------------------ r34 | mheil | 2009-04-25 12:34:18 +0100 (Sat, 25 Apr 2009) | 36 lines MH's first check-in after the merge with Andy's new stuff. NOTE: I had to comment out the use of SuperLU_dist for the Crouziex Raviart solves in demo_drivers/mpi/distribution/three_d/three_d_entry_flow.cc demo_drivers/mpi/distribution/two_d/adaptive_driven_cavity.cc demo_drivers/mpi/distribution/two_d/circular_driven_cavity.cc as the Newton solver doesnt' converge. Very odd. Need to look into SuperLU_dist anyway as I'm suspicous if we're using the right/optimal flags for it anyway. -- Added new mumps solvers -- requires gcc4.3.2 and various libraries. See the (private) wulf_gcc4.3.2 configure options to see how it's used. Shouldn't break anything if mumps is not available. -- finished doc for 3D unstructured FSI and cleaned up driver code directory -- fixed range checking error for unstructured 3D NavierStokes discovered by Andy -- Fixed a few small problems in src/generic/mesh_as_geometric_object.h and temporarily set the percentage_offset to 30 (from 0.05) to make things work in 3D where we otherwise end up with a y coordinate that's bigger than the maximum value allowed in the bin. Andy to investigate/fix. -- Fixed all the broken documentation (missing doxygen hooks etc. caused by interface changes.) ------------------------------------------------------------------------ r33 | mheil | 2009-04-22 09:04:45 +0100 (Wed, 22 Apr 2009) | 19 lines A few minor tweaks to get to work under gcc4.3.2 on Matthias' laptop. Note: -- The 3D unstructured Navier Stokes demo driver has a range checking problem. Will fix this when I check in the (meanwhile updated) version. -- The distributed fsi_osc_ring problem now works presumably because we're using a hard-coded distribution, determined on the wulf, for which the everything's fine. The problem that we had when METIS came up with a different distribution on the laptop is likely to be still there. Must go back and check this! ------------------------------------------------------------------------ r32 | agait | 2009-04-21 15:04:25 +0100 (Tue, 21 Apr 2009) | 16 lines -- Check-in of sources to fix problems of machine-dependent partitioning + Problem::distribute(...) can now take a Vector argument to indicate the partitioning that will be used (rather than calling METIS explicitly). It has also been modified to return a Vector indicating the partition actually used. + Partition files added to demo_drivers/mpi/distribution and demo_drivers/mpi/multi_domain to ensure like-for-like testing + Now compiles and passes (almost) everything with RANGE_CHECKING turned on. - still errors in demo_drivers/navier_stokes/unstructured_three_d_fluid and demo_drivers/mpi/multi_domain/fsi_osc_ring that need to be fixed (this last one works on the Wulf, but not on Matthias' laptop) ------------------------------------------------------------------------ r31 | agait | 2009-04-20 10:30:27 +0100 (Mon, 20 Apr 2009) | 128 lines -- Major check-in of multi-domain method and multi-mesh distribution + Introduced capability in Problem::distribute(...) to distribute multiple meshes. At the moment this uses METIS to partition the global mesh (using the new function Problem::partition_global_mesh) + This new functionality necessitated a few changes to Mesh level refinement routines, in particular to ensure that adaptive routines take place in a synchronous manner on multiple processes. + Introduced ElementWithExternalElement (see src/generic/multi_domain.h) + Inherits from FiniteElement and GeomObject, stores copies of the external element and the associated local coordinates at each of its integration points for each "interaction index" + Overloads the locate_zeta functionality from GeomObject to locate coordinates in the ElementWithExternalElement using Newton's method. + The FSIWallElement inherits from this, so all its adjacent fluid element and associated local coordinate storage is not required and has all been replaced by the source element storage. + Introduced new namespace Multi_domain_functions (multi_domain.h and multi_domain.cc) + The main function in here is set_external_storage, which takes the mesh and the mesh from which it obtains the external source elements as arguments, as well as a pointer to the Problem, and creates (on the fly) external halo(ed) elements and nodes to be used in multi-domain problems, such as those demonstrated in the demo_drivers/mpi/multi_domain directory. This routine works for multi-domain cases where the elements are either adjacent (e.g. FSI) or overlapping (e.g. multi-domain applied to a multi-field problem). To use it in FSI you need to set Multi_domain_functions::Use_bulk_element_as_external=true. + The remainder of the functions in this namespace are helper functions which separate the task into pieces which should be easier to understand + Updated the Mesh class to allow for storage (and removal) of external halo(ed) elements and nodes + MeshAsGeomObject::locate_zeta(...) now has the capability to do a bin search for sub-GeomObjects rather than the brute-force method which looped over all of them until finding the right one. The method sets up a rectangular/cuboidal bin structure (based on the Mesh's max and min coordinates in each dimension) and searches based on the calculated bin number for the current zeta. If the locate method fails in the original bin, then the search continues in a spiral pattern around this original bin until it succeeds. + This is now used by default, but the default parameters can be changed by setting Multi_domain_functions::Setup_bins_again=true, and changing e.g. Multi_domain_functions::Nx_bin, Multi_domain_functions::X_max, etc. -- Other changes + Problem/Mesh::redistribute(...) has been renamed to Problem/Mesh::prune_halo_elements_and_nodes(...) to better reflect what it actually does, and has also been modified to work on non-uniformly refined meshes. [The mesh is refined back to its highest level of uniform refinement and then any unnecessary halo(ed) elements at this level are removed along with any sons.] + Problem::check_halo_schemes(...) is now just a wrapper to Mesh::check_halo_schemes(...) (for multiple meshes if required) + Problem::refine_selected_elements(...) has been modified to work for multiple meshes + If an element is halo, then any FaceElement attached to it is also set to be a halo (in e.g. QElement<...>::build_face_element(...)) ------- SORT OF INTERFACE CHANGE -- + AlgebraicMeshes should/must now specify the GeomObjects involved in any of their node updates by calling add_geom_object_list_pt(...) This is because when communicating information between processors, GeomObjects must be identifiable without reference to their pointers. + MacroElementNodeUpdateMeshes should/must now specify the GeomObjects involved in any of their node updates by calling set_geom_object_vector_pt(Vector...) This is because when communicating information between processors, GeomObjects must be identifiable without reference to their pointers. ------- INTERFACE CHANGES -------- + Added integration point arguments to all get_source-type functions in elements to allow for overloading in multi-domain calculations. For example, NavierStokesEquations::get_body_force_nst(const double& time, const Vector &s, const Vector &x, Vector &result) has been changed to NavierStokesEquations::get_body_force_nst(const double& time, const unsigned& ipt, const Vector &s, const Vector &x, Vector &result) I apologise profusely if I've missed out your favourite element type and you want to use it in a problem with the multi-domain method. + FSI_functions::setup_fluid_load_info_for_solid_elements(...) now requires the Problem to be passed in as an argument (before the optional "face" argument) ----------------------------------- -- New self-tests added to demo_drivers/mpi to test both this new functionality and the previously existing single-domain distribution functionality NOTE: Nothing done yet about removing all instances of MPI_COMM_WORLD, MPI_Helpers::Nproc, MPI_Helpers::My_rank and replacing with oomph Communicator objects. NOTE: Code not yet tested for any multi-domain examples where the external mesh is a SolidMesh or has solid degrees of freedom. ------------------------------------------------------------------------ r30 | mheil | 2009-04-13 19:50:52 +0100 (Mon, 13 Apr 2009) | 13 lines -- Implemented load-balanced parallel assembly for non-distributed problems for all four (partial) assembly methods. -- Added a demo code to demonstrate deflection of a flat plate under pressure load (boundary conditions chosen so that it deforms like the "tensioned string" in the beam example). -- Finished documentation for unstructured 3D Navier Stokes incl. discussion of corner element splitting. ------------------------------------------------------------------------ r29 | mheil | 2009-04-06 08:24:43 +0100 (Mon, 06 Apr 2009) | 19 lines INTERFACE CHANGE: - In NavierStokesLSCPreconditioner void set_f_preconditioner(Preconditioner& new_f_preconditioner) void set_p_preconditioner(Preconditioner& new_f_preconditioner) changed to void set_f_preconditioner(Preconditioner* new_f_preconditioner_pt) void set_p_preconditioner(Preconditioner* new_f_preconditioner_pt) to make it consistent with the rest of the code. ------------------------------------------------------------------------ r28 | mheil | 2009-03-30 16:53:01 +0100 (Mon, 30 Mar 2009) | 5 lines A few little changes to the FSI preconditioner to allow assignment of different solid sub-preconditioner. Also worked some more on the documentation. ------------------------------------------------------------------------ r27 | mheil | 2009-03-25 10:18:31 +0000 (Wed, 25 Mar 2009) | 6 lines Finished the update of the solid theory section and nearly finished off the unstructured 3D solid tutorial. Mainly checking in a few changes to the preconditioners that Andy needs for the multi-domain Boussinesq problem. ------------------------------------------------------------------------ r26 | mheil | 2009-03-24 17:37:07 +0000 (Tue, 24 Mar 2009) | 2 lines Fixed various memory leaks. ------------------------------------------------------------------------ r25 | mheil | 2009-03-20 09:03:07 +0000 (Fri, 20 Mar 2009) | 89 lines - INTERFACE CHANGE: The constructors for all constitutive equations now take pointers to constitutive parameters rather than the parameters themselves. (With previous approach, changing Young's modulus, say, required the construction of a new constitutive equation object that then had to be passed to all elements again etc.) - TriangleMesh class now has the base class TriangleMeshBase and the member function setup_boundary_coordinates(...) which does what it says (it uses the arclength along the polygonal line elements that bound the domain to create an automatic parametrisation of the boundary, starting from the "lower left" vertex on the boundary). - TetgenMesh class now has a base class TetMeshBase and the member function setup_boundary_coordinates(...) which does what it says. Boundary coordinates are set up for each surface polygon separately, so a tetgen mesh that is made up from p polygonal boundaries has p boundaries, all of which have their own surface coordinates. - Fixed a few uninitialised variables in Womersley stuff. - Lots of little tidies here and there. - FSI setup_load function now allows documentation of boundary coordinates to allow assessment of (mis)match between parametrisations in fluid and solid meshes. - Implemented proper output function for solid traction elements. - Fixed output for PVDElements so they work with tets and triangles (by using tecplot zone functions) - Created SolidTElements and TPVDElements for unstructured solids. - Added new version for partitioning based on the mesh's dual graph. This graph can be biased by the mesh's error estimate to achieve a more uniform distribution. Works perfectly for one level of refinement where the relation between error and newly created elements is obvious. Still needs some tweaking (analysis, even!) otherwise. Also need to include internal, external and other Data that affects an elements residuals by providing a new GeneralisedElement::get_all_data_pt(...) function that is suitably overloaded in all derived classes that add more Data. NOTE: New version is currently ifdef-ed out. - Finally sorted out the confusion about how to assign Lagrangian coordinates for newly created solid elements. - Fixed a bug in top-leve Makefile.am. The $(user_drivers_dirs) variable is not defined, therefore the build machinery ascended to the home directory and tried a "make distclean" there. Have stopped that by using the hardcoded "user_drivers" instead. - Added demo driver code for 2D/3D unstructured solids (funky shaped 2D object for 2D fsi and 3D problem: Hollow cube). - Added demo driver code for 2D unstructured fluid (funky shaped 2D object in channel in anticipation of 2D unstructured FSI) - Added demo driver codes for 2D/3D unstructured FSI. - Wrote proper tutorial and updated demo driver for compressed square (discussion of compressibility vs incompressibility) - Wrote proper tutorial and updated demo drive code for 3D cantilever. - Wrote proper tutorial and updated demo drive code for small amplitude disk oscillation. - Added demo drivers for 3D unstructured fluid/solid/fsi (square bifurcation). First draft for solid tutorial is in; the ones for fluid and fsi are dummies. ------------------------------------------------------------------------ r24 | rmuddle | 2009-03-18 13:18:44 +0000 (Wed, 18 Mar 2009) | 86 lines - src/generic/problem.cc - updated distributed_matrix_sparse_assemble(...) to replace the use of maps with vectors of pairs in the assembly of the compressed matrices - src/generic/double_vector.h & double_vector.cc - added functionality to DoubleVector allow external data (i.e. double* ) to be used by the vector - src/generic/block_preconditioner.h - removed memory leak - src/generic/matrices.cc - removed commented out code (left by me from previous check in) - add thorough PARANOID checks to matrix vector multiply methods - updated matrix vector multiply methods too access vector data via values_pt() as opposed to [] - src/generic/linear_solvers.cc - modified SuperLU to use pointer arithmetic based access to vector data ( as opposed to [] ) - modified SuperLU_dist wrapper to allow SuperLUDist preconditioner to be used in two level parallelisation - src/generic/iterative_linear_solvers.cc - tidied GMRES - removed repeated copying of vectors - removed commented out code - src/generic/trilinos_solver.h & trilinos_solver.cc - when applying an oomph-lib preconditioner added functionality to allow the oomph-lib vectors to use external data in epetra vectors. By default this is switched off as it is dangerous. - reordered the setup methods to minimise the time that there is both an oomph-lib matrix and a trilinos matrix, and ensuring this does not occur when an oomph-lib preconditioner is setup - src/generic/trilinos_preconditioner.h & trilinos_preconditioner.cc - modified epetra matrix construction so column map is specified. - src/generic/trilinos_helpers.h & trilinos_helpers.cc - primarily tweaks to minimise copying of vectors etc - updated matrix construction methods to allow column map to be specified - src/generic/hypre_solver.cc - removed unused variable - src/generic/matrix_vector_product.h & matrix_vector_product.cc - introduced MatrixVectorProduct class. Just a wrapper to the Trilinos Epetra matrix vector product operations allowing the Epetra matrix to be setup once and retained. - src/generic/preconditioner_array.h & preconditioner_array.cc - tidied, and optimised and fixed solve_preconditioners(...) - src/generic/general_purpose_block_preconditioner.h - added a PreconditionerArray (to enable two level parallelisation) to the BlockDiagonalPreconditioner - added BlockTriangularPreconditioner - src/meshes/quarter_tube_mesh.template.h - removed memory leak - src/solid/solid_traction_elements.cc & solid_traction_elements.h - made block preconditionable - src/navier_stokes/navier_stokes_preconditioner.h & navier_stokes_preconditioner.cc - added bool to allow BFBt not to be formed, but applied as a sequence of matrix vector products now performed by MatrixVectorProduct operator - timings output for every step (if Doc_time) - src.interaction/fsi_preconditioners.h - repaired EXactFSIPreconditioner - demo_drivers/mpi/airy_cantilever.cc - add mpi demo driver to test BlockDiagonalPreconditioner and BlockTriangularPreconditioner - self_test/matrix_matrix_multiply/matrix_matrix_multiply.cc - fixed paranoid error - added the biharmoic demo_drivers to the repository ------------------------------------------------------------------------ r23 | jboyle | 2009-01-30 11:57:42 +0000 (Fri, 30 Jan 2009) | 28 lines CAREFUL: THIS IS WORK IN PROGRESS -- RICHARD STILL HAS WORK TO DO ON THE PARALLEL PRECONDITIONERS... SELF TESTS PASS APART FROM THE PSEUDO-SOLID COLLAPSIBLE TUBE RUNS WHEN RUN WITH RANGE CHECKING. MATTHIAS WILL FIX THESE. -- New flux control elements and impedance elements. -- Added ElementWithMovingNodes::Bypass_fill_in_jacobian_from_geometric_data to optionally suppress computation of shape derivatives. This, and the method for computation of the shape derivatives is now propagated properly during refinement. -- FSIWallElements now have a flag Ignore_shear_stress_in_jacobian that does what it says. -- SuperLU_dist: Reverted to using "LargeDiag" and "minimum degree based on A^T + T" pivoting strategy. Can be changed via wrapper. ------------------------------------------------------------------------ r22 | rmuddle | 2009-01-27 11:33:19 +0000 (Tue, 27 Jan 2009) | 29 lines - Fixed gcc 4.3.2 compile error in demo_drivers/interaction/fsi_driven_cavity/fsi_driven_cavity_problem.h - updated demo_drivers Makefile to stop make check descending into demo_drivers/mpi/ if no MPI - updated demo_drivers/eigenproblems for mpi error - updated src/generic/superlu_dist.c to provide access to SuperLUs function to convert CR into CC matrices (for use with SuperLU Dist global) - repaired broken paranoid check in problem.cc - iterative_linear_solver.h/.cc updated GMRES to access the vector elements by pointer instead of [] - updated frontal_solvers.h/.cc (wrapper to HSL lib) to work with DoubleVector - updated womersley/one_d_womersley change MPI_Finalize and add #ifdef HAVE_MPI - updated CRDoubleMatrix such that Trilinos matrix vector product is only used with more than one processor - cleaned hypre_solver.cc ------------------------------------------------------------------------ r21 | rmuddle | 2009-01-23 14:33:28 +0000 (Fri, 23 Jan 2009) | 95 lines CORE PARALLEL LINEAR ALGEBRA STUFF ================================== + Introduced OomphCommunicator + Essentially just an oomph-lib OO wrapper to a MPI_COMM + Replaced DistributionInfo with LinearAlgebraDistribution + Introduced DistributableLinearAlgebraObject + A base class for all distributable linear algebra objects: - DoubleVector (see below) - CRDoubleMatrix - Preconditioner - LinearSolver Just contains a LinearAlgebraDistribution and a few access functions + Introduced DoubleVector (double_vector.h/cc) + A vector designed for parallel linear algebra + Updated various matrices + Merged CRDoubleMatrix and DistributableCRDoubleMatrix into CRDoubleMatrix (CRDoubleMatrix is the only distributable matrix) + Moved and generalised the following methods in the DoubleMatrixBase class - residual(...) - max_residual(...) + updated all matrix methods to handle DoubleVectors + Updated MPI_Helpers + Replaced MPI_Helpers::setup(...) with MPI_Helpers::init(...) Create and MPI_Comm object for oomph-lib + Added MPI_Helpers::finalize() + Added an OomphCommunicator to Problem + updated all solvers/preconditioners to handle new CRDoubleMatrix and DoubleVector + Parallelised Oomph-Libs own CG (note BiCGStab and GMRES are not parallelised) + Modified SuperLUDist + Added TimingHelpers::timer() + Introduced PreconditionerArray For two level of parallelism in block preconditioners + Updated bifurcation tracking and eigen solvers for DoubleVectors etc + Note: not parallelised. BLOCK PRECONDITIONERS ====================== + updated existing BlockPreconditioner methods to handle new CRDoubleMatrix and DoubleVector + Changed Block Enumeration Scheme + Each type of DOF is labelled in an element. A block can comprise of more than one type of DOF + In FiniteElement changed the names of + get_block_numbers_for_unknowns(...) >> get_dof_numbers_for_unknowns(...) + nblock_types() >> ndof_types() + Parallelisation + All block preconditioning methods work with Distributed DoubleVectors and CRDoubleMatrix + block_setup(...) updated to work with non distributed problems + Updated NavierStokesLSCPreconditioner and FSIPreconditioner + if nproc > 2 then SuperLUDistPreconditioner used by default + Parallelised NavierStokesLSCPreconditioner::assemble_velocity_mass_matrix(); BIHARMONIC ========== + moved TopologicallyRectangularDomain and HermiteQuadMeshes to src/mesh + modified BiharmonicProblem for preconditioning + added BiharmonicPreconditioner + updated demo drivers DEMO DRIVERS ============ + Added driven cavity and direct solvers tests to demo_drivers/mpi + added direct solver tests to demo_drivers/linear_solvers ------------------------------------------------------------------------ r20 | ahazel | 2008-12-19 10:10:54 +0000 (Fri, 19 Dec 2008) | 7 lines Fixed this-> problems in gcc 4.1 Corrected one_d_womersely.cc driver so that it works in the absence of HYPRE or TRILINOS Added Coriolis force terms to spherical and cylindrical Navier Stokes elements so that problems can be solved in the rotating frame. ------------------------------------------------------------------------ r19 | mheil | 2008-12-18 08:12:42 +0000 (Thu, 18 Dec 2008) | 74 lines -- Completed optimisation of all four (displacement/pressure-displacement & adaptive/non-adaptive) versions of the solid element. Ought to give this another, very final sanity check while investigating if the pressure formulations can be made (more) symmetric while remaining stable. -- Fixed customise_dist.sh so that private directories are now included when option 1 is chosen. -- Modified autogen.sh so that validation for mpi-based demo drivers can be requested. This is done with the new flag --with-mpi-self-tests="mpirun -np 2" (or appropriate variants) to configure. This is most easily specified in the configure options file if the build is performed with autogen. The string must specifiy the command required to run an executable on two processors. In future, MPI-based self-test should be placed in the demo_drivers/mpi directory and where the output depends on the number of processors (e.g. for distributed problems) validata should be generated for two processors. -- INTERFACE CHANGE (sort of): Provided the option to wipe the validata from the distribution. 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 If this is not found, we'll assume that there's no validata anywhere. In that case, "make check" will still compile and run the demo drivers but not use fpdiff.py to compare them against the validata. The behaviour is thus similar to what's done if we don't have python. I therefore modified the "no_python" argument that used to be passed to all validate.sh scripts to suppress the execution of fpdiff.py and replaced it by "no_fpdiff". As a result all validate.sh scripts had to be changed. MAKE SURE YOU UPDATE ANY NEWS ONES BEFORE ADDING THEM TO THE DISTRIBUTION! To reflect the fact that the fpdiff-ing can now be suppressed for multiple reasons, renamed bin/validate_no_python.sh to bin/dummy_validate.sh -- Clarified that various messages that appear on the screen during the build process are issued by oomph-lib. -- Added additional safety checks to the optional deletion of an existing build directory. For starters, the suggestion for the name of the non-default directory is now /home/joe_user/build rather than /home/joe_user. Also, if we're offering to wipe the existing build directory, the user now has to go through a windows-like "are you sure?" step (after being shown the contents of the directory) to make sure we don't accidentally delete the user's home directory (at his/her request, but still...). Thanks to Cedric for spotting this potential trap (the hard way; luckily he'd just made a backup...). ------------------------------------------------------------------------ r18 | mheil | 2008-12-11 08:38:01 +0000 (Thu, 11 Dec 2008) | 76 lines -- Introduced SolidNode::node_update() which performs the node's auxiliary node update function (if any). This is required in pseudo-solid-based FSI problems for the automatic application of the no-slip condition following changes in the domain geometry, say. -- Removed all the casts that used to be required to access an algebraic node's auxiliary node update function. This cast isn't needed any more since the auxiliary node update function now lives in the Node base class. -- Wrote tutorial for disk compression with and without growth. -- Wrote tutorial for Lagrange-multiplier-based imposition of displacement constraints in solid mechanics. -- Wrote demo driver that demonstrates how to use pseudo-solid for Navier-Stokes problem with moving boundaries (but no FSI). -- Wrote demo drivers for FSI with pseudo-solid node update with and without mesh refinement -- Copied the optimisations for the analytical computation of the solid Jacobian to the refineable version of the displacement-based solid elements. Still do be done for pressure based ones. -- Moved YoungLaplace eqns and demo drivers across into main distribution and wrote two tutorials (for straightforward Young Laplace and Young Laplace with contact angle boundary conditions.) -- Reduced pressure increment in Airy cantilever beam validation to reduce number of Newton steps -- was very close to "non-convergence" and therefore unnecessarily shaky... -- Hacked demo_drivers/navier_stokes/three_d_static_cap/3d_static_cap.cc and demo_drivers/navier_stokes/falling_jet/falling_jet.cc so they still work with new PseudoSolid elements. -- Fixed memory leak in fsi preconditioner (didn't delete the solid block). -- Moved ImposeDisplacementByLagrangeMultiplierElement from driver code into src/solid/solid_traction_elements.h -- changed PseudoSolidElements so they work with the analytical solid Jacobian -- off diagonals are now computed separately. -- Removed the reset_in_solid_position_fd(k,i) for elements as it seems unnecessary (nobody used it!) and its arguments seemed too restrictive. -- INTERFACE CHANGE: All the bools in calls to the various node_update() functions were changed to const bool& (rather than bool). -- Added static boolean flag FSIWallElement::Dont_warn_about_missing_adjacent_fluid_elements to allow user to switch off warnings. -- Added static boolean flags GeneralisedElement::Suppress_warning_about_repeated_internal_data and GeneralisedElement::Suppress_warning_about_repeated_external_data to allow user to switch off warnings. ------------------------------------------------------------------------ r17 | jboyle | 2008-11-20 15:38:40 +0000 (Thu, 20 Nov 2008) | 10 lines No change really... Just forgot to mention in the last commit message that we can accelerate the computation of the FSI Jacobians by neglecting shear stress distributions and by neglecting the shape derivatives in the ElementsWithMovingNodes. No self-test for these yet (!) but Jonathan has tried them. ------------------------------------------------------------------------ r16 | jboyle | 2008-11-20 15:34:53 +0000 (Thu, 20 Nov 2008) | 48 lines Jonathan's commit: -- Have provided example for 1D impedance outflow elements for a 2D channel flow problem in demo_drivers/womersley/one_d_womersley The file flux_control_elements.h implements the newly developed flux control elements written by Jonathan. This will be moved into the general sources and be accompanied by new self-test. -- Changed the WomersleyImpedanceTubeBase class to take a second template argument to indicate the transverse dimension of the tube (i.e. the spatial dimension of the Womersley elements, so it's now WomersleyImpedanceTubeBase say. -- Removed (stupid) string comparisons to determine if timestepper is steady by replacing constructions like if (time_stepper_pt->type()!="Steady") by if (!time_stepper_pt->is_steady()) -- If compiled with MPI, the default sub-preconditioner in the fsi preconditioner is now SuperLU_dist. -- Fixed a memory leak in the fsi preconditioner. The extracted solid block is now deleted when we're done. -- Allows SuperLU_dist to work with CR matrices. -- Various other tidy ups. ------------------------------------------------------------------------ r15 | ahazel | 2008-10-20 13:40:17 +0100 (Mon, 20 Oct 2008) | 24 lines Included the disable_ALE() flag in axisymmetric navier-stokes equations. Fixed the errors that caused the spherical_navier_stokes tests to fail under the PARANOID flag. The main error was that the Ellipse geometric object in src/generic/geom_objects.h was not steady when constructed by passing the values of the two axes (as opposed to GeometricData). The slight mesh-motion thus induced caused the wrong answer to be computed in cylindrical coordinates and the the data in ref_cyl_CR.dat.gz has now been corrected. Fixed a += error in prescribed_displ_lagr_mult/Makefile.am. Corrected the comments about the ALE_is_disabled boolean flag so that they are consistent with what the flag does. This was repeated in a number of Equation classes. Found a few more this-> pointers Modified the build script to pass the correct cfortran.h flag -DgFortran or -Df2cFortran for versions 3.0 or 4.0 of the GNU compiler suite based what the compiler does rather than what it is called! Any other compiler-dependent flags must be specified in CXXFLAGS and an example is given in the intel file in the configure_options directory. ------------------------------------------------------------------------ r14 | ahazel | 2008-09-24 11:29:46 +0100 (Wed, 24 Sep 2008) | 27 lines Correction of some left-over this problems from previous check-in. Addition of navier stokes equations in spherical coordiantes and a number of test problems. Addition of a framework for introducing limiters to the DG framework and also for permitting the use of implicit timesteppers, but why would you want to? Modification of the numerical flux used in the euler equations has required re-generation of all the test data. This is still not properly validated, but is in the demo's for testing purposes. Addition of a weighting factor to include any geometric jacobian terms in Z2 error calculations in non-carteisan coordiante systems and the appropriate regeneration of test data. Corrected a bug so that the PeSt is now passed to the children of advection-diffusion and generalised advection-diffusion elements. Modified the clamped_shell_with_arclength_cont.cc to include all three pressure components and tweaked the parameter so that it converges. There is a strange problem on hector that Jonathan has discovered, but I haven't looked into this yet. The output is funny, but the solution is correct. ------------------------------------------------------------------------ r13 | mheil | 2008-08-16 12:20:18 +0100 (Sat, 16 Aug 2008) | 167 lines APOLOGY: This is a slightly rushed check-in before the wulf goes down and I disappear to Oz -- I know there are a few (trivial) compiler warnings... Will sort these out when I get back. -- Added analytical Jacobian to all versions of the solid elements. This is fully optimised for the non-refineable displacement-based formulations. The latest optimisations (suggested by Andrew) still have to be ported to the three other versions (the non-refinable pressure-based formulation and the two refineable counterparts). -- Added demo drivers that explore the performance of FD vs analytical Jacobian for 2D and 3D solid problems (both cantilever "beams"). -- Added demo driver that explores what happens when we approach incompressibility (square loaded by gravitational load) -- Added demo driver that demonstrates the use of Lagrange multipliers for application of displacement boundary conditions for solid elements. This is needed to use the pseudo-solid node update in FSI problems. -- Added the capability of using generalised boundary coordinates to the boundary nodes -- though this is not used anywhere (and I doubt it ever will...). However, previously existing interfaces "used" the generalised coordinate index in a way that would have rendered the results incorrect if there actually had been generalised boundary degrees of freedom. The old interfaces Node::set_coordinates_on_boundary(b,zeta) and Node::get_coordinates_on_boundary(b,zeta) still work. -- Added cumulative timer to oomph_utilities (both as a namespace and a class). -- Renamed src/generic/superlu_dist_bridge.c to src/generic/superlu_dist.c to be consistent with serial superlu namings. -- Added a broken public constructor to the Vector class to stop the compiler from complaining about all constructors being private. If called despite the fact that the argument is called "dont_call_this_constructor", the constructor throws an error telling the user to use vector instead. -- Added two new config option files (gcc with debugging and paranoia with/without doc) -- Added RankFourTensor and RankFiveTensor, and addded raw_direct_access() and offset() functions to the high-order tensors to allow direct access to internal C-style column major representation of the data. Of course, this totally defeats the "hide the implemenation" idea behind object orientation but is justified by the faster access speed that is possible (and turned out to be crucial for the optimisaton of the solid mechanics). Both functions come with strongly worded warnings that they should only be used by "expert users". -- Changed the way in which the Lagrangian coordinates of newly created solid nodes are created. By default we now use finite-element interpolation for all internal nodes and use the "undeformed MacroElement" representation (if it exists!) only for newly created nodes on the boundary. This ensures that, following mesh refinement a fully converged solution remains fully converged: If the Lagrangian coordinates of newly created nodes are based on the MacroElement representation while the Eulerian position is based on FE interpolation from the father, we create "deformations" during the refinement process. Under infinite mesh refinment, both methods obviously converge to the same solution so there is no real difference between the two. -- The (new) default method for the assignment of the Lagrangian coordinates of newly created solid nodes may be altered by using the function RefineableSolidElement::use_undeformed_macro_element_for_new_lagrangian_coords() This was introduced in several driver codes to keep the self-tests working. Will update this when documentation is written for these. Pseudo solid node update elements also retain the previously method as it's likely to give slightly better looking meshes. -- Changed the validata for demo_drivers/solid/simple_shear demo_drivers/navier_stokes/falling_jet demo_drivers/navier_stokes/three_d_static_cap These tests were always very sensitive and were affected yet again (by small amounts!) by the changes to the solid elements (analytical Jacobian, etc). These all ought to be looked at again very carefully when the documentation is written! -- Added the ElasticRefineableRectangularQuadMesh to the rectangular_quad_mesh.template.h and changed the default position of the mesh. It's now in line with the "normal" RectangularQuadMesh, i.e. its bottom left corner is at (0,0) -- or at the positon specified by the Vector argument, origin. Updated driver codes that use it accordingly. -- Yet more "flag" arguments in generic computation of residual/Jacobian converted from "unsigned" to "const unsigned&". -- changed add_jacobian_for_newmark_accel(jacobian); to fill_in_jacobian_for_newmark_accel(jacobian); in all solid mechanics elements. -- Changed get_residuals_for_ic(residuals); to get_residuals_for_solid_ic(residuals); in all solid mechanics elements. -- Changed fill_in_residuals_for_ic(residuals); to fill_in_residuals_for_solid_ic(residuals); in all solid mechanics elements. -- Changed order of arguments in \c PVDEquationsBase::BodyForceFctPt so that time goes first (as it should!). -- Fixed an error in the implementation of the generalised Hookean consitutive equation (somebody trying to be too clever...). We're now avoiding the computation of the elasticity tensor and go straight for the stress, which is the only thing that's needed... -- Made test for bypassing the computation of certain terms in the IsotropicStrainEnergyFunctionConstitutiveLaw exact. (Previously computation was suppressed if a term was less than 1e-10 (rather than zero) -- dangerous...) ------------------------------------------------------------------------ r12 | ahazel | 2008-07-14 10:19:28 +0100 (Mon, 14 Jul 2008) | 5 lines Changes to validation tolerance so that tests pass on the Intel compiler In addition added a couple of this->'s to refineable_navier_stokes_elements.cc so that the code compile under Intel. ------------------------------------------------------------------------ r11 | ahazel | 2008-07-13 17:59:55 +0100 (Sun, 13 Jul 2008) | 20 lines A number of changes that introduce new functionality: i) A discontinuous Galerkin base class, together with flux transport equations and specific advection and euler equations classes and elements and test cases ii) Explicit TimeSteppers (at present only Euler and 4th order Runge-Kutta) iii) A generalised Advection-Diffusion equation that can handle variable diffusivity and also conserved and non-conserved winds (which allows the use of more general flux boundary conditions) iv) An interface that permits a TriangleScaffoldMesh to be constructed from a triangulateio data structure, rather than from three files on the disk. Also fixed a few little typos and some ^M's that had appeared in a few files and the usual this problems. ------------------------------------------------------------------------ r10 | mheil | 2008-07-12 21:11:19 +0100 (Sat, 12 Jul 2008) | 11 lines -- Fixed a few "this->" and "std::" problems that manifested themselves on gcc 3.4.4. -- INTERFACE CHANGE: Got rid of all other instances where time argument was passed by copy rather than by constant reference -- as long as grep-ing for the pattern '(double t' detected it. In practice this involved various Navier-Stokes traction, body force and source functions. ------------------------------------------------------------------------ r9 | mheil | 2008-07-11 18:05:52 +0100 (Fri, 11 Jul 2008) | 31 lines -- Shape derivatives by chain rule (with analytical/FD-based version of the first term in the chain rule) now works. Analytical evalutiion is implemented for Poisson and Navier-Stokes and is being self-tested in fsi_osc_ring and algebraic_free_boundary_poisson driver codes. Reduction of cpu times by 30-50% in 3D, less so in most 2D problems. -- Reimplementation of the effect of no-slip on the shape derivatives allowed me to get rid of the Node::Use_raw_nodal_position flag and the associated access functions. -- Removed fill_in_... from ElementWithMovingNodes as its presence caused the shape derivatives to be evaluated twice, yielding the same result but as twice the computational cost! -- INTERFACE CHANGE: In Navier-Stokes equations: void get_body_force_nst(double time, ... double get_source_nst(double time, ... become void get_body_force_nst(const double& time, ... double get_source_nst(const double& time, ... ditto in derived classes. ------------------------------------------------------------------------ r8 | mheil | 2008-07-06 16:49:12 +0100 (Sun, 06 Jul 2008) | 2 lines Changed "+" to "+=" for EXTRA_DIST fixed in Makefile.am ------------------------------------------------------------------------ r7 | mheil | 2008-07-06 10:01:42 +0100 (Sun, 06 Jul 2008) | 64 lines -- Fixed a few errors in range-checking blocks, and got rid of a few instances of Vector -- code didn't compile in range checking mode. -- Introduced option to evaluate the derivatives of the element residuals w.r.t. to the geometric dofs in the ElementWithMovingNode class by (1) direct finite differencing (as before), (2) via the chain rule, (3) by whatever method is predicted to be faster. CURRENTLY THE DEFAULT IS BY DIRECT FINITE DIFFERENCING SO THE CODE BEHAVES AS BEFORE (will change this to "whatever is fastest" when the analytical evaluation of the shape derivatives in the Navier-Stokes version is working; see below. -- Since the "jacobian from geometric data" in this class is therefore no longer guaranteed to be evaluated by FD, changed function names from fill_in_jacobian_from_geometric_data_by_fd(...) to fill_in_jacobian_from_geometric_data(...) -- Provided default, virtual, FD-based implementation of FiniteElement::get_dresidual_dnodal_coordinates( RankThreeTensor& dresidual_dnodal_coordinates); This can be overloaded for specific elements where the shape where the shape derivatives can be evaluated analytically. -- Moved the auxiliary node update function machinery into the Node base class and introduced Node::perform_auxiliary_node_update_fct() -- Introduced additional boolean, Use_raw_nodal_position, into node class to optionally bypass the hanging node information during the evaluation of shape derivatives by the chain rule. -- Introduced analytical shape derivatives into the refineable and non-refineable Poisson elements. Same for Navier-Stokes but something's still not working 100% -- the no slip condition... -- Replaced sole constructor for FSIWallElement by argument-free version to allow wrapping. Lagrangian and Eulerian coordinates of underlying GeomObject etc must now be set by an explicit call to setup_fsi_wall_element() -- typically done in the constructor of the derived (specific) FSIWallElement. As a result, FSIHermiteBeamElements and FSISolidTractionElements no longer call constructor of FSIWallElement and GeomObject -- Provided GeomObject::set_nlagrangian_and_ndim() to allow setting of these parameters outside the constructor -- needed after re-write of FSIWallElement. -- Added RankFourTensor and range-checked it and the RankThreeTensor -- Added Levenberg Marquardt fitter to utilities. -- Added FSIDiagHermiteShellElement to shell_elements.h and made ClampedHermiteShellBoundaryConditionElements block preconditionable. -- Moved the shell mesh into meshes as CircularCylindricalShellMesh. -- Added driver code & validation for oscillating shell -- checks that rate of work done by external load balances the rate of change of kinetic + strain energy. ------------------------------------------------------------------------ r6 | jboyle | 2008-06-27 16:12:56 +0100 (Fri, 27 Jun 2008) | 8 lines Ported a few changes to the previous distribution to the new repository: -- fixed a bug in the computation of the energies in the shell elements. -- Added SuperLU_dist_preconditioner -- a few more tidy ups. ------------------------------------------------------------------------ r5 | mheil | 2008-06-17 16:14:21 +0100 (Tue, 17 Jun 2008) | 12 lines - Finalised the documentation of the linear solvers and preconditioners - Time_pt is now deleted in the Problem destructor -- it's the only thing that's actually made internally by the Problem (when Problem::add_time_stepper_pt() is called for the first time), so it should also be deleted by the Problem. Users who store pointers to the Problem's Time_pt should expect trouble with the (dangling) pointer when the Problem has been deleted... ------------------------------------------------------------------------ r4 | mheil | 2008-06-13 19:50:59 +0100 (Fri, 13 Jun 2008) | 4 lines Removed all con.sh files as cygwin-based svn stalled at the next one (after having removed the one in unsteady heat...). ------------------------------------------------------------------------ r3 | mheil | 2008-06-13 13:10:10 +0100 (Fri, 13 Jun 2008) | 10 lines Removed doc/unsteady_heat/two_d_unsteady_heat/nondist_figures/con.sh to see if this fixes the problem when this file is checked out under cygwin. ------------------------------------------------------------------------ r2 | ahazel | 2008-06-12 14:28:54 +0100 (Thu, 12 Jun 2008) | 5 lines The inevitable small changes: Changed a finite-precision tolerance in the soluble_surfactant test Modified the customise_dist.sh script to correctly handle a special case. ------------------------------------------------------------------------ r1 | ahazel | 2008-06-12 09:57:31 +0100 (Thu, 12 Jun 2008) | 4 lines Creation of the new public repository. The change_log from the old repository is stored in the reposiory in the file doc/change_log/final_svn_log.txt ------------------------------------------------------------------------