diff --git a/bmcs_env.yml b/bmcs_env.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7c3254a9e91476df34ef9b6ab112355bb73109d8
--- /dev/null
+++ b/bmcs_env.yml
@@ -0,0 +1,25 @@
+name: bmcs_env
+channels:
+- conda-forge
+dependencies:
+- traits==6.3.2
+- matplotlib==3.6.2
+- numpy==1.23.5
+- sympy==1.11.1
+- scipy==1.9.3
+- k3d==2.14.5
+- ipywidgets==7.7.0
+- ipympl==0.9.2
+- ipytree==0.2.2
+- shapely==1.8.5
+- pandas==1.5.2
+- jupyterlab==3.5.0
+- importlib_resources==5.10.0
+- pip
+- pip:
+  - anastruct==1.2.0
+  - openpyxl
+  - bmcs-utils==0.0.31a0
+  - bmcs-ibvpy==0.0.24a0
+  - bmcs-cross-section==0.0.54a0
+  - bmcs-beam==0.0.17a0
diff --git a/bmcs_env_2022-01-13.yml b/bmcs_env_2022-01-13.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a79f24bb9ab571f53a10945e1c48b490b7e5f5b5
--- /dev/null
+++ b/bmcs_env_2022-01-13.yml
@@ -0,0 +1,311 @@
+name: bmcs_env2
+channels:
+  - conda-forge
+  - defaults
+dependencies:
+  - _libgcc_mutex=0.1=conda_forge
+  - _openmp_mutex=4.5=2_gnu
+  - aiohttp=3.8.3=py310h5764c6d_1
+  - aiosignal=1.3.1=pyhd8ed1ab_0
+  - alsa-lib=1.2.8=h166bdaf_0
+  - anyio=3.6.2=pyhd8ed1ab_0
+  - aom=3.5.0=h27087fc_0
+  - apptools=5.1.0=pyh44b312d_0
+  - argon2-cffi=21.3.0=pyhd8ed1ab_0
+  - argon2-cffi-bindings=21.2.0=py310h5764c6d_3
+  - asttokens=2.2.0=pyhd8ed1ab_0
+  - async-timeout=4.0.2=pyhd8ed1ab_0
+  - attr=2.5.1=h166bdaf_1
+  - attrs=22.1.0=pyh71513ae_1
+  - babel=2.11.0=pyhd8ed1ab_0
+  - backcall=0.2.0=pyh9f0ad1d_0
+  - backports=1.0=pyhd8ed1ab_3
+  - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
+  - beautifulsoup4=4.11.1=pyha770c72_0
+  - bleach=5.0.1=pyhd8ed1ab_0
+  - brotli=1.0.9=h166bdaf_8
+  - brotli-bin=1.0.9=h166bdaf_8
+  - brotlipy=0.7.0=py310h5764c6d_1005
+  - bzip2=1.0.8=h7f98852_4
+  - c-ares=1.18.1=h7f98852_0
+  - ca-certificates=2022.9.24=ha878542_0
+  - certifi=2022.9.24=pyhd8ed1ab_0
+  - cffi=1.15.1=py310h255011f_2
+  - charset-normalizer=2.1.1=pyhd8ed1ab_0
+  - configobj=5.0.6=py_0
+  - contourpy=1.0.6=py310hbf28c38_0
+  - cryptography=38.0.4=py310h597c629_0
+  - curl=7.86.0=h7bff187_1
+  - cycler=0.11.0=pyhd8ed1ab_0
+  - dbus=1.13.6=h5008d03_3
+  - debugpy=1.6.4=py310hd8f1fbe_0
+  - decorator=5.1.1=pyhd8ed1ab_0
+  - defusedxml=0.7.1=pyhd8ed1ab_0
+  - double-conversion=3.2.0=h27087fc_1
+  - eigen=3.4.0=h4bd325d_0
+  - entrypoints=0.4=pyhd8ed1ab_0
+  - envisage=6.0.1=pyhd8ed1ab_0
+  - executing=1.2.0=pyhd8ed1ab_0
+  - expat=2.5.0=h27087fc_0
+  - ffmpeg=5.1.2=gpl_hc51e5dc_103
+  - fftw=3.3.10=nompi_hf0379b8_105
+  - flit-core=3.8.0=pyhd8ed1ab_0
+  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
+  - font-ttf-inconsolata=3.000=h77eed37_0
+  - font-ttf-source-code-pro=2.038=h77eed37_0
+  - font-ttf-ubuntu=0.83=hab24e00_0
+  - fontconfig=2.14.1=hc2a2eb6_0
+  - fonts-conda-ecosystem=1=0
+  - fonts-conda-forge=1=0
+  - fonttools=4.38.0=py310h5764c6d_1
+  - freetype=2.12.1=hca18f0e_1
+  - frozenlist=1.3.3=py310h5764c6d_0
+  - geos=3.11.1=h27087fc_0
+  - gettext=0.21.1=h27087fc_0
+  - gl2ps=1.4.2=h0708190_0
+  - glew=2.1.0=h9c3ff4c_2
+  - glib=2.74.1=h6239696_1
+  - glib-tools=2.74.1=h6239696_1
+  - gmp=6.2.1=h58526e2_0
+  - gmpy2=2.1.2=py310h3ec546c_1
+  - gnutls=3.7.8=hf3e180e_0
+  - gst-plugins-base=1.21.2=h3e40eee_0
+  - gstreamer=1.21.2=hd4edc92_0
+  - gstreamer-orc=0.4.33=h166bdaf_0
+  - hdf4=4.2.15=h9772cbc_5
+  - hdf5=1.12.2=nompi_h2386368_100
+  - icu=70.1=h27087fc_0
+  - idna=3.4=pyhd8ed1ab_0
+  - importlib-metadata=5.1.0=pyha770c72_0
+  - importlib_metadata=5.1.0=hd8ed1ab_0
+  - importlib_resources=5.10.0=pyhd8ed1ab_0
+  - ipykernel=6.17.1=pyh210e3f2_0
+  - ipympl=0.9.2=pyhd8ed1ab_0
+  - ipython=8.6.0=pyh41d4057_1
+  - ipython_genutils=0.2.0=py_1
+  - ipytree=0.2.2=pyhd8ed1ab_0
+  - ipywidgets=7.7.0=pyhd8ed1ab_0
+  - jack=1.9.21=he978b8e_1
+  - jedi=0.18.2=pyhd8ed1ab_0
+  - jinja2=3.1.2=pyhd8ed1ab_1
+  - jpeg=9e=h166bdaf_2
+  - json5=0.9.5=pyh9f0ad1d_0
+  - jsoncpp=1.9.5=h4bd325d_1
+  - jsonschema=4.17.3=pyhd8ed1ab_0
+  - jupyter_client=7.4.7=pyhd8ed1ab_0
+  - jupyter_core=5.1.0=py310hff52083_0
+  - jupyter_server=1.23.3=pyhd8ed1ab_0
+  - jupyterlab=3.5.0=pyhd8ed1ab_0
+  - jupyterlab_pygments=0.2.2=pyhd8ed1ab_0
+  - jupyterlab_server=2.16.3=pyhd8ed1ab_0
+  - jupyterlab_widgets=1.1.1=pyhd8ed1ab_0
+  - k3d=2.14.5=pyhd8ed1ab_0
+  - keyutils=1.6.1=h166bdaf_0
+  - kiwisolver=1.4.4=py310hbf28c38_1
+  - krb5=1.19.3=h3790be6_0
+  - lame=3.100=h166bdaf_1003
+  - lcms2=2.14=h6ed2654_0
+  - ld_impl_linux-64=2.39=hcc3a1bd_1
+  - lerc=4.0.0=h27087fc_0
+  - libblas=3.9.0=16_linux64_openblas
+  - libbrotlicommon=1.0.9=h166bdaf_8
+  - libbrotlidec=1.0.9=h166bdaf_8
+  - libbrotlienc=1.0.9=h166bdaf_8
+  - libcap=2.66=ha37c62d_0
+  - libcblas=3.9.0=16_linux64_openblas
+  - libclang=15.0.6=default_h2e3cab8_0
+  - libclang13=15.0.6=default_h3a83d3e_0
+  - libcups=2.3.3=h3e49a29_2
+  - libcurl=7.86.0=h7bff187_1
+  - libdb=6.2.32=h9c3ff4c_0
+  - libdeflate=1.14=h166bdaf_0
+  - libdrm=2.4.114=h166bdaf_0
+  - libedit=3.1.20191231=he28a2e2_2
+  - libev=4.33=h516909a_1
+  - libevent=2.1.10=h9b69904_4
+  - libffi=3.4.2=h7f98852_5
+  - libflac=1.4.2=h27087fc_0
+  - libgcc-ng=12.2.0=h65d4601_19
+  - libgcrypt=1.10.1=h166bdaf_0
+  - libgfortran-ng=12.2.0=h69a702a_19
+  - libgfortran5=12.2.0=h337968e_19
+  - libglib=2.74.1=h606061b_1
+  - libglu=9.0.0=he1b5a44_1001
+  - libgomp=12.2.0=h65d4601_19
+  - libgpg-error=1.45=hc0c96e0_0
+  - libiconv=1.17=h166bdaf_0
+  - libidn2=2.3.4=h166bdaf_0
+  - liblapack=3.9.0=16_linux64_openblas
+  - libllvm15=15.0.6=h63197d8_0
+  - libnetcdf=4.8.1=nompi_h261ec11_106
+  - libnghttp2=1.47.0=hdcd2b5c_1
+  - libnsl=2.0.0=h7f98852_0
+  - libogg=1.3.4=h7f98852_1
+  - libopenblas=0.3.21=pthreads_h78a6416_3
+  - libopus=1.3.1=h7f98852_1
+  - libpciaccess=0.17=h166bdaf_0
+  - libpng=1.6.39=h753d276_0
+  - libpq=14.5=hd77ab85_1
+  - libsndfile=1.1.0=h27087fc_0
+  - libsodium=1.0.18=h36c2ea0_1
+  - libsqlite=3.40.0=h753d276_0
+  - libssh2=1.10.0=haa6b8db_3
+  - libstdcxx-ng=12.2.0=h46fd767_19
+  - libsystemd0=252=h2a991cd_0
+  - libtasn1=4.19.0=h166bdaf_0
+  - libtheora=1.1.1=h7f98852_1005
+  - libtiff=4.4.0=h55922b4_4
+  - libtool=2.4.6=h9c3ff4c_1008
+  - libudev1=252=h166bdaf_0
+  - libunistring=0.9.10=h7f98852_0
+  - libuuid=2.32.1=h7f98852_1000
+  - libva=2.16.0=h166bdaf_0
+  - libvorbis=1.3.7=h9c3ff4c_0
+  - libvpx=1.11.0=h9c3ff4c_3
+  - libwebp-base=1.2.4=h166bdaf_0
+  - libxcb=1.13=h7f98852_1004
+  - libxkbcommon=1.0.3=he3ba5ed_0
+  - libxml2=2.10.3=h7463322_0
+  - libzip=1.9.2=hc869a4a_1
+  - libzlib=1.2.13=h166bdaf_4
+  - loguru=0.6.0=py310hff52083_2
+  - lz4-c=1.9.3=h9c3ff4c_1
+  - markupsafe=2.1.1=py310h5764c6d_2
+  - matplotlib=3.6.2=py310hff52083_0
+  - matplotlib-base=3.6.2=py310h8d5ebf3_0
+  - matplotlib-inline=0.1.6=pyhd8ed1ab_0
+  - mistune=2.0.4=pyhd8ed1ab_0
+  - mpc=1.2.1=h9f54685_0
+  - mpfr=4.1.0=h9202a9a_1
+  - mpg123=1.30.2=h27087fc_1
+  - mpmath=1.2.1=pyhd8ed1ab_0
+  - msgpack-python=1.0.4=py310hbf28c38_1
+  - multidict=6.0.2=py310h5764c6d_2
+  - munkres=1.1.4=pyh9f0ad1d_0
+  - mysql-common=8.0.31=haf5c9bc_0
+  - mysql-libs=8.0.31=h28c427c_0
+  - nbclassic=0.4.8=pyhd8ed1ab_0
+  - nbclient=0.7.2=pyhd8ed1ab_0
+  - nbconvert=7.2.5=pyhd8ed1ab_0
+  - nbconvert-core=7.2.5=pyhd8ed1ab_0
+  - nbconvert-pandoc=7.2.5=pyhd8ed1ab_0
+  - nbformat=5.7.0=pyhd8ed1ab_0
+  - ncurses=6.3=h27087fc_1
+  - nest-asyncio=1.5.6=pyhd8ed1ab_0
+  - nettle=3.8.1=hc379101_1
+  - nlohmann_json=3.11.2=h27087fc_0
+  - notebook=6.5.2=pyha770c72_1
+  - notebook-shim=0.2.2=pyhd8ed1ab_0
+  - nspr=4.35=h27087fc_0
+  - nss=3.82=he02c5a1_0
+  - numpy=1.23.5=py310h53a5b5f_0
+  - openh264=2.3.1=h27087fc_1
+  - openjpeg=2.5.0=h7d73246_1
+  - openssl=1.1.1s=h0b41bf4_1
+  - p11-kit=0.24.1=hc5aa10d_0
+  - packaging=21.3=pyhd8ed1ab_0
+  - pandas=1.5.2=py310h769672d_0
+  - pandoc=2.19.2=h32600fe_1
+  - pandocfilters=1.5.0=pyhd8ed1ab_0
+  - parso=0.8.3=pyhd8ed1ab_0
+  - pcre2=10.40=hc3806b6_0
+  - pexpect=4.8.0=pyh1a96a4e_2
+  - pickleshare=0.7.5=py_1003
+  - pillow=9.2.0=py310h454ad03_3
+  - pip=22.3.1=pyhd8ed1ab_0
+  - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_0
+  - platformdirs=2.5.2=pyhd8ed1ab_1
+  - ply=3.11=py_1
+  - proj=9.1.0=h93bde94_0
+  - prometheus_client=0.15.0=pyhd8ed1ab_0
+  - prompt-toolkit=3.0.33=pyha770c72_0
+  - psutil=5.9.4=py310h5764c6d_0
+  - pthread-stubs=0.4=h36c2ea0_1001
+  - ptyprocess=0.7.0=pyhd3deb0d_0
+  - pugixml=1.11.4=h9c3ff4c_0
+  - pulseaudio=16.1=h4a94279_0
+  - pure_eval=0.2.2=pyhd8ed1ab_0
+  - pycparser=2.21=pyhd8ed1ab_0
+  - pyface=7.4.3=pyhd8ed1ab_0
+  - pygments=2.13.0=pyhd8ed1ab_0
+  - pyopenssl=22.1.0=pyhd8ed1ab_0
+  - pyparsing=3.0.9=pyhd8ed1ab_0
+  - pyqt=5.15.7=py310h29803b5_2
+  - pyqt5-sip=12.11.0=py310hd8f1fbe_2
+  - pyrsistent=0.19.2=py310h5764c6d_0
+  - pysocks=1.7.1=pyha2e5f31_6
+  - python=3.10.8=h257c98d_0_cpython
+  - python-dateutil=2.8.2=pyhd8ed1ab_0
+  - python-fastjsonschema=2.16.2=pyhd8ed1ab_0
+  - python_abi=3.10=3_cp310
+  - pytz=2022.6=pyhd8ed1ab_0
+  - pyzmq=24.0.1=py310h330234f_1
+  - qt-main=5.15.6=h7acdfc8_2
+  - readline=8.1.2=h0f457ee_0
+  - requests=2.28.1=pyhd8ed1ab_1
+  - scipy=1.9.3=py310hdfbd76f_2
+  - send2trash=1.8.0=pyhd8ed1ab_0
+  - setuptools=65.5.1=pyhd8ed1ab_0
+  - shapely=1.8.5=py310h5b266fc_2
+  - sip=6.7.5=py310hd8f1fbe_0
+  - six=1.16.0=pyh6c4a22f_0
+  - sniffio=1.3.0=pyhd8ed1ab_0
+  - soupsieve=2.3.2.post1=pyhd8ed1ab_0
+  - sqlite=3.40.0=h4ff8645_0
+  - stack_data=0.6.2=pyhd8ed1ab_0
+  - svt-av1=1.3.0=h27087fc_0
+  - sympy=1.11.1=py310hff52083_2
+  - tbb=2021.7.0=h924138e_0
+  - tbb-devel=2021.7.0=h924138e_0
+  - terminado=0.17.0=pyh41d4057_0
+  - tinycss2=1.2.1=pyhd8ed1ab_0
+  - tk=8.6.12=h27826a3_0
+  - toml=0.10.2=pyhd8ed1ab_0
+  - tomli=2.0.1=pyhd8ed1ab_0
+  - tornado=6.2=py310h5764c6d_1
+  - traitlets=5.6.0=pyhd8ed1ab_0
+  - traits=6.3.2=py310h5764c6d_1
+  - traitsui=7.4.2=pyhd8ed1ab_0
+  - traittypes=0.2.1=pyh9f0ad1d_2
+  - typing-extensions=4.4.0=hd8ed1ab_0
+  - typing_extensions=4.4.0=pyha770c72_0
+  - tzdata=2022g=h191b570_0
+  - unicodedata2=15.0.0=py310h5764c6d_0
+  - urllib3=1.26.13=pyhd8ed1ab_0
+  - utfcpp=3.2.2=ha770c72_0
+  - vtk=9.2.2=qt_py310h180de18_204
+  - wcwidth=0.2.5=pyh9f0ad1d_2
+  - webencodings=0.5.1=py_1
+  - websocket-client=1.4.2=pyhd8ed1ab_0
+  - wheel=0.38.4=pyhd8ed1ab_0
+  - widgetsnbextension=3.6.1=pyha770c72_0
+  - wslink=1.9.1=pyhd8ed1ab_0
+  - x264=1!164.3095=h166bdaf_2
+  - x265=3.5=h924138e_3
+  - xcb-util=0.4.0=h166bdaf_0
+  - xcb-util-image=0.4.0=h166bdaf_0
+  - xcb-util-keysyms=0.4.0=h166bdaf_0
+  - xcb-util-renderutil=0.3.9=h166bdaf_0
+  - xcb-util-wm=0.4.1=h166bdaf_0
+  - xorg-fixesproto=5.0=h7f98852_1002
+  - xorg-kbproto=1.0.7=h7f98852_1002
+  - xorg-libice=1.0.10=h7f98852_0
+  - xorg-libsm=1.2.3=hd9c2040_1000
+  - xorg-libx11=1.7.2=h7f98852_0
+  - xorg-libxau=1.0.9=h7f98852_0
+  - xorg-libxdmcp=1.1.3=h7f98852_0
+  - xorg-libxext=1.3.4=h7f98852_1
+  - xorg-libxfixes=5.0.3=h7f98852_1004
+  - xorg-libxt=1.2.1=h7f98852_2
+  - xorg-xextproto=7.3.0=h7f98852_1002
+  - xorg-xproto=7.0.31=h7f98852_1007
+  - xz=5.2.6=h166bdaf_0
+  - yarl=1.8.1=py310h5764c6d_0
+  - zeromq=4.3.4=h9c3ff4c_1
+  - zipp=3.11.0=pyhd8ed1ab_0
+  - zlib=1.2.13=h166bdaf_4
+  - zstd=1.5.2=h6239696_4
+  - pip:
+    - anastruct==1.2.0
+    - bmcs_utils==0.0.32a0 
+prefix: /home/rch/miniconda3/envs/mayavi_env
diff --git a/bmcs_env_channel.env b/bmcs_env_channel.env
new file mode 100644
index 0000000000000000000000000000000000000000..fe86279d21b21004f403467e33833e8cf3e2ee44
--- /dev/null
+++ b/bmcs_env_channel.env
@@ -0,0 +1,349 @@
+name: base
+channels:
+  - conda-forge
+  - defaults
+dependencies:
+  - _libgcc_mutex=0.1=conda_forge
+  - _openmp_mutex=4.5=2_gnu
+  - aiohttp=3.8.3=py310h5764c6d_1
+  - aiosignal=1.3.1=pyhd8ed1ab_0
+  - alsa-lib=1.2.8=h166bdaf_0
+  - anyio=3.6.2=pyhd8ed1ab_0
+  - aom=3.5.0=h27087fc_0
+  - apptools=5.1.0=pyh44b312d_0
+  - argon2-cffi=21.3.0=pyhd8ed1ab_0
+  - argon2-cffi-bindings=21.2.0=py310h5764c6d_3
+  - asttokens=2.2.0=pyhd8ed1ab_0
+  - async-timeout=4.0.2=pyhd8ed1ab_0
+  - attr=2.5.1=h166bdaf_1
+  - attrs=22.1.0=pyh71513ae_1
+  - babel>=2.11.0=pyhd8ed1ab_0
+  - backcall=0.2.0=pyh9f0ad1d_0
+  - backports=1.0=pyhd8ed1ab_3
+  - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
+  - beautifulsoup4=4.11.1=pyha770c72_0
+  - bleach=5.0.1=pyhd8ed1ab_0
+  - brotli=1.0.9=h166bdaf_8
+  - brotli-bin=1.0.9=h166bdaf_8
+  - brotlipy=0.7.0=py310h5764c6d_1005
+  - bzip2=1.0.8=h7f98852_4
+  - c-ares=1.18.1=h7f98852_0
+  - ca-certificates=2022.9.24=ha878542_0
+  - certifi=2022.9.24=pyhd8ed1ab_0
+  - cffi=1.15.1=py310h255011f_2
+  - charset-normalizer=2.1.1=pyhd8ed1ab_0
+  - configobj=5.0.6=py_0
+  - contourpy=1.0.6=py310hbf28c38_0
+  - cryptography=38.0.4=py310h597c629_0
+  - curl=7.86.0=h7bff187_1
+  - cycler=0.11.0=pyhd8ed1ab_0
+  - dbus=1.13.6=h5008d03_3
+  - debugpy=1.6.4=py310hd8f1fbe_0
+  - decorator=5.1.1=pyhd8ed1ab_0
+  - defusedxml=0.7.1=pyhd8ed1ab_0
+  - double-conversion=3.2.0=h27087fc_1
+  - eigen=3.4.0=h4bd325d_0
+  - entrypoints=0.4=pyhd8ed1ab_0
+  - envisage=6.0.1=pyhd8ed1ab_0
+#  - executing=1.2.0=pyhd8ed1ab_0
+  - expat=2.5.0=h27087fc_0
+  - ffmpeg=5.1.2=gpl_hc51e5dc_103
+  - fftw=3.3.10=nompi_hf0379b8_105
+#  - flit-core=3.8.0=pyhd8ed1ab_0
+  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
+  - font-ttf-inconsolata=3.000=h77eed37_0
+  - font-ttf-source-code-pro=2.038=h77eed37_0
+  - font-ttf-ubuntu=0.83=hab24e00_0
+  - fontconfig=2.14.1=hc2a2eb6_0
+  - fonts-conda-ecosystem=1=0
+  - fonts-conda-forge=1=0
+  - fonttools=4.38.0=py310h5764c6d_1
+  - freetype=2.12.1=hca18f0e_1
+  - frozenlist=1.3.3=py310h5764c6d_0
+  - geos=3.11.1=h27087fc_0
+  - gettext=0.21.1=h27087fc_0
+  - gl2ps=1.4.2=h0708190_0
+  - glew=2.1.0=h9c3ff4c_2
+  - glib=2.74.1=h6239696_1
+  - glib-tools=2.74.1=h6239696_1
+  - gmp=6.2.1=h58526e2_0
+  - gmpy2=2.1.2=py310h3ec546c_1
+  - gnutls=3.7.8=hf3e180e_0
+  - gst-plugins-base=1.21.2=h3e40eee_0
+  - gstreamer=1.21.2=hd4edc92_0
+  - gstreamer-orc=0.4.33=h166bdaf_0
+  - hdf4=4.2.15=h9772cbc_5
+  - hdf5=1.12.2=nompi_h2386368_100
+  - icu=70.1=h27087fc_0
+  - idna=3.4=pyhd8ed1ab_0
+  - importlib-metadata=5.1.0=pyha770c72_0
+  - importlib_metadata=5.1.0=hd8ed1ab_0
+  - importlib_resources=5.10.0=pyhd8ed1ab_0
+  - ipykernel=6.17.1=pyh210e3f2_0
+  - ipympl=0.9.2=pyhd8ed1ab_0
+  - ipython=8.6.0=pyh41d4057_1
+  - ipython_genutils=0.2.0=py_1
+  - ipytree=0.2.2=pyhd8ed1ab_0
+  - ipywidgets=7.7.0=pyhd8ed1ab_0
+  - jack=1.9.21=he978b8e_1
+  - jedi=0.18.2=pyhd8ed1ab_0
+  - jinja2=3.1.2=pyhd8ed1ab_1
+  - jpeg=9e=h166bdaf_2
+  - json5=0.9.5=pyh9f0ad1d_0
+  - jsoncpp=1.9.5=h4bd325d_1
+  - jsonschema=4.17.3=pyhd8ed1ab_0
+  - jupyter_client=7.4.7=pyhd8ed1ab_0
+  - jupyter_core=5.1.0=py310hff52083_0
+  - jupyter_server=1.23.3=pyhd8ed1ab_0
+  - jupyterlab=3.5.0=pyhd8ed1ab_0
+  - jupyterlab_pygments=0.2.2=pyhd8ed1ab_0
+  - jupyterlab_server=2.16.3=pyhd8ed1ab_0
+  - jupyterlab_widgets=1.1.1=pyhd8ed1ab_0
+  - k3d=2.14.5=pyhd8ed1ab_0
+  - keyutils=1.6.1=h166bdaf_0
+  - kiwisolver=1.4.4=py310hbf28c38_1
+  - krb5=1.19.3=h3790be6_0
+  - lame=3.100=h166bdaf_1003
+  - lcms2=2.14=h6ed2654_0
+  - ld_impl_linux-64=2.39=hcc3a1bd_1
+  - lerc=4.0.0=h27087fc_0
+  - libblas=3.9.0=16_linux64_openblas
+  - libbrotlicommon=1.0.9=h166bdaf_8
+  - libbrotlidec=1.0.9=h166bdaf_8
+  - libbrotlienc=1.0.9=h166bdaf_8
+  - libcap=2.66=ha37c62d_0
+  - libcblas=3.9.0=16_linux64_openblas
+  - libclang=15.0.6=default_h2e3cab8_0
+  - libclang13=15.0.6=default_h3a83d3e_0
+  - libcups=2.3.3=h3e49a29_2
+  - libcurl=7.86.0=h7bff187_1
+  - libdb=6.2.32=h9c3ff4c_0
+  - libdeflate=1.14=h166bdaf_0
+  - libdrm=2.4.114=h166bdaf_0
+  - libedit=3.1.20191231=he28a2e2_2
+  - libev=4.33=h516909a_1
+  - libevent=2.1.10=h9b69904_4
+  - libffi=3.4.2=h7f98852_5
+  - libflac=1.4.2=h27087fc_0
+  - libgcc-ng=12.2.0=h65d4601_19
+  - libgcrypt=1.10.1=h166bdaf_0
+  - libgfortran-ng=12.2.0=h69a702a_19
+  - libgfortran5=12.2.0=h337968e_19
+  - libglib=2.74.1=h606061b_1
+  - libglu=9.0.0=he1b5a44_1001
+  - libgomp=12.2.0=h65d4601_19
+  - libgpg-error=1.45=hc0c96e0_0
+  - libiconv=1.17=h166bdaf_0
+  - libidn2=2.3.4=h166bdaf_0
+  - liblapack=3.9.0=16_linux64_openblas
+  - libllvm15=15.0.6=h63197d8_0
+  - libnetcdf=4.8.1=nompi_h261ec11_106
+  - libnghttp2=1.47.0=hdcd2b5c_1
+  - libnsl=2.0.0=h7f98852_0
+  - libogg=1.3.4=h7f98852_1
+  - libopenblas=0.3.21=pthreads_h78a6416_3
+  - libopus=1.3.1=h7f98852_1
+  - libpciaccess=0.17=h166bdaf_0
+  - libpng=1.6.39=h753d276_0
+  - libpq=14.5=hd77ab85_1
+  - libsndfile=1.1.0=h27087fc_0
+  - libsodium=1.0.18=h36c2ea0_1
+  - libsqlite=3.40.0=h753d276_0
+  - libssh2=1.10.0=haa6b8db_3
+  - libstdcxx-ng=12.2.0=h46fd767_19
+  - libsystemd0=252=h2a991cd_0
+  - libtasn1=4.19.0=h166bdaf_0
+  - libtheora=1.1.1=h7f98852_1005
+  - libtiff=4.4.0=h55922b4_4
+  - libtool=2.4.6=h9c3ff4c_1008
+  - libudev1=252=h166bdaf_0
+  - libunistring=0.9.10=h7f98852_0
+  - libuuid=2.32.1=h7f98852_1000
+  - libva=2.16.0=h166bdaf_0
+  - libvorbis=1.3.7=h9c3ff4c_0
+  - libvpx=1.11.0=h9c3ff4c_3
+  - libwebp-base=1.2.4=h166bdaf_0
+  - libxcb=1.13=h7f98852_1004
+  - libxkbcommon=1.0.3=he3ba5ed_0
+  - libxml2=2.10.3=h7463322_0
+  - libzip=1.9.2=hc869a4a_1
+  - libzlib=1.2.13=h166bdaf_4
+  - loguru=0.6.0=py310hff52083_2
+  - lz4-c=1.9.3=h9c3ff4c_1
+  - markupsafe=2.1.1=py310h5764c6d_2
+  - matplotlib=3.6.2=py310hff52083_0
+  - matplotlib-base=3.6.2=py310h8d5ebf3_0
+  - matplotlib-inline=0.1.6=pyhd8ed1ab_0
+  - mistune=2.0.4=pyhd8ed1ab_0
+  - mpc=1.2.1=h9f54685_0
+  - mpfr=4.1.0=h9202a9a_1
+  - mpg123=1.30.2=h27087fc_1
+  - mpmath=1.2.1=pyhd8ed1ab_0
+  - msgpack-python=1.0.4=py310hbf28c38_1
+  - multidict=6.0.2=py310h5764c6d_2
+  - munkres=1.1.4=pyh9f0ad1d_0
+  - mysql-common=8.0.31=haf5c9bc_0
+  - mysql-libs=8.0.31=h28c427c_0
+  - nbclassic=0.4.8=pyhd8ed1ab_0
+  - nbclient=0.7.2=pyhd8ed1ab_0
+  - nbconvert=7.2.5=pyhd8ed1ab_0
+  - nbconvert-core=7.2.5=pyhd8ed1ab_0
+  - nbconvert-pandoc=7.2.5=pyhd8ed1ab_0
+  - nbformat=5.7.0=pyhd8ed1ab_0
+  - ncurses=6.3=h27087fc_1
+  - nest-asyncio=1.5.6=pyhd8ed1ab_0
+  - nettle=3.8.1=hc379101_1
+  - nlohmann_json=3.11.2=h27087fc_0
+  - notebook=6.5.2=pyha770c72_1
+  - notebook-shim=0.2.2=pyhd8ed1ab_0
+  - nspr=4.35=h27087fc_0
+  - nss=3.82=he02c5a1_0
+  - numpy=1.23.5=py310h53a5b5f_0
+  - openh264=2.3.1=h27087fc_1
+  - openjpeg=2.5.0=h7d73246_1
+  - openssl=1.1.1s=h0b41bf4_1
+  - p11-kit=0.24.1=hc5aa10d_0
+  - packaging=21.3=pyhd8ed1ab_0
+  - pandas=1.5.2=py310h769672d_0
+  - pandoc=2.19.2=h32600fe_1
+  - pandocfilters=1.5.0=pyhd8ed1ab_0
+  - parso=0.8.3=pyhd8ed1ab_0
+  - pcre2=10.40=hc3806b6_0
+  - pexpect=4.8.0=pyh1a96a4e_2
+#  - pickleshare=0.7.5=py_1003
+  - pillow=9.2.0=py310h454ad03_3
+  - pip=22.3.1=pyhd8ed1ab_0
+  - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_0
+  - platformdirs=2.5.2=pyhd8ed1ab_1
+  - ply=3.11=py_1
+  - proj=9.1.0=h93bde94_0
+  - prometheus_client=0.15.0=pyhd8ed1ab_0
+  - prompt-toolkit=3.0.33=pyha770c72_0
+  - psutil=5.9.4=py310h5764c6d_0
+  - pthread-stubs=0.4=h36c2ea0_1001
+  - ptyprocess=0.7.0=pyhd3deb0d_0
+  - pugixml=1.11.4=h9c3ff4c_0
+  - pulseaudio=16.1=h4a94279_0
+  - pure_eval=0.2.2=pyhd8ed1ab_0
+  - pycparser=2.21=pyhd8ed1ab_0
+#  - pyface=7.4.3=pyhd8ed1ab_0
+  - pygments=2.13.0=pyhd8ed1ab_0
+  - pyopenssl=22.1.0=pyhd8ed1ab_0
+  - pyparsing=3.0.9=pyhd8ed1ab_0
+#  - pyqt=5.15.7=py310h29803b5_2
+#  - pyqt5-sip=12.11.0=py310hd8f1fbe_2
+  - pyrsistent=0.19.2=py310h5764c6d_0
+  - pysocks=1.7.1=pyha2e5f31_6
+#  - python=3.10.8=h257c98d_0_cpython
+  - python-dateutil=2.8.2=pyhd8ed1ab_0
+  - python-fastjsonschema=2.16.2=pyhd8ed1ab_0
+  - python_abi=3.10=3_cp310
+  - pytz=2022.6=pyhd8ed1ab_0
+  - pyzmq=24.0.1=py310h330234f_1
+  - qt-main=5.15.6=h7acdfc8_2
+  - readline=8.1.2=h0f457ee_0
+  - requests=2.28.1=pyhd8ed1ab_1
+  - scipy=1.9.3=py310hdfbd76f_2
+  - send2trash=1.8.0=pyhd8ed1ab_0
+#  - setuptools=65.5.1=pyhd8ed1ab_0
+  - shapely=1.8.5=py310h5b266fc_2
+  - sip=6.7.5=py310hd8f1fbe_0
+  - six=1.16.0=pyh6c4a22f_0
+  - sniffio=1.3.0=pyhd8ed1ab_0
+  - soupsieve=2.3.2.post1=pyhd8ed1ab_0
+  - sqlite=3.40.0=h4ff8645_0
+  - stack_data=0.6.2=pyhd8ed1ab_0
+  - svt-av1=1.3.0=h27087fc_0
+  - sympy=1.11.1=py310hff52083_2
+  - tbb=2021.7.0=h924138e_0
+  - tbb-devel=2021.7.0=h924138e_0
+  - terminado=0.17.0=pyh41d4057_0
+  - tinycss2=1.2.1=pyhd8ed1ab_0
+  - tk=8.6.12=h27826a3_0
+  - toml=0.10.2=pyhd8ed1ab_0
+  - tomli=2.0.1=pyhd8ed1ab_0
+  - tornado=6.2=py310h5764c6d_1
+  - traitlets=5.6.0=pyhd8ed1ab_0
+  - traits=6.3.2=py310h5764c6d_1
+  - traitsui=7.4.2=pyhd8ed1ab_0
+  - traittypes=0.2.1=pyh9f0ad1d_2
+  - typing-extensions=4.4.0=hd8ed1ab_0
+  - typing_extensions=4.4.0=pyha770c72_0
+  - tzdata=2022g=h191b570_0
+  - unicodedata2=15.0.0=py310h5764c6d_0
+  - urllib3=1.26.13=pyhd8ed1ab_0
+  - utfcpp=3.2.2=ha770c72_0
+  - vtk=9.2.2=qt_py310h180de18_204
+  - wcwidth=0.2.5=pyh9f0ad1d_2
+  - webencodings=0.5.1=py_1
+  - websocket-client=1.4.2=pyhd8ed1ab_0
+  - wheel=0.38.4=pyhd8ed1ab_0
+  - widgetsnbextension=3.6.1=pyha770c72_0
+  - wslink=1.9.1=pyhd8ed1ab_0
+  - x264=1!164.3095=h166bdaf_2
+  - x265=3.5=h924138e_3
+  - xcb-util=0.4.0=h166bdaf_0
+  - xcb-util-image=0.4.0=h166bdaf_0
+  - xcb-util-keysyms=0.4.0=h166bdaf_0
+  - xcb-util-renderutil=0.3.9=h166bdaf_0
+  - xcb-util-wm=0.4.1=h166bdaf_0
+#  - xorg-fixesproto=5.0=h7f98852_1002
+#  - xorg-kbproto=1.0.7=h7f98852_1002
+#  - xorg-libice=1.0.10=h7f98852_0
+#  - xorg-libsm=1.2.3=hd9c2040_1000
+#  - xorg-libx11=1.7.2=h7f98852_0
+#  - xorg-libxau=1.0.9=h7f98852_0
+#  - xorg-libxdmcp=1.1.3=h7f98852_0
+#  - xorg-libxext=1.3.4=h7f98852_1
+#  - xorg-libxfixes=5.0.3=h7f98852_1004
+#  - xorg-libxt=1.2.1=h7f98852_2
+#  - xorg-xextproto=7.3.0=h7f98852_1002
+#  - xorg-xproto=7.0.31=h7f98852_1007
+  - xz=5.2.6=h166bdaf_0
+  - yarl=1.8.1=py310h5764c6d_0
+  - zeromq=4.3.4=h9c3ff4c_1
+  - zipp=3.11.0=pyhd8ed1ab_0
+  - zlib=1.2.13=h166bdaf_4
+  - zstd=1.5.2=h6239696_4
+  - pip:
+      - anastruct==1.2.0
+      - asteval==0.9.29
+      - commonmark==0.9.1
+      - docutils==0.19
+      - et-xmlfile==1.1.0
+#      - ezodf==0.3.2
+      - future==0.18.3
+      - gmsh==4.11.1
+      - jaraco-classes==3.2.3
+      - jeepney==0.8.0
+#      - jpslmenus==0.5.0
+#      - jpslutils==0.7.3
+#      - jupyter==1.0.0
+#      - jupyter-console==6.6.2
+#      - jupyter-pandas-gui==0.7.1
+      - keyring==23.13.1
+      - lmfit==1.1.0
+      - lxml==4.9.2
+      - meshio==5.3.4
+      - more-itertools==9.0.0
+      - openpyxl==3.0.10
+      - pkginfo==1.9.6
+      - plotly==5.13.1
+      - pyasn1==0.4.8
+      - pygmsh==7.1.17
+#      - pysmb==1.2.9.1
+#      - qtconsole==5.4.0
+      - qtpy==2.3.0
+      - readme-renderer==37.3
+      - requests-toolbelt==0.10.1
+      - rfc3986==2.0.0
+      - rich==13.0.1
+      - round-using-error==1.2.0
+      - secretstorage==3.3.3
+      - tenacity==8.2.2
+#      - tqdm==4.64.1
+      - uncertainties==3.1.7
+      - bmcs-utils==0.0.32a0
+      - bmcs-ibvpy==0.0.28a0
+      - bmcs-cross-section==0.0.55a0
+      - bmcs-beam==0.0.20a0
diff --git a/bmcs_environment.yml b/bmcs_environment.yml
new file mode 100644
index 0000000000000000000000000000000000000000..dc8cf0c80b12cdf84ebcef99e418af23ae72c476
--- /dev/null
+++ b/bmcs_environment.yml
@@ -0,0 +1,25 @@
+name: base
+channels:
+- conda-forge
+dependencies:
+- traits
+- matplotlib
+- numpy
+- sympy
+- scipy
+- k3d
+- ipywidgets
+- ipympl
+- jupyterlab
+- ipytree
+- pandas
+- shapely
+- importlib_resources
+- pip
+- pip:
+  - anastruct==1.2.0
+  - openpyxl
+  - bmcs-utils==0.0.32a0
+  - bmcs-ibvpy==0.0.28a0
+  - bmcs-cross-section==0.0.55a0
+  - bmcs-beam==0.0.20a0
diff --git a/environment_exported.yml b/environment_exported.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b19f6e9050463e2cfd173d33419bd20fe2a047a6
--- /dev/null
+++ b/environment_exported.yml
@@ -0,0 +1,272 @@
+# This file may be used to create an environment using:
+# $ conda create --name <env> --file <this file>
+# platform: linux-64
+_libgcc_mutex=0.1=conda_forge
+_openmp_mutex=4.5=2_gnu
+aiofiles=22.1.0=pyhd8ed1ab_0
+aiosqlite=0.18.0=pyhd8ed1ab_0
+alsa-lib=1.2.8=h166bdaf_0
+anastruct=1.2.0=pypi_0
+anyio=3.6.2=pyhd8ed1ab_0
+argon2-cffi=21.3.0=pyhd8ed1ab_0
+argon2-cffi-bindings=21.2.0=py311hd4cff14_3
+asttokens=2.2.1=pyhd8ed1ab_0
+attr=2.5.1=h166bdaf_1
+attrs=22.2.0=pyh71513ae_0
+babel=2.12.1=pyhd8ed1ab_1
+backcall=0.2.0=pyh9f0ad1d_0
+backports=1.0=pyhd8ed1ab_3
+backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
+beautifulsoup4=4.12.2=pyha770c72_0
+bleach=6.0.0=pyhd8ed1ab_0
+bmcs-beam=0.0.20a0=pypi_0
+bmcs-cross-section=0.0.55a0=pypi_0
+bmcs-ibvpy=0.0.28a0=pypi_0
+bmcs-utils=0.0.32a0=pypi_0
+brotli=1.0.9=h166bdaf_8
+brotli-bin=1.0.9=h166bdaf_8
+brotlipy=0.7.0=py311hd4cff14_1005
+bzip2=1.0.8=h7f98852_4
+ca-certificates=2022.12.7=ha878542_0
+cairo=1.16.0=h35add3b_1015
+certifi=2022.12.7=pyhd8ed1ab_0
+cffi=1.15.1=py311h409f033_3
+charset-normalizer=3.1.0=pyhd8ed1ab_0
+comm=0.1.3=pyhd8ed1ab_0
+contourpy=1.0.7=py311ha3edf6b_0
+cryptography=40.0.1=py311h9b4c7bb_0
+cycler=0.11.0=pyhd8ed1ab_0
+dbus=1.13.6=h5008d03_3
+debugpy=1.6.7=py311hcafe171_0
+decorator=5.1.1=pyhd8ed1ab_0
+defusedxml=0.7.1=pyhd8ed1ab_0
+entrypoints=0.4=pyhd8ed1ab_0
+et-xmlfile=1.1.0=pypi_0
+executing=1.2.0=pyhd8ed1ab_0
+expat=2.5.0=hcb278e6_1
+flit-core=3.8.0=pyhd8ed1ab_0
+font-ttf-dejavu-sans-mono=2.37=hab24e00_0
+font-ttf-inconsolata=3.000=h77eed37_0
+font-ttf-source-code-pro=2.038=h77eed37_0
+font-ttf-ubuntu=0.83=hab24e00_0
+fontconfig=2.14.2=h14ed4e7_0
+fonts-conda-ecosystem=1=0
+fonts-conda-forge=1=0
+fonttools=4.39.3=py311h2582759_0
+freetype=2.12.1=hca18f0e_1
+geos=3.11.2=hcb278e6_0
+gettext=0.21.1=h27087fc_0
+glib=2.74.1=h6239696_1
+glib-tools=2.74.1=h6239696_1
+gmp=6.2.1=h58526e2_0
+gmpy2=2.1.2=py311h6a5fa03_1
+graphite2=1.3.13=h58526e2_1001
+gst-plugins-base=1.22.0=h4243ec0_2
+gstreamer=1.22.0=h25f0c4b_2
+harfbuzz=6.0.0=h3ff4399_1
+icu=72.1=hcb278e6_0
+idna=3.4=pyhd8ed1ab_0
+importlib-metadata=6.3.0=pyha770c72_0
+importlib_metadata=6.3.0=hd8ed1ab_0
+importlib_resources=5.12.0=pyhd8ed1ab_0
+ipykernel=6.22.0=pyh210e3f2_0
+ipympl=0.9.3=pyhd8ed1ab_0
+ipython=8.12.0=pyh41d4057_0
+ipython_genutils=0.2.0=py_1
+ipytree=0.2.2=pyhd8ed1ab_0
+ipywidgets=8.0.6=pyhd8ed1ab_0
+jedi=0.18.2=pyhd8ed1ab_0
+jinja2=3.1.2=pyhd8ed1ab_1
+json5=0.9.5=pyh9f0ad1d_0
+jsonschema=4.17.3=pyhd8ed1ab_0
+jupyter_client=8.1.0=pyhd8ed1ab_0
+jupyter_core=5.3.0=py311h38be061_0
+jupyter_events=0.6.3=pyhd8ed1ab_0
+jupyter_server=2.5.0=pyhd8ed1ab_0
+jupyter_server_fileid=0.9.0=pyhd8ed1ab_0
+jupyter_server_terminals=0.4.4=pyhd8ed1ab_1
+jupyter_server_ydoc=0.8.0=pyhd8ed1ab_0
+jupyter_ydoc=0.2.3=pyhd8ed1ab_0
+jupyterlab=3.6.3=pyhd8ed1ab_0
+jupyterlab_pygments=0.2.2=pyhd8ed1ab_0
+jupyterlab_server=2.22.0=pyhd8ed1ab_0
+jupyterlab_widgets=3.0.7=pyhd8ed1ab_0
+k3d=2.15.2=pyhd8ed1ab_0
+keyutils=1.6.1=h166bdaf_0
+kiwisolver=1.4.4=py311h4dd048b_1
+krb5=1.20.1=h81ceb04_0
+lame=3.100=h166bdaf_1003
+lcms2=2.15=haa2dc70_1
+ld_impl_linux-64=2.40=h41732ed_0
+lerc=4.0.0=h27087fc_0
+libblas=3.9.0=16_linux64_openblas
+libbrotlicommon=1.0.9=h166bdaf_8
+libbrotlidec=1.0.9=h166bdaf_8
+libbrotlienc=1.0.9=h166bdaf_8
+libcap=2.67=he9d0100_0
+libcblas=3.9.0=16_linux64_openblas
+libclang=16.0.1=default_h62803fd_0
+libclang13=16.0.1=default_h9b593c0_0
+libcups=2.3.3=h36d4200_3
+libdeflate=1.18=h0b41bf4_0
+libedit=3.1.20191231=he28a2e2_2
+libevent=2.1.10=h28343ad_4
+libexpat=2.5.0=hcb278e6_1
+libffi=3.4.2=h7f98852_5
+libflac=1.4.2=h27087fc_0
+libgcc-ng=12.2.0=h65d4601_19
+libgcrypt=1.10.1=h166bdaf_0
+libgfortran-ng=12.2.0=h69a702a_19
+libgfortran5=12.2.0=h337968e_19
+libglib=2.74.1=h606061b_1
+libgomp=12.2.0=h65d4601_19
+libgpg-error=1.46=h620e276_0
+libiconv=1.17=h166bdaf_0
+libjpeg-turbo=2.1.5.1=h0b41bf4_0
+liblapack=3.9.0=16_linux64_openblas
+libllvm16=16.0.1=hadd5161_0
+libnsl=2.0.0=h7f98852_0
+libogg=1.3.4=h7f98852_1
+libopenblas=0.3.21=pthreads_h78a6416_3
+libopus=1.3.1=h7f98852_1
+libpng=1.6.39=h753d276_0
+libpq=15.2=hb675445_0
+libsndfile=1.2.0=hb75c966_0
+libsodium=1.0.18=h36c2ea0_1
+libsqlite=3.40.0=h753d276_0
+libstdcxx-ng=12.2.0=h46fd767_19
+libsystemd0=253=h8c4010b_1
+libtiff=4.5.0=ha587672_6
+libuuid=2.38.1=h0b41bf4_0
+libvorbis=1.3.7=h9c3ff4c_0
+libwebp-base=1.3.0=h0b41bf4_0
+libxcb=1.13=h7f98852_1004
+libxkbcommon=1.5.0=h79f4944_1
+libxml2=2.10.4=hfdac1af_0
+libzlib=1.2.13=h166bdaf_4
+lz4-c=1.9.4=hcb278e6_0
+markupsafe=2.1.2=py311h2582759_0
+matplotlib=3.7.1=py311h38be061_0
+matplotlib-base=3.7.1=py311h8597a09_0
+matplotlib-inline=0.1.6=pyhd8ed1ab_0
+mistune=2.0.5=pyhd8ed1ab_0
+mpc=1.3.1=hfe3b2da_0
+mpfr=4.2.0=hb012696_0
+mpg123=1.31.3=hcb278e6_0
+mpmath=1.3.0=pyhd8ed1ab_0
+msgpack-python=1.0.5=py311ha3edf6b_0
+munkres=1.1.4=pyh9f0ad1d_0
+mysql-common=8.0.32=ha901b37_1
+mysql-libs=8.0.32=hd7da12d_1
+nbclassic=0.5.5=pyh8b2e9e2_0
+nbclient=0.7.3=pyhd8ed1ab_0
+nbconvert-core=7.3.1=pyhd8ed1ab_0
+nbformat=5.8.0=pyhd8ed1ab_0
+ncurses=6.3=h27087fc_1
+nest-asyncio=1.5.6=pyhd8ed1ab_0
+notebook=6.5.4=pyha770c72_0
+notebook-shim=0.2.2=pyhd8ed1ab_0
+nspr=4.35=h27087fc_0
+nss=3.89=he45b914_0
+numpy=1.24.2=py311h8e6699e_0
+openjpeg=2.5.0=hfec8fc6_2
+openpyxl=3.1.2=pypi_0
+openssl=3.1.0=h0b41bf4_0
+packaging=23.0=pyhd8ed1ab_0
+pandas=2.0.0=py311h2872171_0
+pandocfilters=1.5.0=pyhd8ed1ab_0
+parso=0.8.3=pyhd8ed1ab_0
+pcre2=10.40=hc3806b6_0
+pexpect=4.8.0=pyh1a96a4e_2
+pickleshare=0.7.5=py_1003
+pillow=9.5.0=py311h573f0d3_0
+pip=23.0.1=pyhd8ed1ab_0
+pixman=0.40.0=h36c2ea0_0
+pkgutil-resolve-name=1.3.10=pyhd8ed1ab_0
+platformdirs=3.2.0=pyhd8ed1ab_0
+ply=3.11=py_1
+pooch=1.7.0=pyha770c72_3
+prometheus_client=0.16.0=pyhd8ed1ab_0
+prompt-toolkit=3.0.38=pyha770c72_0
+prompt_toolkit=3.0.38=hd8ed1ab_0
+psutil=5.9.4=py311hd4cff14_0
+pthread-stubs=0.4=h36c2ea0_1001
+ptyprocess=0.7.0=pyhd3deb0d_0
+pulseaudio-client=16.1=h5195f5e_3
+pure_eval=0.2.2=pyhd8ed1ab_0
+pycparser=2.21=pyhd8ed1ab_0
+pygments=2.15.0=pyhd8ed1ab_0
+pyopenssl=23.1.1=pyhd8ed1ab_0
+pyparsing=3.0.9=pyhd8ed1ab_0
+pyqt=5.15.7=py311ha74522f_3
+pyqt5-sip=12.11.0=py311hcafe171_3
+pyrsistent=0.19.3=py311h2582759_0
+pysocks=1.7.1=pyha2e5f31_6
+python=3.11.3=h2755cc3_0_cpython
+python-dateutil=2.8.2=pyhd8ed1ab_0
+python-fastjsonschema=2.16.3=pyhd8ed1ab_0
+python-json-logger=2.0.7=pyhd8ed1ab_0
+python-tzdata=2023.3=pyhd8ed1ab_0
+python_abi=3.11=3_cp311
+pytz=2023.3=pyhd8ed1ab_0
+pyyaml=6.0=py311hd4cff14_5
+pyzmq=25.0.2=py311hd6ccaeb_0
+qt-main=5.15.8=h5c52f38_9
+readline=8.2=h8228510_1
+requests=2.28.2=pyhd8ed1ab_1
+rfc3339-validator=0.1.4=pyhd8ed1ab_0
+rfc3986-validator=0.1.1=pyh9f0ad1d_0
+scipy=1.10.1=py311h8e6699e_0
+send2trash=1.8.0=pyhd8ed1ab_0
+setuptools=67.6.1=pyhd8ed1ab_0
+shapely=2.0.1=py311h54d622a_1
+sip=6.7.8=py311hcafe171_0
+six=1.16.0=pyh6c4a22f_0
+sniffio=1.3.0=pyhd8ed1ab_0
+soupsieve=2.3.2.post1=pyhd8ed1ab_0
+stack_data=0.6.2=pyhd8ed1ab_0
+sympy=1.11.1=pypyh9d50eac_103
+terminado=0.17.1=pyh41d4057_0
+tinycss2=1.2.1=pyhd8ed1ab_0
+tk=8.6.12=h27826a3_0
+toml=0.10.2=pyhd8ed1ab_0
+tomli=2.0.1=pyhd8ed1ab_0
+tornado=6.2=py311hd4cff14_1
+traitlets=5.9.0=pyhd8ed1ab_0
+traits=6.4.1=py311hd4cff14_1
+traittypes=0.2.1=pyh9f0ad1d_2
+typing-extensions=4.5.0=hd8ed1ab_0
+typing_extensions=4.5.0=pyha770c72_0
+tzdata=2023c=h71feb2d_0
+urllib3=1.26.15=pyhd8ed1ab_0
+wcwidth=0.2.6=pyhd8ed1ab_0
+webencodings=0.5.1=py_1
+websocket-client=1.5.1=pyhd8ed1ab_0
+wheel=0.40.0=pyhd8ed1ab_0
+widgetsnbextension=4.0.7=pyhd8ed1ab_0
+xcb-util=0.4.0=h166bdaf_0
+xcb-util-image=0.4.0=h166bdaf_0
+xcb-util-keysyms=0.4.0=h166bdaf_0
+xcb-util-renderutil=0.3.9=h166bdaf_0
+xcb-util-wm=0.4.1=h166bdaf_0
+xkeyboard-config=2.38=h0b41bf4_0
+xorg-kbproto=1.0.7=h7f98852_1002
+xorg-libice=1.0.10=h7f98852_0
+xorg-libsm=1.2.3=hd9c2040_1000
+xorg-libx11=1.8.4=h0b41bf4_0
+xorg-libxau=1.0.9=h7f98852_0
+xorg-libxdmcp=1.1.3=h7f98852_0
+xorg-libxext=1.3.4=h0b41bf4_2
+xorg-libxrender=0.9.10=h7f98852_1003
+xorg-renderproto=0.11.1=h7f98852_1002
+xorg-xextproto=7.3.0=h0b41bf4_1003
+xorg-xf86vidmodeproto=2.3.1=h7f98852_1002
+xorg-xproto=7.0.31=h7f98852_1007
+xz=5.2.6=h166bdaf_0
+y-py=0.5.9=py311hfe55011_0
+yaml=0.2.5=h7f98852_2
+ypy-websocket=0.8.2=pyhd8ed1ab_0
+zeromq=4.3.4=h9c3ff4c_1
+zipp=3.15.0=pyhd8ed1ab_0
+zlib=1.2.13=h166bdaf_4
+zstd=1.5.2=h3eb15da_6
diff --git a/exercises/fib_model_code_bond.ipynb b/exercises/fib_model_code_bond.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..a40acc8e1770c22c16c66fe955b18b136e10ff2a
--- /dev/null
+++ b/exercises/fib_model_code_bond.ipynb
@@ -0,0 +1,139 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "22c48342-6f92-44a6-aabb-7f187c729a63",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%matplotlib widget\n",
+    "import sympy as sp\n",
+    "import numpy as np\n",
+    "import matplotlib.pylab as plt"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "d963f4cc-49f5-430c-a91e-841d39a5e584",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "s, s0, s1, s2, s3 = sp.symbols('s, s0, s1, s2, s3')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "49f81b3e-b865-479b-a4b9-9507626b7dbe",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "E_b, tau_max, tau_bf, alpha = sp.symbols('E_b, tau_max, tau_bf, alpha') "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "e39150ba-409b-46de-b7d8-ff0713dcc24c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "tau_s = sp.Piecewise(\n",
+    "    (E_b * s, s <= s0),\n",
+    "    (tau_max * (s / s1)**alpha, s <= s1),\n",
+    "    (tau_max, s <= s2),\n",
+    "    (tau_max - (tau_max - tau_bf) * (s - s2) / (s3 - s2), s < s3),\n",
+    "    (tau_bf, True)\n",
+    ")\n",
+    "tau_s"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "5744a5f5-b914-406c-bd82-381628c72c1c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "get_tau_s = sp.lambdify(\n",
+    "    (s, s0, s1, s2, s3, E_b, tau_max, tau_bf, alpha), tau_s\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "1358ebf3-8062-437e-adfb-c7cd281d0ced",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "_fc = 40 # MPa\n",
+    "_tau_max = 2.5 * np.sqrt(_fc)\n",
+    "_tau_bf = 0.4 * _tau_max"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "8e6b7ee5-b7d5-4e00-b342-fedcdb79e353",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "s_range = np.linspace(0,0.05,40)\n",
+    "tau_range = get_tau_s(s_range, 0.04, 1.0, 2.0, 4.0, 30, _tau_max, _tau_bf, 0.4) "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "879e636b-9e55-444b-8485-5282ee367245",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "fig, ax = plt.subplots(1,1)\n",
+    "fig.canvas.header_visible = False\n",
+    "ax.plot(s_range, tau_range)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "78c52e45-9007-4c87-a43b-2c58d6d0ef93",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "sp.simplify(tau_s / E_b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "d42923af-dfb2-4c90-bcd5-f06701d50359",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "bmcs_env2",
+   "language": "python",
+   "name": "bmcs_env2"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/index.ipynb b/index.ipynb
index c88e58b3fd9544f1d586518939ff205faaea0480..36f87f153de3966d0f3a087d7ff26b50ced2e8bf 100644
--- a/index.ipynb
+++ b/index.ipynb
@@ -322,18 +322,6 @@
     "[Pull out simulation using damage model](tour5_damage_bond/5_2_PO_cfrp_damage.ipynb)"
    ]
   },
