跳转至

obj_Box

class obj_Box

Properties

lang=‘en'

软件语言

randomSeed=1

随机种子

用于确定初始的模型随机模态

distriRate=0.25

颗粒直径分散系数,最大直径与最小直径比值为(1+rate)^2

GPUstatus

初始的GPU计算设置,'off','on','auto','fixed'(锁定为CPU计算)

见model函数

isUI

在UI中显示消息,取1

edit_output

消息框的地址

uniformGRate=0

取1或0,确定重力沉积时是否采用统一的重力加速度g;当其为1时,颗粒采用正常重力堆积;当其为0时,上方的颗粒会受到较大的重力加速度,从而加快整体颗粒体系的堆积;默认值为0,能较快过完成堆积,值为1时,堆积时间可能增加到2,3倍

resetStatusBeforeDrop

在随机运动之后,重力堆积前重置记录,即运行d.status.

Surf

用于切分模型的面,参考user_BoxModel示例

name

模型名

type='topPlaten';

模型类型,确定是否使用6个压力板,见Box.platenStatus。运行B.setType()时,根据type来确定B.platenStatus

可为'none',botPlaten','topPlaten','GeneralSlope','TriaxialCompression'

isClump

定义模型颗粒是否为clump颗粒

d

模型build对象

g=-9.8

重力加速度

TAG

模型信息

SET

模型设置

is2D=0

模型是否为二维模型

GROUP

模型中的组,将自动转至生成的build对象中,即B.d

Mo

模型单元结构体,包括压力板

Bo

边界单元结构体

Mats

材料cell数组

ballR

单元平均半径

modelH_rate=1

模型边界的增高比率(由于沉积的高度会比边界高度低)

X

单元的X坐标数组

Y

单元的Y坐标数组

Z

单元的Z坐标数组

R

单元的半径数组

isShear

是否有剪力

isShearAfter=1;

运行完B.gravitySediment后是否打开剪力,默认为1

isSample

初始时是否生成样品单元,当为0时只生成边界和底压力板

sampleW

模型箱子内部的宽

sampleL

模型箱子内部的长

sampleH

模型箱子内部的高

sample

样品单元结构体,不包括压力板

boundaryRrate=0.8

边界相邻单元间距离与单元直径的比值

platenStatus=[0,0,0,0,0,1];

压力板状态,6个值对应[左,右,前,后,下,上]

当值为1时,产生相应的压力板

lefPlaten

左压力板的结构体,包含XYZR信息

rigPlaten

右压力板的结构体,包含XYZR信息

froPlaten

前压力板的结构体,包含XYZR信息

bacPlaten

后压力板的结构体,包含XYZR信息

botPlaten

底压力板的结构体,包含XYZR信息

topPlaten

顶压力板的结构体,包含XYZR信息

lefB

左边界的结构体,包含XYZR信息

rigB

右边界的结构体,包含XYZR信息

froB

前边界的结构体,包含XYZR信息

bacB

后边界的结构体,包含XYZR信息

botB

底边界的结构体,包含XYZR信息

topB

顶边界的结构体,包含XYZR信息

groupId

组编号,6个边界编号由-1至-6,6个压力板编号由1至6

aMatId

材料编号

compactNum=0;

建好堆积模型后的压实次数

sFilter=0;

Box的showFilter,不常用

PexpandRate=1;

压力板的延伸单元数

BexpandRate=2;

边界的延伸单元数

fixPlaten=1;

是否锁定platen的自由度,使platen只在平面法向上运动

saveFileLevel=1;

保存文件的层级,在UniaxialTest中用

0不保存文件,1保存主要文件,2保存所有文件

Methods

setVisStatus(newType,baseBallR)

设置阻尼与单元直径的关系,默认情况下为'inWater',即单元类似在水中下落,单元自由下降所受阻力与单元半径平方成正比,大颗粒下降较快;当设置为‘sameSpeed'时,则阻力与单元半径三次方成正比

calculateBlockDensity()

计算模型样品的密度(样品向内1.5倍半径取块算密度)

密度值

用于自动训练中

compactSample(compactNum,varargin)

利用上压力板来压实样品

compactNum:压实次数;varargin:当输入1个参数时,设定夯实压力,当无输入时,夯实力取所有模型单元重力的两倍

示例的第一个文件

convert2D(ballR)

将单元的属性从三维变成二维,相当于一个平面上的单元都变成同一厚度

ballR:二维的厚度的一半

cutGroup(gNames, surfId1, surfId2)

用两个层面切割组

gNames:被切割的组名; surfId1:层面的编号; surfId2:层面的编号

参考mxSlope

gravitySediment(varargin)

让单元随机运动,并在重力作用下堆积

varargin:可变输入参数,当输入一个参数rate时,确定沉积的时间比率,当无输入参数时rate默认为1;当输入参数是"auto"时,是3.0版新功能,因为不同的堆积参数,其沉积所需要的时间不一样,当参数为“auto”时自动设定沉积时间,保证颗粒完成堆积。当输入参数为两个时,第二个参数为isCement,默认为0,即堆积时不粘结颗粒,当其为1时,堆积过程中颗粒接触即产生粘结力(如湿土颗粒),堆积体孔隙率会较大

