%build the geometrical modelclear;fs.randSeed(2);%build random modelB=obj_Box;%build a box objectB.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 timemfs.reduceGravity(d,5);%reduce the gravity of element%------------return and save result--------------d.status.dispEnergy();%display the energy of the modeld.clearData(1);%clear dependent datad.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');
%set the material of the modelclearload('TempModel/BoxMixMat1.mat');B.setUIoutput();%set output of messaged=B.d;d.calculateData();d.mo.setGPU('off');d.getModel();%get xyz from d.mo%------------------remove top elementsmZ=d.mo.aZ(1:d.mNum);topLayerFilter=mZ>max(mZ)*0.85;%make filter for top layerd.delElement(find(topLayerFilter));%delete top layer elements%set material of modelmatTxt=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.groupIdmatContents=[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 sampleclumpFilter=groupId<-10;%filter of clumpmatSeed=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 elementd.balanceBondedModel0(1);d.balance('Standard',5);d.status.dispEnergy();%display the energy of the modeld.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();
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 modeld.resetStatus();%initialize model status, which records running informationd.mo.isHeat=1;%calculate heat in the modeld.mo.isCrack=1;%record cracking processgpuStatus=d.mo.setGPU('auto');d.setStandarddT();%set standard dTmat2Id=d.GROUP.Mat2Group;totalCircle=2;stepNum=10;%see the teaching video and to increase the stepNumelementExpandRate=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.namenum2str(B.ballR)'-'num2str(B.distriRate)'loopNum'];save([fName'0.mat']);%return;fori=1:totalCircleforj=1:stepNumd.toc();%show the note of timed.mo.aR(mat2Id)=d.mo.aR(mat2Id)+daR(mat2Id);d.mo.setNearbyBall();d.mo.zeroBalance();d.balance('Standard',1);endd.clearData(1);%clear data in d.mosave([fNamenum2str(i)'.mat']);d.calculateData();endd.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();