首页 理论教育 二次开发FLAC3D煤岩蠕变损伤本构模型

二次开发FLAC3D煤岩蠕变损伤本构模型

时间:2023-06-27 理论教育 版权反馈
【摘要】:具体来讲,在FLAC3D本构模型二次开发中是由前一计算时间步的应力、总应变增量和其他一些给出的参数通过具体的本构方程得到新的应力过程。动态链接库文件采用VC++6.0或更高版本编译得到,再由FLAC3D主程序进行调用。依据FLAC3D用户手册对FLAC3D自定义本构模型二次开发的核心技术,并参考褚卫江、杨文东等成功实例,FLAC3D本构模型的二次开发工作主要包括修改头文件、修改程序文件、生成动态链接库文件和程序调试4部分。

二次开发FLAC3D煤岩蠕变损伤本构模型

FLAC3D计算首先调用平衡方程,由初始应力边界条件计算出新的速度和位移,然后由速度计算出应变率,进而根据本构方程获得新的应力或力。显式有限差分法计算流程如图5.4所示。具体来讲,在FLAC3D本构模型二次开发中是由前一计算时间步的应力、总应变增量和其他一些给出的参数通过具体的本构方程得到新的应力过程。

图5.4 FLAC3D的计算流程图

FLAC3D自定义本构模型二次开发主要采用Microsoft Visual C++编写,自定义本构模型同其他自带模型一样,主要功能是给定应变增量,获得新的应力,均以动态链接库文件(.dll文件)的形式提供。动态链接库文件采用VC++6.0或更高版本编译得到,再由FLAC3D主程序进行调用。

FLAC3D调用动态链接库文件时,首先需要用CONFIG cppudm命令来配置代码接受DLL模型。然后,需要输入model load(二次开发文件名称).dll使DLL模型文件加载到FLAC3D中同时输入model(二次开发文件名称),这样,新模型的名字、参数名字和与模型相关的FISH函数就可以被FLAC3D识别出来。用户可以把常用的自定义模型输入“FLAC3D.INI”中,以避免每次调用新模型都进行DLL的配置。

FLAC3D中自带的本构模型和用户自己定义的本构模型继承的都是同一基类(class constitutivemodel),并且软件提供了该软件所有自带本构模型的源代码。这就便于用户进行自定义本构模型的二次开发,同时又使得用户自定义本构模型与软件自带的本构模型的执行效率处在同一个水平上。

依据FLAC3D用户手册对FLAC3D自定义本构模型二次开发的核心技术,并参考褚卫江、杨文东等成功实例,FLAC3D本构模型的二次开发工作主要包括修改头文件(.h文件)、修改程序文件(.cpp文件)、生成动态链接库文件(.DLL)和程序调试4部分。

1)修改头文件

在头文件userLyvepmc.h中进行新的本构模型派生类的声明时,需要修改模型的ID、名称、版本以及修改派生类的私有成员,包括模型的基本参数及程序执行过程中主要的中间变量。本项目自定义本构模型的头文件usernvepmc.h同样继承了基类ConstitutiveModel,修改模型的ID为156(大于100),定义了模型的名称为usernvepmc,派生类的私有成员包括dbulk、dkshear、dkviscous、dmshear、dmviscous、dnviscous、dyeilth、dn_1,cohesion、friction、dilation、tension,6维数组dMekd[6]等中间变量。

2)修改程序文件

在程序文件userLyvepmc.cpp中需要进行的修改主要包括以下几个方面:

①在C++程序中修改模型结构(UseruserLyvepmc::UserLyvepmc(bool bRegister):Constitutive Model的定义,此为一个空函数,主要功能是对头文件中定义的表征煤岩所有私有成员赋初值,一般均赋值为0.0。

②修改const char**UserLyvepmc::Properties()函数,该函数包含了煤岩蠕变模型所有参数的名称字符串,在FLAC3D的计算命令中需要用这些字符串进行模型参数赋值,对应模型参数的定义。

③UserLyvepmc::States()函数是单元在计算过程中的状态指示器,根据需要修改指示器的内容。

④修改UserLyvepmc::GetProperty()和UserLyvepmc::SetProperty()函数中内容,使各个参数依次对应派生类中定义的模型参数变量,这两个函数共同完成模型参数的赋值功能。

⑤const char*UserLyvepmc::Initialize()函数在执行CYCLE命令或大应变模式下对每个模型单元(zone)调用一次,主要执行参数和状态指示器的初始化,并对派生类声明中定义的私有变量进行赋值。(www.xing528.com)

⑥const char*UserLyvepmc::Run()这部分是整个模型编制过程中最主要的函数,它对每一个子单元(sub-zone)在每次循环时均进行调用,由应变增量计算得到应力增量,从而获得新的应力。进一步需要修改的内容有:根据开关函数H(F)判断,当F≤σ时模型只有弹性元件起作用,同时定义一个时间全局变量,然后对每一个时间步进行累加得到真实时间,以进行粘性系数折减。

此部分具体编程流程如图5.5所示。

修改const char*UserLyvepmc::SaveRestore()中的变量,同第1、4步进行修改对应的参数,该函数的主要功能是对计算结果进行保存。

图5.5 模型二次开发流程图

3)生成动态链接库文件

①新建立一个空的Win32 Dynamic-link library,如建立在d:\Lyvepmc。

②把所有需要的文件放在mymodel.cpp、mymodel.h、AXES.H、Conmodel.h、STENSOR.H、vcmodels.lib都放在d:\Lyvepmc下面。

③BUILD->Set Active Configuration,选择Release or Debug build option。

④PROJECT->Settings,点击Link标签,在Output file下空白处设置生成文件的保存位置。

⑤PROJECT->Add To PROJECT->Files,添加mymodel.cpp、mymodel.h文件到工作空间。

⑥PROJECT->Settings,点击Link标签,在category:的下拉列表中选择Input选项,在Object/Librarymodules下面,其他文件后面用空格隔开,添加vcmodels.lib文件。

⑦点BUILD->Rebuild All,创建动态连接库文件,生成所需要的模型。

4)程序调试

程序的调试有两种方法:一种是在VC++的工程设置中将FLAC3D软件中的EXE文件路径加入程序的调试范围中,并将FLAC3D自带的DLL文件加入附加动态链接库(Additional DLLs)中,然后在程序文件中设置断点,进行调试;另一种是在程序文件中加入return()语句,这样可以将希望得到的变量值以错误提示的形式在FLAC3D窗口中得到。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