带点荷载梁的降阶建模技术
这个例子展示了如何使用craigg - bampton降阶建模技术消除不在感兴趣边界上的自由度(dfs)。算例中还使用了小维超元对系统进行动力学分析。为了便于比较,本算例还对原结构进行了直接的瞬态分析。
为暂态分析创建一个结构模型。
modelT = createpde (“结构性”,“transient-solid”);
创建一个正方形截面梁几何,并将其包含在模型中。
通用= multicuboid (0.05, 0.003, 0.003);modelT。几何=通用;
绘制几何图形,显示面和边缘标签。
图pdegplot (modelT,“FaceLabels”,“上”,“FaceAlpha”, 0.5)视图(71 [4])
图pdegplot (modelT,“EdgeLabels”,“上”,“FaceAlpha”, 0.5)视图(71 [4])
指定材料的杨氏模量、泊松比和质量密度。
structuralProperties (modelT“YoungsModulus”210 e9,…“PoissonsRatio”, 0.3,…“MassDensity”, 7800);
固定横梁的一端。
structuralBC (modelT“边缘”,[2 8 11 12],“约束”,“固定”);
在面3的中心添加一个顶点。
loadedVertex = addVertex(通用、“坐标”[0.025 0.0 0.0015]);图pdegplot (modelT,“VertexLabels”,“上”,“FaceAlpha”2.5, 0.5)视图([78])
生成一个网格。
generateMesh (modelT);
施加一个正弦集中力在z-方向上的新顶点。
structuralBoundaryLoad (modelT“顶点”loadedVertex,…“力”(0, 0, 10),“频率”, 6000);
指定零初始条件。
structuralIC (modelT“速度”(0 0 0),“位移”, 0 0 0);
解决模型。
tlist = 0:0.00005:3E-3;RT =解决(modelT tlist);
使用固定的和加载的边界定义超元素接口。在这种情况下,降阶模型保留了固定面和加载顶点上的自由度,同时压缩了所有其他自由度,使之有利于模态自由度。为了获得更好的性能,使用绑定面5的边集而不是使用整个面。
structuralSEInterface (modelT“边缘”,[2 8 11 12]);structuralSEInterface (modelT“顶点”, loadedVertex);
减少结构,保留所有固定接口模式至5 e5
.
罗=减少(modelT,“FrequencyRange”, -0.1, 5 e5);
其次,采用降阶模型模拟瞬态动力学。使用ode15s
函数直接对简化后的系统ODE进行积分。使用简化的模型需要索引到简化的系统矩阵rom.K
而且rom.M
.首先,构造指标的映射K
而且米
中可用的数据来加载和固定自由度罗
.
自由度对应于平动位移。如果模型中网格点的数量为神经网络
,然后工具箱将id分配给dof如下1
来神经网络
是x位移,神经网络+ 1
来2 *神经网络
是y位移,2神经网络+ 1
来3 *神经网络
是z位移。简化的模型对象罗
包含保留的dof的这些idrom.RetainedDoF
.
创建一个函数,在给定节点id和节点数量的情况下返回DoF id。
getDoF = @(x,numNodes) [x(:);x (:) + numNodes;x (:) + 2 * numNodes];
知道给定节点id的自由度id后,使用相交
函数查找所需的索引。
numNodes =大小(rom.Mesh.Nodes, 2);loadedNode = findNodes(罗。网,“地区”,“顶点”, loadedVertex);loadDoFs = getDoF (loadedNode numNodes);[loadNodeROMIds, ~ ~] =相交(rom.RetainedDoF loadDoFs);
在简化矩阵中rom.K
而且rom.M
,在保留自由度之后出现广义模态自由度。
fixedIntModeIds = (numel(rom.RetainedDoF) + 1:size(rom.K,1))';
因为固定端自由度不是ODE系统的一部分,所以约简矩阵中ODE自由度的指标如下:
odeDoFs = [loadNodeROMIds; fixedIntModeIds];
有关的rom.K
而且rom.M
对于时间积分:
Kconstrained = rom.K (odeDoFs odeDoFs);Mconstrained = rom.M (odeDoFs odeDoFs);numODE =元素个数(odeDoFs);
现在你有了ode的二阶系统。使用ode15s
,通过应用线性化将其转换为一阶ode系统。这样一个一阶系统的大小是二阶系统的两倍。
模式= [eye(numODE,numODE), zero (numODE,numODE);…0 (numODE numODE) Mconstrained];Kode = [zeros(numODE,numODE), -eye(numODE,numODE);…Kconstrained 0 (numODE numODE)];飘流= 0 (2 * numODE, 1);
全系统中指定的集中力载荷沿z-方向,即ODE系统中的第三自由度。考虑线性化得到一阶系统,给出了加载ODE自由度。
loadODEDoF = numODE + 3;
指定ODE求解器的质量矩阵和雅可比矩阵。
odeoptions = odeset;odeoptions = odeset (odeoptions,“雅可比矩阵”, -Kode);odeoptions = odeset (odeoptions,“质量”模式);
指定零初始条件。
情况= 0 (2 * numODE, 1);
通过使用ode15s和辅助函数来解决简化的系统CMSODEf
,在本例的最后定义。
sol = ode15s(@(t,y) CMSODEf(t,y,Kode,Fode,loadODEDoF),…情况,tlist odeoptions);
计算ODE变量和时间导数的值。
[displ,韦尔]=德瓦尔(sol tlist);
画出z-位移,并将其与简化ODE系统解中的第三自由度进行比较。
图绘制(tlist RT.Displacement.uz (loadedVertex,:))在情节(tlist displ (3:)“r *”)标题(“加载顶点的z位移”)传说(“全模式”,“罗”)
通过界面自由度和模态自由度了解解,可以为完整模型重建解。的reconstructSolution
函数要求在所有自由度下的位移,速度和加速度罗
.构造完整的解向量,包括在固定自由度处的零值。
u = 0(大小(rom.K, 1),元素个数(tlist));ut = 0(大小(rom.K, 1),元素个数(tlist));utt = 0(大小(rom.K, 1),元素个数(tlist));u (odeDoFs:) = displ (1: numODE,:);ut (odeDoFs:) =韦尔(1:numODE,:);utt (odeDoFs:) =韦尔(numODE + 1:2 * numODE:);
使用此解决方案构造一个暂态结果对象。
RTrom = reconstructSolution (rom, u, ut、utt tlist);
为了便于比较,用完整解和重构解计算梁中心内部的位移。
coordCenter = (0, 0, 0);iDispRT = interpolateDisplacement(RT, coordCenter);iDispRTrom = interpolateDisplacement(RTrom, coordCenter);图绘制(tlist iDispRT.uz,“k”)举行在情节(tlist iDispRTrom.uz,“g *”)标题(“几何中心z位移”)传说(“全模式”,“罗”)
ODE Helper函数
函数f = CMSODEf(t,u,Kode,Fode,loadedVertex) Fode(loadedVertex) = 10*sin(6000*t);f = -Kode*u +Fode;结束