From 508a4f2aac4e8162f2ecbe1a1f7ebf13829b9ae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Sun, 8 Nov 2020 17:36:55 +0100 Subject: [PATCH 01/14] docs: Remove tutorial 02 part 2 --- doc/sphinx/introduction.rst | 2 +- .../02-charged_system-2.ipynb | 502 ------------------ .../02-charged_system/CMakeLists.txt | 16 +- .../02-charged_system/figures/nacl-rdf.pdf | Bin 8442 -> 0 bytes .../02-charged_system/figures/nacl_units.jpg | Bin 88931 -> 0 bytes .../figures/nacl_units_confined.jpg | Bin 116946 -> 0 bytes .../02-charged_system/figures/salt.png | Bin 262543 -> 0 bytes .../02-charged_system/scripts/nacl.py | 158 ------ .../02-charged_system/scripts/nacl_units.py | 172 ------ .../scripts/nacl_units_confined.py | 183 ------- .../scripts/nacl_units_confined_vis.py | 179 ------- .../scripts/nacl_units_vis.py | 182 ------- doc/tutorials/Readme.rst | 2 +- testsuite/scripts/tutorials/CMakeLists.txt | 6 - .../tutorials/test_02-charged_system-2.py | 43 -- .../test_02-charged_system__scripts__nacl.py | 37 -- ..._02-charged_system__scripts__nacl_units.py | 42 -- ...ed_system__scripts__nacl_units_confined.py | 40 -- ...ystem__scripts__nacl_units_confined_vis.py | 43 -- ...charged_system__scripts__nacl_units_vis.py | 43 -- 20 files changed, 3 insertions(+), 1647 deletions(-) delete mode 100644 doc/tutorials/02-charged_system/02-charged_system-2.ipynb delete mode 100644 doc/tutorials/02-charged_system/figures/nacl-rdf.pdf delete mode 100644 doc/tutorials/02-charged_system/figures/nacl_units.jpg delete mode 100644 doc/tutorials/02-charged_system/figures/nacl_units_confined.jpg delete mode 100644 doc/tutorials/02-charged_system/figures/salt.png delete mode 100644 doc/tutorials/02-charged_system/scripts/nacl.py delete mode 100644 doc/tutorials/02-charged_system/scripts/nacl_units.py delete mode 100644 doc/tutorials/02-charged_system/scripts/nacl_units_confined.py delete mode 100644 doc/tutorials/02-charged_system/scripts/nacl_units_confined_vis.py delete mode 100644 doc/tutorials/02-charged_system/scripts/nacl_units_vis.py delete mode 100644 testsuite/scripts/tutorials/test_02-charged_system-2.py delete mode 100644 testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl.py delete mode 100644 testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units.py delete mode 100644 testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_confined.py delete mode 100644 testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_confined_vis.py delete mode 100644 testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_vis.py diff --git a/doc/sphinx/introduction.rst b/doc/sphinx/introduction.rst index 03b7d18ba4e..cec7d28561c 100644 --- a/doc/sphinx/introduction.rst +++ b/doc/sphinx/introduction.rst @@ -292,7 +292,7 @@ directory :file:`/doc/tutorials` or `online on GitHub shape, in our case a simple plane defined by its normal vector and the distance from the origin, \n", - "second the particle_type, which is used to set up the interaction between particles and constraints." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Walls\n", - "system.constraints.add(shape=Wall(dist=wall_margin, normal=[0, 0, 1]),\n", - " particle_type=types[\"Electrode\"])\n", - "system.constraints.add(shape=Wall(dist=-(box_z - wall_margin), normal=[0, 0, -1]),\n", - " particle_type=types[\"Electrode\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we place the particles at random position without overlap with the walls:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Place particles\n", - "for i in range(int(n_ionpairs)):\n", - " p = numpy.random.random(3) * box_l\n", - " p[2] += lj_sigmas[\"Electrode\"]\n", - " system.part.add(id=len(system.part), type=types[\"Cl\"],\n", - " pos=p, q=charges[\"Cl\"], mass=masses[\"Cl\"])\n", - "for i in range(int(n_ionpairs)):\n", - " p = numpy.random.random(3) * box_l\n", - " p[2] += lj_sigmas[\"Electrode\"]\n", - " system.part.add(id=len(system.part), type=types[\"Na\"],\n", - " pos=p, q=charges[\"Na\"], mass=masses[\"Na\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The scheme to set up the Lennard-Jones interaction is the same as before, \n", - "extended by the Electrode-Ion interactions:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Lennard-Jones interactions parameters\n", - "\n", - "def combination_rule_epsilon(rule, eps1, eps2):\n", - " if rule == \"Lorentz\":\n", - " return (eps1 * eps2)**0.5\n", - " else:\n", - " return ValueError(\"No combination rule defined\")\n", - "\n", - "def combination_rule_sigma(rule, sig1, sig2):\n", - " if rule == \"Berthelot\":\n", - " return (sig1 + sig2) * 0.5\n", - " else:\n", - " return ValueError(\"No combination rule defined\")\n", - "\n", - "for s in [[\"Cl\", \"Na\"], [\"Cl\", \"Cl\"], [\"Na\", \"Na\"],\n", - " [\"Na\", \"Electrode\"], [\"Cl\", \"Electrode\"]]:\n", - " lj_sig = combination_rule_sigma(\"Berthelot\",\n", - " lj_sigmas[s[0]], lj_sigmas[s[1]])\n", - " lj_cut = combination_rule_sigma(\"Berthelot\",\n", - " lj_cuts[s[0]], lj_cuts[s[1]])\n", - " lj_eps = combination_rule_epsilon(\"Lorentz\",\n", - " lj_epsilons[s[0]], lj_epsilons[s[1]])\n", - "\n", - " system.non_bonded_inter[types[s[0]], types[s[1]]].lennard_jones.set_params(\n", - " epsilon=lj_eps, sigma=lj_sig, cutoff=lj_cut, shift=\"auto\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next is the Lennard-Jones equilibration, followed by the thermostat:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "energy = system.analysis.energy()\n", - "print(\"Before Minimization: E_total = {:.3e}\".format(energy['total']))\n", - "system.integrator.set_steepest_descent(f_max=10, gamma=10,\n", - " max_displacement=0.01)\n", - "system.integrator.run(2000)\n", - "system.integrator.set_vv()\n", - "energy = system.analysis.energy()\n", - "print(\"After Minimization: E_total = {:.3e}\".format(energy['total']))\n", - "\n", - "# Set thermostat\n", - "system.thermostat.set_langevin(kT=temp, gamma=gamma, seed=42)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As described, we use P$^3$M in combination with ELC to account for the 2D-periodicity. \n", - "ELC is also added to the actors of the system and takes *gap size* and *maximum\n", - "pairwise errors* as arguments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Tuning Electrostatics\n", - "p3m = electrostatics.P3M(prefactor=l_bjerrum * temp,\n", - " accuracy=1e-2)\n", - "system.actors.add(p3m)\n", - "elc = electrostatic_extensions.ELC(gap_size=elc_gap,\n", - " maxPWerror=1e-3)\n", - "system.actors.add(elc)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For now, our electric field is zero, but we want to switch it on later.\n", - "Here we run over all particles and set an external force on the charges caused \n", - "by the field:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for p in system.part:\n", - " p.ext_force = [0, 0, Ez * p.q]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is followed by our standard temperature equilibration:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Temperature Equilibration\n", - "system.time = 0.0\n", - "for i in range(int(num_steps_equilibration / 100)):\n", - " energy = system.analysis.energy()\n", - " temp_measured = energy['kinetic'] / ((3.0 / 2.0) * n_part)\n", - " print(\"progress={:.0f}%, t={:.1f}, E_total={:.2f}, E_coulomb={:.2f}, T={:.4f}\"\n", - " .format(i * 100. / int(num_steps_equilibration / 100 - 1), system.time,\n", - " energy['total'], energy['coulomb'], temp_measured), end='\\r')\n", - " system.integrator.run(100)\n", - "\n", - "print()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the integration loop, we like to measure the density profile for both ion species along the $z$-direction.\n", - "We use a simple histogram analysis to accumulate the density data. Integration takes a while." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Integration\n", - "bins = 100\n", - "z_dens_na = numpy.zeros(bins)\n", - "z_dens_cl = numpy.zeros(bins)\n", - "system.time = 0.0\n", - "cnt = 0\n", - "\n", - "for i in range(num_configs):\n", - " print('progress: {:>3.0f}%'.format(i * 100. / num_configs), end='\\r')\n", - " energy = system.analysis.energy()\n", - " temp_measured = energy['kinetic'] / ((3.0 / 2.0) * n_part)\n", - " system.integrator.run(integ_steps_per_config)\n", - "\n", - " for p in system.part:\n", - " bz = int(p.pos[2] / box_z * bins)\n", - " if p.type == types[\"Na\"]:\n", - " z_dens_na[bz] += 1.0\n", - " elif p.type == types[\"Cl\"]:\n", - " z_dens_cl[bz] += 1.0\n", - " cnt += 1\n", - "\n", - "print('progress: 100%')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, we calculate the average, normalize the data with the bin volume and save it to\n", - "a file using NumPy's savetxt command." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Analysis\n", - "\n", - "# Average / Normalize with Volume\n", - "z_dens_na /= (cnt * box_volume / bins)\n", - "z_dens_cl /= (cnt * box_volume / bins)\n", - "z_values = numpy.linspace(0, box_l, num=bins)\n", - "res = numpy.column_stack((z_values, z_dens_na, z_dens_cl))\n", - "numpy.savetxt(\"z_density.data\", res,\n", - " header=\"#z rho_na(z) rho_cl(z)\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally we can plot the density of the ions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "plt.ion()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.figure(figsize=(10, 6), dpi=80)\n", - "plt.plot(z_values, z_dens_na, label='Na')\n", - "plt.plot(z_values, z_dens_cl, label='Cl')\n", - "plt.xlabel('$z$-axis $(\\\\mathrm{\\\\AA})$', fontsize=20)\n", - "plt.ylabel('Density $(\\\\mathrm{u\\\\AA}^{-3})$', fontsize=20)\n", - "plt.legend(fontsize=16)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The resulting density plot is very noisy due to insufficient sampling, but should show a slight depletion of the smaller Na atoms\n", - "at the walls. Now try to put in an electric field that represents an applied voltage of $15 \\ \\mathrm{V}$ between the walls and compare the results.\n", - "The density data should show strong layering at the walls, decaying towards the system center.\n", - "The complete script is at /doc/tutorials/02-charged_system/scripts/nacl_units_confined.py.\n", - "In the interactive script nacl_units_confined_vis.py, you can increase/decrease the electric field with the keys *u/j* (at your own risk)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - " missing\n", - "
\n", - "
Figure 4: Snapshot and densities along the $z$-axis with applied electric field for the ion species.
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## References\n", - "\n", - "[1] Janz, G. J., Thermodynamic and Transport Properties of Molten Salts: Correlation Equations for Critically Evaluated Density, Surface Tension, Electrical Conductance, and Viscosity Data, *J. Phys. Chem. Ref. Data, 17*, Suppl. 2, 1988" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.8" - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/doc/tutorials/02-charged_system/CMakeLists.txt b/doc/tutorials/02-charged_system/CMakeLists.txt index 73b3e499781..7cac089d979 100644 --- a/doc/tutorials/02-charged_system/CMakeLists.txt +++ b/doc/tutorials/02-charged_system/CMakeLists.txt @@ -2,21 +2,7 @@ configure_tutorial_target( TARGET tutorial_02 DEPENDS - 02-charged_system-1.ipynb - 02-charged_system-2.ipynb - figures/nacl-rdf.pdf - figures/nacl_units_confined.jpg - figures/nacl_units.jpg - figures/salt.png - scripts/nacl.py - scripts/nacl_units_confined.py - scripts/nacl_units_confined_vis.py - scripts/nacl_units.py - scripts/nacl_units_vis.py) + 02-charged_system-1.ipynb) nb_export(TARGET tutorial_02 SUFFIX "1" FILE "02-charged_system-1.ipynb" HTML_RUN) -nb_export( - TARGET tutorial_02 SUFFIX "2" FILE "02-charged_system-2.ipynb" HTML_RUN - VAR_SUBST - "num_steps_equilibration=200;num_configs=50;integ_steps_per_config=100") diff --git a/doc/tutorials/02-charged_system/figures/nacl-rdf.pdf b/doc/tutorials/02-charged_system/figures/nacl-rdf.pdf deleted file mode 100644 index 7a3b6b5f5ea0504b05fbfd3ac1c8510021057c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8442 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 z 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 B#l-*s diff --git a/doc/tutorials/02-charged_system/figures/nacl_units_confined.jpg b/doc/tutorials/02-charged_system/figures/nacl_units_confined.jpg deleted file mode 100644 index 49ebc1cf91a8884bf760f56ca669a0414cbef50a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116946 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 z z12X-3Ps5`0kNEQ_UF#lJs!*;qOI(-RaQ0n|=|HqtqEUXwIL0kZET<~rA9Eei8u~R+ zi->Uyok3V_7|QL`6(l$(qo5?R1E#FG%{`BZsNA@CFW}#O054uN7v(|-OdwSBw#a*j zzqV45{i`orj!b8QuM$+SNu>A)&A`crBE$s3VXD9T{mzpUQWUCX_0IE%gcH=o^Pn5? zPCV{LAN{-e8RG^v(#d)d!h$s1d%waiPoOrrKG`e!_|Y!QyvhM75oofslLfMoW-6s0 zDv~Jrdl{rLHOQMh_;OeI0c}w=VUO}N|Lf@?s{*x*^1k#vR9Sse1(Bi}a zcK;dxV~+A9ZokX;H$_062jQUnx1ombFjrIYOH#M2#{>|hcFk)_z6={3Roqs5)>(4P z1T!BU`QNOj%}|_)z9x+&hB2s5yG{F9+of(`r*qaAC*eXn={u6px*2v+^M2j5Ur#|6 zuvCu!I;U^wY(9lR@Zuh6cq$8Z!~3^dd|m@$cbGUUc^%L(E}Q+=$P%)JD%WMy0xgRW zGsTc-RWY0w4$l^wcrWLo@tTs?Zq2bppOruvsd6}6M;L8*o`6%Gj1oo$5D0|D%6AU( z^l=VWtgxdmEX|ozQ5!qnCkR|eWgSC+@fvp-O0$++zacxH{I7D20JcZZQm^5CvP z%aC8a^kabp*i!`6_vh7F4F#}q zT>&Z-Osa+6DT1nVmRJKa8#>!W*8Q39+A#y(^uTZPYVSq!?=F36pTMhf?VA!)XDeVZ zrdc_wsLP*arJabyJ5^;U;4V_ljVQ}@x7m(lue!)1^diU$PyXIemmPK-<>^QZLQj#!vi=Uo$=7g#A&`ZL>Y#@K z91An)?|?!gYfWnpi3i*_a0VHm!OApbGf8E>{Raqmf1cEZ@kh@8HzWUNqy6@UW^Ash z5@Bxa4lW?BFIjV(EM_W;^ei<$ z4lvzMj;|KDWilKf#|%(IlL_GpviMkZH7o^dIHs4MGSQ^*pZV0ncLTT=zRSUix|Df2aPQuMo*{SgX@oM{#>g=?9f`Me(~TZQ>DOhfGOtCLX<6Zg27ZVr}&+ppzImYP<{Kk6^BD z`}uHZJiG;RNK56pxt>G}l#^ShS>bZ!HA1PBZgJ^Zon>AZUm3 z?`p4bPH8$UHA+(a576{sN(M^+=o3oq-w*4qkHv{AoxKBTk8Trb+(}N5v}j#%&&0|X zuS-ArXPRO4rB84N3JnM!#^d;a3MPNOZ5y(<=l+fgqY>ot%K_kavCu6+5yf3t?~3`i z!`Fy*A4PcCc4p-+*H6MNUaV<#eELX zSf^3@<7=FAp>=`PI`Ok68v_Zhz&Unx!RNC3-DE0FNx+9^+AvoOnTTW1@ZuT+F0{N3 zZ1J2j^V))GTfK(W^R+f|F!BmgjUTLUwGtX}NLDzboS_`)IzR{`i{;i2SBK0a;PCX! z4LFE>Q|DO`NB53;qU;^ZY=r}2?|cr>v@)2r6;= z4)a}}BXO7-u*q6RaJ_&UsRF=WOv~-fg8qSS9+D%hVACjewXW_h{%dXHkv_D_=4XrA zMY~VU`}oxz;xe?4bV|X15dj9wz|X1uuv2;5?p!7+%1OR{V!RF;6d&P|3%sALJy*`!u*z z=+G1nwugiGPG@NB+U8CckE{t$sRqCX=e}R56;LbeG*pe8tp6lerFX!2x9?1R;|DN~ zeOmh*sZ3YUI9^W4TZ5|0l=Z%Dbmt>R(_BTxi5LO;)R0Snpy0eO?D0fT@fz$6)aG^k*vQ zEhrsbQIxrbrOkZk)=Fn}f1c!Ra5gErv^OW*XWB_uzNWl{xdpSQm5dL4j!4nzA! z>U+CC`U=uU&27UCwu-;81#!&CA2oZ#$eVsw_S%jWrzR)+v3Qth|3+9(L0Q71X8Io> zIrBzi*r%eqvL~G<&lM)<)M!LkDG!7NABJlQwGm zMA(OFfo6BOrOw2iT)x;J5tu@FK+TNF#X5m{pYEB^ZBkLHd@u7;x7W^i(q+Js>2{&3 zm=9{7OXT;sq4{mFVYbmlEL-tbYVlRy?3d8X&oG-Ar>|GA>|tcV+`lu*8rO0?I}Lh+ zh)!n|KzIWoELYKZTO@WlLsR6SL73^I)uV5l1Ps;}S(E=v@1eSu`VVkt;h#sP0`xYy zCRSEY)A#jfXRr#x8VqGATqQK$6fLkQb6+`C!|GQlo?hmc__L+v^G%TGaEo7b0{W=2 zEa;reeMqkSb@cbyQ{${#d$s)#y@1mVnmpBx3!&czZ(O>??Q^g|-l|LnRgg@5*$+p0 zkDTlwjfqP7=9H(Ee9=BKAix*sV`k^WQbA-KkF^jlu}M--%Htcp3=k1QcDKoaxWA5J zaf|00PFCGS>v$J*m7t(*<|( zZ(~mOpsPei_PiCYrsnsng1^Jw&&+3wq^tXq>7HzV5v})BOUXv0Ie3zys{c|b(R^1h z!gaMg6juFVRwOY}`~fd~nI}xPlLCV^U>@K2!#%F8f@l} z1uG+1bI;Ri2Igu;xZZn~$W4W-N>Et@Hn3zz#{|40yXv#;7+ZGI+^FC#BL)PV+UpUk zr^=*@J}y$&V{K2?N>Ho82iIl_iSW$`L{npd zC3od9Y|K4?oR2X#6gu!v=ol#J%;`}8ZPNEef~E#f^2ga1y1Y3&#FqLOfw0YqD`(m} zbks?OAb8xpd_}JwnN?Ht9Ck?tM3FR-@>b7#?*nE%(&;TdHIe$<%wLVIl-!MoAx8qg zGHDXa4CTOkT;G;0JE-`0s2mtyGu*qbrp5NLc8=D*3i>vERLY!2cH@{Wavn2i zJ~wvt+k_42$?hCUrws~FoUo_+?vst~)BW2uFne2{psY1ZP+uEyV50`O4{eVzadeBi zQ7+ioGwRuX-W5VBu{DrC4e0eZFn3<#^l+^RG~IBX(}z4W0DcpcJ5O6%>X;_bN=|+r zfXbm!HDny=Z<9S7(ir&oZ53qPia0ppckZKUExi!mllD_=mxBps)=iiOFZjE_OS6wP zTNXs0CvB?;nT#MAYi>;BiKwv{!mLJjT1c18oeRfmsU&1 zWt!JGx7Bpmx$nMjAag7Q3LJ;}cxPP^VIP94z-m7MAYe}sl@%HJP)nP@xryL5g?Lw% zfrh8{eWwQk7WO&keLP$_W9JUhe~mI{_8N~l^!_xA+YQR*%`~gL>_5N)D&4E6$;4^= zBuhJ1O_q+D z_UN?l0$Eg^K4A%F5$;En)hqjCl9G>kbJ>>-EkVY_-{SU#?xd7K*w(U%?Wc_QHlFxi zyY6$JF+x9Gf7hWtCENgm`;hP|OS|Ivg2nHlU_` zp~w=%;-Mz+-70Z?v^Gz?ko z=m&;GXh#zUQILHT^Qy>Wzy6LfmXPxq_yVz%Kc7j_H%xCO`&GWp?Wb9rLW;a`lP90C z9wQWKT&J(CEPMu`yairMy2VjqV|^vmeYl`0y1-mE5^Q`+?if&i_~)@2y8T3g7XGmC{#lvNUH%1v5upe2YTZ=U6zbvFAxtiTEu!(gVw~IFG~rF#mtmjI8(n*3))v zqX|DGVFDp;YN=6Tsr8IkUj`ZAAt91}!j_x*+6_HQLZo25j`UJg=ec`nk3B{+G~ksP ztutNIPSDAv*^OR$++1TKbn#qrIy-%{x{V^B@(TGd77>h)Nyq)_X;*Q{#1X*a^@tsQ zL%!78b^TJ|boLf+PJkFu)T}BVqnVViUSh=`1QY=@Tw?5V^1)hF4jfl1Y7SpKyBItP z(|-W@Q~*3I@HwRWI4RvJu`-u1%#7#ySkP;6d*X{tCO$&wMM2&yj^a5mTmV*zdg*US z6R^M4ik@k{wNAc*YcbKYgL`5N*Ub-<APPPT$-6E`CdRPUBt=M-Q+ilo=pE2WCb2JNUDW+gMSf#`_MKTlpeW> zvpq&7OHyB8^q#DaE@IBHfJ!cd^4*bTW~1CCd0F zCXC`Quxvfm=Tcnw=RU;ZPlY8yzI6_Y6htU7K@wttLF=D4`NMi~1Ybv6iKFIM)<$n-LGhE4y-W8<3KaPeAqyzmOnGjx}dy;+17i8D>*VB7fgyi90 zbw1HX1RG5M$+W0Qhx+cgyPBP+gYFDvo*({f;xa)T6uA776t2Qa5=HozmI#;AKrI>_ zo`y~(t+bNfAvQq0WkF`Yu#4<(;kR-y4p~ar81+2U6J>y=DIDTDCcdj7v|V_7;<#%H z-A`PWO+93K51J!3GW&7*>IklXjA32G?8yrtTbiLC=syl<)r@YfXYv9f;MTj6>_=9I z7mF=9b6vODoIOFa!Yg|X3?qVv5ZP>B;&yWLr_kGF?pQW^wyNbrm#a6Apxji*p8h~& z`v|p`zgBXl<&9ZkiVIN0__D!wW;Z#{6&aV%@iMUw4`72bBri=E(v;p)z8yFPvPaXh zrR@OeR~(aC&Xli3CISZ$L=f(Vhmjix6d(RDCMr*d}l4x+~SGb}j(<~F_LyxynQ zGAbdmKaQ9P5)mew@r`KJNIeK0k#}kFwr<%5-9 z_b$?t(GNBWIrIZGshc^;4V7Ej+w+I#`5xo15H5M23mQ8jkwcFna;c-hk46}tVotUI ze|P@PZ_w_U)l6Z|n-B%NRdXH|@cIh=s!r!{cXy^~+C# z?@mS}#~~AScaD+R0!XFNL<3JoGo=Hu7*O+YY%ekc=6(Jwjr$RV9S{{*Hh3pzf}h6KC(r$4JeN| z!n+*65S*Utco{#%tKa^D(KrCKQvy zCYUm6Y3-B1&kpzZq<)pZKNzZl_N`7K5W^y4Zi-;90ENbe&OjxP-gyIdZJ7V(L#lVi zf;nHuux4bgi>V}&33ai1;bm)@;fuIiE0#xABHPR#)Um5~x^1IDBuDvTx(COc<$W0C zg*^tOiBaSacru13g}j|-=PimX2<#_j5UO-`lN|td7{^`L5ICt0sK86p_C;Igj$FiW zyqs z2p+@qzlr*hAqg~!R6@XM%Ulc8Eb8T$XcrC02Tf~x&X$}TeLc(5nLx4cV{$?o6}>0i(eutyMj&uPa8>SY~yI)J*HLdCZ3WnDms zyIX*3XotWh#lsJ+SDtTIj5tIJU$M0hZ>$-SkurCTlQ|%FE&;DkI}^3y#~!kPbA572 zejH+(UmSkA4SmZVkGc>;YSsCr57jgM>IeSmqIVSuG(iQtV-p%;tNCGx18nmaKMaW} zf(uRI7heT(>GG)j5XImHu$ZpRcH(%HDWwtzo;>vdi}OS2+VW(0|Je`fLf}K@fN|m-!v{8I%R?&`PH@2xw6SAjOLFM*j(T9FQ%f~Oknrlb0i|7 z!xoOCw?Itq{)~1xtUgI#K%4T{d6`3u(txi~;?fHJ)m^YQa~vo^XLP5MRF{C5!OwsX zPu@=wdg4Pu-;`rG_K7j}%X~(iV@t~VnY~L6{>}Urp9@eVh2?4o@Wma%8BnIZa9D5? z1bdvujLmx-4t?&b6A$26X!fL_wHC9mjon8PNh0C4L7-L0#d$tLVpH;GOTLj6>#aG- zA)DeO5e=Y724?{zVDO0ZwL<We$pISpMfFJYEi%AO<;!DFvI!U@`phLLQOT>~Mxp~GNP zB7<-MH93-yh8si>cMn>CXc|`o0Q_8Hs6y|5a?5e@BDwFMgZ%0}__r^{+gIT)zWfA+ z@CH4nGjG;cxn8MMTq4|$M8VLyFzU`i7Kzd`O?qCatC*Fg6+NVsPokwN^e4cVPw+ug z;EA#r|AveTtU;69vS71_K=CeAlw0BF?wm;X2T7#1m`On&^Ia%`z|Cd$TXw#jPkX|# zq_v+f1{&2SVb?Tazn7UwXoPnP)pviF?h1cv69ufY8sS{7eX>Xn1$71X+`QjW)1s|`d1 z*Q621h66K5r1?K|=}+=jwfU_~up)O4*Aw(f+3K6z^8@<_-s0S)i~bS*HJYdt5|G8} z@MiCjO$euFapL=y8#d4ru#5ndB_?L6XrvEb3xPYlGjIO|`uNap9Cr4FeU8kU(*5y( zyZ2{B{X?`Tb{xo-quo|3SOMzbc)*r)*1C)kC6sSODl8tw!pzM|qlqEHW$^XV9Kuc* zU{3iV-1YwC#+!@+^YU00LO1MGkRMdZ3X1vWT_KG0ls39^`5pW$`l>~n<{SN#iI9dL z#Brl(Wodr5&de(c%xp@b6kn>Of2|4yr`B0k7l!?~7Y!e6s-FeH(rItm9A3`y%M0|D4yz7v2NDv@<#Fl@YYt zhD%OTQmPAbZX@^CYiYZ;s?)GccjP!DEQv=V~+R|Yi{dOV!4AR z9dcdIC{;!%uRcjj*_$uFC9a`1GBmbPkN&=4X{9+cWj{keCudZSoH5HXP2wv1TzFSZ zPsWOEq@#T#P~oR*rx zV@@7Ld7Tj)+`M~~3FwuNdVxqA!2M>&zOi2-yJRLt|L6?EJjK}w2AFs=kES>Ms$0dk z|2mtEr2lm6V}dx-0uRMgOPKNp^?%>LcVQ7%XBVX8fzVSJ^Tx-Oi}?%TNL3toa9i{O z@rP2i8=o6eGF+mv8jrIT*n0#kcuF{@35MXSzsjtg!jyD_k8qjw(0qw$`ZKwIYjH>H zOP$75#eYH1Mf!Wey@PD<5vsX(>Kq-n748+KyIXSUZ9tO%R@)S{tiJoEsrAp~a4wV_ z$0S;e4O2BWz|B@IliRZeCy`E7Ez_5rpxh;r1En*%&u8F2fJ4zf7LWSv!>#Np=ZCR* zf@^13KLj9oUDIbp&BRB&SgxUhGDYeob&>*tYZQk8=55k0Si*}HT{;018}Gu%j80+$I@?#ntOYmkx+wo9Zc#aY5RR?T=X>IKfy6SKza4 zp{^vIpI2#udLeeZBQzJ!uXsy3r5kPAY}t}m-^yR$FNAmS*V4+hk0LoP))F}&?*9Qo zw|nuqv2ZvKiJ{rp%%;0tOn>Sucgy3Zl{!-Bk!oE59+Pk&gC8?@1XxNklN$TB9usIf zMDdHIi4C_ztZs#5lMO$`T)V{%Cm6&27N|UU{A-)M3vy7dNBE1=|d`;1bODPLaSXV+W}dVj70{8-b6}+<|Q8ed+%>z z*RVRUJ2oXy)M!qV*|tO~wFIjLgvzZEX*Uts_G1f*G33IS%`-a{Iev!YxZuh)}SOI_I%OMbz)-6rP10Wlb?uZ>opF*>eJDd1@ zksvZnV{qpH?fKrpu#l1hju!BRC3>A+ghL2s)QSih*}S5BZrGOeY@5G@g*n)QkaBut}6I>rQCQ~ z|MQ9E;t4)UWabe~4S;0q-mvOJ0#b#3(@?KC_U7*FRk9rpt5+B#JzdDes3S@XHd4jQ}j|E~+9NuXUnoy21Zp9l~>M)amPO_K(0Au-NV<&Es`&!7p z%*gl+y5Q&Uej6gT-Q%om&XUF3g*s~uKxiLgY|TenJ>bwxJ1j%#dkzI z&GhRoZ6vb9FSvPj?0aT^DYQQ>*hR1Us)O1yM;rx47h^waLq& zzZLv(%-B$BlT{y!2bkqmq~z?7WI^Q==-jLrEGqNz>Du+dM>hcxQOqk`dnCuqpWZ8b zV~3t$)$W~^7S|%zqIBP5!)Nk&3qQMwLW20^kW#hwlA?p|?g^vMxdBhX#N_aLV<6Mp zZ5z^GdY6G>G`O>Vm`#bCU-SS6b^D_|U=|y2!ByhSS?QqHYzo5RM6fSNeg%qyp|bdV{j_Y)HG?P95a>< zQKThE3bDRmu54mb^JGF)!#6cG0EW1b@9;Ls67@oiQuY>x%CH4PKO&=tO>2clRq}63 zM!>gxkn}Hdb&>xPAU-yiGB(~BppXE|!Y-pXacLP#qOneLQQx-hq?#i`=$DdKHUvL> zBR0kd*ynbXhcxt9MTe`E|E#*bzV2r3wzIq>(3bXLIRKf(5%Ou(zXDEue_biimjYK^*tQ@g#px00G+9Mtw3~ zdpna7v|o}BjH!yOnB5Z%mHGF3)b^|DB}SMz;%e zLN9Q9^iibWiyqFWXhOxH^DRb)NN^VqDIlGqO@t#PRxg7G-;pbq3izJXJD9`ak zplf8Z{uQ6caohr~xvTNorJ))T2OE^(?_TCJwZORsf_`hxHpNbLjYK_S$6?ZD8_wsB zZO$ev#)cx{G%SH>ScRdqHS%Y!we&G@=?(w_L*1a-{{Zv#ew=UZ$H6(IUP?|T^Aq5?8Vy@tOHfAD%@VAGZ3pDfZ+f4`sUwbh zM8K3wC5Y3-^MC^nn`fZ_dUS{m%I32<4P~lXF5DjTz8wCx1sS>TW;PVb?yE{ww&qBj zU=!w|u;R}}yA~WYh8u=6WZ~Oz^A9n;a&r)gAM6S8N{621S|ZAv)eObO6yp)lMe^Lz z=Q-iw&58o432%5`=Lmu zgyqes?G2dUIif?IKvYxsXP8Fc=cQlaDYp|;!8Bk6dVe>)?$=pUWX`BS{ z<*$=n%e})ap2nH#%^h-8zEj65*o9gvuU|XtJ{H9lO3hD+*o_^R=~pz+UVJ)QKH|YXcWwR0;CpYhEhfiokSme;w1e8tT<`8C8oagV z4gBDXl-3zNMf@MY_6QC)T(8eY2n{AiBnfp#(oiutz@R85ISHY}BOU2Hz^u60W3})O z)XVaDa2`@$`0JxM`bQ;X^X{Bo%Cg^Q#pa zyURYWXST@6`jCUYvQ74QJfP*|zetW{@2{a3=~(0vaRtO#o?l+yg{W=h<`WHevvS6f z%t_~&UZ-^x-_OjZPmeXx9rW2+<3yd8cD+#5KULW2drbY};_0(1x;70Go$AdOF(o0# ze&ibs?Wz_Zy9od{XrDYs4-1>RTwODh3AYk_Df|^oZ(chK;CvELW4ce!O!Y(t9+7Yq zDbv&!XMK??b)LfQV{Bp2R?z4vCBbO|Prm;x(&?$eOklRIKPh1pS4U&_iDQ8rq3c_q zf~u3F8_EUqbTQF6ZGo|z7lvxt=zG^u1^eWy-Oj`x%bHjuy zozNpka;wPy4QhJC8n-J~Yi_NnG7ignTH<$NLCVjEfBxXi^73>)81k_hcI94~1_lyq zEFn>w$J2Gh%k>uKeWDdJU**5W#z6b(>I8NS#h@la6MP(I)V(267m^3;+lz6>a_>>P z=$^(Iv60AS$r8Ya%qwl_6URg0X29^8u3^B?DGwb zXMmp#--K%pnC9706%A5#ddhvfEc@oz#rO8`+AxovAFAgO0qa)_=Ag5fCJcE4#3UKY zCZP9++GysM@4)wp$=LU-T?Br7(Dt7}ME;ro?fR-T9v#GXurx`ds_wOe$@Qc4xS;v$ zx8?R|^6l^V7gqV;oudxNS{s4wX*8_38@}O@lu_K?I8B!x73d zDcK<{iZ!)%nN61MCRs~I^z#sNMu3|^=aU3?f?bn_>W^RgXIxk(@nK9hE_vsV7$ObC zx$}zvuWsU=0eNl$V+?rc#?!OKylaNf7m$7Ls_%vK&#Z+{DBvNB`z6$tXIKPTJ#*9O zH_FLFGAnpA8qo%+(~ximz0I6WEnS^3Gh^~%2gn_<{oyt#a@{05aZ#`I58Bh8?N1mr zgH6SsQCvtBVWW7n?~Dp7J!ea)Dc#k2zgWh|u7F4MSFaDjO4&8e-!EVT#;NpqddS!D zEiZiCW@X84@9|c}OOV?w)O1IpFfkV^KJj2HtSbe!R0#AX_d<)^&A3Kl9j=6%GB=Ck z_)O`#FU;Acx^5^?Wai)p63BD7QV|-n1lS_X4+QPiidyTg{5Pn997VPzO`s$1S+6*+sxsP<)6+54(D1&77rfK_L-3 z_wQ;ItB-hF{tpnWrQhqPYEZysUo3#$V&5Rfq~Pu0h9}!2Px}mK)`cC|bxmT{aj7uL zhKYn$2{<=DSx`IN778@fq$*aSPn3h?)Yy7N59em`A0bSL$-=kb;3S)NuK}78AU48g zDnrfEyivdJDC@&{w#}9>D-)zJT(tBX4Y=qs1k>7k6K>w5;D|;oSoT)`xqyNA^!A9a ztpj!q>zC|V9}K4bZT#Ir$s#nVFUU5FMv4JAILo>F6=Gk9B9mnLU!~Gb4*-?7=HW4> zlI`zbvNrB`f*$|*H#ZMgiFY}rMC!jsB!f&b9v5FyC7Pw$7g<`8knY6Z|Ja zJ@p5_tg25UaO7q3oG1Axh_K+{C+R(OaO+z6OGx=+rA-DaPlZIJG#TdOyYM%2Vn?BZC0u7}bmdOn{hVXr-YVTq#-jPkx z!KkBNcEKM?h+4p#;R%0xV0d;uNMmf03bn68Lb4ju*$K&sk{m$glGw1dGy=~R`q@s zDWUOo?}3`50DGv`UrV0z74PB_sfxn?{&Pz1cO$+!{%3Oss023o{@(gK;vS;i?a19% z@OW?5MyOyZNvTW@U<{dqxyL&pIPxZp;Mwq7w4fJ~A)<1AOZ)2XM4S=WkaUQr%>GNJ z7}C9?*tvOCh%hdQ$^2|1PQ9jhlp%e_9U8HUI?xAxue5MTt>nDADm}1-F6Y{I@nWP% zb&>C=)h=v0Jh^XYv@Xgh#F{zqCet#(ECR*|9!~*oX?8ka{J05)iOR~@)l$78Hg>D; zpap2Hb4pWdVzqTpNfZ)C;v77RA7OYMv(Zc&nV|rvD6td&d2$aU1=*&Hm82*16eyx- zB)Yww9-V>2{sq1p=Z)8~6eSd=$cmdD0+*+tF{y1wNmYQ3CGc=-gY27wg>8A?);*WG zh}Hv1Z+=L>gTyfYvF@b3e>?dPU`SQsok8|qO-p-!e)SPKbIW}N2b5E#Nz+cXR)1Nu z`x*g2m?)}R_zR;7m^`m{^4GzW%3J3)o;sU~jD)g+U+MFNm+FkBv>I*~CkrMjTt_9X z$)`!pNF`{$Ote9z&i-SM?&lwYByd-r9l*4Q2F@h~@_$1_fAJsPykY^mZmFKp^%4G7 zc~5`S7(jG)@S@{|dndTm^PKx)*)RJk8A~W3rLUBK(`X)g8Lk{R>0(MY9>;!cfdFkp zKLc0bnj9^A1q9pQ7?lL+#()C7LFq3LdK~7%3?G+GqsSRj3$Mz(+dkz1(x2#q?}Oi~ zRt)>SuE4U$j!KXYh1H*UsFi^p3KMb4d@99WSgbi&xP}X%yOX70Q}@ZlyMkieD6nTU zD{!m*xtb3i&!1i806`FF5UmyEVhD?QQA070mX`ZO+FUW3rbg zKy78Yl*xEC(%vtNMVQ%Ex`_|>dZmb?`e^%hWDt)GGddFTSKun!YX3Hur}ebmmNnrP zA$gjw`WJ@X_#69J0@g0wDf9AVGlX`psOInE-1OZQPp~DUy|-w0iRwG~3o-M}MEoA@ zE@yF#F~juhyT`XUSMUc*VGUuK+fn z5y^{(;afoo%&~~_x*Qy<*&~h2Sh(`*EbR zrWmY%1P^Po+~_eL5Xp0am)aThSc|c#VbJR>{_=g2D8N;eYb~`own`+Oee$c64U8|#b#}mX{ ztNefjqdNOaqq!aw6;zA?T<^5DjlxjUV?=sOxdD?Zd5w!3^at#}|#@GaT2Dcvp7 zV+$1eJ>G~CR-~D@&pYfZ(p9)~)&CTw6EQH0qr?3F=}JY;4Ln!8VvzC&f&qIsZ|Blw zrLSABR1#);f2Mw!sle1OvxJ(gw|*V{b#Q0B9GiS9#u3e#DlmVd0?1%&Cvwn8unKOF zZt4UhCpcR)gJXD{S8XBOBGw!Z9&zYKDhjt~FQ3V;R645edF7V8;Wm9%yjv^#i}m*~ z$@$@(yB!cV?ble~p-j|bLT@~AwDPzjQ*N3WNp~LMbYR*;UbLU{RO~D7 z!H3H0$KdB8r9xmJYkv#32I1IaJcE(L_o3HIVA!W`rreuquc)t6Zv|9^r%>O-Ijj?| zdWB4d=%}L593D+Aa3Z7q8ii>cmOo<9D2VUptg5Chc=HO6sBX|^1T1HoQSa>AmB}0I zu|Jx?e;(zm2ONFuy`lJsjBzwZmU(^U-KXGfkLR$Abu)xS@4L$p-ZYG%YyqVxQyJOg z=M-jI-3g-{+7ehjygj$?(Yf6SG=4MO<#KsqL}`I0TrsX_`1T1F|3L=I$D0x7-PxUF ztEj7Em0*)jbj|BYu9JNt|KSNm4(@@M{FKhwMssY3>%m4nSSW=JUm#H_`0B&mdET9S zIk~mLXdM0*HkR0$Au90mOyTA9Nntj54>WujF9|w8B;7;KWaagNIvZ~%vnd8C zy{3{CDj^(yOc;~Lw`C=jti8nAEDT_x_QBhuuK`!_f5-Z`Wnj@WFML=p?q)JuOHg9y zSyPJL^Q(t+Y}ej26L;BClG?o7iT*!;XGIb1CCSg3!FKaDMgM(fye)?GNLYN>BbuE% zsxc^>7FW5Y;bB0_YUXdU+7oS#O&NZ!q-b`K1A>$&BnEi)DMVXq1Y;HD9Q+EyiFd71 z#e~p%rBZKW>-6wipqBeN1DuI1z5&{PNBEo;S82L>#iB36Age33co0)_}h|0CokpR0GY|#Q&H@PDV1se+) zn4DtpxK?dWV@R!tMU@5K#R2?LC5~fotJP-$Ls*yI)RG&a#Vucz9geR{6UZNyJy?I`s0W_`*E_pbt)AU|B`)L1hSLwCVW`plA1K*1Zol>XEA{-YyI}ig(znp^&_62f<>wcu+=K}1nrLQ&a?mO1U}l_Xyj=Zr+E*SH$;cSMFHEy zTyEtjNA#erC=EtO@B%e)<*RqPBlgHY*Z~5SP%<5E)cBlWP!leu#wpTFb9GQj<>T9F zMF!>q$)D^l{PUrDdr_DebB&$J!t;Z7;;G8+%fg!q-GruFr`?T~!aWo)+!kKr7djd# z$|W?sSGlNUbov?m^qw&>E@arNFQHNb3%#fLd`r|B0^EtMHs!QdLU0n%b8?1k`W@g% zt4eMs&g{E1Ak3E}#+AqTel`%kF%0QgANkSsy8$cmwfOe{Ub32sIwtp>g%d#nz+TKF zw;l>g67{q3&V*wjaNUpV@ue#rCOpaR2Xj*-Qt7KBeek1Hh2<}P)4}v>cP_BKF}^k3 z-(GLec&;g@_6Cagiz%7){0A_9zhKlWyOUi72a4acgq6jRHEo5a?52dqLqiIM;r?b5 z%l#~j>5G{3xRtB}0C#Yr2K+NWv6e@imuulZe#I3TvNk3@DWxYubRwqH(MrtAz&_pq z!Gq1uS_@LK6lWqzBa1aK%jJC!9#$z-*6f$!2xgC|cg+XrQ_`ggw4o=z1wn8qvIe#X zqrc3s!r*K@){+f@BLN0YJxfK=Pgy1u@vU-g&fZ3UCFHpwmNx9W%v#e2p)VZ{npI8b zre>#VM=0;qfbf?f&ueF<(1(MYqcOh0(`S;urHd*eag}=1nGe7SWDk5{+P+_+g&tMu z@F56_x&vEAihPwksY*U1vEOj!W=%V)TtiaZP&Qe|5_<&!0N&q4U?|?kO?kutK`mQmTL^K3|4IwsE^zI6Hiq~%3ZY3 zCvBhBPTlf4ti-$x4e*+T*OnNty=#VfYIp*5I8vi|rIB=jA=pNsqfa z>7Mw%H-_8SzCvH(bo)(-!Kk?g9Jr)^tjYe-^llV?it@H)F<*?t@J;AEh;y@1OM(}O z){yrOq$7Y&F245iW*v6%3OPk21;w$LR7khJqbaC#Y(oar zJ??fpkV%OHjt%hWdYlNz}Ih{la1no9NUvNk%4lCc{cifP2c@bP|0g+jPS zUO!-f`#<1wrFDd@ICI5O<=d-@oe0u=LKG+xRCw@$D^^_?exkau-?ToQ8VSlTQPwzy zUyoKG$$CuCdr=|-qrq-5kX!nz_3?{g;h6SsCHAsqY7S>i&Xft}$TZCtQ_%(C8R;*h z!tg^0m|4fD<^sP1WJM!`SuWJ|caghF;(VFe8dBH})G}JG!)Q=srcvLf>}7wbz1d1* zzptgSZ{dO(R%h7og0lbDI!p|Ze|F!fJg{~6KktXpU`aAPi~Yo{6Z{8!KOa`sb%{&< zsaKPNq?58%{MNrTcFv{_&ttpUb#%3>%zUFsE`zH}nA(x`U`=Y4;#UPJ{MP{_J{pJR z<_TQ7vS<0eF9g?!)M?*T7wKT$*NlL+4CQsl8t zv;G$-Hmw-{#(#i!%3!%s=uIzCg8UC2)(yZ{{sX)aV6zsUatPN!oa(XZk4QlI4<135 zN|H(~qz!n5|6@~)bM8tX%=qp;F#i2@JUbTfV|snPwERroVfs!4@iwLGWY;>~Sal;D*e z4Q2_q?NTJm!9bh7{NIluVCJH?AJQ#o$)Fg9GYbLWh&}|Q{`n9nI|{YL&NVQ0=Gn_b zTds`LrzLo)_e1R+Co>SJY&DIf9`LYFWWgF|s)dpFHidqvisyE)1g*(emK{3yo?W6@ z;?Gc|%N@I7DCo7`B)trZd3uHOpxGvjF=h(zAUhW8YCk(s*BHW~MUVz3ieKsTk&w+jng**><8u|5n=}J1iO(e3jXqrtZWHFmoCQ zi0TcYebI1WBM^Q=0(fJMOIIEcV=5uBHd7z;dK!p+bQgQGB+zH>`J%|9TgR`ZPeCgu zOf}A722HA^4lV+LjEQVQf49hN9TL{`C>mf(&LIEqLl>BMc(V2Jr5!a8?MORh*6Iaa z{V&~Hqz@N07*naRCwC#y#-)YS+=$vLX0HD-L+g&k&3&!ySux)ySs;kKnNDx z-5nZ-#$6hBi2Zw?Qx&AUXL{z2eD}ZX?x6>ZR6S?eUh7>fvp>(z^G}@V*_mnd|IHx( z4(KW4FhnASLQ$it8`wCxghj_i#RYqqnRcF?o|&Bie`E^zYk&Q){Ct&vo`32<(k2nu zW*%26s^TzIJV~9VtF3QpW(xi_G51KQtt&~3j&e3zvKS?E1`_&{&7bGrd}dH1I5WG! zKwm)>hsRT>BrP373v)YnU*CWLKR*w5YfI~d#^TaMFEjI|2Z-tX$>z`VpYiH50M7NU zigGF#EDlQ`YtnV}?VLUQ!{ZY&a&q(2<05=qtt=YbOAuch@-HmLX&Q4Fy&irKa=lPG& zIr%U)QeH_xMM)Kd#}lc#+9s9`f&Q^s7zC}EXwBpgLU&%naoHzG2#qO*H^)4qNC_pBRQ zT%Q#c=4h;=?P{S#efi1e|H;gRaZkhWo6`(VXa4n%z!b>Qk5feDL?t9;r4cq& zaez%N0|QG(pNNRGl7_~1@GP$6ls=0S~WZB9UOGbNYGSkD|EzNY)aTFR!<@A}KZ2q4-lc=$r zLhxb4h5!0^6T}Yp_=Ls8#3e)}rDf%0 zs%!ky()}&0%+s>!PM?495B664MZ*~&0PLo)h?Izgq>PM=oFWJ}NowjkCN|ctzM(O( zN!fV-&XVH7!kqNf#P9%rcUw~wlH_UT&D=C26JeOIX=a`0 zUzhqYJ~sIG(NI#73V}c%kttNFI!#N1PS>Jqs#`VGpPOYiSR!BCH($UE^Oq;*zOb3! z6{WuW29bESwV79tPe4Ri6u5OMDJkI7F{%VAoo;01?Bo*~lboELlb=_VmzSHBmJk&a z;_K#SXRfcWrAEXPRg_faw)|xCzhb!%E5!hD8gei*#{$50<{xih{JVJ0pt<rZ$CIfP8ckC}i>{-lqiI*)dJ^Gx8g=y3zo!i$6pd72mslkza1^;@}hD z7Z8GMN+N8ks^U>Loe?&(0GoxmIeCE1NWiA6t1V!YP6KvRRaH@C{ZBUkOQ{G%s>*p_Cy?Xm;8vOdqpM1ipnc3SsoC}5cgoFh}L`B6UB_)AR z$6`t9`g#^l-rk{csX5t&#U;fhdD)pMap3_$Ud}c)W(IV+I)#YA5fl}bVt=yvUvcW+ z7&PQc2E5DDU%mPi(|`Ueo%+Ls7!?%^PL-&FClQGhnueyHu92y=mA#Xjlc$@jtCPKr zfiXSr0Yr21dq+Kkq)$jP|NisYGr!)x|Lnu`-!ScHpkl(s#ltPYCnN&dlmKihC=&>3 zI%Z~eo*^Oe83kpfm6a7`B{}ICiIIVxUXIpgW(GPMnrdV`9;2cpC+GT;&HsW&N4+bw zI!I}8=G4~hBU`s^9p1cn>sB-=nV$IAF<2^rK+)1v*DwSI)85s^ z%Re|WBr-BMBGAjp&C{-kb-Y(@-P=S z51$~v&_W@UO(_`#6(UjHz{<)!C^jy$sH&m9sj056q98LZF2vi}+1eDun(AaK5r@TM zm6R3aoPM(TUoxB1=yl;VG)QMQZy4UXZS(N9#alPc&SfM2%4cDEwns@3*ezA?FM&v) zQmIkx}6x!TxT}HpX_1^$(H1@~zzl@dpe+W}lqezw^}PdygNz z{UKMH`7tw^nLWzM&AE_UNKi-=@##`hvXD&;LmL~npt!iq;_Al6X2@oKT1Grz)5Y4% zK%cHbQ6mwsN_Z7Tc{zulZ2p%5PUy_1W*!Wu`ugDT6f%iSCaZzmSsg@z6w|EJ|I(0i z>f~u{6?s)v6$}QCCEh#*%>13kMfNM1kJ zZ2{}@AU&Hp_si-%`;MHx0_^6eAI$m>SrN?VLKnMuZW_Z--M76AK|FTaQEh{gpsG_W*ioswAAlg(@Q`glowy?Kz^N)y3 z%q*#>tZQhjuPG}mObYjMur<&g8UEgIL!0?x)#%uoZAT6tzk2)m^Y`DPiFkmiZ+-zp zEQgQJ=iyn%%`Ye*B#f{rEhDE&pwaX!U0s6`a`S6ChsTyJ9qH++FHTR7@prYcHq=(9 zk%>4wMpZ>YMMY6Y`lsFek1{!hRvN*7H+XofU~xD+fk=XtMm5MKU02sY-_X#=$jDGn zS65p@jZ$|8t%d%RE`AdJwY!g9B^4Fq6_iy}R8_H99IR|=XzA;lSUEX)hbAOsmezN6 z4h)Tq40bm)mS@HJ`8%4bYp2hC&B|c-`RaL9@7U7yI}RK?dEwThryr-jR!yhT|Gh^_ zU(EWgkLLm|US2+a0YShftZz!oDqu)jT86e>Ug2parOiVt*RNl@yuZJ(I5jQO$I0AW zPlF23!~isv6_pi~WMm_MviTo8FatumdS@rMc=%#~(PXkoRa4i{(9+R0&;x85B5cw% zNVK|B=wLUbV0!8wdJGuWZu-m9yY`9-(n_i-;2#W=O}f6mskO7ScW8V2gkspuIWTeE%dzT+2fJbn5e4LN3}kvb>x0DVC-_h|&> zX&)bUzVFzSf#Ig6mZ6=OcUWq1Y4f6$8#X{Tn@ZBsBE22W&Gj`YWCFsblCrX*oV0w{ zPd5LvXd<`Fn>PAjRTOb3nq=V3)zvk%b#(NNO)bo=tZi-WY^|-V%#96owC!taA0mO@ z^gjwFVmARmr?fN_q!i^8737#~f={TaZD3$#>*DGcnVbUM>&Wsokd%?(&g#7Q1V4Kd zLwfq7MT*_ac-@5C`%*(vYhQ1}E6I%}MJAV4wgZu9p&6(dM^k3e-o12cDI>N@m zvEX|)6+110-%iGh_!_~>!#>7B}u95b1 z3f>xh`DdPm+4WkIQj+o@MORV8sHi|T!Dm#{(lIguiI7KNOj<^9WADkBzUW>rLCi9Y-VQV;Nt1&7Zes65g8c~ z5gO#<@8)1^VWeTTc=-ET_+K!c=p@keF)=AgSvdt6S$QQTC1sRN3Pp{sYiw)5z#8x~`s%k)^4%xuu1vkr9Oko+1McT|<3C zBRz-ax^uILw@2ek@cEvGJW>{zl-^qawWR zO|^AsB#f#u08>F;PF7w{T3UMTPd5LPY|i|mC?~IiQ^l&_h$xz5s+yXHwyvImnWdGz zn|DA!Sad>CT1IAOW?FJ|RHT=uo27+@I=S)jKhT&yg%(h!rY6=%iOR^zNXaTFD*($0 z*~H;VR0>U7&jh4GUI?27we7>htG4dmd+^YneOtzRYie?0{JiYV=tLsM%-YJ)!OzX# z-^Pl)*@oZuBS|UJ~K1*?6+UXSazb)CfHOTgK0e&X-Pz7ahpJY8{~t}% zLGJWr)fy3LU^f+HW#!}*loSD*ILIbdT}R*4)W#XG8JnJ7Sld1_ykg6)JqHi(-M?)` zUu|u6w4bk?p*EF@GqfA53Ae+YaUS46zD4TtqP309?alwIZR)!jyWUR6h3^V1R zLzj|}6F>2j&Hv;nRZvh=QpRAE0GueB6g8Tji%(EQWI|eQUQt;^Wo3Cu zUT$hqSeUPaxt^Ye-{bp#`Lld{`~304C(mEq5)%@akd~5`l~s^aQbY!D0h?rCsKKKE zQXy|>H&gQ}oBDefPpsdxefQR#o0bnWG!`TV_`93w&@?cnt}ed8G0{mW>B))lpadPtTk4Q+!D6A^4Z*K4EXm6>nugFhLjrMc4 zvewbEG<`I~yo&!LD>>Ju`Qq%kYd7z|`1E0hC?O;vB`GZ<1I;F26AHe7a8q3!xO59k zdpBR-(Ad@Sm4T)vnc(go9iNw7Rs&9XZc=in zySb^Me^GTqOI>|kL4se1jcy&<=J)Z%!`nBmoVa@z`Eu&#aj|m)ySWg=n+!IAQ&%C- z)b%YK9lb+i;#0Hp^73-hkPg&3|L99j%!& z49je^tctWENJPJ5lS+d*y0MXkor{ZaNDM%wqM@mKaPiWmOBN3dbkvoUWX1-%x?1Y0 zX_=q?vs%*h)Eu&>j_)~h@$TK<-cEh75EBxSkdTs-V0RlMZ7nsNfk8r1bzRrs@W}8$TXl7Il$WoW zuJxk6@fBlBx@)siLYxdU)2H9Pc>dtw^>dd`9X@>)N!ilb**Q2+Hi6xQok$YEd@JE7 z6uOa>m9tM!NMu|>LVRpwV4#@_;^W^pHjD>)ZxVV^`=^~<{62Pe| zp|Y?bBQ_||4X~+2#S?Ju#qDjwt2b@gyngwj zp1Q)QXiqC0Kkv9g&|IAyVXLQW_UO*_8y8QUIeBc?x^>6{sn5#B!8@0zL%S)C z^vDqiG#z6TE0F2?1_lQQ1^BqS+L`McYEiLDO0aAsB_SaxAt5FuE-X=8@KaO!-|N%S zezEEIm+9&S|J{F3tWs>+(`nwskBiqiay%=l0rA7?9IH>qTt zs!DZR$CCBC4<0(OYht3mCNn$K(O63(Y~PV1d)M_1R7885m}!UIfB5YE=g*(tJpc77 z(qQK~kDHBa0S^yg6GoiE!Xje87RoE*uwmV32A|z4%Yf~0@ZBmAC%xxT&FK~wJq7W zb?1pwm#*D>>IKY|AS^6ONJ*h=f@cCpRHJI@0>fqR;o}n&85^6FmX(=XP*_}CT3l9A zQdp3mlbI457ZKp@VQ+4rrAZ^_2#D|E3+wS__L4gKSOo)Pi>G+_`>e zq&79g(N3S5l>7l+`cE;GLS|UlS=qU`0GkUDIE97bl)9v}ys{FONK@C+H!?D{u&}T+ zH#IQSRwq+%stPi)z-CH_gRDtZR9H+{NZ`SPpKSg+?Iwg~=JUh5cWzlqO3BO0%F8RM zDuYB_1!0pwB$FYVI)F_JdlxUS;OLYb$Y%HA)vy$PWdDJk>j9f}`6&tE?l!gtT2zYh z`q|%KUQQ#^XERs2+Lx~1y8FPX%Xe-)_T>{45Ed6lk`RPVXs_`kni^f-6a=^KfXxU7 zoB4%BMWsb0#YM%11qhpA{%-De<^~|%Bx4CG0j+Jr6WjNJM`hc#rCnvkv0kIpJ9G#8m1i}{7XfnzYGAtbIoSaNH1%!|? zl7y6uqPz-*NTR~oPCamR=<1qOB1nT2Wu;IwMZggj77!M~O@97qH~&FpGqZhx5i zZsu#68E7K^=h@lQ$1h*Ib9)&0Gg%p6HUXMY6A1WpfF_Zmrlzi?ZJ=*rVQcH`;pZ0; zlbn@ZT+`atKe~G3=AHZY@87e1-Na~DOq3{zxl^6BjKlQZCx zeVn{@v#hqGYtiaWn|2*Nd+oXsFRy@*Fuak05vL3=*@`MS9Eqk)H!!!ea|53$Ix#If zE3XKg!ovK5ob2@Ul*HJW$dEu^A2$aZD>DOa4H}gUd(Z;{8~PS6UA}V7$`!-yRb}a6 zu2vShYD7YDTTN|ALa?)gi58h;!VItxKy~M{&gbG>umCvqg^c<;$kkzu6NEHa*x;f@ zqp5+9Pa@z{m6a4^K^BA^bnTj*`%mQ*EaZdMM})zqH0s)5th1PF2a+q`I}cuYX{$x38_Hs4ykO-O|EXolMXu zEyzg@^|E&|)=(qkM`pg+AK*T3J{vn=lbgXNlBvG1_vy*Z+>82?&A)#p8Afw*dX{NHf1FK#@6gnz>HBB5?cQ_r+~q63 z-t+U7kdcs(k&=@`;Dqf!a9IQiUI}S~9Npa7-o@F&Hz+7P4zO8JR#(%~HMDqieAUF7 ziPdAv7PZ#`Hp9Gq94vJ8b;(#2)y?Z_D^+nMGLfjMrmaOc(lIp9*VQr(sHo^1UA1QI z{?j^o?0ozSg%LKzB@m~spoAe1s9J`GmX4kvuuaa%E~==hsjaW8t*$K2&(BPa2j1M@ z&&$=(*2c=j$WTv%yyvk2Hn|pX^YAj#AtCt1AYY5DtQ@?gQUM(E$Zax8CKH;xy0=ubtmz8gY z9)nROU`Q0ICSBje%+50)Fe)l3HYUv1#V)vF!@6^i^Z*e8BEnzoCiLklI5I`kz{0}O zCp0uZv#6$~rMrJ%ps%~DwXUL|AS)p7 zDaptsqqDVZ;R-WIWahooGiM*P|@+Sm&{GK(Eftvk-|n1qD&R zE+#H64r5>`csVJ7#F+?~Fw%rZlW!p}56Apluiw6Wc>5t^QNrJkIe*&C*@2{Z9G*xd zk!b2PEp@sk)xW9w`%?Sk14m9DUk@h|4;?sm`qI@a@%*A9;$q^`QgYI=a&pj_!AyWa zp=oI885)^Ef9~ZM926cEAD5V#4pQfWlA^Nm>e}kMhKBmOx{9i@{OshEs2~py2V)aM z8XZH#swm;H7%EANs$=Y6;}H@cms?R;RbAe>X~VfY_aD4E%f-jX!!O7u`i)PQQ&h!M zDO#}6!Y?8!CBL$zrFVGA(y`G+gWb(lg@sx15fT3GP7cO>4dMM>e&(>ZyhDVBNj0h=5! z9fG+!Ga(X2Y&kHWkWhHU5HeAlDI_3(pvldZn)31ay@$6iU;fMM*?zJ)JD8k=BjZT~ znwpv>O;bZdGq|>X=Gz+5%%fc=kDpw-eAW8hyAK^ZeeTk)v0|d)A`;TTr_0JRdetz1 zZ(ug*`i4g4wvKMD-u@xMU)jtrE-ovps;#aCXx7$NRF@ZKB_~HhHm&sZ>A+fHRTMCI z97#isu4`m#=N6KfoLyXBRaMr#aoeRE_wPNq#I=w|KtNbPh?xsX!QDQp1S*woY;Eo0 z9~lYRZ0#Fiu-OFJjDu`CB5dl?!M8^yfIM1NRar$rSwT^%Fe^O`7|nk(jag)`KsWFI0}`lrlD=1Z)$380kQ^Ny8i=a<#T#=_s)aoPK}MP zTD^Jafdj{WIk#^wmZ1hDB`qxnGgM$Vu>?GsrlqB8XkljK=mXVc{ zo0nfuR9IY6Qc_x4T2@k2ke`#06cZid>*iu-YM`e@CE;*5c||!A8DvtrR!+|TaXEQ) zol7Pr4xGJw<;J~dPoM9B4d()LE)*7SMYeGc(lD(o$C=gIE)b0ca{A`HD5jh z0sFbjPwwBl{p*D@A3uNBJpi2h)K@9dnV)Pj6Y#21km?d)-I%7SYiwoZP1Uet=Y2c;DIA2&%{L_1#k$6G+I4Tgq>;xss`)^vbAz@ z_YDdTk4;EONzcs8&d$xv1E&D+nU|NJmy?^F0qj+LRA`8whogg)iJmUPrmB*HJeCOS zPnI4o!3kxB?Mt>CI{3?lU$5SK`26KtA8y#2_C1^ON?4-0x~`d>y+=q~LRNW8|G=_! zn>TM-J3c?~JXm~GRD`2tGT!NNu@Qlup3Zg_7Djq> z4H^~XNmvyST&M%1iC0lkRaRDril1c0yH3UIcc-h=%`>1 zXJ_y=80l)!C}a}&Bj8UcDw6Ry3|86v%lA zH#bLH3v*!8pfAN@0h@|)YFhe6rVd`-;l)c9Z`gJ4Uz8n!mozT1jipAwnEd{8I^u^Vcjb+}v`Rpj1NGS=iov3gB z;Q%oCV1CZcyMS{6=gtdfemQmO#L2@4cI?>wqd*<->K{M-eyhj-VY|6$gEmG<1&1M! z@MH~;V4FGl`o`o|Rdsf?v{t2uIyf4tEgkP2omjbTQFTwpqVcs88+Yv6yYF-uk08Go z)2U0z$iO@uvPss^F*3HWb93cx!b%n|TfcqZiR0%1oA)0-dvSyP&)I~-I$;Tk zIh8E~gUi-#+_+(4$&%itvYhOMFdttRYh&;!s3a1+OH@I4gA=*3vNAICl*kBwH+y>v zBOP7vd;pgZgHezr$rDsnRF#yG`yF{{Myr21oji8#>b0BqpS*s#WWgV@34A)Vn+~3# z@$p$@jlF$KR<2nyF}`R~XI*h-MqG%Ox09uz5eOOxz!a(|qbdgSjQY4*LU_23v!$hx zuDXUA8H5$ED6gz6r>FpoCS+7W4z{hInPT)3ynA!{f&^d_UaNC(fMgv8orqswh~oLp z;X}X#R+ER9gPVheGvnOJBgc*$KCpl9j?EJj-#08EKYaT5es=mNo9KBUA+M;UfKyV% z<8c&Cx}L77omWIedSy@V>ODvHZ(q@xp6wUhSk=9B?TVs`y1^ch3$5O;dB^tM)k1>2 zVgllfDkIE>Ae%TcjizmAVd>!R?-w4Qo|jizU0>hS(%RbER990~UX+`YkrEdj6%iZ| z;Opt`=Imf+X$2g*0q~}36sTqeY?{10#@NQjF({|7bMeGF5Zsn|B_*dg9IT zCu}0Qkez!_OiX%Fb!%JS$mrscfsW3G((I(92!B^MTT@+q4K)CsDw+c!HWL_4X&DKX z*pLuUJ2Nu_x*82c6{^6G!)R0%APN4YoHV>vkdu%=t|6vAet!Ar!HpXstS}#9g>)hr z5#rc+5k3(@(S!Vq7l6slydvZ)F_iaJR2ZJfM=gJV;3OUr7S+dH~@dwaXvo9b&Ti*s`` zl4B#nL;SqF+?^flZ2_1jhI$~-qme1l-vS>BGZYIa2cMkg=H6u!t2Xc1f9%+qOV=*n zefa#jJNF;3IafonaSe!!Ovx*)uWRk@?(S-v%*^-y`^%C-bECURwSuA`4egyO22WC>YU&xAS-bi{HrqSK zHt#>MZ}UJ!S#)kgQ}1Y3M`n3LXZO&O6)VBFs~il;joUr7c{X zeDWHb2bN4sY}vK{_^~q=uHLx$7_iCnBb$;SmQcbFfwcy<*3~~EGC8NLw!XC!u-V!O zXW(O_gT0&_EDg2kG!j5h2{oE1o4}*XNXW+r`n%c~8zF4Mx+Y>-<>cjMB$ee9WaZ@H zpAr{ehxGZsczN&I)wAcf%mZYyu(5EkB5ZPTaUpE-e9I>I4`7pf!9pIc1za5L?CfU8 zj_ujKee0GjAQoP?dd0}%D{~8tW|$NBpFh8R`2U-Dli4UR{TGGQr@!$S)3ZI@GE%aN zfGHI$fvTmUXKHQjpI&97LSilY}mGS zhsr`;0WlGgZ`o8-RK-&?G;~dEY+ZfB!xA!!s;is32M2~nhZhg^bu>0sm*nN9Cq{>c z`Fp#$I@wuUS(q9b=Dw_idDiTkjG^z#1Q zD`!uiIC``jpb5M>3kOn!hj2pEi2{lsivAy9Gr2jr*m>AF*yiIm?A^O_{kk=4)~s5! za{1DczP_uo-^t0tT?oJB-WXCFukiorGwU^lTO z4Lv)JoCR)HkE@4N8grt~QsGF;;iMBS4gvF^SqhLaOrKLp`WTj-JB&9{gMZ`p5^Xlt+m#&;W zwr|(&o!j$r=FNw;6A3z*#uFw+2%_B3k%I$&iIbCK9w&>b*`b~5Hm+Q?eA%+GC8MJw zi@ICd&wpPonwkCb{>Af$cd!32n!@tG56mBkoB4~&&KQ3ReE%PxrwWTnfj2=;Syhz? zk_mGM&!FI_gyf8j?EL)P;)<%us>+g}(8TJHC@q|D;lhUTt;(Z%DdH*E0Y73LQf z7Mf!dsl6*<2vkiieG7X>&)~S2^n&V^mI07Et=q76?TRG>?QL~sd3ova5dndoF7|d- zX2wSPI$D|<>QpjvS%X2Y5g{2;s_}8f)$NeYPfu6Rex;l*l*u>*tbq8fr zMoK_Q6Fb#OFaz@GF}BQwL zJg}?aQ;187@CnS$K7W1x;>lBocW&LXVZ(-r4R$Q-NJ0eIoX^I_g!3Cb;mR9|$J=-#qBpA)Op3py+`=V`rPk#=$awe#QQ+n^rFE z8C=xW-PzgM-qzOATvb$j^J|%Xdg|kwXU`tpzjf#OrL#|;{%`f^44wShw~wDbd+~Pi z%j6U|(;q*4_%!*K$V4*2r^nBqyt7D9QWzwM)nn(l@oTc69aj^9=|J z4h{#goV;FUtB+TdjIzI8<($GIx@0oc(8Av!@z=tapobO9UgY(fj^l)9~ey*)Ag&j zZ&|f!tiP|LxxTRhWNEdvRTX*J@iTJ`N1xvUcYf#2jcb=Loj-l_)T#f?@#gfGhY#;Q zdi(bMx3=)hn^zyE{|cKkzdhM>_~OND-cT+D7#ZDV_H53D0`gJfAyk#dUBT9kRJ; z)5J0mZ`KxPWhF%fcz8Nmo0=GCgY+D>M}kNbap#N?8yUc+I9;Qlyr#abcNhc^8+Yvh zY@WaMBR9o3oRHjk%GLo+cHf z=t|0pvNBTAOnb@buLRk?s+GRJ1{IH2QG&v)D45`gN{9(%iwZ+Bg@t+hd#;~3cxdaY zC8Hy~J-xkM?d=`SjX4=ew$9{}6`uLb1AhX|s#xi+^*h#&FJ3&@+1grHU0zmJ2Dhr` zWK=gWhO=g7r`|k%eCOJwD;Lh4{^iv1LwolAzmlghRCo6-S+#Vauc0V4Dbm-?&B4+;HaayQSfHq+q^$hXs;at{j;_8%T^&5I$|(Ge z-2{0$j5lcvpB@|=o0?zK+BUFs_3Ab2*Q{AS(%sZpS&*I{7wYHgZf{`(dw$d@@R|~< zqN2jk>6ep}k&}TsfJA&wVQp1Yci+J1ignwz?LTq;@|~w2Kd^D2LPSW3li}5o`n#gC zDxO54(e?C<%&e?!Z0+sr?QE~#YvaZb|9!j3$gQVln1x5ijXxuiX6yx@Mz{7bg$-aHbK~Oe+fQD7 z{PaU}>WAmg?o6Yi2aIfK`a9Se?V9(;m+Uxk?$Ql@VD==S7Ml_dkFc3u-2+nN#XWru z#i_|rer|5|R=$zZnYn)cfzioH*#(fz=Jw9MCGFj4hwryO9kPifFyc+Gkhr+?g4(vW z!KJGw)*@{7G&fZNHbJ=Q>ShPbnU0nk+*O9fB3Ci!O(I}ZMn+0TQbI)~r>Lf?v8#Vz zbottCTlb&5eD2PR_wVN|_$rcx8crsgN-8)aMNLZ=vT0*$hq7s9ZmI{^q!5AGRFp^A z6i3-)^!^G72w?T;npBX(E6Os^L{cOv5h*e3?6KoP{K5hPfX$^x4sO}7dT9?}v#GJM zp&q#9@|;{2AtCnp0Lgg>nh2e2^XIW5b`<_78WFj6^UCF`mJIjyb~e}7Rh1Rx=Vj+) zW~QY?jx3vDyzA3%9^XRPJaO#Ek;D7k;{RpnOWv-|JNT-*d`ed z+Vq*jSMT0^`sUN;??xuzpP2sb>c=lAnKP4!yZHLo8J}C$B@mMt6UYpbm(L8gPeom^~84GaJ?R1&-jQbpXkf&!!Y z0vt(ENs09Q^76XY-rhyaCbn$ZckC;_u6B{dg_iop*a3SYMg z0+x57+^#)4H>_B-xUa3PzNVtAytK5WATKL1dEP=<904m1kYt4wr8yVR3c<9n&WGRo z;*p_6y&bKsjWv}OB?W-Xl%%-$m~g-KYZ(r1=Ht^_moJ_=+W8nvzop*sN`8>*(%vv1d+3h$4j?L^Mkt*50X_ntEoocCP-Bk%?I))z!^i z0|P_DgG0UT4dvwp>G5%)zV3Do7Dl?d8frv{rn0iK0<+!?6J#kkIV&P4n3_{uQq|DW z(Z6`*rj2`!|9a)lyXh$%q?>o)!i9_(2z0g)5iO91GoAzrl?FF$>FVj}>*;`83q%b> zJfi#}gQ^%XXLyitaX|ro0X`ZPPlTG+GKkn4!={RYBuFq2u@ZOgn{gX%Si53$U{QBl zV?$+GL2hn#R!T-{Tv*_IE-6(NHC=UesyNR)CX*lmlGHN@YU}Rk>Fw)l@9Ar6ZEL8l ztu6y$W^P7mN?c?}NPuV9G^11b(}&+~o;wbr%w0QoY}>MB)B1_gu^az&yE%i}HDIrL`^as^6dVN8xQ?*?cUv|uRnhNabNB9?9`WA_m4iAVt$}0hBn{V zbM{ne@3NKa_MSNAF2E1%rj!)$={R*0mypoZir&5z6XRWd)j3g--Zq9t+BN}k(HX9u z-XXDRsR)~OO|5O+19mpwPVFFcFxW)yEUj&vy@G>dQgTa5svFzeI=b3BTHrKpW@1!y zkhhDCt*O2?od!GBU=y#>*9&eaHGue3A(6~{z-DbrOZV`K4I6eJzj)>0`jN3Gz9#V}*bxLOCLJbqx)5ni>_PS~x7S2LKrsXO84Dh9!`Baej3o2B(Cq zuMlS#RYR=v`zq6;qI~R)jpz=+F>z_muAV`03^wbV+gmyZZJp-WWLhqiO&nQ6 zUDw3Q8ok*DY}PckwY7J)wKvyQ6c%PCMMnjCIa}M9=xJ%Gk@4{UT2WE)YsVT4_+YtP zTv#|G4`s7!(ee%JcOU=t@{>2yv$|YNHkrd?A`CX+bv}qG@C0N#hq{J3WK)ewhSyE7 zI~dlEB#;bt?0jsdQB0<~G(8}7`(cZ<*)ZEI=-XSJ8udJ-Py0NCVv9+POp|P>5s;aCU zL;-n_&G@KbA0Jn{Hb$uR;mMP0=Z@~%vwhQs4eQpRYz|!g@7hhqaxunS9pLX1V<#>$ z(KLl9sUrsO)Gu3)j|^?uwB^(eG|6F96CxHNIb5 zJ#zmRI*Y>4IGXxuI;ZOz3%Zt!Ol&`T)Qw+E2uepv$tYq}X$BUqo>4iCb=`yA_4S3x zLBXyTx;j+5z?g(oUk{H6hTW{JZR%+29<;Xm9h-NfM!UjubYE~rIC(?28D#hV^m!Rj71rBP(YY zS0DeN@X)xVgrv;eocz4v%Ceej@HAIemX?7O2*jru=_v`Z;Ss^!F3whZzaSekr`|pO z_1ejU+c#`nyK=>f@v*V7(Zz%9ZI}N0xzN<-4<9B!e0clj*8v}2GMPxGSddauhklu1 z4BKt1s>Yb%NkkIJG|40i8BZn^XD(=B>xCzfArC?o;nSY)lFYHZ=wB4Vh?a z;ZwhD%bBl#=1OdAQDgtmvQ0-0*b4x|iNh1YpQDn=G%}T>ZRP8qQc;ngmmKNkWn-vG zr#Sk>MW@*LdWFWOrR0D-y|TWst);8iNT25iHl-vX93WArQZ)5VOl{zTpNNFiwCud% zqLR|0;)0y?M1ZEBpPPfVv8kRWjYh(&V$o$~vS_~=TECGL6_*eZ5fVzxFE6dCZ)xd- zRj6%8E?<4{VRp8GodXIH!Mh>Ua3WEKs3=3=1F@ZOlR6fQh4p;6s1H>oLSxOZ)8a@^ zIvkbYl~IvbkbxOILavZ7!`t%-a+}ZX3ZDMFYkOT)X=PD3o zGhg04fBM^tH}Bqm`1JYnrw{L6y}aC+9AmAct*)g(3-lR&xOt0@5djDFf5~vqGgS?Q zQK+sXm7*KicjM;c_e{tAZ8h{syuUY|gooRqX>bQG@NHBY#XmJUB{eNMb@9p3-l0&~KfkQ9 zs;0TMt+P*8pJyQ&@rj@}hagIXYyziFBB|>b8e7=AxOxXi#KtA1W@Ke$WoD))#YaX4 z`+0acS(_T_YpYYp1ZdKb?n38WtH7 zpOl!KmJT=2!EZhzBRw@GB{@DOCMq<*%gf!?$dGdM_TvYS?p?om@#Ma}TUIR|=5Gk=hdqYb2J`TXOSH6FDVK zHnr$9E$^84FfV(1Q*AX0$<9A2D#6CvCk$n?qO!KJxuvsDPnQR#$^y)Q4`ovhyf&f{Bnaa)JE~nn>9jm`wqp)Phpr)0>++ z2bZo{v;EM8OZPv_POf5~&$D0w=R)q^u?g>oKvsun)GE!viS~9d{kf>HFw<=E@$&I5 z*cE)VHFgV z#gM6VLo-_&M>lUTzu>TN$YxSXdItQ?nQW$}Bqtzj`g%Iq>KRc^-h6QH!QJaOE}YoA zcgyNgU@s9iJ387L>x+wD{%dPU=spu9{Xjd*r)PfXyg>EYAh_=y+DU`V`T|NS~X1UO-<+&91dsW8xbA}?PhFBN>*NJc|}cQOKWGhfiBZ-BJm#5 zfDQsqIXGxZpla&s8C%*pxcUT!hDF83Cx85*F#KeTS z*w~ne(9mFCZ$~#9BP~tOBWEw3zi{r<$wRw0Zd^6m-`UaHSPxEZO?5?nW%<9hM-Fl~ zGtI>F_x(WAa|C~Qd-m>w$1mP~p8j3S<<#uwm#5CQ8RN(pVA2S9Dpd4WQ&ZQZ({&Au zOiawoEzHc#O^uB7fO#XE3@^TqCX#S>+069)c&swu83&?A3JFRQ=^B|?+1c2EV`Zvu zq)o;Vb&ZX+bTx>PVG;5e6)c?kC8`1J4NOhoDl`A!;Ght17b`tIb&8HQ6|bzUV(k+a z8VKxWXl!zFW^PGYc~wJ8OM91%Ezj3ZHPmoQNWpkdNfnPH)97@4Giz%HH!nYb@IJv4 z9u^ef?d|4dV`FZpqY0vU7Ii-y|_UzlYclVC1o7avnU) z++1H(QC?PBTw0WuHq`&GzE4NmEoM=3IW_zHPG2NPw@CgO!Q48kOd5?_{Zu#VBBviK-Zo&;qBg1p;|1XW#II z#LS$Wtn`F1XIEo7frM3-lT$GF2o7|&_VNmeNlMDdDK0GoPQ9VE$J>t^y*Xqg$_%wZ z8E7~$1h`ewz|_>z&dJTq)7#e%9$!y)XJ>nBQz&Rn1u43!sxrvWW#?S^SK&2ay#)Ce z@}}n&7gba@HnsPSu3o+M!1-V9yquhwZkWfy&d#-vgBw*_NBufOh=}=+NX{KbF@5e9 z2rV2TX!7waVCP_Em5`Pa6B7{^`&x`&2o<%sxj2`vnPy(A0l)O--Q!zcK3>5AfqtG) zT1lHiR4ggZ%Zr)EGH-#Pgt#(6O`C3DYGrBb=;G?(<>T)k7#tE38U{~jXh?8SfWM!Y zyPLDErLlnqCN*n()x_F$YuBt^wQO;cPEJ&WIz~O4qb@Yvl zEo`0KJbVIzgF?eYLjwHWogGY!fcM2EJ-jyqpNDuwd1WjXm|8rELZND^)AdbkY+QUo z!lFS?o}HEu8{_X_YN|sfhXwf%W#DR3RUCyt2C*pc=jIMhJ`t&f1vO1AZB1p_k#U|@ zbS<*7w3M`=OMsufm6vBwbYfz9c40|rWpzV+Yp0Lb0$yZ;2_sQP>hEZgQAHU`q);@p z^`ZWzy#sif+}+&W-CUgIcVm7DjSK6UlM$9J=LSvXm_kTn%>VvL_5l7$KpF+{Sy(HQ)CasFN92(rnu zfP;&ZLtI=`Ohi;j82JYw7xDHWq*a(fwQw14?yKjIe%-R06yW9IYHw{~qC*lBNlMGe zN=u=#v9K%<6_!#az!fqk#^yG5z=F7YBG06M06hNS$@KB^gtL1#X8LMs%7#5{eM7^G zM;8w-8XD|v?`*EGE-x?12X-MT4n*a?mo9y`be82`lB0h{?dRm&h|=^AUjOm4Qvx}LzW4p`Aq8JiKfHRwV*#8LB8f_d4jq_4V-s^*XE%56fZ*V;u#m7oe>Zza za|2B}37`DnG18hEtB6xofw>KV0>S_-Xt)5IzM&y8sp)Cy87UEwfv#5OI#jiwU~htg zoT{n{28$t6$TSTd9X(4Y2k(fqqWs#{j@H)7oTz9o3mt8eBFJuxTmt;9ZM?mLqY@L+ zvI>ezDyo3pZ1aU|@_)l7BT<%-S5$>;lELQ(Y+BpfJ2|_$xw^Tzxi~sl+gO-FL2D+P zFdmeWWY|o`g^Vzw*v}6fYf5%Oepz)RWOL<;O?%Irx%ue*yV;v?4uXe^lNZ&}_=Zg( zRKxA7{N?X;2H_PYqjto@!^OeDK2Hj+(1LV|GSKCRDH8VrE)Ka_^x^|eVZXe5cmLX+ zZ6rT;Pd5j^CLJ#&9S>5Rv@~@Vc2*94L0M(I8hFYXY`QYpgmC&pHod((+??#~tW0z? z)Km?+I{Ov@G)IPqhWff&+nW$J3v#p56G6HZ>2c-qzgDYjW@gLQEhFj4>E0=Rej_zo zA3Xc=J$gtb;?VvJSMGy6=>3~dQ?uWzi=f4F7mTtB9s|h4gIJJ4(x8G^Q%B##+``t` z%ReYQHZd_RJvB2qF)|?7)5gqHhek9u+&F#zft#W#+*?k-5dj!#YT8FcRU3=Q*-%de~HTe^Jt^5K?} zf&?#fb8Vusf|QnnuaBvfhkHO&0%WtO7zCWPP3@7<3y}3Xf((0w#(IEFIeBG8VD&*1 z3qoYLpbRzz!2_}^Q!^udZEb)ih&AC=4N`Vw+Dw#9^g2<1Pe52aDZenkw6dmot3$nkv3IPS-!faxv{0Qv!k=K zy}hNWwxPPBw5TvID?K$aIxN)RGkyAhJj*sU*R?z|y<<}vhD0KeK=MMN(8yE@i2BS@ zw{AJb$fJ=IY39(LlP51-zjyD+i+687OfjEHW=(Wv_Q8E!MG!P%;L1H%poBNW8gyM9 zLo*v2C$AvbJyDQfUS3&IQJkBa8WrH|YNfAEBpOvj$I2_IsDL09hbNMtEkr~H-Q5FX zv$9H?`@2R)hq~Ho^5bK?ZFSYvLe}2A`QW$bFJHg=@bSZ^PoF=1{P6DW^OF;!iLNN~%~Kfl8xkYU>&r8pD<#b2BqjV?%vC9W8Ylg@DDN>%@@+n#rZeSH~*^_z@9K z$;i(uDX*z%>gZp(WMa$y1E;RuyZ`L{(s?Xw9PDf$k>P<_8X%<>SSSdGG#E*dFsgwm z%(Rx^R|G_agazl&L?*|%xwtskI9QRsVaDA$%-+EPzsJqZ&LKb7@BlCE-aLEo@W#bc zC!6t51`)*hl2Xx8k&%%RVIe^_RKPiEm|NLc+uA!gID+Hk=wNSe zYi((6YOJlJMwG{4<4em+D{E@&>g(zdDW39@qJo_4%#_6Vm=GTyXVYar%zd%^lYN)GgXlrWI>2yskDv?5}I)mIKeu1IO?d=CnoxKdzcVE1H zGsh-#>T!DZp_VojG5D5Eb#=O~AqcS@9NhdP5)-paYHHisySuvE8p_MF6M}->0Gt{) zjJzTU^HeZ6EY!rNQZ%&m^h~UryuCvbbMvZu#>dug-neS@Kyy}6Ov;iYhi^Z5@#NLJ z_n*E@eKq>iGn21hy}G)0*WQDN*Do4wNDT{<5){S6go1;EgMxwr;M9kkA_zI>aSDlv z%E1*O>RMVl`i3UPP+b@94z#o|houz*11(J=86&Bfnv|850~}CEX<1omX(`Bn3UYHY zQ!^71qauTRU0ux`pG^G^HD{*hdVudfs8m(MV`&5ml}b|wc`sd)PS>Vu(=^FAe9f7; zGUw!@O^1FtedQ)#^ZDC1ADLZ8jHeT>de+gAhjtT-XRrzHbu_j0^-L`7?cMz&6B9Fw zYpPoSn_X@76&1OO!NG2p25K~tijoXmZV$EK2t=|P!lsdhBgn23^9pKvmn~hldGqpB zL-j>DvFXD{j{@`a{N=k3fX#1`wdvV+&tG2KzjyckgWH!3S7!wV+3Qm&7@Vn-bD)Wv zGhB9-l$M>JS5#IFE8^`SVB;0!;}f2Pli9~92P^O@7_@MzP1n)WM~dVLE&$Ht2PKME{F-(08s*>d_Swk&3Qa*;oHqo{BLxCBeO#SX;3P1&pt!WWA`wGI*hK4n zmX=oF9}D0$OpJ64btq)Aij-nvR%T{iVLpVjqy$c9plqh5L`Eb8`?@<@+dlXoYr~>; zZ)#?ni3u5`E>sd(lS~6B>FS#p!8)XwiLt(c7MbYfy9LREZrZsBN8i{81e-42!Le!Sg|+P+ifR>#_H-gRYPlAFJnhX&*13D#MG?Z+@jL*%9@7e zruiIDq?Nf{=bKzzR#r|?NeO%{aFq*)Ni?;PqX}Eq$V5CIDY?tbB8zwCmOP@Km3b!v zGG$Rg_tf;voZ_;wn#T72zR?xy*Y7xZ>ePi_udi7EYq->SS$iV=M~WiMa%M#Kgfj zj)x9I3w0QVhTva)T^${|hPoO_RZdn|IwmnbDLFkYGY6_T=jP_-!28_P&^0tOvvKka2#8F{ zFRbleI<|55;lum3?>>I=*BkfmKYRB2{d;uj(ziueMsxGj^Lu*-`x}d*qukBubP`70 z+}zQ~!O<%qA}lsBEeoVWMWq$B%?;QEybHM(3NU00(4G%;ct=Va?sHMWsAA!wYVd@q zQNh3Hq%YJ*P?TfDnsYbY-#J#0egnHEEvuQBmYthhT3S`#+}$}ax@y&i9sBnkIeG5n zc?*_#Y_R78(Z1wUz+#keFbaaTGc_9UTbi1hT6FLOjf|BS7hEU=z~dJ{(Sy+>RL){& zW1F`SL*VBTMrDN=LWDfvH`&b3WbPMP?i&0 zz)kWD4U33MNREZ=4aiANPD)CMkBNv4g7Rh7hKAnEW{m#{o8Yf+fa`RCEg({eRCP5q zEp4cE1sB~EGFQ+d4dgt~-z~<-aZ*SSbhgvNo zql8sZMc5?ZiAdF*uA^&cVrgOL>DosmI*Vx?F#=*@uBqS!iAg{7zaA4V*t*a&u{Bq&S^?Q$>J%9b~%h&EY zrp(9e+;q~X$7fF0XGDa%nbUPBSXCo^8*OV#@N9&{B&23$gXGhjId z=8B7G$SEa>To6GKWAN%AJAvV04xlS3$|H46N#_31IWQScmj`Al9CEVCiAl*>*@XpV zRduZ`-29LLhie0Zf&lv5B#< zp`NZTT^%PS0lDO5s0{-80Ms0SB{nS*5hu*Y&rl;|ND*?fv(INe%0T1utH%%T+_-%C z!Y^k|96P#i=g#%jsw%v)#ugUlmgeTbF&Z1_Xi~{ISw0~x7FOWd*%tEfi;7DC=dKJF z)M0Tr93s!HBrh!{%Ee}C=;i4b5f&N|866uN7mu8{n3$NTh|oZPKQCt&GXp&C5qJwG z|Hrw|?CcicyHp8y5)nKZ6m=af4SiE1O9u~+fbiJ3#JH%KP=9xG1APr5Msd;BC1V?Q z9XWRT{MFll&9`sA%zR}Ns^M z-?el9p*&0)^wn!5)SUfp#*NvY0^-gmXHGX{MufXtYHO2KF@}1!IyTnszM;X<@hKUQ&7zXZ z+J<0uq` zL)XGEWGY^fpI;Xluw>`t5)hM=k_Fiy z5@f)GgO8+~l&}~dtEqvH4@jUwBO_vBzF{*uGCU+8(9hk;-dc}@e>n5wo%cUgL+V$= zAq(z+M+cFWx~7()ktIlvgF|A|a*IpLOLL3TV}cx=jkQP=y-tuV?>TVd#JMZCZasYd z?%kI;;Vh(k>5;mY9I}5LK5hhTb)LPk`!1n4T=UETiUt0c>0AzM#QJ*=9bm8wf2v$*}M1T`D?%4e(>A# z7jHg(`TTorudh;xpP#)r*Buz(Y);pvV3pNrrkdtfj^4q6k+Df>X<4}i1tpagRS9g| zTnmwvd5l{bWF8nvh>!~+*boGwFXUlE4x+M-?s$ZW^f$Y4=LGxFj!F=aeWB`vLf(Qs?Uci&<8XB3HTie

33JoWQSWNWyptcq#J15J$CdLc$<<*0mH!q(* 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൦?0g#Mj5;Ot6X7{ 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%0A?G5$1)27jgyG$ECd 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

OK#0B}d*g0S`9ZThvniQX4V!=sMmHAvPbs`TBL` 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

    &p=;7DfD;>M{{xrZvm|K^b7?P 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. -# -import espressomd -from espressomd import assert_features, electrostatics -from espressomd.observables import RDF -from espressomd.accumulators import MeanVarianceCalculator -import numpy - -assert_features(["ELECTROSTATICS", "WCA"]) - -print("\n--->Setup system") - -# System parameters -n_part = 200 -n_ionpairs = n_part / 2 -density = 0.5 -time_step = 0.01 -temp = 1.0 -gamma = 1.0 -l_bjerrum = 7.0 - -num_steps_equilibration = 1000 -num_configs = 100 -integ_steps_per_config = 1000 - -# Particle parameters -types = {"Anion": 0, "Cation": 1} -numbers = {"Anion": n_ionpairs, "Cation": n_ionpairs} -charges = {"Anion": -1.0, "Cation": 1.0} -wca_sigmas = {"Anion": 1.0, "Cation": 1.0} -wca_epsilons = {"Anion": 1.0, "Cation": 1.0} - -# Setup System -box_l = (n_part / density)**(1. / 3.) -system = espressomd.System(box_l=[box_l] * 3) -system.periodicity = [True, True, True] -system.time_step = time_step -system.cell_system.skin = 0.3 - -# Place particles -for i in range(int(n_ionpairs)): - system.part.add(id=len(system.part), type=types["Anion"], - pos=numpy.random.random(3) * box_l, q=charges["Anion"]) -for i in range(int(n_ionpairs)): - system.part.add(id=len(system.part), type=types["Cation"], - pos=numpy.random.random(3) * box_l, q=charges["Cation"]) - - -def combination_rule_epsilon(rule, eps1, eps2): - if rule == "Lorentz": - return (eps1 * eps2)**0.5 - else: - return ValueError("No combination rule defined") - - -def combination_rule_sigma(rule, sig1, sig2): - if rule == "Berthelot": - return (sig1 + sig2) * 0.5 - else: - return ValueError("No combination rule defined") - - -# Lennard-Jones interactions parameters -for s in [["Anion", "Cation"], ["Anion", "Anion"], ["Cation", "Cation"]]: - wca_sig = combination_rule_sigma( - "Berthelot", wca_sigmas[s[0]], wca_sigmas[s[1]]) - wca_eps = combination_rule_epsilon( - "Lorentz", wca_epsilons[s[0]], wca_epsilons[s[1]]) - - system.non_bonded_inter[types[s[0]], types[s[1]]].wca.set_params( - epsilon=wca_eps, sigma=wca_sig) - - -print("\n--->WCA Equilibration") -min_sigma = min(wca_sigmas.values()) -max_sigma = max(wca_sigmas.values()) -min_dist = 0.0 - -system.integrator.set_steepest_descent(f_max=0, gamma=10, - max_displacement=min_sigma * 0.01) - -while min_dist < max_sigma: - min_dist = system.analysis.min_dist() - system.integrator.run(10) - -system.integrator.set_vv() - -# Set thermostat -system.thermostat.set_langevin(kT=temp, gamma=gamma, seed=42) - -print("\n--->Tuning Electrostatics") -p3m = electrostatics.P3M(prefactor=l_bjerrum, accuracy=1e-3) -system.actors.add(p3m) - -print("\n--->Temperature Equilibration") -system.time = 0.0 -for i in range(int(num_steps_equilibration / 100)): - temp_measured = system.analysis.energy()['kinetic'] / ((3. / 2.) * n_part) - print("t={0:.1f}, E_total={1:.2f}, E_coulomb={2:.2f}, T_cur={3:.4f}" - .format(system.time, system.analysis.energy()['total'], - system.analysis.energy()['coulomb'], temp_measured)) - system.integrator.run(100) - -print("\n--->Analysis setup") -# Calculate the averaged rdfs -rdf_bins = 100 -r_min = 0.0 -r_max = system.box_l[0] / 2.0 -pids_anion = system.part.select(type=types["Anion"]).id -pids_cation = system.part.select(type=types["Cation"]).id -rdf_00_obs = RDF(ids1=pids_anion, ids2=pids_anion, min_r=r_min, max_r=r_max, - n_r_bins=rdf_bins) -rdf_01_obs = RDF(ids1=pids_anion, ids2=pids_cation, min_r=r_min, max_r=r_max, - n_r_bins=rdf_bins) -rdf_00_acc = MeanVarianceCalculator( - obs=rdf_00_obs, delta_N=integ_steps_per_config) -rdf_01_acc = MeanVarianceCalculator( - obs=rdf_01_obs, delta_N=integ_steps_per_config) -system.auto_update_accumulators.add(rdf_00_acc) -system.auto_update_accumulators.add(rdf_01_acc) - -print("\n--->Integration") -system.time = 0.0 -temp_measured = [] -for i in range(num_configs): - temp_measured.append(system.analysis.energy()['kinetic'] - / ((3.0 / 2.0) * n_part)) - print("t={0:.1f}, E_total={1:.2f}, E_coulomb={2:.2f}, T_cur={3:.4f}" - .format(system.time, system.analysis.energy()['total'], - system.analysis.energy()['coulomb'], temp_measured[-1])) - system.integrator.run(integ_steps_per_config) - -print("\n--->Output") -r = rdf_00_obs.bin_centers() -rdf_00 = rdf_00_acc.get_mean() -rdf_01 = rdf_01_acc.get_mean() -# Write out the data -numpy.savetxt('rdf.data', numpy.c_[r, rdf_00, rdf_01]) -print("\n--->Written rdf.data") -print("\n--->Done") diff --git a/doc/tutorials/02-charged_system/scripts/nacl_units.py b/doc/tutorials/02-charged_system/scripts/nacl_units.py deleted file mode 100644 index 30090430761..00000000000 --- a/doc/tutorials/02-charged_system/scripts/nacl_units.py +++ /dev/null @@ -1,172 +0,0 @@ -# -# Copyright (C) 2010-2019 The ESPResSo project -# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 -# Max-Planck-Institute for Polymer Research, Theory Group -# -# This file is part of ESPResSo. -# -# ESPResSo is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ESPResSo is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -import espressomd -from espressomd import assert_features, electrostatics -from espressomd.observables import RDF -from espressomd.accumulators import MeanVarianceCalculator -import numpy - -assert_features(["ELECTROSTATICS", "MASS", "LENNARD_JONES"]) - -system = espressomd.System(box_l=[1.0, 1.0, 1.0]) -numpy.random.seed(seed=42) - -print("\n--->Setup system") - -# System parameters -n_ppside = 10 -n_part = int(n_ppside**3) -n_ionpairs = n_part / 2 -density = 1.5736 -time_step = 0.001823 -temp = 298.0 -gamma = 4.55917 -k_B = 1.380649e-23 # units of [J/K] -q_e = 1.602176634e-19 # units of [C] -epsilon_0 = 8.8541878128e-12 # units of [C^2/J/m] -coulomb_prefactor = q_e**2 / (4 * numpy.pi * epsilon_0) * 1e10 -l_bjerrum = 0.885**2 * coulomb_prefactor / (k_B * temp) - -num_steps_equilibration = 9000 -num_configs = 50 -integ_steps_per_config = 500 - -# Particle parameters -types = {"Cl": 0, "Na": 1} -numbers = {"Cl": n_ionpairs, "Na": n_ionpairs} -charges = {"Cl": -1.0, "Na": 1.0} -lj_sigmas = {"Cl": 3.85, "Na": 2.52} -lj_epsilons = {"Cl": 192.45, "Na": 17.44} - -lj_cuts = {"Cl": 3.0 * lj_sigmas["Cl"], - "Na": 3.0 * lj_sigmas["Na"]} - -masses = {"Cl": 35.453, "Na": 22.99} - -# Setup System -box_l = (n_ionpairs * sum(masses.values()) / density)**(1. / 3.) -system.box_l = [box_l, box_l, box_l] -system.periodicity = [True, True, True] -system.time_step = time_step -system.cell_system.skin = 0.3 -system.thermostat.set_langevin(kT=temp, gamma=gamma, seed=42) - -# Place particles on a face-centered cubic lattice -q = 1 -l = box_l / n_ppside -for i in range(n_ppside): - for j in range(n_ppside): - for k in range(n_ppside): - p = numpy.array([i, j, k]) * l - if q < 0: - system.part.add(id=len( - system.part), type=types["Cl"], pos=p, q=charges["Cl"], mass=masses["Cl"]) - else: - system.part.add(id=len( - system.part), type=types["Na"], pos=p, q=charges["Na"], mass=masses["Na"]) - - q *= -1 - q *= -1 - q *= -1 - - -def combination_rule_epsilon(rule, eps1, eps2): - if rule == "Lorentz": - return (eps1 * eps2)**0.5 - else: - return ValueError("No combination rule defined") - - -def combination_rule_sigma(rule, sig1, sig2): - if rule == "Berthelot": - return (sig1 + sig2) * 0.5 - else: - return ValueError("No combination rule defined") - - -# Lennard-Jones interactions parameters -for s in [["Cl", "Na"], ["Cl", "Cl"], ["Na", "Na"]]: - lj_sig = combination_rule_sigma( - "Berthelot", lj_sigmas[s[0]], lj_sigmas[s[1]]) - lj_cut = combination_rule_sigma("Berthelot", lj_cuts[s[0]], lj_cuts[s[1]]) - lj_eps = combination_rule_epsilon( - "Lorentz", lj_epsilons[s[0]], lj_epsilons[s[1]]) - - system.non_bonded_inter[types[s[0]], types[s[1]]].lennard_jones.set_params( - epsilon=lj_eps, sigma=lj_sig, cutoff=lj_cut, shift="auto") - - -print("\n--->Tuning Electrostatics") -p3m = electrostatics.P3M(prefactor=l_bjerrum, accuracy=1e-2) -system.actors.add(p3m) - -print("\n--->Temperature Equilibration") -system.time = 0.0 -for i in range(int(num_steps_equilibration / 100)): - energy = system.analysis.energy() - temp_measured = energy['kinetic'] / ((3.0 / 2.0) * n_part) - print("t={0:.1f}, E_total={1:.2f}, E_coulomb={2:.2f}, T_cur={3:.4f}" - .format(system.time, energy['total'], energy['coulomb'], - temp_measured)) - system.integrator.run(100) - -print("\n--->Analysis setup") -# Calculate the averaged rdfs -rdf_bins = 500 -r_min = 0.0 -r_max = system.box_l[0] / 2.0 -pids_Cl = system.part.select(type=types["Cl"]).id -pids_Na = system.part.select(type=types["Na"]).id -rdf_00_obs = RDF(ids1=pids_Cl, ids2=pids_Cl, min_r=r_min, max_r=r_max, - n_r_bins=rdf_bins) -rdf_01_obs = RDF(ids1=pids_Cl, ids2=pids_Na, min_r=r_min, max_r=r_max, - n_r_bins=rdf_bins) -rdf_11_obs = RDF(ids1=pids_Na, ids2=pids_Na, min_r=r_min, max_r=r_max, - n_r_bins=rdf_bins) -rdf_00_acc = MeanVarianceCalculator( - obs=rdf_00_obs, delta_N=integ_steps_per_config) -rdf_01_acc = MeanVarianceCalculator( - obs=rdf_01_obs, delta_N=integ_steps_per_config) -rdf_11_acc = MeanVarianceCalculator( - obs=rdf_11_obs, delta_N=integ_steps_per_config) -system.auto_update_accumulators.add(rdf_00_acc) -system.auto_update_accumulators.add(rdf_01_acc) -system.auto_update_accumulators.add(rdf_11_acc) - -print("\n--->Integration") -system.time = 0.0 -for i in range(num_configs): - energy = system.analysis.energy() - temp_measured = energy['kinetic'] / ((3.0 / 2.0) * n_part) - print("t={0:.1f}, E_total={1:.2f}, E_coulomb={2:.2f}, T_cur={3:.4f}" - .format(system.time, energy['total'], energy['coulomb'], - temp_measured)) - system.integrator.run(integ_steps_per_config) - -print("\n--->Output") -r = rdf_00_obs.bin_centers() -rdf_00 = rdf_00_acc.get_mean() -rdf_01 = rdf_01_acc.get_mean() -rdf_11 = rdf_11_acc.get_mean() -# Write out the data -numpy.savetxt('rdf.data', numpy.c_[r, rdf_00, rdf_01, rdf_11]) -print("\n--->Written rdf.data") -print("\n--->Done") diff --git a/doc/tutorials/02-charged_system/scripts/nacl_units_confined.py b/doc/tutorials/02-charged_system/scripts/nacl_units_confined.py deleted file mode 100644 index 46e06ec522d..00000000000 --- a/doc/tutorials/02-charged_system/scripts/nacl_units_confined.py +++ /dev/null @@ -1,183 +0,0 @@ -# -# Copyright (C) 2010-2019 The ESPResSo project -# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 -# Max-Planck-Institute for Polymer Research, Theory Group -# -# This file is part of ESPResSo. -# -# ESPResSo is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ESPResSo is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -import espressomd -from espressomd import electrostatics, electrostatic_extensions, assert_features -from espressomd.shapes import Wall -import numpy - -assert_features(["ELECTROSTATICS", "MASS", "LENNARD_JONES"]) - -system = espressomd.System(box_l=[1.0, 1.0, 1.0]) -numpy.random.seed(seed=42) - -print("\n--->Setup system") - -# System parameters -n_part = 500 -n_ionpairs = n_part / 2 -density = 1.1138 -time_step = 0.001823 -temp = 1198.3 -gamma = 50 -#l_bjerrum = 0.885^2 * e^2/(4*pi*epsilon_0*k_B*T) -l_bjerrum = 130878.0 / temp - -num_steps_equilibration = 3000 -num_configs = 500 -integ_steps_per_config = 100 - -# Particle parameters -types = {"Cl": 0, "Na": 1, "Electrode": 2} -numbers = {"Cl": n_ionpairs, "Na": n_ionpairs} -charges = {"Cl": -1.0, "Na": 1.0} -lj_sigmas = {"Cl": 3.85, "Na": 2.52, "Electrode": 3.37} -lj_epsilons = {"Cl": 192.45, "Na": 17.44, "Electrode": 24.72} - -lj_cuts = {"Cl": 3.0 * lj_sigmas["Cl"], - "Na": 3.0 * lj_sigmas["Na"], - "Electrode": 3.0 * lj_sigmas["Electrode"]} - -masses = {"Cl": 35.453, "Na": 22.99, "Electrode": 12.01} - -# Setup System -box_l = (n_ionpairs * sum(masses.values()) / density)**(1. / 3.) -box_z = box_l + 2.0 * (lj_sigmas["Electrode"]) -box_volume = box_l * box_l * box_z -elc_gap = box_z * 0.15 -system.box_l = [box_l, box_l, box_z + elc_gap] -system.periodicity = [True, True, True] -system.time_step = time_step -system.cell_system.skin = 0.3 - -# Uniform electric field between two parallel plates -# E = V/d in units of V/m -# E = V/d/k_b*e in units of eV/m -Ez = 15 / (8.61733e-5 * box_z) # in units of eV/m - -# Walls -system.constraints.add(shape=Wall(dist=0, normal=[0, 0, 1]), - particle_type=types["Electrode"]) -system.constraints.add(shape=Wall(dist=-box_z, normal=[0, 0, -1]), - particle_type=types["Electrode"]) - -# Place particles -for i in range(int(n_ionpairs)): - p = numpy.random.random(3) * box_l - p[2] += lj_sigmas["Electrode"] - system.part.add(id=len(system.part), type=types["Cl"], - pos=p, q=charges["Cl"], mass=masses["Cl"]) -for i in range(int(n_ionpairs)): - p = numpy.random.random(3) * box_l - p[2] += lj_sigmas["Electrode"] - system.part.add(id=len(system.part), type=types["Na"], - pos=p, q=charges["Na"], mass=masses["Na"]) - -# Lennard-Jones interactions parameters - - -def combination_rule_epsilon(rule, eps1, eps2): - if rule == "Lorentz": - return (eps1 * eps2)**0.5 - else: - return ValueError("No combination rule defined") - - -def combination_rule_sigma(rule, sig1, sig2): - if rule == "Berthelot": - return (sig1 + sig2) * 0.5 - else: - return ValueError("No combination rule defined") - - -for s in [["Cl", "Na"], ["Cl", "Cl"], ["Na", "Na"], - ["Na", "Electrode"], ["Cl", "Electrode"]]: - lj_sig = combination_rule_sigma( - "Berthelot", lj_sigmas[s[0]], lj_sigmas[s[1]]) - lj_cut = combination_rule_sigma("Berthelot", lj_cuts[s[0]], lj_cuts[s[1]]) - lj_eps = combination_rule_epsilon( - "Lorentz", lj_epsilons[s[0]], lj_epsilons[s[1]]) - - system.non_bonded_inter[types[s[0]], types[s[1]]].lennard_jones.set_params( - epsilon=lj_eps, sigma=lj_sig, cutoff=lj_cut, shift="auto") - - -energy = system.analysis.energy() -print("Before Minimization: E_total=", energy['total']) -system.integrator.set_steepest_descent(f_max=10, gamma=50.0, - max_displacement=0.2) -system.integrator.run(1000) -system.integrator.set_vv() -energy = system.analysis.energy() -print("After Minimization: E_total=", energy['total']) - -system.thermostat.set_langevin(kT=temp, gamma=gamma, seed=42) - -print("\n--->Tuning Electrostatics") -p3m = electrostatics.P3M(prefactor=l_bjerrum, accuracy=1e-2) -system.actors.add(p3m) -elc = electrostatic_extensions.ELC(gap_size=elc_gap, maxPWerror=1e-3) -system.actors.add(elc) - -for p in system.part: - p.ext_force = [0, 0, p.q * Ez] - -print("\n--->Temperature Equilibration") -system.time = 0.0 -for i in range(int(num_steps_equilibration / 100)): - energy = system.analysis.energy() - temp_measured = energy['kinetic'] / ((3.0 / 2.0) * n_part) - print("t={0:.1f}, E_total={1:.2f}, E_coulomb={2:.2f}, T_cur={3:.4f}" - .format(system.time, energy['total'], energy['coulomb'], - temp_measured)) - system.integrator.run(100) - - -print("\n--->Integration") -bins = 100 -z_dens_na = numpy.zeros(bins) -z_dens_cl = numpy.zeros(bins) -system.time = 0.0 -cnt = 0 - -for i in range(num_configs): - temp_measured = system.analysis.energy()['kinetic'] / ((3. / 2.) * n_part) - print("t={0:.1f}, E_total={1:.2f}, E_coulomb={2:.2f}, T_cur={3:.4f}" - .format(system.time, system.analysis.energy()['total'], - system.analysis.energy()['coulomb'], temp_measured)) - system.integrator.run(integ_steps_per_config) - - for p in system.part: - bz = int(p.pos[2] / box_z * bins) - if p.type == types["Na"]: - z_dens_na[bz] += 1.0 - elif p.type == types["Cl"]: - z_dens_cl[bz] += 1.0 - cnt += 1 - -print("\n--->Analysis") -# Average / Normalize with Volume -z_dens_na /= (cnt * box_volume / bins) -z_dens_cl /= (cnt * box_volume / bins) -z_values = numpy.linspace(0, box_l, num=bins) -res = numpy.column_stack((z_values, z_dens_na, z_dens_cl)) -numpy.savetxt("z_density.data", res, header="#z rho_na(z) rho_cl(z)") -print("\n--->Written z_density.data") -print("\n--->Done") diff --git a/doc/tutorials/02-charged_system/scripts/nacl_units_confined_vis.py b/doc/tutorials/02-charged_system/scripts/nacl_units_confined_vis.py deleted file mode 100644 index 27bb9ec7ed3..00000000000 --- a/doc/tutorials/02-charged_system/scripts/nacl_units_confined_vis.py +++ /dev/null @@ -1,179 +0,0 @@ -# -# Copyright (C) 2010-2019 The ESPResSo project -# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 -# Max-Planck-Institute for Polymer Research, Theory Group -# -# This file is part of ESPResSo. -# -# ESPResSo is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ESPResSo is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -import espressomd -from espressomd import assert_features, electrostatics, electrostatic_extensions -from espressomd.shapes import Wall -from espressomd import visualization_opengl -import numpy -from threading import Thread - -assert_features(["ELECTROSTATICS", "MASS", "LENNARD_JONES"]) - -system = espressomd.System(box_l=[1.0, 1.0, 1.0]) -numpy.random.seed(seed=42) - -print("\n--->Setup system") - -# System parameters -n_part = 1000 -n_ionpairs = n_part / 2 -density = 1.1138 -time_step = 0.001823 -temp = 1198.3 -gamma = 50 -#l_bjerrum = 0.885^2 * e^2/(4*pi*epsilon_0*k_B*T) -l_bjerrum = 130878.0 / temp -Vz = 0 # potential difference between the electrodes -Vz_to_Ez = 364.5 # conversion from potential to electrical field - -# Particle parameters -types = {"Cl": 0, "Na": 1, "Electrode": 2} -numbers = {"Cl": n_ionpairs, "Na": n_ionpairs} -charges = {"Cl": -1.0, "Na": 1.0} -lj_sigmas = {"Cl": 3.85, "Na": 2.52, "Electrode": 3.37} -lj_epsilons = {"Cl": 192.45, "Na": 17.44, "Electrode": 24.72} - -lj_cuts = {"Cl": 3.0 * lj_sigmas["Cl"], - "Na": 3.0 * lj_sigmas["Na"], - "Electrode": 3.0 * lj_sigmas["Electrode"]} - -masses = {"Cl": 35.453, "Na": 22.99, "Electrode": 12.01} - -# Setup System -box_l = (n_ionpairs * sum(masses.values()) / density)**(1. / 3.) -box_z = box_l + 2.0 * (lj_sigmas["Electrode"]) -box_volume = box_l * box_l * box_z -elc_gap = box_z * 0.15 -system.box_l = [box_l, box_l, box_z + elc_gap] -system.periodicity = [True, True, True] -system.time_step = time_step -system.cell_system.skin = 0.3 - -# Visualizer -visualizer = visualization_opengl.openGLLive( - system, - camera_position=[-3 * box_l, box_l * 0.5, box_l * 0.5], - camera_right=[0, 0, 1], - drag_force=5 * 298, - background_color=[1, 1, 1], - light_pos=[30, 30, 30], - ext_force_arrows_type_scale=[0.0001], - ext_force_arrows=False) - -# Walls -system.constraints.add(shape=Wall( - dist=0, normal=[0, 0, 1]), particle_type=types["Electrode"]) -system.constraints.add(shape=Wall( - dist=-box_z, normal=[0, 0, -1]), particle_type=types["Electrode"]) - -# Place particles -for i in range(int(n_ionpairs)): - p = numpy.random.random(3) * box_l - p[2] += lj_sigmas["Electrode"] - system.part.add(id=len(system.part), type=types["Cl"], - pos=p, q=charges["Cl"], mass=masses["Cl"]) -for i in range(int(n_ionpairs)): - p = numpy.random.random(3) * box_l - p[2] += lj_sigmas["Electrode"] - system.part.add(id=len(system.part), type=types["Na"], - pos=p, q=charges["Na"], mass=masses["Na"]) - -# Lennard-Jones interactions parameters - - -def combination_rule_epsilon(rule, eps1, eps2): - if rule == "Lorentz": - return (eps1 * eps2)**0.5 - else: - return ValueError("No combination rule defined") - - -def combination_rule_sigma(rule, sig1, sig2): - if rule == "Berthelot": - return (sig1 + sig2) * 0.5 - else: - return ValueError("No combination rule defined") - - -for s in [["Cl", "Na"], ["Cl", "Cl"], ["Na", "Na"], - ["Na", "Electrode"], ["Cl", "Electrode"]]: - lj_sig = combination_rule_sigma( - "Berthelot", lj_sigmas[s[0]], lj_sigmas[s[1]]) - lj_cut = combination_rule_sigma("Berthelot", lj_cuts[s[0]], lj_cuts[s[1]]) - lj_eps = combination_rule_epsilon( - "Lorentz", lj_epsilons[s[0]], lj_epsilons[s[1]]) - - system.non_bonded_inter[types[s[0]], types[s[1]]].lennard_jones.set_params( - epsilon=lj_eps, sigma=lj_sig, cutoff=lj_cut, shift="auto") - -system.integrator.set_steepest_descent(f_max=10, gamma=10, - max_displacement=0.1) -system.integrator.run(2000) -system.integrator.set_vv() - -system.thermostat.set_langevin(kT=temp, gamma=gamma, seed=42) - -print("\n--->Tuning Electrostatics") -p3m = electrostatics.P3M(prefactor=l_bjerrum, accuracy=1e-2) -system.actors.add(p3m) -elc = electrostatic_extensions.ELC(gap_size=elc_gap, maxPWerror=1e-3) -system.actors.add(elc) - - -def increaseElectricField(): - global Vz - Vz += 3 - for p in system.part: - p.ext_force = [0, 0, p.q * Vz * Vz_to_Ez] - print('Potential difference: {:.0f}'.format(Vz)) - - -def decreaseElectricField(): - global Vz - Vz -= 3 - for p in system.part: - p.ext_force = [0, 0, p.q * Vz * Vz_to_Ez] - print('Potential difference: {:.0f}'.format(Vz)) - - -# Register buttons -visualizer.keyboard_manager.register_button(visualization_opengl.KeyboardButtonEvent( - 'u', visualization_opengl.KeyboardFireEvent.Hold, increaseElectricField)) -visualizer.keyboard_manager.register_button(visualization_opengl.KeyboardButtonEvent( - 'j', visualization_opengl.KeyboardFireEvent.Hold, decreaseElectricField)) - - -def main(): - print("\n--->Integration") - system.time = 0.0 - - while True: - system.integrator.run(1) - visualizer.update() - - -# Start simulation in separate thread -t = Thread(target=main) -t.daemon = True -t.start() - -# Start blocking visualizer -visualizer.start() diff --git a/doc/tutorials/02-charged_system/scripts/nacl_units_vis.py b/doc/tutorials/02-charged_system/scripts/nacl_units_vis.py deleted file mode 100644 index d81062d7e28..00000000000 --- a/doc/tutorials/02-charged_system/scripts/nacl_units_vis.py +++ /dev/null @@ -1,182 +0,0 @@ -# -# Copyright (C) 2010-2019 The ESPResSo project -# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 -# Max-Planck-Institute for Polymer Research, Theory Group -# -# This file is part of ESPResSo. -# -# ESPResSo is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ESPResSo is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -import espressomd -from espressomd import assert_features, electrostatics -from espressomd import visualization_opengl -import numpy -from threading import Thread - -assert_features(["ELECTROSTATICS", "MASS", "LENNARD_JONES"]) - -system = espressomd.System(box_l=[1.0, 1.0, 1.0]) -numpy.random.seed(seed=42) - -visualizer = visualization_opengl.openGLLive( - system, - drag_force=5 * 298, - background_color=[1, 1, 1], - light_pos=[30, 30, 30]) - -# Callbacks to control temperature -temperature = 298.0 - - -def increaseTemp(): - global temperature - temperature += 10 - system.thermostat.set_langevin(kT=temperature, gamma=1.0) - print("T = {:.0f} K".format(temperature)) - - -def decreaseTemp(): - global temperature - temperature -= 10 - - if temperature > 0: - system.thermostat.set_langevin(kT=temperature, gamma=1.0) - else: - temperature = 0 - system.thermostat.turn_off() - print("T = {:.0f} K".format(temperature)) - - -# Register buttons -visualizer.keyboard_manager.register_button(visualization_opengl.KeyboardButtonEvent( - 't', visualization_opengl.KeyboardFireEvent.Hold, increaseTemp)) -visualizer.keyboard_manager.register_button(visualization_opengl.KeyboardButtonEvent( - 'g', visualization_opengl.KeyboardFireEvent.Hold, decreaseTemp)) - - -print("\n--->Setup system") - -# System parameters -n_ppside = 10 -n_part = int(n_ppside**3) -n_ionpairs = n_part / 2 -density = 1.5736 -time_step = 0.001823 -temp = 298.0 -gamma = 20.0 -k_B = 1.380649e-23 # units of [J/K] -q_e = 1.602176634e-19 # units of [C] -epsilon_0 = 8.8541878128e-12 # units of [C^2/J/m] -coulomb_prefactor = q_e**2 / (4 * numpy.pi * epsilon_0) * 1e10 -l_bjerrum = 0.885**2 * coulomb_prefactor / (k_B * temp) - -num_steps_equilibration = 30 - -# Particle parameters -types = {"Cl": 0, "Na": 1} -numbers = {"Cl": n_ionpairs, "Na": n_ionpairs} -charges = {"Cl": -1.0, "Na": 1.0} -lj_sigmas = {"Cl": 3.85, "Na": 2.52} -lj_epsilons = {"Cl": 192.45, "Na": 17.44} - -lj_cuts = {"Cl": 3.0 * lj_sigmas["Cl"], - "Na": 3.0 * lj_sigmas["Na"]} - -masses = {"Cl": 35.453, "Na": 22.99} - -# Setup System -box_l = (n_ionpairs * sum(masses.values()) / density)**(1. / 3.) -system.box_l = [box_l, box_l, box_l] -system.periodicity = [True, True, True] -system.time_step = time_step -system.cell_system.skin = 0.3 -system.thermostat.set_langevin(kT=temp, gamma=gamma, seed=42) - -# Place particles on a face-centered cubic lattice -q = 1 -l = box_l / n_ppside -for i in range(n_ppside): - for j in range(n_ppside): - for k in range(n_ppside): - p = numpy.array([i, j, k]) * l - if q < 0: - system.part.add(id=len( - system.part), type=types["Cl"], pos=p, q=charges["Cl"], mass=masses["Cl"]) - else: - system.part.add(id=len( - system.part), type=types["Na"], pos=p, q=charges["Na"], mass=masses["Na"]) - - q *= -1 - q *= -1 - q *= -1 - - -def combination_rule_epsilon(rule, eps1, eps2): - if rule == "Lorentz": - return (eps1 * eps2)**0.5 - else: - return ValueError("No combination rule defined") - - -def combination_rule_sigma(rule, sig1, sig2): - if rule == "Berthelot": - return (sig1 + sig2) * 0.5 - else: - return ValueError("No combination rule defined") - - -# Lennard-Jones interactions parameters -for s in [["Cl", "Na"], ["Cl", "Cl"], ["Na", "Na"]]: - lj_sig = combination_rule_sigma( - "Berthelot", lj_sigmas[s[0]], lj_sigmas[s[1]]) - lj_cut = combination_rule_sigma( - "Berthelot", lj_cuts[s[0]], lj_cuts[s[1]]) - lj_eps = combination_rule_epsilon( - "Lorentz", lj_epsilons[s[0]], lj_epsilons[s[1]]) - - system.non_bonded_inter[types[s[0]], types[s[1]]].lennard_jones.set_params( - epsilon=lj_eps, sigma=lj_sig, cutoff=lj_cut, shift="auto") - -print("\n--->Tuning Electrostatics") -p3m = electrostatics.P3M(prefactor=l_bjerrum, accuracy=1e-2) -system.actors.add(p3m) - - -def main(): - - print("\n--->Temperature Equilibration") - system.time = 0.0 - for _ in range(num_steps_equilibration): - energy = system.analysis.energy() - temp_measured = energy['kinetic'] / ((3.0 / 2.0) * n_part) - print("t={0:.1f}, E_total={1:.2f}, E_coulomb={2:.2f}, T_cur={3:.4f}" - .format(system.time, energy['total'], energy['coulomb'], - temp_measured)) - system.integrator.run(100) - visualizer.update() - - print("\n--->Integration") - system.time = 0.0 - while True: - system.integrator.run(1) - visualizer.update() - - -# Start simulation in separate thread -t = Thread(target=main) -t.daemon = True -t.start() - -# Start blocking visualizer -visualizer.start() diff --git a/doc/tutorials/Readme.rst b/doc/tutorials/Readme.rst index 2b98c867a2d..8b595998759 100644 --- a/doc/tutorials/Readme.rst +++ b/doc/tutorials/Readme.rst @@ -8,7 +8,7 @@ This folder contains tutorials that introduce the use of ESPResSo for different physical systems. Currently, the following tutorials are available: * ``01-lennard_jones``: Modelling of a single-component and a two-component Lennard-Jones liquid -* ``02-charged_system``: Modelling of charged systems such as ionic crystals +* ``02-charged_system``: Modelling of ion condensation around a charged rod * ``04-lattice_boltzmann``: Simulations including hydrodynamic interactions using the lattice-Boltzmann method * ``05-raspberry_electrophoresis``: Extended objects in a lattice-Boltzmann fluid, raspberry particles * ``06-active_matter``: Modelling of self-propelling particles diff --git a/testsuite/scripts/tutorials/CMakeLists.txt b/testsuite/scripts/tutorials/CMakeLists.txt index 8de86fb184a..c9843de5929 100644 --- a/testsuite/scripts/tutorials/CMakeLists.txt +++ b/testsuite/scripts/tutorials/CMakeLists.txt @@ -27,12 +27,6 @@ add_custom_target( tutorial_test(FILE test_01-lennard_jones.py) tutorial_test(FILE test_02-charged_system-1.py) -tutorial_test(FILE test_02-charged_system-2.py) -tutorial_test(FILE test_02-charged_system__scripts__nacl.py) -tutorial_test(FILE test_02-charged_system__scripts__nacl_units_confined.py) -tutorial_test(FILE test_02-charged_system__scripts__nacl_units_confined_vis.py) -tutorial_test(FILE test_02-charged_system__scripts__nacl_units.py) -tutorial_test(FILE test_02-charged_system__scripts__nacl_units_vis.py) tutorial_test(FILE test_04-lattice_boltzmann_part2.py) tutorial_test(FILE test_04-lattice_boltzmann_part3.py SUFFIX rouse) tutorial_test(FILE test_04-lattice_boltzmann_part3.py SUFFIX zimm LABELS "gpu") diff --git a/testsuite/scripts/tutorials/test_02-charged_system-2.py b/testsuite/scripts/tutorials/test_02-charged_system-2.py deleted file mode 100644 index 44d1e036d9f..00000000000 --- a/testsuite/scripts/tutorials/test_02-charged_system-2.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (C) 2019 The ESPResSo project -# -# This file is part of ESPResSo. -# -# ESPResSo is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ESPResSo is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import unittest as ut -import importlib_wrapper -import numpy as np - -tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/02-charged_system/02-charged_system-2.py", - num_steps_equilibration=200, num_configs=5, integ_steps_per_config=60) - - -@skipIfMissingFeatures -class Tutorial(ut.TestCase): - system = tutorial.system - - def test_distribution(self): - """ - checks if the particle distribution is within the box - """ - for i in range(1, 3): - pos = np.flatnonzero(tutorial.res[:, i] > 0) - self.assertGreater(tutorial.res[pos[0], 0], tutorial.wall_margin) - self.assertLess(tutorial.res[pos[-1], 0], - tutorial.box_z - tutorial.wall_margin) - - -if __name__ == "__main__": - ut.main() diff --git a/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl.py b/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl.py deleted file mode 100644 index c8493fa752d..00000000000 --- a/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (C) 2019 The ESPResSo project -# -# This file is part of ESPResSo. -# -# ESPResSo is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ESPResSo is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import unittest as ut -import importlib_wrapper -import numpy as np - -tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/02-charged_system/scripts/nacl.py", - num_steps_equilibration=100, num_configs=50, integ_steps_per_config=100) - - -@skipIfMissingFeatures -class Tutorial(ut.TestCase): - system = tutorial.system - - def test_distance_Na_Cl(self): - d_Na_Cl = tutorial.r[np.argmax(tutorial.rdf_01)] - self.assertLess(abs(d_Na_Cl - 1.05), 0.1) - - -if __name__ == "__main__": - ut.main() diff --git a/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units.py b/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units.py deleted file mode 100644 index ae4a0136fba..00000000000 --- a/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright (C) 2019 The ESPResSo project -# -# This file is part of ESPResSo. -# -# ESPResSo is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ESPResSo is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import unittest as ut -import importlib_wrapper -import numpy as np - -tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/02-charged_system/scripts/nacl_units.py", - num_steps_equilibration=100, num_configs=20, integ_steps_per_config=80) - - -@skipIfMissingFeatures -class Tutorial(ut.TestCase): - system = tutorial.system - - def test_crystal(self): - lattice_constant = 2.63 - d_Na_Cl = tutorial.r[np.argmax(tutorial.rdf_01)] - d_Na_Na = tutorial.r[np.argmax(tutorial.rdf_11)] - d_Cl_Cl = tutorial.r[np.argmax(tutorial.rdf_00)] - self.assertLess(abs(d_Na_Cl - lattice_constant), 0.1) - self.assertLess(abs(d_Na_Na - d_Cl_Cl), 0.1) - self.assertLess(abs(d_Na_Cl - d_Cl_Cl / 2**0.5), 0.1) - - -if __name__ == "__main__": - ut.main() diff --git a/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_confined.py b/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_confined.py deleted file mode 100644 index bc687831737..00000000000 --- a/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_confined.py +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (C) 2019 The ESPResSo project -# -# This file is part of ESPResSo. -# -# ESPResSo is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ESPResSo is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import unittest as ut -import importlib_wrapper -import numpy as np - -tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/02-charged_system/scripts/nacl_units_confined.py", - num_steps_equilibration=1000, num_configs=40, integ_steps_per_config=60, - l_bjerrum=130878 / 2.) - - -@skipIfMissingFeatures -class Tutorial(ut.TestCase): - system = tutorial.system - - def test_distance_Na_Cl(self): - d_Na_Electrode = np.argmax(tutorial.z_dens_na) - d_Cl_Electrode = np.argmax(tutorial.z_dens_cl) - self.assertGreaterEqual(d_Na_Electrode, 88) - self.assertLessEqual(d_Cl_Electrode, 12) - - -if __name__ == "__main__": - ut.main() diff --git a/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_confined_vis.py b/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_confined_vis.py deleted file mode 100644 index 65a6b8be8ba..00000000000 --- a/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_confined_vis.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (C) 2019 The ESPResSo project -# -# This file is part of ESPResSo. -# -# ESPResSo is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ESPResSo is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import unittest as ut -import importlib_wrapper - - -def disable_visualizer_GUI(code): - breakpoint = "while True:" - assert breakpoint in code - code = code.replace(breakpoint, "for _ in range(5):", 1) - breakpoint = "t = Thread(target=main)" - assert breakpoint in code - code = code.split(breakpoint, 1)[0] + "main()" - return code - - -tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/02-charged_system/scripts/nacl_units_confined_vis.py", - substitutions=disable_visualizer_GUI) - - -@skipIfMissingFeatures -class Tutorial(ut.TestCase): - system = tutorial.system - - -if __name__ == "__main__": - ut.main() diff --git a/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_vis.py b/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_vis.py deleted file mode 100644 index 0155681d3b9..00000000000 --- a/testsuite/scripts/tutorials/test_02-charged_system__scripts__nacl_units_vis.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (C) 2019 The ESPResSo project -# -# This file is part of ESPResSo. -# -# ESPResSo is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ESPResSo is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import unittest as ut -import importlib_wrapper - - -def disable_visualizer_GUI(code): - breakpoint = "while True:" - assert breakpoint in code - code = code.replace(breakpoint, "for _ in range(5):", 1) - breakpoint = "t = Thread(target=main)" - assert breakpoint in code - code = code.split(breakpoint, 1)[0] + "main()" - return code - - -tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/02-charged_system/scripts/nacl_units_vis.py", - substitutions=disable_visualizer_GUI, num_steps_equilibration=10) - - -@skipIfMissingFeatures -class Tutorial(ut.TestCase): - system = tutorial.system - - -if __name__ == "__main__": - ut.main() From 23f0cbce2dcd680f5755a22ff5eb2c03a2d51f63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Thu, 12 Nov 2020 15:13:05 +0100 Subject: [PATCH 02/14] maintainer: Simplify html_runner.py --- doc/tutorials/html_runner.py | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/doc/tutorials/html_runner.py b/doc/tutorials/html_runner.py index cbaf3b95403..420f41d59eb 100644 --- a/doc/tutorials/html_runner.py +++ b/doc/tutorials/html_runner.py @@ -89,6 +89,13 @@ def add_cell_from_script(nb, filepath): nb['cells'].append(cell_code) +def remove_empty_cells(nb): + for i in range(len(nb['cells']) - 1, 0, -1): + cell = nb['cells'][i] + if cell['source'].strip() == '': + nb['cells'].pop(i) + + def disable_plot_interactivity(nb): """ Replace all occurrences of the magic command ``%matplotlib notebook`` @@ -133,32 +140,20 @@ def split_matplotlib_cells(nb): def convert_exercise2_to_code(nb): """ - Walk through the notebook cells and remove metadata associated with - the ``exercise2`` plugin from the contributed nbextensions. Solution - Markdown cells containing python code are converted to code cells. + Walk through the notebook cells and convert exercise2 Markdown cells + containing fenced python code to exercise2 code cells. """ - for i in range(len(nb['cells']) - 1, 0, -1): - cell = nb['cells'][i] - cell_above = nb['cells'][i - 1] - # remove empty code cells after a solution cell - if cell['cell_type'] == 'code' and cell['source'].strip() == '' \ - and 'solution2' in cell_above['metadata'] \ - and 'solution2_first' not in cell_above['metadata'] \ - and 'solution2' not in cell['metadata']: - nb['cells'].pop(i) - continue + for i, cell in enumerate(nb['cells']): + if 'solution2' in cell['metadata']: + cell['metadata']['solution2'] = 'shown' # convert solution markdown cells into code cells if cell['cell_type'] == 'markdown' and 'solution2' in cell['metadata'] \ and 'solution2_first' not in cell['metadata']: lines = cell['source'].strip().split('\n') - if lines[0].startswith( - '```python') and lines[-1].startswith('```'): + if lines[0].strip() == '```python' and lines[-1].strip() == '```': source = '\n'.join(lines[1:-1]).strip() nb['cells'][i] = nbformat.v4.new_code_cell(source=source) - # remove exercise2 metadata - for key in ('solution2', 'solution2_first'): - if key in cell['metadata']: - del cell['metadata'][key] + nb['cells'][i]['metadata']['solution2'] = 'shown' def execute_notebook(nb, src, cell_separator): @@ -199,6 +194,7 @@ def execute_notebook(nb, src, cell_separator): # convert solution cells to code cells if args.exercise2: convert_exercise2_to_code(nb) + remove_empty_cells(nb) # disable plot interactivity disable_plot_interactivity(nb) From c2ecd5bdd7850fff64377d137987106978b092e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Thu, 12 Nov 2020 19:01:26 +0100 Subject: [PATCH 03/14] maintainer: Make html_runner.py modular Move parser to the end of the script and wrap the main logic into __main__, so that the script can be imported as a module. The subprocess module is then no longer needed in the testsuite. --- doc/tutorials/CMakeLists.txt | 11 +- doc/tutorials/html_runner.py | 130 ++++++++++-------- .../scripts/tutorials/test_html_runner.py | 41 +++--- 3 files changed, 104 insertions(+), 78 deletions(-) diff --git a/doc/tutorials/CMakeLists.txt b/doc/tutorials/CMakeLists.txt index 831b78ea6f2..2a91354f648 100644 --- a/doc/tutorials/CMakeLists.txt +++ b/doc/tutorials/CMakeLists.txt @@ -60,9 +60,10 @@ function(NB_EXPORT) "${NB_FILE};${NB_EXPORT_ADD_SCRIPTS};${CMAKE_BINARY_DIR}/doc/tutorials/html_runner.py;${CMAKE_BINARY_DIR}/testsuite/scripts/importlib_wrapper.py" COMMAND ${CMAKE_BINARY_DIR}/pypresso - ${CMAKE_BINARY_DIR}/doc/tutorials/html_runner.py --execute --exercise2 - --input ${NB_FILE} --output ${NB_FILE_RUN} --substitutions - ${NB_EXPORT_VAR_SUBST} --scripts ${NB_EXPORT_ADD_SCRIPTS}) + ${CMAKE_BINARY_DIR}/doc/tutorials/html_runner.py ci --execute + --exercise2 --remove-empty-cells --input ${NB_FILE} --output + ${NB_FILE_RUN} --substitutions ${NB_EXPORT_VAR_SUBST} --scripts + ${NB_EXPORT_ADD_SCRIPTS}) else() set(NB_FILE_RUN ${NB_FILE}) endif() @@ -72,7 +73,7 @@ function(NB_EXPORT) DEPENDS ${NB_FILE_RUN};${NB_EXPORT_ADD_SCRIPTS} COMMAND ${CMAKE_BINARY_DIR}/pypresso - ${CMAKE_BINARY_DIR}/doc/tutorials/html_runner.py --exercise2 --input + ${CMAKE_BINARY_DIR}/doc/tutorials/html_runner.py ci --exercise2 --input ${NB_FILE_RUN} --output ${NB_FILE_RUN}~ COMMAND ${IPYTHON_EXECUTABLE} nbconvert --to "html" --output ${HTML_FILE} ${NB_FILE_RUN}~) @@ -82,7 +83,7 @@ function(NB_EXPORT) DEPENDS ${NB_FILE} COMMAND ${CMAKE_BINARY_DIR}/pypresso - ${CMAKE_BINARY_DIR}/doc/tutorials/html_runner.py --exercise2 --input + ${CMAKE_BINARY_DIR}/doc/tutorials/html_runner.py ci --exercise2 --input ${NB_FILE} --output ${NB_FILE}~ COMMAND ${IPYTHON_EXECUTABLE} nbconvert --to "python" --output ${PY_FILE} ${NB_FILE}~) diff --git a/doc/tutorials/html_runner.py b/doc/tutorials/html_runner.py index 420f41d59eb..8f8caa42786 100644 --- a/doc/tutorials/html_runner.py +++ b/doc/tutorials/html_runner.py @@ -26,23 +26,6 @@ """ import argparse - -parser = argparse.ArgumentParser(description='Process Jupyter notebooks.', - epilog=__doc__) -parser.add_argument('--input', type=str, nargs=1, required=True, - help='Path to the original Jupyter notebook') -parser.add_argument('--output', type=str, nargs=1, - help='Path to the processed Jupyter notebook') -parser.add_argument('--substitutions', nargs='*', - help='Variables to substitute') -parser.add_argument('--scripts', nargs='*', - help='Scripts to insert in new cells') -parser.add_argument('--exercise2', action='store_true', - help='Convert exercise2 solutions into code cells') -parser.add_argument('--execute', action='store_true', - help='Run the script') -args = parser.parse_args() - import nbformat import re import os @@ -156,7 +139,7 @@ def convert_exercise2_to_code(nb): nb['cells'][i]['metadata']['solution2'] = 'shown' -def execute_notebook(nb, src, cell_separator): +def execute_notebook(nb, src, cell_separator, notebook_filepath): """ Run the notebook in a python3 kernel. The ESPResSo visualizers are disabled to prevent the kernel from crashing and to allow running @@ -176,44 +159,77 @@ def execute_notebook(nb, src, cell_separator): set_code_cells(nb, src.split(cell_separator)) -notebook_filepath = args.input[0] -if args.output: - notebook_filepath_edited = args.output[0] -else: - notebook_filepath_edited = notebook_filepath + '~' - -# parse original notebook -with open(notebook_filepath, encoding='utf-8') as f: - nb = nbformat.read(f, as_version=4) - -# add new cells containing the solutions -if args.scripts: - for filepath in args.scripts: - add_cell_from_script(nb, filepath) - -# convert solution cells to code cells -if args.exercise2: - convert_exercise2_to_code(nb) - remove_empty_cells(nb) - -# disable plot interactivity -disable_plot_interactivity(nb) - -# guard against a jupyter bug involving matplotlib -split_matplotlib_cells(nb) - -if args.substitutions or args.execute: - # substitute global variables - cell_separator = '\n##{}\n'.format(uuid.uuid4().hex) - src = cell_separator.join(get_code_cells(nb)) - new_values = args.substitutions or [] - parameters = dict(x.split('=', 1) for x in new_values) - src = iw.substitute_variable_values(src, strings_as_is=True, - keep_original=False, **parameters) - set_code_cells(nb, src.split(cell_separator)) +def handle_ci_case(args): + notebook_filepath = args.input + if args.output: + notebook_filepath_edited = args.output + else: + notebook_filepath_edited = notebook_filepath + '~' + + # parse original notebook + with open(notebook_filepath, encoding='utf-8') as f: + nb = nbformat.read(f, as_version=4) + + # add new cells containing the solutions + if args.scripts: + for filepath in args.scripts: + add_cell_from_script(nb, filepath) + + # convert solution cells to code cells + if args.exercise2: + convert_exercise2_to_code(nb) + + # remove empty cells (e.g. those below exercise2 cells) + if args.remove_empty_cells: + remove_empty_cells(nb) + + # disable plot interactivity + disable_plot_interactivity(nb) + + # guard against a jupyter bug involving matplotlib + split_matplotlib_cells(nb) + + if args.substitutions or args.execute: + # substitute global variables + cell_separator = '\n##{}\n'.format(uuid.uuid4().hex) + src = cell_separator.join(get_code_cells(nb)) + new_values = args.substitutions or [] + parameters = dict(x.split('=', 1) for x in new_values) + src = iw.substitute_variable_values(src, strings_as_is=True, + keep_original=False, **parameters) + set_code_cells(nb, src.split(cell_separator)) + if args.execute: - execute_notebook(nb, src, cell_separator) + execute_notebook(nb, src, cell_separator, args.input) -# write edited notebook -with open(notebook_filepath_edited, 'w', encoding='utf-8') as f: - nbformat.write(nb, f) + # write edited notebook + with open(notebook_filepath_edited, 'w', encoding='utf-8') as f: + nbformat.write(nb, f) + + +parser = argparse.ArgumentParser(description='Process Jupyter notebooks.', + epilog=__doc__) +subparsers = parser.add_subparsers(help='Submodules') +# CI module +parser_ci = subparsers.add_parser( + 'ci', help='module for CI (variable substitution, code execution, etc.)') +parser_ci.add_argument('--input', type=str, required=True, + help='path to the original Jupyter notebook') +parser_ci.add_argument('--output', type=str, + help='path to the processed Jupyter notebook') +parser_ci.add_argument('--substitutions', nargs='*', + help='variables to substitute') +parser_ci.add_argument('--scripts', nargs='*', + help='scripts to insert in new cells') +parser_ci.add_argument('--exercise2', action='store_true', + help='convert exercise2 solutions into code cells') +parser_ci.add_argument('--remove-empty-cells', action='store_true', + help='remove empty cells') +parser_ci.add_argument('--execute', action='store_true', + help='run the notebook') +parser_ci.set_defaults(callback=handle_ci_case) + + +if __name__ == "__main__": + args = parser.parse_args() + args.callback(args) diff --git a/testsuite/scripts/tutorials/test_html_runner.py b/testsuite/scripts/tutorials/test_html_runner.py index 8d8221675e9..5fdcc8b251f 100644 --- a/testsuite/scripts/tutorials/test_html_runner.py +++ b/testsuite/scripts/tutorials/test_html_runner.py @@ -18,8 +18,11 @@ import unittest as ut import os import sys -import subprocess import nbformat +import traceback + +sys.path.insert(0, '@CMAKE_BINARY_DIR@/doc/tutorials') +import html_runner class HtmlRunner(ut.TestCase): @@ -69,6 +72,12 @@ class HtmlRunner(ut.TestCase): "version": ".".join(map(str, sys.version_info[:3]))} } + def failed_to_run(self, cmd): + traceback.print_exc() + self.fail('Could not run @CMAKE_BINARY_DIR@/pypresso ' + '@CMAKE_BINARY_DIR@/doc/tutorials/html_runner.py ' + + ' '.join(cmd)) + def test_html_wrapper(self): f_input = '@CMAKE_CURRENT_BINARY_DIR@/test_html_runner_notebook.ipynb' f_output = '@CMAKE_CURRENT_BINARY_DIR@/test_html_runner_notebook.run.ipynb' @@ -85,18 +94,18 @@ def test_html_wrapper(self): cell_code = nbformat.v4.new_code_cell(source=self.cell_py_src) nb['cells'].append(cell_code) nbformat.write(nb, f) - # run command - cmd = ['@CMAKE_BINARY_DIR@/pypresso', - '@CMAKE_BINARY_DIR@/doc/tutorials/html_runner.py', + # run command and check for errors + cmd = ['ci', '--input', f_input, '--output', f_output, '--scripts', f_script, '--substitutions', 'global_var=20', '--execute'] - print('Running command ' + ' '.join(cmd)) - completedProc = subprocess.run(cmd) - # check the command ran without any error - self.assertEqual(completedProc.returncode, 0, 'non-zero return code') + try: + args = html_runner.parser.parse_args(cmd) + args.callback(args) + except BaseException: + self.failed_to_run(cmd) self.assertTrue(os.path.isfile(f_output), f_output + ' not created') # read processed notebook with open(f_output, encoding='utf-8') as f: @@ -164,17 +173,17 @@ def test_exercise2_plugin(self): cell_code = nbformat.v4.new_code_cell(source='3') nb['cells'].append(cell_code) nbformat.write(nb, f) - # run command - cmd = ['@CMAKE_BINARY_DIR@/pypresso', - '@CMAKE_BINARY_DIR@/doc/tutorials/html_runner.py', + # run command and check for errors + cmd = ['ci', '--input', f_input, '--output', f_output, '--substitutions', 'global_var=20', - '--exercise2'] - print('Running command ' + ' '.join(cmd)) - completedProc = subprocess.run(cmd) - # check the command ran without any error - self.assertEqual(completedProc.returncode, 0, 'non-zero return code') + '--exercise2', '--remove-empty-cells'] + try: + args = html_runner.parser.parse_args(cmd) + args.callback(args) + except BaseException: + self.failed_to_run(cmd) self.assertTrue(os.path.isfile(f_output), f_output + ' not created') # read processed notebook with open(f_output, encoding='utf-8') as f: From f025153695d4d9018da24fd54e17ca61af33983d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Thu, 12 Nov 2020 20:13:40 +0100 Subject: [PATCH 04/14] maintainer: Add exercise2 converter Use the html_runner.py to convert exercise2 cells from Markdown to Python and back, while preserving metadata. This is helpful when editing notebooks, to avoid having to manually copy-paste the solutions to the empty code cells (to be able to run the notebook) and then clear these cells. --- doc/tutorials/html_runner.py | 43 +++++++++++++ .../scripts/tutorials/test_html_runner.py | 61 +++++++++++++++++++ 2 files changed, 104 insertions(+) diff --git a/doc/tutorials/html_runner.py b/doc/tutorials/html_runner.py index 8f8caa42786..8c3b3a826aa 100644 --- a/doc/tutorials/html_runner.py +++ b/doc/tutorials/html_runner.py @@ -136,9 +136,26 @@ def convert_exercise2_to_code(nb): if lines[0].strip() == '```python' and lines[-1].strip() == '```': source = '\n'.join(lines[1:-1]).strip() nb['cells'][i] = nbformat.v4.new_code_cell(source=source) + nb['cells'][i]['metadata'] = cell['metadata'] nb['cells'][i]['metadata']['solution2'] = 'shown' +def convert_exercise2_to_markdown(nb): + """ + Walk through the notebook cells and convert exercise2 Python cells + to exercise2 Markdown cells using a fenced code block. + """ + for i, cell in enumerate(nb['cells']): + if 'solution2' in cell['metadata']: + cell['metadata']['solution2'] = 'hidden' + # convert solution code cells into markdown cells + if cell['cell_type'] == 'code' and 'solution2' in cell['metadata']: + content = '```python\n' + cell['source'] + '\n```' + nb['cells'][i] = nbformat.v4.new_markdown_cell(source=content) + nb['cells'][i]['metadata'] = cell['metadata'] + nb['cells'][i]['metadata']['solution2'] = 'hidden' + + def execute_notebook(nb, src, cell_separator, notebook_filepath): """ Run the notebook in a python3 kernel. The ESPResSo visualizers are @@ -207,6 +224,21 @@ def handle_ci_case(args): nbformat.write(nb, f) +def handle_exercise2_case(args): + # parse original notebook + with open(args.input, encoding='utf-8') as f: + nb = nbformat.read(f, as_version=4) + + if args.to_md: + convert_exercise2_to_markdown(nb) + else: + convert_exercise2_to_code(nb) + + # write edited notebook + with open(args.input, 'w', encoding='utf-8') as f: + nbformat.write(nb, f) + + parser = argparse.ArgumentParser(description='Process Jupyter notebooks.', epilog=__doc__) subparsers = parser.add_subparsers(help='Submodules') @@ -228,6 +260,17 @@ def handle_ci_case(args): parser_ci.add_argument('--execute', action='store_true', help='run the notebook') parser_ci.set_defaults(callback=handle_ci_case) +# exercise2 module +parser_exercise2 = subparsers.add_parser( + 'exercise2', help='module for exercise2 conversion (Markdown <-> Python)') +parser_exercise2.add_argument('input', type=str, help='path to the Jupyter ' + 'notebook (in-place conversion)') +group_exercise2 = parser_exercise2.add_mutually_exclusive_group(required=True) +group_exercise2.add_argument('--to-md', action='store_true', + help='convert solution cells to Markdown') +group_exercise2.add_argument('--to-py', action='store_true', + help='convert solution cells to Python') +parser_exercise2.set_defaults(callback=handle_exercise2_case) if __name__ == "__main__": diff --git a/testsuite/scripts/tutorials/test_html_runner.py b/testsuite/scripts/tutorials/test_html_runner.py index 5fdcc8b251f..40dd10624cb 100644 --- a/testsuite/scripts/tutorials/test_html_runner.py +++ b/testsuite/scripts/tutorials/test_html_runner.py @@ -155,6 +155,7 @@ def test_exercise2_plugin(self): code = '```python\n1\n```' cell_md = nbformat.v4.new_markdown_cell(source=code) cell_md['metadata']['solution2'] = 'shown' + cell_md['metadata']['key'] = 'value' nb['cells'].append(cell_md) cell_md = nbformat.v4.new_markdown_cell(source='1b') cell_md['metadata']['solution2'] = 'shown' @@ -196,6 +197,7 @@ def test_exercise2_plugin(self): cell = next(cells) self.assertEqual(cell['cell_type'], 'code') self.assertEqual(cell['source'], '1') + self.assertEqual(cell['metadata']['key'], 'value') cell = next(cells) self.assertEqual(cell['cell_type'], 'markdown') self.assertEqual(cell['source'], '1b') @@ -213,6 +215,65 @@ def test_exercise2_plugin(self): self.assertEqual(cell['source'], '3') self.assertEqual(next(cells, 'EOF'), 'EOF') + def test_exercise2_conversion(self): + f_input = '@CMAKE_CURRENT_BINARY_DIR@/test_html_runner_exercise2_conversion.ipynb' + # setup + with open(f_input, 'w', encoding='utf-8') as f: + nb = nbformat.v4.new_notebook(metadata=self.nb_metadata) + # question and code answer + cell_md = nbformat.v4.new_markdown_cell(source='Question 1') + cell_md['metadata']['solution2_first'] = True + cell_md['metadata']['solution2'] = 'hidden' + nb['cells'].append(cell_md) + code = '```python\n1\n```' + cell_md = nbformat.v4.new_markdown_cell(source=code) + cell_md['metadata']['solution2'] = 'hidden' + cell_md['metadata']['key'] = 'value' + nb['cells'].append(cell_md) + nbformat.write(nb, f) + # run command and check for errors + cmd = ['exercise2', '--to-py', f_input] + try: + args = html_runner.parser.parse_args(cmd) + args.callback(args) + except BaseException: + self.failed_to_run(cmd) + # read processed notebook + with open(f_input, encoding='utf-8') as f: + nb_output = nbformat.read(f, as_version=4) + # check cells + cells = iter(nb_output['cells']) + cell = next(cells) + self.assertEqual(cell['cell_type'], 'markdown') + self.assertEqual(cell['source'], 'Question 1') + cell = next(cells) + self.assertEqual(cell['cell_type'], 'code') + self.assertEqual(cell['source'], '1') + self.assertEqual(cell['metadata']['solution2'], 'shown') + self.assertEqual(cell['metadata']['key'], 'value') + self.assertEqual(next(cells, 'EOF'), 'EOF') + # run command and check for errors + cmd = ['exercise2', '--to-md', f_input] + try: + args = html_runner.parser.parse_args(cmd) + args.callback(args) + except BaseException: + self.failed_to_run(cmd) + # read processed notebook + with open(f_input, encoding='utf-8') as f: + nb_output = nbformat.read(f, as_version=4) + # check cells + cells = iter(nb_output['cells']) + cell = next(cells) + self.assertEqual(cell['cell_type'], 'markdown') + self.assertEqual(cell['source'], 'Question 1') + cell = next(cells) + self.assertEqual(cell['cell_type'], 'markdown') + self.assertEqual(cell['source'], '```python\n1\n```') + self.assertEqual(cell['metadata']['solution2'], 'hidden') + self.assertEqual(cell['metadata']['key'], 'value') + self.assertEqual(next(cells, 'EOF'), 'EOF') + if __name__ == "__main__": ut.main() From f93a5df0d9042e9dbc0eb59453ad1129c5f12502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Fri, 13 Nov 2020 01:40:34 +0100 Subject: [PATCH 05/14] maintainer: Add autopep8 tool for tutorials --- doc/tutorials/html_runner.py | 45 +++++++++++++++- .../scripts/tutorials/test_html_runner.py | 52 +++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) diff --git a/doc/tutorials/html_runner.py b/doc/tutorials/html_runner.py index 8c3b3a826aa..b714a3c216e 100644 --- a/doc/tutorials/html_runner.py +++ b/doc/tutorials/html_runner.py @@ -156,6 +156,43 @@ def convert_exercise2_to_markdown(nb): nb['cells'][i]['metadata']['solution2'] = 'hidden' +def apply_autopep8(nb): + import yaml + import autopep8 + + def get_autopep8_options(): + options = {'aggressive': 0, 'ignore': [], 'max_line_length': 120} + with open('@CMAKE_SOURCE_DIR@/.pre-commit-config.yaml') as f: + pre_config = yaml.safe_load(f) + for repo in pre_config['repos']: + for hook in repo['hooks']: + if hook['id'] == 'autopep8': + for arg in hook['args']: + if arg == '--aggressive': + options['aggressive'] += 1 + elif arg.startswith('--ignore='): + options['ignore'] = arg.split('=', 1)[0].split(',') + return options + return options + + pep8_opts = get_autopep8_options() + for cell in nb['cells']: + source = None + header = '' + footer = '' + if cell['cell_type'] == 'code': + source = cell['source'] + elif cell['cell_type'] == 'markdown' and 'solution2' in cell['metadata']: + lines = cell['source'].strip().split('\n') + if lines[0].strip() == '```python' and lines[-1].strip() == '```': + source = '\n'.join(lines[1:-1]) + header = lines[0] + '\n' + footer = '\n' + lines[-1] + if source is not None: + source = autopep8.fix_code(source, options=pep8_opts).strip() + cell['source'] = header + source + footer + + def execute_notebook(nb, src, cell_separator, notebook_filepath): """ Run the notebook in a python3 kernel. The ESPResSo visualizers are @@ -231,8 +268,12 @@ def handle_exercise2_case(args): if args.to_md: convert_exercise2_to_markdown(nb) - else: + elif args.to_py: convert_exercise2_to_code(nb) + elif args.pep8: + convert_exercise2_to_code(nb) + apply_autopep8(nb) + convert_exercise2_to_markdown(nb) # write edited notebook with open(args.input, 'w', encoding='utf-8') as f: @@ -270,6 +311,8 @@ def handle_exercise2_case(args): help='convert solution cells to Markdown') group_exercise2.add_argument('--to-py', action='store_true', help='convert solution cells to Python') +group_exercise2.add_argument('--pep8', action='store_true', + help='apply autopep8 formatting') parser_exercise2.set_defaults(callback=handle_exercise2_case) diff --git a/testsuite/scripts/tutorials/test_html_runner.py b/testsuite/scripts/tutorials/test_html_runner.py index 40dd10624cb..fae50040d41 100644 --- a/testsuite/scripts/tutorials/test_html_runner.py +++ b/testsuite/scripts/tutorials/test_html_runner.py @@ -25,6 +25,19 @@ import html_runner +def skipIfMissingModules(x): return x + + +try: + import yaml # pylint: disable=unused-import + import autopep8 # pylint: disable=unused-import +except ImportError: + skipIfMissingModules = ut.skip( + "Python modules 'yaml' or 'autopep8' not available, skipping test!") +else: + def skipIfMissingModules(x): return x + + class HtmlRunner(ut.TestCase): """ Test the :file:`doc/tutorials/html_runner.py` script. A new Jupyter @@ -274,6 +287,45 @@ def test_exercise2_conversion(self): self.assertEqual(cell['metadata']['key'], 'value') self.assertEqual(next(cells, 'EOF'), 'EOF') + @skipIfMissingModules + def test_exercise2_autopep8(self): + f_input = '@CMAKE_CURRENT_BINARY_DIR@/test_html_runner_exercise2_autopep8.ipynb' + # setup + with open(f_input, 'w', encoding='utf-8') as f: + nb = nbformat.v4.new_notebook(metadata=self.nb_metadata) + # question and code answer + cell_md = nbformat.v4.new_markdown_cell(source='Question 1') + cell_md['metadata']['solution2_first'] = True + cell_md['metadata']['solution2'] = 'hidden' + nb['cells'].append(cell_md) + code = '```python\n\nif 1: #comment\n print( [5+1,4])\n\n```' + cell_md = nbformat.v4.new_markdown_cell(source=code) + cell_md['metadata']['solution2'] = 'hidden' + nb['cells'].append(cell_md) + nbformat.write(nb, f) + # run command and check for errors + cmd = ['exercise2', '--pep8', f_input] + try: + args = html_runner.parser.parse_args(cmd) + args.callback(args) + except BaseException: + self.failed_to_run(cmd) + # read processed notebook + with open(f_input, encoding='utf-8') as f: + nb_output = nbformat.read(f, as_version=4) + # check cells + cells = iter(nb_output['cells']) + cell = next(cells) + self.assertEqual(cell['cell_type'], 'markdown') + self.assertEqual(cell['source'], 'Question 1') + cell = next(cells) + self.assertEqual(cell['cell_type'], 'markdown') + self.assertEqual( + cell['source'], + '```python\nif 1: # comment\n print([5 + 1, 4])\n```') + self.assertEqual(cell['metadata']['solution2'], 'hidden') + self.assertEqual(next(cells, 'EOF'), 'EOF') + if __name__ == "__main__": ut.main() From 28dd7a82e650abdc29d5d7fc56d74cbcbe13cb39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Fri, 13 Nov 2020 01:51:17 +0100 Subject: [PATCH 06/14] testsuite: Fix edge case in non-deterministic test --- testsuite/python/virtual_sites_tracers_common.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/testsuite/python/virtual_sites_tracers_common.py b/testsuite/python/virtual_sites_tracers_common.py index 9328e7cf179..73006492d78 100644 --- a/testsuite/python/virtual_sites_tracers_common.py +++ b/testsuite/python/virtual_sites_tracers_common.py @@ -104,7 +104,10 @@ def compute_angle(self): n1 = n1 / norm1 n2 = n2 / norm2 - alpha = np.arccos(np.dot(n1, n2)) + cos_alpha = np.dot(n1, n2) + if cos_alpha > 1: + cos_alpha = 1 + alpha = np.arccos(cos_alpha) return alpha def test_tribend(self): From c28b24f3f0c0cf597643da4bb2fe8c8a2b488e52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Fri, 13 Nov 2020 15:24:55 +0100 Subject: [PATCH 07/14] python: Add pylint check W0199 (assert-on-tuple) The python `assert` keyword does not behave like a function. Adding round brackets can lead to subtle bugs: `assert(a == b, "message")` actually evaluates a tuple and prints "SyntaxWarning: assertion is always true, perhaps remove parentheses?" without halting the flow of the program. Warnings cannot be caught by a try/except, instead one has to rely on the warnings module to convert them to exceptions. --- .pylintrc | 1 + .../01-lennard_jones/01-lennard_jones.ipynb | 8 ++++---- .../02-charged_system/02-charged_system-1.ipynb | 12 ++++++------ testsuite/python/observables.py | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.pylintrc b/.pylintrc index 40862e285bc..9932b4f2f97 100644 --- a/.pylintrc +++ b/.pylintrc @@ -68,6 +68,7 @@ disable=all # it should appear only once). See also the "--disable" option for examples. enable=dangerous-default-value, # W0102 wildcard-import, # W0401 + assert-on-tuple, # W0199 unused-import, # W0611 unused-variable, # W0612 unused-argument, # W0613 diff --git a/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb b/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb index f861a34eb33..fe64179b41e 100644 --- a/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb +++ b/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb @@ -220,7 +220,7 @@ "outputs": [], "source": [ "# Test solution of Exercise 1\n", - "assert(isinstance(system, espressomd.System))" + "assert isinstance(system, espressomd.System)" ] }, { @@ -296,7 +296,7 @@ "outputs": [], "source": [ "# Test that now we have indeed N_PART particles in the system\n", - "assert(len(system.part) == N_PART)" + "assert len(system.part) == N_PART" ] }, { @@ -378,7 +378,7 @@ "metadata": {}, "outputs": [], "source": [ - "assert((BOX_L-2*SKIN > LJ_CUT).all())" + "assert (BOX_L-2*SKIN > LJ_CUT).all()" ] }, { @@ -506,7 +506,7 @@ "outputs": [], "source": [ "# check that after the exercise the total energy is negative\n", - "assert(system.analysis.energy()['total'] < 0)\n", + "assert system.analysis.energy()['total'] < 0\n", "# reset clock\n", "system.time = 0." ] diff --git a/doc/tutorials/02-charged_system/02-charged_system-1.ipynb b/doc/tutorials/02-charged_system/02-charged_system-1.ipynb index c183fb556aa..22ac716fe15 100644 --- a/doc/tutorials/02-charged_system/02-charged_system-1.ipynb +++ b/doc/tutorials/02-charged_system/02-charged_system-1.ipynb @@ -219,8 +219,8 @@ " ROD_CHARGE_DENS, N_rod_beads, ROD_TYPE)\n", "\n", "# check that the particle setup was done correctly\n", - "assert(abs(sum(system.part[:].q)) < 1e-10)\n", - "assert(np.all(system.part.select(type=ROD_TYPE).fix))" + "assert abs(sum(system.part[:].q)) < 1e-10\n", + "assert np.all(system.part.select(type=ROD_TYPE).fix)" ] }, { @@ -481,9 +481,9 @@ "N_RADIAL_BINS = 200\n", "radial_profile_accs, bin_edges = setup_profile_calculation(\n", " system, STEPS_PER_SAMPLE, [COUNTERION_TYPE], r_min, N_RADIAL_BINS)\n", - "assert(isinstance(\n", - " radial_profile_accs[COUNTERION_TYPE], accumulators.MeanVarianceCalculator))\n", - "assert(len(bin_edges) == N_RADIAL_BINS+1)" + "assert isinstance(\n", + " radial_profile_accs[COUNTERION_TYPE], accumulators.MeanVarianceCalculator)\n", + "assert len(bin_edges) == N_RADIAL_BINS+1" ] }, { @@ -835,7 +835,7 @@ " system, COUNTERION_VALENCY, COUNTERION_TYPE,\n", " ROD_CHARGE_DENS, N_rod_beads, ROD_TYPE)\n", "anions, cations = add_salt(system, ANION_PARAMS, CATION_PARAMS)\n", - "assert(abs(sum(anions.q)+sum(cations.q)) < 1e-10)\n", + "assert abs(sum(anions.q)+sum(cations.q)) < 1e-10\n", "\n", "p3m.tune()\n", "remove_overlap(system, STEEPEST_DESCENT_PARAMS)\n", diff --git a/testsuite/python/observables.py b/testsuite/python/observables.py index 0763f30cde0..81f5ffb43b8 100644 --- a/testsuite/python/observables.py +++ b/testsuite/python/observables.py @@ -89,7 +89,7 @@ def func(self): self.N_PART * .9), replace=False)) for id in id_list: - assert(self.system.part.exists(id)) + self.assertTrue(self.system.part.exists(id)) # Get data from particles if pprop_name == "f": From e140f8e5b5ee5e4fb7b3f9808452d0a2c87a9361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Fri, 13 Nov 2020 15:35:25 +0100 Subject: [PATCH 08/14] tutorials: Standardize plots, reduce verbosity --- .../01-lennard_jones/01-lennard_jones.ipynb | 16 ++++++------ .../02-charged_system-1.ipynb | 25 +++++++++++-------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb b/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb index fe64179b41e..f5e60871100 100644 --- a/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb +++ b/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb @@ -155,7 +155,8 @@ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy import optimize\n", - "np.random.seed(42)" + "np.random.seed(42)\n", + "plt.rcParams.update({'font.size': 22})" ] }, { @@ -466,7 +467,6 @@ { "cell_type": "markdown", "metadata": { - "code_folding": [], "solution2": "hidden" }, "source": [ @@ -642,12 +642,13 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure()\n", + "plt.figure(figsize=(10, 6))\n", "plt.plot(times, T_inst, label='$T_{inst}$')\n", "plt.plot(times, [TEMPERATURE]*len(times), label='$T$ set by thermostat')\n", "plt.legend()\n", "plt.xlabel('t')\n", - "plt.ylabel('T')" + "plt.ylabel('T')\n", + "plt.show()" ] }, { @@ -762,7 +763,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure()\n", + "plt.figure(figsize=(10, 6))\n", "plt.plot(times, e_total_autocor, label='data')\n", "plt.plot(times, np.exp(-times/corr_time), label='exponential fit')\n", "plt.plot(2*[steps_per_uncorrelated_sample*system.time_step],\n", @@ -770,7 +771,8 @@ "plt.xlim(left=-2, right=50)\n", "plt.legend()\n", "plt.xlabel('t')\n", - "plt.ylabel('total energy autocorrelation')" + "plt.ylabel('total energy autocorrelation')\n", + "plt.show()" ] }, { @@ -972,7 +974,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(10, 7))\n", "ax.plot(rs, rdf, label='simulated')\n", "plt.legend()\n", "plt.xlabel('r')\n", diff --git a/doc/tutorials/02-charged_system/02-charged_system-1.ipynb b/doc/tutorials/02-charged_system/02-charged_system-1.ipynb index 22ac716fe15..3e8e6e6a8f7 100644 --- a/doc/tutorials/02-charged_system/02-charged_system-1.ipynb +++ b/doc/tutorials/02-charged_system/02-charged_system-1.ipynb @@ -43,7 +43,8 @@ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "\n", - "np.random.seed(41)" + "np.random.seed(41)\n", + "plt.rcParams.update({'font.size': 22})" ] }, { @@ -306,14 +307,15 @@ " while i < sd_params['max_steps']//sd_params['emstep']:\n", " prev_maxforce = maxforce\n", " prev_energy = energy\n", - " print(prev_energy)\n", " system.integrator.run(sd_params['emstep'])\n", " maxforce = np.max(np.linalg.norm(system.part[:].f, axis=1))\n", " relforce = np.abs((maxforce-prev_maxforce)/prev_maxforce)\n", " energy = system.analysis.energy()['total']\n", " relener = np.abs((energy-prev_energy)/prev_energy)\n", - " print(\"minimization step: {:4.0f}\\tmax. rel. force change:{:+3.3e}\\trel. energy change:{:+3.3e}\".format(\n", - " (i+1)*sd_params['emstep'], relforce, relener))\n", + " if i > 1 and (i + 1) % 4 == 0:\n", + " print(f\"minimization step: {(i+1)*sd_params['emstep']:4.0f}\"\n", + " f\" max. rel. force change:{relforce:+3.3e}\"\n", + " f\" rel. energy change:{relener:+3.3e}\")\n", " if relforce < sd_params['f_tol'] or relener < sd_params['e_tol']:\n", " break\n", " i += 1\n", @@ -387,10 +389,11 @@ "source": [ "# plot time in time_steps so we can judge the number of warmup steps\n", "ts = np.arange(0, N_SAMPLES_FIRST_RUN)*STEPS_PER_SAMPLE_FIRST_RUN\n", - "fig1 = plt.figure()\n", + "plt.figure(figsize=(10, 7))\n", "plt.plot(ts, energies)\n", "plt.xlabel('time steps')\n", - "plt.ylabel('system total energy')" + "plt.ylabel('system total energy')\n", + "plt.show()" ] }, { @@ -668,7 +671,7 @@ "# we only use the right side of the bin edges for plotting\n", "rs = bin_edges[1:, 0, 0, 0]\n", "\n", - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(10, 7))\n", "for run in runs:\n", " hist = np.array(run['histogram'][:, 0, 0])\n", " # The CylindricalDensityProfile normalizes the bin values by the bin size.\n", @@ -683,7 +686,8 @@ "ax.set_xscale('log')\n", "ax.legend()\n", "plt.xlabel('r')\n", - "plt.ylabel('P(r)')" + "plt.ylabel('P(r)')\n", + "plt.show()" ] }, { @@ -909,11 +913,12 @@ "outputs": [], "source": [ "charge_hist /= charge_hist[-1]\n", - "fig2, ax2 = plt.subplots()\n", + "fig2, ax2 = plt.subplots(figsize=(10, 7))\n", "ax2.plot(rs, charge_hist)\n", "ax2.set_xscale('linear')\n", "plt.xlabel('r')\n", - "plt.ylabel('P(r)')" + "plt.ylabel('P(r)')\n", + "plt.show()" ] }, { From 6d50bc3790e2fabb1b6474424d2e47d8793951b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Fri, 13 Nov 2020 15:57:29 +0100 Subject: [PATCH 09/14] tutorials: Formatting with autopep8 --- .../01-lennard_jones/01-lennard_jones.ipynb | 45 +++++----- .../02-charged_system-1.ipynb | 90 +++++++++---------- .../04-lattice_boltzmann_part2.ipynb | 3 + .../04-lattice_boltzmann_part3.ipynb | 34 ++++--- .../04-lattice_boltzmann_part4.ipynb | 4 +- .../05-raspberry_electrophoresis.ipynb | 20 ++--- .../07-electrokinetics.ipynb | 24 ++--- .../11-ferrofluid/11-ferrofluid_part1.ipynb | 54 ++++++----- .../11-ferrofluid/11-ferrofluid_part2.ipynb | 88 +++++++++--------- .../11-ferrofluid/11-ferrofluid_part3.ipynb | 38 ++++---- .../12-constant_pH/12-constant_pH.ipynb | 73 +++++++-------- 11 files changed, 249 insertions(+), 224 deletions(-) diff --git a/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb b/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb index f5e60871100..0889e41cfe7 100644 --- a/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb +++ b/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb @@ -279,7 +279,7 @@ }, "source": [ "```python\n", - "system.part.add(type=[0]*N_PART, pos=np.random.random((N_PART,3)) * system.box_l)\n", + "system.part.add(type=[0] * N_PART, pos=np.random.random((N_PART, 3)) * system.box_l)\n", "```" ] }, @@ -379,7 +379,7 @@ "metadata": {}, "outputs": [], "source": [ - "assert (BOX_L-2*SKIN > LJ_CUT).all()" + "assert (BOX_L - 2 * SKIN > LJ_CUT).all()" ] }, { @@ -472,7 +472,7 @@ "source": [ "```python\n", "# Set up steepest descent integration\n", - "system.integrator.set_steepest_descent(f_max=0, # use a relative convergence criterion only\n", + "system.integrator.set_steepest_descent(f_max=0, # use a relative convergence criterion only\n", " gamma=DAMPING,\n", " max_displacement=MAX_DISPLACEMENT)\n", "\n", @@ -481,10 +481,10 @@ "old_force = np.max(np.linalg.norm(system.part[:].f, axis=1))\n", "\n", "\n", - "while system.time/system.time_step < MAX_STEPS:\n", + "while system.time / system.time_step < MAX_STEPS:\n", " system.integrator.run(EM_STEP)\n", " force = np.max(np.linalg.norm(system.part[:].f, axis=1))\n", - " rel_force = np.abs((force-old_force)/old_force)\n", + " rel_force = np.abs((force - old_force) / old_force)\n", " print(f'rel. force change:{rel_force:.2e}')\n", " if rel_force < F_TOL:\n", " break\n", @@ -546,7 +546,7 @@ "* Use system.integrator.set_vv() to use a Velocity Verlet integration scheme and\n", " system.thermostat.set_langevin() to turn on the Langevin thermostat.\n", "\n", - " Set the temperature to TEMPERATURE and damping coefficient to GAMMA.\n", + " Set the temperature to ``TEMPERATURE`` and damping coefficient to ``GAMMA``.\n", "\n", "For details see the [online documentation](http://espressomd.org/html/doc/espressomd.html#module-espressomd.thermostat)." ] @@ -609,7 +609,7 @@ "* Integrate the system and measure the total and kinetic energy. Take ``N_SAMPLES`` measurements every ``STEPS_PER_SAMPLE`` integration steps.\n", "* Calculate the total and kinetic energies using the analysis method [system.analysis.energy()](http://espressomd.org/html/doc/espressomd.html#module-espressomd.analyze).\n", "* Use the containers ``times``, ``e_total`` and ``e_kin`` from the cell above to store the time series.\n", - "* From the simulation results, calculate the instantaneous temperature $T_{inst} = 2/3 \\times E_\\mathrm{kin}$/N_PART." + "* From the simulation results, calculate the instantaneous temperature $T_{\\mathrm{inst}} = 2/3 \\times E_\\mathrm{kin}$/N_PART." ] }, { @@ -625,7 +625,7 @@ " e_total[i] = energy['total']\n", " e_kin[i] = energy['kinetic']\n", " system.integrator.run(STEPS_PER_SAMPLE)\n", - "T_inst = 2./3. * e_kin / N_PART\n", + "T_inst = 2. / 3. * e_kin / N_PART\n", "```" ] }, @@ -643,8 +643,8 @@ "outputs": [], "source": [ "plt.figure(figsize=(10, 6))\n", - "plt.plot(times, T_inst, label='$T_{inst}$')\n", - "plt.plot(times, [TEMPERATURE]*len(times), label='$T$ set by thermostat')\n", + "plt.plot(times, T_inst, label='$T_{\\\\mathrm{inst}}$')\n", + "plt.plot(times, [TEMPERATURE] * len(times), label='$T$ set by thermostat')\n", "plt.legend()\n", "plt.xlabel('t')\n", "plt.ylabel('T')\n", @@ -692,8 +692,8 @@ " x = np.asarray(x)\n", " mean = x.mean()\n", " var = np.var(x)\n", - " xp = x-mean\n", - " corr = np.correlate(xp, xp, 'full')[len(x)-1:]/var/len(x)\n", + " xp = x - mean\n", + " corr = np.correlate(xp, xp, 'full')[len(x) - 1:] / var / len(x)\n", " return corr\n", "\n", "\n", @@ -701,7 +701,7 @@ " data = np.asarray(data)\n", " data /= data[0]\n", "\n", - " def fitfn(t, t_corr): return np.exp(-t/t_corr)\n", + " def fitfn(t, t_corr): return np.exp(-t / t_corr)\n", " popt, pcov = optimize.curve_fit(fitfn, ts, data)\n", " return popt[0]" ] @@ -729,8 +729,7 @@ "```python\n", "e_total_autocor = autocor(e_total)\n", "corr_time = fit_correlation_time(e_total_autocor, times)\n", - "steps_per_uncorrelated_sample = int(np.ceil(3*corr_time/system.time_step))\n", - "\n", + "steps_per_uncorrelated_sample = int(np.ceil(3 * corr_time / system.time_step))\n", "```" ] }, @@ -765,8 +764,8 @@ "source": [ "plt.figure(figsize=(10, 6))\n", "plt.plot(times, e_total_autocor, label='data')\n", - "plt.plot(times, np.exp(-times/corr_time), label='exponential fit')\n", - "plt.plot(2*[steps_per_uncorrelated_sample*system.time_step],\n", + "plt.plot(times, np.exp(-times / corr_time), label='exponential fit')\n", + "plt.plot(2 * [steps_per_uncorrelated_sample * system.time_step],\n", " [min(e_total_autocor), 1], label='sampling interval')\n", "plt.xlim(left=-2, right=50)\n", "plt.legend()\n", @@ -803,10 +802,10 @@ }, "source": [ "```python\n", - "uncorrelated_sample_step = int(np.ceil(steps_per_uncorrelated_sample/STEPS_PER_SAMPLE))\n", - "pot_energies = (e_total-e_kin)[::uncorrelated_sample_step]/N_PART \n", + "uncorrelated_sample_step = int(np.ceil(steps_per_uncorrelated_sample / STEPS_PER_SAMPLE))\n", + "pot_energies = (e_total - e_kin)[::uncorrelated_sample_step] / N_PART\n", "mean_pot_energy = np.mean(pot_energies)\n", - "SEM_pot_energy = np.std(pot_energies)/np.sqrt(len(pot_energies))\n", + "SEM_pot_energy = np.std(pot_energies) / np.sqrt(len(pot_energies))\n", "```" ] }, @@ -844,8 +843,8 @@ "metadata": {}, "outputs": [], "source": [ - "tail_energy_per_particle = 8./3.*np.pi*DENSITY*LJ_EPS * \\\n", - " LJ_SIG**3*(1./3.*(LJ_SIG/LJ_CUT)**9-(LJ_SIG/LJ_CUT)**3)\n", + "tail_energy_per_particle = 8. / 3. * np.pi * DENSITY * LJ_EPS * \\\n", + " LJ_SIG**3 * (1. / 3. * (LJ_SIG / LJ_CUT)**9 - (LJ_SIG / LJ_CUT)**3)\n", "mean_pot_energy_corrected = mean_pot_energy + tail_energy_per_particle\n", "print(f'corrected mean potential energy = {mean_pot_energy_corrected:.2f}')" ] @@ -934,7 +933,7 @@ "metadata": {}, "outputs": [], "source": [ - "system.integrator.run(N_SAMPLES*steps_per_uncorrelated_sample)" + "system.integrator.run(N_SAMPLES * steps_per_uncorrelated_sample)" ] }, { diff --git a/doc/tutorials/02-charged_system/02-charged_system-1.ipynb b/doc/tutorials/02-charged_system/02-charged_system-1.ipynb index 3e8e6e6a8f7..da927f3a64f 100644 --- a/doc/tutorials/02-charged_system/02-charged_system-1.ipynb +++ b/doc/tutorials/02-charged_system/02-charged_system-1.ipynb @@ -67,7 +67,7 @@ "BJERRUM_LENGTH = 1.0\n", "\n", "# we assume a unit system where the elementary charge and the thermal energy are both 1\n", - "system = System(box_l=3*[ROD_LENGTH])\n", + "system = System(box_l=3 * [ROD_LENGTH])\n", "KT = 1.\n", "Q_E = 1.\n", "\n", @@ -120,13 +120,13 @@ }, "source": [ "```python\n", - "#ion-ion interaction\n", - "system.non_bonded_inter[COUNTERION_TYPE,COUNTERION_TYPE].wca.set_params(\n", - " epsilon=WCA_EPSILON, sigma=ION_DIAMETER)\n", + "# ion-ion interaction\n", + "system.non_bonded_inter[COUNTERION_TYPE, COUNTERION_TYPE].wca.set_params(\n", + " epsilon=WCA_EPSILON, sigma=ION_DIAMETER)\n", "\n", "# ion-rod interaction\n", - "system.non_bonded_inter[COUNTERION_TYPE,ROD_TYPE].wca.set_params(\n", - " epsilon=WCA_EPSILON, sigma=ION_DIAMETER/2. + ROD_RADIUS)\n", + "system.non_bonded_inter[COUNTERION_TYPE, ROD_TYPE].wca.set_params(\n", + " epsilon=WCA_EPSILON, sigma=ION_DIAMETER / 2. + ROD_RADIUS)\n", "```" ] }, @@ -173,25 +173,25 @@ "\n", " # calculate charge of the single rod beads\n", " rod_length = system.box_l[2]\n", - " total_rod_charge = rod_charge_dens*rod_length\n", - " rod_charge_per_bead = total_rod_charge/N_rod_beads\n", + " total_rod_charge = rod_charge_dens * rod_length\n", + " rod_charge_per_bead = total_rod_charge / N_rod_beads\n", "\n", " # number of counterions\n", - " N_ions = int(total_rod_charge/ion_valency)\n", + " N_ions = int(total_rod_charge / ion_valency)\n", "\n", " rod_zs = np.linspace(0, rod_length, num=N_rod_beads, endpoint=False)\n", - " rod_positions = np.column_stack(([system.box_l[0]/2.]*N_rod_beads,\n", - " [system.box_l[1]/2.]*N_rod_beads,\n", + " rod_positions = np.column_stack(([system.box_l[0] / 2.] * N_rod_beads,\n", + " [system.box_l[1] / 2.] * N_rod_beads,\n", " rod_zs))\n", "\n", - " system.part.add(pos=rod_positions, type=[rod_type]*N_rod_beads,\n", - " q=[rod_charge_per_bead]*N_rod_beads,\n", - " fix=[3*[True]]*N_rod_beads)\n", + " system.part.add(pos=rod_positions, type=[rod_type] * N_rod_beads,\n", + " q=[rod_charge_per_bead] * N_rod_beads,\n", + " fix=[3 * [True]] * N_rod_beads)\n", "\n", " ion_positions = np.random.random((N_ions, 3)) * system.box_l\n", "\n", " counter_ions = system.part.add(pos=ion_positions, type=[\n", - " counterion_type]*N_ions, q=[-ion_valency]*N_ions)\n", + " counterion_type] * N_ions, q=[-ion_valency] * N_ions)\n", "\n", " return counter_ions\n", "```" @@ -214,7 +214,7 @@ "ROD_CHARGE_DENS = 2\n", "\n", "# number of beads that make up the rod\n", - "N_rod_beads = int(ROD_LENGTH/ROD_RADIUS)\n", + "N_rod_beads = int(ROD_LENGTH / ROD_RADIUS)\n", "\n", "setup_rod_and_counterions(system, COUNTERION_VALENCY, COUNTERION_TYPE,\n", " ROD_CHARGE_DENS, N_rod_beads, ROD_TYPE)\n", @@ -237,7 +237,7 @@ "metadata": {}, "outputs": [], "source": [ - "p3m_params = {'prefactor': KT*BJERRUM_LENGTH*Q_E**2,\n", + "p3m_params = {'prefactor': KT * BJERRUM_LENGTH * Q_E**2,\n", " 'accuracy': 1e-3}" ] }, @@ -304,14 +304,14 @@ " energy = system.analysis.energy()['total']\n", "\n", " i = 0\n", - " while i < sd_params['max_steps']//sd_params['emstep']:\n", + " while i < sd_params['max_steps'] // sd_params['emstep']:\n", " prev_maxforce = maxforce\n", " prev_energy = energy\n", " system.integrator.run(sd_params['emstep'])\n", " maxforce = np.max(np.linalg.norm(system.part[:].f, axis=1))\n", - " relforce = np.abs((maxforce-prev_maxforce)/prev_maxforce)\n", + " relforce = np.abs((maxforce - prev_maxforce) / prev_maxforce)\n", " energy = system.analysis.energy()['total']\n", - " relener = np.abs((energy-prev_energy)/prev_energy)\n", + " relener = np.abs((energy - prev_energy) / prev_energy)\n", " if i > 1 and (i + 1) % 4 == 0:\n", " print(f\"minimization step: {(i+1)*sd_params['emstep']:4.0f}\"\n", " f\" max. rel. force change:{relforce:+3.3e}\"\n", @@ -329,7 +329,7 @@ "metadata": {}, "outputs": [], "source": [ - "STEEPEST_DESCENT_PARAMS= {'f_tol': 1e-2,\n", + "STEEPEST_DESCENT_PARAMS = {'f_tol': 1e-2,\n", " 'e_tol': 1e-5,\n", " 'damping': 30,\n", " 'max_steps': 10000,\n", @@ -388,7 +388,7 @@ "outputs": [], "source": [ "# plot time in time_steps so we can judge the number of warmup steps\n", - "ts = np.arange(0, N_SAMPLES_FIRST_RUN)*STEPS_PER_SAMPLE_FIRST_RUN\n", + "ts = np.arange(0, N_SAMPLES_FIRST_RUN) * STEPS_PER_SAMPLE_FIRST_RUN\n", "plt.figure(figsize=(10, 7))\n", "plt.plot(ts, energies)\n", "plt.xlabel('time steps')\n", @@ -442,17 +442,17 @@ " ion_ids = system.part.select(type=ion_type).id\n", " radial_profile_obs = observables.CylindricalDensityProfile(\n", " ids=ion_ids,\n", - " center=np.array(system.box_l)/2.,\n", + " center=np.array(system.box_l) / 2.,\n", " axis=[0, 0, 1, ],\n", " n_r_bins=n_radial_bins,\n", " n_phi_bins=1,\n", " n_z_bins=1,\n", " min_r=r_min,\n", " min_phi=-np.pi,\n", - " min_z=-system.box_l[2]/2.,\n", - " max_r=system.box_l[0]/2.,\n", + " min_z=-system.box_l[2] / 2.,\n", + " max_r=system.box_l[0] / 2.,\n", " max_phi=np.pi,\n", - " max_z=system.box_l[2]/2.)\n", + " max_z=system.box_l[2] / 2.)\n", "\n", " bin_edges = radial_profile_obs.bin_edges()\n", "\n", @@ -479,14 +479,14 @@ "metadata": {}, "outputs": [], "source": [ - "r_min = ROD_RADIUS + ION_DIAMETER/2.\n", - "r_max = system.box_l[0]/2.\n", + "r_min = ROD_RADIUS + ION_DIAMETER / 2.\n", + "r_max = system.box_l[0] / 2.\n", "N_RADIAL_BINS = 200\n", "radial_profile_accs, bin_edges = setup_profile_calculation(\n", " system, STEPS_PER_SAMPLE, [COUNTERION_TYPE], r_min, N_RADIAL_BINS)\n", "assert isinstance(\n", " radial_profile_accs[COUNTERION_TYPE], accumulators.MeanVarianceCalculator)\n", - "assert len(bin_edges) == N_RADIAL_BINS+1" + "assert len(bin_edges) == N_RADIAL_BINS + 1" ] }, { @@ -579,7 +579,7 @@ "source": [ "def integrate_system(system, n_steps):\n", " for i in range(100):\n", - " system.integrator.run(int(n_steps/100))\n", + " system.integrator.run(int(n_steps / 100))\n", " print(f'progress={i}%', end='\\r')\n", " print('progress=100%')" ] @@ -620,7 +620,7 @@ " radial_profile_accs, bin_edges = setup_profile_calculation(\n", " system, STEPS_PER_SAMPLE, [COUNTERION_TYPE], r_min, N_RADIAL_BINS)\n", " print('starting simulation')\n", - " integrate_system(system, N_SAMPLES*STEPS_PER_SAMPLE)\n", + " integrate_system(system, N_SAMPLES * STEPS_PER_SAMPLE)\n", "\n", " run['histogram'] = radial_profile_accs[COUNTERION_TYPE].get_mean()\n", " print('simulation for parameters {} done\\n'.format(run['params']))\n", @@ -705,17 +705,17 @@ "source": [ "def eq_to_solve_for_gamma(gamma, manning_parameter, rod_radius, max_radius):\n", " # eq 7 - eq 6 from 10.1021/ma990897o\n", - " return gamma*np.log(max_radius/rod_radius) - np.arctan(1/gamma) + np.arctan((1-manning_parameter)/gamma)\n", + " return gamma * np.log(max_radius / rod_radius) - np.arctan(1 / gamma) + np.arctan((1 - manning_parameter) / gamma)\n", "\n", "\n", "def calc_manning_radius(gamma, max_radius):\n", " # eq 7 from 10.1021/ma990897o\n", - " return max_radius*np.exp(-np.arctan(1./gamma)/gamma)\n", + " return max_radius * np.exp(-np.arctan(1. / gamma) / gamma)\n", "\n", "\n", "def calc_PB_probability(r, manning_parameter, gamma, manning_radius):\n", " # eq 8 and 9 from 10.1021/ma990897o\n", - " return 1./manning_parameter + gamma/manning_parameter * np.tan(gamma*np.log(r/manning_radius))" + " return 1. / manning_parameter + gamma / manning_parameter * np.tan(gamma * np.log(r / manning_radius))" ] }, { @@ -733,7 +733,7 @@ "source": [ "rod_charge_density = runs[0]['params']['rod_charge_dens']\n", "ion_valency = runs[0]['params']['counterion_valency']\n", - "manning_parameter_times_valency = BJERRUM_LENGTH*rod_charge_density*ion_valency\n", + "manning_parameter_times_valency = BJERRUM_LENGTH * rod_charge_density * ion_valency\n", "\n", "gamma = optimize.fsolve(eq_to_solve_for_gamma, 1, args=(\n", " manning_parameter_times_valency, r_min, r_max))\n", @@ -780,10 +780,10 @@ " anion_positions = np.random.random((N_anions, 3)) * system.box_l\n", " cation_positions = np.random.random((N_cations, 3)) * system.box_l\n", "\n", - " anions = system.part.add(pos=anion_positions, type=[anion_params['type']]*N_anions,\n", - " q=[-anion_params['valency']]*N_anions)\n", - " cations = system.part.add(pos=cation_positions, type=[cation_params['type']]*N_cations,\n", - " q=[cation_params['valency']]*N_cations)\n", + " anions = system.part.add(pos=anion_positions, type=[anion_params['type']] * N_anions,\n", + " q=[-anion_params['valency']] * N_anions)\n", + " cations = system.part.add(pos=cation_positions, type=[cation_params['type']] * N_cations,\n", + " q=[cation_params['valency']] * N_cations)\n", "\n", " return anions, cations" ] @@ -801,7 +801,7 @@ " 'valency': 2,\n", " 'number': 150}\n", "ROD_LENGTH = 10\n", - "N_rod_beads = int(ROD_LENGTH/ROD_RADIUS)\n", + "N_rod_beads = int(ROD_LENGTH / ROD_RADIUS)\n", "ROD_CHARGE_DENS = 1\n", "COUNTERION_VALENCY = 1\n", "\n", @@ -821,7 +821,7 @@ "# set interactions of salt with the rod and all ions\n", "for salt_type in [ANION_PARAMS['type'], CATION_PARAMS['type']]:\n", " system.non_bonded_inter[salt_type, ROD_TYPE].wca.set_params(\n", - " epsilon=WCA_EPSILON, sigma=ION_DIAMETER/2. + ROD_RADIUS)\n", + " epsilon=WCA_EPSILON, sigma=ION_DIAMETER / 2. + ROD_RADIUS)\n", " for ion_type in all_ion_types:\n", " system.non_bonded_inter[salt_type, ion_type].wca.set_params(\n", " epsilon=WCA_EPSILON, sigma=ION_DIAMETER)" @@ -834,12 +834,12 @@ "outputs": [], "source": [ "clear_system(system)\n", - "system.box_l = 3*[ROD_LENGTH]\n", + "system.box_l = 3 * [ROD_LENGTH]\n", "counterions = setup_rod_and_counterions(\n", " system, COUNTERION_VALENCY, COUNTERION_TYPE,\n", " ROD_CHARGE_DENS, N_rod_beads, ROD_TYPE)\n", "anions, cations = add_salt(system, ANION_PARAMS, CATION_PARAMS)\n", - "assert abs(sum(anions.q)+sum(cations.q)) < 1e-10\n", + "assert abs(sum(anions.q) + sum(cations.q)) < 1e-10\n", "\n", "p3m.tune()\n", "remove_overlap(system, STEEPEST_DESCENT_PARAMS)\n", @@ -849,7 +849,7 @@ "radial_profile_accs, bin_edges = setup_profile_calculation(\n", " system, STEPS_PER_SAMPLE_SALT, all_ion_types, r_min, N_RADIAL_BINS)\n", "print('starting simulation')\n", - "integrate_system(system, N_SAMPLES_SALT*STEPS_PER_SAMPLE_SALT)\n", + "integrate_system(system, N_SAMPLES_SALT * STEPS_PER_SAMPLE_SALT)\n", "print('simulation done')" ] }, @@ -893,7 +893,7 @@ "counterion_charge = sum(counterions.q)\n", "anion_charge = sum(anions.q)\n", "cation_charge = sum(cations.q)\n", - "charge_hist = counterion_charge*cum_hists[COUNTERION_TYPE] + \\\n", + "charge_hist = counterion_charge * cum_hists[COUNTERION_TYPE] + \\\n", " anion_charge * cum_hists[ANION_PARAMS['type']] + \\\n", " cation_charge * cum_hists[CATION_PARAMS['type']]\n", "```" diff --git a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part2.ipynb b/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part2.ipynb index d23a2e6484f..f12244d636f 100644 --- a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part2.ipynb +++ b/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part2.ipynb @@ -257,9 +257,11 @@ "source": [ "import scipy.optimize\n", "\n", + "\n", "def quadratic(x, a, b, c):\n", " return a * x**2 + b * x + c\n", "\n", + "\n", "# cutoffs for the ballistic regime (different for each gamma value)\n", "tau_p_values = [14, 12, 10, 7]\n", "\n", @@ -303,6 +305,7 @@ "def linear(x, a, b):\n", " return a * x + b\n", "\n", + "\n", "# cutoffs for the diffusive regime (different for each gamma value)\n", "tau_f_values = [24, 22, 20, 17]\n", "# cutoff for the data series (larger lag times have larger variance due to undersampling)\n", diff --git a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb b/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb index 7209f8a5f99..8f9ea782ba2 100644 --- a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb +++ b/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb @@ -133,6 +133,7 @@ " corr_operation=\"square_distance_componentwise\", compress1=\"discard1\")\n", " return com_pos_cor\n", "\n", + "\n", "def correlator_gk(pids_monomers, tau_max):\n", " com_vel = espressomd.observables.ComVelocity(ids=pids_monomers)\n", " com_vel_cor = espressomd.accumulators.Correlator(\n", @@ -169,6 +170,7 @@ " '''\n", " system.thermostat.set_langevin(kT=kT, gamma=gamma, seed=42)\n", "\n", + "\n", "def solvent_lbm(system, kT, gamma):\n", " '''\n", " Lattice-based solvation model based on the LBM (Zimm model).\n", @@ -221,7 +223,7 @@ " import espressomd.lb\n", "\n", "# System setup\n", - "system = espressomd.System(box_l=3*[BOX_L])\n", + "system = espressomd.System(box_l=3 * [BOX_L])\n", "system.cell_system.skin = 0.4\n", "\n", "# Lennard-Jones interaction\n", @@ -321,9 +323,9 @@ "rf_results = np.array(rf_results)\n", "rg_results = np.array(rg_results)\n", "com_pos_tau_results = np.array(com_pos_tau_results)\n", - "com_pos_msd_results = np.reshape(com_pos_msd_results, [len(N_MONOMERS),-1])\n", + "com_pos_msd_results = np.reshape(com_pos_msd_results, [len(N_MONOMERS), -1])\n", "com_vel_tau_results = np.array(com_vel_tau_results)\n", - "com_vel_acf_results = np.reshape(com_vel_acf_results, [len(N_MONOMERS),-1])" + "com_vel_acf_results = np.reshape(com_vel_acf_results, [len(N_MONOMERS), -1])" ] }, { @@ -357,6 +359,7 @@ "import scipy.signal\n", "import scipy.optimize\n", "\n", + "\n", "def autocorrelation(time_series):\n", " '''\n", " Normalized autocorrelation function with zero-padding. This is a\n", @@ -371,6 +374,7 @@ " acf_normalized = acf / (n - np.arange(n)) # rescale by bin sizes\n", " return acf_normalized\n", "\n", + "\n", "def standard_error_mean_autocorrelation(time_series, variable_label):\n", " '''\n", " Calculate the mean and the correlation-corrected standard error\n", @@ -385,7 +389,7 @@ " for signal, N in zip(time_series, N_MONOMERS):\n", " acf = autocorrelation(signal - np.mean(signal))\n", " # the acf cannot be integrated beyond tau=N/2\n", - " integral = np.array([acf[0] + 2 * np.sum(acf[1:j]) for j in np.arange(1, len(acf)//2)])\n", + " integral = np.array([acf[0] + 2 * np.sum(acf[1:j]) for j in np.arange(1, len(acf) // 2)])\n", " # remove the noisy part of the integral\n", " negative_number_list = np.nonzero(integral < 0)\n", " if negative_number_list[0].size:\n", @@ -408,6 +412,7 @@ " plt.show()\n", " return np.array(summary)\n", "\n", + "\n", "def fitting_polymer_theory(polymer_model, n_monomers, diffusion, rh_exponent):\n", " '''\n", " Fit the appropriate polymer diffusion coefficient equation (Rouse or\n", @@ -471,15 +476,15 @@ "outputs": [], "source": [ "rf_summary = standard_error_mean_autocorrelation(rf_results, r'\\operatorname{acf}(R_F)')\n", - "rf_exponent, rf_prefactor = np.polyfit(np.log(N_MONOMERS), np.log(rf_summary[:,0]), 1)\n", + "rf_exponent, rf_prefactor = np.polyfit(np.log(N_MONOMERS), np.log(rf_summary[:, 0]), 1)\n", "rf_prefactor = np.exp(rf_prefactor)\n", "\n", "fig = plt.figure(figsize=(10, 6))\n", "x = np.linspace(min(N_MONOMERS) - 0.5, max(N_MONOMERS) + 0.5, 20)\n", "plt.plot(x, rf_prefactor * x**rf_exponent, '-',\n", " label=rf'$R_F^{{\\mathrm{{fit}}}} = {rf_prefactor:.2f} N^{{{rf_exponent:.2f}}}$')\n", - "plt.errorbar(N_MONOMERS, rf_summary[:,0],\n", - " yerr=rf_summary[:,1],\n", + "plt.errorbar(N_MONOMERS, rf_summary[:, 0],\n", + " yerr=rf_summary[:, 1],\n", " ls='', marker='o', capsize=5, capthick=1,\n", " label=r'$R_F^{\\mathrm{simulation}}$')\n", "plt.xlabel('Number of monomers $N$')\n", @@ -509,15 +514,15 @@ "outputs": [], "source": [ "rg_summary = standard_error_mean_autocorrelation(rg_results, r'\\operatorname{acf}(R_g)')\n", - "rg_exponent, rg_prefactor = np.polyfit(np.log(N_MONOMERS), np.log(rg_summary[:,0]), 1)\n", + "rg_exponent, rg_prefactor = np.polyfit(np.log(N_MONOMERS), np.log(rg_summary[:, 0]), 1)\n", "rg_prefactor = np.exp(rg_prefactor)\n", "\n", "fig = plt.figure(figsize=(10, 6))\n", "x = np.linspace(min(N_MONOMERS) - 0.5, max(N_MONOMERS) + 0.5, 20)\n", "plt.plot(x, rg_prefactor * x**rg_exponent, '-',\n", " label=rf'$R_g^{{\\mathrm{{fit}}}} = {rg_prefactor:.2f} N^{{{rg_exponent:.2f}}}$')\n", - "plt.errorbar(N_MONOMERS, rg_summary[:,0],\n", - " yerr=rg_summary[:,1],\n", + "plt.errorbar(N_MONOMERS, rg_summary[:, 0],\n", + " yerr=rg_summary[:, 1],\n", " ls='', marker='o', capsize=5, capthick=1,\n", " label=r'$R_g^{\\mathrm{simulation}}$')\n", "plt.xlabel('Number of monomers $N$')\n", @@ -570,15 +575,15 @@ "outputs": [], "source": [ "rh_summary = standard_error_mean_autocorrelation(rh_results, r'\\operatorname{acf}(R_h)')\n", - "rh_exponent, rh_prefactor = np.polyfit(np.log(N_MONOMERS), np.log(rh_summary[:,0]), 1)\n", + "rh_exponent, rh_prefactor = np.polyfit(np.log(N_MONOMERS), np.log(rh_summary[:, 0]), 1)\n", "rh_prefactor = np.exp(rh_prefactor)\n", "\n", "fig = plt.figure(figsize=(10, 6))\n", "x = np.linspace(min(N_MONOMERS) - 0.5, max(N_MONOMERS) + 0.5, 20)\n", "plt.plot(x, rh_prefactor * x**rh_exponent, '-',\n", " label=rf'$R_h^{{\\mathrm{{fit}}}} = {rh_prefactor:.2f} N^{{{rh_exponent:.2f}}}$')\n", - "plt.errorbar(N_MONOMERS, rh_summary[:,0],\n", - " yerr=rh_summary[:,1],\n", + "plt.errorbar(N_MONOMERS, rh_summary[:, 0],\n", + " yerr=rh_summary[:, 1],\n", " ls='', marker='o', capsize=5, capthick=1,\n", " label=r'$R_h^{\\mathrm{simulation}}$')\n", "plt.xlabel('Number of monomers $N$')\n", @@ -709,10 +714,11 @@ "def exponential(x, a, b):\n", " return a * np.exp(-b * x)\n", "\n", + "\n", "fig = plt.figure(figsize=(10, 8))\n", "for N, tau, acf in zip(N_MONOMERS, com_vel_tau_results, com_vel_acf_results):\n", " popt, _ = scipy.optimize.curve_fit(exponential, tau[:20], acf[:20])\n", - " x = np.linspace(tau[0], tau[20-1], 100)\n", + " x = np.linspace(tau[0], tau[20 - 1], 100)\n", " p = plt.plot(x, exponential(x, *popt), '-')\n", " plt.plot(tau[:20], acf[:20], 'o',\n", " color=p[0].get_color(), label=rf'$R(\\tau)$ for N = {N}')\n", diff --git a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part4.ipynb b/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part4.ipynb index 6ec60707b67..8fe9c5be63e 100644 --- a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part4.ipynb +++ b/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part4.ipynb @@ -73,7 +73,7 @@ "BOX_L = 16.0\n", "TIME_STEP = 0.01\n", "\n", - "system = espressomd.System(box_l=[BOX_L]*3)\n", + "system = espressomd.System(box_l=[BOX_L] * 3)\n", "system.time_step = TIME_STEP\n", "system.cell_system.skin = 0.4" ] @@ -218,9 +218,11 @@ " fluid_velocities[x] = np.average(v)\n", " fluid_positions[x] = (x + 0.5) * AGRID\n", "\n", + "\n", "def poiseuille_flow(x, force_density, dynamic_viscosity, height):\n", " return force_density / (2 * dynamic_viscosity) * (height**2 / 4 - x**2)\n", "\n", + "\n", "# Note that the LB viscosity is not the dynamic viscosity but the\n", "# kinematic viscosity (mu=LB_viscosity * density)\n", "x_values = np.linspace(0.0, BOX_L, lbf.shape[0])\n", diff --git a/doc/tutorials/05-raspberry_electrophoresis/05-raspberry_electrophoresis.ipynb b/doc/tutorials/05-raspberry_electrophoresis/05-raspberry_electrophoresis.ipynb index a4035b00950..848d3676b34 100644 --- a/doc/tutorials/05-raspberry_electrophoresis/05-raspberry_electrophoresis.ipynb +++ b/doc/tutorials/05-raspberry_electrophoresis/05-raspberry_electrophoresis.ipynb @@ -198,7 +198,7 @@ "system.thermostat.set_langevin(kT=0.00001, gamma=40., seed=42)\n", "\n", "print(\"# Creating raspberry\")\n", - "center = system.box_l / 2 \n", + "center = system.box_l / 2\n", "colPos = center\n", "\n", "# Charge of the colloid\n", @@ -206,7 +206,7 @@ "# Number of particles making up the raspberry (surface particles + the central particle).\n", "n_col_part = int(4 * np.pi * np.power(radius_col, 2) + 1)\n", "\n", - "# Place the central particle \n", + "# Place the central particle\n", "system.part.add(id=0, pos=colPos, type=0, q=q_col, fix=(True, True, True),\n", " rotation=(1, 1, 1)) # Create central particle\n", "\n", @@ -482,7 +482,7 @@ "metadata": {}, "outputs": [], "source": [ - "E = 0.1 # an electric field of 0.1 is the upper limit of the linear response regime for this model\n", + "E = 0.1 # an electric field of 0.1 is the upper limit of the linear response regime for this model\n", "Efield = np.array([E, 0, 0])\n", "for p in system.part:\n", " p.ext_force = p.q * Efield" @@ -610,7 +610,7 @@ "%matplotlib notebook\n", "\n", "trajectory_file = 'posVsTime.dat'\n", - "trajectory = np.loadtxt(trajectory_file)[:,1:4]\n", + "trajectory = np.loadtxt(trajectory_file)[:, 1:4]\n", "# optional: trajectory smoothing with a running average\n", "N = 6\n", "trajectory = np.array(\n", @@ -621,16 +621,16 @@ "max_range = 1.01 * np.max(np.abs(trajectory_range))\n", "bbox = np.array([mid_range - max_range / 2, mid_range + max_range / 2])\n", "# 3D plot\n", - "fig = plt.figure(figsize=(9,6))\n", + "fig = plt.figure(figsize=(9, 6))\n", "ax = fig.add_subplot(111, projection='3d')\n", "ax.set_xlabel('X axis')\n", "ax.set_ylabel('Y axis')\n", "ax.set_zlabel('Z axis')\n", - "ax.set_xlim(*bbox[:,0])\n", - "ax.set_ylim(*bbox[:,1])\n", - "ax.set_zlim(*bbox[:,2])\n", - "ax.text(*trajectory[:,0], '\\u2190 start', 'y')\n", - "ax.scatter(*trajectory[:,0])\n", + "ax.set_xlim(*bbox[:, 0])\n", + "ax.set_ylim(*bbox[:, 1])\n", + "ax.set_zlim(*bbox[:, 2])\n", + "ax.text(*trajectory[:, 0], '\\u2190 start', 'y')\n", + "ax.scatter(*trajectory[:, 0])\n", "ax.plot(*trajectory)\n", "plt.tight_layout()\n", "plt.rcParams.update({'font.size': 14})" diff --git a/doc/tutorials/07-electrokinetics/07-electrokinetics.ipynb b/doc/tutorials/07-electrokinetics/07-electrokinetics.ipynb index c91baf6039c..88e2df52f20 100644 --- a/doc/tutorials/07-electrokinetics/07-electrokinetics.ipynb +++ b/doc/tutorials/07-electrokinetics/07-electrokinetics.ipynb @@ -384,7 +384,7 @@ "from espressomd import System, electrokinetics, shapes, ekboundaries\n", "\n", "# Set the slit pore geometry where the width is the non-periodic part of the geometry\n", - "# the padding is used to ensure that there is no field outside the slit since the \n", + "# the padding is used to ensure that there is no field outside the slit since the\n", "# electrostatics is used with a 3D periodic FFT solver.\n", "\n", "box_y = 6\n", @@ -394,7 +394,7 @@ "padding = 1\n", "box_x = width + 2 * padding\n", "\n", - "system = System(box_l = [box_x, box_y, box_z])" + "system = System(box_l=[box_x, box_y, box_z])" ] }, { @@ -520,7 +520,7 @@ "source": [ "# Set up the walls confining the fluid\n", "ek_wall_left = ekboundaries.EKBoundary(charge_density=sigma / agrid,\n", - " shape=shapes.Wall(normal=[1, 0, 0], dist=padding)) \n", + " shape=shapes.Wall(normal=[1, 0, 0], dist=padding))\n", "ek_wall_right = ekboundaries.EKBoundary(charge_density=sigma / agrid,\n", " shape=shapes.Wall(normal=[-1, 0, 0], dist=-(padding + width)))\n", "\n", @@ -551,7 +551,7 @@ "# Integrate the system\n", "for i in range(100):\n", " system.integrator.run(integration_length)\n", - " print(\"integration step: %03i\"%i, end=\"\\r\")\n", + " print(\"integration step: %03i\" % i, end=\"\\r\")\n", "\n", "print(\"Integration finished.\")\n", "\n", @@ -562,24 +562,24 @@ "pressure_xy_list = []\n", "\n", "for i in range(int(box_x / agrid)):\n", - " if (i * agrid >= padding) and (i*agrid < box_x - padding):\n", + " if (i * agrid >= padding) and (i * agrid < box_x - padding):\n", " position = i * agrid - padding - width / 2.0 + agrid / 2.0\n", " position_list.append(position)\n", "\n", " # density\n", " density_list.append(counterions[i,\n", - " box_y/(2 * agrid),\n", - " box_z/(2 * agrid)].density)\n", + " box_y / (2 * agrid),\n", + " box_z / (2 * agrid)].density)\n", "\n", " # velocity\n", - " velocity_list.append(ek[i ,\n", - " box_y/(2 * agrid),\n", - " box_z/(2 * agrid)].velocity[1])\n", + " velocity_list.append(ek[i,\n", + " box_y / (2 * agrid),\n", + " box_z / (2 * agrid)].velocity[1])\n", "\n", " # xz component pressure tensor\n", " pressure_xy_list.append(ek[i,\n", - " box_y/(2 * agrid),\n", - " box_z/(2 * agrid)].pressure[0, 1])\n", + " box_y / (2 * agrid),\n", + " box_z / (2 * agrid)].pressure[0, 1])\n", "\n", "np.savetxt(\"eof_electrokinetics.dat\",\n", " np.column_stack((position_list,\n", diff --git a/doc/tutorials/11-ferrofluid/11-ferrofluid_part1.ipynb b/doc/tutorials/11-ferrofluid/11-ferrofluid_part1.ipynb index 423d9ff1fac..5c716a52c33 100644 --- a/doc/tutorials/11-ferrofluid/11-ferrofluid_part1.ipynb +++ b/doc/tutorials/11-ferrofluid/11-ferrofluid_part1.ipynb @@ -262,12 +262,12 @@ "# Lennard-Jones parameters\n", "LJ_SIGMA = 1\n", "LJ_EPSILON = 1\n", - "LJ_CUT = 2**(1./6.) * LJ_SIGMA\n", + "LJ_CUT = 2**(1. / 6.) * LJ_SIGMA\n", "\n", "# Particles\n", "N_PART = 1200\n", "\n", - "# Area fraction of the mono-layer \n", + "# Area fraction of the mono-layer\n", "PHI = 0.1\n", "\n", "# Dipolar interaction parameter lambda = mu_0 m^2 /(4 pi sigma^3 KT)\n", @@ -322,7 +322,7 @@ }, "source": [ "```python\n", - "BOX_SIZE = (N_PART * np.pi * (LJ_SIGMA/2.)**2 / PHI)**0.5\n", + "BOX_SIZE = (N_PART * np.pi * (LJ_SIGMA / 2.)**2 / PHI)**0.5\n", "```" ] }, @@ -339,7 +339,7 @@ "print(\"Box size\", BOX_SIZE)\n", "# Note that the dipolar P3M and dipolar layer correction need a cubic\n", "# simulation box for technical reasons.\n", - "system = espressomd.System(box_l=(BOX_SIZE, BOX_SIZE, BOX_SIZE)) \n", + "system = espressomd.System(box_l=(BOX_SIZE, BOX_SIZE, BOX_SIZE))\n", "system.time_step = TIME_STEP" ] }, @@ -357,7 +357,7 @@ "outputs": [], "source": [ "# Lennard-Jones interaction\n", - "system.non_bonded_inter[0,0].lennard_jones.set_params(epsilon=LJ_EPSILON, sigma=LJ_SIGMA, cutoff=LJ_CUT, shift=\"auto\")" + "system.non_bonded_inter[0, 0].lennard_jones.set_params(epsilon=LJ_EPSILON, sigma=LJ_SIGMA, cutoff=LJ_CUT, shift=\"auto\")" ] }, { @@ -392,14 +392,14 @@ "source": [ "```python\n", "# Random dipole moments\n", - "np.random.seed(seed = 1)\n", + "np.random.seed(seed=1)\n", "dip_phi = 2. * np.pi * np.random.random((N_PART, 1))\n", "dip_cos_theta = 2 * np.random.random((N_PART, 1)) - 1\n", "dip_sin_theta = np.sin(np.arccos(dip_cos_theta))\n", "dip = np.hstack((\n", - " dip_sin_theta * np.sin(dip_phi),\n", - " dip_sin_theta * np.cos(dip_phi),\n", - " dip_cos_theta))\n", + " dip_sin_theta * np.sin(dip_phi),\n", + " dip_sin_theta * np.cos(dip_phi),\n", + " dip_cos_theta))\n", "```" ] }, @@ -431,7 +431,7 @@ "outputs": [], "source": [ "# Add particles\n", - "system.part.add(pos=pos, rotation=N_PART*[(1, 1, 1)], dip=dip, fix=N_PART*[(0, 0, 1)])" + "system.part.add(pos=pos, rotation=N_PART * [(1, 1, 1)], dip=dip, fix=N_PART * [(0, 0, 1)])" ] }, { @@ -500,7 +500,8 @@ " system.integrator.run(10)\n", " energy_new = system.analysis.energy()['total']\n", " # Prevent division by zero errors:\n", - " if energy < sys.float_info.epsilon: break\n", + " if energy < sys.float_info.epsilon:\n", + " break\n", " relative_energy_change = (energy - energy_new) / energy\n", " print(f\"Minimization, relative change in energy: {relative_energy_change}\")\n", " energy = energy_new\n", @@ -552,8 +553,8 @@ "outputs": [], "source": [ "# Setup dipolar P3M and dipolar layer correction\n", - "dp3m = DipolarP3M(accuracy=5E-4, prefactor=DIP_LAMBDA*LJ_SIGMA**3*KT)\n", - "dlc = DLC(maxPWerror=1E-4, gap_size=BOX_SIZE-LJ_SIGMA)\n", + "dp3m = DipolarP3M(accuracy=5E-4, prefactor=DIP_LAMBDA * LJ_SIGMA**3 * KT)\n", + "dlc = DLC(maxPWerror=1E-4, gap_size=BOX_SIZE - LJ_SIGMA)\n", "system.actors.add(dp3m)\n", "system.actors.add(dlc)\n", "\n", @@ -584,8 +585,10 @@ "EQUIL_ROUNDS = 20\n", "EQUIL_STEPS = 1000\n", "for i in range(EQUIL_ROUNDS):\n", - " system.integrator.run(EQUIL_STEPS)\n", - " print(f\"progress: {(i + 1) * 100. / EQUIL_ROUNDS}%, dipolar energy: {system.analysis.energy()['dipolar']}\", end=\"\\r\")\n", + " system.integrator.run(EQUIL_STEPS)\n", + " print(\n", + " f\"progress: {(i + 1) * 100. / EQUIL_ROUNDS}%, dipolar energy: {system.analysis.energy()['dipolar']}\",\n", + " end=\"\\r\")\n", "print(\"\\nEquilibration done\")" ] }, @@ -649,6 +652,7 @@ " Your browser does not support the video tag.\n", "\"\"\"\n", "\n", + "\n", "def anim_to_html(anim):\n", " if not hasattr(anim, '_encoded_video'):\n", " with NamedTemporaryFile(suffix='.mp4') as f:\n", @@ -659,8 +663,10 @@ " plt.close(anim._fig)\n", " return VIDEO_TAG.format(anim._encoded_video)\n", "\n", + "\n", "animation.Animation._repr_html_ = anim_to_html\n", "\n", + "\n", "def init():\n", " # Set x and y range\n", " ax.set_ylim(0, BOX_SIZE)\n", @@ -709,7 +715,7 @@ " system.integrator.run(100)\n", "\n", " # Save current system state as a plot\n", - " x_data, y_data = system.part[:].pos_folded[:,0], system.part[:].pos_folded[:,1]\n", + " x_data, y_data = system.part[:].pos_folded[:, 0], system.part[:].pos_folded[:, 1]\n", " ax.figure.canvas.draw()\n", " part.set_data(x_data, y_data)\n", " print(\"progress: {:3.0f}%\".format((i + 1) * 100. / LOOPS), end=\"\\r\")\n", @@ -778,7 +784,7 @@ "source": [ "```python\n", "# Setup cluster analysis\n", - "cluster_structure = ClusterStructure(pair_criterion=DistanceCriterion(cut_off=1.3*LJ_SIGMA))\n", + "cluster_structure = ClusterStructure(pair_criterion=DistanceCriterion(cut_off=1.3 * LJ_SIGMA))\n", "```" ] }, @@ -870,7 +876,7 @@ " for c in cluster_structure.clusters:\n", " cluster_sizes.append(c[1].size())\n", " system.integrator.run(100)\n", - " print(\"progress: {:3.0f}%\".format((float(i)+1)/LOOPS * 100), end=\"\\r\")\n", + " print(\"progress: {:3.0f}%\".format((float(i) + 1) / LOOPS * 100), end=\"\\r\")\n", "```" ] }, @@ -895,12 +901,12 @@ "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", - "plt.figure(figsize=(10,10))\n", + "plt.figure(figsize=(10, 10))\n", "plt.xlim(0, BOX_SIZE)\n", "plt.ylim(0, BOX_SIZE)\n", "plt.xlabel('x-position', fontsize=20)\n", "plt.ylabel('y-position', fontsize=20)\n", - "plt.plot(system.part[:].pos_folded[:,0], system.part[:].pos_folded[:,1], 'o')\n", + "plt.plot(system.part[:].pos_folded[:, 0], system.part[:].pos_folded[:, 1], 'o')\n", "plt.show()" ] }, @@ -950,7 +956,7 @@ }, "source": [ "```python\n", - "size_dist=np.histogram(cluster_sizes, range=(2,21), bins=19)\n", + "size_dist = np.histogram(cluster_sizes, range=(2, 21), bins=19)\n", "```" ] }, @@ -974,10 +980,10 @@ "metadata": {}, "outputs": [], "source": [ - "plt.figure(figsize=(10,10))\n", + "plt.figure(figsize=(10, 10))\n", "plt.grid()\n", - "plt.xticks(range(0,20))\n", - "plt.plot(size_dist[1][:-2], size_dist[0][:-1]/float(LOOPS))\n", + "plt.xticks(range(0, 20))\n", + "plt.plot(size_dist[1][:-2], size_dist[0][:-1] / float(LOOPS))\n", "plt.xlabel('size of clusters', fontsize=20)\n", "plt.ylabel('distribution', fontsize=20)\n", "plt.show()" diff --git a/doc/tutorials/11-ferrofluid/11-ferrofluid_part2.ipynb b/doc/tutorials/11-ferrofluid/11-ferrofluid_part2.ipynb index 7348f1d312a..e44ee455b45 100644 --- a/doc/tutorials/11-ferrofluid/11-ferrofluid_part2.ipynb +++ b/doc/tutorials/11-ferrofluid/11-ferrofluid_part2.ipynb @@ -86,7 +86,7 @@ "# Particles\n", "N_PART = 700\n", "\n", - "# Area fraction of the mono-layer \n", + "# Area fraction of the mono-layer\n", "PHI = 0.06\n", "\n", "# Dipolar interaction parameter lambda = MU_0 m^2 /(4 pi sigma^3 kT)\n", @@ -132,27 +132,27 @@ "print(\"Box size\", box_size)\n", "# Note that the dipolar P3M and dipolar layer correction need a cubic\n", "# simulation box for technical reasons.\n", - "system = espressomd.System(box_l=(box_size, box_size, box_size)) \n", + "system = espressomd.System(box_l=(box_size, box_size, box_size))\n", "system.time_step = TIME_STEP\n", "\n", "# Lennard-Jones interaction\n", "system.non_bonded_inter[0, 0].lennard_jones.set_params(epsilon=LJ_EPSILON, sigma=LJ_SIGMA, cutoff=LJ_CUT, shift=\"auto\")\n", "\n", "# Random dipole moments\n", - "np.random.seed(seed = 1)\n", - "dip_phi = 2. * np.pi * np.random.random((N_PART, 1)) \n", + "np.random.seed(seed=1)\n", + "dip_phi = 2. * np.pi * np.random.random((N_PART, 1))\n", "dip_cos_theta = 2 * np.random.random((N_PART, 1)) - 1\n", "dip_sin_theta = np.sin(np.arccos(dip_cos_theta))\n", "dip = np.hstack((\n", - " dip_sin_theta * np.sin(dip_phi),\n", - " dip_sin_theta * np.cos(dip_phi),\n", - " dip_cos_theta))\n", + " dip_sin_theta * np.sin(dip_phi),\n", + " dip_sin_theta * np.cos(dip_phi),\n", + " dip_cos_theta))\n", "\n", "# Random positions in the monolayer\n", "pos = box_size * np.hstack((np.random.random((N_PART, 2)), np.zeros((N_PART, 1))))\n", "\n", "# Add particles\n", - "system.part.add(pos=pos, rotation=N_PART*[(1, 1, 1)], dip=dip, fix=N_PART*[(0, 0, 1)])\n", + "system.part.add(pos=pos, rotation=N_PART * [(1, 1, 1)], dip=dip, fix=N_PART * [(0, 0, 1)])\n", "\n", "# Remove overlap between particles by means of the steepest descent method\n", "system.integrator.set_steepest_descent(\n", @@ -169,8 +169,8 @@ "system.cell_system.tune_skin(min_skin=0.4, max_skin=2., tol=0.2, int_steps=100)\n", "\n", "# Setup dipolar P3M and dipolar layer correction (DLC)\n", - "dp3m = DipolarP3M(accuracy=5E-4, prefactor=DIP_LAMBDA*LJ_SIGMA**3*KT)\n", - "dlc = DLC(maxPWerror=1E-4, gap_size=box_size-LJ_SIGMA)\n", + "dp3m = DipolarP3M(accuracy=5E-4, prefactor=DIP_LAMBDA * LJ_SIGMA**3 * KT)\n", + "dlc = DLC(maxPWerror=1E-4, gap_size=box_size - LJ_SIGMA)\n", "system.actors.add(dp3m)\n", "system.actors.add(dlc)\n", "\n", @@ -289,7 +289,7 @@ "plt.ylim(0, box_size)\n", "plt.xlabel('x-position', fontsize=20)\n", "plt.ylabel('y-position', fontsize=20)\n", - "plt.plot(system.part[:].pos_folded[:,0], system.part[:].pos_folded[:,1], 'o')\n", + "plt.plot(system.part[:].pos_folded[:, 0], system.part[:].pos_folded[:, 1], 'o')\n", "plt.show()" ] }, @@ -323,6 +323,7 @@ " Your browser does not support the video tag.\n", "\"\"\"\n", "\n", + "\n", "def anim_to_html(anim):\n", " if not hasattr(anim, '_encoded_video'):\n", " with NamedTemporaryFile(suffix='.mp4') as f:\n", @@ -333,8 +334,10 @@ " plt.close(anim._fig)\n", " return VIDEO_TAG.format(anim._encoded_video)\n", "\n", + "\n", "animation.Animation._repr_html_ = anim_to_html\n", "\n", + "\n", "def init():\n", " # Set x and y range\n", " ax.set_ylim(0, box_size)\n", @@ -343,11 +346,12 @@ " part.set_data(xdata, ydata)\n", " return part,\n", "\n", + "\n", "def run(i):\n", " system.integrator.run(50)\n", "\n", " # Save current system state as a plot\n", - " xdata, ydata = system.part[:].pos_folded[:,0], system.part[:].pos_folded[:,1]\n", + " xdata, ydata = system.part[:].pos_folded[:, 0], system.part[:].pos_folded[:, 1]\n", " ax.figure.canvas.draw()\n", " part.set_data(xdata, ydata)\n", " print(\"progress: {:3.0f}%\".format(i + 1), end=\"\\r\")\n", @@ -369,8 +373,8 @@ }, "outputs": [], "source": [ - "fig, ax = plt.subplots(figsize=(10,10))\n", - "part, = ax.plot([],[], 'o')\n", + "fig, ax = plt.subplots(figsize=(10, 10))\n", + "part, = ax.plot([], [], 'o')\n", "\n", "animation.FuncAnimation(fig, run, frames=100, blit=True, interval=0, repeat=False, init_func=init)" ] @@ -498,19 +502,19 @@ "system.thermostat.turn_off()\n", "\n", "# Random dipole moments\n", - "dip_phi = 2. * np.pi * np.random.random((N_PART, 1)) \n", + "dip_phi = 2. * np.pi * np.random.random((N_PART, 1))\n", "dip_cos_theta = 2 * np.random.random((N_PART, 1)) - 1\n", "dip_sin_theta = np.sin(np.arccos(dip_cos_theta))\n", "dip = np.hstack((\n", - " dip_sin_theta * np.sin(dip_phi),\n", - " dip_sin_theta * np.cos(dip_phi),\n", - " dip_cos_theta))\n", + " dip_sin_theta * np.sin(dip_phi),\n", + " dip_sin_theta * np.cos(dip_phi),\n", + " dip_cos_theta))\n", "\n", "# Random positions in the monolayer\n", "pos = box_size * np.hstack((np.random.random((N_PART, 2)), np.zeros((N_PART, 1))))\n", "\n", "# Add particles\n", - "system.part.add(pos=pos, rotation=N_PART*[(1, 1, 1)], dip=dip, fix=N_PART*[(0, 0, 1)])\n", + "system.part.add(pos=pos, rotation=N_PART * [(1, 1, 1)], dip=dip, fix=N_PART * [(0, 0, 1)])\n", "\n", "# Remove overlap between particles by means of the steepest descent method\n", "system.integrator.set_steepest_descent(f_max=0, gamma=0.1, max_displacement=0.05)\n", @@ -529,8 +533,8 @@ "system.actors.remove(dp3m)\n", "system.actors.remove(dlc)\n", "\n", - "dp3m = DipolarP3M(accuracy=5E-4, prefactor=DIP_LAMBDA*LJ_SIGMA**3*KT)\n", - "dlc = DLC(maxPWerror=1E-4, gap_size=box_size-LJ_SIGMA)\n", + "dp3m = DipolarP3M(accuracy=5E-4, prefactor=DIP_LAMBDA * LJ_SIGMA**3 * KT)\n", + "dlc = DLC(maxPWerror=1E-4, gap_size=box_size - LJ_SIGMA)\n", "\n", "system.actors.add(dp3m)\n", "system.actors.add(dlc)\n", @@ -692,14 +696,16 @@ " H_constraint = espressomd.constraints.HomogeneousMagneticField(H=H_field)\n", " system.constraints.add(H_constraint)\n", " print(\"done\\n\")\n", - " \n", + "\n", " # Equilibration\n", " print(\"Equilibration...\")\n", " for i in range(equil_rounds):\n", " system.integrator.run(equil_steps)\n", - " print(f\"progress: {(i + 1) * 100. / equil_rounds}%, dipolar energy: {system.analysis.energy()['dipolar']}\", end=\"\\r\")\n", + " print(\n", + " f\"progress: {(i + 1) * 100. / equil_rounds}%, dipolar energy: {system.analysis.energy()['dipolar']}\",\n", + " end=\"\\r\")\n", " print(\"\\nEquilibration done\\n\")\n", - " \n", + "\n", " # Sampling\n", " print(\"Sampling...\")\n", " magn_temp = 0\n", @@ -708,13 +714,13 @@ " magn_temp += dipm_tot.calculate()[2]\n", " print(f\"progress: {(i + 1) * 100. / loops}%\", end=\"\\r\")\n", " print(\"\\n\")\n", - " \n", + "\n", " # save average magnetization\n", " magnetization_perp[ndx] = magn_temp / loops\n", " print(\"Sampling for alpha = {} done\\n\".format(alpha))\n", " print(\"magnetizations = {}\".format(magnetization_perp))\n", " print(f\"total progress: {(alphas.index(alpha) + 1) * 100. / len(alphas)}%\\n\")\n", - " \n", + "\n", " # remove constraint\n", " system.constraints.clear()\n", "print(\"Magnetization curve sampling done\")\n", @@ -776,14 +782,16 @@ " H_constraint = espressomd.constraints.HomogeneousMagneticField(H=H_field)\n", " system.constraints.add(H_constraint)\n", " print(\"done\\n\")\n", - " \n", + "\n", " # Equilibration\n", " print(\"Equilibration...\")\n", " for i in range(equil_rounds):\n", " system.integrator.run(equil_steps)\n", - " print(f\"progress: {(i + 1) * 100. / equil_rounds}%, dipolar energy: {system.analysis.energy()['dipolar']}\", end=\"\\r\")\n", + " print(\n", + " f\"progress: {(i + 1) * 100. / equil_rounds}%, dipolar energy: {system.analysis.energy()['dipolar']}\",\n", + " end=\"\\r\")\n", " print(\"\\nEquilibration done\\n\")\n", - " \n", + "\n", " # Sampling\n", " print(\"Sampling...\")\n", " magn_temp = 0\n", @@ -792,13 +800,13 @@ " magn_temp += dipm_tot.calculate()[0]\n", " print(f\"progress: {(i + 1) * 100. / loops}%\", end=\"\\r\")\n", " print(\"\\n\")\n", - " \n", + "\n", " # save average magnetization\n", " magnetization_para[ndx] = magn_temp / loops\n", " print(\"Sampling for alpha = {} done\\n\".format(alpha))\n", " print(\"magnetizations = {}\".format(magnetization_para))\n", " print(f\"total progress: {(alphas.index(alpha) + 1) * 100. / len(alphas)}%\\n\")\n", - " \n", + "\n", " # remove constraint\n", " system.constraints.clear()\n", "print(\"Magnetization curve sampling done\")\n", @@ -864,7 +872,7 @@ "metadata": {}, "outputs": [], "source": [ - "M_sat = PHI * 4./np.pi * 1./(LJ_SIGMA**2.) * dipm" + "M_sat = PHI * 4. / np.pi * 1. / (LJ_SIGMA**2.) * dipm" ] }, { @@ -881,7 +889,7 @@ "outputs": [], "source": [ "def dL_dB(alpha):\n", - " return (1./(alpha**2.) - 1./((np.sinh(alpha))**2.)) * dipm / (KT)" + " return (1. / (alpha**2.) - 1. / ((np.sinh(alpha))**2.)) * dipm / (KT)" ] }, { @@ -899,7 +907,7 @@ "source": [ "# approximated magnetization curve for a field parallel to the monolayer plane\n", "def magnetization_approx_para(alpha):\n", - " return L(alpha) * ( 1. + MU_0/8. * M_sat * dL_dB(alpha) )" + " return L(alpha) * (1. + MU_0 / 8. * M_sat * dL_dB(alpha))" ] }, { @@ -910,7 +918,7 @@ "source": [ "# approximated magnetization curve for a field perpendicular to the monolayer plane\n", "def magnetization_approx_perp(alpha):\n", - " return L(alpha) * ( 1. - MU_0/4. * M_sat * dL_dB(alpha) )" + " return L(alpha) * (1. - MU_0 / 4. * M_sat * dL_dB(alpha))" ] }, { @@ -928,7 +936,7 @@ "source": [ "# Langevin function\n", "def L(x):\n", - " return (np.cosh(x)/np.sinh(x)) - 1./x" + " return (np.cosh(x) / np.sinh(x)) - 1. / x" ] }, { @@ -974,16 +982,16 @@ "source": [ "```python\n", "# list of the values for alpha (x-axis)\n", - "x = np.arange(0.01,9, 0.1, dtype=float)\n", + "x = np.arange(0.01, 9, 0.1, dtype=float)\n", "\n", - "plt.figure(figsize=(10,10))\n", + "plt.figure(figsize=(10, 10))\n", "plt.xlabel(r'$\\alpha$', fontsize=20)\n", "plt.ylabel(r'$M^*$', fontsize=20)\n", "plt.plot(x, L(x), label='Langevin function')\n", "plt.plot(x, magnetization_approx_perp(x), label='q2D approximation $\\perp$')\n", "plt.plot(x, magnetization_approx_para(x), label='q2D approximation $\\parallel$')\n", - "plt.plot(alphas, magnetization_perp/N_PART, 'o', label='simulation results $\\perp$')\n", - "plt.plot(alphas, magnetization_para/N_PART, 'o', label='simulation results $\\parallel$')\n", + "plt.plot(alphas, magnetization_perp / N_PART, 'o', label='simulation results $\\perp$')\n", + "plt.plot(alphas, magnetization_para / N_PART, 'o', label='simulation results $\\parallel$')\n", "plt.legend(fontsize=20)\n", "plt.show()\n", "```" diff --git a/doc/tutorials/11-ferrofluid/11-ferrofluid_part3.ipynb b/doc/tutorials/11-ferrofluid/11-ferrofluid_part3.ipynb index 279ad97e13d..cf39df29011 100644 --- a/doc/tutorials/11-ferrofluid/11-ferrofluid_part3.ipynb +++ b/doc/tutorials/11-ferrofluid/11-ferrofluid_part3.ipynb @@ -194,27 +194,27 @@ }, "outputs": [], "source": [ - "system = espressomd.System(box_l=(box_size, box_size, box_size)) \n", + "system = espressomd.System(box_l=(box_size, box_size, box_size))\n", "system.time_step = dt\n", "\n", "# Lennard-Jones interaction\n", - "system.non_bonded_inter[0, 0].lennard_jones.set_params(epsilon=lj_epsilon,sigma=lj_sigma,cutoff=lj_cut, shift=\"auto\")\n", + "system.non_bonded_inter[0, 0].lennard_jones.set_params(epsilon=lj_epsilon, sigma=lj_sigma, cutoff=lj_cut, shift=\"auto\")\n", "\n", "# Random dipole moments\n", - "np.random.seed(seed = 1)\n", + "np.random.seed(seed=1)\n", "dip_phi = 2 * np.pi * np.random.random((N, 1))\n", "dip_cos_theta = 2 * np.random.random((N, 1)) - 1\n", "dip_sin_theta = np.sin(np.arccos(dip_cos_theta))\n", "dip = np.hstack((\n", - " dip_sin_theta * np.sin(dip_phi),\n", - " dip_sin_theta * np.cos(dip_phi),\n", - " dip_cos_theta))\n", + " dip_sin_theta * np.sin(dip_phi),\n", + " dip_sin_theta * np.cos(dip_phi),\n", + " dip_cos_theta))\n", "\n", "# Random positions in system volume\n", "pos = box_size * np.random.random((N, 3))\n", "\n", "# Add particles\n", - "system.part.add(pos=pos, rotation=N*[(1, 1, 1)], dip=dip)\n", + "system.part.add(pos=pos, rotation=N * [(1, 1, 1)], dip=dip)\n", "\n", "# Remove overlap between particles by means of the steepest descent method\n", "system.integrator.set_steepest_descent(\n", @@ -232,7 +232,7 @@ "\n", "# Setup dipolar P3M\n", "accuracy = 5E-4\n", - "system.actors.add(DipolarP3M(accuracy=accuracy, prefactor=dip_lambda*lj_sigma**3*kT))\n" + "system.actors.add(DipolarP3M(accuracy=accuracy, prefactor=dip_lambda * lj_sigma**3 * kT))" ] }, { @@ -254,9 +254,9 @@ "equil_rounds = 10\n", "equil_steps = 1000\n", "for i in range(equil_rounds):\n", - " system.integrator.run(equil_steps)\n", - " print(\"progress: {:3.0f}%, dipolar energy: {:9.2f}\".format(\n", - " (i + 1) * 100. / equil_rounds, system.analysis.energy()[\"dipolar\"]), end=\"\\r\")\n", + " system.integrator.run(equil_steps)\n", + " print(\"progress: {:3.0f}%, dipolar energy: {:9.2f}\".format(\n", + " (i + 1) * 100. / equil_rounds, system.analysis.energy()[\"dipolar\"]), end=\"\\r\")\n", "print(\"\\nEquilibration done\")" ] }, @@ -514,7 +514,7 @@ "\n", "for ndx, alpha in enumerate(alphas):\n", " if alpha == 0:\n", - " continue\n", + " continue\n", " print(\"Sample for alpha = {}\".format(alpha))\n", " H_dipm = (alpha * kT)\n", " H_field = [H_dipm, 0, 0]\n", @@ -522,7 +522,7 @@ " H_constraint = espressomd.constraints.HomogeneousMagneticField(H=H_field)\n", " system.constraints.add(H_constraint)\n", " print(\"done\\n\")\n", - " \n", + "\n", " # Equilibration\n", " print(\"Equilibration...\")\n", " for i in range(equil_rounds):\n", @@ -530,7 +530,7 @@ " print(\"progress: {:3.0f}%, dipolar energy: {:9.2f}\".format(\n", " (i + 1) * 100. / equil_rounds, system.analysis.energy()[\"dipolar\"]), end=\"\\r\")\n", " print(\"\\nEquilibration done\\n\")\n", - " \n", + "\n", " # Sampling\n", " print(\"Sampling...\")\n", " magn_temp = np.full(loops_m, np.nan)\n", @@ -539,13 +539,13 @@ " magn_temp[i] = dipm_tot_calc.calculate()[0]\n", " print(\"progress: {:3.0f}%\".format((i + 1) * 100. / loops_m), end=\"\\r\")\n", " print(\"\\n\")\n", - " \n", + "\n", " # save average magnetization\n", " magnetizations[ndx] = np.mean(magn_temp)\n", " print(\"Sampling for alpha = {} done \\n\".format(alpha))\n", " print(\"magnetizations = {}\".format(magnetizations))\n", " print(\"total progress: {:5.1f}%\\n\".format(ndx * 100. / (len(alphas) - 1)))\n", - " \n", + "\n", " # remove constraint\n", " system.constraints.clear()\n", "print(\"Magnetization curve sampling done\")" @@ -578,7 +578,7 @@ "# second order mean-field-model from Ref. [2]\n", "def alpha_mean_field(alpha, dip_lambda, phi):\n", " chi = 8. * dip_lambda * phi\n", - " return alpha + chi * L(alpha) + chi**2. / 16. * L(alpha) * ( 1./ alpha**2. - 1. / np.sinh(alpha)**2.)" + " return alpha + chi * L(alpha) + chi**2. / 16. * L(alpha) * (1. / alpha**2. - 1. / np.sinh(alpha)**2.)" ] }, { @@ -620,10 +620,10 @@ "plt.xlabel(r'$\\alpha$', fontsize=20)\n", "plt.ylabel(r'$M^*$', fontsize=20)\n", "plt.plot(y, L(y), label='Langevin function')\n", - "plt.plot(y, L(alpha_mean_field(y, dip_lambda, phi)), \\\n", + "plt.plot(y, L(alpha_mean_field(y, dip_lambda, phi)),\n", " label='modified mean-field-theory')\n", "plt.plot(alphas, magnetizations / N, 'o', label='simulation results')\n", - "plt.plot(y, initial_susceptibility * y, \\\n", + "plt.plot(y, initial_susceptibility * y,\n", " label=r'linear approximation at $\\alpha = 0$')\n", "plt.legend(fontsize=20)\n", "plt.show()" diff --git a/doc/tutorials/12-constant_pH/12-constant_pH.ipynb b/doc/tutorials/12-constant_pH/12-constant_pH.ipynb index d5149bc0b00..5fce1d8475c 100644 --- a/doc/tutorials/12-constant_pH/12-constant_pH.ipynb +++ b/doc/tutorials/12-constant_pH/12-constant_pH.ipynb @@ -294,10 +294,10 @@ }, "outputs": [], "source": [ - "N_BLOCKS = 16 # number of block to be used in data analysis\n", - "DESIRED_BLOCK_SIZE = 10 # desired number of samples per block\n", + "N_BLOCKS = 16 # number of block to be used in data analysis\n", + "DESIRED_BLOCK_SIZE = 10 # desired number of samples per block\n", "\n", - "PROB_REACTION = 0.5 # probability of accepting the reaction move. This parameter changes the speed of convergence.\n", + "PROB_REACTION = 0.5 # probability of accepting the reaction move. This parameter changes the speed of convergence.\n", "\n", "# number of reaction samples per each pH value\n", "NUM_SAMPLES = int(N_BLOCKS * DESIRED_BLOCK_SIZE / PROB_REACTION)" @@ -320,19 +320,19 @@ "source": [ "# particle types of different species\n", "TYPES = {\n", - " \"HA\" : 0,\n", - " \"A\" : 1,\n", - " \"B\" : 2,\n", - " \"Na\" : 3,\n", - " \"Cl\" : 4,\n", + " \"HA\": 0,\n", + " \"A\": 1,\n", + " \"B\": 2,\n", + " \"Na\": 3,\n", + " \"Cl\": 4,\n", "}\n", "# particle charges of different species\n", "CHARGES = {\n", - " \"HA\" : (0 * ureg.e).to(\"sim_charge\").magnitude,\n", - " \"A\" : (-1 * ureg.e).to(\"sim_charge\").magnitude,\n", - " \"B\" : (+1 * ureg.e).to(\"sim_charge\").magnitude,\n", - " \"Na\" : (+1 * ureg.e).to(\"sim_charge\").magnitude,\n", - " \"Cl\" : (-1 * ureg.e).to(\"sim_charge\").magnitude,\n", + " \"HA\": (0 * ureg.e).to(\"sim_charge\").magnitude,\n", + " \"A\": (-1 * ureg.e).to(\"sim_charge\").magnitude,\n", + " \"B\": (+1 * ureg.e).to(\"sim_charge\").magnitude,\n", + " \"Na\": (+1 * ureg.e).to(\"sim_charge\").magnitude,\n", + " \"Cl\": (-1 * ureg.e).to(\"sim_charge\").magnitude,\n", "}" ] }, @@ -379,10 +379,10 @@ "hb = HarmonicBond(k=30, r_0=1.0)\n", "system.bonded_inter.add(hb)\n", "\n", - "# create the polymer positions \n", + "# create the polymer positions\n", "polymers = espressomd.polymer.linear_polymer_positions(n_polymers=1,\n", - " beads_per_chain=N_ACID,\n", - " bond_length=0.9, seed=23)\n", + " beads_per_chain=N_ACID,\n", + " bond_length=0.9, seed=23)\n", "\n", "# add the polymer particles composed of ionizable acid groups, initially in the ionized state\n", "for polymer in polymers:\n", @@ -393,7 +393,7 @@ " p.add_bond((hb, prev_particle))\n", " prev_particle = p\n", "\n", - "# add the corresponding number of H+ ions \n", + "# add the corresponding number of H+ ions\n", "system.part.add(pos=np.random.random((N_ACID, 3)) * BOX_L_UNITLESS,\n", " type=[TYPES[\"B\"]] * N_ACID,\n", " q=[CHARGES[\"B\"]] * N_ACID)\n", @@ -427,7 +427,7 @@ "if USE_WCA:\n", " for type_1, type_2 in ((x, y) for x in TYPES.values() for y in TYPES.values()):\n", " system.non_bonded_inter[type_1, type_2].wca.set_params(epsilon=1.0, sigma=1.0)\n", - " \n", + "\n", " # relax the overlaps with steepest descent\n", " system.integrator.set_steepest_descent(f_max=0, gamma=0.1, max_displacement=0.1)\n", " system.integrator.run(20)\n", @@ -439,8 +439,9 @@ "\n", "if USE_ELECTROSTATICS:\n", " p3m = espressomd.electrostatics.P3M(\n", - " prefactor=(BJERRUM_LENGTH * KT / (ureg.elementary_charge ** 2)).to(\"sim_length * sim_energy / sim_charge^2\").magnitude,\n", - " accuracy=1e-3) \n", + " prefactor=(BJERRUM_LENGTH * KT / (ureg.elementary_charge ** 2)\n", + " ).to(\"sim_length * sim_energy / sim_charge^2\").magnitude,\n", + " accuracy=1e-3)\n", " system.actors.add(p3m)\n", "else:\n", " # this speeds up the simulation of dilute systems with small particle numbers\n", @@ -484,8 +485,8 @@ "```python\n", "exclusion_radius = 1.0 if USE_WCA else 0.0\n", "RE = espressomd.reaction_ensemble.ConstantpHEnsemble(\n", - " temperature=KT.to(\"sim_energy\").magnitude, \n", - " exclusion_radius=exclusion_radius, \n", + " temperature=KT.to(\"sim_energy\").magnitude,\n", + " exclusion_radius=exclusion_radius,\n", " seed=77\n", ")\n", "```" @@ -529,14 +530,14 @@ "source": [ "```python\n", "RE.add_reaction(\n", - " gamma=K,\n", - " reactant_types=[TYPES[\"HA\"]],\n", - " reactant_coefficients=[1],\n", - " product_types=[TYPES[\"A\"], TYPES[\"B\"]],\n", - " product_coefficients=[1, 1],\n", - " default_charges={TYPES[\"HA\"]: CHARGES[\"HA\"],\n", - " TYPES[\"A\"]: CHARGES[\"A\"],\n", - " TYPES[\"B\"]: CHARGES[\"B\"]}\n", + " gamma=K,\n", + " reactant_types=[TYPES[\"HA\"]],\n", + " reactant_coefficients=[1],\n", + " product_types=[TYPES[\"A\"], TYPES[\"B\"]],\n", + " product_coefficients=[1, 1],\n", + " default_charges={TYPES[\"HA\"]: CHARGES[\"HA\"],\n", + " TYPES[\"A\"]: CHARGES[\"A\"],\n", + " TYPES[\"B\"]: CHARGES[\"B\"]}\n", ")\n", "```" ] @@ -673,9 +674,9 @@ "for ipH, pH in enumerate(pHs):\n", " print(f\"Run pH {pH:.2f} ...\")\n", "\n", - " RE.constant_pH = pH # set new pH value\n", + " RE.constant_pH = pH # set new pH value\n", " equilibrate_pH() # pre-equilibrate to the new pH value\n", - " perform_sampling(NUM_SAMPLES, num_As_at_each_pH[ipH, :]) # perform sampling/ run production simulation\n", + " perform_sampling(NUM_SAMPLES, num_As_at_each_pH[ipH, :]) # perform sampling/ run production simulation\n", "\n", " print(f\"measured number of A-: {np.mean(num_As_at_each_pH[ipH]):.2f}, (ideal: {N_ACID*ideal_alpha(pH, pK):.2f})\")" ] @@ -828,11 +829,11 @@ "source": [ "# plot the deviations from the ideal result\n", "plt.figure(figsize=(10, 6), dpi=80)\n", - "ylim = np.amax(abs(av_alpha-ideal_alpha(pHs, pK)))\n", - "plt.ylim((-1.5*ylim, 1.5*ylim))\n", - "plt.errorbar(pHs - pK, av_alpha-ideal_alpha(pHs, pK),\n", + "ylim = np.amax(abs(av_alpha - ideal_alpha(pHs, pK)))\n", + "plt.ylim((-1.5 * ylim, 1.5 * ylim))\n", + "plt.errorbar(pHs - pK, av_alpha - ideal_alpha(pHs, pK),\n", " err_alpha, marker='o', linestyle='none', label=r\"simulation\")\n", - "plt.plot(pHs - pK, 0.0*ideal_alpha(pHs, pK), label=r\"ideal\")\n", + "plt.plot(pHs - pK, 0.0 * ideal_alpha(pHs, pK), label=r\"ideal\")\n", "plt.xlabel('pH-p$K$', fontsize=16)\n", "plt.ylabel(r'$\\alpha - \\alpha_{ideal}$', fontsize=16)\n", "plt.legend(fontsize=16)\n", From 662202a6029e492dde04ff816a90f2babfd56439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Fri, 13 Nov 2020 21:01:19 +0100 Subject: [PATCH 10/14] python: Implement autocorrelation function --- doc/sphinx/zrefs.bib | 11 ++++++ src/python/espressomd/analyze.pyx | 56 +++++++++++++++++++++++++++++ testsuite/python/CMakeLists.txt | 1 + testsuite/python/analyze_acf.py | 59 +++++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+) create mode 100644 testsuite/python/analyze_acf.py diff --git a/doc/sphinx/zrefs.bib b/doc/sphinx/zrefs.bib index 66829782905..ceebe645031 100644 --- a/doc/sphinx/zrefs.bib +++ b/doc/sphinx/zrefs.bib @@ -197,6 +197,17 @@ @ARTICLE{dao03 pages = {2259-2280}, } +@article{debuyl18a, + author = {de Buyl, Pierre}, + title = {tidynamics: A tiny package to compute the dynamics of stochastic and molecular simulations}, + journal = {Journal of Open Source Software}, + volume = {3}, + number = {28}, + pages = {877}, + year = {2018}, + doi = {10.21105/joss.00877}, +} + @ARTICLE{degraaf16, author = {de Graaf, Joost and Menke, Henri and Mathijssen, Arnold J.T.M. and Fabritius, Marc and Holm, Christian and Shendruk, Tyler N.}, title = {Lattice-Boltzmann Hydrodynamics of Anisotropic Active Matter}, diff --git a/src/python/espressomd/analyze.pyx b/src/python/espressomd/analyze.pyx index 163e3fff588..47db202cacd 100644 --- a/src/python/espressomd/analyze.pyx +++ b/src/python/espressomd/analyze.pyx @@ -25,6 +25,7 @@ from .interactions cimport BONDED_IA_NONE from .interactions cimport bonded_ia_params import numpy as np cimport numpy as np +import scipy.signal from .globals import Globals from collections import OrderedDict @@ -36,6 +37,61 @@ from .utils cimport create_nparray_from_double_array from .particle_data cimport get_n_part +def autocorrelation(time_series): + """ + Calculate the unnormalized autocorrelation function :math:`R_{XX}` + of an observable :math:`X` measured at time :math:`t` with constant + time step for lag times :math:`\\tau` such that: + + :math:`\\displaystyle R_{XX}(\\tau) = \\frac{1}{N - \\tau} \\sum_{t=0}^{N - \\tau} X_{t} \\cdot X_{t + \\tau}` + + This is a scipy implementation of the algorithm described + in :cite:`debuyl18a` that uses FFT. This implementation: + + - doesn't subtract the mean of the time series before calculating the ACF, + - doesn't normalize the ACF by the variance of the time series, + - assumes the time series is aperiodic (i.e. uses zero-padding). + + Parameters + ---------- + time_series : (N,) or (N, M) array_like of :obj:`float` + Time series to correlate. For multi-dimensional data, M is the + number of columns. + + Returns + ------- + (N,) array_like of :obj:`float` + The time series autocorrelation function. + """ + def acf_1d(signal, n_with_padding, n): + acf = scipy.signal.correlate(signal, signal, mode="full", method="fft") + acf = acf[-n_with_padding:][:n] / (n - np.arange(n)) + return acf + + if not isinstance(time_series, np.ndarray): + time_series = np.array(time_series) + + n = time_series.shape[0] + if n == 0: + return np.array([], dtype=float) + + n_with_padding = 2**int(np.ceil(np.log2(n)) + 1) + signal_padded = np.zeros(n_with_padding) + + if time_series.ndim == 1: + signal_padded[:n] = time_series + return acf_1d(signal_padded, n_with_padding, n) + elif time_series.ndim == 2: + signal_acf = np.zeros(n) + for i in range(time_series.shape[1]): + signal_padded[:n] = time_series[:, i] + signal_acf += acf_1d(signal_padded, n_with_padding, n) + return signal_acf + else: + raise ValueError(f"Only 1-dimensional and 2-dimensional time series " + f"are supported, got shape {time_series.shape}") + + cdef _Observable_stat_to_dict(Observable_stat obs, cbool calc_sp): """Transform an Observable_stat struct to a python dict. diff --git a/testsuite/python/CMakeLists.txt b/testsuite/python/CMakeLists.txt index 3a793336334..3b1c0444bc9 100644 --- a/testsuite/python/CMakeLists.txt +++ b/testsuite/python/CMakeLists.txt @@ -160,6 +160,7 @@ python_test(FILE observable_cylindrical.py MAX_NUM_PROC 4) python_test(FILE observable_cylindricalLB.py MAX_NUM_PROC 1 LABELS gpu) python_test(FILE analyze_chains.py MAX_NUM_PROC 1) python_test(FILE analyze_distance.py MAX_NUM_PROC 1) +python_test(FILE analyze_acf.py MAX_NUM_PROC 1) python_test(FILE comfixed.py MAX_NUM_PROC 2) python_test(FILE rescale.py MAX_NUM_PROC 2) python_test(FILE accumulator.py MAX_NUM_PROC 4) diff --git a/testsuite/python/analyze_acf.py b/testsuite/python/analyze_acf.py new file mode 100644 index 00000000000..45bcae97d37 --- /dev/null +++ b/testsuite/python/analyze_acf.py @@ -0,0 +1,59 @@ +# +# Copyright (C) 2020 The ESPResSo project +# +# This file is part of ESPResSo. +# +# ESPResSo is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ESPResSo is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +import unittest as ut +import numpy as np +import espressomd.analyze + + +class AnalyzeAcf(ut.TestCase): + np.random.seed = 42 + + def test_acf(self): + # the ACF of white noise is a Dirac function + N = 2**14 + white_noise = np.random.uniform(-1, 1, N) + acf_ref = np.zeros(N) + acf_ref[0] = 1 + acf = espressomd.analyze.autocorrelation(white_noise) + acf_normalized = acf / np.var(white_noise) * (N - np.arange(N)) / N + np.testing.assert_allclose(acf_normalized, acf_ref, atol=0.05, rtol=0.) + # the ACF of an auto-regressive model AR(p) of order p is a sum of + # decaying exponentials, ACF(AR(1)) is a single exponential + phi = -0.9 + ar1 = np.copy(white_noise) + ar1[0] = 200 + for i in range(1, N): + ar1[i] += phi * ar1[i - 1] + acf_ref = phi**np.arange(N)[:50] + acf = espressomd.analyze.autocorrelation(ar1) + acf_normalized = acf[:50] / acf[0] + np.testing.assert_allclose(acf_normalized, acf_ref, atol=0.05, rtol=0.) + # the ACF of 2-dimensional data is the sum of 1-dimensional ACFs + data_2d = np.array([np.random.uniform(-1, 1, N), + np.random.uniform(-1, 1, N), + np.random.uniform(-1, 1, N)]).T + acf = espressomd.analyze.autocorrelation(data_2d) + acf_ref = (espressomd.analyze.autocorrelation(data_2d[:, 0]) + + espressomd.analyze.autocorrelation(data_2d[:, 1]) + + espressomd.analyze.autocorrelation(data_2d[:, 2])) + np.testing.assert_allclose(acf, acf_ref, atol=1e-14, rtol=0.) + + +if __name__ == "__main__": + ut.main() From 80ae3fc316b0c1cc5e3cdb79dabfc3d053251fe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Fri, 13 Nov 2020 21:03:39 +0100 Subject: [PATCH 11/14] tutorials: Re-use autocorrelation function --- .../01-lennard_jones/01-lennard_jones.ipynb | 7 +++--- .../04-lattice_boltzmann_part3.ipynb | 23 +++---------------- 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb b/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb index 0889e41cfe7..c16eef66c14 100644 --- a/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb +++ b/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb @@ -142,7 +142,7 @@ "import espressomd\n", "required_features = [\"LENNARD_JONES\"]\n", "espressomd.assert_features(required_features)\n", - "from espressomd import observables, accumulators" + "from espressomd import observables, accumulators, analyze" ] }, { @@ -693,7 +693,7 @@ " mean = x.mean()\n", " var = np.var(x)\n", " xp = x - mean\n", - " corr = np.correlate(xp, xp, 'full')[len(x) - 1:] / var / len(x)\n", + " corr = analyze.autocorrelation(xp) / var\n", " return corr\n", "\n", "\n", @@ -728,7 +728,7 @@ "source": [ "```python\n", "e_total_autocor = autocor(e_total)\n", - "corr_time = fit_correlation_time(e_total_autocor, times)\n", + "corr_time = fit_correlation_time(e_total_autocor[:100], times[:100])\n", "steps_per_uncorrelated_sample = int(np.ceil(3 * corr_time / system.time_step))\n", "```" ] @@ -768,6 +768,7 @@ "plt.plot(2 * [steps_per_uncorrelated_sample * system.time_step],\n", " [min(e_total_autocor), 1], label='sampling interval')\n", "plt.xlim(left=-2, right=50)\n", + "plt.ylim(top=1.2, bottom=-0.15)\n", "plt.legend()\n", "plt.xlabel('t')\n", "plt.ylabel('total energy autocorrelation')\n", diff --git a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb b/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb index 8f9ea782ba2..e1782956b6d 100644 --- a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb +++ b/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb @@ -198,8 +198,10 @@ "import sys\n", "\n", "import numpy as np\n", + "import scipy.optimize\n", "\n", "import espressomd\n", + "import espressomd.analyze\n", "import espressomd.accumulators\n", "import espressomd.observables\n", "import espressomd.polymer\n", @@ -356,25 +358,6 @@ "metadata": {}, "outputs": [], "source": [ - "import scipy.signal\n", - "import scipy.optimize\n", - "\n", - "\n", - "def autocorrelation(time_series):\n", - " '''\n", - " Normalized autocorrelation function with zero-padding. This is a\n", - " scipy implementation of the algorithm described in de Buyl 2018,\n", - " JOSS 3(28), pp. 877 (https://doi.org/10.21105/joss.00877).\n", - " '''\n", - " n = time_series.size\n", - " n_with_padding = 2**int(np.ceil(np.log2(n)) + 1)\n", - " signal = np.zeros(n_with_padding)\n", - " signal[:n] = time_series\n", - " acf = scipy.signal.correlate(signal, signal, mode='full', method='fft')[-n_with_padding:][:n]\n", - " acf_normalized = acf / (n - np.arange(n)) # rescale by bin sizes\n", - " return acf_normalized\n", - "\n", - "\n", "def standard_error_mean_autocorrelation(time_series, variable_label):\n", " '''\n", " Calculate the mean and the correlation-corrected standard error\n", @@ -387,7 +370,7 @@ " summary = []\n", " fig = plt.figure(figsize=(10, 6))\n", " for signal, N in zip(time_series, N_MONOMERS):\n", - " acf = autocorrelation(signal - np.mean(signal))\n", + " acf = espressomd.analyze.autocorrelation(signal - np.mean(signal))\n", " # the acf cannot be integrated beyond tau=N/2\n", " integral = np.array([acf[0] + 2 * np.sum(acf[1:j]) for j in np.arange(1, len(acf) // 2)])\n", " # remove the noisy part of the integral\n", From 5f61cc7f8d05c22e669425fb923e7673c8ca9817 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Fri, 13 Nov 2020 22:35:19 +0100 Subject: [PATCH 12/14] docs: Document shape-based constraints pitfalls --- doc/sphinx/constraints.rst | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/doc/sphinx/constraints.rst b/doc/sphinx/constraints.rst index f1c94fec944..4dd274fbf2f 100644 --- a/doc/sphinx/constraints.rst +++ b/doc/sphinx/constraints.rst @@ -28,11 +28,18 @@ Shapes define geometries which can be used in |es| either as constraints in particle interactions or as a boundary for a lattice-Boltzmann fluid. -To avoid unexpected behavior make sure all parts of your shape are +To avoid unexpected behavior, make sure all parts of your shape are within the central box since the distance to the shape is calculated only -within the central box. If parts of the shape are placed -outside of the central box these parts are truncated by the box boundaries. This may -or may not be desired as for example in the case of a cylinder without or with cylinder cover. +within the central box. If parts of the shape are placed outside of the +central box, these parts are truncated by the box boundaries. This may +be desired as for example in the case of a cylinder shape whose end caps +could extend outside the box boundaries to create an infinite rod. + +In addition, particles will not interact with periodic images of shapes, +therefore make sure the shapes are not too close to any of the six sides +of the box. If the distance between the shape and the nearest box boundary +is less than the interaction cutoff, the potential will be discontinuous +when the particle crosses that periodic boundary. A shape is instantiated by calling its constructor. If you wanted to create a wall shape you could do:: From ae80e5f136e41268caf35279f826be5dff31c7a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Fri, 13 Nov 2020 22:46:34 +0100 Subject: [PATCH 13/14] tutorials: Rename tutorials Remove the numbered prefix from all tutorials. Rename html_runner.py to convert.py to better reflect its new design. --- doc/sphinx/introduction.rst | 18 +++---- doc/tutorials/01-lennard_jones/CMakeLists.txt | 5 -- .../02-charged_system/CMakeLists.txt | 8 --- .../04-lattice_boltzmann/CMakeLists.txt | 14 ------ doc/tutorials/08-visualization/CMakeLists.txt | 3 -- doc/tutorials/11-ferrofluid/CMakeLists.txt | 16 ------ doc/tutorials/12-constant_pH/CMakeLists.txt | 3 -- doc/tutorials/CMakeLists.txt | 38 +++++++-------- doc/tutorials/Readme.rst | 18 +++---- .../CMakeLists.txt | 6 +-- .../active_matter.ipynb} | 2 +- .../exercises/enhanced_diffusion.py | 0 .../exercises/flow_field.py | 0 .../exercises/rectification_geometry.py | 0 .../exercises/rectification_simulation.py | 0 .../figures/enhanced.pdf | Bin .../figures/enhanced.svg | 0 .../figures/flow_field.pdf | Bin .../figures/flow_field.svg | 0 .../figures/friction.pdf | Bin .../figures/friction.svg | 0 .../figures/friction.tex | 0 .../figures/geometry.pdf | Bin .../figures/geometry.svg | 0 .../figures/geometry.tex | 0 .../figures/pusher-puller.pdf | Bin .../figures/pusher-puller.svg | 0 .../figures/pusher-puller.tex | 0 .../figures/rectification.pdf | Bin .../figures/rectification.svg | 0 .../figures/rectify.jpg | Bin .../solutions/enhanced_diffusion.py | 0 .../solutions/flow_field.py | 0 .../solutions/rectification_geometry.py | 0 .../solutions/rectification_simulation.py | 0 .../solutions/solutions.txt | 0 doc/tutorials/charged_system/CMakeLists.txt | 3 ++ .../NotesForTutor.md | 0 .../charged_system-1.ipynb} | 0 doc/tutorials/constant_pH/CMakeLists.txt | 3 ++ .../NotesForTutor.md | 0 .../constant_pH.ipynb} | 0 doc/tutorials/{html_runner.py => convert.py} | 0 .../CMakeLists.txt | 4 +- .../electrokinetics.ipynb} | 0 .../figures/latticeboltzmann-grid.pdf | Bin .../figures/profiles.png | Bin .../figures/schlitzpore_3d.png | Bin .../scripts/eof_analytical.py | 0 .../scripts/plot.py | 0 doc/tutorials/ferrofluid/CMakeLists.txt | 15 ++++++ .../NotesForTutor.md | 0 .../ferrofluid_part1.ipynb} | 0 .../ferrofluid_part2.ipynb} | 0 .../ferrofluid_part3.ipynb} | 0 .../figures/Electro-Steric_Stabilization.jpg | Bin .../Ferrofluid_Magnet_under_glass_edit.jpg | Bin .../figures/headtotailconf.png | Bin .../lattice_boltzmann/CMakeLists.txt | 14 ++++++ .../NotesForTutor.md | 0 .../figures/latticeboltzmann-grid.png | Bin .../latticeboltzmann-momentumexchange.png | Bin .../figures/poiseuille.png | Bin .../lattice_boltzmann_part1.ipynb} | 0 .../lattice_boltzmann_part2.ipynb} | 0 .../lattice_boltzmann_part3.ipynb} | 0 .../lattice_boltzmann_part4.ipynb} | 0 doc/tutorials/lennard_jones/CMakeLists.txt | 5 ++ .../NotesForTutor.md | 0 .../figures/lennard-jones-potential.png | Bin .../lennard_jones.ipynb} | 0 .../CMakeLists.txt | 6 +-- .../figures/raspberry_snapshot.pdf | Bin .../figures/raspberry_snapshot.png | Bin .../posVsTime_sample.dat | 0 .../raspberry_electrophoresis.ipynb} | 0 doc/tutorials/visualization/CMakeLists.txt | 3 ++ .../visualization.ipynb} | 0 testsuite/scripts/tutorials/CMakeLists.txt | 46 +++++++++--------- ...test_active_matter__enhanced_diffusion.py} | 2 +- ...d.py => test_active_matter__flow_field.py} | 2 +- ..._active_matter__rectification_geometry.py} | 2 +- ...ctive_matter__rectification_simulation.py} | 2 +- ...d_system-1.py => test_charged_system-1.py} | 5 +- ...H__ideal.py => test_constant_pH__ideal.py} | 3 +- ...s.py => test_constant_pH__interactions.py} | 5 +- .../{test_html_runner.py => test_convert.py} | 34 ++++++------- ...trokinetics.py => test_electrokinetics.py} | 6 +-- ...1-ferrofluid_1.py => test_ferrofluid_1.py} | 2 +- ...1-ferrofluid_2.py => test_ferrofluid_2.py} | 2 +- ...1-ferrofluid_3.py => test_ferrofluid_3.py} | 2 +- ...rt2.py => test_lattice_boltzmann_part2.py} | 2 +- ...rt3.py => test_lattice_boltzmann_part3.py} | 2 +- ...rt4.py => test_lattice_boltzmann_part4.py} | 2 +- ...lennard_jones.py => test_lennard_jones.py} | 2 +- ...s.py => test_raspberry_electrophoresis.py} | 2 +- ...visualization.py => test_visualization.py} | 2 +- 97 files changed, 149 insertions(+), 160 deletions(-) delete mode 100644 doc/tutorials/01-lennard_jones/CMakeLists.txt delete mode 100644 doc/tutorials/02-charged_system/CMakeLists.txt delete mode 100644 doc/tutorials/04-lattice_boltzmann/CMakeLists.txt delete mode 100644 doc/tutorials/08-visualization/CMakeLists.txt delete mode 100644 doc/tutorials/11-ferrofluid/CMakeLists.txt delete mode 100644 doc/tutorials/12-constant_pH/CMakeLists.txt rename doc/tutorials/{06-active_matter => active_matter}/CMakeLists.txt (81%) rename doc/tutorials/{06-active_matter/06-active_matter.ipynb => active_matter/active_matter.ipynb} (99%) rename doc/tutorials/{06-active_matter => active_matter}/exercises/enhanced_diffusion.py (100%) rename doc/tutorials/{06-active_matter => active_matter}/exercises/flow_field.py (100%) rename doc/tutorials/{06-active_matter => active_matter}/exercises/rectification_geometry.py (100%) rename doc/tutorials/{06-active_matter => active_matter}/exercises/rectification_simulation.py (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/enhanced.pdf (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/enhanced.svg (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/flow_field.pdf (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/flow_field.svg (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/friction.pdf (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/friction.svg (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/friction.tex (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/geometry.pdf (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/geometry.svg (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/geometry.tex (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/pusher-puller.pdf (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/pusher-puller.svg (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/pusher-puller.tex (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/rectification.pdf (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/rectification.svg (100%) rename doc/tutorials/{06-active_matter => active_matter}/figures/rectify.jpg (100%) rename doc/tutorials/{06-active_matter => active_matter}/solutions/enhanced_diffusion.py (100%) rename doc/tutorials/{06-active_matter => active_matter}/solutions/flow_field.py (100%) rename doc/tutorials/{06-active_matter => active_matter}/solutions/rectification_geometry.py (100%) rename doc/tutorials/{06-active_matter => active_matter}/solutions/rectification_simulation.py (100%) rename doc/tutorials/{06-active_matter => active_matter}/solutions/solutions.txt (100%) create mode 100644 doc/tutorials/charged_system/CMakeLists.txt rename doc/tutorials/{02-charged_system => charged_system}/NotesForTutor.md (100%) rename doc/tutorials/{02-charged_system/02-charged_system-1.ipynb => charged_system/charged_system-1.ipynb} (100%) create mode 100644 doc/tutorials/constant_pH/CMakeLists.txt rename doc/tutorials/{12-constant_pH => constant_pH}/NotesForTutor.md (100%) rename doc/tutorials/{12-constant_pH/12-constant_pH.ipynb => constant_pH/constant_pH.ipynb} (100%) rename doc/tutorials/{html_runner.py => convert.py} (100%) rename doc/tutorials/{07-electrokinetics => electrokinetics}/CMakeLists.txt (58%) rename doc/tutorials/{07-electrokinetics/07-electrokinetics.ipynb => electrokinetics/electrokinetics.ipynb} (100%) rename doc/tutorials/{07-electrokinetics => electrokinetics}/figures/latticeboltzmann-grid.pdf (100%) rename doc/tutorials/{07-electrokinetics => electrokinetics}/figures/profiles.png (100%) rename doc/tutorials/{07-electrokinetics => electrokinetics}/figures/schlitzpore_3d.png (100%) rename doc/tutorials/{07-electrokinetics => electrokinetics}/scripts/eof_analytical.py (100%) rename doc/tutorials/{07-electrokinetics => electrokinetics}/scripts/plot.py (100%) create mode 100644 doc/tutorials/ferrofluid/CMakeLists.txt rename doc/tutorials/{11-ferrofluid => ferrofluid}/NotesForTutor.md (100%) rename doc/tutorials/{11-ferrofluid/11-ferrofluid_part1.ipynb => ferrofluid/ferrofluid_part1.ipynb} (100%) rename doc/tutorials/{11-ferrofluid/11-ferrofluid_part2.ipynb => ferrofluid/ferrofluid_part2.ipynb} (100%) rename doc/tutorials/{11-ferrofluid/11-ferrofluid_part3.ipynb => ferrofluid/ferrofluid_part3.ipynb} (100%) rename doc/tutorials/{11-ferrofluid => ferrofluid}/figures/Electro-Steric_Stabilization.jpg (100%) rename doc/tutorials/{11-ferrofluid => ferrofluid}/figures/Ferrofluid_Magnet_under_glass_edit.jpg (100%) rename doc/tutorials/{11-ferrofluid => ferrofluid}/figures/headtotailconf.png (100%) create mode 100644 doc/tutorials/lattice_boltzmann/CMakeLists.txt rename doc/tutorials/{04-lattice_boltzmann => lattice_boltzmann}/NotesForTutor.md (100%) rename doc/tutorials/{04-lattice_boltzmann => lattice_boltzmann}/figures/latticeboltzmann-grid.png (100%) rename doc/tutorials/{04-lattice_boltzmann => lattice_boltzmann}/figures/latticeboltzmann-momentumexchange.png (100%) rename doc/tutorials/{04-lattice_boltzmann => lattice_boltzmann}/figures/poiseuille.png (100%) rename doc/tutorials/{04-lattice_boltzmann/04-lattice_boltzmann_part1.ipynb => lattice_boltzmann/lattice_boltzmann_part1.ipynb} (100%) rename doc/tutorials/{04-lattice_boltzmann/04-lattice_boltzmann_part2.ipynb => lattice_boltzmann/lattice_boltzmann_part2.ipynb} (100%) rename doc/tutorials/{04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb => lattice_boltzmann/lattice_boltzmann_part3.ipynb} (100%) rename doc/tutorials/{04-lattice_boltzmann/04-lattice_boltzmann_part4.ipynb => lattice_boltzmann/lattice_boltzmann_part4.ipynb} (100%) create mode 100644 doc/tutorials/lennard_jones/CMakeLists.txt rename doc/tutorials/{01-lennard_jones => lennard_jones}/NotesForTutor.md (100%) rename doc/tutorials/{01-lennard_jones => lennard_jones}/figures/lennard-jones-potential.png (100%) rename doc/tutorials/{01-lennard_jones/01-lennard_jones.ipynb => lennard_jones/lennard_jones.ipynb} (100%) rename doc/tutorials/{05-raspberry_electrophoresis => raspberry_electrophoresis}/CMakeLists.txt (67%) rename doc/tutorials/{05-raspberry_electrophoresis => raspberry_electrophoresis}/figures/raspberry_snapshot.pdf (100%) rename doc/tutorials/{05-raspberry_electrophoresis => raspberry_electrophoresis}/figures/raspberry_snapshot.png (100%) rename doc/tutorials/{05-raspberry_electrophoresis => raspberry_electrophoresis}/posVsTime_sample.dat (100%) rename doc/tutorials/{05-raspberry_electrophoresis/05-raspberry_electrophoresis.ipynb => raspberry_electrophoresis/raspberry_electrophoresis.ipynb} (100%) create mode 100644 doc/tutorials/visualization/CMakeLists.txt rename doc/tutorials/{08-visualization/08-visualization.ipynb => visualization/visualization.ipynb} (100%) rename testsuite/scripts/tutorials/{test_06-active_matter__enhanced_diffusion.py => test_active_matter__enhanced_diffusion.py} (94%) rename testsuite/scripts/tutorials/{test_06-active_matter__flow_field.py => test_active_matter__flow_field.py} (94%) rename testsuite/scripts/tutorials/{test_06-active_matter__rectification_geometry.py => test_active_matter__rectification_geometry.py} (93%) rename testsuite/scripts/tutorials/{test_06-active_matter__rectification_simulation.py => test_active_matter__rectification_simulation.py} (95%) rename testsuite/scripts/tutorials/{test_02-charged_system-1.py => test_charged_system-1.py} (88%) rename testsuite/scripts/tutorials/{test_12-constant_pH__ideal.py => test_constant_pH__ideal.py} (94%) rename testsuite/scripts/tutorials/{test_12-constant_pH__interactions.py => test_constant_pH__interactions.py} (91%) rename testsuite/scripts/tutorials/{test_html_runner.py => test_convert.py} (91%) rename testsuite/scripts/tutorials/{test_07-electrokinetics.py => test_electrokinetics.py} (92%) rename testsuite/scripts/tutorials/{test_11-ferrofluid_1.py => test_ferrofluid_1.py} (95%) rename testsuite/scripts/tutorials/{test_11-ferrofluid_2.py => test_ferrofluid_2.py} (96%) rename testsuite/scripts/tutorials/{test_11-ferrofluid_3.py => test_ferrofluid_3.py} (96%) rename testsuite/scripts/tutorials/{test_04-lattice_boltzmann_part2.py => test_lattice_boltzmann_part2.py} (95%) rename testsuite/scripts/tutorials/{test_04-lattice_boltzmann_part3.py => test_lattice_boltzmann_part3.py} (97%) rename testsuite/scripts/tutorials/{test_04-lattice_boltzmann_part4.py => test_lattice_boltzmann_part4.py} (94%) rename testsuite/scripts/tutorials/{test_01-lennard_jones.py => test_lennard_jones.py} (94%) rename testsuite/scripts/tutorials/{test_05-raspberry_electrophoresis.py => test_raspberry_electrophoresis.py} (95%) rename testsuite/scripts/tutorials/{test_08-visualization.py => test_visualization.py} (95%) diff --git a/doc/sphinx/introduction.rst b/doc/sphinx/introduction.rst index cec7d28561c..ae29b93f426 100644 --- a/doc/sphinx/introduction.rst +++ b/doc/sphinx/introduction.rst @@ -291,15 +291,15 @@ physical systems. You can also find the tutorials and related scripts in the directory :file:`/doc/tutorials` or `online on GitHub `_. Currently, the following tutorials are available: -* :file:`01-lennard_jones`: Modelling of a single-component and a two-component Lennard-Jones liquid. -* :file:`02-charged_system`: Modelling of ion condensation around a charged rod. -* :file:`04-lattice_boltzmann`: Simulations including hydrodynamic interactions using the lattice-Boltzmann method. -* :file:`05-raspberry_electrophoresis`: Extended objects in a lattice-Boltzmann fluid, raspberry particles. -* :file:`06-active_matter`: Modelling of self-propelling particles. -* :file:`07-electrokinetics`: Modelling electrokinetics together with hydrodynamic interactions. -* :file:`08-visualization`: Using the online visualizers of |es|. -* :file:`11-ferrofluid`: Modelling a colloidal suspension of magnetic particles. -* :file:`12-constant_pH`: Modelling the titration of a weak acid using the constant pH method +* :file:`lennard_jones`: Modelling of a single-component and a two-component Lennard-Jones liquid. +* :file:`charged_system`: Modelling of ion condensation around a charged rod. +* :file:`lattice_boltzmann`: Simulations including hydrodynamic interactions using the lattice-Boltzmann method. +* :file:`raspberry_electrophoresis`: Extended objects in a lattice-Boltzmann fluid, raspberry particles. +* :file:`active_matter`: Modelling of self-propelling particles. +* :file:`electrokinetics`: Modelling electrokinetics together with hydrodynamic interactions. +* :file:`visualization`: Using the online visualizers of |es|. +* :file:`ferrofluid`: Modelling a colloidal suspension of magnetic particles. +* :file:`constant_pH`: Modelling the titration of a weak acid using the constant pH method .. _Sample scripts: diff --git a/doc/tutorials/01-lennard_jones/CMakeLists.txt b/doc/tutorials/01-lennard_jones/CMakeLists.txt deleted file mode 100644 index 2c068fdd759..00000000000 --- a/doc/tutorials/01-lennard_jones/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -configure_tutorial_target(TARGET tutorial_01 DEPENDS 01-lennard_jones.ipynb - figures/lennard-jones-potential.png) - -nb_export(TARGET tutorial_01 SUFFIX "" FILE "01-lennard_jones.ipynb" HTML_RUN - VAR_SUBST) diff --git a/doc/tutorials/02-charged_system/CMakeLists.txt b/doc/tutorials/02-charged_system/CMakeLists.txt deleted file mode 100644 index 7cac089d979..00000000000 --- a/doc/tutorials/02-charged_system/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -configure_tutorial_target( - TARGET - tutorial_02 - DEPENDS - 02-charged_system-1.ipynb) - -nb_export(TARGET tutorial_02 SUFFIX "1" FILE "02-charged_system-1.ipynb" - HTML_RUN) diff --git a/doc/tutorials/04-lattice_boltzmann/CMakeLists.txt b/doc/tutorials/04-lattice_boltzmann/CMakeLists.txt deleted file mode 100644 index b1ac658a6e3..00000000000 --- a/doc/tutorials/04-lattice_boltzmann/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -configure_tutorial_target( - TARGET tutorial_04 DEPENDS 04-lattice_boltzmann_part1.ipynb - 04-lattice_boltzmann_part2.ipynb 04-lattice_boltzmann_part3.ipynb - 04-lattice_boltzmann_part4.ipynb figures/latticeboltzmann-grid.png - figures/latticeboltzmann-momentumexchange.png) - -nb_export(TARGET tutorial_04 SUFFIX "1" FILE "04-lattice_boltzmann_part1.ipynb" - HTML_RUN) -nb_export(TARGET tutorial_04 SUFFIX "2" FILE "04-lattice_boltzmann_part2.ipynb" - HTML_RUN) -nb_export(TARGET tutorial_04 SUFFIX "3" FILE "04-lattice_boltzmann_part3.ipynb" - HTML_RUN VAR_SUBST "STEPS=200;BOX_L=16;N_MONOMERS=[6,8,10,12,14]") -nb_export(TARGET tutorial_04 SUFFIX "4" FILE "04-lattice_boltzmann_part4.ipynb" - HTML_RUN) diff --git a/doc/tutorials/08-visualization/CMakeLists.txt b/doc/tutorials/08-visualization/CMakeLists.txt deleted file mode 100644 index eecfc068d5c..00000000000 --- a/doc/tutorials/08-visualization/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -configure_tutorial_target(TARGET tutorial_08 DEPENDS 08-visualization.ipynb) - -nb_export(TARGET tutorial_08 SUFFIX "" FILE "08-visualization.ipynb" HTML_RUN) diff --git a/doc/tutorials/11-ferrofluid/CMakeLists.txt b/doc/tutorials/11-ferrofluid/CMakeLists.txt deleted file mode 100644 index 280c8c0fb72..00000000000 --- a/doc/tutorials/11-ferrofluid/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -configure_tutorial_target( - TARGET tutorial_11 DEPENDS 11-ferrofluid_part1.ipynb - 11-ferrofluid_part2.ipynb 11-ferrofluid_part3.ipynb - figures/Electro-Steric_Stabilization.jpg - figures/Ferrofluid_Magnet_under_glass_edit.jpg figures/headtotailconf.png) - -nb_export(TARGET tutorial_11 SUFFIX "1" FILE "11-ferrofluid_part1.ipynb" - HTML_RUN VAR_SUBST "EQUIL_STEPS=100;EQUIL_ROUNDS=10") -nb_export(TARGET tutorial_11 SUFFIX "2" FILE "11-ferrofluid_part2.ipynb" - HTML_RUN VAR_SUBST - "equil_steps=100;equil_rounds=10;alphas=[0,1,2,3,4.5,8];loops=100") -nb_export( - TARGET tutorial_11 SUFFIX "3" FILE "11-ferrofluid_part3.ipynb" HTML_RUN - VAR_SUBST - "equil_steps=100;equil_rounds=10;alphas=[0,0.5,1,2,4,8];loops=200;loops_m=100" -) diff --git a/doc/tutorials/12-constant_pH/CMakeLists.txt b/doc/tutorials/12-constant_pH/CMakeLists.txt deleted file mode 100644 index 96e9f3be992..00000000000 --- a/doc/tutorials/12-constant_pH/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -configure_tutorial_target(TARGET tutorial_12 DEPENDS 12-constant_pH.ipynb) - -nb_export(TARGET tutorial_12 SUFFIX "" FILE "12-constant_pH.ipynb" HTML_RUN) diff --git a/doc/tutorials/CMakeLists.txt b/doc/tutorials/CMakeLists.txt index 2a91354f648..8d9afd2fa5b 100644 --- a/doc/tutorials/CMakeLists.txt +++ b/doc/tutorials/CMakeLists.txt @@ -57,12 +57,12 @@ function(NB_EXPORT) add_custom_command( OUTPUT ${NB_FILE_RUN} DEPENDS - "${NB_FILE};${NB_EXPORT_ADD_SCRIPTS};${CMAKE_BINARY_DIR}/doc/tutorials/html_runner.py;${CMAKE_BINARY_DIR}/testsuite/scripts/importlib_wrapper.py" + "${NB_FILE};${NB_EXPORT_ADD_SCRIPTS};${CMAKE_BINARY_DIR}/doc/tutorials/convert.py;${CMAKE_BINARY_DIR}/testsuite/scripts/importlib_wrapper.py" COMMAND ${CMAKE_BINARY_DIR}/pypresso - ${CMAKE_BINARY_DIR}/doc/tutorials/html_runner.py ci --execute - --exercise2 --remove-empty-cells --input ${NB_FILE} --output - ${NB_FILE_RUN} --substitutions ${NB_EXPORT_VAR_SUBST} --scripts + ${CMAKE_BINARY_DIR}/doc/tutorials/convert.py ci --execute --exercise2 + --remove-empty-cells --input ${NB_FILE} --output ${NB_FILE_RUN} + --substitutions ${NB_EXPORT_VAR_SUBST} --scripts ${NB_EXPORT_ADD_SCRIPTS}) else() set(NB_FILE_RUN ${NB_FILE}) @@ -72,9 +72,8 @@ function(NB_EXPORT) OUTPUT ${HTML_FILE} DEPENDS ${NB_FILE_RUN};${NB_EXPORT_ADD_SCRIPTS} COMMAND - ${CMAKE_BINARY_DIR}/pypresso - ${CMAKE_BINARY_DIR}/doc/tutorials/html_runner.py ci --exercise2 --input - ${NB_FILE_RUN} --output ${NB_FILE_RUN}~ + ${CMAKE_BINARY_DIR}/pypresso ${CMAKE_BINARY_DIR}/doc/tutorials/convert.py + ci --exercise2 --input ${NB_FILE_RUN} --output ${NB_FILE_RUN}~ COMMAND ${IPYTHON_EXECUTABLE} nbconvert --to "html" --output ${HTML_FILE} ${NB_FILE_RUN}~) @@ -82,9 +81,8 @@ function(NB_EXPORT) OUTPUT ${PY_FILE} DEPENDS ${NB_FILE} COMMAND - ${CMAKE_BINARY_DIR}/pypresso - ${CMAKE_BINARY_DIR}/doc/tutorials/html_runner.py ci --exercise2 --input - ${NB_FILE} --output ${NB_FILE}~ + ${CMAKE_BINARY_DIR}/pypresso ${CMAKE_BINARY_DIR}/doc/tutorials/convert.py + ci --exercise2 --input ${NB_FILE} --output ${NB_FILE}~ COMMAND ${IPYTHON_EXECUTABLE} nbconvert --to "python" --output ${PY_FILE} ${NB_FILE}~) @@ -101,15 +99,15 @@ add_custom_target(tutorials_html) add_custom_target(tutorials_python) # Here: add new directory -add_subdirectory(01-lennard_jones) -add_subdirectory(02-charged_system) -add_subdirectory(04-lattice_boltzmann) -add_subdirectory(05-raspberry_electrophoresis) -add_subdirectory(06-active_matter) -add_subdirectory(07-electrokinetics) -add_subdirectory(08-visualization) -add_subdirectory(11-ferrofluid) -add_subdirectory(12-constant_pH) +add_subdirectory(lennard_jones) +add_subdirectory(charged_system) +add_subdirectory(lattice_boltzmann) +add_subdirectory(raspberry_electrophoresis) +add_subdirectory(active_matter) +add_subdirectory(electrokinetics) +add_subdirectory(visualization) +add_subdirectory(ferrofluid) +add_subdirectory(constant_pH) configure_file(Readme.rst ${CMAKE_CURRENT_BINARY_DIR}/Readme.rst COPYONLY) -configure_file(html_runner.py ${CMAKE_CURRENT_BINARY_DIR}/html_runner.py) +configure_file(convert.py ${CMAKE_CURRENT_BINARY_DIR}/convert.py) diff --git a/doc/tutorials/Readme.rst b/doc/tutorials/Readme.rst index 8b595998759..25ce7b2836b 100644 --- a/doc/tutorials/Readme.rst +++ b/doc/tutorials/Readme.rst @@ -7,15 +7,15 @@ Overview This folder contains tutorials that introduce the use of ESPResSo for different physical systems. Currently, the following tutorials are available: -* ``01-lennard_jones``: Modelling of a single-component and a two-component Lennard-Jones liquid -* ``02-charged_system``: Modelling of ion condensation around a charged rod -* ``04-lattice_boltzmann``: Simulations including hydrodynamic interactions using the lattice-Boltzmann method -* ``05-raspberry_electrophoresis``: Extended objects in a lattice-Boltzmann fluid, raspberry particles -* ``06-active_matter``: Modelling of self-propelling particles -* ``07-electrokinetics``: Modelling electrokinetics together with hydrodynamic interactions -* ``08-visualization``: Using the online visualizers of ESPResSo -* ``11-ferrofluid``: Modelling a monolayer ferrofluid system -* ``12-constant_pH``: Modelling the titration of a weak acid using the constant pH method +* ``lennard_jones``: Modelling of a single-component and a two-component Lennard-Jones liquid +* ``charged_system``: Modelling of ion condensation around a charged rod +* ``lattice_boltzmann``: Simulations including hydrodynamic interactions using the lattice-Boltzmann method +* ``raspberry_electrophoresis``: Extended objects in a lattice-Boltzmann fluid, raspberry particles +* ``active_matter``: Modelling of self-propelling particles +* ``electrokinetics``: Modelling electrokinetics together with hydrodynamic interactions +* ``visualization``: Using the online visualizers of ESPResSo +* ``ferrofluid``: Modelling a monolayer ferrofluid system +* ``constant_pH``: Modelling the titration of a weak acid using the constant pH method Using the tutorials ------------------- diff --git a/doc/tutorials/06-active_matter/CMakeLists.txt b/doc/tutorials/active_matter/CMakeLists.txt similarity index 81% rename from doc/tutorials/06-active_matter/CMakeLists.txt rename to doc/tutorials/active_matter/CMakeLists.txt index 652ea4bb9fc..2b7c8c5ecb1 100644 --- a/doc/tutorials/06-active_matter/CMakeLists.txt +++ b/doc/tutorials/active_matter/CMakeLists.txt @@ -1,8 +1,8 @@ configure_tutorial_target( TARGET - tutorial_06 + tutorial_am DEPENDS - 06-active_matter.ipynb + active_matter.ipynb figures/friction.svg figures/pusher-puller.svg figures/enhanced.svg @@ -20,4 +20,4 @@ configure_tutorial_target( solutions/rectification_simulation.py solutions/solutions.txt) -nb_export(TARGET tutorial_06 SUFFIX "" FILE "06-active_matter.ipynb" HTML_RUN) +nb_export(TARGET tutorial_am SUFFIX "" FILE "active_matter.ipynb" HTML_RUN) diff --git a/doc/tutorials/06-active_matter/06-active_matter.ipynb b/doc/tutorials/active_matter/active_matter.ipynb similarity index 99% rename from doc/tutorials/06-active_matter/06-active_matter.ipynb rename to doc/tutorials/active_matter/active_matter.ipynb index 1f4566e8ec7..7fe0390c461 100644 --- a/doc/tutorials/06-active_matter/06-active_matter.ipynb +++ b/doc/tutorials/active_matter/active_matter.ipynb @@ -337,7 +337,7 @@ "\n", "Please uncomment them in the myconfig.hpp and compile **ESPResSo** using this myconfig.hpp.\n", "\n", - "Next you can find the tutorial files in the doc/tutorials/06-active_matter/\n", + "Next you can find the tutorial files in the doc/tutorials/active_matter/\n", "directory. There are two folders, one called exercises and one called solutions." ] }, diff --git a/doc/tutorials/06-active_matter/exercises/enhanced_diffusion.py b/doc/tutorials/active_matter/exercises/enhanced_diffusion.py similarity index 100% rename from doc/tutorials/06-active_matter/exercises/enhanced_diffusion.py rename to doc/tutorials/active_matter/exercises/enhanced_diffusion.py diff --git a/doc/tutorials/06-active_matter/exercises/flow_field.py b/doc/tutorials/active_matter/exercises/flow_field.py similarity index 100% rename from doc/tutorials/06-active_matter/exercises/flow_field.py rename to doc/tutorials/active_matter/exercises/flow_field.py diff --git a/doc/tutorials/06-active_matter/exercises/rectification_geometry.py b/doc/tutorials/active_matter/exercises/rectification_geometry.py similarity index 100% rename from doc/tutorials/06-active_matter/exercises/rectification_geometry.py rename to doc/tutorials/active_matter/exercises/rectification_geometry.py diff --git a/doc/tutorials/06-active_matter/exercises/rectification_simulation.py b/doc/tutorials/active_matter/exercises/rectification_simulation.py similarity index 100% rename from doc/tutorials/06-active_matter/exercises/rectification_simulation.py rename to doc/tutorials/active_matter/exercises/rectification_simulation.py diff --git a/doc/tutorials/06-active_matter/figures/enhanced.pdf b/doc/tutorials/active_matter/figures/enhanced.pdf similarity index 100% rename from doc/tutorials/06-active_matter/figures/enhanced.pdf rename to doc/tutorials/active_matter/figures/enhanced.pdf diff --git a/doc/tutorials/06-active_matter/figures/enhanced.svg b/doc/tutorials/active_matter/figures/enhanced.svg similarity index 100% rename from doc/tutorials/06-active_matter/figures/enhanced.svg rename to doc/tutorials/active_matter/figures/enhanced.svg diff --git a/doc/tutorials/06-active_matter/figures/flow_field.pdf b/doc/tutorials/active_matter/figures/flow_field.pdf similarity index 100% rename from doc/tutorials/06-active_matter/figures/flow_field.pdf rename to doc/tutorials/active_matter/figures/flow_field.pdf diff --git a/doc/tutorials/06-active_matter/figures/flow_field.svg b/doc/tutorials/active_matter/figures/flow_field.svg similarity index 100% rename from doc/tutorials/06-active_matter/figures/flow_field.svg rename to doc/tutorials/active_matter/figures/flow_field.svg diff --git a/doc/tutorials/06-active_matter/figures/friction.pdf b/doc/tutorials/active_matter/figures/friction.pdf similarity index 100% rename from doc/tutorials/06-active_matter/figures/friction.pdf rename to doc/tutorials/active_matter/figures/friction.pdf diff --git a/doc/tutorials/06-active_matter/figures/friction.svg b/doc/tutorials/active_matter/figures/friction.svg similarity index 100% rename from doc/tutorials/06-active_matter/figures/friction.svg rename to doc/tutorials/active_matter/figures/friction.svg diff --git a/doc/tutorials/06-active_matter/figures/friction.tex b/doc/tutorials/active_matter/figures/friction.tex similarity index 100% rename from doc/tutorials/06-active_matter/figures/friction.tex rename to doc/tutorials/active_matter/figures/friction.tex diff --git a/doc/tutorials/06-active_matter/figures/geometry.pdf b/doc/tutorials/active_matter/figures/geometry.pdf similarity index 100% rename from doc/tutorials/06-active_matter/figures/geometry.pdf rename to doc/tutorials/active_matter/figures/geometry.pdf diff --git a/doc/tutorials/06-active_matter/figures/geometry.svg b/doc/tutorials/active_matter/figures/geometry.svg similarity index 100% rename from doc/tutorials/06-active_matter/figures/geometry.svg rename to doc/tutorials/active_matter/figures/geometry.svg diff --git a/doc/tutorials/06-active_matter/figures/geometry.tex b/doc/tutorials/active_matter/figures/geometry.tex similarity index 100% rename from doc/tutorials/06-active_matter/figures/geometry.tex rename to doc/tutorials/active_matter/figures/geometry.tex diff --git a/doc/tutorials/06-active_matter/figures/pusher-puller.pdf b/doc/tutorials/active_matter/figures/pusher-puller.pdf similarity index 100% rename from doc/tutorials/06-active_matter/figures/pusher-puller.pdf rename to doc/tutorials/active_matter/figures/pusher-puller.pdf diff --git a/doc/tutorials/06-active_matter/figures/pusher-puller.svg b/doc/tutorials/active_matter/figures/pusher-puller.svg similarity index 100% rename from doc/tutorials/06-active_matter/figures/pusher-puller.svg rename to doc/tutorials/active_matter/figures/pusher-puller.svg diff --git a/doc/tutorials/06-active_matter/figures/pusher-puller.tex b/doc/tutorials/active_matter/figures/pusher-puller.tex similarity index 100% rename from doc/tutorials/06-active_matter/figures/pusher-puller.tex rename to doc/tutorials/active_matter/figures/pusher-puller.tex diff --git a/doc/tutorials/06-active_matter/figures/rectification.pdf b/doc/tutorials/active_matter/figures/rectification.pdf similarity index 100% rename from doc/tutorials/06-active_matter/figures/rectification.pdf rename to doc/tutorials/active_matter/figures/rectification.pdf diff --git a/doc/tutorials/06-active_matter/figures/rectification.svg b/doc/tutorials/active_matter/figures/rectification.svg similarity index 100% rename from doc/tutorials/06-active_matter/figures/rectification.svg rename to doc/tutorials/active_matter/figures/rectification.svg diff --git a/doc/tutorials/06-active_matter/figures/rectify.jpg b/doc/tutorials/active_matter/figures/rectify.jpg similarity index 100% rename from doc/tutorials/06-active_matter/figures/rectify.jpg rename to doc/tutorials/active_matter/figures/rectify.jpg diff --git a/doc/tutorials/06-active_matter/solutions/enhanced_diffusion.py b/doc/tutorials/active_matter/solutions/enhanced_diffusion.py similarity index 100% rename from doc/tutorials/06-active_matter/solutions/enhanced_diffusion.py rename to doc/tutorials/active_matter/solutions/enhanced_diffusion.py diff --git a/doc/tutorials/06-active_matter/solutions/flow_field.py b/doc/tutorials/active_matter/solutions/flow_field.py similarity index 100% rename from doc/tutorials/06-active_matter/solutions/flow_field.py rename to doc/tutorials/active_matter/solutions/flow_field.py diff --git a/doc/tutorials/06-active_matter/solutions/rectification_geometry.py b/doc/tutorials/active_matter/solutions/rectification_geometry.py similarity index 100% rename from doc/tutorials/06-active_matter/solutions/rectification_geometry.py rename to doc/tutorials/active_matter/solutions/rectification_geometry.py diff --git a/doc/tutorials/06-active_matter/solutions/rectification_simulation.py b/doc/tutorials/active_matter/solutions/rectification_simulation.py similarity index 100% rename from doc/tutorials/06-active_matter/solutions/rectification_simulation.py rename to doc/tutorials/active_matter/solutions/rectification_simulation.py diff --git a/doc/tutorials/06-active_matter/solutions/solutions.txt b/doc/tutorials/active_matter/solutions/solutions.txt similarity index 100% rename from doc/tutorials/06-active_matter/solutions/solutions.txt rename to doc/tutorials/active_matter/solutions/solutions.txt diff --git a/doc/tutorials/charged_system/CMakeLists.txt b/doc/tutorials/charged_system/CMakeLists.txt new file mode 100644 index 00000000000..e4bbfaaab5d --- /dev/null +++ b/doc/tutorials/charged_system/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_tutorial_target(TARGET tutorial_crg DEPENDS charged_system-1.ipynb) + +nb_export(TARGET tutorial_crg SUFFIX "1" FILE "charged_system-1.ipynb" HTML_RUN) diff --git a/doc/tutorials/02-charged_system/NotesForTutor.md b/doc/tutorials/charged_system/NotesForTutor.md similarity index 100% rename from doc/tutorials/02-charged_system/NotesForTutor.md rename to doc/tutorials/charged_system/NotesForTutor.md diff --git a/doc/tutorials/02-charged_system/02-charged_system-1.ipynb b/doc/tutorials/charged_system/charged_system-1.ipynb similarity index 100% rename from doc/tutorials/02-charged_system/02-charged_system-1.ipynb rename to doc/tutorials/charged_system/charged_system-1.ipynb diff --git a/doc/tutorials/constant_pH/CMakeLists.txt b/doc/tutorials/constant_pH/CMakeLists.txt new file mode 100644 index 00000000000..ed08332ae64 --- /dev/null +++ b/doc/tutorials/constant_pH/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_tutorial_target(TARGET tutorial_cph DEPENDS constant_pH.ipynb) + +nb_export(TARGET tutorial_cph SUFFIX "" FILE "constant_pH.ipynb" HTML_RUN) diff --git a/doc/tutorials/12-constant_pH/NotesForTutor.md b/doc/tutorials/constant_pH/NotesForTutor.md similarity index 100% rename from doc/tutorials/12-constant_pH/NotesForTutor.md rename to doc/tutorials/constant_pH/NotesForTutor.md diff --git a/doc/tutorials/12-constant_pH/12-constant_pH.ipynb b/doc/tutorials/constant_pH/constant_pH.ipynb similarity index 100% rename from doc/tutorials/12-constant_pH/12-constant_pH.ipynb rename to doc/tutorials/constant_pH/constant_pH.ipynb diff --git a/doc/tutorials/html_runner.py b/doc/tutorials/convert.py similarity index 100% rename from doc/tutorials/html_runner.py rename to doc/tutorials/convert.py diff --git a/doc/tutorials/07-electrokinetics/CMakeLists.txt b/doc/tutorials/electrokinetics/CMakeLists.txt similarity index 58% rename from doc/tutorials/07-electrokinetics/CMakeLists.txt rename to doc/tutorials/electrokinetics/CMakeLists.txt index 5306b982404..dc45bd2d04a 100644 --- a/doc/tutorials/07-electrokinetics/CMakeLists.txt +++ b/doc/tutorials/electrokinetics/CMakeLists.txt @@ -1,7 +1,7 @@ configure_tutorial_target( - TARGET tutorial_07 DEPENDS 07-electrokinetics.ipynb figures/profiles.png + TARGET tutorial_ek DEPENDS electrokinetics.ipynb figures/profiles.png figures/schlitzpore_3d.png scripts/eof_analytical.py scripts/plot.py) -nb_export(TARGET tutorial_07 SUFFIX "" FILE "07-electrokinetics.ipynb" HTML_RUN +nb_export(TARGET tutorial_ek SUFFIX "" FILE "electrokinetics.ipynb" HTML_RUN VAR_SUBST "integration_length=600;dt=0.5" ADD_SCRIPTS "scripts/eof_analytical.py;scripts/plot.py") diff --git a/doc/tutorials/07-electrokinetics/07-electrokinetics.ipynb b/doc/tutorials/electrokinetics/electrokinetics.ipynb similarity index 100% rename from doc/tutorials/07-electrokinetics/07-electrokinetics.ipynb rename to doc/tutorials/electrokinetics/electrokinetics.ipynb diff --git a/doc/tutorials/07-electrokinetics/figures/latticeboltzmann-grid.pdf b/doc/tutorials/electrokinetics/figures/latticeboltzmann-grid.pdf similarity index 100% rename from doc/tutorials/07-electrokinetics/figures/latticeboltzmann-grid.pdf rename to doc/tutorials/electrokinetics/figures/latticeboltzmann-grid.pdf diff --git a/doc/tutorials/07-electrokinetics/figures/profiles.png b/doc/tutorials/electrokinetics/figures/profiles.png similarity index 100% rename from doc/tutorials/07-electrokinetics/figures/profiles.png rename to doc/tutorials/electrokinetics/figures/profiles.png diff --git a/doc/tutorials/07-electrokinetics/figures/schlitzpore_3d.png b/doc/tutorials/electrokinetics/figures/schlitzpore_3d.png similarity index 100% rename from doc/tutorials/07-electrokinetics/figures/schlitzpore_3d.png rename to doc/tutorials/electrokinetics/figures/schlitzpore_3d.png diff --git a/doc/tutorials/07-electrokinetics/scripts/eof_analytical.py b/doc/tutorials/electrokinetics/scripts/eof_analytical.py similarity index 100% rename from doc/tutorials/07-electrokinetics/scripts/eof_analytical.py rename to doc/tutorials/electrokinetics/scripts/eof_analytical.py diff --git a/doc/tutorials/07-electrokinetics/scripts/plot.py b/doc/tutorials/electrokinetics/scripts/plot.py similarity index 100% rename from doc/tutorials/07-electrokinetics/scripts/plot.py rename to doc/tutorials/electrokinetics/scripts/plot.py diff --git a/doc/tutorials/ferrofluid/CMakeLists.txt b/doc/tutorials/ferrofluid/CMakeLists.txt new file mode 100644 index 00000000000..71c785593fd --- /dev/null +++ b/doc/tutorials/ferrofluid/CMakeLists.txt @@ -0,0 +1,15 @@ +configure_tutorial_target( + TARGET tutorial_fe DEPENDS ferrofluid_part1.ipynb ferrofluid_part2.ipynb + ferrofluid_part3.ipynb figures/Electro-Steric_Stabilization.jpg + figures/Ferrofluid_Magnet_under_glass_edit.jpg figures/headtotailconf.png) + +nb_export(TARGET tutorial_fe SUFFIX "1" FILE "ferrofluid_part1.ipynb" HTML_RUN + VAR_SUBST "EQUIL_STEPS=100;EQUIL_ROUNDS=10") +nb_export(TARGET tutorial_fe SUFFIX "2" FILE "ferrofluid_part2.ipynb" HTML_RUN + VAR_SUBST + "equil_steps=100;equil_rounds=10;alphas=[0,1,2,3,4.5,8];loops=100") +nb_export( + TARGET tutorial_fe SUFFIX "3" FILE "ferrofluid_part3.ipynb" HTML_RUN + VAR_SUBST + "equil_steps=100;equil_rounds=10;alphas=[0,0.5,1,2,4,8];loops=200;loops_m=100" +) diff --git a/doc/tutorials/11-ferrofluid/NotesForTutor.md b/doc/tutorials/ferrofluid/NotesForTutor.md similarity index 100% rename from doc/tutorials/11-ferrofluid/NotesForTutor.md rename to doc/tutorials/ferrofluid/NotesForTutor.md diff --git a/doc/tutorials/11-ferrofluid/11-ferrofluid_part1.ipynb b/doc/tutorials/ferrofluid/ferrofluid_part1.ipynb similarity index 100% rename from doc/tutorials/11-ferrofluid/11-ferrofluid_part1.ipynb rename to doc/tutorials/ferrofluid/ferrofluid_part1.ipynb diff --git a/doc/tutorials/11-ferrofluid/11-ferrofluid_part2.ipynb b/doc/tutorials/ferrofluid/ferrofluid_part2.ipynb similarity index 100% rename from doc/tutorials/11-ferrofluid/11-ferrofluid_part2.ipynb rename to doc/tutorials/ferrofluid/ferrofluid_part2.ipynb diff --git a/doc/tutorials/11-ferrofluid/11-ferrofluid_part3.ipynb b/doc/tutorials/ferrofluid/ferrofluid_part3.ipynb similarity index 100% rename from doc/tutorials/11-ferrofluid/11-ferrofluid_part3.ipynb rename to doc/tutorials/ferrofluid/ferrofluid_part3.ipynb diff --git a/doc/tutorials/11-ferrofluid/figures/Electro-Steric_Stabilization.jpg b/doc/tutorials/ferrofluid/figures/Electro-Steric_Stabilization.jpg similarity index 100% rename from doc/tutorials/11-ferrofluid/figures/Electro-Steric_Stabilization.jpg rename to doc/tutorials/ferrofluid/figures/Electro-Steric_Stabilization.jpg diff --git a/doc/tutorials/11-ferrofluid/figures/Ferrofluid_Magnet_under_glass_edit.jpg b/doc/tutorials/ferrofluid/figures/Ferrofluid_Magnet_under_glass_edit.jpg similarity index 100% rename from doc/tutorials/11-ferrofluid/figures/Ferrofluid_Magnet_under_glass_edit.jpg rename to doc/tutorials/ferrofluid/figures/Ferrofluid_Magnet_under_glass_edit.jpg diff --git a/doc/tutorials/11-ferrofluid/figures/headtotailconf.png b/doc/tutorials/ferrofluid/figures/headtotailconf.png similarity index 100% rename from doc/tutorials/11-ferrofluid/figures/headtotailconf.png rename to doc/tutorials/ferrofluid/figures/headtotailconf.png diff --git a/doc/tutorials/lattice_boltzmann/CMakeLists.txt b/doc/tutorials/lattice_boltzmann/CMakeLists.txt new file mode 100644 index 00000000000..ff82b83ee65 --- /dev/null +++ b/doc/tutorials/lattice_boltzmann/CMakeLists.txt @@ -0,0 +1,14 @@ +configure_tutorial_target( + TARGET tutorial_lb DEPENDS lattice_boltzmann_part1.ipynb + lattice_boltzmann_part2.ipynb lattice_boltzmann_part3.ipynb + lattice_boltzmann_part4.ipynb figures/latticeboltzmann-grid.png + figures/latticeboltzmann-momentumexchange.png) + +nb_export(TARGET tutorial_lb SUFFIX "1" FILE "lattice_boltzmann_part1.ipynb" + HTML_RUN) +nb_export(TARGET tutorial_lb SUFFIX "2" FILE "lattice_boltzmann_part2.ipynb" + HTML_RUN) +nb_export(TARGET tutorial_lb SUFFIX "3" FILE "lattice_boltzmann_part3.ipynb" + HTML_RUN VAR_SUBST "STEPS=200;BOX_L=16;N_MONOMERS=[6,8,10,12,14]") +nb_export(TARGET tutorial_lb SUFFIX "4" FILE "lattice_boltzmann_part4.ipynb" + HTML_RUN) diff --git a/doc/tutorials/04-lattice_boltzmann/NotesForTutor.md b/doc/tutorials/lattice_boltzmann/NotesForTutor.md similarity index 100% rename from doc/tutorials/04-lattice_boltzmann/NotesForTutor.md rename to doc/tutorials/lattice_boltzmann/NotesForTutor.md diff --git a/doc/tutorials/04-lattice_boltzmann/figures/latticeboltzmann-grid.png b/doc/tutorials/lattice_boltzmann/figures/latticeboltzmann-grid.png similarity index 100% rename from doc/tutorials/04-lattice_boltzmann/figures/latticeboltzmann-grid.png rename to doc/tutorials/lattice_boltzmann/figures/latticeboltzmann-grid.png diff --git a/doc/tutorials/04-lattice_boltzmann/figures/latticeboltzmann-momentumexchange.png b/doc/tutorials/lattice_boltzmann/figures/latticeboltzmann-momentumexchange.png similarity index 100% rename from doc/tutorials/04-lattice_boltzmann/figures/latticeboltzmann-momentumexchange.png rename to doc/tutorials/lattice_boltzmann/figures/latticeboltzmann-momentumexchange.png diff --git a/doc/tutorials/04-lattice_boltzmann/figures/poiseuille.png b/doc/tutorials/lattice_boltzmann/figures/poiseuille.png similarity index 100% rename from doc/tutorials/04-lattice_boltzmann/figures/poiseuille.png rename to doc/tutorials/lattice_boltzmann/figures/poiseuille.png diff --git a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part1.ipynb b/doc/tutorials/lattice_boltzmann/lattice_boltzmann_part1.ipynb similarity index 100% rename from doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part1.ipynb rename to doc/tutorials/lattice_boltzmann/lattice_boltzmann_part1.ipynb diff --git a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part2.ipynb b/doc/tutorials/lattice_boltzmann/lattice_boltzmann_part2.ipynb similarity index 100% rename from doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part2.ipynb rename to doc/tutorials/lattice_boltzmann/lattice_boltzmann_part2.ipynb diff --git a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb b/doc/tutorials/lattice_boltzmann/lattice_boltzmann_part3.ipynb similarity index 100% rename from doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part3.ipynb rename to doc/tutorials/lattice_boltzmann/lattice_boltzmann_part3.ipynb diff --git a/doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part4.ipynb b/doc/tutorials/lattice_boltzmann/lattice_boltzmann_part4.ipynb similarity index 100% rename from doc/tutorials/04-lattice_boltzmann/04-lattice_boltzmann_part4.ipynb rename to doc/tutorials/lattice_boltzmann/lattice_boltzmann_part4.ipynb diff --git a/doc/tutorials/lennard_jones/CMakeLists.txt b/doc/tutorials/lennard_jones/CMakeLists.txt new file mode 100644 index 00000000000..4ff0160df63 --- /dev/null +++ b/doc/tutorials/lennard_jones/CMakeLists.txt @@ -0,0 +1,5 @@ +configure_tutorial_target(TARGET tutorial_lj DEPENDS lennard_jones.ipynb + figures/lennard-jones-potential.png) + +nb_export(TARGET tutorial_lj SUFFIX "" FILE "lennard_jones.ipynb" HTML_RUN + VAR_SUBST) diff --git a/doc/tutorials/01-lennard_jones/NotesForTutor.md b/doc/tutorials/lennard_jones/NotesForTutor.md similarity index 100% rename from doc/tutorials/01-lennard_jones/NotesForTutor.md rename to doc/tutorials/lennard_jones/NotesForTutor.md diff --git a/doc/tutorials/01-lennard_jones/figures/lennard-jones-potential.png b/doc/tutorials/lennard_jones/figures/lennard-jones-potential.png similarity index 100% rename from doc/tutorials/01-lennard_jones/figures/lennard-jones-potential.png rename to doc/tutorials/lennard_jones/figures/lennard-jones-potential.png diff --git a/doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb b/doc/tutorials/lennard_jones/lennard_jones.ipynb similarity index 100% rename from doc/tutorials/01-lennard_jones/01-lennard_jones.ipynb rename to doc/tutorials/lennard_jones/lennard_jones.ipynb diff --git a/doc/tutorials/05-raspberry_electrophoresis/CMakeLists.txt b/doc/tutorials/raspberry_electrophoresis/CMakeLists.txt similarity index 67% rename from doc/tutorials/05-raspberry_electrophoresis/CMakeLists.txt rename to doc/tutorials/raspberry_electrophoresis/CMakeLists.txt index c2caa92c22c..e2d0b6442bb 100644 --- a/doc/tutorials/05-raspberry_electrophoresis/CMakeLists.txt +++ b/doc/tutorials/raspberry_electrophoresis/CMakeLists.txt @@ -1,14 +1,14 @@ configure_tutorial_target( - TARGET tutorial_05 DEPENDS 05-raspberry_electrophoresis.ipynb + TARGET tutorial_eph DEPENDS raspberry_electrophoresis.ipynb figures/raspberry_snapshot.png posVsTime_sample.dat) nb_export( TARGET - tutorial_05 + tutorial_eph SUFFIX "" FILE - 05-raspberry_electrophoresis.ipynb + raspberry_electrophoresis.ipynb HTML_RUN VAR_SUBST "num_iterations=20;num_steps_per_iteration=20;'trajectory_file=\"posVsTime_sample.dat\"'" diff --git a/doc/tutorials/05-raspberry_electrophoresis/figures/raspberry_snapshot.pdf b/doc/tutorials/raspberry_electrophoresis/figures/raspberry_snapshot.pdf similarity index 100% rename from doc/tutorials/05-raspberry_electrophoresis/figures/raspberry_snapshot.pdf rename to doc/tutorials/raspberry_electrophoresis/figures/raspberry_snapshot.pdf diff --git a/doc/tutorials/05-raspberry_electrophoresis/figures/raspberry_snapshot.png b/doc/tutorials/raspberry_electrophoresis/figures/raspberry_snapshot.png similarity index 100% rename from doc/tutorials/05-raspberry_electrophoresis/figures/raspberry_snapshot.png rename to doc/tutorials/raspberry_electrophoresis/figures/raspberry_snapshot.png diff --git a/doc/tutorials/05-raspberry_electrophoresis/posVsTime_sample.dat b/doc/tutorials/raspberry_electrophoresis/posVsTime_sample.dat similarity index 100% rename from doc/tutorials/05-raspberry_electrophoresis/posVsTime_sample.dat rename to doc/tutorials/raspberry_electrophoresis/posVsTime_sample.dat diff --git a/doc/tutorials/05-raspberry_electrophoresis/05-raspberry_electrophoresis.ipynb b/doc/tutorials/raspberry_electrophoresis/raspberry_electrophoresis.ipynb similarity index 100% rename from doc/tutorials/05-raspberry_electrophoresis/05-raspberry_electrophoresis.ipynb rename to doc/tutorials/raspberry_electrophoresis/raspberry_electrophoresis.ipynb diff --git a/doc/tutorials/visualization/CMakeLists.txt b/doc/tutorials/visualization/CMakeLists.txt new file mode 100644 index 00000000000..5edd599ffcb --- /dev/null +++ b/doc/tutorials/visualization/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_tutorial_target(TARGET tutorial_viz DEPENDS visualization.ipynb) + +nb_export(TARGET tutorial_viz SUFFIX "" FILE "visualization.ipynb" HTML_RUN) diff --git a/doc/tutorials/08-visualization/08-visualization.ipynb b/doc/tutorials/visualization/visualization.ipynb similarity index 100% rename from doc/tutorials/08-visualization/08-visualization.ipynb rename to doc/tutorials/visualization/visualization.ipynb diff --git a/testsuite/scripts/tutorials/CMakeLists.txt b/testsuite/scripts/tutorials/CMakeLists.txt index c9843de5929..03a862c1906 100644 --- a/testsuite/scripts/tutorials/CMakeLists.txt +++ b/testsuite/scripts/tutorials/CMakeLists.txt @@ -3,15 +3,15 @@ function(TUTORIAL_TEST) set(tutorials_tests ${tutorials_tests} ${TEST_FILE_CONFIGURED} PARENT_SCOPE) endfunction(TUTORIAL_TEST) -# configure Python modules importlib_wrapper.py and html_runner.py -configure_file(test_html_runner.py ${CMAKE_CURRENT_BINARY_DIR}) +# configure Python modules importlib_wrapper.py and convert.py +configure_file(test_convert.py ${CMAKE_CURRENT_BINARY_DIR}) add_test(importlib_wrapper ${CMAKE_BINARY_DIR}/pypresso ${PYPRESSO_OPTIONS} ${TEST_FILE_CONFIGURED_IMPORTLIB_WRAPPER}) -add_test(html_runner ${CMAKE_BINARY_DIR}/pypresso ${PYPRESSO_OPTIONS} - ${CMAKE_CURRENT_BINARY_DIR}/test_html_runner.py) +add_test(convert ${CMAKE_BINARY_DIR}/pypresso ${PYPRESSO_OPTIONS} + ${CMAKE_CURRENT_BINARY_DIR}/test_convert.py) set_tests_properties(importlib_wrapper PROPERTIES FIXTURES_SETUP IMPORTLIB_WRAPPER) -set_tests_properties(html_runner PROPERTIES FIXTURES_SETUP IMPORTLIB_WRAPPER) +set_tests_properties(convert PROPERTIES FIXTURES_SETUP IMPORTLIB_WRAPPER) set(tutorials_tests ${tutorials_tests} ${TEST_FILE_CONFIGURED_IMPORTLIB_WRAPPER} PARENT_SCOPE) configure_file(../importlib_wrapper.py @@ -25,24 +25,24 @@ add_custom_target( COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/doc/tutorials ${TUTORIALS_DIR} DEPENDS tutorials_python) -tutorial_test(FILE test_01-lennard_jones.py) -tutorial_test(FILE test_02-charged_system-1.py) -tutorial_test(FILE test_04-lattice_boltzmann_part2.py) -tutorial_test(FILE test_04-lattice_boltzmann_part3.py SUFFIX rouse) -tutorial_test(FILE test_04-lattice_boltzmann_part3.py SUFFIX zimm LABELS "gpu") -tutorial_test(FILE test_04-lattice_boltzmann_part4.py LABELS "gpu") -tutorial_test(FILE test_05-raspberry_electrophoresis.py LABELS "gpu") -tutorial_test(FILE test_06-active_matter__flow_field.py LABELS "gpu") -tutorial_test(FILE test_06-active_matter__rectification_geometry.py) -tutorial_test(FILE test_06-active_matter__enhanced_diffusion.py) -tutorial_test(FILE test_06-active_matter__rectification_simulation.py) -tutorial_test(FILE test_07-electrokinetics.py LABELS "gpu") -tutorial_test(FILE test_08-visualization.py) -tutorial_test(FILE test_11-ferrofluid_1.py) -tutorial_test(FILE test_11-ferrofluid_2.py) -tutorial_test(FILE test_11-ferrofluid_3.py) -tutorial_test(FILE test_12-constant_pH__ideal.py) -tutorial_test(FILE test_12-constant_pH__interactions.py) +tutorial_test(FILE test_lennard_jones.py) +tutorial_test(FILE test_charged_system-1.py) +tutorial_test(FILE test_lattice_boltzmann_part2.py) +tutorial_test(FILE test_lattice_boltzmann_part3.py SUFFIX rouse) +tutorial_test(FILE test_lattice_boltzmann_part3.py SUFFIX zimm LABELS "gpu") +tutorial_test(FILE test_lattice_boltzmann_part4.py LABELS "gpu") +tutorial_test(FILE test_raspberry_electrophoresis.py LABELS "gpu") +tutorial_test(FILE test_active_matter__flow_field.py LABELS "gpu") +tutorial_test(FILE test_active_matter__rectification_geometry.py) +tutorial_test(FILE test_active_matter__enhanced_diffusion.py) +tutorial_test(FILE test_active_matter__rectification_simulation.py) +tutorial_test(FILE test_electrokinetics.py LABELS "gpu") +tutorial_test(FILE test_visualization.py) +tutorial_test(FILE test_ferrofluid_1.py) +tutorial_test(FILE test_ferrofluid_2.py) +tutorial_test(FILE test_ferrofluid_3.py) +tutorial_test(FILE test_constant_pH__ideal.py) +tutorial_test(FILE test_constant_pH__interactions.py) add_custom_target( check_tutorials COMMAND ${CMAKE_CTEST_COMMAND} --timeout ${TEST_TIMEOUT} diff --git a/testsuite/scripts/tutorials/test_06-active_matter__enhanced_diffusion.py b/testsuite/scripts/tutorials/test_active_matter__enhanced_diffusion.py similarity index 94% rename from testsuite/scripts/tutorials/test_06-active_matter__enhanced_diffusion.py rename to testsuite/scripts/tutorials/test_active_matter__enhanced_diffusion.py index 5fc48bfeb44..7bb011794f7 100644 --- a/testsuite/scripts/tutorials/test_06-active_matter__enhanced_diffusion.py +++ b/testsuite/scripts/tutorials/test_active_matter__enhanced_diffusion.py @@ -20,7 +20,7 @@ import os tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/06-active_matter/solutions/enhanced_diffusion.py", + "@TUTORIALS_DIR@/active_matter/solutions/enhanced_diffusion.py", cmd_arguments=[5.0], SAMP_STEPS=500, SAMP_LENGTH=100) diff --git a/testsuite/scripts/tutorials/test_06-active_matter__flow_field.py b/testsuite/scripts/tutorials/test_active_matter__flow_field.py similarity index 94% rename from testsuite/scripts/tutorials/test_06-active_matter__flow_field.py rename to testsuite/scripts/tutorials/test_active_matter__flow_field.py index 9ca1927494b..7aea70718c2 100644 --- a/testsuite/scripts/tutorials/test_06-active_matter__flow_field.py +++ b/testsuite/scripts/tutorials/test_active_matter__flow_field.py @@ -20,7 +20,7 @@ import os tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/06-active_matter/solutions/flow_field.py", gpu=True, + "@TUTORIALS_DIR@/active_matter/solutions/flow_field.py", gpu=True, cmd_arguments=["pusher", 5.0], PROD_STEPS=100, PROD_LENGTH=50) diff --git a/testsuite/scripts/tutorials/test_06-active_matter__rectification_geometry.py b/testsuite/scripts/tutorials/test_active_matter__rectification_geometry.py similarity index 93% rename from testsuite/scripts/tutorials/test_06-active_matter__rectification_geometry.py rename to testsuite/scripts/tutorials/test_active_matter__rectification_geometry.py index a1ed8f7db96..ef3134e0295 100644 --- a/testsuite/scripts/tutorials/test_06-active_matter__rectification_geometry.py +++ b/testsuite/scripts/tutorials/test_active_matter__rectification_geometry.py @@ -20,7 +20,7 @@ import os tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/06-active_matter/solutions/rectification_geometry.py") + "@TUTORIALS_DIR@/active_matter/solutions/rectification_geometry.py") @skipIfMissingFeatures diff --git a/testsuite/scripts/tutorials/test_06-active_matter__rectification_simulation.py b/testsuite/scripts/tutorials/test_active_matter__rectification_simulation.py similarity index 95% rename from testsuite/scripts/tutorials/test_06-active_matter__rectification_simulation.py rename to testsuite/scripts/tutorials/test_active_matter__rectification_simulation.py index c3efcb9bed7..5a6ace54591 100644 --- a/testsuite/scripts/tutorials/test_06-active_matter__rectification_simulation.py +++ b/testsuite/scripts/tutorials/test_active_matter__rectification_simulation.py @@ -21,7 +21,7 @@ import numpy as np tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/06-active_matter/solutions/rectification_simulation.py", + "@TUTORIALS_DIR@/active_matter/solutions/rectification_simulation.py", cmd_arguments=[6.0], PROD_STEPS=100, PROD_LENGTH=150) diff --git a/testsuite/scripts/tutorials/test_02-charged_system-1.py b/testsuite/scripts/tutorials/test_charged_system-1.py similarity index 88% rename from testsuite/scripts/tutorials/test_02-charged_system-1.py rename to testsuite/scripts/tutorials/test_charged_system-1.py index c2c77ae5656..525d894962f 100644 --- a/testsuite/scripts/tutorials/test_02-charged_system-1.py +++ b/testsuite/scripts/tutorials/test_charged_system-1.py @@ -19,9 +19,8 @@ import importlib_wrapper tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/02-charged_system/02-charged_system-1.py", - N_SAMPLES=2, STEPS_PER_SAMPLE=2, WARMUP_STEPS=1000, - N_SAMPLES_SALT=200) + "@TUTORIALS_DIR@/charged_system/charged_system-1.py", N_SAMPLES=2, + STEPS_PER_SAMPLE=2, WARMUP_STEPS=1000, N_SAMPLES_SALT=200) @skipIfMissingFeatures diff --git a/testsuite/scripts/tutorials/test_12-constant_pH__ideal.py b/testsuite/scripts/tutorials/test_constant_pH__ideal.py similarity index 94% rename from testsuite/scripts/tutorials/test_12-constant_pH__ideal.py rename to testsuite/scripts/tutorials/test_constant_pH__ideal.py index fcb09712930..e92f3d755a2 100644 --- a/testsuite/scripts/tutorials/test_12-constant_pH__ideal.py +++ b/testsuite/scripts/tutorials/test_constant_pH__ideal.py @@ -27,8 +27,7 @@ "Python module pint not available, skipping test!") else: tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/12-constant_pH/12-constant_pH.py", - script_suffix="ideal") + "@TUTORIALS_DIR@/constant_pH/constant_pH.py", script_suffix="ideal") @skipIfMissingFeatures diff --git a/testsuite/scripts/tutorials/test_12-constant_pH__interactions.py b/testsuite/scripts/tutorials/test_constant_pH__interactions.py similarity index 91% rename from testsuite/scripts/tutorials/test_12-constant_pH__interactions.py rename to testsuite/scripts/tutorials/test_constant_pH__interactions.py index b4f6150c736..7eacf71affc 100644 --- a/testsuite/scripts/tutorials/test_12-constant_pH__interactions.py +++ b/testsuite/scripts/tutorials/test_constant_pH__interactions.py @@ -26,9 +26,8 @@ "Python module pint not available, skipping test!") else: tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/12-constant_pH/12-constant_pH.py", - USE_WCA=True, USE_ELECTROSTATICS=True, NUM_PHS=3, NUM_SAMPLES=2, PROB_REACTION=1.0, - script_suffix="interactions") + "@TUTORIALS_DIR@/constant_pH/constant_pH.py", script_suffix="interactions", + USE_WCA=True, USE_ELECTROSTATICS=True, NUM_PHS=3, NUM_SAMPLES=2, PROB_REACTION=1.0) @skipIfMissingFeatures diff --git a/testsuite/scripts/tutorials/test_html_runner.py b/testsuite/scripts/tutorials/test_convert.py similarity index 91% rename from testsuite/scripts/tutorials/test_html_runner.py rename to testsuite/scripts/tutorials/test_convert.py index fae50040d41..1386ab93826 100644 --- a/testsuite/scripts/tutorials/test_html_runner.py +++ b/testsuite/scripts/tutorials/test_convert.py @@ -22,7 +22,7 @@ import traceback sys.path.insert(0, '@CMAKE_BINARY_DIR@/doc/tutorials') -import html_runner +import convert def skipIfMissingModules(x): return x @@ -40,9 +40,9 @@ def skipIfMissingModules(x): return x class HtmlRunner(ut.TestCase): """ - Test the :file:`doc/tutorials/html_runner.py` script. A new Jupyter + Test the :file:`doc/tutorials/convert.py` script. A new Jupyter notebook and a new python script are created, and both are supplied to - html_runner.py, which will include the python script in a new code cell, + convert.py, which will include the python script in a new code cell, substitute global variables, run the code and then save the result in a new notebook. The input notebook contains IPython magic commands and imports matplotlib and an ESPResSo visualizer, all of which require @@ -88,13 +88,13 @@ class HtmlRunner(ut.TestCase): def failed_to_run(self, cmd): traceback.print_exc() self.fail('Could not run @CMAKE_BINARY_DIR@/pypresso ' - '@CMAKE_BINARY_DIR@/doc/tutorials/html_runner.py ' + + '@CMAKE_BINARY_DIR@/doc/tutorials/convert.py ' + ' '.join(cmd)) def test_html_wrapper(self): - f_input = '@CMAKE_CURRENT_BINARY_DIR@/test_html_runner_notebook.ipynb' - f_output = '@CMAKE_CURRENT_BINARY_DIR@/test_html_runner_notebook.run.ipynb' - f_script = '@CMAKE_CURRENT_BINARY_DIR@/test_html_runner_script.py' + f_input = '@CMAKE_CURRENT_BINARY_DIR@/test_convert_notebook.ipynb' + f_output = '@CMAKE_CURRENT_BINARY_DIR@/test_convert_notebook.run.ipynb' + f_script = '@CMAKE_CURRENT_BINARY_DIR@/test_convert_script.py' # setup if os.path.isfile(f_output): os.remove(f_output) @@ -115,7 +115,7 @@ def test_html_wrapper(self): '--substitutions', 'global_var=20', '--execute'] try: - args = html_runner.parser.parse_args(cmd) + args = convert.parser.parse_args(cmd) args.callback(args) except BaseException: self.failed_to_run(cmd) @@ -148,13 +148,13 @@ def test_html_wrapper(self): # check the external script was correctly inserted self.assertEqual(nb_output['cells'][3]['cell_type'], 'markdown') self.assertEqual(nb_output['cells'][3]['source'], - 'Solution from test_html_runner_script.py') + 'Solution from test_convert_script.py') self.assertEqual(nb_output['cells'][4]['cell_type'], 'code') self.assertEqual(nb_output['cells'][4]['source'], 'global_var = 20') def test_exercise2_plugin(self): - f_input = '@CMAKE_CURRENT_BINARY_DIR@/test_html_runner_exercise2.ipynb' - f_output = '@CMAKE_CURRENT_BINARY_DIR@/test_html_runner_exercise2.run.ipynb' + f_input = '@CMAKE_CURRENT_BINARY_DIR@/test_convert_exercise2.ipynb' + f_output = '@CMAKE_CURRENT_BINARY_DIR@/test_convert_exercise2.run.ipynb' # setup if os.path.isfile(f_output): os.remove(f_output) @@ -194,7 +194,7 @@ def test_exercise2_plugin(self): '--substitutions', 'global_var=20', '--exercise2', '--remove-empty-cells'] try: - args = html_runner.parser.parse_args(cmd) + args = convert.parser.parse_args(cmd) args.callback(args) except BaseException: self.failed_to_run(cmd) @@ -229,7 +229,7 @@ def test_exercise2_plugin(self): self.assertEqual(next(cells, 'EOF'), 'EOF') def test_exercise2_conversion(self): - f_input = '@CMAKE_CURRENT_BINARY_DIR@/test_html_runner_exercise2_conversion.ipynb' + f_input = '@CMAKE_CURRENT_BINARY_DIR@/test_convert_exercise2_conversion.ipynb' # setup with open(f_input, 'w', encoding='utf-8') as f: nb = nbformat.v4.new_notebook(metadata=self.nb_metadata) @@ -247,7 +247,7 @@ def test_exercise2_conversion(self): # run command and check for errors cmd = ['exercise2', '--to-py', f_input] try: - args = html_runner.parser.parse_args(cmd) + args = convert.parser.parse_args(cmd) args.callback(args) except BaseException: self.failed_to_run(cmd) @@ -268,7 +268,7 @@ def test_exercise2_conversion(self): # run command and check for errors cmd = ['exercise2', '--to-md', f_input] try: - args = html_runner.parser.parse_args(cmd) + args = convert.parser.parse_args(cmd) args.callback(args) except BaseException: self.failed_to_run(cmd) @@ -289,7 +289,7 @@ def test_exercise2_conversion(self): @skipIfMissingModules def test_exercise2_autopep8(self): - f_input = '@CMAKE_CURRENT_BINARY_DIR@/test_html_runner_exercise2_autopep8.ipynb' + f_input = '@CMAKE_CURRENT_BINARY_DIR@/test_convert_exercise2_autopep8.ipynb' # setup with open(f_input, 'w', encoding='utf-8') as f: nb = nbformat.v4.new_notebook(metadata=self.nb_metadata) @@ -306,7 +306,7 @@ def test_exercise2_autopep8(self): # run command and check for errors cmd = ['exercise2', '--pep8', f_input] try: - args = html_runner.parser.parse_args(cmd) + args = convert.parser.parse_args(cmd) args.callback(args) except BaseException: self.failed_to_run(cmd) diff --git a/testsuite/scripts/tutorials/test_07-electrokinetics.py b/testsuite/scripts/tutorials/test_electrokinetics.py similarity index 92% rename from testsuite/scripts/tutorials/test_07-electrokinetics.py rename to testsuite/scripts/tutorials/test_electrokinetics.py index 4e3414da01e..4db6f637866 100644 --- a/testsuite/scripts/tutorials/test_07-electrokinetics.py +++ b/testsuite/scripts/tutorials/test_electrokinetics.py @@ -28,12 +28,12 @@ # To work around it, the eof_analytical.py script is imported # directly without changes using importlib.import_module(). tutorial_simulation, skipIfMissingFeatures_simulation = iw.configure_and_import( - "@TUTORIALS_DIR@/07-electrokinetics/07-electrokinetics.py", + "@TUTORIALS_DIR@/electrokinetics/electrokinetics.py", gpu=True, integration_length=600, dt=0.5) -sys.path.insert(0, "@TUTORIALS_DIR@/07-electrokinetics/scripts/") +sys.path.insert(0, "@TUTORIALS_DIR@/electrokinetics/scripts/") tutorial_analytical = iw.importlib.import_module("eof_analytical") tutorial_plot, skipIfMissingFeatures_plot = iw.configure_and_import( - "@TUTORIALS_DIR@/07-electrokinetics/scripts/plot.py", + "@TUTORIALS_DIR@/electrokinetics/scripts/plot.py", move_to_script_dir=False) diff --git a/testsuite/scripts/tutorials/test_11-ferrofluid_1.py b/testsuite/scripts/tutorials/test_ferrofluid_1.py similarity index 95% rename from testsuite/scripts/tutorials/test_11-ferrofluid_1.py rename to testsuite/scripts/tutorials/test_ferrofluid_1.py index 2cc2274cd80..185d096559e 100644 --- a/testsuite/scripts/tutorials/test_11-ferrofluid_1.py +++ b/testsuite/scripts/tutorials/test_ferrofluid_1.py @@ -21,7 +21,7 @@ tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/11-ferrofluid/11-ferrofluid_part1.py", + "@TUTORIALS_DIR@/ferrofluid/ferrofluid_part1.py", EQUIL_STEPS=200, EQUIL_ROUNDS=10) diff --git a/testsuite/scripts/tutorials/test_11-ferrofluid_2.py b/testsuite/scripts/tutorials/test_ferrofluid_2.py similarity index 96% rename from testsuite/scripts/tutorials/test_11-ferrofluid_2.py rename to testsuite/scripts/tutorials/test_ferrofluid_2.py index 53a906f751f..fa6ecc00f23 100644 --- a/testsuite/scripts/tutorials/test_11-ferrofluid_2.py +++ b/testsuite/scripts/tutorials/test_ferrofluid_2.py @@ -21,7 +21,7 @@ tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/11-ferrofluid/11-ferrofluid_part2.py", + "@TUTORIALS_DIR@/ferrofluid/ferrofluid_part2.py", equil_steps=200, equil_rounds=10, loops=500, alphas=[0.5]) diff --git a/testsuite/scripts/tutorials/test_11-ferrofluid_3.py b/testsuite/scripts/tutorials/test_ferrofluid_3.py similarity index 96% rename from testsuite/scripts/tutorials/test_11-ferrofluid_3.py rename to testsuite/scripts/tutorials/test_ferrofluid_3.py index 99dd41d38ac..d6f5f813fd1 100644 --- a/testsuite/scripts/tutorials/test_11-ferrofluid_3.py +++ b/testsuite/scripts/tutorials/test_ferrofluid_3.py @@ -25,7 +25,7 @@ tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/11-ferrofluid/11-ferrofluid_part3.py", + "@TUTORIALS_DIR@/ferrofluid/ferrofluid_part3.py", equil_steps=200, equil_rounds=10, loops=250, alphas=[0, 0.5]) diff --git a/testsuite/scripts/tutorials/test_04-lattice_boltzmann_part2.py b/testsuite/scripts/tutorials/test_lattice_boltzmann_part2.py similarity index 95% rename from testsuite/scripts/tutorials/test_04-lattice_boltzmann_part2.py rename to testsuite/scripts/tutorials/test_lattice_boltzmann_part2.py index 805b5445459..b39bff97a74 100644 --- a/testsuite/scripts/tutorials/test_04-lattice_boltzmann_part2.py +++ b/testsuite/scripts/tutorials/test_lattice_boltzmann_part2.py @@ -21,7 +21,7 @@ import scipy.optimize tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/04-lattice_boltzmann/04-lattice_boltzmann_part2.py") + "@TUTORIALS_DIR@/lattice_boltzmann/lattice_boltzmann_part2.py") @skipIfMissingFeatures diff --git a/testsuite/scripts/tutorials/test_04-lattice_boltzmann_part3.py b/testsuite/scripts/tutorials/test_lattice_boltzmann_part3.py similarity index 97% rename from testsuite/scripts/tutorials/test_04-lattice_boltzmann_part3.py rename to testsuite/scripts/tutorials/test_lattice_boltzmann_part3.py index 0307d6828ac..5d539e1ba07 100644 --- a/testsuite/scripts/tutorials/test_04-lattice_boltzmann_part3.py +++ b/testsuite/scripts/tutorials/test_lattice_boltzmann_part3.py @@ -25,7 +25,7 @@ params = {'LOOPS': 2000, 'POLYMER_MODEL': 'Zimm', 'gpu': True} tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/04-lattice_boltzmann/04-lattice_boltzmann_part3.py", + "@TUTORIALS_DIR@/lattice_boltzmann/lattice_boltzmann_part3.py", script_suffix="@TEST_SUFFIX@", **params) diff --git a/testsuite/scripts/tutorials/test_04-lattice_boltzmann_part4.py b/testsuite/scripts/tutorials/test_lattice_boltzmann_part4.py similarity index 94% rename from testsuite/scripts/tutorials/test_04-lattice_boltzmann_part4.py rename to testsuite/scripts/tutorials/test_lattice_boltzmann_part4.py index eb2706efb8d..c78f5e0155d 100644 --- a/testsuite/scripts/tutorials/test_04-lattice_boltzmann_part4.py +++ b/testsuite/scripts/tutorials/test_lattice_boltzmann_part4.py @@ -21,7 +21,7 @@ tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/04-lattice_boltzmann/04-lattice_boltzmann_part4.py", + "@TUTORIALS_DIR@/lattice_boltzmann/lattice_boltzmann_part4.py", gpu=True) diff --git a/testsuite/scripts/tutorials/test_01-lennard_jones.py b/testsuite/scripts/tutorials/test_lennard_jones.py similarity index 94% rename from testsuite/scripts/tutorials/test_01-lennard_jones.py rename to testsuite/scripts/tutorials/test_lennard_jones.py index 37baca155b4..87ae00ef810 100644 --- a/testsuite/scripts/tutorials/test_01-lennard_jones.py +++ b/testsuite/scripts/tutorials/test_lennard_jones.py @@ -20,7 +20,7 @@ import numpy as np tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/01-lennard_jones/01-lennard_jones.py", N_SAMPLES=300) + "@TUTORIALS_DIR@/lennard_jones/lennard_jones.py", N_SAMPLES=300) @skipIfMissingFeatures diff --git a/testsuite/scripts/tutorials/test_05-raspberry_electrophoresis.py b/testsuite/scripts/tutorials/test_raspberry_electrophoresis.py similarity index 95% rename from testsuite/scripts/tutorials/test_05-raspberry_electrophoresis.py rename to testsuite/scripts/tutorials/test_raspberry_electrophoresis.py index 9c2e715443e..85176a36151 100644 --- a/testsuite/scripts/tutorials/test_05-raspberry_electrophoresis.py +++ b/testsuite/scripts/tutorials/test_raspberry_electrophoresis.py @@ -20,7 +20,7 @@ import numpy as np tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/05-raspberry_electrophoresis/05-raspberry_electrophoresis.py", + "@TUTORIALS_DIR@/raspberry_electrophoresis/raspberry_electrophoresis.py", gpu=True, box_l=20., E=0.25, num_iterations=200, num_steps_per_iteration=250) diff --git a/testsuite/scripts/tutorials/test_08-visualization.py b/testsuite/scripts/tutorials/test_visualization.py similarity index 95% rename from testsuite/scripts/tutorials/test_08-visualization.py rename to testsuite/scripts/tutorials/test_visualization.py index 864e69c76d8..77db2fac868 100644 --- a/testsuite/scripts/tutorials/test_08-visualization.py +++ b/testsuite/scripts/tutorials/test_visualization.py @@ -27,7 +27,7 @@ def disable_visualizer_GUI(code): tutorial, skipIfMissingFeatures = importlib_wrapper.configure_and_import( - "@TUTORIALS_DIR@/08-visualization/08-visualization.py", + "@TUTORIALS_DIR@/visualization/visualization.py", substitutions=disable_visualizer_GUI, int_n_times=5, int_steps=100, matplotlib_notebook=False) From 71e035081266c12ee1c995ffaca247218777a4a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Grad?= Date: Fri, 13 Nov 2020 22:51:44 +0100 Subject: [PATCH 14/14] tutorials: Tag difficulty level --- doc/sphinx/introduction.rst | 4 ++-- doc/tutorials/Readme.rst | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/doc/sphinx/introduction.rst b/doc/sphinx/introduction.rst index ae29b93f426..765416e4750 100644 --- a/doc/sphinx/introduction.rst +++ b/doc/sphinx/introduction.rst @@ -292,13 +292,13 @@ directory :file:`/doc/tutorials` or `online on GitHub