В этом примере показано, как решить проблему связанной термоупругости. Тепловое расширение или сжатие в механических компонентах и конструкциях происходит из-за изменения температуры в рабочей среде. Тепловое напряжение является вторичным проявлением: структура испытывает напряжения, когда структурные ограничения препятствуют свободному тепловому расширению или сжатию компонента. Отклонение биметаллического пучка - общефизический эксперимент. Типичная биметаллическая балка состоит из двух материалов, соединенных вместе. Коэффициенты теплового расширения (КТР) этих материалов существенно различаются. 
В этом примере показано отклонение биметаллической балки с использованием конструкционной конечноэлементной модели. Пример сравнивает это отклонение с аналитическим решением, основанным на приближении теории луча.
Создание статической модели несущих конструкций.
structuralmodel = createpde('structural','static-solid');
Создайте геометрию балки со следующими размерами.
L = 0.1; % m W = 5E-3; % m H = 1E-3; % m gm = multicuboid(L,W,[H,H],'Zoffset',[0,H]);
Включите геометрию в модель несущей конструкции.
structuralmodel.Geometry = gm;
Постройте график геометрии.
figure pdegplot(structuralmodel)

Определите метки ячеек, для которых требуется задать свойства материала.
Сначала отобразите метку нижней ячейки. Чтобы четко увидеть метку ячейки, увеличьте изображение левого конца балки и поверните геометрию следующим образом.
figure pdegplot(structuralmodel,'CellLabels','on') axis([-L/2 -L/3 -W/2 W/2 0 2*H]) view([0 0]) zticks([])

Теперь отобразите метку ячейки для верхней ячейки. Чтобы четко увидеть метку ячейки, увеличьте изображение правого конца балки и поверните геометрию следующим образом.
figure pdegplot(structuralmodel,'CellLabels','on') axis([L/3 L/2 -W/2 W/2 0 2*H]) view([0 0]) zticks([])

Задайте модуль Юнга, коэффициент Пуассона и линейный коэффициент теплового расширения для модели линейного упругого поведения материала. Для обеспечения непротиворечивости единиц необходимо указать все физические свойства в единицах СИ.
Назначьте свойства материала меди нижней ячейке.
Ec = 137E9; % N/m^2 nuc = 0.28; CTEc = 20.00E-6; % m/m-C structuralProperties(structuralmodel,'Cell',1, ... 'YoungsModulus',Ec, ... 'PoissonsRatio',nuc, ... 'CTE',CTEc);
Назначьте свойства материала инвара верхней ячейке.
Ei = 130E9; % N/m^2 nui = 0.354; CTEi = 1.2E-6; % m/m-C structuralProperties(structuralmodel,'Cell',2, ... 'YoungsModulus',Ei, ... 'PoissonsRatio',nui, ... 'CTE',CTEi);
В этом примере предположим, что левый конец балки зафиксирован. Чтобы наложить это граничное условие, отобразите метки граней на левом конце балки.
figure pdegplot(structuralmodel,'faceLabels','on','FaceAlpha',0.25) axis([-L/2 -L/3 -W/2 W/2 0 2*H]) view([60 10]) xticks([]) yticks([]) zticks([])

Наложите фиксированное граничное условие на грани 5 и 10.
structuralBC(structuralmodel,'Face',[5,10],'Constraint','fixed');
Применить изменение температуры в качестве тепловой нагрузки. Используйте исходную температуру 25 градусов Цельсия и рабочую температуру 125 градусов Цельсия. Таким образом, изменение температуры для этой модели составляет 100 градусов Цельсия.
structuralBodyLoad(structuralmodel,'Temperature',125);
structuralmodel.ReferenceTemperature = 25;Создайте сетку и решите модель.
generateMesh(structuralmodel,'Hmax',H/2);
R = solve(structuralmodel);Постройте график отклоненной формы биметаллического луча с величиной смещения в качестве данных цветовой карты.
figure pdeplot3D(structuralmodel,'ColorMapData',R.Displacement.Magnitude, ... 'Deformation',R.Displacement, ... 'DeformationScaleFactor',2) title('Deflection of Invar-Copper Beam')

Вычислите отклонение аналитически, основываясь на теории луча. Отклонение полосы δ K1, EcEi EiEc, Δ T - разность температур, αc и αi - коэффициенты теплового расширения меди инвараEc и Ei - модуль Юнга меди и инвара, а L - длина полосы.
K1 = 14 + (Ec/Ei)+ (Ei/Ec); deflectionAnalytical = 3*(CTEc - CTEi)*100*2*H*L^2/(H^2*K1);
Сравните аналитические результаты и результаты, полученные в этом примере. Результаты сопоставимы из-за большого соотношения сторон.
PDEToobox_Deflection = max(R.Displacement.uz); percentError = 100*(PDEToobox_Deflection - ... deflectionAnalytical)/PDEToobox_Deflection; bimetallicResults = table(PDEToobox_Deflection, ... deflectionAnalytical,percentError); bimetallicResults.Properties.VariableNames = {'PDEToolbox', ... 'Analytical', ... 'PercentageError'}; disp(bimetallicResults)
PDEToolbox Analytical PercentageError
__________ __________ _______________
0.0071061 0.0070488 0.8063