clear;fs.randSeed(2);%build random modelB=obj_Box;%build a box objectB.name='X_Joint1';B.GPUstatus='auto';B.ballR=50;%单元平均半径B.isClump=0;B.distriRate=0.2;%颗粒直径分散系数,最大直径与最小直径比值为(1+rate)^2B.sampleW=7e3;%模型箱子内部的宽B.sampleL=0;%模型箱子内部的长B.sampleH=10e3;%模型箱子内部的高B.BexpandRate=10;%边界的延伸单元数B.PexpandRate=10;%压力板的延伸单元数B.type='TriaxialCompression';%根据模型类型(B.type)设置三轴压力板B.setType();B.buildInitialModel();%建立初始模型B.show();B.setUIoutput();d=B.d;d.mo.setGPU('auto');%--------------end initial model------------B.gravitySediment();%让单元随机运动,并在重力作用下堆积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('Box1Finish');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');
clearload('TempModel/X_Joint11.mat');B.setUIoutput();%set output of messaged=B.d;d.calculateData();d.mo.setGPU('off');d.getModel();%get xyz from d.mod.connectGroup();%StressXX=5e6;%StressZZ=5e6;%B.setPlatenFixId()%B.setPlatenStress(StressXX,0,0,B.ballR*5);d.showB=2;topPartId=[d.GROUP.topB;d.GROUP.topPlaten];%将上压力板与上边界组合d.addGroup('topPart',topPartId);%构建组d.show;matTxt2=load('Mats\XRock.txt');%load a un-trained material fileMats{1,1}=material('XRock',matTxt2,B.ballR);Mats{1,1}.Id=1;d.Mats=Mats;d.groupMat2Model({'sample'},1);%赋予材料属性d.mo.mGZ(:)=0;%消除z方向体力,即消除重力stressXX=5e6;stressZZ=5e6;d.mo.setShear('off');B.setPlatenStress(-stressXX,0,-stressZZ,B.ballR*5);d.mo.mGX(d.GROUP.lefPlaten)=-d.mo.mGX(d.GROUP.rigPlaten);%模型左拉右压d.breakGroup();%断开所有单元的连接d.mo.setGPU('auto');d.balance('Standard',1);d.connectGroup();%胶结所有连接d.removePrestress();%将单元的抗拉力临时减小,断开胶结,消除单元间的张力(预应力d.deleteConnection('boundary');%删除胶结%消除内应力%B.compactSample(1);d.balance('Standard',1);ddis=d.mo.aZ(d.GROUP.topPlaten);dddis=d.mo.aZ(d.GROUP.topB);d.moveGroup('topB',0,0,ddis-dddis+2*B.ballR);d.moveGroup('lefB',-200,0,0);d.moveGroup('rigB',200,0,0);%C=Tool_Cut(d);%cut the model%lSurf=load('slope/IntermittentX3.txt');%load the surface data%C.addSurf(lSurf);%add the sur faces to the cut 导入离散点数据%C.getSurfTri(1,1);%C.getTriangle(1);%C.setBondByTriangle('break');%C=Tool_Cut(d);%cut the model%lSurf=load('slope/IntermittentX4.txt');%load the surface data%C.addSurf(lSurf);%add the sur faces to the cut%C.getSurfTri(1,1);%获取离散元三角面信息%C.getTriangle(1); %获取三角面顶点坐标%C.setBondByTriangle('break');%使三角面破裂%d.show('--');d.show('aR')%---------------5. save the datad.mo.setGPU('off');d.clearData(1);d.recordCalHour('BoxModel2Finish');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/X_Joint12.mat');d.calculateData();d.mo.setGPU('off');B.setUIoutput();d=B.d;d.mo.isCrack=1;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.setShear('on');gpuStatus=d.mo.setGPU('auto');totalCircle=50;d.tic(totalCircle);fName=['data\step\'B.namenum2str(B.ballR)'-'num2str(B.distriRate)'loopNum'];save([fName'0.mat']);%return;d.mo.aBF=d.mo.aBF;d.mo.aMUp(d.GROUP.lefPlaten)=0;d.mo.aMUp(d.GROUP.rigPlaten)=0;%d.mo.aMUp=d.mo.aMUp*0;d.balance('Standard',1);dis=800;stepNum=16000recordNum=800;dDis=dis/stepNum;num=0;fori=1:stepNumd.moveGroup('topPart',0,0,-dDis);d.balance(2,1);ifmod(i,recordNum)==0num=num+1;save([fNamenum2str(num)'.mat']);endendd.show('Displacement');d.mo.setGPU('off');d.clearData(1);d.recordCalHour('BoxCrush3Finish');save(['TempModel/'B.name'3.mat'],'d');save(['TempModel/'B.name'3R'num2str(B.ballR)'-'num2str(B.distriRate)'aNum'num2str(d.aNum)'.mat']);d.calculateData();