diff --git a/environment.yml b/environment.yml
index 52b9f6465fa2e66bcca61174204403dba5204282..a35b55607cc7b1df6c52a50618fe956e4ff274c7 100644
--- a/environment.yml
+++ b/environment.yml
@@ -5,6 +5,7 @@ channels:
 dependencies:
   - python
   - pip
+  - libblas=*=*mkl
   - numpy
   - scipy
   - cython
diff --git a/notebooks/2d--Diffusion.ipynb b/notebooks/2d--Diffusion.ipynb
index 04bad7ea0e15aab6115112f762bd97ef1a869be7..ab8a565470a572bc9d2f4a8a2cf6d6ea97d1ad3a 100644
--- a/notebooks/2d--Diffusion.ipynb
+++ b/notebooks/2d--Diffusion.ipynb
@@ -246,8 +246,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 251 ms, sys: 3.26 ms, total: 254 ms\n",
-      "Wall time: 253 ms\n"
+      "CPU times: user 192 ms, sys: 1.37 ms, total: 194 ms\n",
+      "Wall time: 192 ms\n"
      ]
     }
    ],
@@ -299,8 +299,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 4.71 ms, sys: 57 µs, total: 4.77 ms\n",
-      "Wall time: 3.65 ms\n"
+      "CPU times: user 4.32 ms, sys: 67 µs, total: 4.39 ms\n",
+      "Wall time: 3.41 ms\n"
      ]
     }
    ],
@@ -339,8 +339,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 4.65 ms, sys: 49 µs, total: 4.7 ms\n",
-      "Wall time: 3.93 ms\n"
+      "CPU times: user 2.9 ms, sys: 0 ns, total: 2.9 ms\n",
+      "Wall time: 2.38 ms\n"
      ]
     }
    ],
@@ -362,8 +362,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 15 s, sys: 5.84 s, total: 20.8 s\n",
-      "Wall time: 20.8 s\n"
+      "CPU times: user 14.3 s, sys: 4.85 s, total: 19.1 s\n",
+      "Wall time: 19.1 s\n"
      ]
     }
    ],
@@ -481,8 +481,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 12.3 s, sys: 13.9 ms, total: 12.3 s\n",
-      "Wall time: 12.3 s\n"
+      "CPU times: user 12.1 s, sys: 3.87 ms, total: 12.1 s\n",
+      "Wall time: 12.1 s\n"
      ]
     }
    ],
@@ -553,8 +553,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 13 s, sys: 17.8 ms, total: 13 s\n",
-      "Wall time: 13 s\n"
+      "CPU times: user 12 s, sys: 7.75 ms, total: 12 s\n",
+      "Wall time: 12 s\n"
      ]
     }
    ],
@@ -633,8 +633,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 715 µs, sys: 0 ns, total: 715 µs\n",
-      "Wall time: 718 µs\n"
+      "CPU times: user 1.72 ms, sys: 210 µs, total: 1.93 ms\n",
+      "Wall time: 1.93 ms\n"
      ]
     }
    ],
@@ -656,8 +656,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 50 µs, sys: 7 µs, total: 57 µs\n",
-      "Wall time: 127 µs\n"
+      "CPU times: user 297 µs, sys: 36 µs, total: 333 µs\n",
+      "Wall time: 243 µs\n"
      ]
     }
    ],
@@ -698,8 +698,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 10.9 s, sys: 3.37 ms, total: 10.9 s\n",
-      "Wall time: 10.9 s\n"
+      "CPU times: user 9.91 s, sys: 11.8 ms, total: 9.92 s\n",
+      "Wall time: 9.92 s\n"
      ]
     }
    ],
@@ -770,8 +770,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 18.1 s, sys: 34.8 ms, total: 18.2 s\n",
-      "Wall time: 18.2 s\n"
+      "CPU times: user 16.5 s, sys: 3.72 ms, total: 16.5 s\n",
+      "Wall time: 16.5 s\n"
      ]
     }
    ],
@@ -891,8 +891,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 2.73 ms, sys: 0 ns, total: 2.73 ms\n",
-      "Wall time: 2.17 ms\n"
+      "CPU times: user 2.48 ms, sys: 183 µs, total: 2.66 ms\n",
+      "Wall time: 2.05 ms\n"
      ]
     }
    ],
@@ -4726,8 +4726,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 2.28 s, sys: 0 ns, total: 2.28 s\n",
-      "Wall time: 2.28 s\n"
+      "CPU times: user 2.12 s, sys: 368 µs, total: 2.12 s\n",
+      "Wall time: 2.12 s\n"
      ]
     }
    ],
@@ -4831,8 +4831,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 4.2 s, sys: 0 ns, total: 4.2 s\n",
-      "Wall time: 4.2 s\n"
+      "CPU times: user 3.37 s, sys: 22 µs, total: 3.37 s\n",
+      "Wall time: 3.37 s\n"
      ]
     }
    ],