-  {
-   "cell_type": "markdown",
-   "metadata": {
-    "pycharm": {
-     "name": "#%% md\n"
-    }
-   },
-   "source": [
-    "<div style=\"background-color:lightgreen;text-align:left\"> <img src=\"icons/rest.png\" alt=\"Step by step\" width=\"40\" height=\"40\">\n",
-    "    &nbsp; &nbsp; <b>Our current location</b> </div>"
-   ]
-  },
   {
    "cell_type": "markdown",
    "metadata": {
@@ -443,41 +431,21 @@
     }
    },
    "source": [
-    "<a id=\"tour9\"></a>\n",
-    "## **Tour 9:** Retrospective, summary of questions\n"
+    "<div style=\"background-color:lightgreen;text-align:left\"> <img src=\"icons/rest.png\" alt=\"Step by step\" width=\"40\" height=\"40\">\n",
+    "    &nbsp; &nbsp; <b>Our current location</b> </div>"
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": null,
+   "cell_type": "markdown",
    "metadata": {
     "pycharm": {
-     "name": "#%%\n"
+     "name": "#%% md\n"
     }
    },
-   "outputs": [],
-   "source": []
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
+   "source": [
+    "<a id=\"tour9\"></a>\n",
+    "## **Tour 9:** Retrospective, summary of questions\n"
+   ]
   }
  ],
  "metadata": {
diff --git a/tour1_intro/S0101_Perspectives_Mechanisms_Design_space.pdf b/tour1_intro/S0101_Perspectives_Mechanisms_Design_space.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..bce626c40fd4ed268e7e85a4b575377ecf48148e
Binary files /dev/null and b/tour1_intro/S0101_Perspectives_Mechanisms_Design_space.pdf differ
diff --git a/tour1_intro/S0102_Methods_Roadmap_Organization.pdf b/tour1_intro/S0102_Methods_Roadmap_Organization.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..2945e795538d494cead8b29a03cec1673f9f39be
Binary files /dev/null and b/tour1_intro/S0102_Methods_Roadmap_Organization.pdf differ
diff --git a/tour2_constant_bond/fragmentation.ipynb b/tour2_constant_bond/fragmentation.ipynb
index c3dea48725fd20674d4619b862484d525fb70c57..717074481502410e52da9c8067ebd7690d82616b 100644
--- a/tour2_constant_bond/fragmentation.ipynb
+++ b/tour2_constant_bond/fragmentation.ipynb
@@ -830,9 +830,9 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
+   "display_name": "bmcs_env2",
    "language": "python",
-   "name": "python3"
+   "name": "bmcs_env2"
   },
   "language_info": {
    "codemirror_mode": {
diff --git a/tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb b/tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb
index 9483e2d43d98935b5c17c6d2b61cfdc0c1485ddd..48960404e510907e77036967cb0e009336f7c895 100644
--- a/tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb
+++ b/tour3_nonlinear_bond/3_1_nonlinear_bond.ipynb
@@ -1250,9 +1250,9 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
+   "display_name": "bmcs_env2",
    "language": "python",
-   "name": "python3"
+   "name": "bmcs_env2"
   },
   "language_info": {
    "codemirror_mode": {
diff --git a/tour3_nonlinear_bond/3_2_anchorage_length.ipynb b/tour3_nonlinear_bond/3_2_anchorage_length.ipynb
index e1fe80677fd3b480945955dedcb5a827f820ccde..a1c4597fa367507c81a8c800ec24b18dc02d25cf 100644
--- a/tour3_nonlinear_bond/3_2_anchorage_length.ipynb
+++ b/tour3_nonlinear_bond/3_2_anchorage_length.ipynb
@@ -618,6 +618,26 @@
     "In addition to the maximum pullout load, we also include the evolution of the pullout displacement at when the maximum load has been reached, denoted as $w_\\mathrm{argmax}$"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Assuming that strength of the CFRP sheet is $f_\\mathrm{cfrp} = 3000$ MPa evaluate the  \n",
+    "force $P_\\mathrm{cfrp,u} = A_f f_\\mathrm{cfrp}$ at which the CFRP fails. This value will \n",
+    "be plotted using a dashed line in the parametric study below to show that **the CFRP strength\n",
+    "will not be exploited for arbitrarily long anchorage length**. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "f_cfrp_MPa = 3000 # N/mm^2\n",
+    "P_cfrp_u_kN = po_cfrp.cross_section.A_f * f_cfrp"
+   ]
+  },
   {
    "cell_type": "code",
    "execution_count": null,
@@ -642,6 +662,7 @@
     "# Plotting\n",
     "ax.set_xlabel(r'$w$ [mm]'); ax.set_ylabel(r'$P$ [kN]')\n",
     "ax.legend()\n",
+    "ax_P_L.plot([L_list[0], L_list[-1]], [P_cfrp_u_kN, P_cfrp_u_kN], linestyle='dashed')\n",
     "ax_P_L.plot(L_list, P_max_list, 'o-', color='blue', label=r'$P_\\mathrm{max}$')\n",
     "ax_P_L.set_xlabel(r'bond length $L_\\mathrm{b}$ [mm]')\n",
     "ax_P_L.set_ylabel(r'pullout force $P_\\mathrm{max}$ [kN]')\n",
@@ -799,9 +820,9 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
+   "display_name": "bmcs_env2",
    "language": "python",
-   "name": "python3"
+   "name": "bmcs_env2"
   },
   "language_info": {
    "codemirror_mode": {
diff --git a/tour5_damage_bond/5_1_Introspect_Damage_Evolution_Damage_initiation.ipynb b/tour5_damage_bond/5_1_Introspect_Damage_Evolution_Damage_initiation.ipynb
index 63186c989b8e6a4709a6afe6a32f711c404cd07d..37d7e681da7203b035c13c6fdab47a5c7cb46e72 100644
--- a/tour5_damage_bond/5_1_Introspect_Damage_Evolution_Damage_initiation.ipynb
+++ b/tour5_damage_bond/5_1_Introspect_Damage_Evolution_Damage_initiation.ipynb
@@ -596,7 +596,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "The probabilistic interpretation of damage evolution has shown that an exponential functions provide a flexible tool to adjust the shape of the non-linear softening branch in the stress-strain response. \n",
+    "The probabilistic interpretation of damage evolution has shown that exponential functions provide a flexible tool to adjust the shape of the non-linear softening branch in the stress-strain response. \n",
     "This flexibility has been exploited in many finite-element codes by providing several types of damage functions defined in terms of exponential function."
    ]
   },
@@ -1251,7 +1251,7 @@
   "kernelspec": {
    "display_name": "bmcs_env2",
    "language": "python",
-   "name": "bmcs_env2"
+   "name": "python3"
   },
   "language_info": {
    "codemirror_mode": {