{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "2d39e1ec-6a49-49f0-be16-7d87e66b4b33", "metadata": {}, "source": [ "# Example-14: Linear (element)" ] }, { "cell_type": "code", "execution_count": 1, "id": "14d8b935-fb14-4f1d-86e7-4295e92f95f1", "metadata": {}, "outputs": [], "source": [ "# Can be used to model elements as linear transformations\n", "# Constant offset can be used to model first order dispersion" ] }, { "cell_type": "code", "execution_count": 2, "id": "ca2e02c9-b50f-4a35-9904-51de96328925", "metadata": {}, "outputs": [], "source": [ "import torch\n", "from model.library.quadrupole import Quadrupole\n", "from model.library.dipole import Dipole\n", "from model.library.linear import Linear" ] }, { "cell_type": "code", "execution_count": 3, "id": "4e047ffc-924d-4e4f-8d5d-208e7b9fa77f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.012284014325104016, 0.013015328226371463, 0.005866573649483532, 0.01748719571870364]\n", "[0.012284330668424102, 0.013015814342968814, 0.005867420763768485, 0.01748647747810468]\n", "[-3.163433200861071e-07, -4.861165973507608e-07, -8.471142849530294e-07, 7.182405989576701e-07]\n" ] } ], "source": [ "# Linear quadrupole\n", "\n", "length = 1.0\n", "kn = - 2.0\n", "ks = + 1.5\n", "dp = 0.0\n", "Q = Quadrupole('Q', length, kn, ks, dp)\n", "\n", "state = torch.tensor([0.0, 0.0, 0.0, 0.0], dtype=torch.float64)\n", "\n", "matrix = torch.func.jacrev(lambda state, dp: Q(state, data={**Q.data(), **{'dp': dp}}), 0)(state, Q.dp)\n", "vector = torch.func.jacrev(lambda state, dp: Q(state, data={**Q.data(), **{'dp': dp}}), 1)(state, Q.dp)\n", "\n", "length = 1.0\n", "kn = - 2.0\n", "ks = + 1.5\n", "dp = 0.0001\n", "Q = Quadrupole('Q', length, kn, ks, dp)\n", "\n", "L = Linear('L', (dp*vector).tolist(), matrix.tolist())\n", "\n", "state = torch.tensor([0.01, -0.005, -0.005, 0.001], dtype=torch.float64)\n", "\n", "print(Q(state).tolist())\n", "print(L(state).tolist())\n", "print((Q(state) - L(state)).tolist())" ] }, { "cell_type": "code", "execution_count": 4, "id": "6157af5d-0dea-43ed-9264-c939a9d42135", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2.8326139356223135e-06, -0.005001000818821848, -0.002994615078158236, 0.001004198140800915]\n", "[9.165104284458664e-06, -0.004994998958072864, -0.002993748697591074, 0.001004997134048961]\n", "[-6.33249034883635e-06, -6.001860748984511e-06, -8.663805671619597e-07, -7.989932480460815e-07]\n" ] } ], "source": [ "# Linear dipole\n", "\n", "length = 2.0\n", "angle = 0.05\n", "e1 = 0.025\n", "e2 = 0.025\n", "dp = 0.0\n", "D = Dipole('D', length, angle, e1, e2, dp)\n", "\n", "state = torch.tensor([0.0, 0.0, 0.0, 0.0], dtype=torch.float64)\n", "\n", "matrix = torch.func.jacrev(lambda state, dp: D(state, data={**D.data(), **{'dp': dp}}), 0)(state, D.dp)\n", "vector = torch.func.jacrev(lambda state, dp: D(state, data={**D.data(), **{'dp': dp}}), 1)(state, D.dp)\n", "\n", "length = 2.0\n", "angle = 0.05\n", "e1 = 0.025\n", "e2 = 0.025\n", "dp = 0.0001\n", "D = Dipole('D', length, angle, e1, e2, dp)\n", "\n", "L = Linear('L', (dp*vector).tolist(), matrix.tolist())\n", "\n", "state = torch.tensor([0.01, -0.005, -0.005, 0.001], dtype=torch.float64)\n", "\n", "print(D(state).tolist())\n", "print(L(state).tolist())\n", "print((D(state) - L(state)).tolist())" ] } ], "metadata": { "colab": { "collapsed_sections": [ "myt0_gMIOq7b", "5d97819c" ], "name": "03_frequency.ipynb", "provenance": [] }, "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.1" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false } }, "nbformat": 4, "nbformat_minor": 5 }