Выполните 2D анализ эластичности плоского напряжения.
Тонкая прямоугольная пластина под одноосной силой имеет универсальное распределение напряжения. Представление кругового отверстия в пластине нарушает универсальное распределение напряжения около отверстия, приводящего к значительно более высокому, чем среднее напряжение. Такая тонкая пластина согласно загрузке в плоскости, может анализироваться как 2D проблема эластичности плоского напряжения. В теории, если пластина бесконечна, то напряжение около отверстия в три раза выше, чем среднее напряжение. Для прямоугольной пластины конечной ширины фактором концентрации напряжения является функция отношения диаметра отверстия к ширине пластины. Этот пример аппроксимирует фактор концентрации напряжения использование пластины конечной ширины.
Создайте структурную модель для статического плоского расчета напряжений.
model = createpde('structural','static-planestress');
Пластина должна быть достаточно длинной, так, чтобы прикладные загрузки и граничные условия были далеки от кругового отверстия. Это условие гарантирует, что состояние универсальной силы преобладает в далеком поле и, поэтому, аппроксимирует бесконечно длинную пластину. В этом примере длина пластины в четыре раза больше своей ширины. Задайте следующие геометрические параметры проблемы.
radius = 20.0; width = 50.0; totalLength = 4*width;
Задайте матрицу описания геометрии (GDM) для прямоугольника и круга.
R1 = [3 4 -totalLength totalLength ... totalLength -totalLength ... -width -width width width]'; C1 = [1 0 0 radius 0 0 0 0 0 0]';
Задайте объединенный GDM, матрицу пространства имен, и установите формулу создавать анализируемую геометрию с помощью decsg
.
gdm = [R1 C1]; ns = char('R1','C1'); g = decsg(gdm,'R1 - C1',ns');
Создайте геометрию и включайте ее в структурную модель.
geometryFromEdges(model,g);
Постройте геометрию, отображающую метки ребра.
figure pdegplot(model,'EdgeLabel','on'); axis([-1.2*totalLength 1.2*totalLength -1.2*width 1.2*width]) title 'Geometry with Edge Labels';
Постройте геометрию, отображающую метки вершины.
figure pdegplot(model,'VertexLabels','on'); axis([-1.2*totalLength 1.2*totalLength -1.2*width 1.2*width]) title 'Geometry with Vertex Labels';
Задайте модуль Молодежи и отношение Пуассона, чтобы смоделировать линейное эластичное существенное поведение. Не забудьте задавать физические свойства в сопоставимых модулях.
structuralProperties(model,'YoungsModulus',200E3,'PoissonsRatio',0.25);
Ограничьте все движения твердого тела пластины путем определения достаточных ограничений. Для статического анализа ограничения должны также сопротивляться движению, вызванному прикладной загрузкой.
Установите x
- компонент смещения на левом крае (ребро 3), чтобы обнулить, чтобы сопротивляться прикладной загрузке. Установите y
- компонент смещения в левом нижнем углу (вершина 3), чтобы обнулить к сдержанности движение твердого тела.
structuralBC(model,'Edge',3,'XDisplacement',0); structuralBC(model,'Vertex',3,'YDisplacement',0);
Примените поверхностную тягу с ненулевым x
- компонент на правом краю пластины.
structuralBoundaryLoad(model,'Edge',1,'SurfaceTraction',[100;0]);
Чтобы получить градацию в решении точно, используйте мелкую сетку. Сгенерируйте mesh, с помощью Hmax
управлять размером mesh.
generateMesh(model,'Hmax',radius/6);
Постройте mesh.
figure pdemesh(model)
Решите модель эластичности плоского напряжения.
R = solve(model);
Постройте x
- компонент нормального распределения напряжения. Напряжение равно прикладной силе далеко от кругового контура. Максимальное значение напряжения происходит около кругового контура.
figure pdeplot(model,'XYData',R.Stress.sxx,'ColorMap','jet') axis equal title 'Normal Stress Along x-Direction';
Чтобы видеть детали изменения напряжения около кругового контура, сначала задайте набор точек на контуре.
thetaHole = linspace(0,2*pi,200); xr = radius*cos(thetaHole); yr = radius*sin(thetaHole); CircleCoordinates = [xr;yr];
Затем интерполируйте значения напряжений в этих точках при помощи interpolateStress
. Эта функция возвращает массив структур со своими полями, содержащими интерполированные значения напряжений.
stressHole = interpolateStress(R,CircleCoordinates);
Постройте нормальное напряжение направления по сравнению с угловым положением точек интерполяции.
figure plot(thetaHole,stressHole.sxx) xlabel('\theta') ylabel('\sigma_{xx}') title 'Normal Stress Around Circular Boundary';
Пластина с моделью отверстия имеет две оси симметрии. Поэтому можно смоделировать четверть геометрии. Следующая модель решает квадрант полной модели с соответствующими граничными условиями.
Создайте структурную модель для статического плоского расчета напряжений.
symModel = createpde('structural','static-planestress');
Создайте геометрию, которая представляет один квадрант исходной модели. Вы не должны создавать дополнительные ребра, чтобы ограничить модель правильно.
R1 = [3 4 0 totalLength/2 totalLength/2 ... 0 0 0 width width]'; C1 = [1 0 0 radius 0 0 0 0 0 0]'; gm = [R1 C1]; sf = 'R1-C1'; ns = char('R1','C1'); g = decsg(gm,sf,ns'); geometryFromEdges(symModel,g);
Постройте геометрию, отображающую метки ребра.
figure pdegplot(symModel,'EdgeLabel','on'); axis equal title 'Symmetric Quadrant with Edge Labels';
Задайте структурные свойства материала.
structuralProperties(symModel,'YoungsModulus',200E3, ... 'PoissonsRatio',0.25);
Примените симметричные ограничения на ребра 3 и 4.
structuralBC(symModel,'Edge',[3 4],'Constraint','symmetric');
Примените поверхностную тягу на ребро 1.
structuralBoundaryLoad(symModel,'Edge',1,'SurfaceTraction',[100;0]);
Сгенерируйте mesh и решите симметричную модель плоского напряжения.
generateMesh(symModel,'Hmax',radius/6);
Rsym = solve(symModel);
Постройте x
- компонент нормального распределения напряжения. Результаты идентичны первому квадранту полной модели.
figure pdeplot(symModel,'XYData',Rsym.Stress.sxx,'ColorMap','jet'); axis equal title 'Normal Stress Along x-Direction for Symmetric Model';