示例的第一个文件

load(varargin)

将save命令保存的文件,重加载到B中

当有1输入参数时,加载文件名后加['Step-' num3str(Step)]

B.load(1);

removeInterPlatenBoundaryForce()

消除压力板和相垂直的边界之间的作用力

用于系统建立三轴应力

removeInterPlatenForce()

消除各压力板间的作用力

用于系统建立三轴应力

save(varargin)

将B文件保存为['TempModel/' B.name '-R' num2str(B.ballR) '-distri' num2str(B.distriRate) 'aNum' num2str(B.d.aNum) '.mat'];

当有1输入参数时,保存文件名后加['Step-' num2str(Step)]

B.save(1);

setGPU( varargin)

设置GPU计算模式

varargin:和model.setGPU同样输入参数,当无输入参数时,用B.gpuStatus自动作为输入参数

B.setGPU();

setPlatenFixId()

设置每个Platen边缘单元的自由度,使其只能在压力板法向方向上运动,防止试样不平时压力板从侧面滑落

参考BoxLayer例子

setPlatenStress(varargin)

通过对platen设置体力来产生边界应力(负为压力,正为拉力),体力作用在正方向上的压力板,即右、后、上压力板,用d.show('mGZ')命令查看体力作用

输入参数可为2-4个,具体见下方说明

见user_3DJointStress示例

setType()

根据模型类型(B.type)设置platenStatus

示例的第一个文件

setUIoutput(varargin)

设置消息的窗口显示,需在加载新文件后,运行这个命令

varargin:无输入参数时,自动查找窗口中的消息框,当输入消息框句柄时,使用输入的消息框显示消息

B.setUIoutput()

以下为程序内部函数,通常不直接使用

addLoading()

*

addMat(varargin)

addSurf(para)

增加层面,与Tool_cut中函数相同。未来可能取消

层面的数字高程,为结构体S.X,S.Y,S.Z

breakPlatenConnection()

未开发*

buildInitialModel()

buildModel()

开始建模*

clearBoundary()

clearPlaten()

createBall(distriRate)

createBoundary(varargin)

createClump(randRate)

createPlaten(varargin)

createSample()

delSurf(surfIds)

删除指定层面,与Tool_cut中函数相同。未来可能取消

surfIds为指定的层面的编号矩阵

dispNote(note)

显示消息*

exportModel()

导出模型*

finishModel()

完成模型建立*

importModel(d)

导入模型*

setGroupPosition(gName)

设置组的位置,在importModel中使用*

setSoftMat()

设置较软的单元*

setTuTest()

设置抗拉强度试验*

setTuTestStress(stress)

设置抗拉强度试验应力*

show()

显示模型

nan

nan

setPlatenStress(varargin)函数说明

输入为两个时,为setPlatenStress(stressType,value)

根据应力设定值等,使用fs.platenStress2Gravity来确定platen上的体力,用于单轴压缩和弹性模量测试模拟

stressType:可取'StressXX','StressYY','StressZZ'. stressValue:为应力值,单位为Pa

下图1

输入为三个时,为setPlatenStress(stressType,stressValue,border)

根据应力设定值和范围,使用fs.setPlatenStress(d,stressType,stressValue,border);在压力板上施加体力(应力)

stressType:可取'StressXX','StressYY','StressZZ'. stressValue:为应力值,单位为Pa. border:压力板的应力施加范围

下图2

输入为四个时,为setPlatenStress(StressXX,StressYY,StressZZ,border)

根据应力设定值和范围,使用fs.setPlatenStress(d,stressType,stressValue,border);在压力板上施加体力(应力)

StressXX,StressYY,StressZZ:X,Y,Z方向上的应力值 ;border:压力板的应力施加范围

下图2

nan

关于border:在做单轴压缩试验时,由于上压力板设为与试样等大,设定应力方向和大小即可。而对于真三轴试验,考虑到压力板通常要比试样尺寸大,体力不能作用在压力板上的每个单元。以topPlaten为例,通过使用fs.setPlatenStress命令,可查找样品单元中离platen一定距离内的单元,并以这些单元的XY范围来确定platen上需要施加应力的单元。在三轴试验中,当试样变形时,需要不断运行这个命令以正确施加应力。

注意:在做三轴试验时,考虑试样在某一维度上可能发生膨胀(如施加拉力),为防止颗粒漏出,需要将压力板和边界设大一些,即设定B.BexpandRate和B.PexpandRate,参见user_3DJointStress1。图2为B.BexpandRate=B.sampleW*0.1/B.ballR;B.PexpandRate=B.sampleW*0.1/B.ballR;,将边界和板向外增加10%。为防止压力板“滑落”,对锁定压力板的四向边界单元,使其仅能在压力板法向上运动,图3红色为X方向自由度锁定

nan

图1

图2

图3