材料模拟软件:LIGGGHTS二次开发all.docx

材料模拟软件:LIGGGHTS二次开发all.docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

PAGE1

PAGE1

LIGGGHTS二次开发入门

LIGGGHTS(LImitedGranularGeoHybridizedwithLAMMPS)是一款基于离散元法(DEM)的材料模拟软件,广泛应用于颗粒系统的研究和工业应用。LIGGGHTS的核心是LAMMPS(Large-scaleAtomic/MolecularMassivelyParallelSimulator),它是一个高效的并行分子动力学模拟软件。LIGGGHTS通过扩展LAMMPS的功能,使其能够处理颗粒系统,从而在材料科学、化学工程、环境工程等领域中发挥重要作用。

1.LIGGGHTS的基本架构

LIGGGHTS的架构基于LAMMPS,因此在理解LIGGGHTS的二次开发之前,首先需要对LAMMPS的基本架构有所了解。LAMMPS的架构主要分为以下几个部分:

输入脚本:用户通过输入脚本定义模拟的参数和流程。

初始化模块:负责读取输入脚本并初始化模拟环境。

计算模块:包括力计算、时间积分、温度控制等核心计算功能。

输出模块:负责生成模拟结果文件,如轨迹文件、能量文件等。

并行计算模块:支持多核和分布式计算,提高模拟效率。

LIGGGHTS在LAMMPS的基础上增加了颗粒系统的处理模块,包括颗粒间的相互作用、颗粒与壁面的相互作用等。这些模块通过扩展LAMMPS的类和方法实现,因此二次开发的主要工作是理解和修改这些类和方法。

2.LIGGGHTS的二次开发环境搭建

在进行LIGGGHTS的二次开发之前,需要搭建合适的开发环境。以下是一些常见的开发环境搭建步骤:

安装LIGGGHTS:

首先,从LIGGGHTS的官方网站下载最新版本的源代码。

使用CMake生成Makefile文件,然后编译安装。

#下载LIGGGHTS源代码

gitclone/CFDEMproject/LIGGGHTS-PUBLIC.git

#进入源代码目录

cdLIGGGHTS-PUBLIC

#使用CMake生成Makefile

cmake-DCMAKE_INSTALL_PREFIX=../install-DWITH_MPI=ON-DWITH_VTK=ON.

#编译并安装

make-j4

makeinstall

配置开发环境:

安装必要的开发工具,如GCC、Python等。

配置IDE(如VisualStudioCode、CLion等),以便于代码的编写和调试。

#安装GCC

sudoapt-getinstallgccg++

#安装Python

sudoapt-getinstallpython3python3-pip

熟悉LIGGGHTS的源代码结构:

LIGGGHTS的源代码主要位于src目录下,包括核心模块、DEM模块、用户自定义模块等。

通过阅读源代码文档和注释,了解各个模块的功能和调用关系。

3.基础类和方法的扩展

LIGGGHTS的二次开发主要涉及对基础类和方法的扩展。以下是一些常见的扩展方法:

扩展力计算模块:

力计算模块是DEM的核心部分,负责计算颗粒间的相互作用力。可以通过继承Pair类实现新的力计算模型。

//自定义力计算模型

#includepair.h

#includeatom.h

#includeforce.h

#includeupdate.h

#includeneighbor.h

#includeneigh_list.h

classPairMyModel:publicPair{

public:

PairMyModel(classLAMMPS*lmp):Pair(lmp){}

virtual~PairMyModel(){}

virtualvoidcompute(int,int);

virtualvoidsettings(int,char**);

virtualvoidcoeff(int,char**);

virtualdoubleinit_one(int,int);

protected:

doublecut_global;//全局截断距离

double**cut;//每对原子的截断距离

double**epsilon;//每对原子的相互作用能

double**sigma;//每对原子的相互作用半径

};

voidPairMyModel::compute(inteflag,intvflag){

inti,j,n,itype,jtype;

doublext

文档评论(0)

找工业软件教程找老陈 + 关注
实名认证
服务提供商

寻找教程;翻译教程;题库提供;教程发布;计算机技术答疑;行业分析报告提供;

1亿VIP精品文档

相关文档