{ "cells": [ { "cell_type": "markdown", "id": "0d27a81e", "metadata": {}, "source": [ "# Advanced Plotting of Beam Results\n", "\n", "In this notebook we perform linear static analysis of a simply-supported Euler-Bernoulli beam and we plot the results with `Matplotlib`." ] }, { "cell_type": "markdown", "id": "6691645a", "metadata": {}, "source": [ "## Inputs" ] }, { "cell_type": "code", "execution_count": 15, "id": "39404ef1", "metadata": {}, "outputs": [], "source": [ "a = 1.5 # m\n", "b = 1.5 # m\n", "c = 4.0 # m\n", "d = 1.5 # m\n", "e = 1.5 # m\n", "\n", "number_of_modes = 200 # The number of Fourier modes to consider\n", "F = 1.0 # The value of the concentrated load in kN\n", "M = 3.0 # The value of the constant moment in kN.m\n", "q = 0.5 # The value of the uniformly distributed load in kN/m\n", "\n", "E = 210000.0 # The modulus of elasticity in kN/m^2\n", "I = 8.333e-4 # The moment of inertia of the beam cross-section in m^4" ] }, { "cell_type": "markdown", "id": "60f9a60b", "metadata": {}, "source": [ "## Define the Beam and the Loads" ] }, { "cell_type": "code", "execution_count": 16, "id": "43460109", "metadata": {}, "outputs": [], "source": [ "from sigmaepsilon.solid.fourier import NavierBeam\n", "\n", "beam_length = a + b + c + d + e # The length of the beam in m\n", "beam = NavierBeam(beam_length, number_of_modes, EI=E * I)" ] }, { "cell_type": "code", "execution_count": 17, "id": "a3c57480", "metadata": {}, "outputs": [], "source": [ "from sigmaepsilon.solid.fourier import LoadGroup, PointLoad, LineLoad\n", "\n", "loads = LoadGroup(\n", " concentrated=LoadGroup(\n", " LC1=PointLoad(a, [-F, 0.0]),\n", " LC2=PointLoad(a + b + c + d, [0.0, M]),\n", " ),\n", " distributed=LoadGroup(\n", " LC3=LineLoad([a + b, a + b + c], [-q, 0.0]),\n", " ),\n", ")" ] }, { "cell_type": "markdown", "id": "e55f7667", "metadata": {}, "source": [ "## Calculate Response and Inspect Results" ] }, { "cell_type": "code", "execution_count": 18, "id": "afb00252", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Execution time: 0.0080 seconds\n" ] } ], "source": [ "import numpy as np\n", "import time\n", "\n", "# the locations of the points where the solution is calculated\n", "# 500 points along the beam length\n", "points = np.linspace(0, beam_length, 500)\n", "\n", "start_time = time.time()\n", "solution = beam.linear_static_analysis(points, loads)\n", "end_time = time.time()\n", "print(f\"Execution time: {end_time - start_time:.4f} seconds\")" ] }, { "cell_type": "markdown", "id": "547a04af", "metadata": {}, "source": [ "Collect all results for all load cases and stack them on top of each other into one Pandas DataFrame." ] }, { "cell_type": "code", "execution_count": 19, "id": "8aee78dd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processing load case: ['concentrated', 'LC1']\n", "Processing load case: ['concentrated', 'LC2']\n", "Processing load case: ['distributed', 'LC3']\n", "Result components: ['UY', 'ROTZ', 'CZ', 'EXY', 'MZ', 'SY']\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
UYROTZCZEXYMZSY
load_index
00.000000e+00-0.0634430.000000e+000.00.000000e+00-1.843372
1-1.271398e-03-0.0634412.028609e-040.03.549925e-02-1.847969
2-2.542715e-03-0.0634363.703951e-040.06.481655e-02-1.855388
3-3.813884e-03-0.0634275.164938e-040.09.038279e-02-1.855338
4-5.084846e-03-0.0634156.849132e-040.01.198550e-01-1.847876
.....................
495-3.865275e-030.0482016.868998e-040.01.202027e-011.149879
496-2.899191e-030.0482135.174448e-040.09.054921e-021.150308
497-1.932899e-030.0482223.194507e-040.05.590163e-021.150310
498-9.664785e-040.0482261.407576e-040.02.463159e-021.149883
499-1.878492e-170.048228-2.796748e-180.0-4.894114e-161.149618
\n", "

500 rows × 6 columns

\n", "
" ], "text/plain": [ " UY ROTZ CZ EXY MZ SY\n", "load_index \n", "0 0.000000e+00 -0.063443 0.000000e+00 0.0 0.000000e+00 -1.843372\n", "1 -1.271398e-03 -0.063441 2.028609e-04 0.0 3.549925e-02 -1.847969\n", "2 -2.542715e-03 -0.063436 3.703951e-04 0.0 6.481655e-02 -1.855388\n", "3 -3.813884e-03 -0.063427 5.164938e-04 0.0 9.038279e-02 -1.855338\n", "4 -5.084846e-03 -0.063415 6.849132e-04 0.0 1.198550e-01 -1.847876\n", "... ... ... ... ... ... ...\n", "495 -3.865275e-03 0.048201 6.868998e-04 0.0 1.202027e-01 1.149879\n", "496 -2.899191e-03 0.048213 5.174448e-04 0.0 9.054921e-02 1.150308\n", "497 -1.932899e-03 0.048222 3.194507e-04 0.0 5.590163e-02 1.150310\n", "498 -9.664785e-04 0.048226 1.407576e-04 0.0 2.463159e-02 1.149883\n", "499 -1.878492e-17 0.048228 -2.796748e-18 0.0 -4.894114e-16 1.149618\n", "\n", "[500 rows x 6 columns]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "data = []\n", "result_components = None\n", "for addr, _ in loads.values(deep=True, return_address=True):\n", " print(\"Processing load case:\", addr)\n", " load_case_solution = solution[addr]\n", " df = load_case_solution.to_pandas()\n", " if result_components is None:\n", " result_components = df.columns.tolist()\n", " df[\"load_index\"] = list(range(len(df)))\n", " data.append(df)\n", "print(\"Result components:\", result_components)\n", "\n", "# concatenate all load case results\n", "df = pd.concat(data, ignore_index=True)\n", "\n", "# aggregate results by load index\n", "df_results = df.groupby(\"load_index\").sum()[result_components]\n", "df_results" ] }, { "cell_type": "markdown", "id": "f7d0f7f3", "metadata": {}, "source": [ "## Plot Results\n", "\n", "The next block of code created a high quality plot of the structure and the results using `Matplotlib`." ] }, { "cell_type": "code", "execution_count": 20, "id": "0e25e654", "metadata": {}, "outputs": [ { "data": { "image/png": "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zZsjqGFDBDdqhJqtW6Ne795ocdNNqunr8v/9D9ctXYrukyejTufObhmChAwksp0vt27dqvrACmn2kqYxmyVLluQ3mclzpN/Phx9+qG5LFxFZisq2NFVUVJSaauaee+5Rt9u2batGknkEvRqtXi0NYbp+ww26brHoeu/eun7w4Pl9rW+//Vaa9PTAwED9yJEj+htvvKFu161bV09JSdEnTJigbrdu3VrPzs7Wb7nlFnW7T58+utVq1QcMGKBuDx8+XM/JydHbtWunbj/44INV/WMTERE5zVNPPaXOb82aNdMzMzP1kSNHqts9evTQ8/Ly9MGDB6vbQ4cO1XNzc/XOnTur22PGjNHPnDmjR0dHq9vPP/+8npiYqIeFhanbn332me4JqjUI9eun6zVqGGHojjt0/b33dH3MGF2/6y5dt1or9rXklye/RPlljBgxQv1ymzdvrm4/+eST+qlTp/TatWur2++9955+8OBBPSAgQN3+8ccf9c2bN+sWi0XdXrp0qf7XX3+p615eXvr27dsddQiIiIiq1enTp/XIyEh1jnv99df1o0eP6kFBQer2N998o855cu6T2wsXLtSXLVumrss5ctOmTeqcKbflHHrgwAH9/fffV7flHCvnWndXbUHol1+MAGS/+fjoeseOuj5+vK7n5lb8a65evVr9MmrWrKmfOHFCnzt3rrot6TUjI0OlVbndpUsXVQWSNCu3hwwZol4/duxYdfsuSWK6rtKw3J44cWJV//hEREROM23aNHV+k9YPqfq89tpr6vaAAQPU49IaIrdvvfVWdfvGG29Utx999FF1/pTWFLn91ltvqVaWNm3aqNvSOuPuqi0I/fWXrrdureuPPqrrP/2k6zt26Hp2dtX8chMSEtR1+WVJ+JGmMSG/7P/7v/9TpT2Rnp6uHpemMCElvunTp6vqkti7d68+a9Ys9XWIiIg8hZzn5Hwo50EhxYJPP/1UhRqRlJSkf/XVV/nnw/379+s///xz/vlQWlEWLFiQ//X++ecftXkCl5pQkYiIiAhmX2KDiIiIqDowCBEREZFpMQgRERGRaVU6CO3ebawMX9Jmv5YYERERkaup9Dzcsj5p0aW5ZMHeV14BLrussl+diIiIyHGqfNRYXBzQpw8gi/T++acsjVGVX52IiIjIRYPQoUNGCIqIABYtMqpFRERERB4fhI4fB/r2BQIC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hjQzPfLII2rUpI2vr6/6/yahUe6XKs37779f6OtW1XOKqs6/B6KqwCBEVS4uLg7Jycll9uMorUlDPn2WtZXVNCYneAlBUr7/+++/K1xelzd9ecOX/hc28mYtt239IqrzOeezf6WRIdYSDKVZS/ptlEWaMqT5rKQ+MfL6oUOHwpl/V+eqCFXm78hRv5eq/JuQvjXSd8ieBKiygoU8lpWVVeZxq6rnELkdp3TRJo/2008/qZE9e/bsKTZ0XkaGOMp9992nh4aG6kuXLi30Pc+cOZP/HBm6v3HjRrXJPr7zzjvq+oEDB/KHL/v5+enTpk3Td+zYod97771q9Mvx48fzv0Z1PkeGiQ8cOLBCrylr1NiuXbv0yMjIQqPIZNTY0KFDC73mjjvuUEPq7d8iZAi3DJ+2H+VV0tD8Ro0a6e++++45R+idz9+Vpmn66dOndUdy1O+lqp4jv6+oqKj84fMyFYRMZ2CbhkCGoctISXlsy5Yt6rYct4ULF+Z/jap6TlHV+fdAVFUYhKjKyRumvNEV3eQN3n4OmapW0veUTeYWspGhuSU9R04u9ic5mX9I5nOR4cyrV68u9r2q6znPPfecOpFU9OuWdXKSE6wMa54wYUKpQUhOfvL17YOQDJu++OKLy/zalTnxye+prM9m8nfVsmVLvTo46vdSFc+RICjHXJ4jYbVp06Zqbizb/y0ZWi/7Jq+vU6eOfskllxQLL1X1nKIYhMgdafKPs6tSROT6rrnmGvTu3RtPPPGEQ76+jFaTjrjsMEtE1YmjxoioXCQEyUhAR5HlGz766COHfX0iopKwIkRERESmxVFjREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRabhOE+vfvj2nTpjl7N4iIiMiDuE0QIiIiIqpqDEJERERkWgxCREREZFqarus6XNCrr76qNpuMjAz4+PjA29s7/74dO3YgOjraSXtIRERE7s5lg1BSUpLabG677TYMGzYM119/ff59jRs3LhSMiIiIiCrCZVNEeHi42mwCAgIQERGB5s2bO3W/iIiIyHOwjxARERGZFoMQERERmZbL9hEiIiIicjRWhIiIiMi0GISIiIio0stgPfzww8Xul6WxwsLCMGrUKHTo0AHZ2dmFHv/jjz/g6+uLDRs2wFkYhIiIiMih3n33XaSmpuK5557Lvy85ORmjR4/Gs88+iwsuuADOwiBEREREDhUSEoKvv/4ab7/9NtasWaPukwpSVFQUJk6cCGfy6CAUGwvk5Tl7L4iIiFxbVhZw5Ihjv8eAAQNw//33Y8SIEfj555/x008/4ZtvvnH6xMguO6FiZeXkAB06AFZrFoDV8PX9D76+6+DruxEWS7qzd4+IiKja6bqGvLwGyMlpjdzc1urSuN4UDRuexMGDkQ79/q+99hoWLFiAm2++WVWHWrduDWfz2CC0bx8gITM11Q9AP2Rl9Tv7iJSItgD4x2475OS9JSIiqmq1AHQ4u7W3uwwu8dnJyTUgE+pomuP2SFaJeOyxx/DII4/goYcegivw2CDUsiVw6hTwxBPf4ssvdyI7uxuysy9EXl5DAF3ObuPVcy2WY2erRevg4/sffHy2Q9PYpkZERK5P1/2Rm9MCObltkCsVntzW6tJqrVvKK7Lh7b0XPj678jdv7514/PFboGkTzrsPUEpKSrH7pUN0aGhoofukKczLywuaIxNXBXhsEBJeXsDbb9+Bt98uuE/aQP/9F/jnH2PbuFH6EdVDZuY1ahMBNXRc0NWK7hfpuLCHFRd2syI0zHk/BxERkfR53b9Pw87tGnbusGDXdg27dmrYF6fBai05VDRpYnQTsd9atPCFj09bALJVjVatWmHhwoXF7pdh8S2lMuHCTD+zdHo6sG5dQTBatUoSbOHnaJqOVm10dJdQ1MOK7j10NGqiO7R8SERE5mS1AocPaYjZpSFmp1xa1OWeGA0ZGSWfeGrXLh542rYFgktuBatycXFxaNeunRoOf88998DPzw/z5s3Dk08+id9++w1DhgwpNLeQjBiTapErMH0QKukPcOdOIxTZKkd79xZ/Xp0IHd26W9HtIqkcWdGhkw5fX2fsMRERuSM5+x45jPygYwQfC3bHaDiTXnLgCQgA2rUrCDvt2xuXdes6tm9Peaxbtw5PP/00Nm3apCZOlI7QTz31FK699tpCz2MQckPx8UYosgWj9euBIpNjwt9fR+cLdFzY3QhGUjkKD3fWHhMRkauQs+yxo1Ahx77KI4EnLbXk9CIfrFu1MkKPbZPQ07Sp0e2Dqg6D0HnIzDTCkK05TQLSiRPFn9e8hRXdekjVSFfhqFlzNqcREXlyH57DBzXExmqI3WPXrLVLw+mUkt/8ZXSzdKGxBR1b6Gne3HiMHI9BqArIEdyzp3Awkua1omrW1NHlQiu6drPigq46unS1IqymM/aYiIjO9/1ePvhK0Inba0HsXg1xsRr27tFwYJ+G7OySA49UcVq0KFzhkU3uY7cK52IQcpCTJ42O17ZgtHatUUkqqkVLK7pcqKPrhVZccKEVbdrp/BRAROQCA2ni9mr5QSd2T0HoKa26I/z8jHBTNPRI1UceI9fDIFRNpE/Rli3A6tWALLMilyV1wpah+526GMP3VeXoQivq1XfGHhMReTZZgeCQNGVJwJHQs8cWfCw4drT0sCMjiRs10lS4kU368tiuN2zIPjzuhkHIiaS8KpUiCUWyyfUS5qNC/ShdBSLZJBzJCLUaNZyxx0RE7kXOcAnxUAHHvqojwUfm5MnNLT3wyJD0okFHNum/4+9frT8GmTkIzZgxA2PGjMm/PX/+fPTp0weeOnQ/JqZw1WjrVr3YRFleXjpat9XRqbNVVY86dTGa1Fh2JSKzSj2NgmasvZaCCk+shvS00sNOQICOFi20YmFHNo78NQeXD0KpqamIl/HrZ0VFRam1SswiLc0YoWYLR9Lv6Pjx4s/z9dVVGJJQ1PlsOGrZWoePjzP2mojIMV0MDuw/24yVH3SM0JMQX3rYsVh0NGlS0JRlX+WJipLHq/XHIBfj8kGICpPf1uHDwH//Fd6Skoo/V+Y2atfBCEXGpqNFS53t10Tk8nPu2EZk2TYJOwcPyMrppQcemVSwpH47MvcOK+ZUGgYhDyC/wf37i4ej06dL7ozdoaMEJCvad9DRvqNVLR/C9m4iqs73LBlZuy/W1l/Hoi7ltjRlZZwpPewEBpYcdmSUVhjXhKTzwCDkoaS/UWysEYhkLTW53LDBGBJalPQ5atFKV8HIFpDadeTM2ERUOSnJ8j5kBBwZiZUffM4xBF2q1lLFKdpvR27Xq+f8pSTIszAImWzW0127gE2bgI0bjUvZ5JNZSWS0Wn4wOnsZ3VhnezoR5UtPQ364MSo6BYEn6WTZiUWGmtvm3LFVdSTsyIrp7N9I1YVByOTUon9HCkKRbZNqUklqBOpo1VpH6zZWNXKtdRsZwWZFhAss+EdEjpGRAeyPK6jmqKATd+5OykIqOLawYx96mjUzFhAlcjYGISqR9C+SCSDtw9HWrcUXm7VfPqSVCkbW/HAkgakmm9eI3KayIyOyZG4dtZ0NPvviLDhyuOywI/Pt2Fd1bJvMtxMcXG0/AtF5YRCiCs3CKrNhb9sGbN9uXMom66xJn6SSRNYzwpH0QZJFZ5u3lJFrrCAROWWNrEQUBJ19FrU2lu32icSy/0NKR+SiVR3bdXZSJnfGIESVJmuoSd8jWzCybQcOlP6aoGAdzVsYwah5c6u6bNZCR9NmnBiSqDIfVo4csqvq7NNUlcdW6TmTXnbYkQES0mRl2+xDT61a/PBCnolBiBzavLZjhxGKZMZsCUuyxcWVXkGSic+iGxmhSIJS4yY6mjQ1LqMacoJIMrfcXGOOHVkfy347fPZSmrDKmmdHgox0ULYPO7LJCC25ZGWHzIhBiKpdVpbRGVtCkS0g2S5LWmvNfph/g4ZGKGp8NhzZNhnNJvOLELl7RefoEbuAc6hw4Dl2REZ/ll2WkTnBbMHGdmnbGjfmxIJERTEIkcuQv0RZTcU+HElgkk2qSDJypSwRdY1QJGEpf4vWEdXAuM6gRM6eviL+uFR0NBV2il4a16VaWnbQ8fUFGjUyNgk2tk1uy7BzGaXFKS6Iyo9BiNyCNKUdO1YQjGSTjtu266dOnftrhIcbgSjKLihJSJKtXn0dtesA3t7V8dOQpzlzBkiM11SQl2BTONwYm4Sgc1VzhFRsbMGmaNCRy8hIBh2iqsQgRB5BgpAtFB08aHTUls12vawmN/v+STKarW6krka72S7lxBNZXy511K2nqw6l7DRqjgrOyRNQ8+QkJBjz5SQcR8H1hILbaanl+4OQoC2LfDZoUHiTfjtyvwSdiAgGHaLqxCBEpiBByD4Y2V+XS/kkLye+8vDx0VGrNlCrto7astUpuC73166jn71tXA8MYnByNnmXk6pN0knZjBmPZaHikyfOXj8pM6zLfcZ1uU9C0LmaqezJ5IDSLGULOhJuigYeCTlc9JjItTAIEZ399J+QABw9WnyTmbdt1xMTK/61fX11hIbJiBzjMjRMV6Nz5NL+fuNSR2iosbBkjSCjX5OcYM0epOT3cybdWCsvLU3WqYJaqyqlhMvU08XvTz4l0zxU/CDKcZfwIlVBCTmqOljkuu12EAMvkVtiECKqAJlZW6pHEogkOMlmu17SfVKFqCxpspOqkoSiwEAjHNUIsrseqKsOtDJaSC59/QA/Xx1+/rbrcmnMzySbjy9g0YzKhEU2i25ct5y9bXvs7G05uVvzjH5apW3S90U/ez03D8jOMkYHyvHKztKQpS6BnGycvV5wX2aGHCdNHSsJOjLXjXFdQ4bcPnN+IaYkcnzq1DFmQrZdlrbVrWtcst8YkWdjECJyIDmxnzgBJCcb/ZjKs0kVIy3NeC0VJuFMKi81axpz3kj1TC5L22yPy/Ml+EhwZNWGiOwxCBG5KKmuSDVEQpFsqakF14tuUn2x32S279JuS5XGqOKU71I2W4Uov1JUZLO/X67bqk/n2qRCI01/ElCC8qtepV+XqheDDBFVJQYhIiIiMi0O0iQiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIjIZGSg6efJk1KtXDwEBARg0aBD27NlT5muWL1+Oq6++GvXr14emaZg9e3ax56SlpWH8+PFo0KCB+rpt27bFp59+6sCfhIio8hiEiEzmjTfewAcffKBCypo1axAYGIjBgwcjUyYbKkV6ejo6deqEjz/+uNTnTJgwAQsWLMB3332HnTt34uGHH1bBaO7cuQ76SYiIKo/zCBGZiPx3l6rOo48+iscee0zdl5KSgrp162LatGm4+eabz/k1pCI0a9YsXHvttYXub9++PW666SY8++yz+fd17doVl19+OV5++WUH/DRERJXHihCRiezbtw/Hjx9XzWE2oaGh6NGjB1atWlWpr92rVy9V/Tly5IgKXEuWLMHu3btx2WWXVcGeExE5BpcTJDIRCUFCKkD25LbtsfP14Ycf4t5771V9hLy9vWGxWDB16lT07du3Ul+XiMiRWBEi8mAzZsxAUFBQ/paTk+Ow7yVBaPXq1aoqtH79erz99tsYN24cFi1a5LDvSURUWawIEXmwa665RjV72WTJqqsA4uPj1agxG7nduXPn8/4+GRkZmDRpkuo7dOWVV6r7OnbsiE2bNuGtt94q1BRHRORKGISIPFhwcLDabKTvTmRkJBYvXpwffE6fPq1Gj913333n/X2k0iSbNIfZ8/LyglWWryciclEMQkQmIiO+ZFi7jOJq0aIFmjRpokZ5yUgy+1Fgl1xyCa677jo1/N02R9DevXsLdbqWak94eDiio6MREhKCfv364fHHH1dzCDVq1AjLli3DN998g3feeccpPysRUXkwCBGZzBNPPKHmBZKOzcnJyejdu7ea/8ff3z//ObGxsThx4kT+7f/++w8DBgwoNGeQGDFihBp2L2bOnImJEyfitttuQ1JSkgpDr7zyCsaOHVutPx8RUUVwHiEiIiIyLY4aIyIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItPiWmNEREQeymoFcnKA7GzjUm7bNllgy2p33csLiIqC6TAIEREROYmEk5QUIDkZOHXKuJTbaWlAerqx2V8vevvMGSArywg6JW3y9cureXNgzx6YDoMQERFRFcjIABITjS0hofjlyZOFA49sEmqcQdN0WCxQm6YZl35+GsyIQYiIiKgMUnk5fNjYDh0quH70aOGgU5lQExikIywMCAnVERIC1AjUUaOGXAKB+dd1BAai0PWAAMDXD/D11eHjI2EG8PGFuq7u8wV85bof4O1tNH9J8CnK26KhVpAfzIhBiIiIzpv0LcnMNJpopCJia6rJzTWaZeTStpV0W/qnyIm5pM1WrbDf5EQuJ3vZfH0Lrpd2u6STfnlCju26XEoFp7x8fHTUqg3Uri2XOmrXgXFZW0fNcCA0rCDwhIYCoTWN4CMhhZyDh56IyGQkhCQlGdvp00afFNtmf9v+ulQ7bEHH/lI2V2ZURgqCke26BKr4+PKHHKnY1I/SUb++cVkvCoiM1FEnwi7w1NIREnru8EWuhUGIiMjNSUXm+HHg2DGjiebEiYJN+qXY35atIhWOipBqSEANI2xIAPHyBry9dFXt8PaR62fvO7t5eevwshhVJTWCSdfUJc7eLmnLyzvbETi/g7CmrmedvS83t3AKkaqTbFL5OVfIiZKAI0GnAVTgqRdVEH4k4JBnYhAiInJRUnU5csQIOLJJnxTbdfvtfIKNdJaVJpngUCA4+Oz1EB3Bwcaluh2sq8dDQgr6owTU0OHvL5c4e6kjwB/wD3CN5h1parMFJQlHOWrTkC2BKNtotjPCkaYqOQw55AJ/tkRE5iMnbKneHDxobAcOFFy33ZZqTnn5+emIqFvQJyW8FhAerqvmGnVdXRr9VORS+qm4QnCpatKvSAKabAWkzFRUSfeRGbnNf4P+/ftj5MiRaiMicnXSjCPNULGxBdu+fQVBRzrhSnXiXKTZpm5dHRGRUJd1I43AI5d16wIRkbrqqxIaxr4pRB4dhIiIXI30V5GRRfZhR7a9e43L1NSyX2+x6IisB0Q10NXWoKFxGdVQR8Oz19lsQ+RYDEJEROeo7Mjool27gJgY43L37oIKj/RHKYt0tm3UREfjxlY0aqyjQfTZsNMAqmOudComIudhECIigtFMJeHGPvDYrsvw8bJGSkU3Oht2muho0rTgutxfuK8KEbkaTdfVYEWX8+qrr6rNJiMjAz4+PvC26923Y8cOREdHO2kPicgdydw427cbm33oiYszOjCX1oQloaZ5Sx3NWuho3twWeKyoH2XMSUPkzrxNPLO0ywahpKQktdncdtttGDZsGK6//vr8+xo3blwoGBER2Q8937nTCDzbthmbXJeOyqUJCtbRvIVts6rgI5uEHpmEj8hTeZs4CLlsiggPD1ebTUBAACIiItBclsclIjpL+uhIVado4ImN1aHrJQ+jiqyno1VrK1q0Oht6JPC0sKJuJEdeEZmNywYhIiJ7UruWCQU3bQI2bzY2CT3ScVmWjChOU/PotGqro3UbK1q30dGqjRWtWhtz6RARCQYhInLJKo80a9mHHtlKm2BQZkKWgKMCT9uz19ta1eSCrPAQkVv2ESIic5BJByXk2IceCUGyDEJRXl5GZ+V27XW0bW9Fm3Y62rQ1Oiwz8BCdP2/2ESIiciwZkSXD0zdsKBx8pLmrJCGhEnYk9Fjzg0+rNrpa74qIqKowCBGRQ0LPnj1G6Fm/3tjkugxdL0njJmfDTgdb6NHRMFpnlYfITYwcORLTp09X12U0d4MGDTB8+HC8+OKL8LebTOv333/Hm2++iQ0bNiAvLw/t2rXDuHHj8pfPev755/HCCy+U+b2WLFmCAQMGlLkklzynvBiEiKjSoUc6LNsCj2wbN5a8vIQsDCohp30Hq1Ht6WBFm7Y6gkOcsedEVJWGDBmCr7/+Gjk5OVi/fj1GjBgBTdPw+uuvq8c//PBDPPzww3jyySfxySefwNfXF3PmzMHYsWOxbds2vPXWW3jsscfUbZtu3brh3nvvxejRo/PvkxHlx44dK/b9586dq157//33V2i/GYSIqEJra5UUetLSij/X31+Cjo4Onazo2FlHp85WtGzNJSWIPJWfnx8iIyPV9YYNG2LQoEH466+/VBA6dOgQHn30URWE7CdLlvskED344IOqgtSjRw8EBQXlP+7l5YXg4OD8r2tT9PbOnTtViJo0aZL6OhXBIEREpYYemZ+naOhJTy/+3IAAI/R07FwQemSOHs53SmRO27Ztw7///otGjRqp27/88ouqFElYKWrMmDEqwPzwww8qCFVUcnIyhg4dqprEXnrppQq/3uPfpl5/4y188MF7zt4NIpem617IzW2OnOwOyMnpiJyc9sjJaQddDyz2XE07A2/v7fD13Qofny3w8dkKb++9OHo4D0cPAwt+d8qPQESV9OijEzBhwoTzfr30/5FqTm5uLrKysmCxWPDRRx+px3bv3o3Q0FDUq1ev2OukItS0aVP1nIqyWq249dZbVb+kGTNmqKa4ivL4IJR4KhlHjxxx9m4QuRBZGKsNgK52W2cANUp4rrR5bQSwAcB6ten6LuTkWEsc3k5E7ut0aaMZykk6MEvfn/T0dLz77rsqnMjSWI4klaRVq1Zh7dq1qgntfHh8EJIDU69+fWfvBpETKz0tkZPTATnZUunpiJzctoBefAy6pqXBx2ebqvDYqj3e3nHQtKIrkRb/REdE7i8kpHKjFgIDA/OXwfrqq6/QqVMnfPnllxg1ahRatmyJlJQUHD16FPWLnJOzs7MRGxtb5kiwksycOVN1sJ43bx5atGhx3vvt8UFo7PiH1Ebk6aRCE7NTw5ZNFmzepGHrZgt2bNOQmVm8VCwfnLp0Abp2LdhatgyCxXIRANmIiM6fNItJtUaa2qTpSipDMlrs7bffVpu9Tz/9VFWRbrnllnJ//U2bNqmANWXKFAwePLgSe2qCIETksQuN2oUeudy5XUNWVsmh54ILCoce+fBksThl14nIJIYPH47HH38cH3/8seok/cYbb6hRYjKv0B133AEfHx81fF4Ck9xf3o7SJ06cwLXXXqs6R99+++04fvx4ocdlpFmdOnXKvZ8MQkRuEHp27TDCzpZNGjafDT3Z2cVDT2ho8dDTrBlDDxFVP29vb4wfP14FoPvuu08NnZdO0dKc9f777+dPqCj9iu66665yf11pCjtw4IDaSup8LSPV9u/fX+6v5/FrjcWfznT2LhCVW2YmVMiRZq0ttkrPDg05OcVDT1hY8dDTtClDDxFRRbAiROQkGRlG6Nm80YKtm43Qs2unhtzc4qGnZs2SQw+XoCAiqhwGIaJqcOYMVMdladayVXp279KQl1c8ydSqVRB2bOGncWOGHiIiR2AQIqpi6WnAtq1n+/ScbeLaE6PBai2eZCIiCgce2Ro2ZOghIqouDEJElZB6Gti6xdanxwg9e/do0PXiSUaWxrFv2pLwExXF0ENE5EwMQkTlIEMKjh2VSo8F27dq2LbFuNy/r+SeyRJwijZvlTC4gYiInMzlg5CsHSILstnMnz8fffr0ceo+kWfLzYWq6kjQkUqPXG7fakFSUsmlG2nKKlrpqVu32nebiIjOg8sPn09NTUV8fHz+7aioKAQEFF8eoDQcPk9lSUsFdmzXjErPFuNS5uwpaWJCLy+gbVugc+eCrVMno3MzERG5J5cPQpXFIETCagUO7NPU8HSZl2fHNqPSsy+u5KatoKDCgUe2du0Af/9q33UiIjJz0xhRRSUmAru2GxMRyjw9O3dYELNLQ8YZrdT+PEVDDycmJCIyBwYhcuu5eWS9LQk6u+xCz4nEkgOPn5/RtNWhg7FJs5aEngosSUNERB6GQYhcXlYWEBdrzMWza6cFu1TgkRFbJQ9T1zQdTZtq+YHHtjVvLmvfOOVHICIiF8XTArmM9HQgdo+G3TESeizqUmZflsBT0gzMQqo5RQNPu3YaAgOrffeJiMgNMQhRtUtJBvbslsBjLDOhru/ScOhg6Z1yQkKANm2MDsv2oUdmZiYiIjpfDELk0AkI4/Za1Jw8trCzZ7cFx4+VPpVy7dpGPx7ZJPjYLuvX5wzMRERU9RiEqNLVndhYDXF7NcTusSB279nrsaWP0rKN1LIFHVvYkY0dl4mIqDoxCFG5OitLPx0VcFTg0RAXa4Se0kZoCemYLMPQW7QoHHpatwZCQ6v1RyAiIioRgxDlh52DB4yOyfvjjEsZqSXh59DBkldOt5E1tFq1Alq2NDbb9SZNAB+fav0xiIiIKoRByGQrpaugs69w4Nm/34Kjh6VfT+lhJzi4cMixXZdqjzxGRETkjhiEPKhz8ukU4MhhDYdlO6ThiGyHjYqOBJ6TJ8rubSzLSjRrZsy3I5eySdiRTRYRZWdlIiLyNAxCbrJOVlISkBivIf64BlmDNv6YEXgk6Kjwc0hDWuq5k4p0RraFHPvAI9flMYYdIiIyEwYhJ/bJOZUkm4aTJzV1PemkhBwNiRJ0zoaexAQNCfFAbm75EooMP4+ONrZGjQqu2wKPzMdDREREBgah82yGysgA0tOA1FRN9b2RS+O29MWR6gyQlqYhJcUIO7bQk3TKuH4mveKlFwk50jE5MtK4tA86tq1GDYf8yERERB7J25MX5HzpJeD0GW/kWQFrntHElCeXeWcv5bZVy38sO9uo1GRmyKWGzEyoLUtdamcvjetVwcsLCA8HatUytqJBx/669NHhCCwiIqKqpem61Dc8T3IyULOmY7+H9KeREVOySZOTbEWvy3w5tqBjH3jkUp5jKX1VCSIiInIwj60I+fsDDz9sBA2pvNhvJd0nm0wAGBBgbPJ626X9ddulNEHJwp4MMkRERO7LYytCREREROfCegYRERGZFoMQERERmRaDEBEREZkWgxCRC/v444/RuHFj+Pv7o0ePHli7dm2Zz//555/RunVr9fwOHTrgjz/+yH8sJycHTz75pLo/MDAQ9evXx5133omjR49Ww09CROSa3C4ISd/uyZMno169eggICMCgQYOwZ8+eKjmhrFq1CgMHDlQniZCQEPTt2xcZMnMikRP8+OOPmDBhAp577jls2LABnTp1wuDBg5GQkFDi8//991/ccsstGDVqFDZu3Ihrr71Wbdu2bVOPnzlzRn2dZ599Vl3++uuviImJwTXXXFPNPxkRkQvR3cyUKVP00NBQffbs2frmzZv1a665Rm/SpImekZFR6mtmzpyp+/r66l999ZW+fft2ffTo0XpYWJgeHx+f/5x///1XDwkJ0V977TV927Zt+q5du/Qff/xRz8zMrKafjKiw7t276+PGjcu/nZeXp9evX1/9jZbkxhtv1K+88spC9/Xo0UMfM2ZMqd9j7dq1MmpUP3DgQBXuORGR+3CrIGS1WvXIyEj9zTffzL8vOTlZ9/Pz03/44YdKnVDkhPHMM884cO+Jyi8rK0v38vLSZ82aVej+O++8U4X/kjRs2FB/9913C903efJkvWPHjqV+n7/++kvXNE1PSUmpoj0nInIvbtU0tm/fPhw/flw1h9mEhoaqpi5p1ipJdnY21q9fX+g1FotF3ba9Rpoa1qxZg4iICPTq1Qt169ZFv379sHLlymr4qYiKO3HiBPLy8tTfoj25Lf8HSiL3V+T5mZmZqs+QNKdJUzARkRm5VRCyvaFX5M2+PCeUuLg4dfn8889j9OjRWLBgAS644AJccskl5ep/RORupOP0jTfeqPrcffLJJ87eHSIip3HpIDRjxgwEBQXlb/Lm7QhWWXEVwJgxY3DXXXehS5cuePfdd9GqVSt89dVXDvmeRGWpXbs2vLy8EB8fX+h+uR0pK/GWQO4vz/NtIejAgQP466+/WA0iIlNz6SAko1k2bdqUv8nJQVTk5FCeE4qMQBNt27Yt9Jw2bdrg4MGDVfozEZWHr68vunbtisWLFxcK7HK7Z8+eJb5G7rd/vpCgY/98WwiSSueiRYtQS1b/JSIyMZcOQsHBwWjevHn+JkFFwov9m/3p06dV/57STg7lOaHIsHqZU0WGEtvbvXs3GjVq5LCfj6gsMnR+6tSpmD59Onbu3In77rsP6enpqmopZA6giRMn5j//oYceUs26b7/9Nnbt2qWaev/77z+MHz8+PwTdcMMN6j6ptkqTsTQPyyZ96YiITEl3w+HzMvR9zpw5+pYtW/ShQ4cWGz4/cOBA/cMPPyw0fF5Glk2bNk3fsWOHfu+996qvcfz48fznyGgbGT7/888/63v27FEjyPz9/fW9e/dW+89IZCN/x9HR0Wr6Bxn9uHr16vzH+vXrp48YMaLQ83/66Se9ZcuW6vnt2rXT582bl//Yvn371FD5krYlS5ZU689FROQq3G71edldmWDu888/R3JyMnr37o3/+7//Q8uWLfOfIxWekSNHqk/ENh999BHefPNN9em3c+fO+OCDD9RoM3tTpkxREy8mJSWpyeveeOMN9fWJiIjIM7ldECIiIiIyRR8hIiIiIkdiECIiIiLTYhAiIiIi02IQIiIiItPydvYOEJmJDE1ISQFOnpR5fYz75HZSEpCaCnh5AXl5xn2yyXUfHyAry3g8Pd247esLZGQAZ84AublAjRrGazMzjU0eDwoyvp9MESSTpwcHA4GBxnX5uvKcmjUBP7+C/QsLA8LDAW9vWZPPeKxOHeN++b5yv78/oGlOO4RERFWKQYioAiRAnD4NJCfLOnbA0aNGiJH7ZEtMNDYJHxJI5LpMai6PSSiRICPBxZ1JOJKl+yRoyfWAAFneA4iIMMKTBCUJT3JbLmXyaglXUVFGGCMiciUcPk+mJ/8DpEJz5IgRbmQ7fBg4cMAIMhJ05HG5r8hKLeetRqAOXx/jeweFADXDdHWppjfUgJAQHbIEmLePjpxsDT6+ugoeUvmRICXVJAkcATV0eFkkdGkqpPkH6KrSI4+np2kqmHj7GBWctDQg44xROZItKxM4dUrLD2ZGtUpD8ikj8Mm+ZGRqOJko1aeqKQGFhho/gy08STiqX1+WuTHCVXQ00KyZEZ7kObKfRESOxCBEHk2qMvv3G5UbCTUJCcZt2STUyH3HjhnNThUREKAjrCYQWU9HeC0jpAQF6ahVG6hdR1eVEh9fWetOV7eDQ4xqibwuvJYRYtyFvENIMJJwlZtjhKfEBAlVGrKygTPpclw1JJ3UVLObhK2TJzWclFCZaASr5GQNp1MqHqYkGMlcqU2bGiFKlhts1UrWATQek+PMZjoiqgwGIXJL8ld7/Diwb59xKVUcuYyLK6jk2Lby/oVLYKlVW0fNcKlW6GgYraNOhI7QMF31palXX1fBJzTM6F9DFZOWKoFUQ3aW0USYEK8h/riGY0c1FaQS44FDBzUcPKAhJ6d86Ub6LclygO3ayaLJRlVJwpJcl7DkToGTiJyDQYhcjpwkJeDIZgszUtGJjTWapyT02PrhlEdgkI769Y1qTa1aOhpE62jYSEfdukbwqRMBFXp40nQNUlWSSl7qaeDAfg2xey04fEhTTXsJxzXs3a1h7x7tnM110qzWuLERjBo2BDp3Brp0Me6T/kvS/MZqEhExCFG1keAizVESaKRqY+uPc+gQsHev0UQlt2UkVHlYLDqiGuioGwkVaCTkNGpshBw5+cl9EZHGdZ7wPC8spacZI+v2xVoQs0vDnt3SDKchPl5DzA5NNeGVRTpyX3ihEZCkn5I0tXXtavRbIiLzYBCiSpP+I9KhWKo2e/YU7nQsfXEk+NhGTpVXaKgRaurUNfrUREQYt6WaI4FH+uVIAGITFZXadHrMqChJOIrdq2H7Vgu2b9MQf0xTfZZKI6FImtqkA7c0sV10kRGYZOoBIvI8DEJU5qduGSYuI6akgiNVG+mHI7el07EEHGm+OnWq/P1wvLx0RDcyttp1oAJNRF0djZsY1R0ZZi2VHOlcTOQoMgfTzu0aNm80qkmJ8Rri4jTE7JQO38VDknR0l1FuUjXq1g24+GLjUprcpJ8SEbkvBiETkt+4VHAk1Ng2qebIpW0UlVR2pMlKwlB5Sahp0tQINLZOxw0a6GjUxOhkHB5udDSWkwqRq/ZP27ZFU5WkY0c0bN1iwYb/LDh6pOQKkjS5ynD/Pn2MrVMnow+SBHoicg8MQiYgYWbbNmDpUmNbtswIQuUlnY1lFFWTZkanY2mqktAjVR1prqodYYyqklmHiTyRTBcgHbb379Owbo0F61YblaTs7JIDUpMmQP/+Rjhq3dqYAkA6Z5PrkL6IL70E/P038PHHRvMnmRODkAd/spXQ89tvxiYVn6KkQiN9cOrUMfrbSBOVDCGXTZqqJOhI6LFfgoGICj5gnEiEqhqt+deCtastiIvV1LQAJZF+R5dcAvTqBbRoYfQ/4khF53n9deCpp4zrgwYBf/3l7D0iZ2EQ8iDSZ8cWfFauLDy8XGYy7nGRFb16W9GrjxXtOxqT/hFR1c+XtHaNBf+usGDDemlms+DIoeLhSDpfDxkCDBhgVCM6djRm06bqcfPNwI8/Ftzetcuoast7Z8+eRhWPzIFByI3JXCtLlgALFhifZnbuLPx4VEMdlw7Ow+DLjfDD4EPkHDLAQILRyuUW7NxuUfMgyUzcRQcSdOyo4YorCjpjy9QP5BjSn2vLFunnpUPXjd+FzPwu81N5e+v4/XcNgwc7ey+pOjAIuRkZvbVoETB/PvDnn8b6UfZvpD0vtmLwFVYMvNSKps10zp9D5ILkXXfLJg1//WnBxvUWbNpgwckTxf+zSkfsvn2Byy4DOnQwqhQcpVY1U35IRS4rC/h6RjbuudMHeXmFj7+fn44rrtCwaZOs/QdMmADceafTdpkcyG2CUP/+/TFy5Ei1me0/7Pr1wNy5wJw5RqdnezIaa9Bleeh/iRW9+1rV+ldE5F7kXfjoEeDflRYs+9sLmzbI7NnFh1fKvFnSCfuWW4yO2NIpm6MwK06mApF+Wv7+OmKPZuHz//PCN1954eprrXhwQi7uu8cHfy0ovuLv9dcbk27KYBOp2g0dyuPvCRiEXJD8J/vjDyP8SPVH5umxr/p06aqj7wArLhuSh46ddf5HJPJAKclQ1aJFC42K0a6dGtJSC1ctZLHfCy4Ahg8HbrzRWDqEzk3eWyXEtOtgxeKVxdfqyc0Fvv3aS61717GzFTE7LXj/ba/8JjQb6fj++ONGqJIJOGX0LKvw7ocDnl1k9IlUfaS5S/r6rFqlFyrThoTq6DfAiiFX5mHgIKuan4eIPJvMuSWVXtmEfGSVGbLn/GrBn394qckf09I0LF8OtT3wQMGaatIB+7bbGIzKqgiJZs1LrgNIp+m7RufZ3SNdDvIwY7oXsnM0+Pro+PUXL/z7r4brrit4lowEfPpp4PLLZXZ8VovcBStCTiIzNsvwdunnI59Oig5vb9POiiFXWDFocB46ddE5Rw8RFatayHD9ZX9b8PNML2zZVPisKx1+u3XT1EKz0pxz9dXG+moEPPYY8PbbwJhxuXjh1dzz+hpHDgMfvuuNVf9Y1GLARde2k0V/ZfTZ3XcDt97KaUhcmcsGoVdffVVtNhkZGfDx8YG3XSLYsWMHomXOezcRF2cMbZ89G1ixonDVRyYt7D/A+PQnzV4yUSERUXmdTgF2nF02ZM6vXmpGbHs+PjquuUZTfVukaiThSDoBm5FUy77/Hpj8Ug7uf9C+8lO5psxpX3jhy8+9i80lFRZmNJ/Jds01wLXXMhi5EpcNQklJSWqzue222zBs2DBcL73VzmrcuHGhYORqZESCzFoqFR+p/Mi6XPaat7Cidz8rLh1ixcV9rJxcjYiqzL5YDRs3aNi62YJ/lluwZbOl2KioG27QVN8i6WcUFWWe/i3SdCgV+Y+nZmPYjRVYR6gC7/2yRMtvcyz46nNvHDta+MDKLONXXWUEIxkVKOGUzWjO47JByF2bxqTqM28esHixsdkPb1el6ot0DLkiTzV7yRpcRETVQdZQW7jAgm2bLdiyxYLDB4ufnGUOozFjgIsuMpp2PJUsexITA/zyW7YabetIOTnAjm2aWq9OOr//8qNXsbXrZPSfBNLu3YH27Y2AZJZQ6goYhCpJZm9evdro5CzD27duLfx43Ugdgy/Pw6UyqeHFVgQGOWtPiYgM8q6/eaOG77/1UkuD7InRCjXV16hhzFskzWcyd46coD3pxCxNgqmpwIp1WWjRUq/2vl1L/7aoeaT2xFjUXFJFRwNKjw+pGEm/Lpkuga0FjsUgdB6kxU5mc5a+PjLSq+ikhj16WTFgoBV9+ls5vJ2I3GKWeglGP3znhbmzvHAmvfCJuU0bYxkQCUdyYpbr7hqMZB1GmXZA7DmUieAQ5y/+unC+BYv/8sLuXZoaDZiZWXBwZQJN6fAuI9GuvNIIpzynmDQIOZMcIRneLhUfCT4bNhRMyS5q1dbRp58Vl1yWh0GXcXg7Ebn3JK4yGm37Vk2dnOf+akFWVuHUI0FIho3LQrISjqRpx12CkW0yxYAaOuKOZrncfkswkqVYFi2QapFXsf5FMiWCzDQuC8VKOOIUCZXHIHSOqo9MaCjNXocPF368VRtjePvgK/PQuQurPkTkue+Fa1dZsHOHhq2bjAkes7OLB6Nx44wJBps2NebhcVUy51K/fkCTplas2lh8MkVXImfnw4ckGHlh0Z8WLFtSuBnNYtHRs6eG3r2NofoSjmTpEKoYBqGz5Chs3250cJZRXsuWFR7eLqu3D7jEmFSrb38rIus5dXeJiJzixAngfz8a8xZJM07MLg05OQXvlb6+Orp00XD//cBNN7neMHFZcV5Wnr+olxWz57t2ECqpT6r06Vqx1IIli0oaCVhQKZJQ2rFj9XZ6P378OF555RXMmzcPR44cQUREBDp37oyHH34YK1aswAsvvFDqa59//nk899xzcAZTByEZ4rhsmdHXR5q9ik5q2LqtVc3kLM1ePXtzeDsRUVEnTwLffe2FeXO9sGe3plZvtyfLTshK73fcYczf4+xg9O67xgKqQ6/Pw2df58CdSbVI1qbbuF7DimUWHNhfOBiFhxsjAaXTtUwZ4MgJNffv34+LL74YYWFhePHFF9GhQwfk5OTgzz//xOeff47//vsPafYdas+aOHEiZs+ejbVr16KFtFk6gemC0P79RuiRIe4rV8pEjQWPBQTo6NHTin4Drbj8SisaNzXVoSEiqvRyQYcOapjzP4uaWDD+eOFQFBlpVClkqL5ULpwRjJ54AnjzTeDe+3Px4mvnN6u0K5IzuVTnFv5hUbNd/7fOgtTTxTu9Dx5shCOZv6gqj/0VV1yBLVu2ICYmBoFF2ueSk5NVQCpqxowZGDFihKogDZYdcxKPD0IyGkKqPra+Pps3F348oq4xvH3IVcbq7c7+tEJE5CmhSPoXJcZLp2sLvvys+MSCjRsDt9xizLwsQ8ZlVFRwsGP36/bb5QQMPPtiDsY9VDWzSrsiGaa/bo2GvxZ4qeMvC8fakykSZCLHgQOBIUOMqt35dhyXyY9r166tmsWkwlMe69evR58+fVT16DFZ88SJPDYISeXn0UeB33/PRna2r90jefD1XQM//4Xw81sGb+/dLjdqgIjI0+i6D7KyLobVWht5eQ1wJv12WK2FO1taLEkIDn4fvr4bVYXDx2cXLJYzVbofJ07MRFZWb4SGPYAaNX6FWVitNZGV1RNZWQORlTkQVmvdQo9bLPHo2jUR//zTXg3Zrwhp1urRowd+/fVXXGe/Cm0pEhIScOGFF6Jfv3749ttv4Wwu3Le/cqRdWjo95+ZKCDoCYAGAvwH8iezsk6rTWaqzd5KIyFQO2F1/HsAtALoDkA6YEpKaISXFvkOt9Cl5C8AU6Sosp2v1YbZyaql/U5J3ICW5SMdQjyY/63YAX0gNRBrKZLERAJcBMILR/v1ahUOQqEg9RfoN3XDDDahbty6mTp0KV+CxQSg0FJBjvHnzd/jpp6fsqj7yHy7KuTtHRERnP6AuOHsy9UZ6+q04c+YWWK2h0HV/WK0RZwPTpLMhKAcBAXMQEvoSLJbk8/qOx4/VV9WmiIg8+PiY+VyQAmC22nTdF1lZ3XD11RJMr63wV5JOzpqmYdeuXed87oMPPog9e/Zg3bp18HeREUge2zRGRETuS85MMtT9ySeBgweLL13UsbMV+/dpaNRYx+MTc9Gpi16uyQqb1jNOvqdOGX2TqGpcfvnl2Lp1a5mdpWX02AMPPIAlS5agl4zvdxEMQkRE5NIzXe/ebXSijo0FRo0yLu3JiN8HH81F0kkNW7dYcPW1ebjrnjw10a2MDM7MgJrxf3+chou6+CEgwFhqg/1Dq05cXJwaPh8eHq46QHfs2BG5ubn466+/8Mknn+CLL77AwIEDMXnyZIySX2IRAQEBCJWmHCdgECIiIrcaCfzzz9LhFmjUCPjiC+DPP4s/7/4Hc1UgGnGLr1pg9dsfc9RMzNdf6admvy4apqjyjh07pkaO/f777+p6nTp10LVrVzzyyCOYPn06pk2bVuprZRh9WY87EoMQERG5rZwcY14gaUZr2dLoH/rll8WfFxyi49778/D2FG+1svtvvzljb8kVMQgREZFHkZUaXnzRuC4zKkvT2hEZPHzWK68Ak6T/NdHZbvhEREQeQ5a0WrcOmD4dWLgQeOSRwo/LAqVENqwIERGRR5P+RHXt5g+UPkNBQc7cI3IlrAgREZFHi4gAVq0CmjcHRo5kCKLCWBEiIiIi03L5ipCsThsUFJS/rVixwtm7RERERB7C5StCqampiI+Pz78dFRWlJl4iIiIi8vggRERERGTapjEiIiIiR2EQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNiECIiIiLTYhAiIiIi02IQIiIiItNymyDUv39/TJs2zdm7QURERB7EbYIQERERUVVjECIiIiLTYhAiIiIi09J0Xdfhgl599VW12WRkZMDHxwfe3t759+3YsQPR0dFO2kMiIiJydy4bhJKSktRmc9ttt2HYsGG4/vrr8+9r3LhxoWBEREREVBEumyLCw8PVZhMQEICIiAg0b97cqftFREREnoN9hIiIiMi0GISIiIjItFy2jxARERGRo7EiRERERKbFIERERESVMnLkSGiaVmwbMmQIjh49ipo1a+KDDz4o9Jo1a9aoaXEWLlyIl156CfXq1Ss0Wlxs3rwZfn5++P333+EobBojIiKiSgeh+Ph4fP3114XulxAjIei7777DmDFjsGnTJrRo0ULNDdilSxcMGDAAn3zyCXJzc9GrVy80a9YMP/zwg3ptTk4OunXrhq5du+LLL7+Eo7AiRERERJUmoScyMrLQJiFI3H777Rg8eLAKTFarFRMnTlRB580331SPy5yA33zzDWbPno1ffvlF3ffKK68gOTkZ7777Lkw5jxARERF5jk8//RTt27dXEyT//PPP+PvvvxEUFJT/eOvWrfHaa6/hvvvuQ3BwsLq+YMEChISEOHS/PD4IvfPOO2ojIiKi0k2YMEFt50v68dgHGzFp0iS1CZkUWfoCjR07VoWdvn37FvsaDz30EObMmYMrrrgCDzzwgGo6czSPD0KnT5/GkSNHnL0bRERELn++rAxbfx979itE5OXlYdq0aahRowZWr16t+gUVXSZLOlg//fTTWLp0KZ555hlUB48PQlJSi4qKcvZuEBERubSQSjZBBQYGlrkM1ltvvYW4uDj8999/6Nevn1pYffLkycWeZwtH1bWWqMcHocqW+oiIiKhytm/fjueeew7ff/892rRpoypHt9xyC6699lp07NgRzuTxQYiIiIgcLysrC8ePHy90n1R1wsLCMGLECFx//fVqE8OGDVObjCJbu3ZttVV/SsIgRERERJUmI7xkUkR7rVq1wq233qr66srEifY+/vhjtGvXrtQmsurCCRWJiIjItDihIhEREZkWgxARERGZFoMQERERmRaDEBEREZkWgxARERGZlssHoRkzZqi1S2zbihUrnL1LRERE5CFcfvh8amoq4uPj82/LchkBAQFO3SciIiLyDC4fhIiIiIhM2zRGRERE5CgMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkRERGRaDEJERERkWgxCREREZFoMQkQu6pNPPkHHjh0REhKitp49e2L+/Pnleu3MmTOhaRquvfbaYo/t3LkT11xzDUJDQxEYGIhu3brh4MGDDvgJiIhcH4MQkYtq0KABpkyZgvXr1+O///7DwIEDMXToUGzfvr3M1+3fvx+PPfYY+vTpU+yx2NhY9O7dG61bt8bSpUuxZcsWPPvss/D393fgT0JE5Lo0Xdd1Z+8EEZVPeHg43nzzTYwaNarEx/Py8tC3b1/cfffdWLFiBZKTkzF79uz8x2+++Wb4+Pjg22+/rca9JiJyXawIEbkBCTjS3JWenq6ayErz4osvIiIiosSgZLVaMW/ePLRs2RKDBw9Wz+vRo0ehoEREZDYMQkQubOvWrQgKCoKfnx/Gjh2LWbNmoW3btiU+d+XKlfjyyy8xderUEh9PSEhAWlqaam4bMmQIFi5ciOuuuw7XX389li1b5uCfhIjINXk7eweIqHStWrXCpk2bkJKSgl9++QUjRoxQoaVoGEpNTcUdd9yhQlDt2rVL/FpSERLSz+iRRx5R1zt37ox///0Xn376Kfr161cNPxERkWthECJyYb6+vmjevLm63rVrV6xbtw7vv/8+Pvvss2KdoKWT9NVXX10s+Hh7eyMmJgYNGzZU14uGqDZt2qhqEhGRGTEIEbkRCTdZWVnF7pdR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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib.patches import FancyArrowPatch\n", "from matplotlib import patheffects\n", "import matplotlib.pyplot as plt\n", "\n", "\n", "def get_max_zorder(ax) -> int:\n", " \"\"\"Return the maximum zorder value among all artists in the given Axes.\"\"\"\n", " return max([_.zorder for _ in ax.get_children()])\n", "\n", "\n", "def add_concentrated_bending_moment(\n", " ax,\n", " x, y,\n", " radius=0.45,\n", " theta1=-90,\n", " theta2=90,\n", " direction=\"cw\",\n", " color=\"brown\",\n", " linewidth=2.5,\n", " head_length=10,\n", " head_width=8,\n", " n=80,\n", " head_arc_deg=10.0, # <- reserve this many degrees for the arrowhead\n", " label=None,\n", " label_offset=(0.0, 0.08),\n", " tick_size=0.15,\n", " tick_width=1.5,\n", ") -> FancyArrowPatch:\n", " \"\"\"Draws a concentrated bending moment symbol on the given Axes.\"\"\"\n", " # Convert angles to radians\n", " t1 = np.deg2rad(theta1)\n", " t2 = np.deg2rad(theta2)\n", "\n", " # Reserve a small angle for the arrowhead so the tip reaches the arc end visually\n", " dth = np.deg2rad(head_arc_deg)\n", "\n", " if direction.lower() == \"cw\":\n", " # head at theta2, so stop arc early at (theta2 - dth)\n", " ts_arc = np.linspace(t1, t2 - dth, n)\n", " th_end = t2\n", " th_prev = t2 - dth\n", " elif direction.lower() == \"ccw\":\n", " # head at theta1, so start arc late at (theta1 + dth)\n", " ts_arc = np.linspace(t1 + dth, t2, n)\n", " th_end = t1\n", " th_prev = t1 + dth\n", " else:\n", " raise ValueError(\"direction must be 'cw' or 'ccw'\")\n", "\n", " # Arc polyline (no head)\n", " xs = x + radius * np.cos(ts_arc)\n", " ys = y + radius * np.sin(ts_arc)\n", " ax.plot(xs, ys, color=color, linewidth=linewidth, solid_capstyle=\"round\", zorder=5)\n", "\n", " # Arrowhead: tangent segment over the reserved angle\n", " end = np.array([x + radius * np.cos(th_end), y + radius * np.sin(th_end)])\n", " prev = np.array([x + radius * np.cos(th_prev), y + radius * np.sin(th_prev)])\n", "\n", " # Arrowhead patch\n", " head = FancyArrowPatch(\n", " prev, end,\n", " arrowstyle=f\"-|>,head_length={head_length},head_width={head_width}\",\n", " linewidth=0,\n", " facecolor=color,\n", " edgecolor=color,\n", " shrinkA=0, shrinkB=0,\n", " zorder=6,\n", " )\n", " ax.add_patch(head)\n", " \n", " # vertical tick on the beam, at the point of application\n", " ax.plot(\n", " [x, x],\n", " [-tick_size/2, tick_size/2],\n", " color='black',\n", " linewidth=tick_width,\n", " solid_capstyle='butt'\n", " )\n", "\n", " # label\n", " if label:\n", " ax.text(\n", " x + label_offset[0],\n", " y + radius + label_offset[1],\n", " label,\n", " ha=\"center\",\n", " va=\"bottom\",\n", " color=color,\n", " fontsize=12\n", " )\n", "\n", " return head\n", "\n", "\n", "def add_hinge(ax, x, y, s=20, fc='white', ec='k', lw=1, zorder=None, **kwargs):\n", " if zorder is None:\n", " zorder = get_max_zorder(ax) + 1\n", " ax.scatter(x, y, s=s, fc=fc, ec=ec, lw=lw, alpha=1.0, zorder=zorder, **kwargs)\n", "\n", "\n", "def add_triangle_support(ax, xy, w, h, hinge_params={}):\n", " x = [xy[0] - w/2, xy[0] + w/2]\n", " y = [xy[1] - h, xy[1] -h]\n", " spec = [patheffects.withTickedStroke(angle=-60, spacing=2.5, length=1.5)]\n", " ax.plot(x, y, color='k', path_effects=spec)\n", " x = [xy[0] - w/2, xy[0], xy[0] + w/2]\n", " y = [xy[1] - h, xy[1], xy[1] -h]\n", " ax.plot(x, y, color='k')\n", " add_hinge(ax, xy[0], xy[1], **hinge_params)\n", "\n", "\n", "num_fig = len(result_components) + 1\n", "figzise_y = 3.0 + 1.0 * (num_fig - 1)\n", "fig, axs = plt.subplots(num_fig, 1, figsize=(7.12, figzise_y), height_ratios=[1.5] + [0.5]*(num_fig-1), sharex=True)\n", "beam_length = 10.0\n", "\n", "# Draw the beam as a thick line\n", "axs[0].plot([0, beam_length], [0, 0], color='black', linewidth=2, solid_capstyle='butt')\n", "\n", "# x axis\n", "axs[0].annotate(\n", " \"\",\n", " xy=(1, 0),\n", " xytext=(0, 0),\n", " arrowprops=dict(arrowstyle='->', color='r'),\n", " fontsize=10\n", ")\n", "axs[0].text(\n", " 0.5,\n", " 0.1,\n", " r\"$x$\",\n", " ha=\"center\",\n", " va=\"bottom\",\n", " color=\"r\",\n", " fontsize=12\n", ")\n", "\n", "# y axis\n", "axs[0].annotate(\n", " \"\",\n", " xy=(0, 1),\n", " xytext=(0, 0),\n", " arrowprops=dict(arrowstyle='->', color='g'),\n", " fontsize=10\n", ")\n", "axs[0].text(\n", " -0.3,\n", " 0.3,\n", " r\"$y$\",\n", " ha=\"center\",\n", " va=\"bottom\",\n", " color=\"g\",\n", " fontsize=12\n", ")\n", "\n", "# z axis\n", "axs[0].annotate(\n", " \"\",\n", " xy=(-0.7, -0.6),\n", " xytext=(0, 0),\n", " arrowprops=dict(arrowstyle='->', color='b'),\n", " fontsize=10\n", ")\n", "axs[0].text(\n", " -0.8,\n", " -1.0,\n", " r\"$z$\",\n", " ha=\"center\",\n", " va=\"bottom\",\n", " color=\"b\",\n", " fontsize=12\n", ")\n", "\n", "# distributed load\n", "distributed_load_height = 0.8\n", "axs[0].plot(\n", " [a+b, a+b+c], \n", " [distributed_load_height, distributed_load_height], \n", " color='purple', \n", " linewidth=1, \n", " solid_capstyle='butt'\n", ")\n", "for i in range(4):\n", " axs[0].annotate(\n", " \"\",\n", " xy=(a+b + i*c/3, distributed_load_height),\n", " xytext=(a+b + i*c/3, 0),\n", " arrowprops=dict(arrowstyle='<-', color='purple', shrinkA=0, shrinkB=0),\n", " fontsize=10,\n", " )\n", "axs[0].text(\n", " a+b+c/2,\n", " distributed_load_height + 0.08,\n", " r\"$q$\",\n", " ha=\"center\",\n", " va=\"bottom\",\n", " color=\"purple\",\n", " fontsize=12\n", ")\n", "\n", "# concentrated load\n", "concentrated_load_height = 1.2\n", "axs[0].annotate(\n", " \"\",\n", " xy=(a, concentrated_load_height),\n", " xytext=(a, 0),\n", " arrowprops=dict(arrowstyle='<-', color='brown', linewidth=2, shrinkA=0, shrinkB=0),\n", " fontsize=10,\n", ")\n", "axs[0].text(\n", " a,\n", " concentrated_load_height + 0.1,\n", " r\"$F$\",\n", " ha=\"center\",\n", " va=\"bottom\",\n", " color=\"brown\",\n", " fontsize=12\n", ")\n", "\n", "# concentrated bending moment\n", "moment_tick_size = 0.15\n", "add_concentrated_bending_moment(\n", " axs[0],\n", " x=a+b+c+d, y=0.0, # slightly above beam\n", " radius=0.42,\n", " theta1=-100, theta2=120, # near-semicircle\n", " direction=\"cw\", # makes the head appear on the left like your screenshot\n", " color=\"brown\",\n", " linewidth=2.0,\n", " head_length=8,\n", " head_width=3,\n", " head_arc_deg=30,\n", " label=r\"$M$\",\n", " label_offset=(0.0, 0.15),\n", " tick_size=moment_tick_size\n", ")\n", "\n", "# left support\n", "add_triangle_support(axs[0], (0, 0), 0.5, 0.4)\n", "\n", "# right support\n", "add_triangle_support(axs[0], (beam_length, 0), 0.5, 0.4)\n", "\n", "# dimension lines\n", "dimension_line_y = -1.1\n", "dimension_segments = [\n", " (0, a, \"a\"),\n", " (a, a+b, \"b\"),\n", " (a+b, a+b+c, \"c\"),\n", " (a+b+c, a+b+c+d, \"d\"),\n", " (a+b+c+d, a+b+c+d+e, \"e\"),\n", "]\n", "arrows = '<->', '|-|'\n", "for segment in dimension_segments:\n", " for arr in arrows:\n", " arrowprops=dict(arrowstyle=arr, shrinkA=0, shrinkB=0)\n", " if arr == '|-|':\n", " arrowprops[\"mutation_scale\"] = 5\n", " axs[0].annotate(\n", " \"\", \n", " xy=(segment[0], dimension_line_y), \n", " xytext=(segment[1], dimension_line_y), \n", " arrowprops=arrowprops\n", " )\n", " bbox=dict(fc=\"white\", ec=\"none\")\n", " axs[0].text((segment[0] + segment[1]) / 2, dimension_line_y, segment[2], color=\"black\", \\\n", " ha=\"center\", va=\"center\", bbox=bbox, fontsize=10)\n", "\n", "# formatting of the first plot\n", "axs[0].set_xlim(-1, beam_length + 1)\n", "axs[0].set_ylim(-3, 2)\n", "axs[0].axis('off')\n", "\n", "# beam parameters text\n", "params_text = f\"a = ${a}$ m, b = ${b}$ m, c = ${c}$ m, d = ${d}$ m, e = ${e}$ m, \\n\" + \\\n", " f\"$F$ = ${F}$ kN, $M$ = ${M}$ kNm, $q$ = ${q}$ kN/m \\n\" + \\\n", " f\"$E$ = ${E}$ kN/m², $I$ = ${I}$ m⁴\"\n", "axs[0].text((-1 + beam_length + 1) / 2, dimension_line_y - 1.3, params_text, color=\"black\", \\\n", " ha=\"center\", va=\"center\", fontsize=10)\n", "\n", "# plot the results\n", "for i, comp in enumerate(result_components):\n", " # get the component results\n", " comp_results = df_results[comp]\n", " \n", " # draw the beam as a thick line\n", " axs[i + 1].plot([0, beam_length], [0, 0], color='black', linewidth=2, solid_capstyle='butt')\n", " \n", " # plot the normalized result\n", " comp_y = comp_results / comp_results.abs().max()\n", " axs[i + 1].plot(points, comp_y, color='blue', linewidth=1.5, label=f'Normalized {comp}')\n", " axs[i + 1].fill_between(points, comp_y, alpha=0.1)\n", " \n", " # component label on the right side\n", " axs[i + 1].text(beam_length + 0.3, 0, comp, fontsize=10, va='center', ha='left', color='black')\n", " \n", " # plus and minus signs on the left side\n", " axs[i + 1].text(-0.3, 0.4, \"+\", fontsize=10, va='center', ha='center', color='black')\n", " axs[i + 1].text(-0.3, -0.4, \"-\", fontsize=10, va='center', ha='center', color='black')\n", " \n", " # label the maximum absolute value point\n", " if comp_results.abs().max() > 0:\n", " arg_abs_max = np.argmax(comp_results.abs())\n", " sign = np.sign(comp_results.iloc[arg_abs_max])\n", " comp_label_offset = 0.4 * sign\n", " axs[i + 1].text(\n", " points[arg_abs_max], \n", " comp_results.iloc[arg_abs_max] / comp_results.abs().max() + comp_label_offset, \n", " f\"{comp_results.iloc[arg_abs_max]:.2f}\",\n", " fontsize=10, \n", " va='center', \n", " ha='center', \n", " color='black'\n", " )\n", " \n", " # formatting\n", " axs[i + 1].set_xlim(-1, beam_length + 1)\n", " axs[i + 1].set_ylim(-1.1, 1.1)\n", " axs[i + 1].axis('off')\n", "\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "sigmaepsilon-solid-fourier-v2i8RJdg-py3.12", "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.7" } }, "nbformat": 4, "nbformat_minor": 5 }