主要内容

带点荷载梁的降阶建模技术

这个例子展示了如何通过使用Craig-Bampton降阶建模技术消除不在感兴趣边界上的自由度(dof)。实例中还使用了小维超元对系统进行动力学分析。为了便于比较,本例还对原结构进行了直接的瞬态分析。

为瞬态分析创建结构模型。

modelT = createpde(“结构”“transient-solid”);

创建一个正方形横截面梁几何图形,并将其包含在模型中。

Gm = multicuboid(0.05,0.003,0.003);modelT。几何= gm;

绘制几何图形,显示面和边标签。

图pdegplot (modelT,“FaceLabels”“上”“FaceAlpha”,0.5)视图([71 4])

图中包含一个轴对象。坐标轴对象包含颤动、贴片、线条类型的3个对象。

图pdegplot (modelT,“EdgeLabels”“上”“FaceAlpha”,0.5)视图([71 4])

图中包含一个轴对象。坐标轴对象包含颤动、贴片、线条类型的3个对象。

指定材料的杨氏模量、泊松比和质量密度。

structuralProperties (modelT“YoungsModulus”210 e9,...“PoissonsRatio”, 0.3,...“MassDensity”, 7800);

固定梁的一端。

structuralBC (modelT“边缘”,[2 8 11 12],“约束”“固定”);

在面3的中心添加一个顶点。

loaddvertex = addVertex(gm,“坐标”,[0.025 0.0 0.0015]);图pdegplot (modelT,“VertexLabels”“上”“FaceAlpha”,0.5)视图([78 2.5])

图中包含一个轴对象。坐标轴对象包含颤动、贴片、线条类型的3个对象。

生成一个网格。

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 = solve(modelT,tlist);

使用固定的和加载的边界定义超元素接口。在这种情况下,降阶模型保留固定面和加载顶点上的自由度(dfs),同时压缩所有其他dfs以支持模态dfs。为了获得更好的性能,使用包围面5的边集而不是使用整个面。

structuralSEInterface (modelT“边缘”,[2 8 11 12]);structuralSEInterface (modelT“顶点”, loadedVertex);

减小结构,保留所有固定接口模式5 e5

rom = reduce(modelT,“FrequencyRange”, -0.1, 5 e5);

接下来,利用降阶模型对系统的暂态动力学进行模拟。使用ode15s函数直接积分简化的系统ODE。使用简化模型需要对简化后的系统矩阵进行索引rom.K而且rom.M.首先,构造索引的映射K而且中可用的数据来加载和固定dfs

自由度对应于平动位移。如果模型中的网格点数为神经网络,然后工具箱将id分配给dof,如下所示1神经网络x位移,神经网络+ 12 *神经网络y位移,2神经网络+ 13 *神经网络z位移。简化的模型对象中保留的dof的这些idrom.RetainedDoF

创建一个函数,返回给定节点id和节点数量的DoF id。

getDoF = @(x,numNodes) [x(:);x(:) + numNodes;x(:) + 2*numNodes];

已知给定节点id的DoF id后,使用相交函数来查找所需的索引。

numNodes = size(rom.Mesh.Nodes,2);loaddnode = findNodes(rom。网,“地区”“顶点”, loadedVertex);loaddfs = getDoF(loaddnode,numNodes);[~,loadNodeROMIds,~] = intersect(rom.RetainedDoF, loaddfs);

在简化矩阵中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(odedfs, odedfs);numODE = numel(odeDoFs);

现在你有一个二阶ode系统。使用ode15s,通过应用线性化将其转换为一阶ode的系统。这样的一阶系统是二阶系统的两倍大。

模式=[眼睛(numODE,numODE),零(numODE,numODE);...0 (numODE numODE) Mconstrained];Kode = [0 (numODE,numODE), -eye(numODE,numODE);...Kconstrained 0 (numODE numODE)];Fode = 0 (2*numODE,1);

整个系统中指定的集中力载荷沿z-方向,即ODE系统的第三自由度。考虑线性化后得到一阶系统的加载ODE自由度。

loadODEDoF = numODE + 3;

指定ODE求解器的质量矩阵和雅可比矩阵。

Odeoptions = odeset;Odeoptions = odeset(Odeoptions,的雅可比矩阵, -Kode);Odeoptions = odeset(Odeoptions,“质量”模式);

指定零初始条件。

u0 = 0 (2*numODE,1);

利用ode15s和辅助函数解决简化系统CMSODEf,在本例的最后定义。

sol = ode15s(@(t,y) CMSODEf(t,y,Kode,Fode,loadODEDoF),...情况,tlist odeoptions);

计算ODE变量和时间导数的值。

[displ,vel] = deval(sol,tlist);

画出z-加载顶点的位移,并将其与简化ODE系统解中的第三自由度进行比较。

图绘图(tlist,RT.Displacement.uz(loadedVertex,:))保持情节(tlist displ (3:)的r *)标题(“加载顶点的z位移”)传说(“全模式”“罗”

图中包含一个轴对象。标题为Z-Displacement at Loaded Vertex的axis对象包含2个line类型的对象。这些对象表示完整的模型,rom。

根据接口自由度和模态自由度了解解决方案,您可以为整个模型重建解决方案。的reconstructSolution函数要求的位移,速度和加速度在所有dfs.构造完整的解向量,包括在固定dfs处的零值。

u = 0 (size(rom.K,1),numel(tlist));ut = 0 (size(rom.K,1),numel(tlist));utt = 0 (size(rom.K,1),numel(tlist));u(odedfs,:) = displ(1:numODE,:);ut(odedfs,:) = vel(1:numODE,:);utt(odedfs,:) = vel(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位移)传说(“全模式”“罗”

图中包含一个轴对象。标题为Z-Displacement at Geometric Center的axis对象包含2个类型为line的对象。这些对象表示完整的模型,rom。

ODE Helper命令功能

函数f = CMSODEf(t,u,Kode,Fode,loadedVertex) Fode(loadedVertex) = 10*sin(6000*t);f = -Kode*u +Fode;结束