{"id":276,"date":"2013-04-25T13:56:40","date_gmt":"2013-04-25T13:56:40","guid":{"rendered":"http:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/?page_id=276"},"modified":"2017-05-25T16:23:13","modified_gmt":"2017-05-25T16:23:13","slug":"mumps","status":"publish","type":"page","link":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/software\/applications\/mumps\/","title":{"rendered":"MUMPS"},"content":{"rendered":"<h2>Overview<\/h2>\n<p><strong>MU<\/strong>ltifrontal <strong>M<\/strong>assively <strong>P<\/strong>arallel sparse direct <strong>S<\/strong>olver. See <a href=\"http:\/\/graal.ens-lyon.fr\/MUMPS\/\">http:\/\/graal.ens-lyon.fr\/MUMPS\/<\/a>. MUMPS is a distributed multifrontal solver (F90, MPI based)  for the solution of large sparse systems of linear equations A x = b using Gaussian elimination. The parallel version of MUMPS is installed.<\/p>\n<p>Compiled for <strong>AMD Bulldozer<\/strong> nodes only. This software will not work on Intel nodes (will return Illegal instruction error).<\/p>\n<p>MUMPS was compiled against the following libraries, which are all available in the installation tree:<\/p>\n<ul>\n<li>ScaLAPACK, which also provides BLACS (v2.0.2 &#8211; compiled from source)<\/li>\n<li>PT-SCOTCH (v5.1.12_esmumps &#8211; compiled from source)<\/li>\n<li>ParMETIS (v4.0.2 &#8211; compiled from source)<\/li>\n<\/ul>\n<p>The following library is external to the MUMPS installation<\/p>\n<ul>\n<li>ACML, which provides BLAS and LAPACK (v5.1.0 &#8211; provided by AMD as an optimized library)<\/li>\n<\/ul>\n<p>All compilation was performed with the AMD Open64 compiler using <code>-O3 -march=bdver1<\/code> optimization and architecture flags and the OpenMPI 1.6 InfiniBand MPI layer.<\/p>\n<p>PT-SCOTCH and ParMETIS both use 64bit integers for indices. The following config options were used:<\/p>\n<ul>\n<li>PT-Scotch: <code>IDXSIZE64<\/code><\/li>\n<li>ParMetis: <code>IDXTYPEWIDTH 64<\/code>, <code>REALTYPEWIDTH 32<\/code><\/li>\n<\/ul>\n<h2>Restrictions on use<\/h2>\n<p>MUMPS is free software under the CeCILL-C licence (essentially GNU LGPL); see the <a href=\"http:\/\/mumps.enseeiht.fr\/index.php?page=dwnld\">Conditions of Use<\/a> for full details.  However, versions linked with the proprietary ParMETIS and ACML libraries can&#8217;t be distributed; see also the <a href=\"http:\/\/glaros.dtc.umn.edu\/gkhome\/metis\/parmetis\/download\">ParMETIS licence<\/a>.<\/p>\n<h2>Set up procedure<\/h2>\n<p>You must be on a Bulldozer node to compile and run any programs which use the MUMPS libraries. See the <a href=\"\/csf-apps\/software\/applications\/compilersamd\/openmpibd\">OpenMPI on AMD Bulldozer Compute Nodes<\/a> page for full details, but essentially you should do:<\/p>\n<pre class=\"in1\">\r\nqrsh -l bulldozer -l short\r\nmodule load libs\/open64-4.5.2\/mumps\/4.10.0\r\n<\/pre>\n<p>This will also load the Open64 compiler, ACML and OpenMPI IB modules: <code>compilers\/amd\/4.5.2<\/code>, <code>libs\/amd\/acml\/5.1.0<\/code> and <code>mpi\/open64-4.5.2\/openmpi\/1.6-ib-amd-bd<\/code>.<\/p>\n<h2>Running the application<\/h2>\n<p>The MUMPS header files and libraries are located in the following directories, with <code>$MUMPSROOT<\/code> and other variables being set by the modulefile.<\/p>\n<ul>\n<li><code>$MUMPSROOT<\/code>\/include<\/li>\n<li><code>$MUMPSROOT<\/code>\/lib<\/li>\n<\/ul>\n<p>Compilation requires the use of <code>mpicc<\/code> and <code>mpif90<\/code> when linking against MUMPS libraries. The easiest method of compiling is to write a <em>Makefile<\/em> which includes the MUMPS compilation settings file<\/p>\n<ul>\n<li><code>$MUMPSROOT<\/code>\/Makefile.inc<\/li>\n<\/ul>\n<p>For example, create a Makefile that looks similar to the one below (download <a href=\"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-content\/uploads\/Makefile.mk\">Makefile.mk<\/a> &#8211; you may want to rename it from <code>Makefile.mk<\/code> to <code>Makefile<\/code>)<\/p>\n<pre class=\"in1\">\r\n# Sample MUMPS Makefile\r\n# Note 1: Requires the MUMPS modulefile to be loaded\r\n# Note 2: Indented lines MUST begin with a TAB, not 8 spaces (cut-n-paste warning!)\r\n\r\n# Makefile.inc (below) requires that topdir be set.\r\ntopdir=$(MUMPSROOT)\r\nlibdir=$(topdir)\/lib\r\n\r\n# Compilation settings. In particular CC=mpicc, FC=mpif90, FL=mpif90.\r\ninclude $(topdir)\/Makefile.inc\r\nLIBMUMPS_COMMON = $(libdir)\/libmumps_common$(PLAT)$(LIBEXT)\r\n\r\n# My executables (Fortran and C examples) - MODIFY as reqd.\r\nall: myFmumps.exe myCmumps.exe\r\n\r\n# FORTRAN example using single precision library. Assumes source file is named myFmumps.F - MODIFY as reqd.\r\nLIBSMUMPS = $(libdir)\/libsmumps$(PLAT)$(LIBEXT) $(LIBMUMPS_COMMON)\r\nmyFmumps.exe: myFmumps.o\r\n        $(FL) -o $@ $(OPTL) myFmumps.o $(LIBSMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)\r\n\r\n\r\n# C example using double precision library. Assumes source file is named myCmumps.c - MODIFY as reqd.\r\n# NOTE: We DO use FL (mpif90) to link a C code against the MUMPS libraries.\r\nLIBDMUMPS = $(libdir)\/libdmumps$(PLAT)$(LIBEXT) $(LIBMUMPS_COMMON)\r\nmyCmumps.exe: myCmumps.o\r\n        $(FL) -o $@ $(OPTL) myCmumps.o  $(LIBDMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)\r\n\r\nclean:\r\n        rm -f *.exe *.o\r\n\r\n# How .F and .c source files are compiled\r\n.SUFFIXES: .c .F .o\r\n.F.o:\r\n        $(FC) $(OPTF) $(INCS) -I. -I$(topdir)\/include -c $*.F $(OUTF)$*.o\r\n.c.o:\r\n        $(CC) $(OPTC) $(INCS) -I. -I$(topdir)\/include -c $*.c $(OUTC)$*.o\r\n<\/pre>\n<p>Simply run <code>make<\/code> to compile with the above <code>Makefile<\/code>.<\/p>\n<h3>Example Code<\/h3>\n<p>Simple example programs are available in <code>$MUMPSROOT\/examples\/<\/code>. To use the sample code as a basis for your own projects, copy the examples, modify and recompile, as shown:<\/p>\n<pre class=\"in1\">\r\nqrsh -l bulldozer -l short\r\nmodule load libs\/open64-4.5.2\/mumps\/4.10.0     # Will load compiler, ACML and openmpi BD modules\r\nmkdir -p ~\/scratch\/mumps\/examples              # Or what ever you want to call the directory\r\ncd ~\/scratch\/mumps\/examples\r\ncp $MUMPSROOT\/examples\/* .                     # Notice the . at the end of the command\r\n# Modify the .F or .c source files if using the examples as a starting point.\r\n# Now recompile.\r\nmake clean\r\nmake\r\n<\/pre>\n<p>Various settings used for compilation are given in the <em>include<\/em> file<\/p>\n<pre class=\"in1\">$MUMPSROOT\/Makefile.inc<\/pre>\n<p>The external libraries against which the MUMPS libraries were compiled are available in<\/p>\n<pre class=\"in1\">$MUMPSBASE\/external\/<\/pre>\n<h3>Serial batch job submission<\/h3>\n<p>Only the parallel version of MUMPS has been compiled. <\/p>\n<h3>Parallel batch job submission<\/h3>\n<p>You must be on an AMD Bulldozer node to run any code dependent on MUMPS. These nodes have a requirement that jobs be a multiple of 64 processes. The following jobscript will run one of the MUMPS example programs (name the file <code>mumps.qsub<\/code> for example):<\/p>\n<pre class=\"in1\">\r\n#!\/bin\/bash\r\n#$ -S \/bin\/bash\r\n#$ -cwd\r\n#$ -V\r\n#$ -pe orte-64bd-ib.pe 64     # Must be a multiple of 64\r\n\r\nmodule load libs\/open64-4.5.2\/mumps\/4.10.0\r\n\r\n# See the examples\/ directory copied earlier\r\nmpirun -n $NSLOTS .\/dsimpletest < input_simpletest_real\r\n<\/pre>\n<p>Submit the job to the batch system <strong>from the login node<\/strong> using<\/p>\n<pre class=\"in1\">\r\n# You should be on the login node, not a bulldozer, node at this point\r\nmodule load libs\/open64-4.5.2\/mumps\/4.10.0\r\nqsub -V mumps.qsub\r\n   #\r\n   # or what ever you have called your jobscript\r\n   #\r\n<\/pre>\n<h2>Further info<\/h2>\n<p>The MUMPS user guide is available at <code>$MUMPSROOT\/doc\/userguide_4.10.0.pdf<\/code> or see the online documentation at the following pages:<\/p>\n<ul>\n<li>MUMPS: <a href=\"http:\/\/graal.ens-lyon.fr\/MUMPS\/\">http:\/\/graal.ens-lyon.fr\/MUMPS\/<\/a><\/li>\n<li>PT-SCOTCH: <a href=\"http:\/\/www.labri.fr\/perso\/pelegrin\/scotch\/\">http:\/\/www.labri.fr\/perso\/pelegrin\/scotch\/<\/a><\/li>\n<li>ParMETIS: <a href=\"http:\/\/glaros.dtc.umn.edu\/gkhome\/metis\/parmetis\/overview\">http:\/\/glaros.dtc.umn.edu\/gkhome\/metis\/parmetis\/overview<\/a><\/li>\n<li>ScaLAPACK: <a href=\"http:\/\/www.netlib.org\/scalapack\">http:\/\/www.netlib.org\/scalapack<\/a><\/li>\n<\/ul>\n<h2>Updates<\/h2>\n","protected":false},"excerpt":{"rendered":"<p>Overview MUltifrontal Massively Parallel sparse direct Solver. See http:\/\/graal.ens-lyon.fr\/MUMPS\/. MUMPS is a distributed multifrontal solver (F90, MPI based) for the solution of large sparse systems of linear equations A x = b using Gaussian elimination. The parallel version of MUMPS is installed. Compiled for AMD Bulldozer nodes only. This software will not work on Intel nodes (will return Illegal instruction error). MUMPS was compiled against the following libraries, which are all available in the installation.. <a href=\"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/software\/applications\/mumps\/\">Read more &raquo;<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":31,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-276","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/pages\/276","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/comments?post=276"}],"version-history":[{"count":9,"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/pages\/276\/revisions"}],"predecessor-version":[{"id":3848,"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/pages\/276\/revisions\/3848"}],"up":[{"embeddable":true,"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/pages\/31"}],"wp:attachment":[{"href":"https:\/\/ri.itservices.manchester.ac.uk\/csf-apps\/wp-json\/wp\/v2\/media?parent=276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}