![]() |
v0.7.19
|
If you write a paper using results obtained with the help of MoFEM, please cite one or more of the following references:
Version 0.5.42 cite as
DOI:
L. Kaczmarczyk, Z. Ullah, K. Lewandowski, Xuan Meng, Xiao-Yi Zhou, C. Pearce. (2017). MoFEM-v0.5.42 [Data set]. Zenodo. http://doi.org/10.5281/zenodo.438712
Each user module can have own DOI and reference. All module references supplements MoFEM reference. For example homogenisation module DOI as follows
The current MoFEM version can be identified by Semantic Versioning and Git Commit Id. Git Commit Id is unique and points to particular code commit. Semantic Versioning is not unique, more than one commits to git repository can have the same version.
First two lines of every executed code which is build with MoFEM library look like that
That allows to identify git commit id and human readable MoFEM version.
MoFEM is developed continuously (see How MoFEM is developed?) and any commit which introducing changes that directly have an impact on users modules implementation should result in increment build version. For example if new functionality is added, name of interface function changed or some function deprecated etc. that will result in incremented build version. Note that each users module has set minimal MoFEM version to which is compatible, see How to add user module? for details.
On the other hand changes/improvements to core library like modification of local variable name or when local documentation added, that will result in new commit however will NOT result in new build version, since implementation of users modules is not influenced by changes in main library.
Build version is in range from 0-100, at the end of the range minor version should be automatically incremented. Minor version is in the range from 0-10, at the end of the range major version should be automatically incremented. The minor or major version could be changed at any time when major/minor feature is initiated.
In addition to above rules, the general principles could apply, in short,
The MoFEM version can be set in CMakeList.txt located in root source directory, in lines
MoFEM is developed continuously, i.e. any merged pull request to the CDashTesting branch triggers automatic testing on the development server. The code is verified during when a pull request is accepted and merged and validated when the test on the development server are passed. If tests are passed CDashBranch is merged to master branch.
In you library directory execute
This create directory html. Open file html/index.html to see results in your browser.
If problem is large, mesh can be partitioned for to save memory and improve efficiency. This can be done using native MoFEM tool,
The partitioned mesh is saved to file out.h5m in current working directory.
For large meshes, partitioning can be in parallel, for example
Code is run using direct solver, i.e. MUMPS on coarse level. Note that loaded mesh is portioned and each processor only reads part of the mesh, i.e. -my_is_partitioned.
MoFEM update on Live USB stick:
Following command run test verifying updated code:
If you run MoFEM update at University of Glasgow behind proxy server, set proxy servers as follows:
You can run tests and report results to MoFEM CDash web page. Form mofem user modules build directory executing run script
Results of test can be seen on http://cdash.eng.gla.ac.uk/cdash/.
Note that test tests for MoFEM library and User Modules are run independently and can be seen as a two different projects.
If you run test behind proxy server you can have to set http_proxy and http_proxy environmental variables. For example if you run mofem at Glasgow University, please do:
You can as well run ctest directly by simply executing command line:
where option -V sets verbose version and all test output is printed on screen and -D Experimental tels ctest to submit results to Experimental build on CDash MoFEM server.
In cubit you need to generate 10 node tetrahedral. You simply create block and set element type to TETRA10, as follows
In the code, you need to create field to keep geometry
Next set order of approximation field. If you have 10 node tetrahedrons, you need to have at least 2nd order polynomials to approximate geometry;
The last step is to prject information from 10 node terahedrons on hierarchical approximation field, as follows
Look at examples of use to user modules, for example elasticity.cpp.
MoFEM is a core library providing functionality for implementation of user modules where applications for particular finite elements or problems are implemented. User module is an independent repository, private or public and independently managed by its owner.
User module is added to the project by cloning repository into directory $HOME/mofem-cephas/mofem/users_modules, for example, module for computational homogenisation has repository in Bitbucket and can be added by
Sometimes users modules depend on other modules, in that case, homogenisation module uses some old obsolete classes (which should not be used in new developments), thus in this particular case addition you have to clone also obsolete module
Once the module is added, you have to go main build directory where users modules are located and rebuild the code. So you have to do
Note the first command is used to trigger reconfiguration of users modules with the new module.
Note, each user module consist InstalledAddModule.cmake, with beginning lines,
In that file minimal version of the core library is given (e.g. v0.5.63). Thus if you have too old version of core lib, it won't be added and cmake will generate an error. In that case, you need to update core library by pulling most recent version from Bitbucket repository and install core library.
User module can be independent repository, private or public and independently managed and owned form MoFEM library. If user module is part of MoFEM repository can be simply added by adding it to ModulesLists.cmake in users modules directory. However is recommended that user module is project/respository by its own, repository should be cloned to users modules directory, f.e. in mofem-cephas/mofem/users_modules
In user module directory directory should be file file, InstalledAddModule.cmake, with content,
To profile code in MacOS X environment, from line command you execute instruments, for example
This generates directory instrumentscli0.trace and for next run instrumentscli1.trace, and similarly for subsequent runs. You can see changes in execution of the code by
If you use Linux you can alternatively use Valgrind, see How to profile code with Valgrind?.
See PETSc documentation http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Profiling/PetscLogStageRegister.html and examples http://www.mcs.anl.gov/petsc/petsc-current/src/ksp/ksp/examples/tutorials/ex9.c.html
You have to install Valgrind http://valgrind.org and graphic user interface KCachegrind http://kcachegrind.sourceforge.net/html/Home.html. If you using Linux, for example ubuntu you can do that executing following commands,
If you using OS X you can use Homebrew http://brew.sh to make installation,
If you have packages installed, follow instruction from http://kcachegrind.sourceforge.net/html/Documentation.html
You can use gdb inside docker, remembering to set cmake with debugging build type, for example
It is one non trivial trick that you have to do, to make debugging possible in docker, you need to run docker container in privileged mode, for example
MoFEM is copyright by Lukasz Kaczmarczyk (Lukasz.Kaczmarczyk at glasgow.ac.uk) and has received contributions by several people. MoFEM can be used freely for educational, research or commercial purposes by other institutions.
Users modules are not part of MoFEM library and can be created privately, independently form MoFEM developers. User modules may follow different license agreement and copyrights. However, all users modules which are created at Glasgow University are under the same license agreement as main MoFEM library.
List is generated automatically at time when documentation is build based on contributions to main git repository. Note that particular module can have separate contributors list. If one author uses more than one name the same person can appear more than once.
Detailed git-statistic for core lib only http://mofem.eng.gla.ac.uk/mofem/html/git-stats
MoFEM lib contributors 5117 Lukasz Kaczmarczyk <likask at wp.pl> 875 likask <Lukasz.Kaczmarczyk at glasgow.ac.uk> 213 Lukasz Kaczmarczyk <Lukasz.Kaczmarczyk at glasgow.ac.uk> 177 Zahur Ullah <zahur.ullah at glasgow.ac.uk> 173 Lukasz Kaczmarczyk <lukasz.kaczmarczyk at glasgow.ac.uk> 114 Dimitrios Kourepinis <dimitrios.kourepinis at glasgow.ac.uk> 105 Thomas Meng <m.xuan.1 at research.gla.ac.uk> 75 Karol Lewandowski <k.lewandowski.1 at research.gla.ac.uk> 73 Mike Cortis <mikecortis at gmail.com> 61 Michael Cortis <m.cortis.1 at research.gla.ac.uk> 43 Euan Muir <euan.j.muir at gmail.com> 36 Ross Mackenzie <r.mackenzie.2 at research.gla.ac.uk> 23 Euan Muir <e.muir.1 at research.gla.ac.uk> 23 likask <lukasz at rdb-srv1.eng.gla.ac.uk> 17 Hassan Al-Budairi <Hassan.Al-Budairi at glasgow.ac.uk> 12 likask <likask at wp.pl> 11 Zahur Ullah <Zahur.Ullah at glasgow.ac.uk> 7 zhou <xiaoyi.zhou at ncl.ac.uk> 7 Ignatios Athanasiadis <ignathanas at glaroam2-176-233.wireless.gla.ac.uk> 6 Ignatios Athanasiadis <ignatios.athanasiadis at glasgow.ac.uk> 6 Michael Cortis <micgemma at gmail.com> 6 Michael Cortis <michael at rdb-srv1.eng.gla.ac.uk> 6 Ignatios Athanasiadis <ignathanas at glaroam2-184-130.wireless.gla.ac.uk> 4 dkour <dimitrios.kourepinis at glasgow.ac.uk> 4 Ignatios Athanasiadis <ignathanas at glaroam2-148-75.wireless.gla.ac.uk> 3 Ignasios <ignatios at rdb-srv1.eng.gla.ac.uk> 3 Euan Muir <euan at Euans-MacBook-Pro.local> 3 mofem <Lukasz.Kaczmarczyk at glasgow.ac.uk> 2 Lukasz Kaczmarczyk <kkb14112 at archie-w.archie.cluster.local> 2 Costy Kodsi <c.kodsi.1 at research.gla.ac.uk> 2 mikecortis <m.cortis.1 at research.gla.ac.uk> 2 rossmackenzie <r.mackenzie.2 at research.gla.ac.uk> 1 DESKTOP-9KQ812P\erich <e.richardson.1 at research.gla.ac.uk> 1 Ignatios Athanasiadis <ignathanas at glaroam2-170-178.wireless.gla.ac.uk> 1 Chris Pearce <Chris.Pearce at glasgow.ac.uk>
Modules contributors contact_mechanics 41 Zahur Ullah <zahur.ullah at glasgow.ac.uk> 12 Lukasz Kaczmarczyk <likask at wp.pl> optimal_mass_transport 1 Lukasz Kaczmarczyk <likask at wp.pl> obsolete 44 Lukasz Kaczmarczyk <likask at wp.pl> moisture_transport 11 Lukasz Kaczmarczyk <likask at wp.pl> solid_shell_prism_element 228 Lukasz Kaczmarczyk <likask at wp.pl> 12 Zahur Ullah <zahur.ullah at glasgow.ac.uk> 3 likask <Lukasz.Kaczmarczyk at glasgow.ac.uk> minimal_surface_equation 37 Lukasz Kaczmarczyk <likask at wp.pl> homogenisation 122 Lukasz Kaczmarczyk <likask at wp.pl> 26 Zahur Ullah <zahur.ullah at glasgow.ac.uk> 6 Zahur Ullah <Zahur.Ullah at glasgow.ac.uk> 5 likask <Lukasz.Kaczmarczyk at glasgow.ac.uk> 2 Lukasz Kaczmarczyk <Lukasz.Kaczmarczyk at glasgow.ac.uk> 2 Zahur Ullah <zahur.ullah1 at gmail.com> 1 Zahur Ullah <z.ullah at ulster.ac.uk> 1 David Small <davidsmall at glaroam2-191-9.wireless.gla.ac.uk> ground_surface_temperature 28 Lukasz Kaczmarczyk <likask at wp.pl> fracture_mechanics 418 Lukasz Kaczmarczyk <likask at wp.pl> 10 Karol Lewandowski <k.lewandowski.1 at research.gla.ac.uk> 6 Lukasz Kaczmarczyk <Lukasz.Kaczmarczyk at glasgow.ac.uk> 6 Zahur Ullah <zahur.ullah at glasgow.ac.uk> 4 Chris Pearce <Chris.Pearce at glasgow.ac.uk> 1 Lukasz Kaczmarczyk <lukasz.kaczmarczyk at glasgow.ac.uk> cell_engineering 85 Lukasz Kaczmarczyk <likask at wp.pl> 25 Karol Lewandowski <k.lewandowski.1 at research.gla.ac.uk> 1 likask <lukasz at rdb-srv1.eng.gla.ac.uk> gels 136 Euan Richardson <Euan Richardson> 44 Lukasz Kaczmarczyk <likask at wp.pl> 26 unknown <0800939r at erichardson-lap.eng-ad.gla.ac.uk> 9 DESKTOP-9KQ812P\erich <e.richardson.1 at research.gla.ac.uk> 5 Euan_R <e.richardson.1 at research.gla.ac.uk> 1 Lukasz Kaczmarczyk <Lukasz.Kaczmarczyk at glasgow.ac.uk> 1 likask <Lukasz.Kaczmarczyk at glasgow.ac.uk> 1 unknown <0800939R at erichardson-lap.eng-ad.gla.ac.uk> 1 Euan Richardson <euanrichardson at rdb-srv1.eng.gla.ac.uk> small_strain_plasticity 76 Lukasz Kaczmarczyk <likask at wp.pl> 12 Zahur Ullah <zahur.ullah at glasgow.ac.uk> 6 Zahur Ullah <Zahur.Ullah at glasgow.ac.uk> 4 likask <Lukasz.Kaczmarczyk at glasgow.ac.uk> 1 likask <lukasz at rdb-srv1.eng.gla.ac.uk> bone_remodelling 124 Lukasz Kaczmarczyk <likask at wp.pl> 81 Karol Lewandowski <k.lewandowski.1 at research.gla.ac.uk> 3 karol41 <k.lewandowski.1 at research.gla.ac.uk> 1 John Marshall <John.F.Marshall at glasgow.ac.uk> helmholtz 57 Thomas Meng <m.xuan.1 at research.gla.ac.uk> 45 Lukasz Kaczmarczyk <likask at wp.pl>
List is generated with command,
Note that contributions to forked module are not on the list.