跳转至

BoxWord

user_BoxWord1.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;
fs.randSeed(1);%build random model
B=obj_Box;%build a box object
B.name='BoxWord';
B.GPUstatus='auto';
B.ballR=0.005;
B.isClump=0;
B.distriRate=0.2;
B.sampleW=1;
B.sampleL=0.016;
B.sampleH=0.6;
%B.BexpandRate=4;
%B.PexpandRate=4;
B.type='topPlaten';
%B.type='TriaxialCompression';
B.setType();
B.buildInitialModel();%B.show();
B.setUIoutput();

d=B.d;%d.breakGroup('sample');d.breakGroup('lefPlaten');
%--------------end initial model------------
B.gravitySediment();
B.compactSample(1);%input is compaction time
mfs.reduceGravity(d,2);%reduce the gravity of element

%------------return and save result--------------
d.status.dispEnergy();%display the energy of the model
d.show('aR');

d.mo.setGPU('off');
d.clearData(1);%clear dependent data
d.recordCalHour('Step1Finish');
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();%because data is clear, it will be re-calculated
user_BoxWord2.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
%set the material of the model
clear;
load('TempModel/BoxWord1.mat');
B.setUIoutput();
d=B.d;
d.calculateData();
d.mo.setGPU('off');
d.getModel();%get xyz from d.mo

%-----------------draw word
pictureName='slope/MatDEM.png';%word should be in black color
sX=d.mo.aX(1:d.mNum);sZ=d.mo.aZ(1:d.mNum);
imH=1200;imW=800;%image will be resized to imW*imH
%read the image and change the size,image is in black and white color
regionFilter=mfs.image2RegionFilter(pictureName,imH,imW);%white is true
sFilter=f.run('fun/applyRegionFilter.m',regionFilter,sX,sZ);
sId=find(sFilter);
sId(sId>d.mNum)=[];
d.addGroup('word',sId);

d.makeModelByGroups({'word'});
%d.mo.bFilter(:)=true;d.mo.zeroBalance();
d.setClump('word');
%d.showFilter('Group',{'word'},'aR');
d.show('aR');
view(0,-10);

%-----------save the model
d.mo.setGPU('off');
d.clearData(1);%clear dependent data
d.recordCalHour('BoxStep2Finish');
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_BoxWord3.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
clear;
load('TempModel/BoxWord2.mat');
B.setUIoutput();
d=B.d;
d.calculateData();
d.mo.setGPU('off');
d.getModel();%d.setModel();%reset the initial status of the model
d.status=modelStatus(d);%initialize model status, which records running information

d.mo.isShear=0;
d.mo.isHeat=1;%calculate heat in the model
d.addFixId('Y',d.GROUP.word);
d.moveBoundary('front',0,-B.ballR,0);
d.moveBoundary('back',0,B.ballR,0);
visRate=0;
d.mo.mVis=d.mo.mVis*visRate;
gpuStatus=d.mo.setGPU('auto');
d.setStandarddT();
d.mo.dT=d.mo.dT*4;

totalCircle=50;
d.tic(totalCircle);
fName=['data/step/' B.name  num2str(B.ballR) '-' num2str(B.distriRate) 'loopNumHappy'];
save([fName '0.mat']);%return;
for i=1:totalCircle
    d.mo.setGPU(gpuStatus);
    d.balance('Standard',0.1);
    d.clearData(1);
    save([fName num2str(i) '.mat']);
    d.calculateData();
    d.toc();%show the note of time
end

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