{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "74194e62-1b42-4494-8c60-4b9a23506cbb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Application of Jarzynski equality to diffusion couple (Fig.7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "29236e85-52fc-4c26-a92b-5132ec952be4",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import csv\n",
    "import time\n",
    "import matplotlib.pyplot as plt\n",
    "import requests\n",
    "import numpy as np\n",
    "from langchain_ollama import ChatOllama\n",
    "from langchain_core.tools import tool\n",
    "from langgraph.prebuilt import create_react_agent\n",
    "from langchain.schema import AIMessage\n",
    "from scipy.integrate import trapezoid\n",
    "from scipy.integrate import simpson\n",
    "\n",
    "#os.environ['http_proxy'] = 'http://wwwout.nims.go.jp:8888'\n",
    "#os.environ['https_proxy'] = 'http://wwwout.nims.go.jp:8888'\n",
    "os.environ['no_proxy'] = 'localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,144.213.0.0/16,.nims.go.jp'\n",
    "#os.environ['REQUESTS_CA_BUNDLE'] = R'C:\\Users\\nims_proxy.cer'\n",
    "#r = requests.get('https://example.com/')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "82e34eb8-e519-49dd-83ec-4d5879ab72ea",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Numerical parameter values\n",
    "PI = 3.141592 #π\n",
    "RR = 8.3145 #Gas constant [J／（mol K）]\n",
    "\n",
    "c0 = 0.5 # alloy comosition（moler fraction of B component）\n",
    "al = 100.0*1.e-6 #length of 1-dimensional simulation area [m]\n",
    "\n",
    "#These are not a real time but an increment\n",
    "real_delt = 0.08 #real time step[s]\n",
    "itime1 = 0 #Initial time \n",
    "itime1max = int(3.*3600./real_delt) # Final time（3hr, Divide by real time step to convert to dimensionless iteration number）\n",
    "itime1_step = int(10000*0.08/real_delt) #Time step to save the field data\n",
    "Ndata = int(itime1max/itime1_step+0.5)  #Number of data to plot\n",
    "\n",
    "D0=8.9e-5; Q0=291000.; #diffusion parameters for the self-diffusion of Fe(fcc)\n",
    "Mc0=1.0; Mc=Mc0*c0*(1.0-c0) # diffusion Mobility [Dimensionless]\n",
    "\n",
    "cm_eq=0.07;  cp_eq=0.93;  c_av=0.5*(cm_eq+cp_eq)\n",
    "\n",
    "#Output data folder\n",
    "output_folder = \"JE_out/\"  \n",
    "os.makedirs(output_folder, exist_ok=True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "97413cff-2176-4019-8cd4-35df0617d4b1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Definition of tool\n",
    "@tool\n",
    "# Definition of tool\n",
    "def Work_of_Diffusion(mesh_number: int, aging_temp: float, interaction_param: float)-> int:\n",
    "    \"\"\"\n",
    "    Performs a diffusion simulation of diffusion couple in A-B binary alloy with regular solution approximation during isothermal aging.\n",
    "    It receives three input parameters: mesh number, aging temperature, and interaction parameter. \n",
    "    The diffusion simulation is performed, and the calculation results are displied on screen amd saved in hard disk. \n",
    "    Finally, it returns the end status of the calculation as an int type. When the value of the end status is 0, the calculation fails, \n",
    "    and when the value of the end status is 1, the calculation succeeds.\n",
    "\n",
    "    Args:\n",
    "        mesh number (int): an integer type input parameter, no unit.\n",
    "        aging temp (float): temperature, a float type input parameter, unit is K.\n",
    "        interaction parameter (float): a float type input parameter, unit is J/mol.\n",
    "\n",
    "    Returns:\n",
    "        iflg (int): end status of the calculation.\n",
    "    \"\"\"\n",
    "\n",
    "    NDP=mesh_number\n",
    "    temp=aging_temp\n",
    "    LL0=interaction_param\n",
    "\n",
    "    nd=NDP-1\n",
    "    nd2=int((NDP-1)/2)\n",
    "\n",
    "    text_nd = str(nd)\n",
    "    text_temp = str(int(temp))\n",
    "    text_L0 = str(int(LL0))\n",
    "    \n",
    "    fname0 = f\"JE_N{text_nd}_T{text_temp}_L{text_L0}\"\n",
    "    fname = f\"{fname0}.png\"\n",
    "    path = \"./\"+output_folder+fname\n",
    "    \n",
    "\n",
    "    # Setting constants for calculation conditions\n",
    "    b1 = al/nd # block size in the difference method [m]\n",
    "    Rtemp = RR*temp #  RT [J/mol]\n",
    "    D=D0*np.exp(-Q0/Rtemp) \n",
    "    t0=b1*b1/D  # dimensionless time unit \n",
    "    delt=real_delt/t0 #time step [dimensionless]\n",
    "    L0=LL0/Rtemp  # Interaction parameters [J/mol] normalized by RT\n",
    "    \n",
    "    # initial composition field\n",
    "    c = np.concatenate((np.full(nd2, cp_eq), np.full(1, c_av), np.full(nd2, cm_eq)))\n",
    "\n",
    "    iflg=0\n",
    "\n",
    "#-------------------------------------------------------------------------------------\n",
    "    x = al*1.0e+06/nd*(np.arange(0, NDP))\n",
    "    dG1=np.zeros(Ndata)\n",
    "    t1=np.zeros(Ndata)\n",
    "    dW1=np.zeros(Ndata)\n",
    "\n",
    "    #Free energy at the initial field\n",
    "    xn=np.linspace(0, nd, NDP) \n",
    "    Gc=L0*c*(1.0-c)+c*np.log(c)+(1.-c)*np.log(1.-c)\n",
    "    #G_av_ini = trapezoid(Gc, xn)/nd\n",
    "    G_av_ini = simpson(Gc, xn)/nd\n",
    "\n",
    "    iter=0; dW=0.0\n",
    "    for itime1 in range(itime1max):\n",
    "        time1=delt*itime1*t0\n",
    "        mu=L0*(1.0-2.0*c)+np.log(c)-np.log(1.-c)\n",
    "        cR=np.roll(c, -1);  cL=np.roll(c, 1) #boundary condition\n",
    "        cR[nd]=c[nd];  cL[0]=c[0]\n",
    "        muR=np.roll(mu, -1);  muL=np.roll(mu, 1) #boundary condition件\n",
    "        muR[nd]=mu[nd];  muL[0]=mu[0]\n",
    "        mu_dev = muL+muR-2.*mu\n",
    "\n",
    "        #Diffusion equation\n",
    "        dcdt = Mc*mu_dev\n",
    "        c2 = c + dcdt*delt\n",
    "        res = c2 - (np.mean(c2) - c0)  #Correction for average composition\n",
    "        c = np.clip(res, 1.0e-06, 1.0-1.0e-06)  #Correction of composition range\n",
    "\n",
    "        #Work due to diffusion friction\n",
    "        mu1=L0*(1.0-2.0*c)+np.log(c)-np.log(1.-c)\n",
    "        mu1R=np.roll(mu1, -1);  mu1L=np.roll(mu1, 1) #boundary condition\n",
    "        mu1R[nd]=mu1[nd];  mu1L[0]=mu1[0]\n",
    "        J=-0.5*Mc*(mu1R-mu1L)\n",
    "        LW=J*J/Mc; ALW=np.exp(-LW); ALW_av = simpson(ALW, xn)/nd;  dW_av=-np.log(ALW_av)\n",
    "        #dW_av = simpson(LW, xn)/nd\n",
    "        dW=dW+(-dW_av)*delt\n",
    " \n",
    "        if itime1 % itime1_step == 0:\n",
    "            Gc=L0*c*(1.0-c)+c*np.log(c)+(1.-c)*np.log(1.-c)\n",
    "            #G_av = trapezoid(Gc, xn)/nd\n",
    "            G_av = simpson(Gc, xn)/nd\n",
    "            dG=G_av-G_av_ini\n",
    "\n",
    "            t1[iter]=time1\n",
    "            dG1[iter]=dG*Rtemp\n",
    "            dW1[iter]=dW*Rtemp        \n",
    "            print('iter dG dW = ', iter, dG1[iter], dW1[iter])\n",
    "            iter=iter+1\n",
    "        \n",
    "    print('time = ', t1)\n",
    "    print('dG = ', dG1)\n",
    "    print('dW = ', dW1)\n",
    "    iflg=1\n",
    "\n",
    "    #Drawing the figure\n",
    "    plt.figure(figsize=(5,5))\n",
    "\n",
    "    plt.plot(t1, dG1,  marker='o', color=\"Black\")\n",
    "    plt.plot(t1, dW1,  marker='o', color=\"Red\")\n",
    "    #plt.plot(x, c, color=\"Black\", label=\"B\")\n",
    "\n",
    "    plt.xlim(0, 10000)\n",
    "    plt.ylim(-9000, 0)\n",
    "    #plt.ylim(-700, 0)\n",
    "    #plt.ylim(-4000, 0)\n",
    "    #plt.ylim(-2000, 0)\n",
    "\n",
    "    plt.xticks(fontsize=Ndata+2)\n",
    "    plt.yticks(fontsize=Ndata+2)\n",
    "    plt.grid(True)\n",
    "    plt.xlabel('Time(s)', fontsize=20)\n",
    "    plt.ylabel('Free energy change (J/mol)', fontsize=20)\n",
    "    #plt.show()\n",
    "    plt.savefig(path, bbox_inches='tight', pad_inches=0.1)\n",
    "    #plt.pause(5.0) #displayed for 5.0 sec\n",
    "    time.sleep(5) \n",
    "    plt.close()\n",
    "            \n",
    "    return iflg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "6367b038-67fe-4871-b962-7474598be378",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "tools = [Work_of_Diffusion]\n",
    "LLM = \"qwen3:8b\"\n",
    "model = ChatOllama( \n",
    "    model=LLM, \n",
    "    temperature=0 \n",
    ")\n",
    "agent = create_react_agent( \n",
    "    model=model, \n",
    "    tools=tools \n",
    ")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0e0056e7-aaf2-4285-8ccc-e4a8a81daa0b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "iter dG dW =  0 -0.3713755779281492 -0.1715141904464977\n",
      "iter dG dW =  1 -173.23185056853936 -167.94785165704872\n",
      "iter dG dW =  2 -246.58113132460358 -241.2572478511695\n",
      "iter dG dW =  3 -302.8029942997505 -297.51916028117824\n",
      "iter dG dW =  4 -350.03401829535954 -344.8508148512801\n",
      "iter dG dW =  5 -391.34061363640063 -386.2944793878144\n",
      "iter dG dW =  6 -428.24721927735527 -423.3563959525673\n",
      "iter dG dW =  7 -461.65182238857426 -456.9232967197423\n",
      "iter dG dW =  8 -492.1515300951883 -487.58577094014083\n",
      "iter dG dW =  9 -520.1785009290448 -515.7723295946919\n",
      "iter dG dW =  10 -546.064030852927 -541.812308427538\n",
      "iter dG dW =  11 -570.0721646802141 -565.9687787705875\n",
      "iter dG dW =  12 -592.419071412644 -588.4575130495747\n",
      "iter dG dW =  13 -613.2851548800543 -609.4588544340584\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [-3.71375578e-01 -1.73231851e+02 -2.46581131e+02 -3.02802994e+02\n",
      " -3.50034018e+02 -3.91340614e+02 -4.28247219e+02 -4.61651822e+02\n",
      " -4.92151530e+02 -5.20178501e+02 -5.46064031e+02 -5.70072165e+02\n",
      " -5.92419071e+02 -6.13285155e+02]\n",
      "dW =  [-1.71514190e-01 -1.67947852e+02 -2.41257248e+02 -2.97519160e+02\n",
      " -3.44850815e+02 -3.86294479e+02 -4.23356396e+02 -4.56923297e+02\n",
      " -4.87585771e+02 -5.15772330e+02 -5.41812308e+02 -5.65968779e+02\n",
      " -5.88457513e+02 -6.09458854e+02]\n",
      "\n",
      "- \n",
      "- <think>\n",
      "Okay, the user set the mesh number to 201, aging temperature to 1600 K, and interaction parameter to 25000 J/mol. They ran the Work_of_Diffusion tool, and the response was 1, which means the calculation succeeded. Now I need to let them know it worked. I should confirm the parameters used and state that the simulation completed successfully. Maybe mention that the results are saved and displayed. Keep it straightforward and positive since the outcome was a success. No errors to address here, just a confirmation.\n",
      "</think>\n",
      "\n",
      "The diffusion simulation was successfully executed with the specified parameters:  \n",
      "- **Mesh Number**: 201  \n",
      "- **Aging Temperature**: 1600 K  \n",
      "- **Interaction Parameter**: 25000 J/mol  \n",
      "\n",
      "The calculation completed without errors, and the results are saved to the hard disk. Let me know if you need further analysis!\n"
     ]
    }
   ],
   "source": [
    "# Run the agent\n",
    "messages = {\n",
    "    \"messages\": [{\"role\": \"user\", \"content\": \"\"\"Fix the mesh number to 201, the aging temperature at 1600 K, and the interaction parameter to 25000. \n",
    "               Under the above conditions, run the tool:'Work_of_Diffusion'.\"\"\"}]\n",
    "}\n",
    "answer = agent.invoke(messages)\n",
    "messages_list = answer[\"messages\"] # Get the messages list\n",
    "filtered_messages = [msg.content for msg in messages_list if isinstance(msg, AIMessage)] # Extract assistant messages only.\n",
    "formatted_output = \"\\n- \" + \"\\n- \".join(filtered_messages) # Formatted and output\n",
    "print(formatted_output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "747f8b24-23fb-4e7b-bd43-21a61b17735e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "iter dG dW =  0 -3.508809519972776 -0.7401653244661668\n",
      "iter dG dW =  0 -3.508809519972776 -0.7401653244661668\n",
      "iter dG dW =  0 -6.9081635599690925 -1.470984605137264\n",
      "iter dG dW =  0 -10.103932157692874 -2.2050340058228164\n",
      "iter dG dW =  0 -13.024597222039619 -2.9492569883944775\n",
      "iter dG dW =  0 -15.619717341883062 -3.710989708080766\n",
      "iter dG dW =  0 -17.8540006506262 -4.49374294234313\n",
      "iter dG dW = iter dG dW =  1 -2437.6998387757885 -2174.7968441795438\n",
      " 1 -2437.6998387757885 -2174.7968441795438\n",
      "iter dG dW =  1 -2488.7910282275657 -2415.58320336426\n",
      "iter dG dW =  1 -2483.0355894827994 -2387.5679830700597\n",
      "iter dG dW =  1 -2471.583613110099 -2332.2957572843934\n",
      "iter dG dW =  2 -3472.8000046947895 -3207.3981645786093\n",
      "iter dG dW =  2 -3472.8000046947895 -3207.3981645786093\n",
      "iter dG dW =  2 -3525.7934876586805 -3452.81816119417\n",
      "iter dG dW =  2 -3519.843730158164 -3424.5642716166094\n",
      "iter dG dW =  2 -3507.990725023687 -3368.6066010084974\n",
      "iter dG dW =  3 -4259.844032163513 -3997.4482692967595\n",
      "iter dG dW =  3 -4259.844032163513 -3997.4482692967595\n",
      "iter dG dW =  3 -4316.286533355659 -4244.423618397547\n",
      "iter dG dW =  3 -4309.955943021154 -4216.108788592537\n",
      "iter dG dW =  3 -4297.339592276829 -4159.945072439988\n",
      "iter dG dW =  4 -4910.452716463785 -4653.15169336271\n",
      "iter dG dW =  4 -4910.452716463785 -4653.15169336271\n",
      "iter dG dW =  4 -4970.772400889588 -4900.392432970464\n",
      "iter dG dW =  5 -5466.584602079122 -5215.096708434651\n",
      "iter dG dW =  4 -4964.011746899628 -4872.112585048292\n",
      "iter dG dW =  5 -5466.584602079122 -5215.096708434651\n",
      "iter dG dW =  4 -4950.534701349757 -4815.970324903013\n",
      "iter dG dW =  6 -5950.329825872388 -5704.777170120533\n",
      "iter dG dW =  5 -5530.562074387831 -5461.774831684406\n",
      "iter dG dW =  6 -5950.329825872388 -5704.777170120533\n",
      "iter dG dW =  5 -5523.3962039704775 -5433.601343810469\n",
      "iter dG dW =  5 -5509.107767574946 -5377.638808046431\n",
      "iter dG dW =  7 -6375.70580459583 -6135.9368976652095\n",
      "iter dG dW =  7 -6375.70580459583 -6135.9368976652095\n",
      "iter dG dW =  6 -6017.5131498668625 -5950.309787377668\n",
      "iter dG dW =  6 -6009.992945472221 -5922.296177409771\n",
      "iter dG dW =  6 -5994.994374769825 -5866.628869969786\n",
      "iter dG dW =  8 -6752.593202031293 -6518.32938683501\n",
      "iter dG dW =  8 -6752.593202031293 -6518.32938683501\n",
      "iter dG dW =  7 -6445.587759517663 -6379.9052639201245\n",
      "iter dG dW =  7 -6437.770138372103 -6352.090996201841\n",
      "iter dG dW =  7 -6422.174849876984 -6296.803168105856\n",
      "iter dG dW =  9 -7088.406405396432 -6859.3135927311205\n",
      "iter dG dW =  9 -7088.406405396432 -6859.3135927311205\n",
      "iter dG dW =  8 -6824.680945967135 -6760.432257134385\n",
      "iter dG dW =  8 -6816.6210899075 -6732.845941249634\n",
      "iter dG dW =  10 -7388.939008573467 -7164.664760930151\n",
      "iter dG dW =  8 -6800.539135651941 -6677.998477706122\n",
      "iter dG dW =  10 -7388.939008573467 -7164.664760930151\n",
      "iter dG dW =  9 -7162.247567761632 -7099.33646893222\n",
      "iter dG dW = iter dG dW =  11 -7658.848220776589 -7439.041481372717\n",
      " 9 -7153.996038937576 -7071.998373977381\n",
      "iter dG dW = iter dG dW =  11 -7658.848220776589 -7439.041481372717\n",
      " 9 -7137.528324586021 -7017.63450120328\n",
      "iter dG dW =  10 -7464.12982045941 -7402.458596917548\n",
      "iter dG dW =  12 -7901.957471272091 -7686.279077928559\n",
      "iter dG dW =  10 -7455.7316778051245 -7375.382551037202\n",
      "iter dG dW =  12 -7901.957471272091 -7686.279077928559\n",
      "iter dG dW =  11 -7735.034042097382 -7674.507475153229\n",
      "iter dG dW = iter dG dW =  13 -8121.457471332606 -7909.585567667023\n",
      " 10 -7438.9681799514865 -7321.53198624324\n",
      "iter dG dW =  11 -7726.528800977865 -7647.702290265872\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [-3.50880952e+00 -2.43769984e+03 -3.47280000e+03 -4.25984403e+03\n",
      " -4.91045272e+03 -5.46658460e+03 -5.95032983e+03 -6.37570580e+03\n",
      " -6.75259320e+03 -7.08840641e+03 -7.38893901e+03 -7.65884822e+03\n",
      " -7.90195747e+03 -8.12145747e+03]\n",
      "dW =  [-7.40165324e-01 -2.17479684e+03 -3.20739816e+03 -3.99744827e+03\n",
      " -4.65315169e+03 -5.21509671e+03 -5.70477717e+03 -6.13593690e+03\n",
      " -6.51832939e+03 -6.85931359e+03 -7.16466476e+03 -7.43904148e+03\n",
      " -7.68627908e+03 -7.90958557e+03]\n",
      "iter dG dW =  13 -8121.457471332606 -7909.585567667023\n",
      "iter dG dW =  11 -7709.54847248652 -7594.384290679345\n",
      "iter dG dW =  12 -7978.830113321113 -7919.357521156618\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [-3.50880952e+00 -2.43769984e+03 -3.47280000e+03 -4.25984403e+03\n",
      " -4.91045272e+03 -5.46658460e+03 -5.95032983e+03 -6.37570580e+03\n",
      " -6.75259320e+03 -7.08840641e+03 -7.38893901e+03 -7.65884822e+03\n",
      " -7.90195747e+03 -8.12145747e+03]\n",
      "dW =  [-7.40165324e-01 -2.17479684e+03 -3.20739816e+03 -3.99744827e+03\n",
      " -4.65315169e+03 -5.21509671e+03 -5.70477717e+03 -6.13593690e+03\n",
      " -6.51832939e+03 -6.85931359e+03 -7.16466476e+03 -7.43904148e+03\n",
      " -7.68627908e+03 -7.90958557e+03]\n",
      "iter dG dW =  12 -7970.252058773431 -7892.828070130649\n",
      "iter dG dW =  12 -7953.123443341818 -7840.053709278938\n",
      "iter dG dW =  13 -8198.751273427784 -8140.247474153005\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [  -13.02459722 -2488.79102823 -3525.79348766 -4316.28653336\n",
      " -4970.77240089 -5530.56207439 -6017.51314987 -6445.58775952\n",
      " -6824.68094597 -7162.24756776 -7464.12982046 -7735.0340421\n",
      " -7978.83011332 -8198.75127343]\n",
      "dW =  [-2.94925699e+00 -2.41558320e+03 -3.45281816e+03 -4.24442362e+03\n",
      " -4.90039243e+03 -5.46177483e+03 -5.95030979e+03 -6.37990526e+03\n",
      " -6.76043226e+03 -7.09933647e+03 -7.40245860e+03 -7.67450748e+03\n",
      " -7.91935752e+03 -8.14024747e+03]\n",
      "iter dG dW =  13 -8190.12990949397 -8113.995516575352\n",
      "iter dG dW =  13 -8172.912030227523 -8061.769414582885\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [  -10.10393216 -2483.03558948 -3519.84373016 -4309.95594302\n",
      " -4964.0117469  -5523.39620397 -6009.99294547 -6437.77013837\n",
      " -6816.62108991 -7153.99603894 -7455.73167781 -7726.52880098\n",
      " -7970.25205877 -8190.12990949]\n",
      "dW =  [-2.20503401e+00 -2.38756798e+03 -3.42456427e+03 -4.21610879e+03\n",
      " -4.87211259e+03 -5.43360134e+03 -5.92229618e+03 -6.35209100e+03\n",
      " -6.73284594e+03 -7.07199837e+03 -7.37538255e+03 -7.64770229e+03\n",
      " -7.89282807e+03 -8.11399552e+03]\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [-6.90816356e+00 -2.47158361e+03 -3.50799073e+03 -4.29733959e+03\n",
      " -4.95053470e+03 -5.50910777e+03 -5.99499437e+03 -6.42217485e+03\n",
      " -6.80053914e+03 -7.13752832e+03 -7.43896818e+03 -7.70954847e+03\n",
      " -7.95312344e+03 -8.17291203e+03]\n",
      "dW =  [-1.47098461e+00 -2.33229576e+03 -3.36860660e+03 -4.15994507e+03\n",
      " -4.81597032e+03 -5.37763881e+03 -5.86662887e+03 -6.29680317e+03\n",
      " -6.67799848e+03 -7.01763450e+03 -7.32153199e+03 -7.59438429e+03\n",
      " -7.84005371e+03 -8.06176941e+03]\n",
      "iter dG dW =  1 -2492.253711823841 -2432.406261557963\n",
      "iter dG dW =  1 -2494.566092380409 -2443.557646920854\n",
      "iter dG dW =  2 -3529.370816554005 -3469.7510669153967\n",
      "iter dG dW =  2 -3531.7588247406666 -3480.9617766285905\n",
      "iter dG dW =  3 -4320.092103144511 -4261.379603939869\n",
      "iter dG dW =  4 -4974.835915901503 -4917.319655518326\n",
      "iter dG dW =  3 -4322.632166282167 -4272.60007821891\n",
      "iter dG dW =  5 -5534.868560381436 -5478.6329493773665\n",
      "iter dG dW =  4 -4977.547903213977 -4928.517712644824\n",
      "iter dG dW =  6 -6022.03199539936 -5967.06804709378\n",
      "iter dG dW =  5 -5537.742460814947 -5489.782730819488\n",
      "iter dG dW =  7 -6450.284747604348 -6396.540840841896\n",
      "iter dG dW =  8 -6829.522918126153 -6776.928573838731\n",
      "iter dG dW =  6 -6025.047367036694 -5978.149617013033\n",
      "iter dG dW =  9 -7167.2041522724485 -7115.681795417039\n",
      "iter dG dW =  7 -6453.418751410858 -6407.5393389329765\n",
      "iter dG dW =  10 -7469.173959908765 -7418.644967102142\n",
      "iter dG dW =  11 -7740.142015334588 -7690.529864041713\n",
      "iter dG dW =  8 -6832.7534279889405 -6787.833194020313\n",
      "iter dG dW =  12 -7983.981345597283 -7935.213218094746\n",
      "iter dG dW =  9 -7170.510906162513 -7126.484897772264\n",
      "iter dG dW =  13 -8203.928065178925 -8155.935600010547\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [  -15.61971734 -2492.25371182 -3529.37081655 -4320.09210314\n",
      " -4974.8359159  -5534.86856038 -6022.0319954  -6450.2847476\n",
      " -6829.52291813 -7167.20415227 -7469.17395991 -7740.14201533\n",
      " -7983.9813456  -8203.92806518]\n",
      "dW =  [-3.71098971e+00 -2.43240626e+03 -3.46975107e+03 -4.26137960e+03\n",
      " -4.91731966e+03 -5.47863295e+03 -5.96706805e+03 -6.39654084e+03\n",
      " -6.77692857e+03 -7.11568180e+03 -7.41864497e+03 -7.69052986e+03\n",
      " -7.93521322e+03 -8.15593560e+03]\n",
      "iter dG dW =  10 -7472.5389104919595 -7429.341378987145\n",
      "iter dG dW =  11 -7743.549343662724 -7701.116344875377\n",
      "iter dG dW =  12 -7987.417333734071 -7945.688049693503\n",
      "iter dG dW =  13 -8207.380914714393 -8166.298269986753\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [  -17.85400065 -2494.56609238 -3531.75882474 -4322.63216628\n",
      " -4977.54790321 -5537.74246081 -6025.04736704 -6453.41875141\n",
      " -6832.75342799 -7170.51090616 -7472.53891049 -7743.54934366\n",
      " -7987.41733373 -8207.38091471]\n",
      "dW =  [-4.49374294e+00 -2.44355765e+03 -3.48096178e+03 -4.27260008e+03\n",
      " -4.92851771e+03 -5.48978273e+03 -5.97814962e+03 -6.40753934e+03\n",
      " -6.78783319e+03 -7.12648490e+03 -7.42934138e+03 -7.70111634e+03\n",
      " -7.94568805e+03 -8.16629827e+03]\n",
      "\n",
      "- \n",
      "- <think>\n",
      "Okay, the user wants me to run the Work_of_Diffusion tool with specific parameters. Let me see. They fixed the aging temperature at 1600 K and the interaction parameter at -25000 J/mol. The mesh number needs to range from 101 to 601 in increments of 100. So the mesh numbers should be 101, 201, 301, 401, 501, 601.\n",
      "\n",
      "Wait, in the previous response, the assistant made seven tool calls, each with the same parameters but different mesh numbers. The tool responses were all 1, which means the calculations succeeded. Now, the user's latest input is just the tool responses, so I need to process that.\n",
      "\n",
      "The user probably expects a summary of the results. Since all runs were successful, I should mention that each mesh number completed without issues. Maybe they want to know if there's any pattern or if all settings are valid. I should confirm the success and perhaps note that the interaction parameter being negative might indicate some specific behavior in the diffusion process. But since the user didn't ask for analysis, just confirming the successful runs and the parameters used would be safe. Let me structure the response to list each mesh number and the success status, then conclude that all simulations ran successfully under the given conditions.\n",
      "</think>\n",
      "\n",
      "The \"Work_of_Diffusion\" tool was executed successfully for all specified mesh numbers under the fixed conditions:\n",
      "- Aging temperature: 1600 K\n",
      "- Interaction parameter: -25000 J/mol\n",
      "- Mesh numbers: 101, 201, 301, 401, 501, 601\n",
      "\n",
      "All simulations completed with status code 1 (success). The regular solution approximation was applied for the A-B binary alloy diffusion couple under isothermal aging conditions. The results were saved as specified.\n"
     ]
    }
   ],
   "source": [
    "# Run the agent\n",
    "messages = {\n",
    "    \"messages\": [{\"role\": \"user\", \"content\": \"\"\"Fix the aging temperature to 1600 K and the interaction parameter to -25000. Under these conditions, \n",
    "    run the “Work_of_Diffusion” tool repeatedly with the  mesh number ranging from 101 to 601 in increments of 100.\"\"\"}]\n",
    "}\n",
    "answer = agent.invoke(messages)\n",
    "messages_list = answer[\"messages\"] # Get the messages list\n",
    "filtered_messages = [msg.content for msg in messages_list if isinstance(msg, AIMessage)] # Extract assistant messages only.\n",
    "formatted_output = \"\\n- \" + \"\\n- \".join(filtered_messages) # Formatted and output\n",
    "print(formatted_output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "ecbd677d-21bc-4e3f-ba78-91ec5697b0e0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "iter dG dW =  0 -13.024597222039619 -2.9492569883944775\n",
      "iter dG dW =  0 -11.13208757806968 -2.73456818168538\n",
      "iter dG dW =  0 -9.38266985072641 -2.498989412290476\n",
      "iter dG dW =  0 -7.777837560534159 -2.2436548670663083\n",
      "iter dG dW =  0 -6.319072193323631 -1.9708315302649686\n",
      "iter dG dW =  0 -5.00784210884124 -1.684278391190963\n",
      "iter dG dW =  0 -3.845601312965646 -1.3896518510987268\n",
      "iter dG dW =  0 -2.8337880715932013 -1.0948650177494517\n",
      "iter dG dW =  0 -1.9738233398095193 -0.8102521287837668\n",
      "iter dG dW = iter dG dW =  0 -0.7150256917682569 -0.3232062740120099\n",
      " 0 -1.2671089744974278 -0.5483589677695997\n",
      "iter dG dW = iter dG dW =  1 -2182.7433266957687 -2121.7358538001176\n",
      " 1 -2488.7910282275657 -2415.58320336426\n",
      "iter dG dW = iter dG dW =  1 -1890.5129240442259 -1840.4532398435347\n",
      " 1 -1612.7917931666902 -1572.4433880647766\n",
      "iter dG dW =  1 -1104.2694251367068 -1079.7525819402235\n",
      "iter dG dW = iter dG dW =  1 -477.1084720219619 -468.2023053940808\n",
      " 1 -1350.3891230013348 -1318.5418763021698\n",
      "iter dG dW =  1 -875.6109650826954 -857.3089303554108\n",
      "iter dG dW =  1 -175.19087829517585 -172.31256163652853\n",
      "iter dG dW =  1 -665.901342667356 -652.7719648550441\n",
      "iter dG dW =  1 -312.0301675336743 -306.50603342611953\n",
      "iter dG dW =  2 -2678.9296709794357 -2628.968063116994\n",
      "iter dG dW =  2 -3525.7934876586805 -3452.81816119417\n",
      "iter dG dW = iter dG dW =  2 -2285.6990074792 -2245.405113660282\n",
      " 2 -3092.6255821376644 -3031.774800478435\n",
      "iter dG dW =  2 -1565.476680650222 -1540.963610771239\n",
      "iter dG dW =  2 -676.7731141571969 -667.8538880172939\n",
      "iter dG dW =  2 -248.56763402819044 -245.68251148970984\n",
      "iter dG dW =  2 -1241.5330819584674 -1223.2233161337563\n",
      "iter dG dW =  2 -1914.09005611487 -1882.2666167367313\n",
      "iter dG dW =  2 -944.3692652525665 -931.2271560377254\n",
      "iter dG dW =  2 -442.7049938489878 -437.17060693821065\n",
      "iter dG dW =  3 -3281.2274516127477 -3231.9707037724434\n",
      "iter dG dW =  3 -4316.286533355659 -4244.423618397547\n",
      "iter dG dW =  3 -1918.5691244328677 -1894.3516276113035\n",
      "iter dG dW =  3 -2800.1928499488326 -2760.4418812792737\n",
      "iter dG dW =  3 -3787.0206868154823 -3727.0642145830475\n",
      "iter dG dW =  3 -304.8293531959136 -301.97024094518804\n",
      "iter dG dW =  3 -1521.81167269151 -1503.7083485904348\n",
      "iter dG dW =  3 -829.8108519056144 -820.9777695575139\n",
      "iter dG dW =  3 -2345.394753167452 -2313.978383949025\n",
      "iter dG dW =  3 -1157.7440543445587 -1144.7393874748943\n",
      "iter dG dW =  4 -3782.419056090167 -3734.1576558306874\n",
      "iter dG dW =  3 -542.8860242186504 -537.401621870624\n",
      "iter dG dW = iter dG dW =  4 -3229.231497006976 -3190.2726679116236\n",
      " 4 -2214.0416179916124 -2190.289433756555\n",
      "iter dG dW =  4 -4970.772400889588 -4900.392432970464\n",
      "iter dG dW =  4 -2705.734055730729 -2674.933381902606\n",
      "iter dG dW =  4 -4363.470352659757 -4304.739518468209\n",
      "iter dG dW =  4 -352.1194004105764 -349.3143795578261\n",
      "iter dG dW =  4 -1336.7456649242065 -1323.9790426700877\n",
      "iter dG dW =  4 -1756.6737512564148 -1738.910337944329\n",
      "iter dG dW =  4 -958.3105121091478 -949.6353542915972\n",
      "iter dG dW =  5 -4214.157112718938 -4166.997283452657\n",
      "iter dG dW =  4 -627.0594609404858 -621.6725056842164\n",
      "iter dG dW =  5 -2470.724347201103 -2447.5142264077012\n",
      "iter dG dW =  5 -5530.562074387831 -5461.774831684406\n",
      "iter dG dW =  5 -3599.9696061361497 -3561.9015783841683\n",
      "iter dG dW =  5 -3017.9855458147395 -2987.889112153163\n",
      "iter dG dW =  5 -393.4948950574768 -390.7611025942468\n",
      "iter dG dW =  5 -1070.5590924929375 -1062.0805995682772\n",
      "iter dG dW =  5 -4858.344420063751 -4800.949493787615\n",
      "iter dG dW =  5 -1492.8760858858248 -1480.398703455506\n",
      "iter dG dW =  5 -1961.148743832407 -1943.7893097791384\n",
      "iter dG dW =  6 -4592.870689624236 -4546.829680701056\n",
      "iter dG dW =  6 -2698.1832679319928 -2675.541389730628\n",
      "iter dG dW =  5 -700.6670184571102 -695.4047349527933\n",
      "iter dG dW =  6 -3926.386865462279 -3889.233050698002\n",
      "iter dG dW =  6 -6017.5131498668625 -5950.309787377668\n",
      "iter dG dW =  6 -3293.842945796677 -3264.4768745084975\n",
      "iter dG dW =  6 -430.4721581717653 -427.81806502956226\n",
      "iter dG dW =  6 -1170.7101090011151 -1162.4453949132428\n",
      "iter dG dW =  6 -2142.8322967469744 -2125.9011407884273\n",
      "iter dG dW =  6 -5290.693790965037 -5234.6415570508825\n",
      "iter dG dW =  6 -1631.9228462377234 -1619.7558056520313\n",
      "iter dG dW =  7 -4928.857463297897 -4883.909968630487\n",
      "iter dG dW =  7 -2902.2604429858634 -2880.187074581102\n",
      "iter dG dW =  6 -766.4247053803299 -761.299867113581\n",
      "iter dG dW =  7 -6445.587759517663 -6379.9052639201245\n",
      "iter dG dW =  7 -1261.2456293688815 -1253.1995550257352\n",
      "iter dG dW =  7 -5672.571710054492 -5617.82052952119\n",
      "iter dG dW = iter dG dW =  7 -4217.166702415011 -4180.91374468112\n",
      " 7 -463.9445042521169 -461.37317283827565\n",
      "iter dG dW =  7 -3540.5069362371264 -3511.86615623402\n",
      "iter dG dW =  7 -2306.3273646318307 -2289.8278151010236\n",
      "iter dG dW =  7 -1757.3679442753185 -1745.515943100205\n",
      "iter dG dW =  8 -5229.313805283671 -5185.414230668993\n",
      "iter dG dW =  8 -3086.9557699754264 -3065.4380171735916\n",
      "iter dG dW =  7 -825.9448238084292 -820.9616391518166\n",
      "iter dG dW =  8 -1343.8339367732165 -1336.0046901595967\n",
      "iter dG dW =  8 -6824.680945967135 -6760.432257134385\n",
      "iter dG dW =  8 -494.50681857248105 -492.0181801015671\n",
      "iter dG dW =  8 -6012.460586872429 -5958.946425027864\n",
      "iter dG dW =  8 -3762.940774135854 -3735.0046760669984\n",
      "iter dG dW =  8 -2454.7650208611853 -2438.6895322558976\n",
      "iter dG dW =  8 -4478.335455582006 -4442.952050793009\n",
      "iter dG dW =  9 -5499.60773066428 -5456.701339748701\n",
      "iter dG dW =  8 -1871.5652757732475 -1860.0243071966725\n",
      "iter dG dW =  9 -3255.210730402359 -3234.2291517635585\n",
      "iter dG dW =  9 -1419.6872081296146 -1412.069432387363\n",
      "iter dG dW =  9 -7162.247567761632 -7099.33646893222\n",
      "iter dG dW =  8 -880.3055486756754 -875.4634229869749\n",
      "iter dG dW =  9 -522.5904452572307 -520.1826879284049\n",
      "iter dG dW =  9 -6316.719240675707 -6264.368614436091\n",
      "iter dG dW =  9 -3964.8112233609195 -3937.5516523133683\n",
      "iter dG dW =  10 -5743.915406182057 -5701.944136870735\n",
      "iter dG dW =  9 -1976.2312099544415 -1964.9927463831598\n",
      "iter dG dW =  9 -4714.366489775675 -4679.81288319867\n",
      "iter dG dW =  9 -2590.43769666475 -2574.7731963151437\n",
      "iter dG dW =  10 -3409.291183679149 -3388.8233077961236\n",
      "iter dG dW =  10 -1489.7330513238 -1482.3195914839296\n",
      "iter dG dW =  10 -7464.12982045941 -7402.458596917548\n",
      "iter dG dW =  9 -930.288459839794 -925.5841861345242\n",
      "iter dG dW =  11 -5965.582303848409 -5924.487887368927\n",
      "iter dG dW =  10 -6590.3127492690855 -6539.049447513065\n",
      "iter dG dW =  10 -548.5266066744617 -546.1969924437459\n",
      "iter dG dW =  10 -4928.727712444311 -4894.960676494455\n",
      "iter dG dW =  10 -4148.951476481684 -4122.336945284254\n",
      "iter dG dW =  10 -2072.681234531826 -2061.7345172424903\n",
      "iter dG dW =  11 -3550.9990780494923 -3531.0213169730496\n",
      "iter dG dW =  10 -2715.1064496669555 -2699.837216650509\n",
      "iter dG dW =  11 -1554.7068750999015 -1547.4897617082631\n",
      "iter dG dW =  12 -6167.347340275403 -6127.072986299168\n",
      "iter dG dW =  11 -7735.034042097382 -7674.507475153229\n",
      "iter dG dW =  10 -976.4916350618248 -971.920647168264\n",
      "iter dG dW = iter dG dW =  11 -6837.229825022549 -6786.978477376894\n",
      " 11 -572.5796372355134 -570.3249787254229\n",
      "iter dG dW = iter dG dW =  12 -3681.801099761047 -3662.289803148369\n",
      "iter dG dW =  11 -4317.61943770179 -4291.617406589929\n",
      " 11 -2161.9585525120174 -2151.2918624028134\n",
      "iter dG dW =  11 -5124.189686065711 -5091.165203180484\n",
      "iter dG dW =  11 -2830.169413951863 -2815.2786584369933\n",
      "iter dG dW =  12 -1615.2065719967434 -1608.1775786246583\n",
      "iter dG dW =  13 -6351.491178180105 -6311.982467088332\n",
      "iter dG dW =  12 -7978.830113321113 -7919.357521156618\n",
      "iter dG dW =  12 -594.9661544323963 -592.7830928172845\n",
      "iter dG dW =  13 -3802.912514802295 -3783.8445490367535\n",
      "iter dG dW =  11 -1019.3898969261645 -1014.9469873531431\n",
      "iter dG dW =  12 -2244.9109197704993 -2234.5122889952977\n",
      "iter dG dW =  12 -7060.743396815736 -7011.43136357483\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [   -9.38266985 -1890.51292404 -2678.92967098 -3281.22745161\n",
      " -3782.41905609 -4214.15711272 -4592.87068962 -4928.8574633\n",
      " -5229.31380528 -5499.60773066 -5743.91540618 -5965.58230385\n",
      " -6167.34734028 -6351.49117818]\n",
      "dW =  [-2.49898941e+00 -1.84045324e+03 -2.62896806e+03 -3.23197070e+03\n",
      " -3.73415766e+03 -4.16699728e+03 -4.54682968e+03 -4.88390997e+03\n",
      " -5.18541423e+03 -5.45670134e+03 -5.70194414e+03 -5.92448789e+03\n",
      " -6.12707299e+03 -6.31198247e+03]\n",
      "iter dG dW =  12 -4472.655876533268 -4447.234003331199\n",
      "iter dG dW =  12 -5303.015623979146 -5270.690350506616\n",
      "iter dG dW =  13 -1671.7274231881408 -1664.8783816392247\n",
      "iter dG dW =  12 -2936.7633261151454 -2922.234065339082\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [   -5.00784211 -1104.26942514 -1565.47668065 -1918.56912443\n",
      " -2214.04161799 -2470.7243472  -2698.18326793 -2902.26044299\n",
      " -3086.95576998 -3255.2107304  -3409.29118368 -3550.99907805\n",
      " -3681.80109976 -3802.9125148 ]\n",
      "dW =  [-1.68427839e+00 -1.07975258e+03 -1.54096361e+03 -1.89435163e+03\n",
      " -2.19028943e+03 -2.44751423e+03 -2.67554139e+03 -2.88018707e+03\n",
      " -3.06543802e+03 -3.23422915e+03 -3.38882331e+03 -3.53102132e+03\n",
      " -3.66228980e+03 -3.78384455e+03]\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [   -1.97382334  -477.10847202  -676.77311416  -829.81085191\n",
      "  -958.31051211 -1070.55909249 -1170.710109   -1261.24562937\n",
      " -1343.83393677 -1419.68720813 -1489.73305132 -1554.7068751\n",
      " -1615.206572   -1671.72742319]\n",
      "dW =  [-8.10252129e-01 -4.68202305e+02 -6.67853888e+02 -8.20977770e+02\n",
      " -9.49635354e+02 -1.06208060e+03 -1.16244539e+03 -1.25319956e+03\n",
      " -1.33600469e+03 -1.41206943e+03 -1.48231959e+03 -1.54748976e+03\n",
      " -1.60817758e+03 -1.66487838e+03]\n",
      "iter dG dW =  13 -8198.751273427784 -8140.247474153005\n",
      "iter dG dW =  12 -1059.3700998046843 -1055.0498322046687\n",
      "iter dG dW =  13 -7263.5837631141485 -7215.142095707869\n",
      "iter dG dW =  13 -2322.2400623819694 -2312.097671947581\n",
      "iter dG dW =  13 -4615.588079906771 -4590.714902666369\n",
      "iter dG dW =  13 -615.867062016461 -613.7522279349525\n",
      "iter dG dW =  13 -5467.086535112088 -5435.418592797224\n",
      "iter dG dW =  13 -3035.82927488095 -3021.644817812491\n",
      "time = time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [  -13.02459722 -2488.79102823 -3525.79348766 -4316.28653336\n",
      " -4970.77240089 -5530.56207439 -6017.51314987 -6445.58775952\n",
      " -6824.68094597 -7162.24756776 -7464.12982046 -7735.0340421\n",
      " -7978.83011332 -8198.75127343]\n",
      "dW =  [-2.94925699e+00 -2.41558320e+03 -3.45281816e+03 -4.24442362e+03\n",
      " -4.90039243e+03 -5.46177483e+03 -5.95030979e+03 -6.37990526e+03\n",
      " -6.76043226e+03 -7.09933647e+03 -7.40245860e+03 -7.67450748e+03\n",
      " -7.91935752e+03 -8.14024747e+03]\n",
      " [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [   -6.31907219 -1350.389123   -1914.09005611 -2345.39475317\n",
      " -2705.73405573 -3017.98554581 -3293.8429458  -3540.50693624\n",
      " -3762.94077414 -3964.81122336 -4148.95147648 -4317.6194377\n",
      " -4472.65587653 -4615.58807991]\n",
      "dW =  [-1.97083153e+00 -1.31854188e+03 -1.88226662e+03 -2.31397838e+03\n",
      " -2.67493338e+03 -2.98788911e+03 -3.26447687e+03 -3.51186616e+03\n",
      " -3.73500468e+03 -3.93755165e+03 -4.12233695e+03 -4.29161741e+03\n",
      " -4.44723400e+03 -4.59071490e+03]\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [   -2.83378807  -665.90134267  -944.36926525 -1157.74405434\n",
      " -1336.74566492 -1492.87608589 -1631.92284624 -1757.36794428\n",
      " -1871.56527577 -1976.23120995 -2072.68123453 -2161.95855251\n",
      " -2244.91091977 -2322.24006238]\n",
      "dW =  [-1.09486502e+00 -6.52771965e+02 -9.31227156e+02 -1.14473939e+03\n",
      " -1.32397904e+03 -1.48039870e+03 -1.61975581e+03 -1.74551594e+03\n",
      " -1.86002431e+03 -1.96499275e+03 -2.06173452e+03 -2.15129186e+03\n",
      " -2.23451229e+03 -2.31209767e+03]\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [  -11.13208758 -2182.7433267  -3092.62558214 -3787.02068682\n",
      " -4363.47035266 -4858.34442006 -5290.69379097 -5672.57171005\n",
      " -6012.46058687 -6316.71924068 -6590.31274927 -6837.22982502\n",
      " -7060.74339682 -7263.58376311]\n",
      "dW =  [-2.73456818e+00 -2.12173585e+03 -3.03177480e+03 -3.72706421e+03\n",
      " -4.30473952e+03 -4.80094949e+03 -5.23464156e+03 -5.61782053e+03\n",
      " -5.95894643e+03 -6.26436861e+03 -6.53904945e+03 -6.78697848e+03\n",
      " -7.01143136e+03 -7.21514210e+03]\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [  -0.71502569 -175.1908783  -248.56763403 -304.8293532  -352.11940041\n",
      " -393.49489506 -430.47215817 -463.94450425 -494.50681857 -522.59044526\n",
      " -548.52660667 -572.57963724 -594.96615443 -615.86706202]\n",
      "dW =  [-3.23206274e-01 -1.72312562e+02 -2.45682511e+02 -3.01970241e+02\n",
      " -3.49314380e+02 -3.90761103e+02 -4.27818065e+02 -4.61373173e+02\n",
      " -4.92018180e+02 -5.20182688e+02 -5.46196992e+02 -5.70324979e+02\n",
      " -5.92783093e+02 -6.13752228e+02]\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [   -7.77783756 -1612.79179317 -2285.69900748 -2800.19284995\n",
      " -3229.23149701 -3599.96960614 -3926.38686546 -4217.16670242\n",
      " -4478.33545558 -4714.36648978 -4928.72771244 -5124.18968607\n",
      " -5303.01562398 -5467.08653511]\n",
      "dW =  [-2.24365487e+00 -1.57244339e+03 -2.24540511e+03 -2.76044188e+03\n",
      " -3.19027267e+03 -3.56190158e+03 -3.88923305e+03 -4.18091374e+03\n",
      " -4.44295205e+03 -4.67981288e+03 -4.89496068e+03 -5.09116520e+03\n",
      " -5.27069035e+03 -5.43541859e+03]\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [   -3.84560131  -875.61096508 -1241.53308196 -1521.81167269\n",
      " -1756.67375126 -1961.14874383 -2142.83229675 -2306.32736463\n",
      " -2454.76502086 -2590.43769666 -2715.10644967 -2830.16941395\n",
      " -2936.76332612 -3035.82927488]\n",
      "dW =  [-1.38965185e+00 -8.57308930e+02 -1.22322332e+03 -1.50370835e+03\n",
      " -1.73891034e+03 -1.94378931e+03 -2.12590114e+03 -2.28982782e+03\n",
      " -2.43868953e+03 -2.57477320e+03 -2.69983722e+03 -2.81527866e+03\n",
      " -2.92223407e+03 -3.02164482e+03]\n",
      "iter dG dW =  13 -1096.7534651357169 -1092.550410454472\n",
      "time =  [    0.   800.  1600.  2400.  3200.  4000.  4800.  5600.  6400.  7200.\n",
      "  8000.  8800.  9600. 10400.]\n",
      "dG =  [   -1.26710897  -312.03016753  -442.70499385  -542.88602422\n",
      "  -627.05946094  -700.66701846  -766.42470538  -825.94482381\n",
      "  -880.30554868  -930.28845984  -976.49163506 -1019.38989693\n",
      " -1059.3700998  -1096.75346514]\n",
      "dW =  [-5.48358968e-01 -3.06506033e+02 -4.37170607e+02 -5.37401622e+02\n",
      " -6.21672506e+02 -6.95404735e+02 -7.61299867e+02 -8.20961639e+02\n",
      " -8.75463423e+02 -9.25584186e+02 -9.71920647e+02 -1.01494699e+03\n",
      " -1.05504983e+03 -1.09255041e+03]\n",
      "\n",
      "- \n",
      "- <think>\n",
      "Okay, the user asked to run the Work_of_Diffusion tool with mesh number 401 and aging temperature 1600 K, varying the interaction parameter from -25000 to 25000 in increments of 5000. I generated the tool calls for each of those interaction values. Now, the responses came back as 1 for all of them, which means each simulation was successful.\n",
      "\n",
      "I need to summarize these results. Since all runs succeeded, I should mention that the diffusion simulations completed without errors. The user might be interested in the outcomes, like how the interaction parameter affects the diffusion process. Maybe they want to analyze the data from each run, such as concentration profiles or diffusion rates. \n",
      "\n",
      "I should check if the user needs further analysis or if they want the results saved. The tool mentioned saving to hard disk, so maybe the files are generated. I should ask if they need help with the next steps, like plotting the results or interpreting the data. Keeping the response helpful and guiding them towards next actions would be good.\n",
      "</think>\n",
      "\n",
      "All diffusion simulations were successfully completed with the specified parameters (mesh number=401, aging temperature=1600 K) for interaction parameters ranging from -25000 to 25000 in 5000 increments. The calculation status code `1` indicates successful execution for all 11 runs.\n",
      "\n",
      "Would you like me to:\n",
      "1. Analyze the output files generated by these simulations?\n",
      "2. Plot the diffusion profiles for different interaction parameters?\n",
      "3. Perform additional calculations with modified parameters?\n"
     ]
    }
   ],
   "source": [
    "# Run the agent\n",
    "messages = {\n",
    "    \"messages\": [{\"role\": \"user\", \"content\": \"\"\"Fix the mesh number to 401 and the aging temperature to 1600 K. Under these conditions, \n",
    "    run the “Work_of_Diffusion” tool repeatedly with the interaction parameter ranging from -25000 to 25000 in increments of 5000.\"\"\"}]\n",
    "}\n",
    "answer = agent.invoke(messages)\n",
    "messages_list = answer[\"messages\"] # Get the messages list\n",
    "filtered_messages = [msg.content for msg in messages_list if isinstance(msg, AIMessage)] # Extract assistant messages only.\n",
    "formatted_output = \"\\n- \" + \"\\n- \".join(filtered_messages) # Formatted and output\n",
    "print(formatted_output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fedabc6f-2c7d-45da-a875-7c61e6c4bb2b",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.12.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
