跳转至

BoxStruct

user_BoxStruct0.m
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
%build the geometrical model
clear;
%--------------initial model------------
fs.randSeed(1);%build random model
B=obj_Box;%build a box object
B.name='BoxStruct';
%B.type='TriaxialCompression';
B.GPUstatus='auto';
B.ballR=200;%average radius of elements
B.isClump=0;%make clump particles?
B.distriRate=0.2;%distribution coefficient
B.sampleW=10000;%sample size, width
B.sampleL=20000;%length
B.sampleH=4000;%height
B.setType();

B.buildInitialModel();%B.show();
B.setUIoutput();%set the output of the message

d=B.d;
d.showB=1;%show boundary elements
%d.breakGroup('sample');d.breakGroup('lefPlaten');

%--------------end initial model------------
B.gravitySediment(0.5);
B.compactSample(1);%input is compaction time
%------------return and save result--------------
d.status.dispEnergy();%display the energy of the model

d.mo.setGPU('off');
d.clearData(1);%clear dependent data
d.recordCalHour('BoxStruct0Finish');
save(['TempModel/' B.name '0.mat'],'B','d');
save(['TempModel/' B.name '0R' num2str(B.ballR) '-distri' num2str(B.distriRate)  'aNum' num2str(d.aNum) '.mat']);
d.calculateData();%because data is clear, it will be re-calculated
user_BoxStruct1.m
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
clear
load('TempModel/BoxStruct0.mat');
B.setUIoutput();
d=B.d;
d.calculateData();
d.mo.setGPU('off');
d.getModel();%get xyz from d.mo

%---------------delele elements
d.showFilter('SlideX',0.1,0.8);
d.showFilter('SlideY',0.1,0.8);
d.showFilter('SlideZ',0.1,0.6);
sFilter=d.data.showFilter(1:d.mNum);%showFilter result is recorded in d.data.showFilter
frameFilter=~sFilter;
d.delElement(find(frameFilter));%delete elements according to id

matTxt=load('Mats\Rock1.txt');
Mats{1,1}=material('Rock1',matTxt,B.ballR);
Mats{1,1}.Id=1;
d.Mats=Mats;%assigne materials to the model

%---------------define box
boxW=B.sampleW*0.8;
boxL=B.sampleL*0.8;
boxH=B.sampleH*0.7;

Rrate=0.8;
num=1;
dDis=B.ballR*2*Rrate;
diameter=B.ballR*2;
lefObj=mfs.denseModel(Rrate,@mfs.makeBox,B.ballR,boxL+diameter,boxH+diameter,B.ballR);
froObj=mfs.denseModel(Rrate,@mfs.makeBox,boxW+diameter,B.ballR,boxH+diameter,B.ballR);
botObj=mfs.denseModel(Rrate,@mfs.makeBox,boxW+diameter,boxL+diameter,B.ballR,B.ballR);
lefObj=mfs.expandAlong(lefObj,'Y',dDis,num);
lefObj=mfs.move(lefObj,0,B.ballR,B.ballR);

froObj=mfs.expandAlong(froObj,'X',dDis,num);
froObj=mfs.move(froObj,B.ballR,0,B.ballR);

botObj=mfs.expandAlong(botObj,'Y',dDis,num);
botObj=mfs.move(botObj,B.ballR,B.ballR,0);

rigObj=mfs.move(lefObj,boxW+diameter,0,0);
bacObj=mfs.move(froObj,0,boxL+diameter,0);

lefId=d.addElement(1,lefObj);
d.addGroup('lefP',lefId);
d.setClump('lefP');

froId=d.addElement(1,froObj);
d.addGroup('froP',froId);
d.setClump('froP');

botId=d.addElement(1,botObj);
d.addGroup('botP',botId);
d.setClump('botP');

rigId=d.addElement(1,rigObj);
d.addGroup('rigP',rigId);
d.setClump('rigP');

bacId=d.addElement(1,bacObj);
d.addGroup('bacP',bacId);
d.setClump('bacP');

G=d.GROUP;
boxId=[G.lefP;G.rigP;G.froP;G.bacP;G.botP];
d.addGroup('box',boxId);
%d.show('aR');return

f.run('fun/moveGroup2Center.m',B,'box');
f.run('fun/moveGroup2Center.m',B,'sample');

