{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "Weaving a transformable curved surface from catenoid to helicoid."
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "<div class=\"videoWrapper\">\n",
    "  <!-- Copy & Pasted from YouTube -->\n",
    "  <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Gp6XkPLCw7s\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>\n",
    "</div>"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Load packages"
   ],
   "metadata": {}
  },
  {
   "outputs": [],
   "cell_type": "code",
   "source": [
    "using IntervalSets\n",
    "using BasicBSpline\n",
    "using StaticArrays\n",
    "using ElasticSurfaceEmbedding"
   ],
   "metadata": {},
   "execution_count": 1
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Define the shape of the surface (non-periodic direction)"
   ],
   "metadata": {}
  },
  {
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "Da (generic function with 1 method)"
     },
     "metadata": {},
     "execution_count": 2
    }
   ],
   "cell_type": "code",
   "source": [
    "ElasticSurfaceEmbedding.๐’‘โ‚โ‚€โ‚Ž(uยน,uยฒ) = SVector(cos(uยฒ)*cosh(uยน),sin(uยฒ)*cosh(uยน),uยน)\n",
    "n = 9\n",
    "Da(n) = (-ฯ€/2..ฯ€/2,-ฯ€/(4n)..ฯ€/(4n))"
   ],
   "metadata": {},
   "execution_count": 2
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Compute the shape of the embeddings"
   ],
   "metadata": {}
  },
  {
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "โ”Œ Info: Strain - domain: [-1.5707963267948966, 1.5707963267948966]ร—[-0.08726646259971647, 0.08726646259971647]\n",
      "โ”” Predicted: (min: -0.0025384784982225715, max: 0.0012692392491112856)\n"
     ]
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "1: Initial state - domain: [-1.5707963267948966, 1.5707963267948966]ร—[-0.08726646259971647, 0.08726646259971647]\nโ””โ”€2: Newton onestep - residual norm: 4.2211e-02, ฮ”a norm: 5.1228e-02, computation time: 20ms\n  โ””โ”€3: Newton onestep - residual norm: 2.8880e-03, ฮ”a norm: 3.1991e-02, computation time: 20ms\n    โ””โ”€4: Newton onestep - residual norm: 1.0971e-04, ฮ”a norm: 1.8307e-04, computation time: 20ms\n      โ””โ”€5: Newton onestep - residual norm: 3.2473e-08, ฮ”a norm: 2.0995e-07, computation time: 20ms\n        โ””โ”€6: Newton onestep - residual norm: 1.0884e-14, ฮ”a norm: 2.8798e-12, computation time: 20ms\n          โ””โ”€7: Refinement - pโ‚Š:(0, 1), kโ‚Š:([-1.4922565104551517, -1.335176877775662, -1.1780972450961724, -1.0210176124166828, -0.8639379797371931, -0.7068583470577035, -0.5497787143782138, -0.3926990816987242, -0.2356194490192346, -0.07853981633974495, 0.0785398163397447, 0.23561944901923432, 0.392699081698724, 0.5497787143782137, 0.7068583470577035, 0.8639379797371931, 1.0210176124166828, 1.1780972450961726, 1.3351768777756625, 1.492256510455152], [0.0])\n            โ””โ”€8: Newton onestep - residual norm: 2.1770e-03, ฮ”a norm: 7.0321e-04, computation time: 135ms\n              โ””โ”€9: ๐Ÿ“Œ Newton onestep - residual norm: 2.7904e-06, ฮ”a norm: 1.7402e-06, computation time: 136ms\n",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyEAAAGRCAIAAAD92Sv4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAIABJREFUeAHswXm7nWdhHvr7ft7nXcPea689b422BmNLGIvYxsZOCGCICwkhUMjQNklpCJzmn3OdfoR+kBNKmkA6MMUUaEzAA2BbGEs22MaDbMuyZM1be95rrXd47mOteAcpYK72ulZ6tUf37xfvGYKZmZmZjchDDz0U77nnnn//7/89zMzMzGx0IszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQizMzMzGzUIszMzMxs1CLMzMzMbNQirmF1Xa+vr+d53m63U0qSYoww+99MVVUkQwi9Xq8sy06nk2UZzMzsf28R1ypJTzzxxJe//OUd27d/9KMfPXL06GAw+PCHP7xjxw4AkpaWli5durRjx47x8XGY/S+xvr5+9uzZmZmZ6elpkgDOnDlz//33N5vNd91++3/7xjfOnj37+7//+3feeSdJmJnZ/8YirlVlWR4+fPjIkSPjrdal11578tixsiyLs2c/fNddeafTz/O/+trXnnvhhQ/de+/vffzjrVYry/OQ58yyoiiOHj26uLj47ne/e35+Hlcoy3IwGLTb7SzLYNe8uq57vV6z2czzHFe4cOHC448/Pjs7e/vt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TU2NjY0iAuDC6dPDMWOSicRJJ530yCOP7D9wYOHChUEQgGpPawWI/gyYigD0xzjUKhE56aSTpk2bFgRBKpWaNHmyqjrnUCEiTRUg+v9QfX39lClTcJy2trarrrpKRIwxN77vfeVyub6+XkRARER/3hxqmLU2m82iwloLoj9LzjlU1NXVgYiI/jfhQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERETV5kBERERE1eZARERERNXmQERERPRnplAoHDhwoFgstra25nI5EcHrDA0NHThwIIqi0aNHZzIZEUHFwMDAgQMHAIwePbqhoQGAqg4MDPT09PT392cymTFjxiSTSQDe+6NHj5ZKJVRYa5ubm6213vtjx4719/eXSqV0Ot3c3ByGIY4TRVFvb28ymayvr8ebcCAiIiL6c9Lb2/uNb3zjiSeeEJHW1tYPfvCD8+fPFxEc59ChQ1/5ylfWrl0LYOLEiR/60IemTZsGYPfu3V/+8pc3bdoEYMaMGR/60IcmTJiwf//+z3/+85s3b/YVy5Yt+8u//MtRo0b19fXdfPPNmzdvTiaTAFpbWz//+c+PGTPm0KFDt95665YtW4rFYiKRWL58+XXXXZfL5VDhvX/ssce+8pWvnH/++TfeeKNzDm/EgYiIiOjPhqr+5Cc/+dnPfnbTTTd1dHTceeedd91111e+8pVcLodhcRw/8MADzz333Gc/+9nGxsbbbrvtm9/85m233eac+853vrN9+/bPf/7zInLLLbd85zvf+cQnPuG9nzt37rve9a6Wlpa1a9fedtttHR0d7373u6Mo2r1795IlS5YvXw4gkUjkcjkAqVTqggsuaG9vr6ure/rpp++6665JkyZdeumlqNi1a9d3v/vd7du379ixQ1XxJhyIiIiI/mwMDg6uXr164cKFS5cuDcNw1apVH/zgB7dt23bSSSdh2LFjxx577LGzzz570aJF1trLL7/89ttv37dvXzqdfvLJJ6+88soTTzwRwMqVK++7777rr79+7Nix733ve40xABobGx944IFXXnnFew/AGDNu3LgZM2YkK0QEQDabXbFiBSqy2ew//dM/7du3DxX5fP4HP/hBR0cH/jMORERERH82BgcH9+zZs2jRojAMAXR0dDjnXn311ZNOOgnDBgYG9u/fP2XKFGstgK6urmKxuHfv3ubm5t7e3ilTpogIgK6urmPHjvX09LS1tYkIKg4cOHDw4MHzzjvPGAOgXC7ff//9v/rVrxobGy+66KKlS5eGYQggjuMdO3YcOnRo7dq1iURi4cKFAFT117/+9aZNmz72sY/ddddd+KMciIiIiP4Ejh07duTIEVXFm0gmk6NHj7bW4jhRFBUKhXQ6jYogCMIwHBgYwHFKFel0GhXpdBrAwMBAMplU1XQ6jYp0Oq2qg4ODGNbT0/P1r3+9vb39vPPOE5FkMnnFFVeISBAEv/71rz/96U9/4QtfOPPMMwEUCoUf/ehHTzzxxJ49e84+++yJEycC2Lt373333XfxxRd3dnbiP+NAREREtcZ7vPACXnkF1dLejlNOQRhiWBRF99xzzze/+c04jvEmZs6c+Q//8A/t7e04jjHGOVcul1HhvY/jOAxDHMc5Z60tl8uoKJfLAMIKAOVyGRXlcllEwjBExZEjR+68887du3ffcsstbW1tANLp9KpVq4wxAM4666wbb7zxZz/72WmnnRYEQV1d3Y033nj11Vdv3LjxC1/4woMPPnjNNdfcf//9AGbNmnXgwIHBwUFrbU9Pz+jRo40xeB0HIiIiqjXe649+pN/4BqpEli+X//E/EIYYZq1dvHixr8CbaG9vz2QyGCmVSo0aNWrv3r3ee2PM4cOHC4VCW1sbjlNXV9fY2Lhv3z5VFZG9e/caY0aPHp3NZpPJ5L59+1Cxd+/eRCLR1NQE4OjRo3fdddeLL7548803z5kzR0QASAUqGhoa2traent7oygKgkBEGitaWloeeeSR9evXX3rppVu2bNm0adPf/M3feO83b97snKurq/vMZz7T2NiI13EgIiKiWqPqSyUdGECVSKFgVXEcEXlLBf6bGhoaTjnllKeeemrnzp0tLS2rV68eNWpUV1cXgHXr1h05cuSMM87IZrMnnnjik08+uXLlynQ6vXr16s7OznHjxiUSiTlz5jz22GPLli0D8Pjjj8+aNWvUqFEDAwNf+9rXfvnLX37iE58YN25cT09PMpmsr6/vr8hkMiKyadOmDRs2rFy5MgzDI0eOFAqFTCYjIjt37ty6deupp56ayWQ++tGP9vb2AigUCl/84hfr6+uvu+66+vp6vBEHIiIiqj0qEluLKjHGWFSHtfayyy5bv379xz/+8aampi1bttxwww2jR49W1ccff/yll1465ZRTstnsqlWrbrrppo985CN1dXU7d+788Ic/3NjYCOCaa6659dZbP/zhD4vIgQMHbrrppnQ6/cILL/z4xz/23t99993f+c53ACxfvvzaa6996aWXvvSlL2UyGRHZunVrR0fH2972NmvtunXrvv3tb+dyOQA7d+7M5XJvf/vbE4nE5MmTUZHP5ydMmNDQ0DBt2jTnHN6IAxEREdUaETXGW4tqMUZFBNXR2dl5++23P/PMM/39/e9973vnzZtnrQVwySWX9Pf319XVAZg1a9Ydd9zxzDPPlEqlv/qrv5o1a5aIADjllFPuvPPO5557DsDJJ588depUEeno6LjjjjtKpRKGjR8/3lo7Y8aM973vfTt27CiXy5dccsmCBQtaWloAnHLKKc657du3R1F00UUXnXTSSaNHj8ZxwjC89tprgyCw1uJNOBAREVHt8SKxMagSMQbVIyLjKzDSlClTMMwYM6kCI1lrp1fgOLlcbunSpXidhoaGZRUYKZvNLqvAm7DWnnDCCfijHIiIiKj2qDHeWlSJFwGN5EBERES1R0ViY1AlxhjQSA5ERERUe7yItxZV4o0BjeRAREREtUeNiY1BlTgR0EgOREREVHu8iDcGVeKNUREB/V8ciIiIqMYooCKxtagSbwxoJAciIiKqPWqMNwZV4o0BjeRAREREtceLxNaiSlQENJIDERER1R41xhuDKvHGgEZyICIiotqjIrG1qBJvDGgkByIiIqo9XsQbgyrxxqgI6DgOREREVHvUmNhaVImKgEZyICIiotrjRbwxqBJvDGgkByIiIqo9KhJbiyrxxoBGciAiIqLao8Z4Y1Al3hjQSA5ERERUe7xIbC2qREVAIzkQERFR7VFjvDGoEm+MioCO40BERES1R0Via1El3hjQSA5ERERUe7yINwZV4o0BjeRAREREtUeNia1FlagIaCQHIiIiqjUiXsQbgyrxxoBGciAiIqLaoyKxtagSbwxoJAciIiKqPWqMNwZV4o1REdBxHIiIiKj2eJHYWlSJioBGciAiIqLao8Z4Y1Al3hjQSA5ERERUe1TEG4Mq8caARnIgIiKi2uNFYmtRJWoMaCQHIiIiqj1qjLcWVeJFQCM5EBERUY1RwIvExqBKvDEqAjqOAxEREdUeFfHGoEq8MaCRHIiIiKj2qDGxtagSFQGN5EBERES1x4t4a1El3hjQSA5ERERUe9SY2BhUiTcGNJIDERER1R4V8cagSrwxoJEciIiIqPZ4kdhaVIk3RkVAx3EgIiKi2qPGeGtRJSoCGsmBiIiIao8XiY1BlXhjQCM5EBERUe1REW8MqsQbAxrJgYiIiGqPNya2FlWixoBGciAiIqLaoyLeWlSJF0FVee/7+/ujKKqvr08kEngjcRz39/fHcZzJZIIgwLAoivr6+gBkMhnnHIaVy+X+/n5jTENDg7UWw4rF4sDAgHOuoaHBGINhhUJhYGAgDMP6+npjDIbl8/nBwcFEIlFfXy8ieBMOREREVHvUmNgYVIk3RkVQJYVC4eGHH/7pT39aLBanT5/+nve8Z/z48RhpYGDgRz/60eOPPx7H8fz586+55prW1lYAvb29991339NPPw1g0aJFV111VS6XA3Do0KHvfve769evt9aeeeaZl19+eX19PYA9e/bcc889mzdvDsNwxYoVF110UTKZVNVt27bdc88927dvT6fTl1xyyfLly4MgUNWNGzfee++9e/fuzWazV1xxxRlnnGGtxRtxICIiotrjRbwxqBJvDKrnqaeeuuuuu975znd2dHTcfffdX/3qV2+55Za6ujoMU9Wf/vSnd99993vf+95cLvetb30riqIPf/jD1tof/vCH//zP/3z99deLyLe+9S1r7fXXXx/H8d133/3EE0/ccMMNfX19d999dyqVuuKKK/L5/Fe/+tVXXnnluuuu27Vr19e+9rVcLrd8+fK+vr4vfvGL/f3911xzzcaNG2+//fbm5uZFixZ1d3d/7nOfy2Qy73nPe55++unbbrtt9OjRs2bNwhtxICIiolojosbE1qJK1BhUST6ff/jhh+fMmXPttdemUikR+du//dudO3fOnDkTw/r7+x966KHTTz991apVQRD09/fffffdV199dSqVeuSRR84///y3v/3tAPbv3/9v//Zvl112WaFQ+MUvfvHud7/7kksuiaJo69atDz/88IoVK/bu3fvUU0998pOfPP/88wuFwsaNGx9++OHTTz998+bNzz///J133rlkyZKFCxc+//zzP/3pT08++eS1a9fu3Lnz29/+9pw5c+bNm7d27drVq1fPnDlTRPA6DkRERFR7VMRbiyrxIqiSgYGBrVu3XnDBBXV1dQBmzJihqtu2bZs5cyaG9fX17dy584ILLgjDEMDcuXMHBgZ2797d3Nx84MCBuXPnWmsBzJ0797777uvp6ent7e3r65s7d66IBEEwd+7cX/3qV319fdu2bfPez5o1S0RSqdTs2bMffvjhgYGBl19+OZ1OT5o0CUA2m50xY8aLL744ODj40ksvjRo1qr29HUBTU9OUKVM2bdpUKBRSqRRex4GIiIhqjxeJjUGVeGPwOsVicXBwUFXxJsIwrK+vFxEcp1wuDw4OZrNZVCQrent7cZxisZjP57PZLCqy2SyA3t7eIAi897lcDhXZbNZ739fXd+zYMQC5XA4V2Wy2UNHb25tIJJLJJCpyudzg4GCpVOrt7U2lUmEYAhCRXC7X399fKpV6e3vT6XQQBACcc7lcbv/+/eVyOZVK4XUciIiIqPaoMd4YVIk3BiPFcfzAAw/cf//9cRzjTUyZMuXmm29uaWnBSCKiqhimqsYYHEcqVBUV3nsAxhgRAeC9R4X3HoAxRkQAeO9R4b0HICLGGO89hnnvpcIYoxWo8N4bYwAYY1QVw7z3UoE34kBERES1x4vE1qJKvDEqguOISENDw5gxY7z3eBOjRo2y1mKkRCKRzWa7u7tVVUT6+/vz+XxLSwuOk0qlGhoauru7UdHT0wNg1KhRjY2NQRB0d3ejoqenJwiCxsZGY4yIdHd3d3V1Aejp6amvr0+lUi0tLcVisa+vb+zYsara3d2dzWYTiURLS8vAwEChUAAQx3F3d3cul0smky0tLceOHSsUCplMplgs9vT0tLS0hGGIN+JAREREtUdFvLWoEhXBSMaYCy+88Nxzz1VVvIkgCMIwxEgNDQ1z5sxZt27d0aNHc7ncc889l0qlurq6AOzevXtoaGjy5MnZbHb69OnPPffcZZddlkwmn3nmmdbW1vHjxycSic7Ozmefffacc84RkWeffXbixImjRo1qaGhobW199tlnTz755FKptGbNmunTp2ez2SlTpqTT6TVr1kydOrWvr2/dunWzZs1qaGiYOXNmFEUbNmwYO3bsoUOHXnjhhdNOO62urm7u3Lnf+973Xn755ZaWlr1797788surVq0KwxBvxIGIiIhqjxoTG4Mq8cbgday1dXV1+G8Kw/Btb3vbxz/+8VtvvbWtre3RRx+95JJLxo4dq6r333//Sy+9dMcdd2QymSuuuOKWW27527/920wms3r16muuuWbUqFHGmCuvvPKOO+647bbbROTJJ5/8wAc+kMlkVPXKK6+85557hoaGBgYGNm7c+JnPfKaurm7s2LGXXHLJ9773vYMHDx44cODgwYMf+MAHwjDs6uo677zzvv71r7/yyitbtmzx3l944YXW2nnz5i1atOiLX/zi2rVrN2zY0NTUdM4554gI3ogDERER1R4v4o1BlXhjUD3z58//3Oc+9/Of//zIkSPXXXfdihUrwjBU1VNPPXXq1KnJZFJElixZcssttzz22GMDAwN//dd/fe6551prAZx33nmpVOqpp54C8IlPfGLp0qXGGACXXXZZNptds2ZNGIa33HLL4sWLRSQMw/e85z1jxoxZv359Y2Pj3/3d351wwgkAUqnU+9///o6Ojs2bN0+YMOEv/uIvpk6dCiCTyXzsYx976KGHtm3bNnv27JUrV44bNw5vwoGIiIhqjAIqEluLKlERVI+19pRTTjnppJO89845EQEgIosXL8awIAjOOOOMU089VVWDIMCwZDK5fPnys846C4BzDsPS6fTFF198/vnni4hzDsMymcwVV1zxtre9zRhjrcWw5ubma665plwu2woMa2tru+GGG8rlsnPOGIM350BERES1xxvjjUGVeGNQbbYCf5RzDm/EOYc3EgQBXkdEgiDA64hIGIZ4HREJwxD/GQciIiKqPSoSW4sq8caoCOg4DkRERFR71BhvDKrEGwMayYGIiIhqjxeJrUWVqAhoJAciIiKqPWqMNwZV4o0BjeRAREREtUdFYmtRJd4Y0EgOREREVHu8iDcGVeKNAY3kQERERLVHjYmtRZWoiIqAjuNAREREtceLeGNQJd4Y0EgOREREVHtUJLYWVeKNAY3kQERERLVHjfHGoEq8MaCRHIiIiKj2eJHYWlSJioBGciAiIqLao8Z4Y1Al3hjQSA5ERERUa0RUJLYWVeKNURHQcRyIiIio9ngRbwyqxBsDGsmBiIiIao8aE1uLKlER0EgOREREVHu8iDcGVeKNAY3kQERERLVHRWJrUSXeGNBIDkRERFR71BhvDKrEGwMayYGIiIhqjxeJrUWVqIiKgI7jQERERLVHjfHGoEq8MaCRHIiIiKjGKKAi3lpUiTcGNJIDERER1R4vEhuDKvHGgEZyICIiotqjxsTWokpUBDSSAxEREdUeL+KNQZV4Y0AjORAREVHtURFvLarEG6MioOM4EBERUe1RY2JjUCVqDGgkByIiIqo9XiS2FlXiRUAjORAREVHtUWO8MagSbwxoJAciIiKqPSrirUWVeGNAIzkQERFR7fEisTGoEjUGNJIDERER1R41JrYWVeJFVAR0HAciIiKqPV7EG4Mq8caARnIgIiKi2qMi3lpUiTcGNJIDERER1R41JjYGVeKNAY3kQERERLXHi8TWokpUBDSSAxEREdUaETXGG4Mq8caARnIgIiKi2uNFvLWoEm+MioCO40BERES1R0ViY1AlagxoJAciIiKqPWpMbC2qxBuDalPVcrlsK/AmVLVcLjvnjDE4jvc+iiLnnDEGw1S1XC6rahiGIoL/giiKRMRai/8+ByIiIqo9XsQbgyrxIqiqw4cPP/LII5s2bcrlchdccMHs2bONMRjpwIEDP/7xj7dt29ba2rpy5cqpU6eKiKru2rXrxz/+8Z49e8aNG3fxxRdPmDABwCuvvLJ69ert27er6ty5cy+44IKWlhYAmzZtevTRR0ulEioWL168ZMkSVX3xxRcfe+yxgwcPWmvnzZt3zjnnNDY2Yli5XH7iiSf27NmzcuXK5uZmvBEHIiIiqj1qjLcWVeKNQfXk8/mvfe1rzz777DnnnLNly5ZPfvKTX/rSl6ZPn47j9PX1feELX9i+ffuyZct+//vfP/fcc3fcccf48eMPHz58yy23DAwMLF68+Omnn96wYcPtt9/e2Nj46KOPrlu3bsaMGcVi8e677968efPNN9+cTqc3bNhw9913n3baaalUCsDAwAAqNm3atGPHjtbW1r6+vjvvvHPz5s0f/ehHU6kUAFV9/vnnb7755p6engULFjQ3N+ONOBAREVHt8SKxMagSb4yiarZu3frzn//8U5/61Pnnn3/w4MEbbrjhkUce6erqstZi2O9///tnnnnmS1/60pIlS7Zv33799devXr362muvffrpp1966aVvfvObc+fOPfPMM9/3vvf99re/veiii6688sp3vetdmUzGe9/R0fHVr371hhtumDx5sqpOmjTppptuam5uBmCtBSAiF1100cUXX5xIJKIo+sY3vvHggw9ef/31qVQKwOHDh7///e/PmTNnzZo1qoo34UBEREQ1RgEV8daiSlQEIqiSP/zhD865+fPnG2NaW1vnzp27YcOGoaGhhoYGDHvhhRcaGxunTZsmImPHjp02bdr69evf8Y53bNiwYdy4cRMnThSRiRMnjh8/fsOGDStXrmxpaUGFMSaVSjnnRAQVhw8ffuihh5qammbPnt3V1WWtBZBKpeI4zufzhUKhv79/zJgxiUQCQBRF//qv/2qtPffcc9euXYs350BERES1R0ViY1AlXgSvo6pxHKsq3oS11hiD1+nu7q6vr08mkwCstS0tLevXry8Wiw0NDahQ1e7u7kwmk0wmASQSiVGjRm3ZsmVwcLC7u7upqSmRSABIJBLNzc3d3d3lcjmRSKBi3759Dz744GmnnTZmzBgA9fX12Wz2ueeeO1zxl3/5l5dffrlzDsCmTZu++93v7ty58/Dhwx//+MdzuRyA3//+94899tiHPvShQqGAP8qBiIiIaowAaWNGqaJKMiKCEbz3jz322KOPPuq9x5sYP378tddem81mjxw5smbNmmKxmEgk3vKWt3jvpQIVxhjvPUby3osIhhljvPeq6r03xmCYMSaOY1VFRXd395e+9CUA73vf++rq6gAsW7Zs0aJFyWRycHDwmxWLFy/u6OgAkM1m582b19LS8sQTTzz11FOLFy+Ooujee+9dsmTJ/Pnz16xZgz/KgYiIiGqMBd4lcqYIqqQZqMcIqrpjx47f/OY33nu8ialTp77jHe/IZrOHDx/++c9/fuzYsWw229XVlcvl8vl8qVQCoKq9vb0NDQ1BEGCYiORyucHBwXK5DCCKot7e3mw2m0qlcrnczp07y+VyMpksl8vHjh0bO3ZsEAQAenp6vvjFL+7evfuzn/3spEmTUJGpAJDJZC688MJHHnlkz549HR0dACZMmHD11Vd77+fMmXPTTTddfvnlR48effLJJ621t99++6uvvnrgwIF777336quvPuGEE/A6DkRERFRjBJgETMKfkLX2qquuWrlypariTSQSiVwuB6Czs/PWW29VVRFJp9M9PT2Dg4Pbt29vb28/duzY5s2bp02blk6noyg6evRoQ0NDMpmcPn36Aw88sG/fvubm5iNHjmzduvXss89Op9MzZsz4zW9+093d3dDQ0NPTs2vXrnPOOcdae+TIkS9/+ctbtmz57Gc/O2vWLBEBoKpxHFtrRURVDxw4ACCdTqtqHMfOOQAikkwmvfdRFI0ePfrSSy8tFAr9/f1DQ0NxHA8NDZXLZbwRByIiIqI/gboK/Bc457LZLIbNmDHjxBNP/MY3vtHf3/+Hh85TBwAAAk1JREFUP/xhz54973//+51zu3fv/uhHP3r99dcvW7ZswYIFEydO/NrXvnbZZZc9/fTThULhnHPOEZHTTjvthz/84d///d+/9a1v/cUvflFfX3/aaadFUfT973//e9/73vnnn//rX//6t7/9bV1d3Vvf+tZsNvvggw8Wi8W2trb9+/ffd999J598cmdn5+Dg4A9/+MMwDFtaWnp6eh544IFZs2Z1dnY2NTXddNNNqPjNb36zadOmG2+8cd68eXgjDkRERER/TjKZzEc+8pF77rnnu9/9bjqd/uhHP7pgwQIAiURi2rRp2WwWQEtLy6c+9al77733nnvuyWazn/zkJ6dPnw5g/Pjxn/70p7///e//4z/+Y0tLy0033TRhwoQ4jhsbG1esWOGc27x5M4BMJrN06dLGxkYATz755ODgoHPurLPOWrVqVSaTKRQKAB577LGBgYEgCBYsWPDOd76zqalJRKy1qBgzZsxb3/rWpqYmEcEbcSAiIiL6cyIiU6ZM+cxnPjMwMBCGYX19vTEGQEtLy8c//vEgCACIyJw5c/7u7/5ucHAwkUjU19eLCABjzCmnnDJ79ux8Pp9Kperq6kTEGHPllVdedtllGCYiiUTCGHPllVdecMEFpVLJOVdfXx8EAYBUKnXNNddcdtllpVLJOVdfXx8EAUaaMmXKpz71qWQyiTfhQERERPTnJ1mB44hIMpnEcVIVGElE0hU4TliB17HWZrNZvI61NpvN4s1Za+vq6vDmHIiIiIio2twTTzwBIiIiIqqeJ5544v8EPfZAO96FifYAAAAASUVORK5CYII="
     },
     "metadata": {},
     "execution_count": 3
    }
   ],
   "cell_type": "code",
   "source": [
    "show_strain(Da(n))\n",
    "\n",
    "steptree = initial_state(Da(n))\n",
    "newton_onestep!(steptree, fixingmethod=:fix3points)\n",
    "newton_onestep!(steptree)\n",
    "newton_onestep!(steptree)\n",
    "newton_onestep!(steptree)\n",
    "newton_onestep!(steptree)\n",
    "refinement!(steptree, pโ‚Š=(0,1), kโ‚Š=suggest_knotvector(steptree))\n",
    "newton_onestep!(steptree)\n",
    "newton_onestep!(steptree)\n",
    "pin!(steptree)"
   ],
   "metadata": {},
   "execution_count": 3
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Export the shape in SVG format"
   ],
   "metadata": {}
  },
  {
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "1-element Vector{String}:\n \"helicatenoid-a/pinned/pinned-9.svg\""
     },
     "metadata": {},
     "execution_count": 4
    }
   ],
   "cell_type": "code",
   "source": [
    "export_pinned_steps(\"helicatenoid-a\", steptree, unitlength=(40,\"mm\"), mesh=(18,1))"
   ],
   "metadata": {},
   "execution_count": 4
  },
  {
   "cell_type": "markdown",
   "source": [
    "![](helicatenoid-a/pinned/pinned-9.svg)"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Define the shape of the surface (periodic direction)"
   ],
   "metadata": {}
  },
  {
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "โ”Œ Info: Strain - domain: [-3.141592653589793, 3.141592653589793]ร—[0.0, 0.17453292519943295]\n",
      "โ”” Predicted: (min: -0.0025192446028988627, max: 0.0012596223014494311)\n",
      "โ”Œ Info: Strain - domain: [-3.141592653589793, 3.141592653589793]ร—[0.17453292519943295, 0.3490658503988659]\n",
      "โ”” Predicted: (min: -0.0023721456374501803, max: 0.0011860728187250893)\n",
      "โ”Œ Info: Strain - domain: [-3.141592653589793, 3.141592653589793]ร—[0.3490658503988659, 0.5235987755982988]\n",
      "โ”” Predicted: (min: -0.0021105110486750235, max: 0.0010552555243375109)\n",
      "โ”Œ Info: Strain - domain: [-3.141592653589793, 3.141592653589793]ร—[0.5235987755982988, 0.6981317007977318]\n",
      "โ”” Predicted: (min: -0.0017852175622718365, max: 0.0008926087811359181)\n",
      "โ”Œ Info: Strain - domain: [-3.141592653589793, 3.141592653589793]ร—[0.6981317007977318, 0.8726646259971648]\n",
      "โ”” Predicted: (min: -0.0014467651124962513, max: 0.0007233825562481255)\n",
      "โ”Œ Info: Strain - domain: [-3.141592653589793, 3.141592653589793]ร—[0.8726646259971648, 1.0471975511965976]\n",
      "โ”” Predicted: (min: -0.0011324094230442416, max: 0.0005662047115221195)\n",
      "โ”Œ Info: Strain - domain: [-3.141592653589793, 3.141592653589793]ร—[1.0471975511965976, 1.2217304763960306]\n",
      "โ”” Predicted: (min: -0.0008625146964147976, max: 0.000431257348207397)\n",
      "โ”Œ Info: Strain - domain: [-3.141592653589793, 3.141592653589793]ร—[1.2217304763960306, 1.3962634015954636]\n",
      "โ”” Predicted: (min: -0.0006434206242097736, max: 0.00032171031210488546)\n",
      "โ”Œ Info: Strain - domain: [-3.141592653589793, 3.141592653589793]ร—[1.3962634015954636, 1.5707963267948966]\n",
      "โ”” Predicted: (min: -0.00047257957312983996, max: 0.000236289786564919)\n"
     ]
    }
   ],
   "cell_type": "code",
   "source": [
    "ElasticSurfaceEmbedding.๐’‘โ‚โ‚€โ‚Ž(uยน,uยฒ) = SVector(cos(uยน)*cosh(uยฒ),sin(uยน)*cosh(uยฒ),uยฒ)\n",
    "Db(i,n) = (-ฯ€..ฯ€,(i-1)*ฯ€/(2n)..(i)*ฯ€/(2n))\n",
    "\n",
    "# Check the maximum strain\n",
    "for i in 1:n\n",
    "    show_strain(Db(i,n))\n",
    "end\n",
    "\n",
    "# Numerical computing\n",
    "steptree = StepTree()\n",
    "for i in 1:n\n",
    "    initial_state!(steptree, Db(i,n))\n",
    "    newton_onestep!(steptree, fixingmethod=:fix3points)\n",
    "    newton_onestep!(steptree)\n",
    "    newton_onestep!(steptree)\n",
    "    newton_onestep!(steptree)\n",
    "    newton_onestep!(steptree)\n",
    "    refinement!(steptree, pโ‚Š=(0,1), kโ‚Š=suggest_knotvector(steptree))\n",
    "    newton_onestep!(steptree)\n",
    "    newton_onestep!(steptree)\n",
    "    pin!(steptree)\n",
    "end"
   ],
   "metadata": {},
   "execution_count": 5
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Export the shapes in SVG format"
   ],
   "metadata": {}
  },
  {
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "9-element Vector{String}:\n \"helicatenoid-b/pinned/pinned-9.svg\"\n \"helicatenoid-b/pinned/pinned-18.svg\"\n \"helicatenoid-b/pinned/pinned-27.svg\"\n \"helicatenoid-b/pinned/pinned-36.svg\"\n \"helicatenoid-b/pinned/pinned-45.svg\"\n \"helicatenoid-b/pinned/pinned-54.svg\"\n \"helicatenoid-b/pinned/pinned-63.svg\"\n \"helicatenoid-b/pinned/pinned-72.svg\"\n \"helicatenoid-b/pinned/pinned-81.svg\""
     },
     "metadata": {},
     "execution_count": 6
    }
   ],
   "cell_type": "code",
   "source": [
    "export_pinned_steps(\"helicatenoid-b\", steptree, unitlength=(40,\"mm\"), mesh=(36,1))"
   ],
   "metadata": {},
   "execution_count": 6
  },
  {
   "cell_type": "markdown",
   "source": [
    "![](helicatenoid-b/pinned/pinned-9.svg) ![](helicatenoid-b/pinned/pinned-18.svg) ![](helicatenoid-b/pinned/pinned-27.svg)\n",
    "![](helicatenoid-b/pinned/pinned-36.svg) ![](helicatenoid-b/pinned/pinned-45.svg) ![](helicatenoid-b/pinned/pinned-54.svg)\n",
    "![](helicatenoid-b/pinned/pinned-63.svg) ![](helicatenoid-b/pinned/pinned-72.svg) ![](helicatenoid-b/pinned/pinned-81.svg)"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "# References\n",
    "- [Isometric transformation between a Catenoid and a Helicoid](https://www.youtube.com/watch?v=Gp6XkPLCw7s)\n",
    "- [2019 Joint Mathematics Meetings - Yuto Horikawa](https://gallery.bridgesmathart.org/exhibitions/2019-joint-mathematics-meetings/yuto-horikawa)"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "---\n",
    "\n",
    "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*"
   ],
   "metadata": {}
  }
 ],
 "nbformat_minor": 3,
 "metadata": {
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "1.10.4"
  },
  "kernelspec": {
   "name": "julia-1.10",
   "display_name": "Julia 1.10.4",
   "language": "julia"
  }
 },
 "nbformat": 4
}