[Dune] Parallel ALUGrid and gmshreader

Steffen Müthing steffen.muething at iwr.uni-heidelberg.de
Thu Jul 3 12:12:46 CEST 2014


Hi Lukas,

Am 03.07.2014 um 11:38 schrieb Lukas Riedel <riedel-lukas at gmx.de>:

> Dear Developers,
> 
> I built a working code in PDELab for parallel computation using YaspGrid and OpenMPI.

great to hear! :-)

> Now i want to use the gmshreader and the ALUgrid (simplex,2D) for the same code but i cannot find out how to initialize the ALUgrid in parallel mode.
> 
> OS: Mac OS X 10.9.3 Mavericks
> GCC: gcc (MacPorts gcc49 4.9-20140416_2) 4.9.0 20140416 (prerelease)
> G++: g++ (MacPorts gcc49 4.9-20140416_2) 4.9.0 20140416 (prerelease)
> clang: 	clang version 3.5.0 (trunk 210448)
> 	Target: x86_64-apple-darwin13.2.0
> 	Thread model: posix
> CC: 		Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
> 	Target: x86_64-apple-darwin13.2.0
> 	Thread model: posix
> DUNE-modules: 	dune-common.............: version 2.3.0
> 		dune-geometry...........: version 2.3.0
> 		dune-grid...............: version 2.3.0
> 		dune-istl...............: version 2.3.0
> 		dune-localfunctions.....: version 2.3.0
> 		dune-pdelab.............: version 2.0-dev
> 		dune-typetree...........: version 2.3-dev
> 		ALBERTA.................: version 2.0
> 		ALUGrid.................: version 1.52 (parallel)
> 
> 
> With YaspGrid, I wrote a „YaspPartition“ class and passed the MPI communicator:
> 
>       int overlap=1;
>       const YaspPartition<2> yp;
>       Dune::YaspGrid<2> grid(helper.getCommunicator(),L,N,periodic,overlap,&yp);
> 
> Now, I use the gmshreader in the following way:
> 
>        typedef Dune::ALUGrid<2,2,Dune::simplex,Dune::conforming> GridType;
>        Dune::shared_ptr<GridType> gridp(Dune::GmshReader<GridType>::read(meshfilename));
> 
> The check whether the created ALUGrid Type is parallel ( Dune::Capabilities::isParallel<GridType>::v ) returns false.
> 
> The output when executing $mpirun -n 2 <myProgram> reveals that two processes are executed, but both seem to calculate the whole problem on their own:
> (every line doubled, of course)
> 
> parallel run on 2 process(es)
> 
> Reading 2d Gmsh grid...
> version 2.2 Gmsh file detected
> file contains 378 nodes
> file contains 754 elements
> number of real vertices = 378
> number of boundary elements = 68
> number of elements = 686
> Created serial ALUGrid<2,2,simplex,conforming>
> 
> rank 0 number of DOF = 378
> number of DOF 378
> 
> I built ALUGrid using METIS, parMETIS and OpenMPI
> 
> 	./configure CC=gcc CXX=g++ F77=gfortran —prefix=$HOME/opt/alugrid --with-metis=/usr/local --with-parmetis=/usr/local 
> 	CPPFLAGS="$CPPFLAGS `../dune-common*/bin/mpi-config --cflags --disable-cxx —mpicc=mpicc`" LDFLAGS="$LDFLAGS `../dune-common*/bin/mpi-config --libs --disable-cxx 
> 	--mpicc=mpicc`“ CXXFLAGS="-O3 -DNDEBUG“ CFLAGS="-O3 -DNDEBUG“
> 
> and DUNE successfully checks the serial and parallel usability of ALUGrid:
> 
> configure: searching for ALUGrid in /Users/lriedel/opt/alugrid...
> checking ALUGrid version >= 1.52... yes (ALUGrid-1.52)
> checking alugrid_serial.h usability... yes
> checking alugrid_serial.h presence... yes
> checking for alugrid_serial.h... yes
> checking alugrid_parallel.h usability... yes
> checking alugrid_parallel.h presence... yes
> checking for alugrid_parallel.h… yes
> 
> How can i initialize a parallel ALUgrid using the gmshreader? How can i access/change the load balance of the grid?

Unfortunately, this cannot work - ALUGrid is currently only parallel in 3D (yes, that’s hard to gleam from the documentation…),
cf. http://users.dune-project.org/projects/main-wiki/wiki/Grid-Manager_Features. AFAIK, this should change in the near future,
but until then, you can use UGGrid instead. Get it from http://www.iwr.uni-heidelberg.de/frame/iwrwikiequipment/software/ug,
rebuild dune-grid and reconfigure your own module. On the other hand, it might be a good idea to update to DUNE 2.3.1 while
you’re at it, the update fixed quite a number of ugly bugs…

If you need an example on how to use the Gmshreader, take a look at dune-pdelab-howto, e.g. at src/convection-diffusion/ldomain.cc,
where an UGGrid is used in parallel mode. The important part is the call to loadBalance().

> 
> Currently, i am using the following ISTL Solver Backend:
> 
>     typedef Dune::PDELab::ISTLBackend_BCGS_AMG_SSOR<IGO> LS;
>     LS ls(gfs,5000,0,false,true);
> 
> As ALUgrid has no overlap but only ghosts, do i need to use a NOVLP solver backend then?
> Are the ghosts assembled automatically?

Yes, you will have to switch to a nonoverlapping backend and also have to switch the GridOperator
to nonoverlapping mode (it’s a boolean template parameter on the GridOperator that defaults to false).
When using AMG, you should *really* update to DUNE 2.3.1 and the 2.0.0 release of PDELab!

Finally, using AMG in nonoverlapping mode, you have to use a GridView on the InteriorBorder partition
for your GridFunctionSpace:

typedef Grid::Partition<Dune::InteriorBorder_Partition>::LeafGridView GV;
GV gv = grid.leafGridView<Dune::InteriorBorder_Partition>();

and Dune::PDELab::NonOverlappingLeafOrderingTag as the ordering tag of your GridFunctionSpace.
These changes will avoid putting the ghost DOFs in the DOF vector, which improves the surface-to-volume
ratio.

I hope that’s enough info to get you started!

Best,
Steffen

> 
> Thank you for your help and best regards,
> Lukas Riedel
> _______________________________________________
> Dune mailing list
> Dune at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 495 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <https://lists.dune-project.org/pipermail/dune/attachments/20140703/c18b3f80/attachment.sig>


More information about the Dune mailing list