Что мы знаем о числе?
Ничего, но знают все.
Что мы знаем о тепле?
То же, что и о числе.В. А. Зорич
В термодинамике большую роль играет отличие между обратимыми и необратимыми процессами. Идеальный цикл Карно включает в себя обратимый изотермический процесс превращения теплоты в работу. Его возможность обеспечивается тем, что предполагается бесконечно малая разность температур между источником теплоты и рабочим телом. С другой стороны, теплообмен между двумя телами с разными температурами является необратимым процессом, что подчеркивается во всех учебниках термодинамики. В этом случае переход к медленному процессу при стремлении времени к бесконечности не помогает, процесс остается необратимым. Энтропия системы, состоящей из двух тел с разными температурами, по мере передачи теплоты возрастает.
В. А. Зорич в книге ‘Математические аспекты классической термодинамики‘ предложил задачу, которая показывает, как при сохранении формулировки Клаузиуса 'Теплота не может переходить само собой (без компенсации) от более холодного тела к более тёплому' можно провести обратимый теплообмен между двумя брусками с разными температурами. Никогда не предполагал, что такое возможно. Конечно, предложенный процесс невозможен практически, но предлагаемая концептуальная модель дает новый взгляд на теплообмен.
Рассмотрим два бруска одинаковой длины и сечения, изготовленных из материала, теплоемкость которого не зависит от температуры. Первый брусок находится при температуре 100ºС, а второй при 0ºС. При соприкосновении брусков теплота переходит от более горячего к более холодному и в конце температура обоих брусков будет 50ºС. Рассчитаем изменение энтропии в этом процессе — для простоты теплоемкость каждого бруска возьмем равной единице:
Энтропия, как и следовало ожидать, увеличивается; процесс является необратимым. Из конечного состояния невозможно вернуть бруски в исходное состояние без использования энергии извне. Этот случай принадлежит к стандартному теплообмену.
Хитрый математик Зорич предложил следующее. Представим, что каждый из брусков разделен пополам адиабатической перегородкой. Теперь проведем теплообмен путем продвижения одного из брусков вдоль другого. Ниже эта идея показана схематически на рисунке вместе с получающимися температурами в ходе перемещения бруска. Как обычно, считается, что передвижение бруска не требует дополнительной энергии - это процесс без трения и он происходит на одной высоте.

Исходная позиция — бруски не касаются друг друга. Следующая позиция - перемещение нижнего бруска на половину длины. В силу адиабатических перегородок теплообмен идет только среди соприкасающихся частей брусков. Следующий шаг совмещает бруски, но в силу адиабатических перегородок справа и слева разные температуры. Теперь можно сделать последний шаг, ведь брусок еще раз можно передвинуть.
Достижение термического равновесия по частям привело к тому, что средняя температура нижнего бруска стала больше средней температуры верхнего бруска. Второй закон термодинамики не нарушен, теплота все время переходила от более горячего к более холодному телу, но при этом удалось передать от горячего тела к холодному больше энергии, чем в стандартном теплообмене без перегородок. Энтропия возросла в таком процессе на меньшую величину по сравнению со стандартным теплообменом: 0.021.
Следующий логический шаг — это увеличение числа разбиений и исследование предела, когда число разбиений стремится к бесконечности. Зорич оставил это в качестве упражнения и, возможно, математики смогут провести строгое доказательство. Я же ограничусь использованием небольшой программки на Питоне (см. приложение), которая рассчитывает конечную температуры в обоих стержнях при заданном числе разбиений. Ниже я приведу только один график:

На графике показано температурное распределение в двух брусках после завершения процесса передвижения для трех разных разбиений брусков, на 5, 500 и 10000 частей. Температуры кусочков соединены прямыми линиями, что создает несколько неправильное представление в особенности в случае разбиения на 5 частей, поскольку должны быть пять горизонтальных линий. Но для больших чисел разбиений это не играет практически никакой роли.
Конечные температурные распределения бруска с исходной температурой 100ºС (hot) находятся внизу графика — в ходе такого процесса брусок охлаждается; при увеличении числа разбиений до 0ºС. В то же время брусок с исходной температурой 0ºС (cold) нагревается при увеличении числа разбиений до 100ºС. Температура самой левой точки бруска с исходной температурой 100ºС и самой правой точки бруска с исходной температурой 0ºС остается равной 50ºС. Однако области, прилежащие к этим точкам, при увеличении числа разбиений сужаются и при стремлении к бесконечности превратятся в дельта функции.
Программа также делает расчет изменения энтропии как функции числа разбиений. Оно уменьшается и при устремлении числа разбиений к бесконечности стремится к нулю. Предложенный Зоричем процесс будет обратимым процессом передачи теплоты от одного бруска (100ºС) к другому (0ºС) при бесконечном числе разбиений! Отличие этого процесса от изотермического процесса обратимого цикла Карно связано с тем, что в качестве бесконечно малого рассматривается не разница температур, а количество нагреваемого вещества.
Бесконечное количество разбиений соответствует использованию материала с анизотропной теплопроводностью, когда теплопроводность по направлению между брусками бесконечно больше теплопроводности в двух других направлениях. Представим себе два бруска с такой анизотропной теплопроводностью. Исходная температура одного бруска 100ºС, а другого 0ºС. Теперь бесконечно медленно проводим один брусок мимо другого - бруски поменялись температурами. Можно теперь двигать бруски в обратном направлении и опять произойдет обмен температурами. При этом второй закон в виде формулировки Клаузиуса не нарушается, теплота все время переходит от более горячего к более холодному телу. Таким образом, обратимый процесс теплообмена между двумя телами с разными температурами возможен на уровне концептуальной идеализированной модели.
В заключение отмечу, что на практике используется рекуперативные противоточные теплообменники; идея Зорича несколько перекликается с принципом их работы.
Список литературы
Владимир Антонович Зорич, Математические аспекты классической термодинамики, 2019.
Приложение
# Evgenii Rudnyi # requires matplotlib (it includes numpy) # python -m pip install -U matplotlib import numpy import pylab import math import numbers def PlotResultTogether(X, Y, FileName = 'plot', CommonTitle = '', FunctionX = lambda x: x, FunctionY = lambda x: x, LogX = False, LogY = False, LimX = False, LimY = False, Options = False, Grid = False, LabelX = False, LabelY = False, Legend = False, Location = 0): """makes plots in the same figure. Options: FileName for the base name, CommonTitle for a title, FunctionX and FunctionY to modify series values, LogX and LogY to turn on a logarithmic scale for X and Y axes, Options is a list of dictionaries with matplotlib properties for each series.""" pylab.title(CommonTitle) ax = pylab.gca() if LogX: ax.set_xscale("log") if LogY: ax.set_yscale("log") pylab.grid(Grid) if LimX: pylab.xlim(LimX) if LimY: pylab.ylim(LimY) if LabelX: pylab.xlabel(LabelX) if LabelY: pylab.ylabel(LabelY) kk = 0 for i in range(len(Y)): if isinstance(X[0], numbers.Number): x = [FunctionX(k) for k in X] else: x = [FunctionX(k) for k in X[i]] y = [FunctionY(k) for k in Y[i]] if Options == False: pylab.plot(x, y) else: pylab.plot(x, y, **Options[kk]) kk = kk + 1 if kk == len(Options): kk = 0 if Legend != False: pylab.legend(Legend, loc = Location) pylab.savefig(FileName, dpi=125) pylab.clf() def ComputeChangeS(x,T_ini): """ computes entropy change for given temperatures in the array """ S = 0 N = len(x) for i in range(N): S = S + math.log((x[i] + 273.15)/(T_ini+273.15))/N return S def run(N): """ run the procedure to move bricks N is the number of divisions """ n = numpy.full((N,),100.) m = numpy.zeros((N,)) for i in range(N): for j in range(i + 1): val = (n[-i+j-1] + m[j])/2 m[j] = n[-i+j-1] = val for i in range(N - 1): for j in range(N - 1 - i): val = (n[j] + m[j + i + 1])/2 m[j + i + 1] = n[j] = val delS1 = ComputeChangeS(n, 100) delS2 = ComputeChangeS(m, 0) return numpy.mean(n), numpy.mean(m), delS1 + delS2, n, m #The main code #This is array with the number of divisions to run and plot arrN = [5, 10, 50, 100, 500, 1000, 5000, 10000] delS = [] meann = [] meanm = [] vecn = [] vecm = [] for i in arrN: print(i) a, b, c, d, e = run(i) print(a, b, c) meann.append(a) meanm.append(b) delS.append(c) vecn.append(d) vecm.append(e) PlotResultTogether(range(i), [d, e], Legend = ['hot', 'cold'], FileName='temp_' + str(i)) #Plot just three curves together ia = 0 ib = 4 ic = 7 na = arrN[ia] nb = arrN[ib] nc = arrN[ic] a = numpy.linspace(0., 1., na) b = numpy.linspace(0., 1., nb) c = numpy.linspace(0., 1., nc) legend = ['hot_' + str(na), 'cold_' + str(na), 'hot_' + str(nb), 'cold_' + str(nb), 'hot_' + str(nc), 'cold_' + str(nc)] PlotResultTogether([a, a, b, b, c, c], [vecn[ia], vecm[ia], vecn[ib], vecm[ib], vecn[ic], vecm[ic]], Legend = legend, LabelX = 'Length', LabelY='Temperature', FileName='temp_together') #plot mean temperature as a function of a number of division PlotResultTogether(arrN, [meann, meanm], Legend = ['hot', 'cold'], FileName='meanT', LogX = True) #plot entropy change as a function of a number of division PlotResultTogether(arrN, [delS], Legend = ['delS'], FileName='delS', LogX = True, LogY = True)