@@ -4877,7 +4877,20 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "zsh:cd:1: no such file or directory: fortran\r\n"
+      "rm -f diff_mpi.exe diff.exe *.o *.mod\n",
+      "gfortran -O3 -march=native -fopt-info-vec -fopenmp -fno-strict-aliasing -o diff.exe diff.F90\n",
+      "diff.F90:30:0: optimized: loop vectorized using 32 byte vectors\n",
+      "diff.F90:30:0: optimized:  loop versioned for vectorization because of possible aliasing\n",
+      "diff.F90:19:0: optimized: loop vectorized using 32 byte vectors\n",
+      "diff.F90:19:0: optimized:  loop versioned for vectorization because of possible aliasing\n",
+      "diff.F90:18:0: optimized: loop vectorized using 32 byte vectors\n",
+      "diff.F90:18:0: optimized:  loop versioned for vectorization because of possible aliasing\n",
+      "diff.F90:10:0: optimized: loop vectorized using 32 byte vectors\n",
+      "diff.F90:19:0: optimized: loop vectorized using 32 byte vectors\n",
+      "diff.F90:19:0: optimized:  loop versioned for vectorization because of possible aliasing\n",
+      "diff.F90:18:0: optimized: loop vectorized using 32 byte vectors\n",
+      "diff.F90:18:0: optimized:  loop versioned for vectorization because of possible aliasing\n",
+      "diff.F90:10:0: optimized: loop vectorized using 32 byte vectors\n"
      ]
     }
    ],
@@ -4898,7 +4911,27 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "zsh:cd:1: no such file or directory: fortran\r\n"
+      "           5 %\n",
+      "          10 %\n",
+      "          15 %\n",
+      "          20 %\n",
+      "          25 %\n",
+      "          30 %\n",
+      "          35 %\n",
+      "          40 %\n",
+      "          45 %\n",
+      "          50 %\n",
+      "          55 %\n",
+      "          60 %\n",
+      "          65 %\n",
+      "          70 %\n",
+      "          75 %\n",
+      "          80 %\n",
+      "          85 %\n",
+      "          90 %\n",
+      "          95 %\n",
+      "         100 %\n",
+      " main loop time =   1.2827631459999793     \n"
      ]
     }
    ],
@@ -5013,8 +5046,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 2.47 s, sys: 109 µs, total: 2.47 s\n",
-      "Wall time: 1.24 s\n"
+      "CPU times: user 2.19 s, sys: 7.93 ms, total: 2.2 s\n",
+      "Wall time: 1.11 s\n"
      ]
     }
    ],
@@ -5037,7 +5070,33 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "zsh:cd:1: no such file or directory: fortran\r\n"
+      "&diff\n",
+      "  n_iterations = 2000\n",
+      "  np = 768\n",
+      "  dt = 0.15\n",
+      "  D = 1.25\n",
+      "/\n",
+      "           5 %\n",
+      "          10 %\n",
+      "          15 %\n",
+      "          20 %\n",
+      "          25 %\n",
+      "          30 %\n",
+      "          35 %\n",
+      "          40 %\n",
+      "          45 %\n",
+      "          50 %\n",
+      "          55 %\n",
+      "          60 %\n",
+      "          65 %\n",
+      "          70 %\n",
+      "          75 %\n",
+      "          80 %\n",
+      "          85 %\n",
+      "          90 %\n",
+      "          95 %\n",
+      "         100 %\n",
+      " main loop time =   1.2201892590001080     \n"
      ]
     }
    ],
@@ -5153,8 +5212,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 4.18 s, sys: 0 ns, total: 4.18 s\n",
-      "Wall time: 4.18 s\n"
+      "CPU times: user 3.91 s, sys: 3.84 ms, total: 3.91 s\n",
+      "Wall time: 3.91 s\n"
      ]
     }
    ],
@@ -5212,8 +5271,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 4.06 s, sys: 109 ms, total: 4.17 s\n",
-      "Wall time: 2 s\n"
+      "CPU times: user 3.98 s, sys: 126 ms, total: 4.11 s\n",
+      "Wall time: 1.96 s\n"
      ]
     }
    ],
@@ -5331,8 +5390,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 9.92 s, sys: 328 ms, total: 10.3 s\n",
-      "Wall time: 9 s\n"
+      "CPU times: user 9.37 s, sys: 342 ms, total: 9.71 s\n",
+      "Wall time: 8.5 s\n"
      ]
     }
    ],
@@ -5389,8 +5448,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 4.8 s, sys: 520 ms, total: 5.32 s\n",
-      "Wall time: 2.1 s\n"
+      "CPU times: user 4.75 s, sys: 423 ms, total: 5.17 s\n",
+      "Wall time: 2.03 s\n"
      ]
     }
    ],