跳转至

MixMat

user_BoxMixMat1.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
%build the geometrical model
clear;
fs.randSeed(2);%build random model
B=obj_Box;%build a box object
B.name='BoxMixMat';
B.GPUstatus='auto';
B.ballR=0.001;
B.isClump=1;
B.distriRate=0.3;
B.sampleW=0.1;
B.sampleL=0;
B.sampleH=0.1;
%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(2);%input is compaction time
mfs.reduceGravity(d,5);%reduce the gravity of element
%------------return and save result--------------
d.status.dispEnergy();%display the energy of the model

d.clearData(1);%clear dependent data
d.recordCalHour('BoxMixMat1Finish');
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();
d.show('aR');
user_BoxMixMat2.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
%set the material of the model
clear
load('TempModel/BoxMixMat1.mat');
B.setUIoutput();%set output of message
d=B.d;
d.calculateData();
d.mo.setGPU('off');
d.getModel();%get xyz from d.mo
%------------------remove top elements
mZ=d.mo.aZ(1:d.mNum);
topLayerFilter=mZ>max(mZ)*0.85;%make filter for top layer
d.delElement(find(topLayerFilter));%delete top layer elements

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

%------------------------start mix material------------------------
groupId=d.GROUP.groupId;%groupId of all elements
%groupId of sample clump<-10, i.e. [-11,-12....], see d.GROUP.groupId
matContents=[9,1];%percentage of material 1 is 90%
matContents=matContents/(sum(matContents));

groupIdUnique=unique(groupId);
clumpId=groupIdUnique(groupIdUnique<-10);
clumpNum=length(clumpId);%get the number of clump in the sample

clumpFilter=groupId<-10;%filter of clump
matSeed=mod(groupId*pi^2,1);
mat1Filter=(matSeed<matContents(1))&clumpFilter;
mat2Filter=(matSeed>=matContents(1))&clumpFilter;
mat1Group=find(mat1Filter);
mat2Group=find(mat2Filter);

d.addGroup('Mat1Group',mat1Group);
d.addGroup('Mat2Group',mat2Group);
d.setGroupMat('Mat1Group','Rock1');
d.setGroupMat('Mat2Group','Rock2');
d.groupMat2Model({'Mat1Group','Mat2Group'});
%------------------------end start mix material------------------------
d.balanceBondedModel0(1);
mfs.reduceGravity(d,10);%reduce the gravity of element
d.balanceBondedModel0(1);
d.balance('Standard',5);
d.status.dispEnergy();%display the energy of the model

d.mo.setGPU('off');
d.clearData(1);
d.recordCalHour('BoxMixMat2Finish');
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_BoxMixMat3.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
clear;
load('TempModel/BoxMixMat2.mat');
B.setUIoutput();
d=B.d;
d.calculateData();
d.mo.setGPU('off');
d.getModel();%d.setModel();%reset the initial status of the model
d.resetStatus();%initialize model status, which records running information
d.mo.isHeat=1;%calculate heat in the model
d.mo.isCrack=1;%record cracking process
gpuStatus=d.mo.setGPU('auto');
d.setStandarddT();%set standard dT

mat2Id=d.GROUP.Mat2Group;
totalCircle=2;
stepNum=10;%see the teaching video and to increase the stepNum
elementExpandRate=0.01;%material 2 will be expanded by 1%
aR0=d.mo.aR;
daR=(aR0*elementExpandRate)/totalCircle/stepNum;

d.tic(totalCircle*stepNum);
fName=['data/step/' B.name  num2str(B.ballR) '-' num2str(B.distriRate) 'loopNum'];
save([fName '0.mat']);%return;
for i=1:totalCircle
    for j=1:stepNum
        d.toc();%show the note of time
        d.mo.aR(mat2Id)=d.mo.aR(mat2Id)+daR(mat2Id);
        d.mo.setNearbyBall();
        d.mo.zeroBalance();
        d.balance('Standard',1);
    end
    d.clearData(1);%clear data in d.mo
    save([fName num2str(i) '.mat']);
    d.calculateData();
end

d.show('Crack','aMatId');
d.mo.setGPU('off');
d.clearData(1);
d.recordCalHour('BoxMixMat3Finish');
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();