# AFEPack **Repository Path**: hoopoo/AFEPack ## Basic Information - **Project Name**: AFEPack - **Description**: Adaptive Finite Element Package - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-03-21 - **Last Updated**: 2024-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AFEPack (Adaptive Finite Element Package) 自适应有限元计算软件包,是北京大学李若教授开发和长期维护,面向数值计算科研人员的计算软件包。它以C++编写,要求使用者具有Linux平台下C++编程能力。目前我们在李老师指导下,将主要维护工作转移到Github这里。目前首先维持它在Ubuntu 18.04+deal.II-8.1.0平台上稳定运行。然后逐步将边界条件处理用iterator操作代替指针操作,使得8.1.0以后的deal.II版本可以继续支持。欢迎有能力的朋友参与维护和修改(想成为合作者直接联系我)。 ## 缺省安装 李老师修改了缺省安装策略以方便初学者。如果你用的是Ubuntu 16.04,可以直接采用源中的dealii-8.1.0,跳过下面编译dealii的部分。如果是Ubuntu 18.04及以上,那么你需要手工编译dealii-8.1.0,缺省编译也很简单: 安装如下依赖包: sudo apt-get install cmake sudo apt-get install g++ sudo apt-get install libboost-all-dev sudo apt-get install libtbb-dev sudo apt-get install automake 对deal.II-8.1.0的代码做如下修改: deal.II/include/deal.II/lac/sparsity_pattern.h, 在最开始增加一行: `#include ` deal.II/source/base/parameter_handler.cc, line 1278, 如下修改: return (p.get_optional("value")); -> return bool(p.get_optional("value")); 然后在deal.II的目录: mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/usr/local/dealii-8.1.0 .. 可以自己选择安装目的地。 make sudo make install 然后可以编译AFEPack了, 将AFEPack在自己目录解开, sudo mv到安装目录(以下为/usr/local/AFEPack): cd /usr/local/AFEPack aclocal autoconf automake ./configure --with-dealii="/usr/local/dealii-8.1.0" make 结束。 ## 带Trilinos接口的AFEPack Trilinos是一个并行计算包,它里面包含了大量的线性求解器和预处理器。如果在dealii中链接了trilinos,那么我们就可以在AFEPack中使用这些求解器,从而增加AFEPack的计算能力。这个操作稍微有点复杂,不建议初学者尝试。 安装如下包: sudo apt-get install cmake sudo apt-get install g++ sudo apt-get install liblapack-dev sudo apt-get install libboost-all-dev sudo apt-get install libmumps-dev sudo apt-get install libtbb-dev sudo apt-get install trilinos-all-dev sudo apt-get install libsuitesparse-dev sudo apt-get install libarpack2-dev sudo apt-get install automake 做如下链接修改, 这里不确定这样做是否最好, 但至少可以继续下去。 (或者定义到你自己指定的一个目录下) sudo ln -s /usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so /usr/local/lib/libscalapack.so sudo ln -s /usr/lib/x86_64-linux-gnu/libptscotch-6.so /usr/lib/x86_64-linux-gnu/libptscotch.so sudo ln -s /usr/lib/x86_64-linux-gnu/libptscotcherr-6.so /usr/lib/x86_64-linux-gnu/libptscotcherr.so sudo ln -s /usr/lib/x86_64-linux-gnu/libscotch-6.so /usr/lib/x86_64-linux-gnu/libscotch.so sudo ln -s /usr/lib/x86_64-linux-gnu/libscotcherr-6.so /usr/lib/x86_64-linux-gnu/libscotcherr.so 对deal.II-8.1.0的代码做如下修改: deal.II/include/deal.II/lac/sparsity_pattern.h, 在最开始增加一行: `#include ` deal.II/source/base/parameter_handler.cc, line 1278, 如下修改: return (p.get_optional("value")); -> return bool(p.get_optional("value")); 然后在deal.II的目录: mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/usr/local/dealii-8.1.0 -DCMAKE_C_COMPILER="mpicc" -DCMAKE_CXX_COMPILER="mpicxx" -DCMAKE_Fortran_COMPILER="mpif90" -DDEAL_II_WITH_PETSC=OFF -DHDF5=/usr/lib/x86_64-linux-gnu/hdf5/openmpi .. 这里屏蔽了PETSC,因为最新的PETSC和之前变化太大,除非你自己安装一个很低版本的。 反正源里的这个不行。 同理, 如果你有P4EST, 也屏蔽掉。 继续: make sudo make install 设置一下deal.ii的库链接: sudo ln -s /usr/local/dealii-8.1.0/lib/* /usr/local/lib 然后可以编译AFEPack了, 将AFEPack在自己目录解开, sudo mv到安装目录(以下为/usr/local/AFEPack): cd /usr/local/AFEPack aclocal autoconf automake CC="/usr/bin/mpicc" CXX="/usr/bin/mpic++" CFLAGS="-I/usr/include/trilinos" CPPFLAGS="-I/usr/include/trilinos" CXXFLAGS="-I/usr/include/trilinos" ./configure --with-mpi=yes --with-dealii="/usr/local/dealii-8.1.0" make 结束。 在examples中增加了一个withoutBilinearOperator的例子, 只要手工设置边界条件,暂时都不会有问题。 之前包的设置和安装的一主要目的是能使用Trilinos做并行,同时可以用它的AMGPreconditioner做二次元的AMG预处理(李老师的AMGSolver暂时只能处理一次元, 但效率很高)。见examples下增加了一个Poisson_withTrilinos的例子。 此方案未经严格测试, 大家小心使用, 有问题及时反馈给我,谢谢! 此外, 在 git@github.com:vickor/Navier_Stokes下有一个用Taylor-Hood元计算NS方程的例子。 ## Debian / Ubuntu 此方案已经在 Debian 9.5 和 Ubuntu 18.04 测试过。 首先安装如下依赖 ``` sudo apt install liblapack-dev cmake gcc gcc-c++ automake autoconf mpich ``` AFEPack 依赖特定版本的 boost 和 deal.II,以下说明如下安装。 ### boost-1.50.0 ``` wget https://phoenixnap.dl.sourceforge.net/project/boost/boost/1.50.0/boost_1_50_0.tar.bz2 tar -xjf boost_1_50_0.tar.bz2 cd boost_1_50_0 && ./bootstrap.sh --prefix=/path/to/install # 根据设置的安装目录决定是否需要 sudo ./b2 && sudo ./b2 install ``` ### deal.II-8.1.0 配置 deal.II 为启用 MPI,关闭 threads(目前用不到)。 ``` tar -xzf dealii-8.1.0.tar.gz cd deal.II mkdir build && cd build # 根据 boost 安装路径修改 export BOOST_DIR=/path/to/boost/install cmake -DCMAKE_INSTALL_PREFIX=/path/to/install \ -DDEAL_II_WITH_MPI=on \ -DDEAL_II_WITH_THREADS=off \ -DCMAKE_C_COMPILER=/usr/bin/mpicc \ -DCMAKE_CXX_COMPILER=/usr/bin/mpicxx \ -DCMAKE_Fortran_COMPILER=/usr/bin/mpifort \ .. make -j 4 # 根据设置的安装目录决定是否需要 sudo sudo make install ``` **若 deal.II 报 boost 的编译错误,请在出错的语句 return 后加上** ``` static_cast ``` ### AFEPack AFEPack 依赖为 deal.II 和 boost,编译 MPI 版本的 AFEPack 时需要任意一种 MPI 实现。 ``` CC=mpicc CXX=mpicxx ./configure --prefix=/path/to/install \ --with-boost=/path/to/boost/install \ --with-dealii=/path/to/dealii/install make # 根据情况决定是否需要 sudo sudo make install ``` `make install` 会将头文件,库文件,所有 template 安装到目标文件夹。随 AFEPack 还附赠一个 easymesh。 在 `examples` 文件夹下可以继续编译测试例子,直接使用 `make` 即可 。 ``` cd examples && make ```