{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Un calcolo *Perplex-like*\n",
"\n",
"In questo notebook usiamo il programma Python *melt_perplex.py* che implementa un algoritmo in stile *Perplex* per il calcolo delle composizioni delle fasi solida e liquida in equilibrio a fissate condizioni P/T, nel caso dell'olivina. \n",
"\n",
"Come di consueto, lanciamo il programma, usiamo matplotlib nella versione *inline*.\n",
"\n",
"Il programma fa riferimento a un database termodinamico (*perplex2_db.dat*) che contiene i dati rilevanti, relativi ai termini puri che ci interessano nel caso specifico; questi vengono elencati non appena il programma venga lanciato e il database sia caricato:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Database perplex2_db.dat\n",
"Number of imported phases: 4\n",
"Phases: ['fo', 'fa', 'foL', 'faL'] \n"
]
}
],
"source": [
"%matplotlib inline\n",
"%run melt_perplex.py\n",
"\n",
"import inspect as ins"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Il programma implementa anche tutte le funzioni già usate in precedenza per il calcolo dell'equilibrio solido-liquido, che facevano uso delle funzioni della libreria *scipy* e che avevamo usato per la minimizzazione dell'energia libera. In particolare, la funzione *melt*, il cui uso è descritto dall'help:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Help on function melt in module __main__:\n",
"\n",
"melt(ip=0, nt=10, tfmax=0.0, W=8400.0, ideal=False, nt_prt=0)\n",
" Calcola il diagramma di stato TX del sistema fayalite-forsterite\n",
" \n",
" Input:\n",
" ip - pressione (GPa)\n",
" nt - numero di punti in temperatura\n",
" tfmax - se non 0, fissa il massimo di temperatura per il grafico\n",
" W - Parametro di Margules per la soluzione solida\n",
" (default: 8400 J/mole)\n",
" ideal - calcola un diagramma di riferimento ideale (default: False)\n",
" nt_ptr - se > 0 fissa il numero di valori di temperatura per\n",
" la stampa della tabella T(X) (default: 0; stampa tutti\n",
" gli nt valori calcolati)\n",
"\n"
]
}
],
"source": [
"help(melt)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Modello simmetrico di soluzione per il solido:\n",
"W*Xa*Xb; W= 8400.0 J/mole\n",
"\n",
"Temperatura di fusione della forsterite: 2161.01 K\n",
"Temperatura di fusione della fayalite: 1480.31 K\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" T (K) X(Mg)sol X(Fe)sol X(Mg)liq X(Fe)liq\n",
" 1480.31 0.01 0.99 0.00 1.00 \n",
" 1551.97 0.40 0.60 0.07 0.93 \n",
" 1623.62 0.65 0.35 0.12 0.88 \n",
" 1695.27 0.78 0.22 0.17 0.83 \n",
" 1766.92 0.86 0.14 0.24 0.76 \n",
" 1838.58 0.91 0.09 0.32 0.68 \n",
" 1910.23 0.94 0.06 0.42 0.58 \n",
" 1981.88 0.96 0.04 0.55 0.45 \n",
" 2053.53 0.98 0.02 0.70 0.30 \n",
" 2125.19 0.99 0.01 0.89 0.11 \n"
]
}
],
"source": [
"melt(nt=20,nt_prt=10,ideal=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Qui abbiamo fatto un calcolo a pressione 0 (il valore di default per *ip*), specificando il parametro di Margules W=8400 j/mole (il valore di default).\n",
"\n",
"La funzione *composition* ci restituisce le composizioni e le quantità relative di fase solida e liquida a P e T fissate, per una certa composizione *globale* del sistema. Per esempio, a T=1700 K, P=0 GPa e X(Mg) totale pari a 0.40 (con W=8400 j/mole) abbiamo:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pressione 0.0 GPa, Temperatura 1700.0 K\n",
"\n",
"Per una composizione X(Mg) globale pari a 0.40: \n",
"X(Mg) fase solida 0.79, quantità fase solida 0.37\n",
"X(Mg) fase liquida 0.18, quantità fase liquida 0.63\n"
]
}
],
"source": [
"composition(1700,0,8400,prt=True,xval=0.4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Bene, fino a qui è *storia* già vista nelle esercitazioni precedenti. Usiamo adesso la nuova funzione *perplex*, il cui input è descritto nell'help:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Help on function perplex in module __main__:\n",
"\n",
"perplex(it, ip, inat, W, prt=False, nx=20)\n",
" Calcola la composizione della fasi solida e liquida\n",
" all'equilibrio, data una certa temperatura e pressione, e\n",
" per una composizione globale del componente \"a\" (Mg) nel \n",
" sistema.\n",
" \n",
" Il calcolo è Perplex-like, nel senso vengono generati\n",
" pseudocomposti dei quali viene valutata l'energia libera;\n",
" gli pseudocomposti a minore energia libera sono quelli\n",
" che corrispondono alle fasi effettivamente in equilibrio.\n",
" \n",
" Input:\n",
" it - temperatura (K)\n",
" ip - pressione (GPa)\n",
" inat - composizione globale componente Mg\n",
" W - parametro di Margules\n",
" prt - se True, stampa le composizioni degli pseudo-composti\n",
" considerati (default: False) \n",
" nx - densità della griglia X/Q per la ricerca numerica\n",
" di X e Q (composizioni e quantità relative di S e L;\n",
" default: 20)\n",
"\n"
]
}
],
"source": [
"help(perplex)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In primo luogo, la funzione procede definendo una griglia nello spazio X/Q (composizioni delle fasi/quantità relativa delle fasi). Questo compito è assegnato alla funzione *perplex_comp*, richiamata da *perplex* che gli fornisce la composizione *globale* del sistema in termini di frazione molare X(Mg) (*inat*). La funzione *perplex_com* provvede a definire un certo numero di *pseudocomposti* con composizione X(Mg)s (frazione molare di Mg nella fase solida) e, al variare delle rispettive quantità molari *qs* e *ql* di fase solida e liquida (*qs* è l'altro asse della griglia XQ), si calcola le corrispondenti composizioni della fase liquida.\n",
"\n",
"Questo calcolo procede assumendo che $q^{tot}=q^S + q^L=1$ \\[una mole complessiva di $\\rm (Mg,Fe)_2SiO_4$ in solido + liquido \\]\n",
"\n",
"- Numero di moli di Mg in solido: $n_{\\rm Mg}^S = x_{\\rm Mg}^S q^S$\n",
"
\n",
"- Numero di moli di Mg nella fase liquida: $n_{\\rm Mg}^L = n_{\\rm Mg}^{tot}-n_{\\rm Mg}^S$, dove $n_{\\rm Mg}^{tot}$ coincide numericamente con $x_{\\rm Mg}^{tot}$ dato in input (*inat*), perchè $q^{tot}=q^S+q^L=1$ e quindi $n_{\\rm Mg}^{tot}=x_{\\rm Mg}^{tot}q^{tot}=x_{\\rm Mg}^{tot}$.\n",
"
\n",
"- Sapendo che $q^L=1-q^S$, la composizione della fase liquida sarà: $x_{\\rm Mg}^L=n_{\\rm Mg}^L/q^L$ \n",
"\n",
"La griglia X/Q è costruita facendo variare $x_{\\rm Mg}^S$ e $q^S$ tra 0 e 1 in *nx* punti (*nx* è un argomento opzionale di *perplex*, il cui default è pari a 20). \n",
"\n",
"Naturalmente non tutte le coppie $(x_{\\rm Mg}^S, q^S)$ (i punti della griglia) sono lecite data la composizione globale $x_{\\rm Mg}^{tot}$: se per esempio fosse $x_{\\rm Mg}^{tot}=0.5$, avremmo 0.5 moli di Mg nel sistema complessivo $q^S+q^L$; in tal caso un punto $(x_{\\rm Mg}^S, q^S)=(1,1)$, che equivale ad avere $n_{\\rm Mg}^S=x_{\\rm Mg}^Sq^S=1$, non sarebbe compatibile con $n_{\\rm Mg}^{tot}=0.5$ (ovviamente dovrebbe essere $n_{\\rm Mg}^{S} < n_{\\rm Mg}^{tot}$). Tutte le coppie di punti XQ non compatibili con la composizione globale (*inat*) portano a valori di $x_{\\rm Mg}^L$ fuori dall'intervallo \\[0,1\\] (una frazione molare è, per definizione, compresa tra 0 e 1...) e sono quindi scartate dalla funzione *perplex_comp*.\n",
"\n",
"Il codice della funzione *perplex_comp* è mostrato nella cella successiva"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"def perplex_comp(inat,nx):\n",
" '''\n",
" Calcola le possibili composizioni degli pseudocomposti\n",
" e le abbondanze relative delle due fasi in equilibrio, a \n",
" partire da una fissata composizione globale del componente \"a\" (Mg)\n",
" \n",
" Input: \n",
" inat - composizione globale del componente \"a\"\n",
" nx - densità della griglia X/Q per la ricerca numerica\n",
" di X e Q (composizioni e quantità relative di S e L)\n",
" '''\n",
" \n",
" xas=np.linspace(0.001,0.999,nx)\n",
" qs=np.linspace(0.001,0.999,nx)\n",
" \n",
" xas_l=np.array([])\n",
" xal_l=np.array([])\n",
" qs_l=np.array([])\n",
" ql_l=np.array([])\n",
" chk_l=np.array([])\n",
" \n",
" for ixas in xas: # loop sulle composizioni X(Mg) in S\n",
" for iqs in qs: # loop sulle moli di fase S\n",
" nas=iqs*ixas # moli di Mg in S\n",
" nal=inat-nas # moli di Mg in L\n",
" iql=1-iqs # moli di fase L\n",
" ixal=nal/iql # composizione X(Mg) in L\n",
" \n",
" # Controlli:\n",
" # 0.001 < X(Mg)L < 0.999 e\n",
" # chk = inat\n",
" if ixal >= 0.999 or ixal <= 0.001: continue\n",
" chk=ixas*iqs+ixal*iql \n",
" \n",
" xas_l=np.append(xas_l,ixas)\n",
" xal_l=np.append(xal_l,ixal)\n",
" qs_l=np.append(qs_l,iqs)\n",
" ql_l=np.append(ql_l,iql)\n",
" chk_l=np.append(chk_l,chk)\n",
" \n",
" return xas_l,xal_l,qs_l,ql_l,chk_l\n",
"\n"
]
}
],
"source": [
"print(ins.getsource(perplex_comp))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ottenuta la griglia da *perplex_comp*, la funzione *perplex* calcola l'energia libera complessiva per ogni punto XQ della griglia, secondo l'equazione:\n",
"\n",
"$$\\mu(x,q) = q^S\\mu(x^S)+q^L\\mu(x^L)$$\n",
"\n",
"Si noti che, in ogni fase, $x_{\\rm Fe}=1-x_{\\rm Mg}$. La funzione *perplex* è riportata nella cella seguente:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"def perplex(it,ip,inat,W,prt=False,nx=20):\n",
" '''\n",
" Calcola la composizione della fasi solida e liquida\n",
" all'equilibrio, data una certa temperatura e pressione, e\n",
" per una composizione globale del componente \"a\" (Mg) nel \n",
" sistema.\n",
" \n",
" Il calcolo è Perplex-like, nel senso vengono generati\n",
" pseudocomposti dei quali viene valutata l'energia libera;\n",
" gli pseudocomposti a minore energia libera sono quelli\n",
" che corrispondono alle fasi effettivamente in equilibrio.\n",
" \n",
" Input:\n",
" it - temperatura (K)\n",
" ip - pressione (GPa)\n",
" inat - composizione globale componente Mg\n",
" W - parametro di Margules\n",
" prt - se True, stampa le composizioni degli pseudo-composti\n",
" considerati (default: False) \n",
" nx - densità della griglia X/Q per la ricerca numerica\n",
" di X e Q (composizioni e quantità relative di S e L;\n",
" default: 20) \n",
" '''\n",
" xas_l, xal_l,qs_l,ql_l,chk_l=perplex_comp(inat,nx)\n",
" mu_l=perplex_g(it,ip,xas_l,xal_l,qs_l,ql_l,W)\n",
" mu_min=np.min(mu_l)\n",
" ipos=np.argmin(mu_l)\n",
" xas_min=xas_l[ipos]\n",
" qs_min=qs_l[ipos]\n",
" xal_min=xal_l[ipos]\n",
" ql_min=ql_l[ipos]\n",
" \n",
" if prt: \n",
" serie=(xas_l.round(3), xal_l.round(3),qs_l.round(3),ql_l.round(3),chk_l.round(3),mu_l.round(5))\n",
" pd.set_option('colheader_justify', 'center')\n",
" df=pd.DataFrame(serie, index=['X(Mg)s','X(Mg)l','qs','ql','Check','G'])\n",
" df=df.T\n",
" print(\"\")\n",
" print(inat)\n",
" print(df.to_string(index=False)) \n",
" \n",
" print(\"Calcolo Perplex-like\\nTemperatura: %4.1f K, Pressione: %4.1f GPa\" %\n",
" (it, ip))\n",
" print(\"Composizione globale X(Mg) pari a %4.2f\" % inat)\n",
" print(\"X(Mg) fase solida %4.2f, quantità fase solida %4.2f\" % \n",
" (xas_min, qs_min))\n",
" print(\"X(Mg) fase liquida %4.2f, quantità fase liquida %4.2f\" %\n",
" (xal_min, ql_min))\n",
" \n",
" plt.figure()\n",
" plt.scatter(xas_l,qs_l,s=10)\n",
" plt.scatter(xas_min, qs_min, s=30, c='red')\n",
" tlt=\"Griglia X/Q di campionamento per X(Mg)totale pari a \" + str(inat) + \"\\n\"\n",
" plt.title(tlt)\n",
" plt.xlabel(\"X(Mg)s\")\n",
" plt.ylabel(\"qs\") \n",
" plt.xlim(0,1)\n",
" plt.ylim(0,1)\n",
" plt.show()\n",
"\n"
]
}
],
"source": [
"print(ins.getsource(perplex))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le due istruzioni *chiave* di *perplex* sono\n",
"\n",
"```\n",
"xas_l, xal_l,qs_l,ql_l,chk_l=perplex_comp(inat,nx)\n",
"mu_l=perplex_g(it,ip,xas_l,xal_l,qs_l,ql_l,W)\n",
"```\n",
"\n",
"La prima istruzione chiama *perplex_comp* per ottenere la griglia XQ; la seconda calcola l'energia di Gibbs alla *T* e *P* fissata e per tutti i nodi *leciti* della griglia, le cui *coordinate* sono conservate nelle liste *xas_l* (lista di $x_{\\rm Mg}^S$), *xal_l* ($x_{\\rm Mg}^L$), *qs_l* ($q^S$) e *ql_l* ($q^L$). Per ogni punto, *G* è calcolata usando la funzione *perplex_g*.\n",
"\n",
"
\n",
"\n",
"Usiamo *perplex* per fare un calcolo a T=1700 K, P=0 GPa e $x_{\\rm Mg}^{tot}=0.40$ (con parametro di Margules W=8400 j/mole): "
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Calcolo Perplex-like\n",
"Temperatura: 1700.0 K, Pressione: 0.0 GPa\n",
"Composizione globale X(Mg) pari a 0.40\n",
"X(Mg) fase solida 0.79, quantità fase solida 0.37\n",
"X(Mg) fase liquida 0.17, quantità fase liquida 0.63\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAElCAYAAAD6NKUrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3debgcZZn38e+dFUxCQBKUJRCWIEREkRhAZcAL0IDvC/oKCgoCQ2TQAYbFBRUxbIooCiiKoLwsKhgclQyiiAKDCgHCsAeRiIHEQBIQIkgMWe7543kOKTrd1XU6Vd1P9/l9ritXeqm++9fV1XV31/Icc3dEREQaGdTpACIikjY1ChERyaVGISIiudQoREQklxqFiIjkUqMQEZFcPd8ozOxiM/tCwWkvN7Oz4uXdzezRatOVy8xuNbOp8fJHzOzXnc6Ux8x+aWaHdzqHrGZmw81stpm9vuS6PzWzKWXWLPCcc81s73Y+Z4Mcm5vZi2Y2uNNZWtVVjcLMDjazO83sH2a2KF7+hJlZo8e4+zHufmZ/n8vdf+fub2gx53lmdmPNbeeb2fU1t33OzL4UL69vZt8xs6fN7CUze3BtVqLu/kN3f3erj28Hd9/X3a/odI6ymNmeZja/0zkaKbhcHg3c5u5Px/svNzM3s/3rPM7N7IiCT38OcHbm8ePj44cUzN6v6VPi7k+6+0h3X1lGPTM7Ma4nlpjZZWY2vMBjvhjnX0uNs2sahZmdDFwAfBV4PfA64BjgHcCwBo/pVAf/ArC1mR0Zc+wGHE7Im7UfcIOZDQN+A2wB7AaMBj4FnGtmx7cttfSMBivUIsvlvwFX1TzuT3G6bO2DgD8XzePudwHrmdmkoo/pBWU3NjN7D3AKsBcwHtgKOL3JY7YGDgSeavmJ3T35f4QV5z+ADzSZ7nLgO8ANcfq9421nZab5dJxhC4CpgAPbZB5/Vry8JzA/87hTCB+MF4DZwPubZNkTeDa+mY8A/1Zz/wbAImAwcFS8PKJmmg8BfwdGNXiOfYA/AkuAbwH/DUyN9x0B/D4n3zuB24HngXnAEfH29wL3xuedB0zLPGZ8nF9HxvueI6xk3gY8EGt9KzP9EcAfgG/GjH8E9srcf2sm7yDgVOCJOC+uBEbXPO/hwJPAM8DnM3UmA3fE538qzothmfsd+ATwWHz/zgS2jo/5OzC9Zvr/A9wX690O7Ji5by7wyfh6lwA/BtYBRgBLgVXAi/HfJsBw4HzC8rYgXh7e4D1pNr9GA9+Pr/GvwFnA4JrHfgP4G5llvuhyCWweX8OQms/U14CngQ0y8+eXwO9ZvdwMBs6L781fgGPjfM/WuhT4Yrz8ZLy/b17t1mQZqDf91sDN8fU8A/wQWL/mvdo7s3z1fYafje/5a3Pm0Xzgc7HuXOAjmfuLfEaOiplvy9w2pMHzFV63AD8CvpS5vhfwdJN10S8JX0pfmR/9Xge38qB2/wOmACsazeiahXoJ4VfGIMIH+HJWr/ynxAX+jcBrCN+cijaKgwgf/EGEFfg/gI2b5PluXNBuBazmvoOBq+Pla4Ar6jx+SHzd+9S5b0xcUA8EhgInxmmbNgrCCuEF4JD42A2Bt2Re95vi69wRWAi8r+ZDcHGct+8G/gn8HNgI2JTwAd8jk2FFzDY0zrclxA8or24U/wrMIXxDGgn8FLiq5nkvBdYF3gwsA7aP9+8M7Brn13jCCvCEzOt1YAawXnzvlwG/jc81mvDhPDxO+9b4GnYhrPwOJ3zAhsf75wJ3xWXhtfG5jqm3zMTbzgBmxvkzltB4zmzwvjSbXz8nLFMjYr27iCv6zGOPi/Nh3f4ul4QV4MN1PlNnAZcAH4+3TScsO9lGcUycj5sRvgT9hjUbxUnAT2ve0+z9RZaB7PTbEL4sDY/z9jbg/Mz9c1ndKE6I78NmcfrvEj9/debPnnFefj1Ouwfh8/6GfnxGrozv07r1stc8X+F1C3A/8KGa9YADG+bUvq52fvR7HdzKg9r9DziUmq7J6m/DS4F/ySzUV9Zb0OPly4Av1yxohRpFnUz3AQcUyO3Ax+rcdxVwWLz8G+CcBjWeBj5c5/aPAjMz143wLahIo/gs8LOC8/584Bvxct8Cv2nm/mdrFtz/JK6kY4YFvHpldFfmdd+ayftb4BOZ6d4ALGf1yt+BzWrqHNwg8wnZ1xcf+47M9XuAz2Sun0dcwRB+kZ5ZU+9RVje/ucChmfvOBS5utMwQvinul7n+HmBug9wN5xdhU+syMg2AsLK+JfPYJ/vxeVpjuQQ+kl2msp8Jwi/QOwiNdSFhBZhtFDfz6l8ne7Pmiv1jwM01y1L2/iLLQMMvi8D7gHsz1+eyulE8wqt/nW3cV7tOnT0JjWJE5rbpwBf68RnZKnN/0+w19RquW+LyNCVzfWisPb7OtCMJv6K3rJ0f/f3XLfsongXGZLf3ufvb3X39eF/2dczLqbNJzf15076KmX3UzO4zs+fN7HlgB0I3bzT9hoSf7OcDZ5jZ+pn7BhG+Cf0q3vQMYcGtrTEkPsfiZq/Fw5JQ9PWMo8H2ZTPbxcxuMbPFZraE8E2x9nUuzFxeWuf6yMz1v8ZsfZ6I2WttEu/LTjeEsILs83Tm8kt9z2Nm25rZ9XEH39+BL61F5i2Ak/ve5/hej6vJXDdHA/VeV73X36fR/NqCsFJ4KpPru4RfFn2avv95yyVhU+Koeo9z998TvrWfClzv7ktrJiny2RpF+HLXSJFl4BVmtpGZXWNmf43v+w9o/JncAvhZZt49AqxsVBt4zt3/UZNlk/i8RT4jVa1bXiT8Mu7Td/mFOtOeTvhF9peiWRrplkZxB+Hb1AEFpvWc+54i/PTsM67Ik5vZFoTNHscSfuKtDzxE+BbfyPnAr9z9RMJP4q9l7nsb4VtlXwP4DbCvmY2oqfEBwreeuxq8llfyxyO/Cr0ewkK8dYP7fkTYTDPO3UcTNjPlvc5mNq05Km1zwrfmWgsIH+bsdCt49Qq9ke8QtudPcPf1CNuWW808Dzjb3dfP/HuNu19d4LH1lr16r6ve6+/TaH7NI3wGxmRyrefub2zy/LXylssHgK1ydsD+ADiZsFmlVpHP1vaETSeNsuYtA/Wm/3K8fcf4vh9K4/d9HrBvzfu6jrv/tcH0G9R8HrPvW5HPSJH3opV1y8OETa993gwsdPdn60y7F3B8/AL1NOE9mW5mnymSLasrGoW7P0/ojt82swPNbKSZDTKztxC2AxY1HTjSzLY3s9cApxV83AjCG78YIB41skOjic1sP8IvhpPiTccB7zOzd8Xr7yXscO9zFWGz0bXxMMCh8eiGC4Fz3X1Jnaf5BfBGM/t/8YN9POFosCJ+COxtZh80syFmtmGclxC+9f3N3f9pZpOBDxes2chGhIV1qJkdRFhZ3FBnuquBE81sSzMbSfhV8GN3X1HgOUYR9te8aGbbAR9fi7yXAsfEb41mZiPM7L1mVvebdo2FwIZmNjpz29XAqWY21szGEJa5H+TUqDu/3P0p4NfAeWa2Xlz+tzazPYq+sGbLpbvPJ2yqmNygxIXx8bfVuW868B9mtmn8lVJvZbQHYccqhM/SKsL+iD55y0C96UcRvmE/b2abEo4UbORi4Oy4Yia+H82+eJ5uZsPMbHfCDvxrM89b1mekX+sWQpM+yswmmtkGhF94lzeYdq9Y6y3x3wLCUW0X9TdkVzQKAHc/l7CAf5qws3Eh4af3Zwj7K4rU+CVhYb+FsNPsjnjXsiaPm03Yjn1HfN43EY4wWUNcoVwMHO/uf4uPX0T4Jnapma1LPCw2U38ZYZvuPOBOwqaQXxG+/dU99M3dnyHsqDqHsPltQqNMdR77ZMxwMuEImftY/S3lE4RNEi8QVmrTi9TMcWfM9gzhOPoDG3z7uYzQMG8jHDXzT8KKrIhPEj6sLxBW9D9uNay7zyJsS/8WYVPMHML2/yKP/SNhZfd43IywCWH7/izCt/UHgf+JtzWSN78+SjgUfHbM9hPqbLKsp+ByCeEzdViD1/c3d/9tzaaxPpcSGtkDhCOCbiD8GlgZn/9twD88HCaLu78UX98f4rzalZxloMH0pxMOPlhC+OL005xZcAHhV8Cv47I9k3DAQiNPE+bxAsIXq2Pi+wslfkb6s26J0/+KsF/sFsLmsCeAL/bdb2YPm9lH4rTPuvvTff8I78Vz7v5if3Na/fd8YDCz7Qk/84YX/OZaxnO+jrBi3qTBBw4zG0r45vVXws7CrnyTLJyMNdXd39npLN0ghfll4eStewk7fls+7t7M9iXs5O/7Bv+fwPfdvd6vyaSY2Z7AD9x9s2bTDhRd84uiLGb2/vhzcgPgK8B/tatJRKOBk/JW/u6+nLB/4s+EIz9E2sLdl7n7xP42CTNb18z2i5syNyV8y/1Zpu4HuqFJSH0DrlEQttEtJqyEV7J227P7zd3/VGTHqLsvcfczMj93RVJmhE1BzxF+kTxC8X2AkrgBvelJRESaG4i/KEREpB/UKEREJJcahYiI5FKjEBGRXGoUIiKSS41CRERyqVGIiEguNQoREcmlRiEiIrnUKEREJJcahYiI5FKjEBGRXGoUIiKSq7JGYWaXmdkiM3uowf1mZhea2Rwze8DM3lpVFhERaV2VvyguB6bk3L8v4U8+TgCOBr5TYRYREWlRZY3C3W8j/D3mRg4ArvRgJrC+mRX6+78iItI+Qzr43JsC8zLX58fb1vgTjGZ2NOFXByNGjNh5u+22a0tAEZFecc899zzj7mNbeWwnG4XVua3un9tz90uASwAmTZrks2bNqjKXiEjPMbMnWn1sJ496mg+My1zfDFjQoSwiItJAJxvFDOCj8einXYEl7r7GZicREemsyjY9mdnVwJ7AGDObD3wRGArg7hcDNwD7AXOAl4Ajq8oiIiKtq6xRuPshTe534N+ren4RESmHzswWEZFcahQiIpJLjUJERHKpUYiISK5OnnAnkuum2Qv53WOL2X3CWPaZ+LqO1RAZ6PSLQpJ00+yFHH/1vVx5xxMcf/W93DR7YUdqiIgahSTqd48tZunylQAsXb6S3z22uCM1RESNQhK1+4SxrDt0MADrDh3M7hP6P5ZZGTVEBCyc99Y9NCjgwKF9FCLlMbN73H1SS49VoxAR6X1r0yi06UlERHKpUYiISC41ChERyaVGISIiudQoREQkl4bwkGTp8FiRNOgXhSRJQ3iIpEONQpKkITxE0qFGIUnSEB4i6dCZ2ZIs7aMQKY+G8BARkVwawkNERCqjRiEiIrnUKEREJJcahYiI5FKjEBGRXGoUIiKSS2M9SenKOnchpfModD6GDGQ6j0JK1Te+0tLlK1l36GAuPGSnllasZdRJKYtIp+k8CklGWeMrpTTWk8aMkoFOjUJKVdb4SimN9aQxo2Sg06YnKV1K+wVSyiLSSRrrSUREcmkfhYiIVEaNQkREclXaKMxsipk9amZzzOyUOvdvbma3mNm9ZvaAme1XZR4REem/yhqFmQ0GLgL2BSYCh5jZxJrJTgWmu/tOwMHAt6vKIyIiranyF8VkYI67P+7uLwPXAAfUTOPAevHyaGBBhXlERKQFVQ7hsSkwL3N9PrBLzTTTgF+b2XHACGDveoXM7GjgaIDNN9+89KASpHYoqQ6PFUlDZYfHmtlBwHvcfWq8fhgw2d2Py0xzUsxwnpntBnwf2MHdVzWqq8Njq5HacBcawkOkXKkeHjsfGJe5vhlrblo6CpgO4O53AOsAYyrMJA2kNtyFhvAQSUeVjeJuYIKZbWlmwwg7q2fUTPMksBeAmW1PaBT6FHZAasNdaAgPkXRUemZ2PNz1fGAwcJm7n21mZwCz3H1GPArqUmAkYcf2p93913k1tempOqltz9c+CpHyaAgPERHJleo+ChER6QFqFCIikkuNQkREcqlRiIhILjUKERHJpUYhIiK5qhzrSdqoF8856LXXpHMxpFvpPIoe0IvjIvXaa9J4UdJpOo9igOvFcZF67TVpvCjpZmoUPaAXx0Xqtdek8aKkm2nTU49IaRt6SnV6MYtIKzTWk4iI5NI+ChERqYwahYiI5FKjEBGRXGoUIiKSS41CRERyaQiPDuvFwzdTqqMsImtPh8d2UC8OMZFSHWURWU2Hx3apXhxiIqU6yiJSDjWKDurFISZSqqMsIuXQpqcOS2m7dUpZyqqjLCKBhvAQEZFc2kchIiKVUaMQEZFcahQiIpJLjUJERHKpUYiISC41ChERyTUgx3pK6Xh2Zam2jrJUm0UGhgF3HkVKY+4oS7V1lKXaLNJddB5FP6Q05o6yVFtHWarNIgPHgGsUKY25oyzV1lGWarPIwDHgNj1Bb24r7rUsZdVRlmqzSPdIdqwnM5sCXAAMBr7n7ufUmeaDwDTAgfvd/cN5NTXWk4hI/61No6jsqCczGwxcBOwDzAfuNrMZ7j47M80E4LPAO9z9OTPbqKo8IiLSmir3UUwG5rj74+7+MnANcEDNNB8DLnL35wDcfVGFeUREpAVVNopNgXmZ6/PjbVnbAtua2R/MbGbcVLUGMzvazGaZ2azFi3WEhohIO1XZKKzObbU7RIYAE4A9gUOA75nZ+ms8yP0Sd5/k7pPGjtURGiIi7VRlo5gPjMtc3wxYUGea69x9ubv/BXiU0DhERCQRVTaKu4EJZralmQ0DDgZm1Ezzc+BdAGY2hrAp6vG8ogueX8pNsxeuVbCbZi/ktOseSqKOslRbR1nSzyLpq/rw2P2A8wmHx17m7meb2RnALHefYWYGnAdMAVYCZ7v7NXk1h288wbea+k0NMdHDWcqqoyzpZ5H2SXYID3e/wd23dfet3f3seNtp7j4jXnZ3P8ndJ7r7m5o1iT6dHgKhrDrKUm0dZUk/i3SHrhzCo9NDIJRVR1mqraMs6WeR7tB1Q3hsss0b/YoZN3d8CISy6ihLtXWUJf0s0h7JDuFRBQ3hISLSf8nuoxARke6nRiEiIrnUKEREJJcahYiI5FKjEBGRXJX9PYqq9A3hkcIhfb12mGJKWcqqoyzpZymzjlSj6w6P1RAevZ+lrDrKkn6WMutIvgF3eGwKww702lAKKWUpq46ypJ+lzDpSna5sFCkMO9BrQymklKWsOsqSfpYy60h1um7Tk4bwGBhZyqqjLOlnKbOONNbWITzMbBAw0t3/3soTri0N4SEi0n+V76Mwsx+Z2XpmNgKYDTxqZp9q5QlFRKS7FN1HMTH+gngfcAOwOXBYZalERCQZRRvFUDMbSmgU17n78goziYhIQoo2iouBucAI4DYz2wJYUlUoERFJR9Ezs4cBX4+XTyQ0mOvM7CQAd/96oweKiEh3K9oodgYmATMAA/4vcBswr6JcIiKSiKKNYgyws7u/AGBm04Br3X1qVcEa0VhPAyNLWXWUJf0sZdVJKUuvKXQehZn9EXizuy+L14cD97v7dhXnW4PGeur9LGXVUZb0s5RVJ6UsqWrHWE9XAXeZ2TQz+yJwJ3BFK09YhhTGlem1MXdSylJWHWVJP0tZdVLK0osKNQp3Pxs4EngOeB440t2/XGWwPCmMK9NrY+6klKWsOsqSfpay6qSUpRdprCdtV00yS1l1lCX9LGXVSSlLito61lOnaawnEZH+G3B/j0JERNpHjUJERHKpUYiISC41ChERyaVGISIiuQZPmzat0xn6Zdq5F0zbce8D2XrsyJZr3DR7IVfcPpcVq7zjdZSl2jrKkn6WsuooS77TTz/9qWnTpl3SymO77vBYDeHR+1nKqqMs6Wcpq46yNDfgDo9N4RT9Xht2IKUsZdVRlvSzlFVHWarVlY0ihVP0e23YgZSylFVHWdLPUlYdZalWpZuezGwKcAEwGPieu5/TYLoDgWuBt7l77mnXGsJjYGQpq46ypJ+lrDrKki/JITzMbDDwJ2AfYD5wN3CIu8+umW4U8AvCX9E7tlmj0BAeIiL9l+o+isnAHHd/3N1fBq4BDqgz3ZnAucA/K8wiIiItqrJRbMqr/1Tq/HjbK8xsJ2Ccu1+fV8jMjjazWWY2a/FijQ8vItJOVTYKq3PbK9u5zGwQ8A3g5GaF3P0Sd5/k7pPGjtX48CIi7VRlo5gPjMtc3wxYkLk+CtgBuNXM5gK7AjPMrKVtaCIiUo0qG8XdwAQz29LMhgEHAzP67nT3Je4+xt3Hu/t4YCawf7Od2SIi0l6VNQp3XwEcC9wIPAJMd/eHzewMM9u/qucVkQFo3jw47jiYPDn8P29e88dIYV03hIfOoxgYWcqqoyzpZ1nrOvPmwZvfzKoXXmDQihWsGjKEQaNGwf33w7hxzR9fZpYSa5RdZ9+377hoxfMLWyrSdYMCfu7L50+bOWwn3vD6US0NktU3fso9TzzHb2Yv7GgdZam2jrKkn6WUOqeeyqrbb2fQihUA2KpVrFqxElu2DPbbr71ZSqpRRZ0lD9484gufPP70fhegS4fwSGH8lF4bEyalLGXVUZb0s5RS5847X2kSfQatWA533dX+LCXVqKpOq7qyUaQwfkqvjQmTUpay6ihL+llKqbPLLqwaMuRVN60aMjTsr2h3lpJqVFWnVdpHoW3FSWYpq46ypJ9lreussY9iKINGjdQ+ipo6a7OPousahcZ6EpE1zJsH554bNjdNngyf/nRLTaKXrc1YT0OaTyIikrhx4+Cb3+x0ip7VlfsoRESkfdQoREQklxqFiIjkUqMQEZFcXXdm9rRzL5i2494HtnSGYp+bZi/kitvnsmKVd7yOslRbR1nSz1JWHWXJr/OjH1455LRTPvW1Vh7fdYfHDt94gm819ZtceMhOLR1X3Hc6+9LlK1l36OCO1lGWausoS/pZyqqjLM3rPP6941j21GP1/k5QU1256Sm10+J74VT/lLKUVUdZ0s9SVh1lKVanVV3ZKFI7Lb4XTvVPKUtZdZQl/Sxl1VGWYnVa1XWbnjSEx8DIUlYdZUk/S1l1lCW/jobwEBGRXGszhEdXbnoSEZH2UaMQEZFcahQiIpJLjUJERHKpUYiISC4N4aFT/ZPMUlYdZUk/S1l1lCW/jobw6IeUTq9XlmrrKEv6WcqqoyzN62gIj35I6fR6Zam2jrKkn6WsOspSrE6rurJRpHZafC+c6p9SlrLqKEv6WcqqoyzF6rSq6zY9aQiPgZGlrDrKkn6WsuooS34dDeEhIiK5NISHiIhURo1CRERyqVGIiEguNQoREcmlRiEiIrnUKEREJJfGetKYMElmKauOsqSfpaw6ypJfJ9mxnsxsCnABMBj4nrufU3P/ScBUYAWwGPhXd38ir6bGeur9LGXVUZb0s5RVR1ma10lyrCczGwxcBOwLTAQOMbOJNZPdC0xy9x2BnwDnFqmd2vgpvTAmTEpZyqqjLOlnKauOshSr06oq91FMBua4++Pu/jJwDXBAdgJ3v8XdX4pXZwKbFSmc2vgpvTAmTEpZyqqjLOlnKauOshSr06rKNj2Z2YHAFHefGq8fBuzi7sc2mP5bwNPuflad+44GjgYYPXbjna+99d5kxk/ppTFhUspSVh1lST9LWXWUJb9OkmM9mdlBwHtqGsVkdz+uzrSHAscCe7j7sry6GutJRKT/1maspyFlh8mYD4zLXN8MWFA7kZntDXyeAk1CRETar8p9FHcDE8xsSzMbBhwMzMhOYGY7Ad8F9nf3RRVmERGRFlXWKNx9BWFz0o3AI8B0d3/YzM4ws/3jZF8FRgLXmtl9ZjajQTkREemQKjc94e43ADfU3HZa5vLeVT6/iIisPQ3hISIiuTSEh071TzJLWXWUJf0sZdVRlvw6yQ7hUQUN4dH7WcqqoyzpZymrjrI0r5PkEB5VSu20+F441T+lLGXVUZb0s5RVR1mK1WlVVzaK1E6L74VT/VPKUlYdZUk/S1l1lKVYnVZ13aanTbZ5o18x4+ZkTovvpVP9U8pSVh1lST9LWXWUJb9OkkN4VEVDeIiI9N/aDOHRlZueRESkfdQoREQklxqFiIjkUqMQEZFcahQiIpJLjUJERHJprCeNCZNklrLqKEv6Wcqqoyz5dTTWUz+kNA6LslRbR1nSz1JWHWVpXkdjPfVDSuOwKEu1dZQl/Sxl1VGWYnVa1ZWNIrXxU3phTJiUspRVR1nSz1JWHWUpVqdVXbfpSWM9DYwsZdVRlvSzlFVHWfLraKwnERHJpbGeRESkMmoUIiKSS41CRERyqVGIiEguNQoREcmlITx0qn+SWcqqoyzpZymrjrLk19EQHv2Q0un1ylJtHWVJP0tZdZSleR0N4dEPKZ1eryzV1lGW9LOUVUdZitVpVVc2itROi++FU/1TylJWHWVJP0tZdZSlWJ1Wdd2mJw3hMTCylFVHWdLPUlYdZcmvoyE8REQkl4bwEBGRyqhRiIhILjUKERHJpUYhIiK51ChERCRXpY3CzKaY2aNmNsfMTqlz/3Az+3G8/04zG19lHhER6b/KGoWZDQYuAvYFJgKHmNnEmsmOAp5z922AbwBfaVZ3wfNLuWn2wrXKdtPshZx23UNJ1FGWausoS/pZyqqjLPl1Bo/eaFyrj6/sPAoz2w2Y5u7vidc/C+DuX85Mc2Oc5g4zGwI8DYz1nFAa66n3s5RVR1nSz1JWHWVpXmdtxnqqslEcCExx96nx+mHALu5+bGaah+I08+P1P8dpnqmpdTRwNACDh+w8bOx4Vi79+6KVSxbN62+uwaM3Gjd43fU26rveyTol1BgDPJNIlk7XGQO8arlJ6TW1Ocsa86KDWdpSJ6dG7rxoc5Z+KbvO8mfns+rlpS01iiGtPKigeoFqu1KRaXD3S4BLAMxs1rKnHmvp7MJeY2azWj3TstdoXqymebGa5sVqZtbykBZV7syeD2S3iW0GLGg0Tdz0NBr4W4WZRESkn6psFHcDE8xsSzMbBhwMzKiZZgZweLx8IHBz3v4JERFpv8o2Pbn7CjM7FrgRGAxc5u4Pm9kZwCx3nwF8H7jKzOYQfkkcXKD0JVVl7kKaF6tpXqymebGa5sVqLc+Lrhs9VkRE2ktnZouISC41ChERyZVso9DwH6sVmBcnmdlsM3vAzH5rZlt0Imc7NJsXmekONDM3s549NLLIvDCzD8Zl42Ez+1G7M7ZLgc/I5mZ2i5ndGz8n+3UiZ9XM7DIzWxTPUat3v5nZhXE+PWBmby1U2N2T+80KC6QAAAT3SURBVEfY+f1nYCtgGHA/MLFmmk8AF8fLBwM/7nTuDs6LdwGviZc/PpDnRZxuFHAbMBOY1OncHVwuJgD3AhvE6xt1OncH58UlwMfj5YnA3E7nrmhe/AvwVuChBvfvB/yScA7brsCdReqm+otiMjDH3R9395eBa4ADaqY5ALgiXv4JsJeZtXTWYeKazgt3v8XdX4pXZxLOWelFRZYLgDOBc4F/tjNcmxWZFx8DLnL35wDcfVGbM7ZLkXnhwHrx8mjWPKerJ7j7beSfi3YAcKUHM4H1zWzjZnVTbRSbAtlT1efH2+pO4+4rgCXAhm1J115F5kXWUYRvDL2o6bwws52Ace5+fTuDdUCR5WJbYFsz+4OZzTSzKW1L115F5sU04FAzmw/cABzXnmjJ6e/6BKh2CI+1UdrwHz2g8Os0s0OBScAelSbqnNx5YWaDCKMQH9GuQB1UZLkYQtj8tCfhV+bvzGwHd3++4mztVmReHAJc7u7nxQFLr4rzYlX18ZLS0noz1V8UGv5jtSLzAjPbG/g8sL+7L2tTtnZrNi9GATsAt5rZXMI22Bk9ukO76GfkOndf7u5/AR4lNI5eU2ReHAVMB3D3O4B1CAMGDjSF1ie1Um0UGv5jtabzIm5u+S6hSfTqdmhoMi/cfYm7j3H38e4+nrC/Zn93b3kwtIQV+Yz8nHCgA2Y2hrAp6vG2pmyPIvPiSWAvADPbntAoFrc1ZRpmAB+NRz/tCixx96eaPSjJTU9e3fAfXafgvPgqMBK4Nu7Pf9Ld9+9Y6IoUnBcDQsF5cSPwbjObDawEPuXuz3YudTUKzouTgUvN7ETCppYjevGLpZldTdjUOCbuj/kiMBTA3S8m7J/ZD5gDvAQcWahuD84rEREpUaqbnkREJBFqFCIikkuNQkREcqlRiIhILjUKERHJpUYhApjZODP7i5m9Nl7fIF7fwsw2NrPr4+17xlFpj8o8dqd42yebPMebzOzySl+ISAXUKEQAd58HfAc4J950DnCJuz8BnARcmpn8QeBDmesHE0YsbfYcDwKbmdnmpYQWaRM1CpHVvgHsamYnAO8Ezou3fwD4VWa6J4F1zOx1ccTiKWQGYjSzt8Wx/u8ws6/W/G2A/yKeHGpme5jZffHfvWY2qsLXJtIyNQqRyN2XA58iNIwT3P1lM9sSeK7O+Fk/AQ4C3g78D5C9//8Dx7j7boQzorNmAbvHy58E/t3d3xJvW1rm6xEpixqFyKvtCzxFGFwQYGPqjwk0ndAoDgGu7rvRzNYHRrn77fGm2r8qtwjYJF7+A/B1MzseWD8Oly+SHDUKkcjM3gLsQxh19sT4B12WEgaQexV3fxpYHqf/bbZMk6dZJ9bE3c8BpgLrAjPNbLu1fQ0iVVCjECH8LWHCzuwT3P1JwkCLXwP+BIxv8LDTgM+4+yubl+Jfk3shjswJaw5WuS3wUHzOrd39QXf/CmGTlBqFJEmNQiT4GGHU3Zvi9W8TVtyTgD+b2Ta1D3D3293953VqHQVcYmZ3EH5hLMnc9y7gF/HyCWb2kJndT/iV0at/mVC6nEaPFWnCzN4P7OzupxacfqS7vxgvnwJs7O7/YWbDgf8G3qn9EdJNkvx7FCIpcfefmVl//h77e83ss4TP1xOs/tOsmwOnqElIt9EvChERyaV9FCIikkuNQkREcqlRiIhILjUKERHJpUYhIiK5/hcbZh+/QWwc0AAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"perplex(1700,0,0.40,8400)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La funzione fornisce anche una visualizzazione della griglia di punti XQ che è stata definita. Il marker in rosso identifica il punto della griglia che ha la più bassa energia libera e che quindi corrisponde alla situazione all'equilibrio. \n",
"\n",
"Notate come il risultato sia praticamente identico a quello ottenuto con la funzione *composition* che usava una strategia di calcolo differente.\n",
"\n",
"Nel caso specifico, l'algoritmo *perplex* è molto più lento rispetto a quello implementato in *composition*. I tempi di esecuzione sono stimabili con la funzione *time* (funzione di sistema di Python):"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pressione 0.0 GPa, Temperatura 1700.0 K\n",
"\n",
"Per una composizione X(Mg) globale pari a 0.40: \n",
"X(Mg) fase solida 0.79, quantità fase solida 0.37\n",
"X(Mg) fase liquida 0.18, quantità fase liquida 0.63\n",
"Wall time: 116 ms\n"
]
}
],
"source": [
"time(composition(1700,0,8400,prt=True,xval=0.4))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"la funzione *time* esegue *composition* con il suo input, e scrive come ultima riga dell'output, il tempo di esecuzione (*Wall time*, che è il tempo complessivo di esecuzione). Qui abbiamo un tempo di esecuzione intorno ai 100 ms (millisecondi).\n",
"\n",
"Con l'algoritmo *perplex* i tempi di calcolo sono ben più lunghi: "
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Calcolo Perplex-like\n",
"Temperatura: 1700.0 K, Pressione: 0.0 GPa\n",
"Composizione globale X(Mg) pari a 0.40\n",
"X(Mg) fase solida 0.79, quantità fase solida 0.37\n",
"X(Mg) fase liquida 0.17, quantità fase liquida 0.63\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAElCAYAAAD6NKUrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3debgcZZn38e+dFUxCQBKUJRCWIEREkRhAZcAL0IDvC/oKCgoCQ2TQAYbFBRUxbIooCiiKoLwsKhgclQyiiAKDCgHCsAeRiIHEQBIQIkgMWe7543kOKTrd1XU6Vd1P9/l9ritXeqm++9fV1XV31/Icc3dEREQaGdTpACIikjY1ChERyaVGISIiudQoREQklxqFiIjkUqMQEZFcPd8ozOxiM/tCwWkvN7Oz4uXdzezRatOVy8xuNbOp8fJHzOzXnc6Ux8x+aWaHdzqHrGZmw81stpm9vuS6PzWzKWXWLPCcc81s73Y+Z4Mcm5vZi2Y2uNNZWtVVjcLMDjazO83sH2a2KF7+hJlZo8e4+zHufmZ/n8vdf+fub2gx53lmdmPNbeeb2fU1t33OzL4UL69vZt8xs6fN7CUze3BtVqLu/kN3f3erj28Hd9/X3a/odI6ymNmeZja/0zkaKbhcHg3c5u5Px/svNzM3s/3rPM7N7IiCT38OcHbm8ePj44cUzN6v6VPi7k+6+0h3X1lGPTM7Ma4nlpjZZWY2vMBjvhjnX0uNs2sahZmdDFwAfBV4PfA64BjgHcCwBo/pVAf/ArC1mR0Zc+wGHE7Im7UfcIOZDQN+A2wB7AaMBj4FnGtmx7cttfSMBivUIsvlvwFX1TzuT3G6bO2DgD8XzePudwHrmdmkoo/pBWU3NjN7D3AKsBcwHtgKOL3JY7YGDgSeavmJ3T35f4QV5z+ADzSZ7nLgO8ANcfq9421nZab5dJxhC4CpgAPbZB5/Vry8JzA/87hTCB+MF4DZwPubZNkTeDa+mY8A/1Zz/wbAImAwcFS8PKJmmg8BfwdGNXiOfYA/AkuAbwH/DUyN9x0B/D4n3zuB24HngXnAEfH29wL3xuedB0zLPGZ8nF9HxvueI6xk3gY8EGt9KzP9EcAfgG/GjH8E9srcf2sm7yDgVOCJOC+uBEbXPO/hwJPAM8DnM3UmA3fE538qzothmfsd+ATwWHz/zgS2jo/5OzC9Zvr/A9wX690O7Ji5by7wyfh6lwA/BtYBRgBLgVXAi/HfJsBw4HzC8rYgXh7e4D1pNr9GA9+Pr/GvwFnA4JrHfgP4G5llvuhyCWweX8OQms/U14CngQ0y8+eXwO9ZvdwMBs6L781fgGPjfM/WuhT4Yrz8ZLy/b17t1mQZqDf91sDN8fU8A/wQWL/mvdo7s3z1fYafje/5a3Pm0Xzgc7HuXOAjmfuLfEaOiplvy9w2pMHzFV63AD8CvpS5vhfwdJN10S8JX0pfmR/9Xge38qB2/wOmACsazeiahXoJ4VfGIMIH+HJWr/ynxAX+jcBrCN+cijaKgwgf/EGEFfg/gI2b5PluXNBuBazmvoOBq+Pla4Ar6jx+SHzd+9S5b0xcUA8EhgInxmmbNgrCCuEF4JD42A2Bt2Re95vi69wRWAi8r+ZDcHGct+8G/gn8HNgI2JTwAd8jk2FFzDY0zrclxA8or24U/wrMIXxDGgn8FLiq5nkvBdYF3gwsA7aP9+8M7Brn13jCCvCEzOt1YAawXnzvlwG/jc81mvDhPDxO+9b4GnYhrPwOJ3zAhsf75wJ3xWXhtfG5jqm3zMTbzgBmxvkzltB4zmzwvjSbXz8nLFMjYr27iCv6zGOPi/Nh3f4ul4QV4MN1PlNnAZcAH4+3TScsO9lGcUycj5sRvgT9hjUbxUnAT2ve0+z9RZaB7PTbEL4sDY/z9jbg/Mz9c1ndKE6I78NmcfrvEj9/debPnnFefj1Ouwfh8/6GfnxGrozv07r1stc8X+F1C3A/8KGa9YADG+bUvq52fvR7HdzKg9r9DziUmq7J6m/DS4F/ySzUV9Zb0OPly4Av1yxohRpFnUz3AQcUyO3Ax+rcdxVwWLz8G+CcBjWeBj5c5/aPAjMz143wLahIo/gs8LOC8/584Bvxct8Cv2nm/mdrFtz/JK6kY4YFvHpldFfmdd+ayftb4BOZ6d4ALGf1yt+BzWrqHNwg8wnZ1xcf+47M9XuAz2Sun0dcwRB+kZ5ZU+9RVje/ucChmfvOBS5utMwQvinul7n+HmBug9wN5xdhU+syMg2AsLK+JfPYJ/vxeVpjuQQ+kl2msp8Jwi/QOwiNdSFhBZhtFDfz6l8ne7Pmiv1jwM01y1L2/iLLQMMvi8D7gHsz1+eyulE8wqt/nW3cV7tOnT0JjWJE5rbpwBf68RnZKnN/0+w19RquW+LyNCVzfWisPb7OtCMJv6K3rJ0f/f3XLfsongXGZLf3ufvb3X39eF/2dczLqbNJzf15076KmX3UzO4zs+fN7HlgB0I3bzT9hoSf7OcDZ5jZ+pn7BhG+Cf0q3vQMYcGtrTEkPsfiZq/Fw5JQ9PWMo8H2ZTPbxcxuMbPFZraE8E2x9nUuzFxeWuf6yMz1v8ZsfZ6I2WttEu/LTjeEsILs83Tm8kt9z2Nm25rZ9XEH39+BL61F5i2Ak/ve5/hej6vJXDdHA/VeV73X36fR/NqCsFJ4KpPru4RfFn2avv95yyVhU+Koeo9z998TvrWfClzv7ktrJiny2RpF+HLXSJFl4BVmtpGZXWNmf43v+w9o/JncAvhZZt49AqxsVBt4zt3/UZNlk/i8RT4jVa1bXiT8Mu7Td/mFOtOeTvhF9peiWRrplkZxB+Hb1AEFpvWc+54i/PTsM67Ik5vZFoTNHscSfuKtDzxE+BbfyPnAr9z9RMJP4q9l7nsb4VtlXwP4DbCvmY2oqfEBwreeuxq8llfyxyO/Cr0ewkK8dYP7fkTYTDPO3UcTNjPlvc5mNq05Km1zwrfmWgsIH+bsdCt49Qq9ke8QtudPcPf1CNuWW808Dzjb3dfP/HuNu19d4LH1lr16r6ve6+/TaH7NI3wGxmRyrefub2zy/LXylssHgK1ydsD+ADiZsFmlVpHP1vaETSeNsuYtA/Wm/3K8fcf4vh9K4/d9HrBvzfu6jrv/tcH0G9R8HrPvW5HPSJH3opV1y8OETa993gwsdPdn60y7F3B8/AL1NOE9mW5mnymSLasrGoW7P0/ojt82swPNbKSZDTKztxC2AxY1HTjSzLY3s9cApxV83AjCG78YIB41skOjic1sP8IvhpPiTccB7zOzd8Xr7yXscO9zFWGz0bXxMMCh8eiGC4Fz3X1Jnaf5BfBGM/t/8YN9POFosCJ+COxtZh80syFmtmGclxC+9f3N3f9pZpOBDxes2chGhIV1qJkdRFhZ3FBnuquBE81sSzMbSfhV8GN3X1HgOUYR9te8aGbbAR9fi7yXAsfEb41mZiPM7L1mVvebdo2FwIZmNjpz29XAqWY21szGEJa5H+TUqDu/3P0p4NfAeWa2Xlz+tzazPYq+sGbLpbvPJ2yqmNygxIXx8bfVuW868B9mtmn8lVJvZbQHYccqhM/SKsL+iD55y0C96UcRvmE/b2abEo4UbORi4Oy4Yia+H82+eJ5uZsPMbHfCDvxrM89b1mekX+sWQpM+yswmmtkGhF94lzeYdq9Y6y3x3wLCUW0X9TdkVzQKAHc/l7CAf5qws3Eh4af3Zwj7K4rU+CVhYb+FsNPsjnjXsiaPm03Yjn1HfN43EY4wWUNcoVwMHO/uf4uPX0T4Jnapma1LPCw2U38ZYZvuPOBOwqaQXxG+/dU99M3dnyHsqDqHsPltQqNMdR77ZMxwMuEImftY/S3lE4RNEi8QVmrTi9TMcWfM9gzhOPoDG3z7uYzQMG8jHDXzT8KKrIhPEj6sLxBW9D9uNay7zyJsS/8WYVPMHML2/yKP/SNhZfd43IywCWH7/izCt/UHgf+JtzWSN78+SjgUfHbM9hPqbLKsp+ByCeEzdViD1/c3d/9tzaaxPpcSGtkDhCOCbiD8GlgZn/9twD88HCaLu78UX98f4rzalZxloMH0pxMOPlhC+OL005xZcAHhV8Cv47I9k3DAQiNPE+bxAsIXq2Pi+wslfkb6s26J0/+KsF/sFsLmsCeAL/bdb2YPm9lH4rTPuvvTff8I78Vz7v5if3Na/fd8YDCz7Qk/84YX/OZaxnO+jrBi3qTBBw4zG0r45vVXws7CrnyTLJyMNdXd39npLN0ghfll4eStewk7fls+7t7M9iXs5O/7Bv+fwPfdvd6vyaSY2Z7AD9x9s2bTDhRd84uiLGb2/vhzcgPgK8B/tatJRKOBk/JW/u6+nLB/4s+EIz9E2sLdl7n7xP42CTNb18z2i5syNyV8y/1Zpu4HuqFJSH0DrlEQttEtJqyEV7J227P7zd3/VGTHqLsvcfczMj93RVJmhE1BzxF+kTxC8X2AkrgBvelJRESaG4i/KEREpB/UKEREJJcahYiI5FKjEBGRXGoUIiKSS41CRERyqVGIiEguNQoREcmlRiEiIrnUKEREJJcahYiI5FKjEBGRXGoUIiKSq7JGYWaXmdkiM3uowf1mZhea2Rwze8DM3lpVFhERaV2VvyguB6bk3L8v4U8+TgCOBr5TYRYREWlRZY3C3W8j/D3mRg4ArvRgJrC+mRX6+78iItI+Qzr43JsC8zLX58fb1vgTjGZ2NOFXByNGjNh5u+22a0tAEZFecc899zzj7mNbeWwnG4XVua3un9tz90uASwAmTZrks2bNqjKXiEjPMbMnWn1sJ496mg+My1zfDFjQoSwiItJAJxvFDOCj8einXYEl7r7GZicREemsyjY9mdnVwJ7AGDObD3wRGArg7hcDNwD7AXOAl4Ajq8oiIiKtq6xRuPshTe534N+ren4RESmHzswWEZFcahQiIpJLjUJERHKpUYiISK5OnnAnkuum2Qv53WOL2X3CWPaZ+LqO1RAZ6PSLQpJ00+yFHH/1vVx5xxMcf/W93DR7YUdqiIgahSTqd48tZunylQAsXb6S3z22uCM1RESNQhK1+4SxrDt0MADrDh3M7hP6P5ZZGTVEBCyc99Y9NCjgwKF9FCLlMbN73H1SS49VoxAR6X1r0yi06UlERHKpUYiISC41ChERyaVGISIiudQoREQkl4bwkGTp8FiRNOgXhSRJQ3iIpEONQpKkITxE0qFGIUnSEB4i6dCZ2ZIs7aMQKY+G8BARkVwawkNERCqjRiEiIrnUKEREJJcahYiI5FKjEBGRXGoUIiKSS2M9SenKOnchpfModD6GDGQ6j0JK1Te+0tLlK1l36GAuPGSnllasZdRJKYtIp+k8CklGWeMrpTTWk8aMkoFOjUJKVdb4SimN9aQxo2Sg06YnKV1K+wVSyiLSSRrrSUREcmkfhYiIVEaNQkREclXaKMxsipk9amZzzOyUOvdvbma3mNm9ZvaAme1XZR4REem/yhqFmQ0GLgL2BSYCh5jZxJrJTgWmu/tOwMHAt6vKIyIiranyF8VkYI67P+7uLwPXAAfUTOPAevHyaGBBhXlERKQFVQ7hsSkwL3N9PrBLzTTTgF+b2XHACGDveoXM7GjgaIDNN9+89KASpHYoqQ6PFUlDZYfHmtlBwHvcfWq8fhgw2d2Py0xzUsxwnpntBnwf2MHdVzWqq8Njq5HacBcawkOkXKkeHjsfGJe5vhlrblo6CpgO4O53AOsAYyrMJA2kNtyFhvAQSUeVjeJuYIKZbWlmwwg7q2fUTPMksBeAmW1PaBT6FHZAasNdaAgPkXRUemZ2PNz1fGAwcJm7n21mZwCz3H1GPArqUmAkYcf2p93913k1tempOqltz9c+CpHyaAgPERHJleo+ChER6QFqFCIikkuNQkREcqlRiIhILjUKERHJpUYhIiK5qhzrSdqoF8856LXXpHMxpFvpPIoe0IvjIvXaa9J4UdJpOo9igOvFcZF67TVpvCjpZmoUPaAXx0Xqtdek8aKkm2nTU49IaRt6SnV6MYtIKzTWk4iI5NI+ChERqYwahYiI5FKjEBGRXGoUIiKSS41CRERyaQiPDuvFwzdTqqMsImtPh8d2UC8OMZFSHWURWU2Hx3apXhxiIqU6yiJSDjWKDurFISZSqqMsIuXQpqcOS2m7dUpZyqqjLCKBhvAQEZFc2kchIiKVUaMQEZFcahQiIpJLjUJERHKpUYiISC41ChERyTUgx3pK6Xh2Zam2jrJUm0UGhgF3HkVKY+4oS7V1lKXaLNJddB5FP6Q05o6yVFtHWarNIgPHgGsUKY25oyzV1lGWarPIwDHgNj1Bb24r7rUsZdVRlmqzSPdIdqwnM5sCXAAMBr7n7ufUmeaDwDTAgfvd/cN5NTXWk4hI/61No6jsqCczGwxcBOwDzAfuNrMZ7j47M80E4LPAO9z9OTPbqKo8IiLSmir3UUwG5rj74+7+MnANcEDNNB8DLnL35wDcfVGFeUREpAVVNopNgXmZ6/PjbVnbAtua2R/MbGbcVLUGMzvazGaZ2azFi3WEhohIO1XZKKzObbU7RIYAE4A9gUOA75nZ+ms8yP0Sd5/k7pPGjtURGiIi7VRlo5gPjMtc3wxYUGea69x9ubv/BXiU0DhERCQRVTaKu4EJZralmQ0DDgZm1Ezzc+BdAGY2hrAp6vG8ogueX8pNsxeuVbCbZi/ktOseSqKOslRbR1nSzyLpq/rw2P2A8wmHx17m7meb2RnALHefYWYGnAdMAVYCZ7v7NXk1h288wbea+k0NMdHDWcqqoyzpZ5H2SXYID3e/wd23dfet3f3seNtp7j4jXnZ3P8ndJ7r7m5o1iT6dHgKhrDrKUm0dZUk/i3SHrhzCo9NDIJRVR1mqraMs6WeR7tB1Q3hsss0b/YoZN3d8CISy6ihLtXWUJf0s0h7JDuFRBQ3hISLSf8nuoxARke6nRiEiIrnUKEREJJcahYiI5FKjEBGRXJX9PYqq9A3hkcIhfb12mGJKWcqqoyzpZymzjlSj6w6P1RAevZ+lrDrKkn6WMutIvgF3eGwKww702lAKKWUpq46ypJ+lzDpSna5sFCkMO9BrQymklKWsOsqSfpYy60h1um7Tk4bwGBhZyqqjLOlnKbOONNbWITzMbBAw0t3/3soTri0N4SEi0n+V76Mwsx+Z2XpmNgKYDTxqZp9q5QlFRKS7FN1HMTH+gngfcAOwOXBYZalERCQZRRvFUDMbSmgU17n78goziYhIQoo2iouBucAI4DYz2wJYUlUoERFJR9Ezs4cBX4+XTyQ0mOvM7CQAd/96oweKiEh3K9oodgYmATMAA/4vcBswr6JcIiKSiKKNYgyws7u/AGBm04Br3X1qVcEa0VhPAyNLWXWUJf0sZdVJKUuvKXQehZn9EXizuy+L14cD97v7dhXnW4PGeur9LGXVUZb0s5RVJ6UsqWrHWE9XAXeZ2TQz+yJwJ3BFK09YhhTGlem1MXdSylJWHWVJP0tZdVLK0osKNQp3Pxs4EngOeB440t2/XGWwPCmMK9NrY+6klKWsOsqSfpay6qSUpRdprCdtV00yS1l1lCX9LGXVSSlLito61lOnaawnEZH+G3B/j0JERNpHjUJERHKpUYiISC41ChERyaVGISIiuQZPmzat0xn6Zdq5F0zbce8D2XrsyJZr3DR7IVfcPpcVq7zjdZSl2jrKkn6WsuooS77TTz/9qWnTpl3SymO77vBYDeHR+1nKqqMs6Wcpq46yNDfgDo9N4RT9Xht2IKUsZdVRlvSzlFVHWarVlY0ihVP0e23YgZSylFVHWdLPUlYdZalWpZuezGwKcAEwGPieu5/TYLoDgWuBt7l77mnXGsJjYGQpq46ypJ+lrDrKki/JITzMbDDwJ2AfYD5wN3CIu8+umW4U8AvCX9E7tlmj0BAeIiL9l+o+isnAHHd/3N1fBq4BDqgz3ZnAucA/K8wiIiItqrJRbMqr/1Tq/HjbK8xsJ2Ccu1+fV8jMjjazWWY2a/FijQ8vItJOVTYKq3PbK9u5zGwQ8A3g5GaF3P0Sd5/k7pPGjtX48CIi7VRlo5gPjMtc3wxYkLk+CtgBuNXM5gK7AjPMrKVtaCIiUo0qG8XdwAQz29LMhgEHAzP67nT3Je4+xt3Hu/t4YCawf7Od2SIi0l6VNQp3XwEcC9wIPAJMd/eHzewMM9u/qucVkQFo3jw47jiYPDn8P29e88dIYV03hIfOoxgYWcqqoyzpZ1nrOvPmwZvfzKoXXmDQihWsGjKEQaNGwf33w7hxzR9fZpYSa5RdZ9+377hoxfMLWyrSdYMCfu7L50+bOWwn3vD6US0NktU3fso9TzzHb2Yv7GgdZam2jrKkn6WUOqeeyqrbb2fQihUA2KpVrFqxElu2DPbbr71ZSqpRRZ0lD9484gufPP70fhegS4fwSGH8lF4bEyalLGXVUZb0s5RS5847X2kSfQatWA533dX+LCXVqKpOq7qyUaQwfkqvjQmTUpay6ihL+llKqbPLLqwaMuRVN60aMjTsr2h3lpJqVFWnVdpHoW3FSWYpq46ypJ9lreussY9iKINGjdQ+ipo6a7OPousahcZ6EpE1zJsH554bNjdNngyf/nRLTaKXrc1YT0OaTyIikrhx4+Cb3+x0ip7VlfsoRESkfdQoREQklxqFiIjkUqMQEZFcXXdm9rRzL5i2494HtnSGYp+bZi/kitvnsmKVd7yOslRbR1nSz1JWHWXJr/OjH1455LRTPvW1Vh7fdYfHDt94gm819ZtceMhOLR1X3Hc6+9LlK1l36OCO1lGWausoS/pZyqqjLM3rPP6941j21GP1/k5QU1256Sm10+J74VT/lLKUVUdZ0s9SVh1lKVanVV3ZKFI7Lb4XTvVPKUtZdZQl/Sxl1VGWYnVa1XWbnjSEx8DIUlYdZUk/S1l1lCW/jobwEBGRXGszhEdXbnoSEZH2UaMQEZFcahQiIpJLjUJERHKpUYiISC4N4aFT/ZPMUlYdZUk/S1l1lCW/jobw6IeUTq9XlmrrKEv6WcqqoyzN62gIj35I6fR6Zam2jrKkn6WsOspSrE6rurJRpHZafC+c6p9SlrLqKEv6WcqqoyzF6rSq6zY9aQiPgZGlrDrKkn6WsuooS34dDeEhIiK5NISHiIhURo1CRERyqVGIiEguNQoREcmlRiEiIrnUKEREJJfGetKYMElmKauOsqSfpaw6ypJfJ9mxnsxsCnABMBj4nrufU3P/ScBUYAWwGPhXd38ir6bGeur9LGXVUZb0s5RVR1ma10lyrCczGwxcBOwLTAQOMbOJNZPdC0xy9x2BnwDnFqmd2vgpvTAmTEpZyqqjLOlnKauOshSr06oq91FMBua4++Pu/jJwDXBAdgJ3v8XdX4pXZwKbFSmc2vgpvTAmTEpZyqqjLOlnKauOshSr06rKNj2Z2YHAFHefGq8fBuzi7sc2mP5bwNPuflad+44GjgYYPXbjna+99d5kxk/ppTFhUspSVh1lST9LWXWUJb9OkmM9mdlBwHtqGsVkdz+uzrSHAscCe7j7sry6GutJRKT/1maspyFlh8mYD4zLXN8MWFA7kZntDXyeAk1CRETar8p9FHcDE8xsSzMbBhwMzMhOYGY7Ad8F9nf3RRVmERGRFlXWKNx9BWFz0o3AI8B0d3/YzM4ws/3jZF8FRgLXmtl9ZjajQTkREemQKjc94e43ADfU3HZa5vLeVT6/iIisPQ3hISIiuTSEh071TzJLWXWUJf0sZdVRlvw6yQ7hUQUN4dH7WcqqoyzpZymrjrI0r5PkEB5VSu20+F441T+lLGXVUZb0s5RVR1mK1WlVVzaK1E6L74VT/VPKUlYdZUk/S1l1lKVYnVZ13aanTbZ5o18x4+ZkTovvpVP9U8pSVh1lST9LWXWUJb9OkkN4VEVDeIiI9N/aDOHRlZueRESkfdQoREQklxqFiIjkUqMQEZFcahQiIpJLjUJERHJprCeNCZNklrLqKEv6Wcqqoyz5dTTWUz+kNA6LslRbR1nSz1JWHWVpXkdjPfVDSuOwKEu1dZQl/Sxl1VGWYnVa1ZWNIrXxU3phTJiUspRVR1nSz1JWHWUpVqdVXbfpSWM9DYwsZdVRlvSzlFVHWfLraKwnERHJpbGeRESkMmoUIiKSS41CRERyqVGIiEguNQoREcmlITx0qn+SWcqqoyzpZymrjrLk19EQHv2Q0un1ylJtHWVJP0tZdZSleR0N4dEPKZ1eryzV1lGW9LOUVUdZitVpVVc2itROi++FU/1TylJWHWVJP0tZdZSlWJ1Wdd2mJw3hMTCylFVHWdLPUlYdZcmvoyE8REQkl4bwEBGRyqhRiIhILjUKERHJpUYhIiK51ChERCRXpY3CzKaY2aNmNsfMTqlz/3Az+3G8/04zG19lHhER6b/KGoWZDQYuAvYFJgKHmNnEmsmOAp5z922AbwBfaVZ3wfNLuWn2wrXKdtPshZx23UNJ1FGWausoS/pZyqqjLPl1Bo/eaFyrj6/sPAoz2w2Y5u7vidc/C+DuX85Mc2Oc5g4zGwI8DYz1nFAa66n3s5RVR1nSz1JWHWVpXmdtxnqqslEcCExx96nx+mHALu5+bGaah+I08+P1P8dpnqmpdTRwNACDh+w8bOx4Vi79+6KVSxbN62+uwaM3Gjd43fU26rveyTol1BgDPJNIlk7XGQO8arlJ6TW1Ocsa86KDWdpSJ6dG7rxoc5Z+KbvO8mfns+rlpS01iiGtPKigeoFqu1KRaXD3S4BLAMxs1rKnHmvp7MJeY2azWj3TstdoXqymebGa5sVqZtbykBZV7syeD2S3iW0GLGg0Tdz0NBr4W4WZRESkn6psFHcDE8xsSzMbBhwMzKiZZgZweLx8IHBz3v4JERFpv8o2Pbn7CjM7FrgRGAxc5u4Pm9kZwCx3nwF8H7jKzOYQfkkcXKD0JVVl7kKaF6tpXqymebGa5sVqLc+Lrhs9VkRE2ktnZouISC41ChERyZVso9DwH6sVmBcnmdlsM3vAzH5rZlt0Imc7NJsXmekONDM3s549NLLIvDCzD8Zl42Ez+1G7M7ZLgc/I5mZ2i5ndGz8n+3UiZ9XM7DIzWxTPUat3v5nZhXE+PWBmby1U2N2T+80KC6QAAAT3SURBVEfY+f1nYCtgGHA/MLFmmk8AF8fLBwM/7nTuDs6LdwGviZc/PpDnRZxuFHAbMBOY1OncHVwuJgD3AhvE6xt1OncH58UlwMfj5YnA3E7nrmhe/AvwVuChBvfvB/yScA7brsCdReqm+otiMjDH3R9395eBa4ADaqY5ALgiXv4JsJeZtXTWYeKazgt3v8XdX4pXZxLOWelFRZYLgDOBc4F/tjNcmxWZFx8DLnL35wDcfVGbM7ZLkXnhwHrx8mjWPKerJ7j7beSfi3YAcKUHM4H1zWzjZnVTbRSbAtlT1efH2+pO4+4rgCXAhm1J115F5kXWUYRvDL2o6bwws52Ace5+fTuDdUCR5WJbYFsz+4OZzTSzKW1L115F5sU04FAzmw/cABzXnmjJ6e/6BKh2CI+1UdrwHz2g8Os0s0OBScAelSbqnNx5YWaDCKMQH9GuQB1UZLkYQtj8tCfhV+bvzGwHd3++4mztVmReHAJc7u7nxQFLr4rzYlX18ZLS0noz1V8UGv5jtSLzAjPbG/g8sL+7L2tTtnZrNi9GATsAt5rZXMI22Bk9ukO76GfkOndf7u5/AR4lNI5eU2ReHAVMB3D3O4B1CAMGDjSF1ie1Um0UGv5jtabzIm5u+S6hSfTqdmhoMi/cfYm7j3H38e4+nrC/Zn93b3kwtIQV+Yz8nHCgA2Y2hrAp6vG2pmyPIvPiSWAvADPbntAoFrc1ZRpmAB+NRz/tCixx96eaPSjJTU9e3fAfXafgvPgqMBK4Nu7Pf9Ld9+9Y6IoUnBcDQsF5cSPwbjObDawEPuXuz3YudTUKzouTgUvN7ETCppYjevGLpZldTdjUOCbuj/kiMBTA3S8m7J/ZD5gDvAQcWahuD84rEREpUaqbnkREJBFqFCIikkuNQkREcqlRiIhILjUKERHJpUYhApjZODP7i5m9Nl7fIF7fwsw2NrPr4+17xlFpj8o8dqd42yebPMebzOzySl+ISAXUKEQAd58HfAc4J950DnCJuz8BnARcmpn8QeBDmesHE0YsbfYcDwKbmdnmpYQWaRM1CpHVvgHsamYnAO8Ezou3fwD4VWa6J4F1zOx1ccTiKWQGYjSzt8Wx/u8ws6/W/G2A/yKeHGpme5jZffHfvWY2qsLXJtIyNQqRyN2XA58iNIwT3P1lM9sSeK7O+Fk/AQ4C3g78D5C9//8Dx7j7boQzorNmAbvHy58E/t3d3xJvW1rm6xEpixqFyKvtCzxFGFwQYGPqjwk0ndAoDgGu7rvRzNYHRrn77fGm2r8qtwjYJF7+A/B1MzseWD8Oly+SHDUKkcjM3gLsQxh19sT4B12WEgaQexV3fxpYHqf/bbZMk6dZJ9bE3c8BpgLrAjPNbLu1fQ0iVVCjECH8LWHCzuwT3P1JwkCLXwP+BIxv8LDTgM+4+yubl+Jfk3shjswJaw5WuS3wUHzOrd39QXf/CmGTlBqFJEmNQiT4GGHU3Zvi9W8TVtyTgD+b2Ta1D3D3293953VqHQVcYmZ3EH5hLMnc9y7gF/HyCWb2kJndT/iV0at/mVC6nEaPFWnCzN4P7OzupxacfqS7vxgvnwJs7O7/YWbDgf8G3qn9EdJNkvx7FCIpcfefmVl//h77e83ss4TP1xOs/tOsmwOnqElIt9EvChERyaV9FCIikkuNQkREcqlRiIhILjUKERHJpUYhIiK5/hcbZh+/QWwc0AAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 9.33 s\n"
]
}
],
"source": [
"time(perplex(1700,0,0.40,8400))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"siamo intorno ai 10 secondi. L'argoritmo *perplex* è meno efficiente dal punto di vista computazionale (tempi di calcolo lunghi), inoltre l'accuratezza dei risultati dipende dalla densità della griglia: tanti più punti abbiamo nella griglia, tanto maggiore è l'accuratezza del calcolo, ma tanto più aumenta il tempo di calcolo. Proviamo a rifare lo stesso calcolo passando da *nx*=20 (il default) a *nx*=40: "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Calcolo Perplex-like\n",
"Temperatura: 1700.0 K, Pressione: 0.0 GPa\n",
"Composizione globale X(Mg) pari a 0.40\n",
"X(Mg) fase solida 0.79, quantità fase solida 0.36\n",
"X(Mg) fase liquida 0.18, quantità fase liquida 0.64\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 40 s\n"
]
}
],
"source": [
"time(perplex(1700,0,0.40,8400,nx=40))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Siamo passati da 10 secondi a 40 secondi... \n",
"\n",
"Tuttavia l'algoritmo *perplex* è quello usato nel programma *PerpleX* di Connolly perchè è molto più facile da implementare per un numero in generale molto alto di fasi da prendere *simultaneamente* in considerazione e per una chimica a molte componenti (nei nostri esempi abbiamo solo due fasi e due componenti...). In tal caso le tecniche di minimizzazione di una funzione (*G*) in uno spazio *N*-dimensionale (dove *N* diventa un numero molto grande al crescere della complessità chimica del sistema) come quelle usate in *composition*, diventano praticamente inapplicabili. Inoltre *PerpleX* è magistralmente *ottimizzato* per funzionare *velocemente* (ed è anche un programma scritto in un linguaggio *compilato* e non *interpretato* come Python, ma sorvoliamo su questi *dettagli*): i tempi di calcolo sono ben inferiori a quelli dati qui, per un sistema così semplice. "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}