Что мы знаем о числе?
Ничего, но знают все.
Что мы знаем о тепле?
То же, что и о числе.

В. А. Зорич

В термодинамике большую роль играет отличие между обратимыми и необратимыми процессами. Идеальный цикл Карно включает в себя обратимый изотермический процесс превращения теплоты в работу. Его возможность обеспечивается тем, что предполагается бесконечно малая разность температур между источником теплоты и рабочим телом. С другой стороны, теплообмен между двумя телами с разными температурами является необратимым процессом, что подчеркивается во всех учебниках термодинамики. В этом случае переход к медленному процессу при стремлении времени к бесконечности не помогает, процесс остается необратимым. Энтропия системы, состоящей из двух тел с разными температурами, по мере передачи теплоты возрастает.

В. А. Зорич в книге ‘Математические аспекты классической термодинамики‘ предложил задачу, которая показывает, как при сохранении формулировки Клаузиуса 'Теплота не может переходить само собой (без компенсации) от более холодного тела к более тёплому' можно провести обратимый теплообмен между двумя брусками с разными температурами. Никогда не предполагал, что такое возможно. Конечно, предложенный процесс невозможен практически, но предлагаемая концептуальная модель дает новый взгляд на теплообмен.

Рассмотрим два бруска одинаковой длины и сечения, изготовленных из материала, теплоемкость которого не зависит от температуры. Первый брусок находится при температуре 100ºС, а второй при 0ºС. При соприкосновении брусков теплота переходит от более горячего к более холодному и в конце температура обоих брусков будет 50ºС. Рассчитаем изменение энтропии в этом процессе — для простоты теплоемкость каждого бруска возьмем равной единице:

\Delta S=ln\left(\frac{50+273.15}{100+273.15}\right)+ln\left(\frac{50+273.15}{273.15}\right)=0.024

Энтропия, как и следовало ожидать, увеличивается; процесс является необратимым. Из конечного состояния невозможно вернуть бруски в исходное состояние без использования энергии извне. Этот случай принадлежит к стандартному теплообмену.

Хитрый математик Зорич предложил следующее. Представим, что каждый из брусков разделен пополам адиабатической перегородкой. Теперь проведем теплообмен путем продви­жения одного из брусков вдоль другого. Ниже эта идея показана схематически на рисунке вместе с получающимися температурами в ходе перемещения бруска. Как обычно, считается, что передвижение бруска не требует дополнительной энергии - это процесс без трения и он происходит на одной высоте.

Рис. 1. Перемещение двух брускок с адиабатической перегородкой.
Рис. 1. Перемещение двух брускок с адиабатической перегородкой.

Исходная позиция — бруски не касаются друг друга. Следующая позиция - перемещение нижнего бруска на половину длины. В силу адиабатических перегородок теплообмен идет только среди соприкасающихся частей брусков. Следующий шаг совмещает бруски, но в силу адиабатических перегородок справа и слева разные температуры. Теперь можно сделать последний шаг, ведь брусок еще раз можно передвинуть.

Достижение термического равновесия по частям привело к тому, что средняя температура нижнего бруска стала больше средней температуры верхнего бруска. Второй закон термодинамики не нарушен, теплота все время переходила от более горячего к более холодному телу, но при этом удалось передать от горячего тела к холодному больше энергии, чем в стандартном теплообмене без перегородок. Энтропия возросла в таком процессе на меньшую величину по сравнению со стандартным теплообменом: 0.021.

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

Рис. 2.  Температурное распределение в брусках при разно числе разбиений.
Рис. 2. Температурное распределение в брусках при разно числе разбиений.

На графике показано температурное распределение в двух брусках после завершения процесса передвижения для трех разных разбиений брусков, на 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)