solver主命令
介绍solver主命令的使用和参数含义
作用
设置FEAT的求解器类型和参数,不同求解器的可设置参数不一样。目前支持的求解器类型为:
- SPACK求解器:采用Spooles库的求解算法,也是FEAT的默认求解器,可支持多进程并行。
- PARDISO求解器:采用Intel MKL Pardiso库的部分求解算法,可支持多进程并行。
- EIGEN求解器:采用Eigen库的部分求解算法,主要用于算法研究。
- PETSc求解器:采用PETSc库的部分求解算法,支持MPI并行。
关于求解器的选择:
- 直接法一般比迭代法要用更多的内存,稳定性不好迭代法,但直接法计算更快
- 对于小体系,可以选用直接法,建议优先采用
SPACK
,PARDISO
- 对于大体系,如果内存不够用,可以考虑采用迭代法
- 如果对于确定的问题,可以采用不同预条件子的迭代法,具体可在PETSc算法中设置
SPACK求解器
形式
solver engine SPACK
-threads xx
-droptol xx
-tau xx
-etol xx
-eiter xx
说明
-threads xx
: 指定求解的多线程数,如果设置了系统变量:OMP_NUM_THREADS,则不用再设置线程数。-tau xx
: 指定SPOOLES求解器精度tau。-droptol xx
: 指定SPOOLES求解器精度droptol。-etol xx
: 指定频率求解算法的精度。-eiter xx
: 指定频率求解算法的最大迭代次数。
示例
solver engine SPACK
solver engine SPACK -threads 4
PARDISO求解器
形式
solver engine PARDISO
-lmethod llt/dlt
-emethod llt/dlt
-etol xx
-eiter xx
-threads xx
说明
-lmethod ldlt
: 指定矩阵求解器的算法,ldlt是直接法,采用Pardiso的LDLT分解,是系统默认的方法;llt是直接法,采用Pardiso的LLT分解。-emethod llt
: 指定频率求解的算法,ldlt是直接法,采用Pardiso的LDLT分解,是系统默认的方法;llt是直接法,采用Pardiso的LLT分解。-etol xx
: 指定频率求解算法的精度。-eiter xx
: 指定频率求解算法的最大迭代次数。-threads xx
: 指定求解的多线程数。如果设置了系统变量:OMP_NUM_THREADS,则不用再设置线程数。
示例
solver engine PARDISO -lmethod ldlt -threads 4
solver engine PARDISO -emethod llt
EIGEN求解器
形式
solver engine EIGEN
-lmethod llt/cg/
-emethod lu/cg
-etol xx
-eiter xx
-threads xx
说明
-lmethod llt
: 指定矩阵求解器的算法,llt是直接法,采用LLT分解,是系统默认的方法;cg是迭代法,常用的共轭梯度算法-emethod lu
: 指定频率求解的算法,lu是采用LU分解求解;cg是采用迭代法求解。默认是lu算法,但对于大规模问题,cg方法占用内存更少,但求解更慢。-etol xx
: 指定频率求解算法的精度。-eiter xx
: 指定频率求解算法的最大迭代次数。-threads xx
: 指定求解的多线程数,只支持Pardiso的算法。如果设置了系统变量:OMP_NUM_THREADS,则不用再设置线程数。
示例
solver engine EIGEN -lmethod llt -threads 4
solver engine EIGEN -emethod cg
PETSc求解器
目前只支持FEAT的MPI版本。
形式
solver engine PETSc
-pc xx
-etol xx
-eiter xx
说明
-pc xx
: 指定KSP算法的预条件子的类型,默认是PCICC预条件子,可参考PETSc手册。-etol xx
: 指定频率求解算法的精度。-eiter xx
: 指定频率求解算法的最大迭代次数。
示例
solver engine PETSc
solver engine PETSc -pc PCICC