%build the geometrical modelclear;%--------------initial model------------fs.randSeed(1);%build random modelB=obj_Box;%build a box objectB.name='BoxStruct';%B.type='TriaxialCompression';B.GPUstatus='auto';B.ballR=200;%average radius of elementsB.isClump=0;%make clump particles?B.distriRate=0.2;%distribution coefficientB.sampleW=10000;%sample size, widthB.sampleL=20000;%lengthB.sampleH=4000;%heightB.setType();B.buildInitialModel();%B.show();B.setUIoutput();%set the output of the messaged=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 modeld.mo.setGPU('off');d.clearData(1);%clear dependent datad.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
clearload('TempModel/BoxStruct0.mat');B.setUIoutput();d=B.d;d.calculateData();d.mo.setGPU('off');d.getModel();%get xyz from d.mo%---------------delele elementsd.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.showFilterframeFilter=~sFilter;d.delElement(find(frameFilter));%delete elements according to idmatTxt=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 boxboxW=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');returnf.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 calculationd.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();
clearload('TempModel/BoxStruct1.mat');B.setUIoutput();d=B.d;d.calculateData();d.mo.setGPU('off');d.getModel();%get xyz from d.moG=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();
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 modeld.mo.bFilter(:)=true;d.mo.zeroBalance();d.resetStatus();d.mo.isHeat=1;%calculate heat in the modeld.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.namenum2str(B.ballR)'-'num2str(B.distriRate)'loopNum'];save([fName'0.mat'],'-v7.3');%return;dis=DisY/(totalCircle*stepNum);gpuStatus=d.mo.setGPU('auto');fori=1:totalCircled.mo.setGPU(gpuStatus);forj=1:stepNumd.moveGroup('brLayer',0,-dis,0);d.balance(5);d.recordStatus();d.toc();%show the note of timeendd.clearData(1);save([fNamenum2str(i)'.mat'],'-v7.3');d.calculateData();endd.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();