Estoy buscando en la literatura el diagrama de fase de Flory-Huggins con los siguientes componentes: polímero, solvente y un tercer componente que no interactúa con los otros componentes (solo efectos de entropía). Debe haberse hecho, pero no puedo encontrar el caso especial en el que el tercer componente no interactúa. Estoy interesado en el efecto de entropía del tercer componente.
Gracias por cualquier ayuda.
Mejor, Jd
En esta respuesta, primero abordé el problema más simple de una mezcla con tres tipos de moléculas de tamaño idéntico. Esto tiene relevancia para la pregunta original en el sentido de que el tercer componente no interactúa directamente con los demás, pero su introducción cambia el diagrama de fase a través de efectos entrópicos.
Tome la energía libre de Flory-Huggins de la forma
Aquí los tipos de moléculas A, B tienen una interacción entálpica entre ellos caracterizada por el parámetro de Flory-Huggins , y el componente C solo aparece en la entropía del término de mezcla. En ese sentido, la energía libre actual se puede obtener mediante un modelo Ising de tres estados (Potts) a través de la aproximación del campo medio de Bragg-Williams. La discusión aquí es cualitativa, pero para teorías más cuantitativas se deben usar ecuaciones de estado semiempíricas, o si las ecuaciones provienen de modelos de juguete, métodos aproximados más avanzados. La aproximación cuasiquímica de (Bethe) Guggenheim viene a la mente como quizás el más simple de tales métodos, y puede evaluarse numéricamente con relativamente poco esfuerzo adicional.
Tomando el punto de vista opuesto, uno podría intentar hacer aproximaciones simplificadoras a la energía libre, ya que incluso para el presente caso simple, sus mínimos no pueden evaluarse sin el uso de métodos numéricos. El (Landau) La teoría, donde Taylor expande la energía libre con el parámetro de orden al cuarto orden, es quizás la aproximación más popular. Las potencias impares desaparecen en la expansión debido a la simetría del sistema y, por lo tanto, es el primer polinomio de grado donde en realidad puedes tener dos fases.
Para realmente ir a resolver el caso en cuestión. uno podría asumir constante y luego escribir
He graficado el diagrama de fase ternario a continuación para (líneas de unión horizontales).
Para los polímeros, la energía libre de Flory-Huggins es un poco más complicada,
dónde es el tamaño del polímero (a menudo se hacen aproximaciones donde ). Esta simple adición cambia considerablemente el comportamiento del sistema, ya que la simetría entre A y B se rompe fundamentalmente.
El análisis también es mucho más complicado (al menos mi implementación numérica lo es) que el caso de las moléculas pequeñas por dos razones: el sistema no es perfectamente simétrico, por lo que no se separa en fases en dos mínimos de energía libre diferentes del sistema uniformemente mezclado. Más bien, uno tiene que encontrar los puntos con el mismo potencial químico y luego encontrar el que produce la composición deseada con la energía libre más baja. En segundo lugar, las líneas de unión no necesitan ser horizontales, por lo que hay otra dimensión con respecto a la cual minimizar.
He proporcionado mi código en el Apéndice A , con el que he producido el siguiente gráfico con , . Para su pregunta, supongo que el aspecto más importante de esto es que las líneas de enlace no son horizontales.
El siguiente truco de código "Python" hace el trabajo. Tiene algunos problemas numéricos cuando los argumentos en los logaritmos se acercan a cero y demás. Esto probablemente podría aliviarse con expansiones de Taylor cerca de las fronteras. Tal como está, el código no tiene comentarios y es terriblemente feo. Si tengo tiempo, lo limpiaré y explicaré de dónde vienen algunos de los horribles polinomios, etc. (manejar los bordes del dominio es un desastre). No confíes en las respuestas que te escupe, todavía tengo que verificar correctamente que funciona, pero pensé que tal vez quieras echarle un vistazo al código, por disfuncional que sea, más temprano que tarde.
from scipy.optimize import *
# Size of polymer
N = 1.
# chi parameter
w = 3.
# function defs
def freeenfun(x, w):
phia = x[0]; phib = x[1]; phic = 1.-phia-phib
return w*phia*phib + phia*log(phia) + phib/N*log(phib) + phic*log(phic)
def freeender(x, w):
phia = x[0]; phib = x[1]; phic = 1.-phia-phib
fda = w*phib + log(phia/phic)
fdb = w*phia + log(phib)/N + 1./N - log(phic) - 1.
return fda, fdb
def freeenderdir(t, x, y, w, lvl):
phia = x[0] + t*cos(y); phib = x[1] + t*sin(y); phic = 1.-phia-phib
fda, fdb = freeender(array([phia, phib]), w)
fddir = fda*cos(y) + fdb*sin(y)
return fddir - lvl
def freeenfun2(t, x, y, w):
phia = x[0] + t*cos(y); phib = x[1] + t*sin(y); phic = 1.-phia-phib
return freeenfun(array([phia, phib]), w)
def frompatophi(t, x, y):
phia = x[0] + t*cos(y); phib = x[1] + t*sin(y); phic = 1.-phia-phib
return phia, phib, phic
def getonepair(y, x, w):
y = y[0]
a = cos(y)
b = sin(y)
bpol = roots(array([ (2*a**2*b**3 + 2*a**3*b**2)*w*N,
((4*a**2*b**2 + 2*a**3*b)*w*x[1] + (2*a*b**3 + 4*a**2*b**2)*w*x[0] - 2*a**2*b**2*w - a*b**3 - a**2*b**2)*N + a*b**3 + a**2*b**2,
(2*a**2*b*w*x[1]**2 + ((4*a*b**2 + 4*a**2*b)*w*x[0] - 2*a**2*b*w - a*b**2)*x[1] + 2*a*b**2*w*x[0]**2 + (-2*a*b**2*w - b**3 - 2*a*b**2)*x[0] - a**2*b)*N + a*b**2*x[1] + (b**3 + 2*a*b**2)*x[0] - a*b**2,
((2*a*b*w*x[0] + a**2)*x[1]**2 + (2*a*b*w*x[0]**2 + (-2*a*b*w - b**2 - 2*a*b)*x[0] - a**2)*x[1])*N + b**2*x[0]*x[1] + b**2*x[0]**2 - b**2*x[0] ]))[1:]
if any(iscomplex(bpol)):
return array([nan, nan])
lowerb = min(bpol)
upperb = max(bpol)
fdmax = freeenderdir(lowerb, x, y, w, 0)
fdmin = freeenderdir(upperb, x, y, w, 0)
hh = x[0]*tan(pi-y)
ww = x[1]*tan(y-pi/2)
if hh + x[1] < 1.:
tmax = sqrt(x[0]**2 + hh**2)
else:
tmax = sin(pi/4.)/sin(3.*pi/4.-y)*(1-x[1]-x[0])
if ww + x[0] < 1.:
tmin = -sqrt(x[1]**2 + ww**2)
else:
tmin = -sin(pi/4.)/sin(y-3.*pi/4.)*(1-x[0]-x[1])
def getonepair2(fd):
ma = brentq(freeenderdir, tmin+1e-12, lowerb, args=(x, y, w, fd))
mb = brentq(freeenderdir, upperb, tmax-1e-12, args=(x, y, w, fd))
return array([ma, mb])
def minfd(fd):
onepair = getonepair2(fd)
ypai0 = freeenfun2(onepair[0], x, y, w)
ypai1 = freeenfun2(onepair[1], x, y, w)
numd = (ypai1-ypai0)/diff(onepair)
return (freeenderdir(onepair[0], x, y, w, 0) - numd)**2
minres = minimize(minfd, (fdmax+fdmin)/2.)#, method='SLSQP', bounds=((fdmin, fdmax),))
return getonepair2(minres.x)
def minang(x, w):
def minfun(y):
onepair = getonepair(y, x, w)
a = -onepair[0]/(onepair[1]-onepair[0])
ff = (1-a)*freeenfun2(onepair[0], x, y, w) + a*freeenfun2(onepair[1], x, y, w)
return ff
minres = minimize(minfun, 135./180*pi)
return minres.x, getonepair(minres.x, x, w)
aa = linspace(0.2, 0.4999, 256)
phia = ones((2, len(aa)))*0
phib = zeros_like(phia)
phic = zeros_like(phia)
for i in range(len(aa)):
x = array([1, 1])*aa[i];
y, tt = minang(x, w)
phia[:, i], phib[:, i], phic[:, i] = frompatophi(tt, x, y)
kk = vstack((phia[0, :], phib[0, :], phic[0, :], phia[1, :], phib[1, :], phic[1, :])).transpose()
kk = kk[-isnan(kk[:, 0]), :]
savetxt('tern.dat', kk, header='A_a A_b A_c B_a B_b C_c', comments='')
Este es el fragmento de código que uso para mis gráficos.
\documentclass[class=minimal,border=0pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{ternary}
\begin{document}
\begin{tikzpicture}
\begin{ternaryaxis}[
ylabel=A,
zlabel=B,
xlabel=C
]
\addplot3[smooth,
tieline={each nth tie=10},
fill=blue!10,
]
table [y=A_a,z=A_b,x=A_c] {tern.dat};
\end{ternaryaxis}
\end{tikzpicture}
\end{document}
JD
JD
un gran
JD
un gran
JD
un gran
un gran
JD
JD
JD
JD