{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Basic Magnetostatic Simulation of a Flux Line\n", "\n", "### Qiskit Metal Design" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%reload_ext autoreload\n", "%autoreload 2\n", "\n", "import qiskit_metal as metal\n", "from qiskit_metal import designs, draw\n", "from qiskit_metal import MetalGUI, Dict, Headings\n", "import pyEPR as epr\n", "from qiskit_metal.qlibrary.terminations.open_to_ground import OpenToGround\n", "from qiskit_metal.qlibrary.tlines.meandered import RouteMeander\n", "from qiskit_metal.qlibrary.qubits.transmon_pocket import TransmonPocket\n", "#\n", "from SQDMetal.Comps.Xmon import Xmon\n", "from SQDMetal.Comps.Capacitors import CapacitorGapPinStretch\n", "from SQDMetal.Comps.Wires import WireTaperPinStretch, WirePinStretch\n", "from SQDMetal.Comps.FluxLines import FluxLineTPin\n", "from SQDMetal.Comps.Junctions import JunctionDolanPinStretch\n", "\n", "design = designs.DesignPlanar({}, True)\n", "design.chips.main.size['size_x'] = '400um'\n", "design.chips.main.size['size_y'] = '400um'\n", "\n", "Xmon(design, 'leXmon', options=Dict(pos_x=0, pos_y=0,\n", " vBar_width='24um', hBar_width='24um', vBar_gap='16um', hBar_gap='16um',\n", " cross_width='144um', cross_height='144um',\n", " gap_up='24um', gap_left='0um', gap_right='24um'))\n", "\n", "FluxLineTPin(design, 'flux_line_T', options=Dict(ref_comp='leXmon', ref_pin='right',\n", " width=f'100um',\n", " trace_width=f'8um',\n", " trace_gap=f'12um',pin_dist='24um'))\n", "WireTaperPinStretch(design, 'flux_ln_taper', options=Dict(pin_inputs={'start_pin': {'component': 'flux_line_T', 'pin': 'a'}},\n", " trace_width=f'20um', trace_gap=f'28um', taper_length='50um'))\n", "WirePinStretch(design, 'flux_ln_wire', options=Dict(pin_inputs=Dict(start_pin=Dict(component=f'flux_ln_taper',pin='a')),\n", " dist_extend='54um', trace_width=f'20um', trace_gap=f'28um'))\n", "CapacitorGapPinStretch(design, f'capProng', options=Dict(cpw_width=f'20um',\n", " pin_inputs=Dict(start_pin=Dict(component=f'leXmon',pin='left')),\n", " dist_extend='120um',\n", " cap_width=f'50um',\n", " cap_gap='3um',\n", " gnd_width='1um',\n", " len_diag='0um', len_flat=f'50um',\n", " side_gap=f'10um', init_pad='10um'\n", " ))\n", "\n", "############################\n", "JunctionDolanPinStretch(design, 'junction', options=Dict(pin_inputs=Dict(start_pin=Dict(component=f'flux_line_T',pin='t')),\n", " dist_extend='25um',\n", " finger_width='0.4um', t_pad_size='0.385um',\n", " squid_width='5.4um', prong_width='0.9um',\n", " layer=2));\n", "############################\n", "\n", "\n", "# gui = MetalGUI(design)\n", "# gui.rebuild()\n", "# gui.autoscale()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The idea is to run this through a shadow-evaporated Josephson junction (notice that `'junction'` is in layer 2). So let's quickly do the PVD simulation to ensure that there is an enclosed loop:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAC3CAYAAADq8q9iAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPexJREFUeJzt3Xl4TNf/wPH3JM2+LyJLs0gUoZZQVNRWaq1StScE3bR2pShaqkTVElu1imi1liJoE/sSWxXlRy2hQjRKIlqRRUgic39/+JqaJmFmZBJJPq/nuc8zc++5937u6a355Nxzz1EpiqIghBBCCFHKmZR0AEIIIYQQRUGSGiGEEEKUCZLUCCGEEKJMkKRGCCGEEGWCJDVCCCGEKBMkqRFCCCFEmSBJjRBCCCHKBElqhBBCCFEmSFIjhBBCiDJBkhohhBBClAnlMqnZt28fHTt2xNPTE5VKxcaNG41+zqtXrxIaGoqLiwtWVlbUrFmT3377zejnFUIIIcqLcpnU3L59m9q1a7Nw4cJiOV9qaiqNGzfGzMyMLVu2cPbsWWbNmoWTk1OxnF8IIYQoD1TlfUJLlUrFhg0b6Ny5s2ZddnY248ePZ9WqVdy6dYvnn3+ezz//nObNmxt0jrFjx3Lw4EH2799fNEELIYQQIp9y2VLzOIMHD+bQoUOsXr2a33//nW7dutG2bVsuXLhg0PF++uknXnjhBbp164abmxtBQUF88803RRy1EEIIUb5JS81/WmoSExPx9/cnMTERT09PTblWrVrRoEEDpk2bpvc5LC0tARg5ciTdunXj6NGjDBs2jK+++oqwsLAiuQ4hhBCivHumpAN42pw6dYq8vDyqVKmitT47OxsXFxcAzp07R2Bg4COPM2bMGKZPnw6AWq3mhRde0CREQUFBnD59WpIaIYQQoghJUvMfmZmZmJqacuzYMUxNTbW22draAuDv709cXNwjj/MgAQLw8PCgevXqWtsDAwNZv359EUUthBBCCElq/iMoKIi8vDxSUlJo0qRJgWXMzc2pVq2azsds3Lgx58+f11r3xx9/4Ovr+0SxCiGEEOJf5TKpyczMJD4+XvM9ISGBEydO4OzsTJUqVQgJCaFv377MmjWLoKAgbty4wa5du6hVqxYdOnTQ+3wjRowgODiYadOm0b17d44cOcLixYtZvHhxUV6WEEIIUa6Vy47CsbGxtGjRIt/6sLAwli9fTm5uLp999hnfffcdV69exdXVlRdffJHJkydTs2ZNg84ZHR3NuHHjuHDhApUqVWLkyJG8/fbbT3opQgghhPifcpnUCCGEEKLskXFqhBBCCFEmlKs+NWq1mmvXrmFnZ4dKpSrpcIQQQgihA0VRyMjIwNPTExOTwttjylVSc+3aNby9vUs6DCGEEEIY4MqVKzz77LOFbi9XSY2dnR1wv1Ls7e1LOBohhBBC6CI9PR1vb2/N73hhylVS8+CRk729vSQ1QgghRCnzuK4j0lFYCCGEEGWCJDVCCCGEKBPK1eMnIYR+rh07pvU9Lu6G5nOm5c3iDkfDtkb1AtcHBlbQfPbEq7jCAbTrKgkPrW23rFOAko1PiPJAkhohRJl0jauAJA9FJS8vj9zc3JIOQ5RRZmZm+SaRNsQTJzXZ2dlYWFg8cSBCCCGePoqikJyczK1bt0o6FFHGOTo64u7u/kTjyOmd1GzZsoXVq1ezf/9+rly5glqtxsbGhqCgIFq3bk3//v3x9PQ0OCAhhBBPjwcJjZubG9bW1jJwqShyiqKQlZVFSsr9x7QeHh6P2aNwOic1GzZsYMyYMWRkZNC+fXvGjBmDp6cnVlZW3Lx5k9OnT7Nz506mTJlCv379mDJlChUqVHj8gYUQQjyV8vLyNAmNi4tLSYcjyjArKysAUlJScHNzM/hRlM5JzYwZM5gzZw7t2rUrcIji7t27A3D16lXmz5/P999/z4gRIwwKSgghHiXzzNkC1x89Y/xzF9ZJ2ZUUzedb1vf/QXbMcjN+QEb0oA+NtbV1CUciyoMH91lubq7xk5pDhw7pVM7Ly4vp06cbFIwQQoinjzxyEsWhKO4zeftJCCGE0eXm5pGenk1enoKpqQp7ewvMzJ78bRchHmZQUqMoCuvWrWPPnj2kpKSgVqu1tkdFRRVJcEIIIUq3rKxckpIySEvLRlEUzXqVSoWDgwUeHnZYW5uVYISiLDFoROHhw4fTp08fEhISsLW1xcHBQWsxhvDwcOrXr4+dnR1ubm507tyZ8+fPG+VcQgghntytW3c5d+5vbt26q5XQwP0/jh/eLp5u/fr1o3PnziUdxmMZ1FKzYsUKoqKiaN++fVHHU6i9e/cyaNAg6tevz7179/joo49o3bo1Z8+excbGptjiEEII8XhZWblcupSaL5n5L0VRuHQplWrVXIu0xaZfv37cunWLjRs3FtkxjSUqKopFixZx4sQJsrOzqVGjBpMmTaJNmzaF7hMbG0uLFi1wdHQkKSkJS0tLzbajR4/SoEEDgMfWf1ljUEuNg4MD/v7+RR3LI23dupV+/fpRo0YNateuzfLly0lMTOTYf4Zxf1h2djbp6elaixBCCONLSsrQ+QdVURSSkjKMHFHJy8nJKXD9vn37eOWVV9i8eTPHjh2jRYsWdOzYkf/7v/977DHt7OzYsGGD1rqlS5fi4+NTJDGXNga11EyaNInJkyezbNkyzbvlxS0tLQ0AZ2fnQsuEh4czefLk4gpJCFFMdJn76YHimibh2rE8zed7pfxV7ieVm5tHWlq2XvukpWWTm5tXbJ2HZ8+eTWRkJJcuXcLZ2ZmOHTsyY8YMbG1tuX37Nh4eHixbtoyuXbtq9tm4cSMhISEkJydjZ2fHlStX+OCDD9i+fTsmJiY0adKEuXPn4ufnB/zbWlS/fn0WLlyIhYUFCQkJ+WKJiIjQ+j5t2jQ2bdrEzz//TFBQ0COvIywsjGXLltGrVy8A7ty5w+rVqxk6dChTpkzRlPvnn38YPHgw+/btIzU1lYCAAD766CPNfgDr1q1j8uTJxMfHY21tTVBQEJs2bSrwacjRo0dp3749o0aNYsyYMY+t7+JiUEtN9+7dSU1Nxc3NjZo1a1K3bl2txdjUajXDhw+ncePGPP/884WWGzduHGlpaZrlypUrRo9NCCHKu/T0bL0feyiKQnq6fonQkzAxMWHevHmcOXOGb7/9lt27d/Phhx8CYGNjQ8+ePYmMjNTaJzIykq5du2JnZ0dubi5t2rTBzs6O/fv3c/DgQWxtbWnbtq1Wi8yuXbs4f/48O3bsIDo6WqfY1Go1GRkZj/yj/YE+ffqwf/9+EhMTAVi/fj1+fn75fovv3r1LvXr1iImJ4fTp07zzzjv06dOHI0eOAJCUlESvXr0YMGAAcXFxxMbG0qVLlwL/O+7evZtXXnmFqVOnPlUJDRjYUhMWFsaxY8cIDQ2lYsWKxT6GwaBBgzh9+jQHDhx4ZDkLCwuZl0oIIYpZXp5h/TgM3c8Qw4cP13z28/Pjs88+Y+DAgXz55ZcAvPXWWwQHB5OUlISHhwcpKSls3ryZnTt3ArBmzRrUajVLlizR/AZGRkbi6OhIbGwsrVu3Bu4nSEuWLMHc3Fzn2GbOnElmZqZmUNtHcXNzo127dixfvpyPP/6YZcuWMWDAgHzlvLy8GDVqlOb7kCFD2LZtGz/++CMNGjQgKSmJe/fu0aVLF3x9fQGoWbNmvuNs2LCBvn37smTJEnr06KHzNRUXg5KamJgYtm3bxksvvVTU8TzW4MGDiY6OZt++fTz77LPFfn4hROkgs3OXHFNTw/7QNXQ/Q+zcuZPw8HDOnTtHeno69+7d4+7du2RlZWFtbU2DBg2oUaMG3377LWPHjuX777/H19eXpk2bAnDy5Eni4+Oxs7PTOu7du3e5ePGi5nvNmjX1SmhWrlzJ5MmT2bRpE25uuj3GHDBgAMOGDSM0NJRDhw6xdu1a9u/fr1UmLy+PadOm8eOPP3L16lVycnLIzs7WjOJbu3ZtWrZsSc2aNWnTpg2tW7ema9euODk5aY5x+PBhoqOjWbdu3VP7JpRBSY23tzf29vZFHcsjKYrCkCFD2LBhA7GxsVSqVKlYzy+E0PY09msRTwd7ewtUKpVej6BUqvsD8hWHy5cv8+qrr/Lee+8xdepUnJ2dOXDgAG+++SY5OTmaH/q33nqLhQsXMnbsWCIjI+nfv7+mVSYzM5N69erxww8/5Dv+w/Me6vN27urVq3nrrbdYu3YtrVq10nm/du3a8c477/Dmm2/SsWPHAufp+uKLL5g7dy4RERHUrFkTGxsbhg8frnlUZmpqyo4dO/jll1/Yvn078+fPZ/z48Rw+fFjzexsQEICLiwvLli2jQ4cOmJk9feMLGdSnZtasWXz44Ydcvny5iMMp3KBBg/j+++9ZuXIldnZ2JCcnk5yczJ07d4otBiGEEI9nZmaKg4N+CYqDQ/GNMHzs2DHUajWzZs3ixRdfpEqVKly7di1fudDQUP7880/mzZvH2bNnCQsL02yrW7cuFy5cwM3NjcqVK2sthozXtmrVKvr378+qVavo0KGDXvs+88wz9O3bl9jY2AIfPQEcPHiQTp06ERoaSu3atfH39+ePP/7QKqNSqWjcuDGTJ0/m//7v/zA3N9d6s8rV1ZXdu3cTHx9P9+7dNXODPU0MSmpCQ0PZs2cPAQEB2NnZ4ezsrLUYw6JFi0hLS6N58+Z4eHholjVr1hjlfEIIIQzn4WGnc39LExMVHh52jy+op7S0NE6cOKG1XLlyhcqVK5Obm8v8+fO5dOkSK1as4Kuvvsq3v5OTE126dGH06NG0bt1aq8tDSEgIrq6udOrUif3795OQkEBsbCxDhw7lr7/+0ivOlStX0rdvX2bNmkXDhg01f7Q/eMtXF1OmTOHGjRuFjm3z3HPPaVpi4uLiePfdd7l+/bpm++HDh5k2bRq//fYbiYmJREVFcePGDQIDA7WO4+bmxu7duzl37hy9evXi3r17el2rsRn0+Om/r58Vh/I2gJAQQpRm1tZm+Ps7PXYAPpVKRaVKTkaZKiE2NjbfK9FvvvkmS5YsYfbs2Xz++eeMGzeOpk2bEh4eTt++ffMd480332TlypX5WkCsra3Zt28fY8aMoUuXLmRkZODl5UXLli317p6xePFi7t27x6BBgxg0aJBmfVhYGMuXL9fpGObm5ri6uha6fcKECVy6dIk2bdpgbW3NO++8Q+fOnTWJk729Pfv27SMiIoL09HR8fX2ZNWsW7dq1y3csd3d3du/eTfPmzQkJCWHlypUGz6pd1FRKOcoW0tPTcXBwIC0trdj7BAlRGl37z+CWcXE3/v1Sz73AfR7uU1Oe+tI8XFdJeGhtu2WdApS+url79y4JCQlUqlRJa8RafZT2uZ9WrFjBiBEjuHbtml4dfoX+HnW/6fr7/USzdKekpBQ4oWWtWrWe5LBCCCHKCGtrMwICnEvdLN1ZWVkkJSUxffp03n33XUloSgmDkppjx44RFhZGXFxcvmZFlUpFXl5eIXsKIYQoj8zMTHFxsS7pMHQ2Y8YMpk6dStOmTRk3blxJhyN0ZFBSM2DAAKpUqcLSpUtLZPA9IYQQwpgmTZrEpEmTSjoMoSeDkppLly6xfv16KleuXNTxCCGEEEIYxKBXulu2bMnJkyeLOhYhhBBCCIMZ1FKzZMkSwsLCOH36NM8//3y+UQVfe+21IglOCCGEEEJXBiU1hw4d4uDBg2zZsiXfNukoLIQQj3eNq0DpeLVbiNLCoMdPQ4YMITQ0lKSkJNRqtdYiCY0QQoj/yiOPLLLIJJMssshDfitE0TOopeaff/5hxIgRVKxYsajjEUIIUYbkkEMmGdzlbr5tllhiix3myBgwomgYlNR06dJFM/eTuO9RI69mWt4s7nCEMI6HBvm0peARhQXcivtd89kxsBaZZ84CcPRMSUVkmGfMzHF/1o/0W6ncNWDwubuqu6SZFD5/UQZp3OA6DmoHLBXDRiwWxcfEyqrA9ZZW/6YSJZ2gGvT4qUqVKowbN45+/foxa9Ys5s2bp7UIIYQo33LJfWRC87A0kzRyKdoZn98fNJiQ0D5Fekxj+fnnaF7v8gaVq1TFx9eP1m3asmv3br2Pc+r0aXqFhPBc1Wq4e3pRq04QA958kxs37v+RfeDAAZxcXPWaKPNJ3L17l0GDBuHi4oKtrS1vvPGG1iSaxmDw20+2trbs3buXvXv3am1TqVQMHTq0SIITQghROt02ua13eUe1o3GCeUrk5OQUON3CL4cO0bx5MyZOGI+DgwM/rFxFr94h7Ny+Tedph/7++286v96FNq1bs37tjzg4OJCYmMiWrVvJysoq6kvRyYgRI4iJiWHt2rU4ODgwePBgunTpwsGDB412ToNaahISEgpdLl26VNQxCiGEKEXyyCNbla3XPtmq7GLtPLzwyy8JfqkJXt4+1KhZiw9GjSYzMxOA27dv4+Prx6afftLaJyZmM17ePmRkZADw19Wr9B/wJr6V/KkUUJneIaEkJiZqyj9oLZo5azaB1WtQv+GLBcYSPm0qw4YOpW7dugQEBPDxxAkE+Puzdds2na/n8OEjpKenM29uBLVq1cLX15cmTZowbepUfH19SUxMpGOnzgD4+Qfg5OLK+4MGA6BWq5k9J4LaQXXx8HqWl5o207r2By0827ZsJbhBA9ycnGnZrDlnzxT+PDUtLY2lS5cye/ZsXn75ZerVq0dkZCS//PILv/76q87XpS+DkhohhBCiMDmqnGLdzxAmJiZ8Hj6NQwcPsGjhAvbv388nkyYDYGNjQ5cur/PDypVa+/ywciWvdeyInZ0dubm5dO3aDVtbWzbHRLN182ZsbG3o2q07OTn/Xse+ffuIj48nKmo9q1dpH68warWajMxMHB2ddL4eNzc37t27R3RMTL45GQG8vLz4bvlyAI4e/pVzZ88QHj4NgNlzIlizZg2zZ83k0MEDvD9wIO8OfC9fi8rE8eP5LDycPfv34erqSo+u3cjNLfix4bFjx8jNzaVVq1aaddWqVcPHx4dDhw7pfF360jmpmT59Onfu3NGp7OHDh4mJiTE4KCGEEKWXQv4fVWPuZ4j3Bg6kSZMm+Pj40LRpU8aP/4iNmzZptvcJ7cPu3XtITk4G4MaNG+zYuZPQkN4ARG3YgFqtZt7cCGpUr07VqlVYOH8+f129yoGHkgFrGxvmzY0gsFo1AqtV0ym2+QsWcPv2bV7v3Enn66lf/wVGjhjB2++8S8BzVejavQfz5s8nJSUFAFNTU5ycHAGoUKECFStWxMHenuzsbOZERDB//jxavvwyfn5+9O7di+7duhL57bda5xjz0ThebtmSGs8/z6JvFnMjJYWf/9Oa9UBycjLm5uY4Ojpqra9YsaKmTo1B56Tm7Nmz+Pj48P7777NlyxZNxyOAe/fu8fvvv/Pll18SHBxMjx49sLOzM0rAQgghnm4qDJvk2ND9DBEbu5dOnV+neo3n8fbxZeB773Pz5k1N/5N69epSrVo1Vq1eA8CPa9fi7e1NcHAwAKfPnOFSQgLevn486+PLsz6++Fd+jrt375KQkKA5T/XAwAL70RRm7bp1zPhiJpFLl1KhQgW9rmnihPGcjzvL7FkzCaxWlcjl39LgxUacOXu20H0uJSSQlZVFlze6aq7jWR9fVq/5kcsJl7XKNmjYUPPZ2dmZys89xx/nzusVo7Hp3FH4u+++4+TJkyxYsIDevXuTnp6OqakpFhYWmpsgKCiIt956i379+mFpKa/nCSFEeWSuGPZar6H76SsxMZGevXszoH8/Jowfj5OTI78ePsyQocO0Hqf0DQ1lydKljBg+jB9WrqJ3r16oVPcTr9uZt6lTuzaLv/4q3/FdXF01n62trXWOa31UFMOGjyBy2VKaN29m0LU5OzvTuVMnOnfqxMQJE2jWvAULFixk0ZcLCyx/O/N+h+41q1bi4eGhtc3cwsKgGADc3d3Jycnh1q1bWq01169fx93deMNB6PX2U+3atfnmm2/4+uuv+f333/nzzz+5c+cOrq6u1KlTB9eH/kMKIYQon0wxxUKx0KuzsIVigSmmRozqXydOnEStVvPZlCmYmNx/YLFx46Z85bp378Ynkyfz9deLOX/+PL169tRsq127Fhs2bsTVtQL29k/+ZGLd+vUMGTqMpd8spk3r1k98PABzc3P8KvlpGh7M/tdi9PDI/1WrVsHCwoIrf12lcePGjzze0SNH8Pb2BiA1NZWL8fFUqVa1wLL16tXDzMyMXbt28cYbbwBw/vx5EhMTadSo0RNfW2EMeqXbxMSEOnXqUKdOnSIORwghRFlgo7Yh21S3pEaFChu1TZHHkJ6RzqlTp7TWOTk7U8m/Erm5uSz+5hvatmnDr4ePEPm/TrQPc3R05NVXO/DxpEm0aNECLy9PzbZuXbsyf8ECQvqEMm7sWLw8Pbly5Qo/R8cwdMgQrbKPs3bdOt4fNJjwadOoV6+eZiwXSysrHOztdTrG1m3biIraQJcur1M5IABFUdi6bRs7duxkwfz5AHg/641KpWLbtu288korLC0tsbOzY/CgQYyfMAFFrebFFxuSnp7O4cNHsLOzo1evfxO5GeHhODs74+bmxpRJk3FxceHVjh0LjMfBwYE333yTkSNH4uzsjL29PUOGDKFRo0a8+GLBb4EVBXn7SQghRJEzwwwHtYNOZe3V9phhVuQxHDhwkKbNW2gtM2bMoObzzzP1synMnTuP4JeasG7dOiZOnFjgMfqEhJCTk6PpIPyAtbU1MT//zLNez9I3rB8NGwUzZNhwsrPv6t2n9NvvvuPevXuM/vBDqlWvoVnGjftIU2blylU4uRT+NKRa1apYW1sxceLHNG3eglfatGXjxk3Mi4igZ4/uAHh6ejBu7BgmT/mUKtUC+XDMWADGfzSO0aM+YE5EBA0bBdO1ew+279iBj6+P1jkmfTqFsaNH06zxS1y/fp3V69Y+sr/QnDlzePXVV3njjTdo2rQp7u7uREVF6VU3+lIpBb37VUalp6fj4OBAWloa9jpmv7qSaRJEeWNbo3qB6wMD/+3cWJ5moH7434CH//93DKzFXwmxJRDRk3swTYK3l5denV0flksut01uF/goykKxwEZtY5SEpqisXvMj4ydMIO7MaYProCiET5/OwV9+IbqQt42M6cCBA3Ts1Jk/r13N9zYTFN00CQ86WVeqVClfv1xdf78NevwkhBBC6MIMMxzVjuSRR44qBwUFFSrMFfNi60NjiKysLK5fv87cuXPpFxZWogkNwM6du5jx+eclGkNpII+fhBBCGJ0pplgpVlgr1lgpVk91QgMwb/58GrzYCDc3N0YMH1bS4bBr5w7q1atb0mE89UpdUrNw4UL8/PywtLSkYcOGHDlypKRDEkIIUcaMHTOGG9eT2bRxA7a2tiUdTol66aWXSP3n7wIfPT1tDHr8dPv2baZPn86uXbtISUlBrVZrbTfW/E9r1qxh5MiRfPXVVzRs2JCIiAjatGnD+fPncXNzM8o5hRBCCFE6GJTUvPXWW+zdu5c+ffrg4eGhGYzI2GbPns3bb79N//79Afjqq6+IiYlh2bJljB07tlhiEEIIIcTTyaCkZsuWLcTExDx2oJ6ilJOTw7Fjxxg3bpxmnYmJCa1atSp0cqzs7Gyys//tcZ+enm70OIUQQghRMgzqU+Pk5ISzs3NRx/JIf//9N3l5eVSsWFFr/aMmxwoPD8fBwUGzPBgJUQghhBBlj0FJzZQpU/j44481Qy8/rcaNG0daWppmuXLlSkmHJIQQ5VJebi53bt4k68YN7ty8Sd5DcywJUVQMevw0a9YsLl68SMWKFfHz88PMTHvgpOPHjxdJcA9zdXXF1NRUM3z0A4+aHMvCwgKLJ5iQSwghxJPJzcri9vXr5KSn8/BYryqVCnN7e2wqVsRMj0kfhXgUg5Kazp07F3EYj2dubk69evXYtWuX5vxqtZpdu3YxePDgYo9HCCHEo2WnpZF2+TIFDVyvKArZaWnkpKfj4OeHhYNuUyoI8SgGJTWffPJJUcehk5EjRxIWFsYLL7xAgwYNiIiI4Pbt25q3oYQQQjwdcrOyCk1oHqYoCmmXL+P03HNF2mLz/qDBpKWl8cP3K4rsmMby88/RLIuM5NTp0+RkZ1OtWjXGjPmQli+/rNdxTp0+zbTwcH777RgZGRm4ubnxQr26fD59OhUqVNBMd3D50kUciiGJXLx4MStXruT48eNkZGSQmppq9LFunmiahGPHjhEXFwdAjRo1CAoKKpKgCtOjRw9u3LjBxx9/THJyMnXq1GHr1q35Og8LIYQoWbevX39sQvOAoijcvn4dx0qVjBxVycrJySlwuoVfDh2iefNmTJwwHgcHB35YuYpevUPYuX0btWrV0unYf//9N51f70Kb1q1Zv/ZHHBwcSExMZMvWrSXW/zUrK4u2bdvStm1brTeXjcmgjsIpKSm8/PLL1K9fn6FDhzJ06FDq1atHy5YtuXHjxuMP8AQGDx7Mn3/+SXZ2NocPH6Zhw4ZGPZ8QQgj95OXmkqPnEBo56enF2nl44ZdfEvxSE7y8fahRsxYfjBpNZmYmcH+AWR9fPzb9Z/LImJjNeHn7kJGRAcBfV6/Sf8Cb+Fbyp1JAZXqHhJKYmKgp//6gwYSE9mHmrNkEVq9B/YYvFhhL+LSpDBs6lLp16xIQEMDHEycQ4O/P1m3bdL6ew4ePkJ6ezry5EdSqVQtfX1+aNGnCtKlT8fX1JTExkY6dOgPg5x+Ak4sr7w+633VDrVYze04EtYPq4uH1LC81baZ17QcOHMDJxZVtW7YS3KABbk7OtGzWnLNnzjwypuHDhzN27FhefLHg6zYGg5KaIUOGkJGRwZkzZ7h58yY3b97k9OnTpKenM3To0KKOUQghRCmSk5GhcyvNA4qikPO/ZKE4mJiY8Hn4NA4dPMCihQvYv38/n0yaDICNjQ1durzODytXau3zw8qVvNaxI3Z2duTm5tK1azdsbW3ZHBPN1s2bsbG1oWu37uTk5Gj22bdvH/Hx8URFrWf1Ku3jFUatVpORmYmjo5PO1+Pm5sa9e/eIjokpsO69vLz4bvlyAI4e/pVzZ88QHj4NgNlzIlizZg2zZ83k0MEDvD9wIO8OfI+DBw9qHWPi+PF8Fh7Onv37cHV1pUfXbuQ+ZW+xGfT4aevWrezcuZPAwEDNuurVq7Nw4UJat25dZMEJIYQofZS8vGLdzxDvDRyo+ezj48P48R8x8oNRzJr5BQB9QvvQpl07kpOTcXd358aNG+zYuZONUesBiNqwAbVazby5EZpR9RfOn4+ffwAHDh7k5RYtALC2sWHe3Ai9Zvmev2ABt2/f5vXOnXTep379Fxg5YgRvv/MuIz8YRd26dWna5CV69uiBm5sbpqamODk5AlChQgVNn5rs7GzmRESwIWo9DerXB8DPz49fD/9K5Lffag2yO+ajcbzcsiUAi75ZTPXnqvDzTz/RO7SHznEam0FJjVqtzvcaN4CZmVm+eaCEEEKULypTw2bgNnQ/Q8TG7mVORAQXLlwgIyODe3l53L17l6ysLKytralXry7VqlVj1eo1jBg+jB/XrsXb25vg4GAATp85w6WEBLx9/bSOe/fuXRISEuB/SU31wEC9Epq169Yx44uZ/LBiBRUqVNDrmiZOGM+g999j3/79HDt2jMjl3zJ7TgQx0T9To3r1Ave5lJBAVlYWXd7oqrU+JyeHWjVraq1r8FB3D2dnZyo/9xx/nDuvV4zGZlBS8/LLLzNs2DBWrVqFp6cnAFevXmXEiBG0/F8WJ4QQonwyt7NDpVLp9QhKpVJhbmdnxKj+lZiYSM/evRnQvx8Txo/HycmRXw8fZsjQYVqPU/qGhrJk6VJGDB/GDytX0btXL02rzO3M29SpXZvFX3+V7/gurq6az9Z6vNG1PiqKYcNHELlsKc2bNzPo2pydnencqROdO3Vi4oQJNGveggULFrLoy4UFlr+deRuANatW4uHhobXNvBSO82ZQUrNgwQJee+01/Pz8NFMPXLlyheeff57vv/++SAMUQghRupiamWFub092WprO+5jb22NawBMAYzhx4iRqtZrPpkzBxOR+19KNGzflK9e9ezc+mTyZr79ezPnz5+nVs6dmW+3atdiwcSOurhWwt3/yZGzd+vUMGTqMpd8spk0RdeMwNzfHr5Kf5u0ns/+1GOU99JivatUqWFhYcOWvq4+dz/HokSOa3/zU1FQuxsdTpVrVIom1qBiU1Hh7e3P8+HF27tzJuXPnAAgMDKRVq1ZFGpwQQojSyaZixXyjCBdGZWKCjRGG5kjPSOfUqVNa65ycnankX4nc3FwWf/MNbdu04dfDR4j8Xyfahzk6OvLqqx34eNIkWrRogZeXp2Zbt65dmb9gASF9Qhk3dixenp5cuXKFn6NjGDpkiFbZx1m7bh3vDxpM+LRp1KtXTzNyvqWVFQ729jodY+u2bURFbaBLl9epHBCAoihs3baNHTt2smD+fAC8n/VGpVKxbdt2XnmlFZaWltjZ2TF40CDGT5iAolbz4osNSU9P5/DhI9jZ2dGr17+J3IzwcJydnXFzc2PKpMm4uLjwaseOhcaUnJxMcnIy8fHxAJw6dQo7Ozt8fHyMNn+kwePUqFQqXnnlFV555ZWijEcIIUQZYGZtjYOf32MH4FOpVDj4+hplqoQDBw7StHkLrXV9QkOYN3cuUz+bwty58/h0ymcEN2rExIkTee/99/Mdo09ICOvWrSc0pLfWemtra2J+/plJkz+lb1g/MjMz8fDwoFnTJtjp+Rjt2+++4969e4z+8ENGf/ihZn2vnj35cuECAFauXMWgIUNI/efvAo9RrWpVrK2tmDjxY65eu4a5uTkB/v7Mi4igZ4/uAHh6ejBu7BgmT/mUQUOG0LNHD75cuIDxH43D1dWFORERXP7zTxwcHKhdqxYjRgzXOsekT6cwdvRoLsZfpGatWqxet/aR/YW++uorJk+erPnetGlTACIjI+nXr59edaQrlaLjQ8958+bxzjvvYGlpybx58x5Z9ml9rTs9PR0HBwfS0tKw1zH71dW1Y8e0vsfF/TteT6blzSI9lxBPA9saBXc8DAz8t3OjJ17FFU6Je/jfgIf//3cMrMVfCbElENGTe8bMHPdn/fD28tKrs+vDSvvcT6vX/Mj4CROIO3Pa4DooCuHTp3Pwl1+I/s/YOcXhwUjEf167WuCIwJZW/7aPmGN4HT3oZF2pUiUsLS21tun6+61zS82cOXMICQnB0tKSOXPmFFpOpVI9tUmNEEKI4mVmbY1jpUr3B+TLyEDJy0Nlaoq5nV2x9aExRFZWFtevX2fu3Ln0Cwsr0YQGYOfOXcz4/PMSjaE00DmpSUhIKPCzEEII8TimZmZYGakfhTHMmz+fWbPnENyoESOGDyvpcNi1c0dJh1AqGDSi8KefflrgXBJ37tzh008/feKghBBCiJI0dswYblxPZtPGDdja2pZ0OCXqpZdeIvWfv40+GWVR0LlPzcNMTU1JSkrCzc1Na/0///yDm5ub1utiTxNj9qkRoix6VF8x6rkXuI/0qYEktMf7uGWdAmjXzQNPcx096OPg5+eHlZVVSYcjyrg7d+5w+fLlJ+pTY1BLjaIomgGIHnby5EmjvaYlhBCieD0YOb6kZnkW5YtmPJ0n6Gul1yvdTk5OqFQqVCoVVapU0Ups8vLyyMzMZOBD82kIIYQovUxNTXF0dCQl5X5Lk7W1dYF/0ArxJBRFISsri5SUFBwdHTF9guky9EpqIiIiUBSFAQMGMHnyZM2EWPC/kQv9/GjUqJHBwQghRHnxND92epi7+/3HjA8SGyGMxdHRUXO/GUqvpCYsLAyASpUqERwc/ERNREIIIZ5+KpUKDw8P3NzctOZFEqIomZmZPVELzQM6JzXp6emazjlBQUHcuXOHO3fuFFhWOuEKIUTZYmpqWiQ/OkIYk85JjZOTk+aNJ0dHxwKfqz7oQPy0vv0khBBCiLJL56Rm9+7dmjeb9uzZY7SAhBBCCCEMoXNS06xZswI/CyGEEEI8DQwap2br1q0cOHBA833hwoXUqVOH3r17k5qaWmTBCSGEEELoyqCkZvTo0aSnpwNw6tQpRo4cSfv27UlISGDkyJFFGqAQovS6xlWucbWkwxBClBN6vdL9QEJCAtWrVwdg/fr1dOzYkWnTpnH8+HHat29fpAEKIYQQQujCoJYac3NzzXDGO3fupHXr1gA4OztrWnCEEEIIIYqTQS01L730EiNHjqRx48YcOXKENWvWAPDHH3/w7LPPFmmAQgghhBC6MCipWbBgAe+//z7r1q1j0aJFeHndH+57y5YttG3btkgDBLh8+TJTpkxh9+7dJCcn4+npSWhoKOPHj8fc3LzIzyeEeLzMM2cLXH/0jPHPbVujeoHry+sM4UKI+wxKanx8fIiOjs63fs6cOU8cUEHOnTuHWq3m66+/pnLlypw+fZq3336b27dvM3PmTKOcUwhRuj3ooCzJjRDlh0FJDdyflXvjxo3ExcUBUKNGDV577TWjDKPdtm1brRYgf39/zp8/z6JFiySpEUIIIQRgYFITHx9P+/btuXr1KlWrVgUgPDwcb29vYmJiCAgIKNIgC5KWlqYZ4bgw2dnZZGdna75LJ2YhhBCi7DIoqRk6dCgBAQH8+uuvmsTin3/+ITQ0lKFDhxITE1OkQf5XfHw88+fPf2wrTXh4OJMnTzZqLEKI4vc09udxJUXz+Zb1/RZrxyw34wckhNAw6JXuvXv3MmPGDK2WEhcXF6ZPn87evXt1Ps7YsWNRqVSPXM6dO6e1z9WrV2nbti3dunXj7bfffuTxx40bR1pamma5cuWKfhcqhBBCiFLDoJYaCwsLMjIy8q3PzMzU622kDz74gH79+j2yjL+/v+bztWvXaNGiBcHBwSxevFinOC0sLHSORwghhBCll0FJzauvvso777zD0qVLadCgAQCHDx9m4MCBvPbaazofp0KFClSoUOHxBbnfQtOiRQvq1atHZGQkJiYGNTIJIYQQoowyKDOYN28eAQEBNGrUCEtLSywtLWncuDGVK1dm7ty5RR0jV69epXnz5vj4+DBz5kxu3LhBcnIyycnJRX4uIYQQQpROBrXUODo6smnTJuLj4zWvdAcGBlK5cuUiDe6BHTt2EB8fT3x8fL4RixVFMco5hRBCCFG66JXUqNVqvvjiC3766SdycnJo2bIln3zyCVZWVsaKD4B+/fo9tu+NEEIIIco3vZKaqVOnMmnSJFq1aoWVlRVz584lJSWFZcuWGSs+IYTIR5dpEh4orhGFrx3L03y+J69yC1Ei9OpT89133/Hll1+ybds2Nm7cyM8//8wPP/yAWq02VnxCCCGEEDrRK6lJTEykffv2mu+tWrVCpVJx7dq1Ig9MCCGEEEIfeiU19+7dw9LSUmudmZkZubm5RRqUEEIIIYS+9OpToygK/fr10xrQ7u7duwwcOBAbGxvNuqioqKKLUAghDCCzcwtR/qgUPd6J7t+/v07lIiMjDQ7ImNLT03FwcCAtLQ17e/uSDkcIIYQQOtD191uvlpqnNVkRQgghhJC5BoQQQghRJkhSI4QQQogywaBpEkqrB92H0tPTSzgSIYQQQujqwe/247oBl6ukJiMjAwBvb+8SjkQIIYQQ+srIyMDBwaHQ7Xq9/VTaqdVqrl27hp2dHSqVKt/29PR0vL29uXLlirwdZSRSx8YndWxcUr/GJ3VsfKWtjhVFISMjA09PT0xMCu85U65aakxMTPLN8l0Qe3v7UvEfuTSTOjY+qWPjkvo1Pqlj4ytNdfyoFpoHpKOwEEIIIcoESWqEEEIIUSZIUvMQCwsLPvnkE61pIETRkjo2Pqlj45L6NT6pY+Mrq3VcrjoKCyGEEKLskpYaIYQQQpQJktQIIYQQokyQpEYIIYQQZYIkNUIIIYQoE8pNUuPn54dKpcq3DBo0qNB91q5dS7Vq1bC0tKRmzZps3ry5GCMuffSt4+XLl+cra2lpWcxRly55eXlMnDiRSpUqYWVlRUBAAFOmTHnsfCixsbHUrVsXCwsLKleuzPLly4sn4FLGkPqNjY0t8L5PTk4uxshLl4yMDIYPH46vry9WVlYEBwdz9OjRR+4j97B+9K3jMnMfK+VESkqKkpSUpFl27NihAMqePXsKLH/w4EHF1NRUmTFjhnL27FllwoQJipmZmXLq1KniDbwU0beOIyMjFXt7e619kpOTizfoUmbq1KmKi4uLEh0drSQkJChr165VbG1tlblz5xa6z6VLlxRra2tl5MiRytmzZ5X58+crpqamytatW4sx8tLBkPrds2ePAijnz5/Xupfz8vKKMfLSpXv37kr16tWVvXv3KhcuXFA++eQTxd7eXvnrr78KLC/3sP70reOych+Xm6Tmv4YNG6YEBAQoarW6wO3du3dXOnTooLWuYcOGyrvvvlsc4ZUJj6vjyMhIxcHBoXiDKuU6dOigDBgwQGtdly5dlJCQkEL3+fDDD5UaNWporevRo4fSpk0bo8RYmhlSvw9+DFJTU40cXdmQlZWlmJqaKtHR0Vrr69atq4wfP77AfeQe1o8hdVxW7uNy8/jpYTk5OXz//fcMGDCgwIktAQ4dOkSrVq201rVp04ZDhw4VR4ilni51DJCZmYmvry/e3t506tSJM2fOFGOUpU9wcDC7du3ijz/+AODkyZMcOHCAdu3aFbqP3Mu6M6R+H6hTpw4eHh688sorHDx40Nihllr37t0jLy8v36NmKysrDhw4UOA+cg/rx5A6fqC038flakLLBzZu3MitW7fo169foWWSk5OpWLGi1rqKFSuWvueLJUSXOq5atSrLli2jVq1apKWlMXPmTIKDgzlz5oxOE4+WR2PHjiU9PZ1q1aphampKXl4eU6dOJSQkpNB9CruX09PTuXPnDlZWVsYOu9QwpH49PDz46quveOGFF8jOzmbJkiU0b96cw4cPU7du3WKMvnSws7OjUaNGTJkyhcDAQCpWrMiqVas4dOgQlStXLnAfuYf1Y0gdl5X7uFwmNUuXLqVdu3Z4enqWdChlli513KhRIxo1aqT5HhwcTGBgIF9//TVTpkwpjjBLnR9//JEffviBlStXUqNGDU6cOMHw4cPx9PQkLCyspMMr9Qyp36pVq1K1alXN9+DgYC5evMicOXNYsWJFcYVeqqxYsYIBAwbg5eWFqakpdevWpVevXhw7dqykQysz9K3jsnIfl7uk5s8//2Tnzp1ERUU9spy7uzvXr1/XWnf9+nXc3d2NGV6ZoGsd/5eZmRlBQUHEx8cbKbLSb/To0YwdO5aePXsCULNmTf7880/Cw8ML/dEt7F62t7eXv3D/w5D6LUiDBg0e28xfngUEBLB3715u375Neno6Hh4e9OjRA39//wLLyz2sP33ruCCl8T4ud31qIiMjcXNzo0OHDo8s16hRI3bt2qW1bseOHVotC6Jgutbxf+Xl5XHq1Ck8PDyMFFnpl5WVhYmJ9v+2pqamqNXqQveRe1l3htRvQU6cOCH3sQ5sbGzw8PAgNTWVbdu20alTpwLLyT1sOF3ruCCl8j4u6Z7KxSkvL0/x8fFRxowZk29bnz59lLFjx2q+Hzx4UHnmmWeUmTNnKnFxcconn3wir3TrQJ86njx5srJt2zbl4sWLyrFjx5SePXsqlpaWypkzZ4oz5FIlLCxM8fLy0rxyHBUVpbi6uioffvihpszYsWOVPn36aL4/eB129OjRSlxcnLJw4UJ5HbYQhtTvnDlzlI0bNyoXLlxQTp06pQwbNkwxMTFRdu7cWRKXUCps3bpV2bJli3Lp0iVl+/btSu3atZWGDRsqOTk5iqLIPVwU9K3jsnIfl6ukZtu2bZr38P+rWbNmSlhYmNa6H3/8UalSpYpibm6u1KhRQ4mJiSmmSEsvfep4+PDhio+Pj2Jubq5UrFhRad++vXL8+PFijLb0SU9PV4YNG6b4+PgolpaWir+/vzJ+/HglOztbUyYsLExp1qyZ1n579uxR6tSpo5ibmyv+/v5KZGRk8QZeShhSv59//rkSEBCgWFpaKs7Ozkrz5s2V3bt3l0D0pceaNWsUf39/xdzcXHF3d1cGDRqk3Lp1S7Nd7uEnp28dl5X7WKUojxmKVAghhBCiFCh3fWqEEEIIUTZJUiOEEEKIMkGSGiGEEEKUCZLUCCGEEKJMkKRGCCGEEGWCJDVCCCGEKBMkqRFCCCFEmSBJjRBCCCHKBElqhBDFJjY2FpVKxa1btx5Zzs/Pj4iIiGKJqU+fPkybNq1YzvVfL774IuvXry+RcwvxKPv27aNjx454enqiUqnYuHGjUc83adIkVCqV1lKtWjW9jyNJjRBCS79+/TT/qJibm1O5cmU+/fRT7t2798THDg4OJikpCQcHBwCWL1+Oo6NjvnJHjx7lnXfeeeLzPc7JkyfZvHkzQ4cONfq5CjJhwgTGjh2r94SZQhjb7du3qV27NgsXLiy2c9aoUYOkpCTNYsgM4ZLUCCHyadu2LUlJSVy4cIEPPviASZMm8cUXXzzxcc3NzXF3d0elUj2yXIUKFbC2tn7i8z3O/Pnz6datG7a2tkY/V0HatWtHRkYGW7ZsKZHzC1GYdu3a8dlnn/H6668XuD07O5tRo0bh5eWFjY0NDRs2JDY29onO+cwzz+Du7q5ZXF1d9T6GJDVCiHwsLCxwd3fH19eX9957j1atWvHTTz8BkJqaSt++fXFycsLa2pp27dpx4cIFzb5//vknHTt2xMnJCRsbG2rUqMHmzZsB7cdPsbGx9O/fn7S0NE3L0KRJk4D8j58SExPp1KkTtra22Nvb0717d65fv67ZPmnSJOrUqcOKFSvw8/PDwcGBnj17kpGRUeg15uXlsW7dOjp27Ki13s/Pj88++4y+fftia2uLr68vP/30Ezdu3NDEUKtWLX777TfNPg9anKKjo6latSrW1tZ07dqVrKwsvv32W/z8/HBycmLo0KHk5eVp9jM1NaV9+/asXr1a//9IQpSgwYMHc+jQIVavXs3vv/9Ot27daNu2rda/Bfq6cOECnp6e+Pv7ExISQmJiot7HkKRGCPFYVlZW5OTkAPcfT/3222/89NNPHDp0CEVRaN++Pbm5uQAMGjSI7Oxs9u3bx6lTp/j8888LbAkJDg4mIiICe3t7TXPzqFGj8pVTq9V06tSJmzdvsnfvXnbs2MGlS5fo0aOHVrmLFy+yceNGoqOjiY6OZu/evUyfPr3Qa/r9999JS0vjhRdeyLdtzpw5NG7cmP/7v/+jQ4cO9OnTh759+xIaGsrx48cJCAigb9++PDwfcFZWFvPmzWP16tVs3bqV2NhYXn/9dTZv3szmzZtZsWIFX3/9NevWrdM6V4MGDdi/f/8jal+Ip0tiYiKRkZGsXbuWJk2aEBAQwKhRo3jppZeIjIw06JgNGzZk+fLlbN26lUWLFpGQkECTJk0e+YdJgUp2knAhxNMmLCxM6dSpk6IoiqJWq5UdO3YoFhYWyqhRo5Q//vhDAZSDBw9qyv/999+KlZWV8uOPPyqKoig1a9ZUJk2aVOCx9+zZowBKamqqoiiKEhkZqTg4OOQr5+vrq8yZM0dRFEXZvn27YmpqqiQmJmq2nzlzRgGUI0eOKIqiKJ988olibW2tpKena8qMHj1aadiwYaHXuWHDBsXU1FRRq9X5zh0aGqr5npSUpADKxIkTNesOHTqkAEpSUpLmOgAlPj5eU+bdd99VrK2tlYyMDM26Nm3aKO+++67W+TZt2qSYmJgoeXl5hcYqREkClA0bNmi+R0dHK4BiY2OjtTzzzDNK9+7dFUVRlLi4OAV45DJmzJhCz5mamqrY29srS5Ys0SvWZwxKqYQQZVp0dDS2trbk5uaiVqvp3bs3kyZNYteuXTzzzDM0bNhQU9bFxYWqVasSFxcHwNChQ3nvvffYvn07rVq14o033qBWrVoGxxIXF4e3tzfe3t6addWrV8fR0ZG4uDjq168P3H9sZGdnpynj4eFBSkpKoce9c+cOFhYWBfbveTjeihUrAlCzZs1861JSUnB3dwfA2tqagIAArTJ+fn5arVQVK1bMF5OVlRVqtZrs7GysrKweURNCPB0yMzMxNTXl2LFjmJqaam17cL/7+/tr/k0ojIuLS6HbHB0dqVKlCvHx8XrFJkmNECKfFi1asGjRIszNzfH09OSZZ3T/p+Ktt96iTZs2xMTEsH37dsLDw5k1axZDhgwxYsRgZmam9V2lUj3yrSJXV1eysrLIycnB3Ny80GM9SHoKWvfw8Qs6vy4x3bx5ExsbG0loRKkRFBREXl4eKSkpNGnSpMAy5ubmBr2S/UBmZiYXL16kT58+eu0nfWqEEPnY2NhQuXJlfHx8tBKawMBA7t27x+HDhzXr/vnnH86fP0/16tU167y9vRk4cCBRUVF88MEHfPPNNwWex9zcXKvjbEECAwO5cuUKV65c0aw7e/Yst27d0jqnvurUqaM5Vkk6ffo0QUFBJRqDEP+VmZnJiRMnOHHiBAAJCQmcOHGCxMREqlSpQkhICH379iUqKoqEhASOHDlCeHg4MTExBp1v1KhR7N27l8uXL/PLL7/w+uuvY2pqSq9evfQ6jiQ1QgidPffcc3Tq1Im3336bAwcOcPLkSUJDQ/Hy8qJTp04ADB8+nG3btpGQkMDx48fZs2cPgYGBBR7Pz8+PzMxMdu3axd9//01WVla+Mq1ataJmzZqEhIRw/Phxjhw5Qt++fWnWrFmBnXx1VaFCBerWrWvQWBhFaf/+/bRu3bpEYxDiv3777TeCgoI0CffIkSMJCgri448/BiAyMpK+ffvywQcfULVqVTp37szRo0fx8fEx6Hx//fUXvXr1omrVqnTv3h0XFxd+/fVXKlSooNdxJKkRQuglMjKSevXq8eqrr9KoUSMURWHz5s2aRy15eXkMGjSIwMBA2rZtS5UqVfjyyy8LPFZwcDADBw6kR48eVKhQgRkzZuQro1Kp2LRpE05OTjRt2pRWrVrh7+/PmjVrnvha3nrrLX744YcnPo6hrl69yi+//EL//v1LLAYhCtK8eXMURcm3LF++HLj/uHXy5MkkJCSQk5PDtWvXiIqK0up7po/Vq1dz7do1srOz+euvv1i9erVWHzVdqf7Xs1kIIcqdO3fuULVqVdasWUOjRo2K/fxjxowhNTWVxYsXF/u5hSiLpKOwEKLcsrKy4rvvvuPvv/8ukfO7ubkxcuTIEjm3EGWRtNQIIYQQokyQPjVCCCGEKBMkqRFCCCFEmSBJjRBCCCHKBElqhBBCCFEmSFIjhBBCiDJBkhohhBBClAmS1AghhBCiTJCkRgghhBBlgiQ1QgghhCgT/h86uFU6FVa6EgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from SQDMetal.Utilities.PVD_Shadows import PVD_Shadows\n", "%matplotlib inline\n", "design.chips['main']['evaporations'] = Dict(\n", " layer2=Dict(\n", " bottom_layer='200nm',\n", " top_layer='100nm',\n", " undercut='200nm',\n", " pvd1 = Dict(\n", " angle_phi = '0',\n", " angle_theta = '-45',\n", " metal_thickness = '20nm'\n", " ),\n", " pvd2 = Dict(\n", " angle_phi = '0',\n", " angle_theta = '45'\n", " )\n", " )\n", ")\n", "pvdSh = PVD_Shadows(design)\n", "pvdSh.plot_layer(2,'separate', plot_mask=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can extract the largest interior area for surface flux integration" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "int_area = pvdSh.get_shadow_largest_interior_for_component('junction')[1]\n", "int_area" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Magnetostatic Simulation\n", "\n", "Now to run the Palace simulation (*make sure to update the path to the Palace binary first*)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from SQDMetal.PALACE.Inductance_Simulation import PALACE_Inductance_Simulation\n", "\n", "#Eigenmode Simulation Options\n", "user_defined_options = {\n", " \"mesh_refinement\": 0, #refines mesh in PALACE - essetially divides every mesh element in half\n", " \"dielectric_material\": \"silicon\", #choose dielectric material - 'silicon' or 'sapphire'\n", " \"solver_order\": 2, #increasing solver order increases accuracy of simulation, but significantly increases sim time\n", " \"solver_tol\": 1.0e-8, #error residual tolerance for iterative solver\n", " \"solver_maxits\": 200, #number of solver iterations\n", " \"fillet_resolution\":12, #number of vertices per quarter turn on a filleted path\n", " \"palace_dir\":\"~/spack/opt/spack/linux-ubuntu24.04-zen2/gcc-13.3.0/palace-develop-36rxmgzatchgymg5tcbfz3qrmkf4jnmj/bin/palace\",#\"PATH/TO/PALACE/BINARY\",\n", " \"num_cpus\": 16\n", " }\n", "\n", "#Create the Palace Eigenmode simulation\n", "mag_sim = PALACE_Inductance_Simulation(name ='Test1', #name of simulation\n", " metal_design = design, #feed in qiskit metal design\n", " sim_parent_directory = \"\", #choose directory where mesh file, config file and HPC batch file will be saved\n", " mode = 'simPC', #choose simulation mode 'HPC' or 'simPC' \n", " meshing = 'GMSH', #choose meshing 'GMSH' or 'COMSOL'\n", " user_options = user_defined_options, #provide options chosen above\n", " create_files = True) #create mesh and config files\n", "\n", "#add in metals from the first layer\n", "mag_sim.add_metallic(1)\n", "mag_sim.add_metallic(2, evap_mode=None)\n", "\n", "#add ground plane into simulation\n", "mag_sim.add_ground_plane()\n", "\n", "#Create a lumped element port for the Josephson junction and assign Jospehson inductance and junction capacitance\n", "# mag_sim.create_port_JosephsonJunction('Q1', L_J = 11e-9, C_J = 0e-15)\n", "mag_sim.create_current_source_with_Uclip_on_Route('flux_ln_wire', 'end')\n", "\n", "mag_sim.add_integration_area(int_area)\n", "\n", "#Fine mesh the qubit and resonator - min_size/max_size is the min/max mesh element size\n", "mag_sim.fine_mesh_components(['junction', 'flux_ln_wire', 'flux_ln_taper'], min_size=5e-6, max_size=50e-6, taper_dist_min=20e-6, metals_only=True)\n", "# mag_sim.fine_mesh_along_path(qObjName='readout', dist_resolution=10e-6, min_size=12e-6, max_size=150e-6, taper_dist_min=10e-6)\n", "\n", "#Prepare the simulation files - mesh file (.msh) and config file (.json)\n", "mag_sim.prepare_simulation()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "mag_sim.open_mesh_gmsh()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "flux_per_amp = mag_sim.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The returned value is the flux per Ampere. We can normalise it to flux quanta for 1mA to get a reasonable estimate of the flux-tunability:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.02227944]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flux_per_amp / 2.067833848e-15 * 0.001" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "sqdmetal_env", "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.11.0" } }, "nbformat": 4, "nbformat_minor": 2 }