软件结构
目录结构
目录结构
系统文件夹不可删除
- data
- 系统文件夹, 用于存储模拟文件, 可定期清理其中文件
- data/step
- 系统文件夹, 存储模拟中间文件, 可定期清理其中文件
- app
- 自定义的app文件夹, 用于存储app的源文件, 可增加和删除自定义的app
- examples****
- 自定义的示例文件夹, 用于放置MatDEM的示例, 可增加和删除示例
- fun
- 自定义的函数文件夹, 存储函数和Matlab辅助文件, 可增加和删除自定义的函数
- gif
- 系统文件夹, 存储动画,
fs.makeGif
生成的动画将保存于此 - Mats
- 系统文件夹, 存储材料, 可删除或增加新的材料
- Resources
- 系统文件夹(重要), 存储系统文件, 不可修改,否则程序无法运行
- slope
- 自定义的滑坡建模文件夹, 存储部分高程数据, 可增加和删除文件
- TempModel
- 系统文件夹, 存储计算的中间文件, 可定期清理其中文件
- XMLdata
- 系统文件夹(重要), 记录程序基本设置, 不可修改,否则程序无法运行
程序结构与基础函数
层次 | 相关代码 |
---|---|
用户二次开发(顶层) | 二次开发代码 |
MatDEM建模器 | obj_Box, obj_3Axial, material, Tool_Cut |
MatDEM求解和控制 | build, model, modelStatus |
MatDEM函数集 | mfs, fs, bfs等 |
matlab函数(底层) | 矩阵计算 |
类与函数集 | 功能 |
---|---|
user_*** | 二次开发脚本 |
UI_*** | 用户界面脚本 |
obj_Box | 模型箱建模器 |
obj_3Axial | 试验室建模器(将被废弃) |
Tool_Cut | 模型切割器 |
build | 模拟和数据控制 |
model | 求解器 |
modelStatus | 模拟过程记录 |
material | 材料 |
mfs | 建模函数 |
fs | 基本函数 |
系统基本函数
MatDEMfile(FileName)
- 运行
FileName
指定的脚本
例:MatDEMfile('user_3AxialNew1.m');
f.run(FunctionName, parameter, …)
- 定义函数并运行(Matlab标准函数)
Function:函数名,parameter参数
k1=f.run('examples/funtest.m',1,2,3)
见示例user_Function2Object.m - f.define(FunStr)
- 重定义一个函数
- fs.disp(note)
- 在下方提示框中显示note字符串内容
a=1+1;fs.disp(['a is ' num2str(a)]); gpuDevice(gpuIndex)
- 当有多个GPU时,选择所使用的GPU
自定义函数和辅助文件夹
MatDEM可运行标准的Matlab函数。通常可利用自定义函数来建模,在fun文件夹里提供了若干自定义函数示例,包括(1)建立各类的组件对象,如以下以make开头的函数,这些函数返回包含XYZR信息的结构体;(2)制作过滤器,用以过滤出特定的单元,并切割和定义模型。在fun文件夹中给出了几个自定义建模函数示例(如下方)。利用这些函数,可以自定义各类的基本组件对象,并通过切割和拼合构建复杂的几何模型。参见user_Function2Object.m,user_modelExample.m fun文件夹中提供了Matlab辅助文件(*.p)。当在Matlab中进入此文件夹,并打开MatDEM保存的.mat,可直接在Matlab中查看和修改数据,并且可调用mfs中所有函数,请查看运行fun文件夹中的RunInMatlab.m。
自定义建模函数示例 Matlab数据结构显示文件 Matlab建模辅助函数
makeDisc.m build.p mfs.p(包括全部函数,可直接调用)
makeColumn.m material.p fs.p(少量用于mfs的显示函数)
makeHob.m model.p
makeRing.m modelStatus.p
getColumnFilter.m Obj_3AxialTester.p
applyRegionFilter.m obj_Box.p
imageRegionFilter.m Tool_Cut.p
MatDEM专家版
MatDEM3.5及以后版本支持在Matlab里编辑和调试代码,以及制作MatDEM窗口软件。(1)安装专家模式。在软件根目录中右击"MatDEM.exe",选择”以管理员模式运行“打开软件。进入”设置“,安装专家模式。(2)打开Matlab文件夹,进入软件要目录,输入"expert"命令,出现”MatDEM 专家模式已启用“,则可在Matlab里直接运行MatDEM的代码。注意:命令MatDEMfile在Matlab里不支持
数据结构
单元类型和数据
在程序中的B,d和d.mo等中均会有aNum和mNum参数,其分别代表总单元数和模型活动单元数。在程序数据矩阵中,单元从1开始编号到aNum(矩阵的行方向),其中1到mNum为模型活动单元,mNum+1到aNum-1为模型固定单元(墙单元),aNum为虚单元。在对象参数中,如参数以a开头(如aX,aBF),则其长度为aNum,而部分参数只有活动单元才有,如mVX(速度),则以m开头。
变量 说明 变量 说明
B->Box obj_Box对象,二次开发的基础模型箱 aNum->number of all elements 所有的单元数
d->data center build对象,数据处理和控制对象 mNum->number of model element 模型活动单元数
mo->model 模型对象,计算模块
C->Cut 层面切割对象
荷载和边界条件
基于牛顿力学,离散元法在计算机中构建一个物理世界。MatDEM可实现各类荷载和边界的施加。程序中拉力为正,压力为负。
(1)位移边界:移动boundary来施加位移边界,命令为d.moveBoundary(),见build函数
(2)应力边界:对platen施加体力(mGX,mGY,mGZ)来实现对样品的压力作用,需要第一步初始化时添加边界,B.type='TriaxialCompression'时包含所有压力板
(3)振动边界:对boundary施加周期性位移,boundary作用力在platen上即转化为正弦式振动
(4)荷载作用:各类荷载直接作用在单元上,即通过对d.mo中的参数进行赋值,如d.mo.mGZ(:)=0将重力设为零
接触模型
接触模型在d.mo.FnCommand中定义,如线弹性模型则为:nFN0=obj.nKNe.*nIJXn;。默认为线弹性模型
线弹性胶结接触:见以下图1 ,以及论文1
Hertz接触:单元之间接触按球接触力计算,正向力采用Hertz接触,
屈服破坏接触:单元可被压碎(屈服破坏),通过椭圆的屈服包络面(yeilding cap)来定义这类破坏。d.mo.isFailure=1时启用,目前无示例。见以下图2,以及论文2
"自定义接触模型:离散元接触模型和宏微观分析是离散元研究和应用非常重要的基础,其能从本质上探求岩土材料复杂宏观特性的微细观机理。基于工程尺度数值模拟的考虑,MatDEM一直采用线弹性的粘结模型,并提供Hertz接触模型用于软件与玻璃珠试验对比测试。过去一年,MatDEM团队收到国内外大量自定义接触模型的需求。经过一段时间的设计和研发,MatDEM1.65版提供了自定义接触模型支持。
在BoxCrash1示例中,以下命令将normalContact.m函数设定为迭代计算函数,并进行接触力和单元运动计算(约150行)。
d.mo.setBalanceFunction('fun/normalContact.m');
具体请见Box_Crash1示例。MatDEM团队将研发和共享更多的接触模型,同时也欢迎各领域专家学者共同研发。"