Физическая модель температурного поля плоского радиационного теплообменника
В данном примере будет рассмотрено моделирование плоского радиационного теплообменника, аналогичного тому, что представлен в примере /user/start/examples/math_and_optimization/heat_exchanger/heat_exchanger.ngscript, с помощью блоков библиотеки теплофизики.
Расчётная схема теплообменника с разбиением на элементы:
При реализации данной расчётной схемы в Engee были использованы элементы тепловой библиотеки физического моделирования.
Ключевые блоки используемые в модели:
-
Temperature Source блок, реализующий граничные условия по температуре крайних (1 и 20) участков теплообменника
-
Controlled Heat Flow Rate Source источник тепла, характеризующий тепловой поток от Солнца
-
Thermal Mass в данной модели, используется в качестве элемента теплообменника, в соответствии с расчётной схемой, а также как элемент космического пространства, в которое излучается тепло от теплообменника
-
Radiative Heat Transfer характеризует перенос тепла излучением от элемента теплообменника в космическое пространство
-
Thermal Resistance тепловое сопротивление между элементами
Модель Engee:
Граничные условия
На на первом и последнем участках теплообменника температура постоянна и равна 293,15 К:
,
.
Начальные условия
Температура в каждой точке теплообменника в начальный момент времени равна 293,15 К:
.
Определение параметров элементов теплообменника и окружающей среды
init_T = 293.15 # начальная температура каждого участка теплообменника
res = 0.167 # тепловое сопротивление между участками теплообменника
mass = 0.003375 # масса элемента теплообменника
c = 903.7 # теплоёмкость материала (алюминий)
F = 0.00025 # площадь поверхности элемента для расчёта теплового излучения
cosm_tepl = 10000000.0 # теплоёмкость космического пространства (условно бесконечная)
sigma = 5.6e-8; # постоянная Стефана-Больцмана
soln_teplo = 0.0400047; # тепловой поток от Солнца, поглащаемый участком теплообменника
Определение функции для загрузки и запуска модели
function start_model_engee()
try
engee.close("heat_exchanger_physmod", force=true) # закрытие модели
catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
m = engee.load("/user/start/examples/physmod/heat_exchanger_physmod/heat_exchanger_physmod.engee") # загрузка модели
end;
try
engee.run(m) # запуск модели
catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
m = engee.load("/user/start/examples/physmod/heat_exchanger_physmod/heat_exchanger_physmod.engee") # загрузка модели
engee.run(m) # запуск модели
end
end
start_model_engee (generic function with 1 method)
Запуск симуляции
try
start_model_engee() # запуск симуляции с помощью специальной функции, реализованной выше
catch err
end;
Выделение из переменной simout данных о температуре участков и их запись в переменные:
sleep(5)
T1 = simout["heat_exchanger_physmod/Левый край.T"].value[:] # вывод данных о температуре первого участка
T2 = simout["heat_exchanger_physmod/2.T"].value[:] # вывод данных о температуре второго участка
T3 = simout["heat_exchanger_physmod/3.T"].value[:]
T4 = simout["heat_exchanger_physmod/4.T"].value[:]
T5 = simout["heat_exchanger_physmod/5.T"].value[:]
T6 = simout["heat_exchanger_physmod/6.T"].value[:]
T7 = simout["heat_exchanger_physmod/7.T"].value[:]
T8 = simout["heat_exchanger_physmod/8.T"].value[:]
T9 = simout["heat_exchanger_physmod/9.T"].value[:]
T10 = simout["heat_exchanger_physmod/10.T"].value[:]
10001-element Vector{Any}:
293.15
293.1497921718863
293.1495843447339
293.1493765185428
293.14916869331296
293.1489608690444
293.14875304573707
293.14854522339107
293.14833740200635
293.1481295815829
293.1479217621207
293.14771394361975
293.1475061260801
⋮
292.68003535201126
292.6800341586253
292.6800329658837
292.6800317737862
292.68003058233245
292.68002939152205
292.6800282013547
292.6800270118301
292.6800258229477
292.68002463470737
292.6800234471086
292.6800222601512
Визуализация результатов моделирования
Вызов графической библиотеки:
using Plots
Подключение бэкэнда - метода отображения графики:
plotlyjs()
Plots.PlotlyJSBackend()
Построение графика решения по времени для отрезков с 1 по 10 (с левого края до середины теплообменника):
plot()
plot(collect(0:0.01:100.0), T1, label="1 отрезок")
plot!(collect(0:0.01:100.0), T2, label="2 отрезок")
plot!(collect(0:0.01:100.0), T3, label="3 отрезок")
plot!(collect(0:0.01:100.0), T4, label="4 отрезок")
plot!(collect(0:0.01:100.0), T5, label="5 отрезок")
plot!(collect(0:0.01:100.0), T6, label="6 отрезок")
plot!(collect(0:0.01:100.0), T7, label="7 отрезок")
plot!(collect(0:0.01:100.0), T8, label="8 отрезок")
plot!(collect(0:0.01:100.0), T9, label="9 отрезок")
plot!(collect(0:0.01:100.0), T10, label="10 отрезок")
Вывод
В данном примере было продемонстрировано моделирование плоского теплообменника, созданного из блоков тепловой библиотеки. Результаты симуляции численно близки к тем, что были получены с помощью численного решения дифференциального уравнения теплопроводности, из чего можно сделать вывод о том, что подход, подразумевающий представление участков в виде отдельных тепловых масс, верен.