Выполните 2-D анализ упругости плоскости-напряжения.
Тонкая прямоугольная пластина под одноосным натяжением имеет равномерное распределение напряжений. Введение кругового отверстия в диске нарушает равномерное распределение напряжений около отверстия, приводя к значительному превышению среднего напряжения. Такая тонкая пластина, удовлетворяющая загрузку в плоскости, может быть проанализирована как 2-D задача упругости плоскости-напряжения. В теории, если пластина бесконечна, то напряжение около отверстия в три раза превышает среднее напряжение. Для прямоугольной пластины конечной ширины коэффициент концентрации напряжения является функцией от отношения диаметра отверстия к ширине пластины. Этот пример аппроксимирует коэффициент концентрации напряжения с помощью пластины конечной ширины.
Создайте несущую модель для статического анализа плоскость-напряжение.
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. Сгенерируйте mesh, используя Hmax
для управления размером сетки.
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';