function domainLen=CircleModel(fileName_cfile,fileName_k,chargeR,gridNumEdge,waterGridNumRad,fillFlag,mapFlag,boundFlag)
%------------------输入参数说明--------------------%
% 1-fileName_cfile:输出的LSPrePost Command文件名
% 2-fileName_k:输出的K文件名
% 3-chargeR:球形装药半径
% 4-gridNumEdge:核心区域边界网格数
% 5-waterGridNumRad:外围水域半径方向网格数
% 6-fillFlag:水域部分是否为填充
% >0-填充
% 7-mapFlag:参数是否为映射
% >0-映射
% 8-boundFlag:边界条件标记
% 0-不采取任何措施
% 1-生成边界NodeSet
% 2-生成边界ShellSet
% 3-生成边界Part
%--------------------------------------------------%
disp("%---------------- Circle Model ----------------%");
%%-------------------计算基本参数-------------------%%
%是否填充
if(fillFlag>0)
fillFlag=1;
else
fillFlag=0;
end
%是否映射
if(mapFlag>0)
mapFlag=1;
else
mapFlag=0;
end
inGridNumRad=gridNumEdge/4; %核心区域半径方向网格数(原型域中心的矩形域)
%可调参数设置——如果需要在源代码中修改
gridRatio=(2*gridNumEdge+pi)/(2*gridNumEdge-pi); %网格径向变化比率默认值
inRadius=chargeR.*2/3; %核心区域占比默认值
coordPb=inRadius.*sqrt(2)./2; %调整后网格坐标默认值
%其他参数设置
lenInEdge=PolyLength([0,-1*coordPb,inRadius,coordPb,0],[-1.*inRadius,-1.*coordPb,0,coordPb,inRadius]);
inGridSize=lenInEdge./gridNumEdge;
gridNumOutCharge=ceil(N_GeoSeq(chargeR-inRadius,inGridSize,gridRatio));
basicGridSize=pi*chargeR/gridNumEdge;
while(inGridSize*power(gridRatio,gridNumOutCharge-1)>basicGridSize/gridRatio)
inGridSize=inGridSize-power(10,-5);
gridNumOutCharge=ceil(N_GeoSeq(chargeR-inRadius,inGridSize,gridRatio));
end
chargeGridMumRad=inGridNumRad+ceil(gridNumOutCharge);
chargeGridMumRad=ceil(chargeGridMumRad); %装药区域半径方向处
%计算域半径
domainLen=chargeR+Sum_GeoSeq(basicGridSize.*gridRatio,waterGridNumRad,gridRatio);
gridNumAllRad=chargeGridMumRad+waterGridNumRad;
%%-------------------质量检查并输出结果-------------------%%
inGridSize=inRadius./inGridNumRad; %核心区域网格尺寸
waterGridSize=domainLen.*pi./gridNumEdge; %水域边界处网格
elementNum=(gridNumAllRad-inGridNumRad)*gridNumEdge+inGridNumRad*(inGridNumRad*2);
temp=strcat("The gird size in core domain is ",num2str(inGridSize));
disp(temp);
temp=strcat("The grid size in outtest edge of water domain is ",num2str(waterGridSize));
disp(temp);
temp=strcat("The charge ratio of grid is ",num2str(gridRatio));
disp(temp);
temp=strcat("The element number of grid is ",num2str(elementNum));
disp(temp);
temp=strcat("The size of domain is ",num2str(domainLen));
disp(temp);
%%-------------------写入LSPP CommandFile文件-------------------%%
%-1-输出文件夹为当前工作路径
path=pwd;
%-2-输出文件打开操作
%输出文件全路径
outFile=strcat(path,'\\',fileName_cfile);
%打开输出文件
fID=fopen(outFile,'w');
count=0;
while fID==-1
if(count>100)
disp("打开文件尝试次数已超过100");
return;
end
fID=fopen(outFile,'w');
count=count+1;
end
%-3-写入文件
%开始
WriteStartPart(fID);
%创建空间点并写入——安照示意图
pntNum=15;
coord=zeros(pntNum,3);
coord(1,:)=[0,0,0];
coord(2,:)=[inRadius,0,0];
coord(3,:)=[chargeR,0,0];
coord(4,:)=[domainLen,0,0];
coord(5,:)=[0,inRadius,0];
coord(6,:)=[0,chargeR,0];
coord(7,:)=[0,domainLen,0];
coord(8,:)=[0,-inRadius,0];
coord(9,:)=[0,-chargeR,0];
coord(10,:)=[0,-domainLen,0];
coord(11,:)=[coordPb,coordPb,0];
coord(12,:)=[coordPb,-coordPb,0];
coord(13,:)=[domainLen+waterGridSize,0,0];
coord(14,:)=[0,domainLen+waterGridSize,0];
coord(15,:)=[0,-domainLen-waterGridSize,0];
for i=1:pntNum
WritePntCod(fID,coord(i,:));
end
WriteMidPart(fID);
%创建直线
lineNum=10;
line=zeros(pntNum,2);
line(1,:)=[5,1];
line(2,:)=[1,8];
line(3,:)=[5,11];
line(4,:)=[11,2];
line(5,:)=[2,12];
line(6,:)=[12,8];
line(7,:)=[5,6];
line(8,:)=[6,7];
line(9,:)=[8,9];
line(10,:)=[9,10];
for i=1:lineNum
WriteLine2Pnt(fID,line(i,:));
end
WriteMidPart(fID);
%创建弧线
arcNum=2;
arc=zeros(arcNum,3);
arc(1,:)=[6,3,9];
arc(2,:)=[7,4,10];
for i=1:arcNum
WriteCirArc3Pnt(fID,arc(i,:)); %11e,12e
end
WriteMidPart(fID);
%合并直线
WriteMergeLine(fID,0.001,[1,2]); %13e
WriteMergeLine(fID,0.001,[4,5]); %14e
WriteMidPart(fID);
%核心区域网格划分
edge=[13,3,14,6];
num=[inGridNumRad*2,inGridNumRad,inGridNumRad*2,inGridNumRad];
WriteMesh4Line(fID,edge,num,[1,1,1,1],1+mapFlag);
WriteMidPart(fID);
%合并直线
WriteMergeLine(fID,0.001,[3,14,6]); %15e
WriteMidPart(fID);
%划分装药外围网格
edge=[7,11,9,15];
num=[chargeGridMumRad-inGridNumRad,gridNumEdge,chargeGridMumRad-inGridNumRad,gridNumEdge];
ratio=[gridRatio,1,gridRatio,1];
WriteMesh4Line(fID,edge,num,ratio,1+mapFlag);
WriteMidPart(fID);
%划分外围水域网格
edge=[8,12,10,11];
num=[waterGridNumRad,gridNumEdge,waterGridNumRad,gridNumEdge];
ratio=[gridRatio,1,gridRatio,1];
WriteMesh4Line(fID,edge,num,ratio,2-fillFlag);
WriteMidPart(fID);
%处理边界条件
if boundFlag==0
%不做任何处理
elseif boundFlag==1
%创建NodeSet作为边界条件
WriteNodeSet(fID,12,waterGridSize./5);
elseif boundFlag==2
%创建ShellSet作为边界条件
WriteShellSet(fID,12,waterGridSize.*1.2);
elseif boundFlag==3
%创建Part3
line_out(1,:)=[7,14]; %16e
line_out(2,:)=[10,15]; %17e
for i=1:length(line_out)
WriteLine2Pnt(fID,line_out(i,:));
end
arc_out(1,:)=[14,13,15];
WriteCirArc3Pnt(fID,arc_out); %18e
edge=[16,18,17,12];
num=[1,gridNumEdge,1,gridNumEdge];
ratio=[1,1,1,1];
WriteMesh4Line(fID,edge,num,ratio,3-fillFlag);
WriteMidPart(fID);
end
%合并重合节点
WriteDupNode(fID,inGridSize/10);
WriteMidPart(fID);
%结束
WriteSaveExit(fID,fileName_k);
WriteEndPart(fID);
%-4-关闭文件
flag=fclose(fID);
while(flag==-1)
flag=fclose(fID);
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
基于MATLAB生成LS-PrePost软件命令行文件从而构建模型
共23个文件
m:23个
需积分: 49 5 下载量 141 浏览量
2022-06-14
10:15:06
上传
评论
收藏 13KB ZIP 举报
温馨提示
MATLAB代码->LS-PrePost命令行文件->导入LS-PrePost生成模型
资源详情
资源评论
资源推荐
收起资源包目录
LSPrePost_Model.zip (23个子文件)
LSPrePost_Model
WriteFunc
WriteNodeSet.m 471B
WriteSaveExit.m 444B
WriteSegSet.m 482B
WriteShellSet.m 476B
WriteLine2Pnt.m 386B
WriteStartPart.m 298B
WriteCreateBeamEle.m 393B
WriteMesh4Line.m 1KB
WriteCirArc3Pnt.m 267B
WriteBreakLinePara.m 135B
WritePntCod.m 205B
WriteMidPart.m 156B
WriteMergeLine.m 301B
WriteDupNode.m 424B
WriteEndPart.m 89B
Model
RectangleModel.m 7KB
PolyLength.m 306B
Tracer_Cir2D.m 1KB
BeamModel.m 2KB
Trace.m 1KB
Sum_GeoSeq.m 162B
N_GeoSeq.m 164B
CircleModel.m 7KB
共 23 条
- 1
郑永辉
- 粉丝: 14
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0