%build the geometrical modelclear;fs.randSeed(2);%build random modelB=obj_Box;%build a box objectB.name='BoxMonteCarlo';B.GPUstatus='auto';B.ballR=1;B.isClump=0;B.distriRate=0.2;B.sampleW=60;B.sampleL=0;B.sampleH=60;B.type='topPlaten';B.setType();B.buildInitialModel();%B.show();B.setUIoutput();d=B.d;%--------------end initial model------------B.gravitySediment(0.1);B.compactSample(1);%input is compaction time%------------return and save result--------------d.status.dispEnergy();%display the energy of the modeld.clearData(1);%clear dependent datad.recordCalHour('BoxModel1Finish');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/BoxMonteCarlo1.mat');B.setUIoutput();%set output of messaged=B.d;d.calculateData();d.mo.setGPU('off');d.getModel();%get xyz from d.mo%---------cut the model to make slopeC=Tool_Cut(d);%cut the modellSurf=load('slope/layer surface.txt');%load the surface dataC.addSurf(lSurf);%add the surfaces to the cutC.setLayer({'sample'},[1,2,3,4]);%set layers according geometrical datagNames={'lefPlaten';'rigPlaten';'botPlaten';'layer1';'layer2';'layer3'};d.makeModelByGroups(gNames);%---------end cut the model to make slope%----------set material of modelmatTxt=load('Mats\Soil1.txt');matTxt(3:4)=matTxt(3:4)*10;Mats{1,1}=material('Soil1',matTxt,B.ballR);Mats{1,1}.Id=1;matTxt2=load('Mats\Soil2.txt');matTxt2(3:4)=matTxt2(3:4)*10;Mats{2,1}=material('Soil2',matTxt2,B.ballR);Mats{2,1}.Id=2;d.Mats=Mats;%----------end set material of model%---------assign material to layers and balance the modeld.setGroupMat('layer2','Soil2');d.groupMat2Model({'sample','layer2'});d.balanceBondedModel();d.show('aR');%---------end assign material to layers and balance the model%---------save the datad.mo.setGPU('off');d.clearData(1);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();
clear;load('TempModel/BoxMonteCarlo2.mat');d2=B.d;load('TempModel/BoxMonteCarlo2.mat');B.setUIoutput();modelNum=5;%defines the number of slope in one modeld=B.d;d.calculateData();d.mo.setGPU('off');d.getModel();%d.setModel();%reset the initial status of the modeld.status=modelStatus(d);%initialize model status, which records running informationd.is2D=0;disY=max(d.aR)*4;d.GROUP.sample1=d.GROUP.sample;d.SET.modelNum=modelNum;%the slope model is added one by one here @@@@%we can make a new object including all slopes, and add it to dfori=2:modelNumnewSampleId=mfs.addModel(d,d2,0,disY*(i-1),0);d.GROUP.(['sample'num2str(i)])=newSampleId;end%---------cut the model to make slopeC=Tool_Cut(d);%cut the modellSurf=load('slope/layer surface.txt');%load the surface dataC.addSurf(lSurf);%add the surfaces to the cutC.setLayer({'sample'},[1,2,3,4]);%set layers according geometrical data%---------end cut the model to make slope%---------assign material to layers and balance the modeld.setGroupMat('layer2','Soil2');d.groupMat2Model({'sample','layer2'});d.balanceBondedModel();d.show('aR');%---------end assign material to layers and balance the modeld.mo.setGPU('off');d.clearData(1);d.recordCalHour('BoxStep3Finish');save(['TempModel/'B.name'2_3.mat'],'B','d');save(['TempModel/'B.name'3R'num2str(B.ballR)'-distri'num2str(B.distriRate)'aNum'num2str(d.aNum)'.mat']);d.calculateData();
%clear;fs.randSeed(1);%totalCircle=2;%define the number of random simulationload('TempModel/BoxMonteCarlo2_3.mat');%----------define the parameters of the slopesaBFRates=(2+rand(d.SET.modelNum,1)*8)/20;%rates of d.mo.aBF, tensile strengthaMUpRates=(2+rand(totalCircle,1)*8)/20;%rate of d.mo.aMUp, friction coefficientfName=['data/step/'B.namenum2str(B.ballR)'-'num2str(B.distriRate)'loopNum'];fori=1:totalCircleload('TempModel/BoxMonteCarlo2_3.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 modelvisRate=0.001;d.mo.mVis=d.mo.mVis*visRate;d.setStandarddT();sId=d.GROUP.sample;d.mo.aMUp(sId)=d.mo.aMUp(sId)*aMUpRates(i);%assign a different friction coefficient@@@d.SET.aMUpRate=aMUpRates(i);%record the setup of this modeld.SET.aBFRates=aBFRates;forj=1:d.SET.modelNumsName=['sample'num2str(j)];sId=d.GROUP.(sName);d.mo.aBF(sId)=d.mo.aBF(sId)*aBFRates(j);%assign a different break force (tensile strength)@@@endd.mo.setGPU('auto');d.balance('Standard',0.5);%we may reduce the value to 0.2 to increase the speedd.clearData(1);%save the datasave([fNamenum2str(i)'.mat']);d.calculateData();end%show the displacement of each slope, and mark themd.show('Displacement');title(['Displacement, aMUpRate: 'num2str(d.SET.aMUpRate)]);fori=1:d.SET.modelNummaxSZ=max(d.mo.aZ(d.GROUP.sample));sY=d.aY(d.GROUP.(['sample'num2str(i)]));text(0.05*maxSZ,sY(1),0.1*maxSZ+maxSZ,num2str(i));end
user_L3BoxMonteCarlo4Find.m
1 2 3 4 5 6 7 8 91011121314151617181920
%the file is used to analyse the data of MonteCarlo3clearMCdatas=[];fordataI=1:100load(['data/step/BoxMonteCarlo0.2-0.2loopNum'num2str(dataI)'.mat']);%load the saved filed.setData();movedRates=zeros(d.SET.modelNum,1);fori=1:d.SET.modelNumsampleId=d.GROUP.(['sample'num2str(i)]);sDisplacement=d.data.Displacement(sampleId);sFilter=sDisplacement>B.ballR*2;movedRates(i)=sum(sFilter)/length(sFilter);endmovedRateLimit=0.01;movedFilter=movedRates>movedRateLimit;MCdata=[aBFRates,d.SET.aMUpRate*ones(size(aBFRates)),movedFilter];MCdatas=[MCdatas;MCdata];endsave('slope/MCdatas3.mat','MCdatas');