Ich suche in der Literatur nach dem Flory-Huggins-Phasendiagramm mit den folgenden Komponenten: Polymer, Lösungsmittel und einer dritten Komponente, die nicht mit den anderen Komponenten wechselwirkt (nur Entropieeffekte). Es muss getan worden sein, aber ich kann den Sonderfall nicht finden, in dem die dritte Komponente nicht interagiert. Mich interessiert der Entropieeffekt der dritten Komponente.
Danke für jede Hilfe.
Am besten, Jd
In dieser Antwort gehe ich zunächst auf das einfachere Problem einer Mischung mit drei Arten von Molekülen gleicher Größe ein. Dies ist für die ursprüngliche Frage insofern relevant, als die dritte Komponente nicht direkt mit den anderen interagiert, ihre Einführung jedoch das Phasendiagramm durch entropische Effekte ändert.
Nehmen Sie die freie Flory-Huggins-Energie der Form
Hier besteht zwischen den Molekültypen A, B eine enthalpische Wechselwirkung, die durch den Flory-Huggins-Parameter gekennzeichnet ist , und die Komponente C erscheint nur im Mischungsentropie-Term. In diesem Sinne kann die gegenwärtige freie Energie durch ein Ising-Modell mit drei Zuständen (Potts) über die mittlere Feldnäherung von Bragg-Williams erhalten werden. Die Diskussion hier ist qualitativ, aber für eher quantitative Theorien sollte man semiempirische Zustandsgleichungen verwenden, oder, wenn die Gleichungen von Spielzeugmodellen stammen, fortgeschrittenere Näherungsmethoden. Die quasichemische Näherung von (Bethe) Guggenheim kommt mir als die vielleicht einfachste dieser Methoden in den Sinn und kann mit relativ geringem zusätzlichen Aufwand numerisch ausgewertet werden.
Aus entgegengesetzter Sicht möchte man vielleicht versuchen, vereinfachende Annäherungen an die freie Energie zu machen, denn selbst für den vorliegenden einfachen Fall können ihre Minima nicht ohne Verwendung numerischer Methoden berechnet werden. Die (Landauer) Theorie, bei der Sie die freie Energie bezüglich des Ordnungsparameters auf die vierte Ordnung erweitern, ist vielleicht die beliebteste Annäherung. Die ungeraden Potenzen fallen bei der Entwicklung wegen der Symmetrie des Systems weg und damit ist der erste Polynomgrad, bei dem Sie tatsächlich zwei Phasen haben können.
Um den vorliegenden Fall tatsächlich zu lösen. könnte man vermuten konstant und dann schreiben
Ich habe das ternäre Phasendiagramm unten grafisch dargestellt
(horizontale Verbindungslinien).
Für Polymere ist die freie Energie von Flory-Huggins etwas komplizierter,
Wo die Größe des Polymers ist (oft macht man Annäherungen wo ). Diese einfache Addition verändert das Verhalten des Systems erheblich, denn die Symmetrie zwischen A und B ist dann grundlegend gebrochen.
Die Analyse ist aus zwei Gründen auch viel komplizierter (zumindest meine numerische Implementierung) als der Fall der kleinen Moleküle : Das System ist nicht perfekt symmetrisch, so dass es nicht zu zwei verschiedenen Minima der freien Energie des gleichmäßig gemischten Systems phasengetrennt wird. Vielmehr muss man die Punkte mit dem gleichen chemischen Potential finden und dann denjenigen finden, der die gewünschte Zusammensetzung mit der niedrigsten freien Energie erzeugt. Zweitens müssen die Verbindungslinien nicht horizontal sein, so dass es eine andere Dimension gibt, in Bezug auf die es zu minimieren gilt.
Ich habe meinen Code im Anhang A bereitgestellt , mit dem ich die unten stehende Grafik mit erzeugt habe
,
. Ich nehme an, der wichtigste Aspekt für Ihre Frage ist, dass die Verbindungslinien tatsächlich nicht horizontal sind.
Der folgende „Python“-Code-Hack erledigt die Aufgabe. Es gibt einige numerische Probleme, wenn die Argumente in den Logarithmen nahe Null gehen und so weiter. Dies könnte wahrscheinlich durch Taylor-Erweiterungen in der Nähe der Grenzen gemildert werden. So wie es aussieht, ist der Code unkommentiert und schrecklich hässlich. Wenn ich Zeit habe, werde ich es aufräumen und erklären, woher einige der schrecklichen Polynome usw. kommen (der Umgang mit den Domänengrenzen ist ein Chaos). Trauen Sie nicht den Antworten, die Ihnen das ausspuckt, ich muss noch richtig überprüfen, ob es funktioniert, aber ich dachte, Sie sollten sich den Code vielleicht eher früher als später ansehen, auch wenn er dysfunktional ist.
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='')
Dies ist das Code-Snippet, das ich für meine Diagramme verwende.
\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
ein großer
JD
ein großer
JD
ein großer
ein großer
JD
JD
JD
JD