d.minusGroup('sample','box',0.5);
d.addFixId('X',d.GROUP.box);
d.addFixId('Y',d.GROUP.box);
d.addFixId('Z',d.GROUP.box);
%force between the elements will be removed in the calculation
d.removeGroupForce([d.GROUP.lefP;d.GROUP.rigP],[d.GROUP.botP;d.GROUP.froP;d.GROUP.bacP]);
d.removeGroupForce([d.GROUP.botP],[d.GROUP.froP;d.GROUP.bacP]);
d.mo.zeroBalance();

d.balanceBondedModel0(0.5);
d.mo.bFilter(:)=false;
d.balance('Standard',4);

d.mo.setGPU('off');
d.clearData(1);
d.recordCalHour('BoxStruct1Finish');
save(['TempModel/' B.name '1.mat'],'B','d');
save(['TempModel/' B.name '1R' num2str(B.ballR) '-distri' num2str(B.distriRate)  'aNum' num2str(d.aNum) '.mat']);
d.calculateData();
user_BoxStruct2.m
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
clear
load('TempModel/BoxStruct1.mat');
B.setUIoutput();
d=B.d;
d.calculateData();
d.mo.setGPU('off');
d.getModel();%get xyz from d.mo

G=d.GROUP;
sZ=d.mo.aZ(G.sample);
botSampleId=find(sZ<min(sZ)+B.ballR*1.5);
botLayerId=[botSampleId;G.botP;G.froP];
d.addGroup('botLayer',botLayerId);
botX=d.mo.aX(botLayerId);
blLayerId=botLayerId(botX<mean(botX));
brLayerId=botLayerId(botX>=mean(botX));

d.addGroup('blLayer',blLayerId);
d.addGroup('brLayer',[brLayerId;G.rigP]);
d.GROUP.groupId(d.GROUP.sample)=0;
d.GROUP.groupId(d.GROUP.blLayer)=1;
d.GROUP.groupId(d.GROUP.brLayer)=2;
d.mo.bFilter(:)=true;
d.mo.isCrack=1;
d.mo.zeroBalance();
d.mo.setGPU('auto');
d.balance('Standard',0.5);
d.show('groupId');

d.mo.setGPU('off');
d.clearData(1);
d.recordCalHour('BoxStruct2Finish');
save(['TempModel/' B.name '2.mat'],'B','d');
save(['TempModel/' B.name '2R' num2str(B.ballR) '-distri' num2str(B.distriRate)  'aNum' num2str(d.aNum) '.mat']);
d.calculateData();
user_BoxStruct3.m
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
clear;
load('TempModel/BoxStruct2.mat');
B.setUIoutput();
d=B.d;
d.calculateData();
d.mo.setGPU('off');
d.getModel();%d.setModel();%reset the initial status of the model
d.mo.bFilter(:)=true;
d.mo.zeroBalance();
d.resetStatus();
d.mo.isHeat=1;%calculate heat in the model
d.setStandarddT();
d.mo.isCrack=1;
d.addFixId('Y',d.GROUP.brLayer);

d.mo.aBF=d.mo.aBF/10;
d.mo.aFS0=d.mo.aFS0/10;
DisY=B.sampleL*0.01;

totalCircle=20;stepNum=100;
d.tic(totalCircle*stepNum);
fName=['data/step/' B.name  num2str(B.ballR) '-' num2str(B.distriRate) 'loopNum'];
save([fName '0.mat'],'-v7.3');%return;
dis=DisY/(totalCircle*stepNum);
gpuStatus=d.mo.setGPU('auto');
for i=1:totalCircle
    d.mo.setGPU(gpuStatus);
    for j=1:stepNum
        d.moveGroup('brLayer',0,-dis,0);
        d.balance(5);
        d.recordStatus();
        d.toc();%show the note of time
    end
    d.clearData(1);
    save([fName num2str(i) '.mat'],'-v7.3');
    d.calculateData();
end

d.mo.setGPU('off');
d.clearData(1);
d.recordCalHour('BoxStruct3Finish');
save(['TempModel/' B.name '3.mat'],'B','d','-v7.3');
save(['TempModel/' B.name '3R' num2str(B.ballR) '-distri' num2str(B.distriRate)  'aNum' num2str(d.aNum) '.mat'],'-v7.3');
d.calculateData();