diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ec7f949e4f7ac35898b95cb033cdf6a9adb650f7..583bc6c66a85834e93b851429b1e726ed924d01e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -16,7 +16,7 @@ full_build:
         - rm -rf build workspace
         - mkdir build
         - cd build
-        - cmake -Wno-dev ..
+        - cmake -DUSE_PY3=OFF -Wno-dev ..
         - make -j 4
     artifacts:
         paths:
@@ -32,7 +32,7 @@ build_no_tlnos:
         - rm -rf build workspace
         - mkdir build
         - cd build
-        - cmake -Wno-dev -C ../CMake/disable-trilinos.cmake ..
+        - cmake -DUSE_PY3=OFF -Wno-dev -C ../CMake/disable-trilinos.cmake ..
         - make -j 4
             
 doxygen:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bdb23eed07336fea60d2c47652c02ee37e49791f..b49a0e1ef5794f9a7ddf96aae155491bf1098f24 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,6 +39,8 @@ LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake")
 MESSAGE(STATUS "CMAKE_SYSTEM_NAME=\"${CMAKE_SYSTEM_NAME}\"")
 MESSAGE(STATUS "CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}")
 
+# (de)activate python 3
+OPTION(USE_PY3               "Use python 3"                    ON)
 # (de)activate modules
 OPTION(WAVES_USE_FDTD        "Compile fdtd module"             ON)
 OPTION(WAVES_USE_FLOW        "Compile flow module"             ON)
@@ -92,8 +94,13 @@ IF(APPLE)
 ENDIF()
 
 # -- Search for Python
-FIND_PACKAGE(PythonInterp 2.7 REQUIRED)
-FIND_PACKAGE(PythonLibs 2.7 REQUIRED)
+IF(USE_PY3)
+    SET(pyVersion 3.6)
+ELSE()
+    SET(pyVersion 2.7)
+ENDIF()
+FIND_PACKAGE(PythonInterp ${pyVersion})
+FIND_PACKAGE(PythonLibs ${pyVersion})
 
 MESSAGE(STATUS "PYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}")
 MESSAGE(STATUS "PYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY}")
diff --git a/Metafor/Mparams/TaskManager.py b/Metafor/Mparams/TaskManager.py
index 319ab695143d21a4d1adaaff2767d9e44173b735..3c9568e781d93d296db8f0d6c34f3675d963f43e 100644
--- a/Metafor/Mparams/TaskManager.py
+++ b/Metafor/Mparams/TaskManager.py
@@ -17,6 +17,12 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import zip
+from builtins import str
+from builtins import range
+from past.utils import old_div
+from builtins import object
 import tbox
 import math
 
@@ -47,14 +53,14 @@ except:
     print("info: MPI not found => MPI disabled")
 
 def enum(*sequential, **named):
-    enums = dict(zip(sequential, range(len(sequential))), **named)
+    enums = dict(list(zip(sequential, list(range(len(sequential))))), **named)
     return type('Enum', (), enums)
 
 tags = enum('READY', 'DONE', 'EXIT', 'START', 'WAKEUP', 'SUICIDE')
 
 
 
-class Job:
+class Job(object):
     """ Class containing data transmitted between MPI procs
     """
     def __init__(self, parameters, name, xi, m_i):
@@ -85,12 +91,12 @@ class Job:
         os.chdir('..')
 
 
-class Master:
+class Master(object):
     """
     MPI Process with rank #0
     """
     def __init__(self):
-        self.slaves = range(1,siz)
+        self.slaves = list(range(1,siz))
 
     def start(self,parameters, surrogate_parameters, images_parameters):
         """
@@ -212,7 +218,7 @@ class Master:
                             correlations = surrogate_parameters['correlations']
 
                             for j in range(0,d):
-                                xi[j] = (X[m_i,j]-means[j])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[j]))
+                                xi[j] = old_div((X[m_i,j]-means[j]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[j])))
 
                     elif surrogate_parameters['training_points'] == 'gamma':
                         means = surrogate_parameters['means']
@@ -243,7 +249,7 @@ class Master:
                     elif surrogate_parameters['training_points'] == 'gamma':
                         xi2 = np.zeros((d,))
                         for j in range(0,d):
-                            xi2[j] = (xi[j][0]-means[j])/np.sqrt(variances[j])
+                            xi2[j] = old_div((xi[j][0]-means[j]),np.sqrt(variances[j]))
                         Z[m_i,:] = np.transpose(phi(xi2,N,n_max,d))
                         #print xi2
                     else:
@@ -345,7 +351,7 @@ class Master:
             comm.send(None, dest=s, tag=tags.SUICIDE)
 
 
-class Worker:
+class Worker(object):
     """
     MPI Process with rank #1-#n
     """
diff --git a/Metafor/Mparams/sequential.py b/Metafor/Mparams/sequential.py
index 4b90691d377a5452160e0a3f99dddc334ea7ab6b..7f4e3fe69e6878d1fc28f4823369a0e4d731b44a 100644
--- a/Metafor/Mparams/sequential.py
+++ b/Metafor/Mparams/sequential.py
@@ -17,6 +17,10 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import numpy as np
 import os
 import shutil
@@ -233,7 +237,7 @@ def Z_evaluate(parameters, surrogate_parameters):
             correlations = surrogate_parameters['correlations']
 
             for j in range(0,d):
-                xi[j] = (X[m_i,j]-means[j])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[j]))
+                xi[j] = old_div((X[m_i,j]-means[j]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[j])))
 
         elif surrogate_parameters['training_points'] == 'gamma': 
             means = surrogate_parameters['means']
@@ -260,8 +264,8 @@ def Z_evaluate(parameters, surrogate_parameters):
         xi2 = np.zeros((d,))
         if surrogate_parameters['training_points'] == 'gamma': 
             
-            xi2[0] = (xi[0][0]-means[0])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[0]))
-            xi2[1] = (xi[1][0]-means[1])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[1]))    
+            xi2[0] = old_div((xi[0][0]-means[0]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[0])))
+            xi2[1] = old_div((xi[1][0]-means[1]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[1])))    
             Z[m_i,:] = np.transpose(phi(xi2,N,n_max,d))
             #print xi2
         else:
diff --git a/Metafor/Mparams/surrogate.py b/Metafor/Mparams/surrogate.py
index 7b519f5f2284c49588989af56d9ae920770ba9a8..8396b732b348345bca5cb561ab97514c21231c5d 100644
--- a/Metafor/Mparams/surrogate.py
+++ b/Metafor/Mparams/surrogate.py
@@ -17,6 +17,9 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import numpy as np
 import os
 import shutil
@@ -77,10 +80,10 @@ def surrogate_creation(sol, Z, W_sr, surrogate_parameters, Image, images_paramet
                 means = surrogate_parameters['means']
                 variances = surrogate_parameters['variances']
                
-                xi[0] = (X[i,j]-means[0])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[0]))
-                xi[1] = (Y[i,j]-means[1])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[1]))
+                xi[0] = old_div((X[i,j]-means[0]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[0])))
+                xi[1] = old_div((Y[i,j]-means[1]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[1])))
                 for k in range(2,d):
-                    xi[k] = (fixed_value[k-2]-means[k])/np.sqrt(variances[k])
+                    xi[k] = old_div((fixed_value[k-2]-means[k]),np.sqrt(variances[k]))
 
 
             elif surrogate_parameters['training_points'] == 'precomputed': 
@@ -89,10 +92,10 @@ def surrogate_creation(sol, Z, W_sr, surrogate_parameters, Image, images_paramet
                 means = surrogate_parameters['means']
                 variances = surrogate_parameters['variances']
                
-                xi[0] = (X[i,j]-means[0])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[0]))
-                xi[1] = (Y[i,j]-means[1])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[1]))
+                xi[0] = old_div((X[i,j]-means[0]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[0])))
+                xi[1] = old_div((Y[i,j]-means[1]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[1])))
                 for k in range(2,d):
-                    xi[k] = (fixed_value[k-2]-means[k])/np.sqrt(variances[k])
+                    xi[k] = old_div((fixed_value[k-2]-means[k]),np.sqrt(variances[k]))
 
             elif normalisation == False:
                 X[i,j] = Dom_min[0] + (Dom_max[0] - Dom_min[0])*(X[i,j]+1.)/2.
@@ -320,9 +323,9 @@ def surrogate_4d(sol, Z, W_sr, s_hat, surrogate_parameters, Image, images_parame
                         Z[i,j] = xi0[index_c[c,2]]
 
                        
-                        xi[index_c[c,0]] = (X[i,j]-means[index_c[c,0]])/np.sqrt(variances[index_c[c,0]])
-                        xi[index_c[c,1]] = (Y[i,j]-means[index_c[c,1]])/np.sqrt(variances[index_c[c,1]])
-                        xi[index_c[c,2]] = (Z[i,j]-means[index_c[c,2]])/np.sqrt(variances[index_c[c,2]])
+                        xi[index_c[c,0]] = old_div((X[i,j]-means[index_c[c,0]]),np.sqrt(variances[index_c[c,0]]))
+                        xi[index_c[c,1]] = old_div((Y[i,j]-means[index_c[c,1]]),np.sqrt(variances[index_c[c,1]]))
+                        xi[index_c[c,2]] = old_div((Z[i,j]-means[index_c[c,2]]),np.sqrt(variances[index_c[c,2]]))
 
                     tmp = phi(xi,N,n_max,d)
                     surrogate[i,j] = np.dot(np.transpose(tmp),s_hat)
diff --git a/Metafor/config/bord01_config1.py b/Metafor/config/bord01_config1.py
index ac998ec172c2562e94ea3055f5988570ade4b299..56bca6c1f126050f5a83107de94aa6c48253cd8e 100644
--- a/Metafor/config/bord01_config1.py
+++ b/Metafor/config/bord01_config1.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil
diff --git a/Metafor/config/bord01_config10.py b/Metafor/config/bord01_config10.py
index 4151661f5fa56ca5d6ff211343c99a049146083d..4e01a6c5e31c74a35baedc18f19ace9ae9c085cf 100644
--- a/Metafor/config/bord01_config10.py
+++ b/Metafor/config/bord01_config10.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/bord01_config11.py b/Metafor/config/bord01_config11.py
index becde72e92c4a493681dd4e42fe4db8586bea5a5..38102489b9c49224adf702e94c2da15cdea38a39 100644
--- a/Metafor/config/bord01_config11.py
+++ b/Metafor/config/bord01_config11.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/bord01_config12.py b/Metafor/config/bord01_config12.py
index 9c86ce9b97ba1c5ad7e9704d99b79b8aa9db563f..13100734c0a4745d65dea2a84289d04569827f38 100644
--- a/Metafor/config/bord01_config12.py
+++ b/Metafor/config/bord01_config12.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/bord01_config13.py b/Metafor/config/bord01_config13.py
index aa3a8f0223e967ad7b9bfe5b00671dd359a974f9..e09af10bd8fb77e15169acb1291a7473bd36738c 100644
--- a/Metafor/config/bord01_config13.py
+++ b/Metafor/config/bord01_config13.py
@@ -17,6 +17,9 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import numpy as np
 import os
 import shutil 
@@ -215,8 +218,8 @@ def main():
 
            
                 xi = tp.f_mapping(xi_in,2,means,variances,correlations,surrogate_parameters['f_mapping_method'])
-                xi_s[0,i] = (xi[0]-means[0])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[0]))
-                xi_s[1,i] = (xi[1]-means[1])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[1]))
+                xi_s[0,i] = old_div((xi[0]-means[0]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[0])))
+                xi_s[1,i] = old_div((xi[1]-means[1]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[1])))
                 phi_xi = phi(xi_s[:,i],N,n_max,d)
                 values_w[i] = np.dot(np.transpose(phi_xi),s_hat_w)
                 values_wout[i] = np.dot(np.transpose(phi_xi),s_hat_wout)
diff --git a/Metafor/config/bord01_config2.py b/Metafor/config/bord01_config2.py
index 3c540e9a75923ef13a4a9b01347c92c5bd2d7f73..232633687484c265596604cda934852f93e23f22 100644
--- a/Metafor/config/bord01_config2.py
+++ b/Metafor/config/bord01_config2.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/bord01_config3.py b/Metafor/config/bord01_config3.py
index 36d44319cf3fcc24c4d597b29655506c6a3aa916..ff44ea945926eeeea22018b5f0e7d8f803e3ff25 100644
--- a/Metafor/config/bord01_config3.py
+++ b/Metafor/config/bord01_config3.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/bord01_config4.py b/Metafor/config/bord01_config4.py
index 352761fa66d492aa5c4062a525006e8146ab2428..39f130315545c02523349757d173f8e8c1c0e9ca 100644
--- a/Metafor/config/bord01_config4.py
+++ b/Metafor/config/bord01_config4.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/bord01_config5.py b/Metafor/config/bord01_config5.py
index 9f821b344d9e91a1f6ea6b1cae8b23f727497432..1f50b81ff930a0593f2e847890cd31908a9db140 100644
--- a/Metafor/config/bord01_config5.py
+++ b/Metafor/config/bord01_config5.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/bord01_config6.py b/Metafor/config/bord01_config6.py
index f022087d9584b47e23ef6563e173fa552670b037..d28495779482361861c031d6bf59be8ba34f3746 100644
--- a/Metafor/config/bord01_config6.py
+++ b/Metafor/config/bord01_config6.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/bord01_config7.py b/Metafor/config/bord01_config7.py
index 4f3ddbda1c661c3524c69577c9b592e20a37a41a..b85bd01cede9bc97f019c6b7dd2a1970fbaf7c3d 100644
--- a/Metafor/config/bord01_config7.py
+++ b/Metafor/config/bord01_config7.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/bord01_config8.py b/Metafor/config/bord01_config8.py
index b9ba750851854438bae62c24ecfe2fb105fa24aa..8f667538bbc07475c365f6f34eb2370a6f25839e 100644
--- a/Metafor/config/bord01_config8.py
+++ b/Metafor/config/bord01_config8.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/bord01_config9.py b/Metafor/config/bord01_config9.py
index de7ed6062e519de3b46b7923cbeaed1b9b5c4e20..8d0368a59c729bb593038728922f54b0644329d3 100644
--- a/Metafor/config/bord01_config9.py
+++ b/Metafor/config/bord01_config9.py
@@ -17,6 +17,9 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import numpy as np
 import os
 import shutil 
@@ -212,8 +215,8 @@ def main():
 
            
                 xi = tp.f_mapping(xi_in,2,means,variances,correlations,surrogate_parameters['f_mapping_method'])
-                xi_s[0,i] = (xi[0]-means[0])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[0]))
-                xi_s[1,i] = (xi[1]-means[1])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[1]))
+                xi_s[0,i] = old_div((xi[0]-means[0]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[0])))
+                xi_s[1,i] = old_div((xi[1]-means[1]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[1])))
                 phi_xi = phi(xi_s[:,i],N,n_max,d)
                 values_w[i] = np.dot(np.transpose(phi_xi),s_hat_w)
                 values_wout[i] = np.dot(np.transpose(phi_xi),s_hat_wout)
diff --git a/Metafor/config/bord01_numericalSA.py b/Metafor/config/bord01_numericalSA.py
index 067e1b5a9049ef5067b913bdc187087f53e7bffe..af78fbd4d7021adbee18e48c597abd44202701e4 100644
--- a/Metafor/config/bord01_numericalSA.py
+++ b/Metafor/config/bord01_numericalSA.py
@@ -17,6 +17,9 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import numpy as np
 import os
 import shutil
@@ -217,8 +220,8 @@ def main():
 
 
                 xi = tp.f_mapping(xi_in,2,means,variances,correlations,surrogate_parameters['f_mapping_method'])
-                xi_s[0,i] = (xi[0]-means[0])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[0]))
-                xi_s[1,i] = (xi[1]-means[1])/(surrogate_parameters['nstddeviation']*np.sqrt(variances[1]))
+                xi_s[0,i] = old_div((xi[0]-means[0]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[0])))
+                xi_s[1,i] = old_div((xi[1]-means[1]),(surrogate_parameters['nstddeviation']*np.sqrt(variances[1])))
                 phi_xi = phi(xi_s[:,i],N,n_max,d)
                 values_w[i] = np.dot(np.transpose(phi_xi),s_hat_w)
                 values_wout[i] = np.dot(np.transpose(phi_xi),s_hat_wout)
diff --git a/Metafor/config/bord01_numericalSA2.py b/Metafor/config/bord01_numericalSA2.py
index 79c508b976d092407c0555ac21f83f1915d99432..ea1f8d1c5c7fc37f2cceac35359273129be27380 100644
--- a/Metafor/config/bord01_numericalSA2.py
+++ b/Metafor/config/bord01_numericalSA2.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 import os
 import shutil
diff --git a/Metafor/config/mirror01_config1.py b/Metafor/config/mirror01_config1.py
index 5eb867a51bc9044889c634f9a1bf0bc3125d309a..8ca13b50b1d5144e58b13b19f8058af351e7291a 100644
--- a/Metafor/config/mirror01_config1.py
+++ b/Metafor/config/mirror01_config1.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/mirror01_config2.py b/Metafor/config/mirror01_config2.py
index 8d9508ac23bc05fcd3717abb7052b5ae51aecd1b..3662449328a1a29a4d68cba219b43eecd52e364f 100644
--- a/Metafor/config/mirror01_config2.py
+++ b/Metafor/config/mirror01_config2.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/mirror01_config3.py b/Metafor/config/mirror01_config3.py
index a5f3d39e46dc7143b406770e1a56a89e73920f36..f16fc1bf7f9247f3fdebff3342f7a3d409df040a 100644
--- a/Metafor/config/mirror01_config3.py
+++ b/Metafor/config/mirror01_config3.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/mirror02_config2.py b/Metafor/config/mirror02_config2.py
index 86aacbd34951cd0854009a6c9ff4fd49f1c7d3b5..a9b85b75017d9403138b7643099444e0a4564ce7 100644
--- a/Metafor/config/mirror02_config2.py
+++ b/Metafor/config/mirror02_config2.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/omega01_config1.py b/Metafor/config/omega01_config1.py
index a07d7a29ff9cedafd96e9b813d979f31fe92bc0f..dab369e19d6cc44b90b219272aa32dc3ba80547b 100644
--- a/Metafor/config/omega01_config1.py
+++ b/Metafor/config/omega01_config1.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil
diff --git a/Metafor/config/omega01_test.py b/Metafor/config/omega01_test.py
index 951e59d7039d8bf13f7b684701071c9aec05714a..aced7a7c5c1725c9f011b018e3ba23f16f2d9e22 100644
--- a/Metafor/config/omega01_test.py
+++ b/Metafor/config/omega01_test.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/tube01_config1.py b/Metafor/config/tube01_config1.py
index a424b44ba69e52a304bcb586919079cf586f67d3..99a00dd264ea7cf1f40193901ff2472c6725a2ca 100644
--- a/Metafor/config/tube01_config1.py
+++ b/Metafor/config/tube01_config1.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/tube01_config2.py b/Metafor/config/tube01_config2.py
index aded86db1ca5cd8749d58a94d7be9c01111b3cec..3b09e3dfe4720f425446c1cc9f1d27bed2934794 100644
--- a/Metafor/config/tube01_config2.py
+++ b/Metafor/config/tube01_config2.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/config/tube01_test.py b/Metafor/config/tube01_test.py
index b5bb9f499b9e780bff1e14e510007d338393f137..60c8afeb01f7037f6e370ca96868d11f2ff35fcd 100644
--- a/Metafor/config/tube01_test.py
+++ b/Metafor/config/tube01_test.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import os
 import shutil 
diff --git a/Metafor/models/bord01/tombeBord.py b/Metafor/models/bord01/tombeBord.py
index 3586f7909f5d43ea290e1f0fbe2bf6b3cede0fe6..db72acc996cb5c5dc99e11dc12b2e97294848e60 100644
--- a/Metafor/models/bord01/tombeBord.py
+++ b/Metafor/models/bord01/tombeBord.py
@@ -5,6 +5,8 @@
 #===============================================#
 #################################################
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 from wrap import *
 import math
 
@@ -67,7 +69,7 @@ def buildMetafor(p={}):
     Lp  = 3.0                  # longueur du poincon
 
     #-- maillage --
-    Lx1 = Lx/2.0 #-2*X0 + (math.pi/2.0) * Rm
+    Lx1 = old_div(Lx,2.0) #-2*X0 + (math.pi/2.0) * Rm
     Lx2 = Lx - Lx1
     from toolbox.meshedGeometry2D import createRectangleSameId
     createRectangleSameId(domain, nx1, ny, Lx1, Th, X0, Y0,   0)
@@ -216,17 +218,17 @@ def buildMetafor(p={}):
     alphaDeg = 80.0
 
     alphaRad = alphaDeg * math.pi / 180.0
-    cosAlphaDemi = math.cos(alphaRad / 2.0)
-    sinAlphaDemi = math.sin(alphaRad / 2.0)
+    cosAlphaDemi = math.cos(old_div(alphaRad, 2.0))
+    sinAlphaDemi = math.sin(old_div(alphaRad, 2.0))
     cosAlpha     = math.cos(alphaRad)
     sinAlpha     = math.sin(alphaRad)
-    cos90moinsAlpha = math.cos(math.pi / 2.0 - alphaRad)
+    cos90moinsAlpha = math.cos(old_div(math.pi, 2.0) - alphaRad)
     sinAlpha     = math.sin(alphaRad)
 
     from toolbox.domainTools import getGeoReferences
     [pointset, curveset, wireset, surfaceset, sideset, skinset, volumeset] = getGeoReferences(domain)
     piDemi = math.asin(1)
-    C45 = math.cos(piDemi/2.0)
+    C45 = math.cos(old_div(piDemi,2.0))
     Z0 = 0.0
 
     # Outil 1 : matrice
diff --git a/Metafor/models/bord01/tombeBord_old.py b/Metafor/models/bord01/tombeBord_old.py
index 99dc92bfdc8343b0bc4d085e8aa1fc6c94b812e1..c560b6a2efb48e166c4dd8449367d09493562fa0 100644
--- a/Metafor/models/bord01/tombeBord_old.py
+++ b/Metafor/models/bord01/tombeBord_old.py
@@ -5,6 +5,8 @@
 #===============================================#
 #################################################
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 from wrap import *
 import math
 
@@ -54,7 +56,7 @@ def buildMetafor(p={}):
     Lp  = 3.0                  #longueur du poincon
 
     #-- maillage --
-    Lx1 = -2*X0 + (math.pi/2.0) * Rm
+    Lx1 = -2*X0 + (old_div(math.pi,2.0)) * Rm
     Lx2 = Lx - Lx1
     from toolbox.meshedGeometry2D import createRectangleSameId
     createRectangleSameId(domain, nx1, ny, Lx1, Th, X0, Y0,   0)
@@ -197,17 +199,17 @@ def buildMetafor(p={}):
     alphaDeg = 80.0
 
     alphaRad = alphaDeg * math.pi / 180.0
-    cosAlphaDemi = math.cos(alphaRad / 2.0)
-    sinAlphaDemi = math.sin(alphaRad / 2.0)
+    cosAlphaDemi = math.cos(old_div(alphaRad, 2.0))
+    sinAlphaDemi = math.sin(old_div(alphaRad, 2.0))
     cosAlpha     = math.cos(alphaRad)
     sinAlpha     = math.sin(alphaRad)
-    cos90moinsAlpha     = math.cos(math.pi / 2.0 - alphaRad)
+    cos90moinsAlpha     = math.cos(old_div(math.pi, 2.0) - alphaRad)
     sinAlpha     = math.sin(alphaRad)
 
     from toolbox.domainTools import getGeoReferences
     [pointset, curveset, wireset, surfaceset, sideset, skinset, volumeset] = getGeoReferences(domain)
     piDemi = math.asin(1)
-    C45 = math.cos(piDemi/2.0)
+    C45 = math.cos(old_div(piDemi,2.0))
     Z0 = 0.0
     # Outil 1 : matrice
     pointset.define(Index + 1, X0 - dX0,                              Y0,                                          Z0)
diff --git a/Metafor/models/mirror01/mirror.py b/Metafor/models/mirror01/mirror.py
index 118f9697f25839a5adb1a5939869a6a9b7464b3c..abcd69aad2005a12e200c2a11437c7e3de97f033 100644
--- a/Metafor/models/mirror01/mirror.py
+++ b/Metafor/models/mirror01/mirror.py
@@ -5,6 +5,7 @@
 #
 
 from __future__ import absolute_import
+from builtins import input
 from wrap import *
 metafor = None
 
@@ -48,7 +49,7 @@ def getMetafor(_parameters):
         winMesh.add(geometry.getMesh().getPointSet())
         winMesh.add(geometry.getMesh().getCurveSet())
         winMesh.open()
-        raw_input("pause : Visualisation du maillage")
+        input("pause : Visualisation du maillage")
 
 
     #==================================================================#
diff --git a/Metafor/models/omega01/EmboutOmega.py b/Metafor/models/omega01/EmboutOmega.py
index 32c6593d81caf4d2159b609cde9b1866ff6954c4..88b15da2e1647987e73becd1497b7474683e6a68 100644
--- a/Metafor/models/omega01/EmboutOmega.py
+++ b/Metafor/models/omega01/EmboutOmega.py
@@ -5,6 +5,10 @@
 #################################################
 #-- Initialisation python
 from __future__ import print_function
+from __future__ import division
+from builtins import input
+from builtins import str
+from past.utils import old_div
 from wrap import *
 import math
 metafor = None
@@ -80,7 +84,7 @@ def getParameters(_parameters):
     #Ne pas remonter ce qui est ci dessous au dessus  parameters.update(_parameters)
     parameters['ih_n']     = parameters['trac_n']     # Krupkowsky    
     parameters['ih_k']     = parameters['trac_Rm']*math.exp(parameters['trac_n'])/ math.pow(parameters['trac_n'], parameters['trac_n'])  # Krupkowsky
-    parameters['ih_evpl0'] = math.pow((parameters['trac_R02']/parameters['ih_k']), (1.0/parameters['trac_n']) )-0.002  # Krupkowsky : evpl0
+    parameters['ih_evpl0'] = math.pow((old_div(parameters['trac_R02'],parameters['ih_k'])), (old_div(1.0,parameters['trac_n'])) )-0.002  # Krupkowsky : evpl0
     
     print("ih_n = ", parameters['ih_n']) 
     print("ih_k = ", parameters['ih_k']) 
@@ -90,12 +94,12 @@ def getParameters(_parameters):
     parameters['thetaPRad'] = parameters['thetaP'] * math.pi / 180.0
     
     lxm2  = parameters['LxM1'] + parameters['rM1'] * math.sin(parameters['thetaMRad'])
-    lxm2 += (parameters['LyM'] - (parameters['rM1'] + parameters['rM2']) * (1.0-math.cos(parameters['thetaMRad']))) / math.tan(parameters['thetaMRad'])
+    lxm2 += old_div((parameters['LyM'] - (parameters['rM1'] + parameters['rM2']) * (1.0-math.cos(parameters['thetaMRad']))), math.tan(parameters['thetaMRad']))
     lxm2 += parameters['rM2'] * math.sin(parameters['thetaMRad'])
     parameters['LxM2'] = lxm2
     
     lxp2  = parameters['LxP1'] + parameters['rP1'] * math.sin(parameters['thetaPRad'])
-    lxp2 += (parameters['LyP'] - (parameters['rP1'] + parameters['rP2']) * (1.0-math.cos(parameters['thetaPRad']))) / math.tan(parameters['thetaPRad'])
+    lxp2 += old_div((parameters['LyP'] - (parameters['rP1'] + parameters['rP2']) * (1.0-math.cos(parameters['thetaPRad']))), math.tan(parameters['thetaPRad']))
     lxp2 += parameters['rP2'] * math.sin(parameters['thetaPRad'])
     parameters['LxP2'] = lxp2
     #parameters['LxM2'] = parameters['LxM1'] + (parameters['LyM'] - parameters['rM2'] * (1.0-math.cos(parameters['thetaMRad']))) / math.tan(parameters['thetaMRad']) + parameters['rM1']*math.sin(parameters['thetaMRad'])
@@ -121,10 +125,10 @@ def getMetafor(_parameters={}):
     pset = geometry.getPointSet()
     p1001 = pset.define(1001, -1.0,                                             p['Y0M']-p['LyM'])
     p1002 = pset.define(1002, p['LxM1'],                                        p['Y0M']-p['LyM'])
-    p1003 = pset.define(1003, p['LxM1']+p['rM1']*math.sin(p['thetaMRad']/2.0),  p['Y0M']-p['LyM']+p['rM1']*(1.-math.cos(p['thetaMRad']/2.0)))
+    p1003 = pset.define(1003, p['LxM1']+p['rM1']*math.sin(old_div(p['thetaMRad'],2.0)),  p['Y0M']-p['LyM']+p['rM1']*(1.-math.cos(old_div(p['thetaMRad'],2.0))))
     p1004 = pset.define(1004, p['LxM1']+p['rM1']*math.sin(p['thetaMRad']),      p['Y0M']-p['LyM']+p['rM1']*(1.-math.cos(p['thetaMRad'])))
     p1005 = pset.define(1005, p['LxM2']-p['rM2']*math.sin(p['thetaMRad']),      p['Y0M']-p['rM2']*(1.-math.cos(p['thetaMRad'])))
-    p1006 = pset.define(1006, p['LxM2']-p['rM2']*math.sin(p['thetaMRad']/2.0),  p['Y0M']-p['rM2']*(1.-math.cos(p['thetaMRad']/2.)))
+    p1006 = pset.define(1006, p['LxM2']-p['rM2']*math.sin(old_div(p['thetaMRad'],2.0)),  p['Y0M']-p['rM2']*(1.-math.cos(old_div(p['thetaMRad'],2.))))
     p1007 = pset.define(1007, p['LxM2'],                                        p['Y0M'])
     p1008 = pset.define(1008, p['LxM3'],                                        p['Y0M'])
 
@@ -145,14 +149,14 @@ def getMetafor(_parameters={}):
     # Géométrie des outils : poincon
     p2001 = pset.define(2001, -1.0,                                                  p['Y0P'])
     p2002 = pset.define(2002, p['LxP1'],                                             p['Y0P'])
-    p2003 = pset.define(2003, p['LxP1']+p['rP1']*math.sin(p['thetaPRad']/2.0),       p['Y0P']+p['rP1']*(1.-math.cos(p['thetaPRad']/2.0)))
+    p2003 = pset.define(2003, p['LxP1']+p['rP1']*math.sin(old_div(p['thetaPRad'],2.0)),       p['Y0P']+p['rP1']*(1.-math.cos(old_div(p['thetaPRad'],2.0))))
     p2004 = pset.define(2004, p['LxP1']+p['rP1']*math.sin(p['thetaPRad']),           p['Y0P']+p['rP1']*(1.-math.cos(p['thetaPRad'])) )
     #p2005 = pset.define(2005, p['LxP1']+p['rP1']*math.sin(p['thetaPRad'])+p['LyP']*math.cos(p['thetaPRad']),       p['Y0P']+p['rP1']*(1.-math.cos(p['thetaPRad']))+p['LyP']*math.sin(p['thetaPRad']))
     p2005 = pset.define(2005, p['LxP2']-p['rP2']*math.sin(p['thetaPRad']),           p['Y0P']+p['LyP']-p['rP2']*(1.-math.cos(p['thetaPRad'])))
-    p2006 = pset.define(2006, p['LxP2']-p['rP2']*math.sin(p['thetaPRad']/2.0),       p['Y0P']+p['LyP']-p['rP2']*(1.-math.cos(p['thetaPRad']/2.)))
+    p2006 = pset.define(2006, p['LxP2']-p['rP2']*math.sin(old_div(p['thetaPRad'],2.0)),       p['Y0P']+p['LyP']-p['rP2']*(1.-math.cos(old_div(p['thetaPRad'],2.))))
     p2007 = pset.define(2007, p['LxP2'],                                             p['Y0P']+p['LyP'])
-    p2008 = pset.define(2008, p['LxP2']+p['rP3']*math.sin(math.pi/4.0),              p['Y0P']+p['LyP']+p['rP3']*(1.-math.cos(math.pi/4.0)))
-    p2009 = pset.define(2009, p['LxP2']+p['rP3']*math.sin(math.pi/2.0),              p['Y0P']+p['LyP']+p['rP3']*(1.-math.cos(math.pi/2.0)))
+    p2008 = pset.define(2008, p['LxP2']+p['rP3']*math.sin(old_div(math.pi,4.0)),              p['Y0P']+p['LyP']+p['rP3']*(1.-math.cos(old_div(math.pi,4.0))))
+    p2009 = pset.define(2009, p['LxP2']+p['rP3']*math.sin(old_div(math.pi,2.0)),              p['Y0P']+p['LyP']+p['rP3']*(1.-math.cos(old_div(math.pi,2.0))))
 
 
     # curves
@@ -170,10 +174,10 @@ def getMetafor(_parameters={}):
     # Géométrie des outils : Serre-Flanc
 
     p3001 = pset.define(3001, p['X0SF'],                                                 p['Y0SF'])
-    p3002 = pset.define(3002, p['X0SF']+p['rSF']*(1.0-math.cos(math.pi/3.)),             p['Y0SF']-p['rSF']*math.sin(math.pi/3.))
+    p3002 = pset.define(3002, p['X0SF']+p['rSF']*(1.0-math.cos(old_div(math.pi,3.))),             p['Y0SF']-p['rSF']*math.sin(old_div(math.pi,3.)))
     p3003 = pset.define(3003, p['X0SF']+p['rSF'],                                        p['Y0SF']-p['rSF'])
     p3004 = pset.define(3004, p['X0SF']+p['LxSF']-p['rSF'],                              p['Y0SF']-p['rSF'])
-    p3005 = pset.define(3005, p['X0SF']+p['LxSF']-p['rSF']*(1.0-math.cos(math.pi/3.)),   p['Y0SF']-p['rSF']*math.sin(math.pi/3.))
+    p3005 = pset.define(3005, p['X0SF']+p['LxSF']-p['rSF']*(1.0-math.cos(old_div(math.pi,3.))),   p['Y0SF']-p['rSF']*math.sin(old_div(math.pi,3.)))
     p3006 = pset.define(3006, p['X0SF']+p['LxSF'],                                       p['Y0SF'])
 
     # curves
@@ -527,7 +531,7 @@ class SpringBackObjF(PythonObjectiveFunction):
     def __del__(self):
         print("SpringBackObjectiveFunction : __del__")
         print("callToDestructor of SpringBackObjectiveFunction not allowed. Add SpringBackObjectiveFunction.__disown__()")
-        raw_input('')
+        input('')
         exit(1)
         
     def compute(self, meta):    
@@ -564,7 +568,7 @@ class LastVelocity(PythonObjectiveFunction):
     def __del__(self):
         print("LastVelocity : __del__")
         print("callToDestructor of LastVelocity not allowed. Add LastVelocity.__disown__()")
-        raw_input('')
+        input('')
         exit(1)
         
     def compute(self, meta):    
diff --git a/fdtd/tests/fdtd1d_1.py b/fdtd/tests/fdtd1d_1.py
index b797eea0091601231e8498ba2cfa0ecc7e1ca234..1035599c5de48bd75807f65c24d7841f43351513 100755
--- a/fdtd/tests/fdtd1d_1.py
+++ b/fdtd/tests/fdtd1d_1.py
@@ -16,6 +16,9 @@
 # limitations under the License.
 
 
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import math
 import numpy as np
 import matplotlib.pyplot as plt
@@ -30,10 +33,10 @@ maxTime = 1000
 
 result = np.zeros(maxTime, dtype=float)
 
-for qTime in xrange(maxTime):
-    for mm in xrange(0,SIZE-1):
-        hy[mm] = hy[mm] + (ez[mm+1] - ez[mm]) / imp0
-    for mm in xrange(1,SIZE):
+for qTime in range(maxTime):
+    for mm in range(0,SIZE-1):
+        hy[mm] = hy[mm] + old_div((ez[mm+1] - ez[mm]), imp0)
+    for mm in range(1,SIZE):
         ez[mm] = ez[mm] + (hy[mm] - hy[mm-1]) * imp0
     
     ez[0] = math.exp(-(qTime-30.)*(qTime-30.)/100.)
diff --git a/fdtd/tests/fdtd1d_1b.py b/fdtd/tests/fdtd1d_1b.py
index 15ef9eb590ff4a77d0556e4412125b96f0d75f19..5818eb924faefc9add3f9a7ae021a38c226b4f51 100755
--- a/fdtd/tests/fdtd1d_1b.py
+++ b/fdtd/tests/fdtd1d_1b.py
@@ -16,6 +16,9 @@
 # limitations under the License.
 
 
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import math
 import numpy as np
 import matplotlib.pyplot as plt
@@ -41,10 +44,10 @@ if not args.nogui:
     plt.grid(True)
     plt.draw()
 
-for qTime in xrange(maxTime):
-    for mm in xrange(0,SIZE-1):
-        hy[mm] = hy[mm] + (ez[mm+1] - ez[mm]) / imp0
-    for mm in xrange(1,SIZE):
+for qTime in range(maxTime):
+    for mm in range(0,SIZE-1):
+        hy[mm] = hy[mm] + old_div((ez[mm+1] - ez[mm]), imp0)
+    for mm in range(1,SIZE):
         ez[mm] = ez[mm] + (hy[mm] - hy[mm-1]) * imp0
     
     ez[0] = math.exp(-(qTime-30.)*(qTime-30.)/100.)
diff --git a/fdtd/tests/fdtd1d_1c.py b/fdtd/tests/fdtd1d_1c.py
index 9c8e848ef7523b97d6b99f727e2d1e9d91f2ee86..528946b3ab251b3521dbb77cf84ddc05f7fd89b9 100755
--- a/fdtd/tests/fdtd1d_1c.py
+++ b/fdtd/tests/fdtd1d_1c.py
@@ -16,6 +16,9 @@
 # limitations under the License.
 
 
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import math
 import numpy as np
 import matplotlib.pyplot as plt
@@ -47,7 +50,7 @@ else:
 qTime=0
 def animate(i): 
     global qTime
-    for l in xrange(nloop):
+    for l in range(nloop):
         qTime=qTime+1
 
         # ----- Hy -------
@@ -55,11 +58,11 @@ def animate(i):
         hy[SIZE-1] = hy[SIZE-2]
         # perfect magnetic conductor (PMC)
         # hy[SIZE-1] = 0
-        for mm in xrange(0,SIZE-1):
-            hy[mm] = hy[mm] + (ez[mm+1] - ez[mm]) / imp0
+        for mm in range(0,SIZE-1):
+            hy[mm] = hy[mm] + old_div((ez[mm+1] - ez[mm]), imp0)
 
         # correction for TFSF boundary
-        hy[49] -= np.exp(-(qTime - 30.)*(qTime - 30.)/100.) / imp0
+        hy[49] -= old_div(np.exp(-(qTime - 30.)*(qTime - 30.)/100.), imp0)
 
 
         # ----- Ez -------
@@ -67,7 +70,7 @@ def animate(i):
         ez[0] = ez[1] 
         # prescribed source (or perfect electric conductor if =0 (PEC) )
         #ez[0] = np.exp(-(qTime-30.)*(qTime-30.)/100.)
-        for mm in xrange(1,SIZE):
+        for mm in range(1,SIZE):
             ez[mm] = ez[mm] + (hy[mm] - hy[mm-1]) * imp0
 
         # additive source
@@ -87,5 +90,5 @@ if not args.nogui:
     plt.show()
 else:
     # calls the loops without matplotlib
-    for i in xrange(maxTime // nloop):
+    for i in range(maxTime // nloop):
         animate(i)
\ No newline at end of file
diff --git a/fdtd/tests/fdtd1d_1d.py b/fdtd/tests/fdtd1d_1d.py
index 87c0d4e2be040d1afcb45510e19c9800795e0630..d53bfcea691a986bd2d21325fc48d0356338704d 100755
--- a/fdtd/tests/fdtd1d_1d.py
+++ b/fdtd/tests/fdtd1d_1d.py
@@ -16,6 +16,10 @@
 # limitations under the License.
 
 
+from __future__ import division
+from builtins import range
+from builtins import object
+from past.utils import old_div
 import math
 import numpy as np
 import matplotlib.pyplot as plt
@@ -63,10 +67,10 @@ class FDTD(object):
 
         self.ceze[:self.MAT_LAYER] = 1.0
         self.ceze[self.MAT_LAYER:self.LOSS_LAYER] = 1.0
-        self.ceze[self.LOSS_LAYER:] = (1.0-self.LOSS)/(1.0+self.LOSS)
+        self.ceze[self.LOSS_LAYER:] = old_div((1.0-self.LOSS),(1.0+self.LOSS))
 
         self.cezh[:self.MAT_LAYER] = self.imp0
-        self.cezh[self.MAT_LAYER:self.LOSS_LAYER] = self.imp0 / self.EPSR
+        self.cezh[self.MAT_LAYER:self.LOSS_LAYER] = old_div(self.imp0, self.EPSR)
         self.cezh[self.LOSS_LAYER:] = self.imp0 / self.EPSR / (1.0+self.LOSS)
 
         # H eq
@@ -74,9 +78,9 @@ class FDTD(object):
         self.chye = np.zeros(self.SIZE-1)
 
         self.chyh[:self.LOSS_LAYER] = 1.0
-        self.chyh[self.LOSS_LAYER:] = (1.0-self.LOSS)/(1.0+self.LOSS)
+        self.chyh[self.LOSS_LAYER:] = old_div((1.0-self.LOSS),(1.0+self.LOSS))
 
-        self.chye[:self.LOSS_LAYER] = 1.0 / self.imp0
+        self.chye[:self.LOSS_LAYER] = old_div(1.0, self.imp0)
         self.chye[self.LOSS_LAYER:] = 1.0 / self.imp0 / (1.0+self.LOSS)
     
         # initialise matplotlib
@@ -104,11 +108,11 @@ class FDTD(object):
             plt.show()
         else:
             # calls the loops without matplotlib
-            for i in xrange((self.maxTime-1) // self.nloop):
+            for i in range((self.maxTime-1) // self.nloop):
                 self.animate(i)           
 
     def animate(self, i):
-        for l in xrange(self.nloop):
+        for l in range(self.nloop):
             self.qTime = self.qTime + 1
 
             self.updateH()
@@ -130,15 +134,15 @@ class FDTD(object):
         #self.ez[self.SIZE-1] = self.ez[self.SIZE-2]
 
     def updateH(self):
-        for mm in xrange(0, self.SIZE-1):
+        for mm in range(0, self.SIZE-1):
             self.hy[mm] = self.chyh[mm] * self.hy[mm] + self.chye[mm] * (self.ez[mm+1] - self.ez[mm])
 
     def updateE(self):
-        for mm in xrange(1, self.SIZE-1):
+        for mm in range(1, self.SIZE-1):
             self.ez[mm] = self.ceze[mm] * self.ez[mm] + self.cezh[mm] * (self.hy[mm] - self.hy[mm-1])
 
     def ezInc(self, time, location):
-        return np.exp(-math.pow((time - self.delay -location/self.Cdtds)/self.width, 2))
+        return np.exp(-math.pow(old_div((time - self.delay -old_div(location,self.Cdtds)),self.width), 2))
     
     def updateTFSF(self):
         # correction for TFSF boundary
diff --git a/fdtd/tests/projethpc.py b/fdtd/tests/projethpc.py
index c6c4c19e1553b0e73fff51bdb4978a50c2100550..edb956c49c207edef7b2131ccadf95c49a5e5f89 100755
--- a/fdtd/tests/projethpc.py
+++ b/fdtd/tests/projethpc.py
@@ -17,6 +17,10 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from builtins import object
+from past.utils import old_div
 import math
 import numpy as np
 import matplotlib.pyplot as plt
@@ -33,9 +37,9 @@ class FDTD(object):
         self.mu = 4e-7*math.pi  # H/m
         self.eps = 8.854e-12    # F/m
  
-        self.c = 1/math.sqrt(self.mu*self.eps)
+        self.c = old_div(1,math.sqrt(self.mu*self.eps))
         print('c =', self.c)
-        print('wavelength =', self.c/self.f)  # ~12cm pour 2.4GHz
+        print('wavelength =', old_div(self.c,self.f))  # ~12cm pour 2.4GHz
 
         self.dx = 5e-3
         self.dt = self.dx/self.c/2
@@ -55,9 +59,9 @@ class FDTD(object):
         nps = int(math.floor(self.Ls/2.0/self.dx))*2+1 
         print('nps =', nps)
 
-        is1 = (npx-nps)/2
+        is1 = old_div((npx-nps),2)
 
-        Z = math.sqrt(self.mu/self.eps)
+        Z = math.sqrt(old_div(self.mu,self.eps))
         print('Z =', Z)
         CFL = self.c*self.dt/self.dx
         print('CFL =', CFL)
@@ -86,24 +90,24 @@ class FDTD(object):
 
         # time integration
         time = 0.0
-        for i in xrange(self.nstep):
+        for i in range(self.nstep):
             time += self.dt
 
-            for i in xrange(npx):
-                for j in xrange(npx-1):
+            for i in range(npx):
+                for j in range(npx-1):
                     self.hx[i,j] += - CFL/Z * (self.ez[i,j+1] - self.ez[i,j]) 
 
-            for i in xrange(npx-1):
-                for j in xrange(npx):
+            for i in range(npx-1):
+                for j in range(npx):
                     self.hy[i,j] +=   CFL/Z * (self.ez[i+1,j] - self.ez[i,j]) 
 
-            for i in xrange(1,npx):
-                for j in xrange(1,npx):
+            for i in range(1,npx):
+                for j in range(1,npx):
                     self.ez[i,j] +=   Z*CFL * (self.hy[i,j] - self.hy[i-1,j]) - Z*CFL * (self.hx[i,j] - self.hx[i,j-1])
             
             # apply source
-            for i in xrange(is1,is1+nps+1):
-                for j in xrange(is1,is1+nps+1):
+            for i in range(is1,is1+nps+1):
+                for j in range(is1,is1+nps+1):
                     self.ez[i,j] = math.sin(2*math.pi*self.f*time)
                     
             if not args.nogui:
diff --git a/flow/scripts/config.py b/flow/scripts/config.py
index 5a3744cf285cbc77c4e12ff43108b652975a34d7..d9aabb049ddc3ea2ccc254bfb9f0a587fc2a78e8 100644
--- a/flow/scripts/config.py
+++ b/flow/scripts/config.py
@@ -20,6 +20,8 @@
 # @authors Adrien Crovato
 
 from __future__ import print_function
+from builtins import range
+from builtins import object
 import flow as f
 import tbox
 import tbox.gmsh as gmsh
@@ -27,7 +29,7 @@ import fwk
 from fwk.wutils import parseargs
 from fwk.coloring import ccolors
 
-class Config:
+class Config(object):
     def __init__(self, p):
         # timer
         self.tms = fwk.Timers()
diff --git a/flow/scripts/trim.py b/flow/scripts/trim.py
index 9130de1befbd2d15bed57fa5c07c2bcbd70a20a2..09e450efd270428f1c1e868f3f932d5f7192acfb 100644
--- a/flow/scripts/trim.py
+++ b/flow/scripts/trim.py
@@ -21,6 +21,7 @@
 # @authors Adrien Crovato
 
 from __future__ import print_function
+from __future__ import division
 import math
 import flow.utils as fU
 import tbox.utils as tU
diff --git a/flow/tests/cylinder.py b/flow/tests/cylinder.py
index 5b118fb1d6c92d28b3bb631760b95ffc1cc26217..915fc8cf42ab1d2d41002ef82492359eee2d1ad3 100644
--- a/flow/tests/cylinder.py
+++ b/flow/tests/cylinder.py
@@ -25,6 +25,7 @@
 # Mesh refinement may have to be performed to obtain physical results.
 
 from __future__ import print_function
+from __future__ import division
 import math
 import flow as flo
 import flow.default as floD
diff --git a/flow/tests/cylinder2D5.py b/flow/tests/cylinder2D5.py
index 2671c8f9f84bd8258b99d04cbf0f46b296df7309..b105b65f2e169c16dd25acdd729f3794b1de1fed 100644
--- a/flow/tests/cylinder2D5.py
+++ b/flow/tests/cylinder2D5.py
@@ -25,6 +25,7 @@
 # Mesh refinement may have to be performed to obtain physical results.
 
 from __future__ import print_function
+from __future__ import division
 import math
 import flow as flo
 import flow.default as floD
diff --git a/flow/tests/cylinder3.py b/flow/tests/cylinder3.py
index 7649106589539ad2d90be7a29568480bfe11e7e1..145484272b955a5d31d3a6100f4a93e9858a9e8d 100644
--- a/flow/tests/cylinder3.py
+++ b/flow/tests/cylinder3.py
@@ -25,6 +25,7 @@
 # Mesh refinement may have to be performed to obtain physical results.
 
 from __future__ import print_function
+from __future__ import division
 import math
 import flow as flo
 import flow.utils as floU
diff --git a/flow/utils.py b/flow/utils.py
index aab4fddc56b1106dace6580738c5ecb93f23ddfc..9b4853248489ca6f9167871002524091d6d5886f 100644
--- a/flow/utils.py
+++ b/flow/utils.py
@@ -20,6 +20,9 @@
 Utilities for flow
 Adrien Crovato
 """
+from __future__ import division
+from builtins import str
+from builtins import range
 
 def computeAeroCoef(_x, _y, _Cp, _alpha):
     """Compute 2D aerodynamic coefficients
diff --git a/flow/viscous/coupler.py b/flow/viscous/coupler.py
index 7f699a3af361d47d833e97a5cb6d2d38117f2110..66c10e6e796ca94b79a86fccda058b89f22d46fb 100644
--- a/flow/viscous/coupler.py
+++ b/flow/viscous/coupler.py
@@ -20,10 +20,12 @@
 # @authors Adrien Crovato, Amaury Bilocq
 
 from __future__ import print_function
+from builtins import range
+from builtins import object
 import numpy as np
 from fwk.coloring import ccolors
 
-class Coupler():
+class Coupler(object):
     def __init__(self, _isolver, _vsolver, _writer):
         '''...
         '''
diff --git a/flow/viscous/solver.py b/flow/viscous/solver.py
index dc7378677e4cd5bc5cd60f6418d063a2a9868dc3..af289ab372f4fe15ab25f498a151ee8e8b642fc0 100644
--- a/flow/viscous/solver.py
+++ b/flow/viscous/solver.py
@@ -20,9 +20,11 @@
 # @authors Adrien Crovato, Amaury Bilocq
 
 from __future__ import print_function
+from builtins import range
+from builtins import object
 import numpy as np
 
-class Solver():
+class Solver(object):
     def __init__(self, _boundary):
         '''...
         '''
diff --git a/fwk/coloring.py b/fwk/coloring.py
index a57b1b5a3e71cb4525ff23074622d05ce403d51b..af00fe023ce2e602b1acee84f1b682fd6b61d69b 100644
--- a/fwk/coloring.py
+++ b/fwk/coloring.py
@@ -14,9 +14,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from builtins import object
 # custom color class
 
-class ccolors:
+class ccolors(object):
     ANSI_RED    = '\x1b[1;31m'
     ANSI_GREEN  = '\x1b[1;32m'
     ANSI_YELLOW = '\x1b[1;33m'
diff --git a/fwk/testing.py b/fwk/testing.py
index e4409501d5321e089d747bb9df103639acef8d50..596a17229e465e6b2e61b114ffb21fa7a41fbf7c 100644
--- a/fwk/testing.py
+++ b/fwk/testing.py
@@ -19,9 +19,12 @@
 
 from __future__ import print_function
 from __future__ import absolute_import
+from __future__ import division
+from builtins import object
+from past.utils import old_div
 from .coloring import ccolors
 
-class CTest:
+class CTest(object):
     def __init__(self, name, val, expected, maxdiff=1e-10, refval=0.0, forceabs=False):
         self.name     = name                  # name of the test
         self.val      = float(val)            # calculated value
@@ -40,7 +43,7 @@ class CTest:
         denom = max(abs(self.refval), abs(self.expected))
         
         if not self.forceabs and denom>self.maxdiff:
-            diff = adiff/denom # relative diff
+            diff = old_div(adiff,denom) # relative diff
             typ='rel'
             percent = '%3.1f%%' % (self.maxdiff*100)
         else:
@@ -61,7 +64,7 @@ class CTest:
         print("\t%s diff = %e %s %e [%s]" % (typ, diff, sgn, self.maxdiff, info))
         return ok   
             
-class CTests:
+class CTests(object):
     def __init__(self):
         self.tests = []
     def add(self, t):
diff --git a/fwk/tests/timers.py b/fwk/tests/timers.py
index 8f11e46e0c8d3db96561ce239f97e043e93ba664..ae30411faa6de8c9630834edd840eadbd3a4e567 100644
--- a/fwk/tests/timers.py
+++ b/fwk/tests/timers.py
@@ -18,6 +18,7 @@
 # basic test of timers
 
 from __future__ import print_function
+from builtins import range
 import fwk
 from time import sleep
 
diff --git a/fwk/wutils.py b/fwk/wutils.py
index 2ecb7df3c281889ac0309950301ad1efaddde050..b789f6afd5e58d946f52b48f4a3ec868f2258029 100644
--- a/fwk/wutils.py
+++ b/fwk/wutils.py
@@ -18,6 +18,7 @@
 # Python utilities
 
 from __future__ import print_function
+from builtins import range
 try: # permet d'importer les .so de mkl à partir d'un module python
     import sys,DLFCN
     sys.setdlopenflags(DLFCN.RTLD_NOW|DLFCN.RTLD_GLOBAL)
@@ -142,7 +143,7 @@ def initMKL(nthreads):
     # display variables
     for s in ['OMP_', 'MKL', 'KMP']:
         print('* %s environment:' % s)        
-        for key, value in os.environ.iteritems():
+        for key, value in os.environ.items():
             if s in key:
                 print('\t%s = %s' % (key, value))
   
diff --git a/heat/broken/heat_multiscale.py b/heat/broken/heat_multiscale.py
index 6750cfab98a5c86b315341f6ec042f8b31b37cb1..7ff48dd7549a304e226c6d417f9034d9bce493bf 100755
--- a/heat/broken/heat_multiscale.py
+++ b/heat/broken/heat_multiscale.py
@@ -3,6 +3,8 @@
 # 1er test multiscale (sans MPI)
 
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 import heat as h
 import tbox
 import tbox.gmsh as gmsh
@@ -60,7 +62,7 @@ class MicroModel(tbox.Fct2UdU):
         
         dTnorm = math.sqrt(dTxM*dTxM+dTyM*dTyM)
         qnorm  = math.sqrt(qMx*qMx+qMy*qMy)
-        ampl   = qnorm/dTnorm
+        ampl   = old_div(qnorm,dTnorm)
         
         ps = -(dTxM*qMx+dTyM*qMy)/dTnorm/qnorm
         if ps>1.0: ps=1.0
diff --git a/heat/broken/jalil1.py b/heat/broken/jalil1.py
index 04b068f3e0ef942de08f013f20458bb961eed84e..8273b921dea30a82873ee0afedbea7387254bcbf 100755
--- a/heat/broken/jalil1.py
+++ b/heat/broken/jalil1.py
@@ -5,6 +5,10 @@
 # exc:   mpiexec.openmpi -n 12 ./jalil1.py
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
+from builtins import object
 import heat as h
 import tbox
 import tbox.gmsh as gmsh
@@ -21,7 +25,7 @@ if siz!=2:
     import sys; sys.exit()
 """
 
-class Job:
+class Job(object):
     def __init__(self, TM, dTxM, dTyM):
         # input
         self.TM   = TM
@@ -77,7 +81,7 @@ class MicroModel(tbox.Fct2UdU):
         # convert flux to an anisotropic conductivity "k(2,2)"
         dTnorm=math.sqrt(dTxM*dTxM+dTyM*dTyM)
         qnorm=math.sqrt(qMx*qMx+qMy*qMy)
-        ampl=qnorm/dTnorm
+        ampl=old_div(qnorm,dTnorm)
         
         ps=-(dTxM*qMx+dTyM*qMy)/dTnorm/qnorm
         if ps>1.0: ps=1.0
@@ -163,7 +167,7 @@ class MicroModel(tbox.Fct2UdU):
         # version N procs
         i=0
         njobs=len(self.jobs)
-        slaves=range(1,siz)
+        slaves=list(range(1,siz))
         while True:
             #send jobs to slaves
             jlist=[]
@@ -210,7 +214,7 @@ def main():
         solver.start()
 
         # kill slaves:
-        slaves=range(1,siz)
+        slaves=list(range(1,siz))
         for s in slaves:
             job=Job(0,0,0); job.killme=True
             if myk.verb: print("[%d] sending suicide job to %d" % (rank,s))
diff --git a/heat/broken/jalil2.py b/heat/broken/jalil2.py
index fc86dbe20df6275306adb1408ffd9ad237f8a0da..0c9b218091ee59639af65174ca82d8ab577f49ea 100755
--- a/heat/broken/jalil2.py
+++ b/heat/broken/jalil2.py
@@ -6,6 +6,11 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import next
+from builtins import range
+from past.utils import old_div
+from builtins import object
 import heat as h
 import tbox
 import tbox.gmsh as gmsh
@@ -25,7 +30,7 @@ except:
     name = "noname"
     print("info: MPI not found => MPI disabled")
 
-class Job:
+class Job(object):
     """ Class containing data transmitted between MPI procs
     """
     def __init__(self, id, TM, dTxM, dTyM):
@@ -109,7 +114,7 @@ class MicroModel(tbox.Fct2UdU):
         # convert flux to an anisotropic conductivity "k(2,2)"
         dTnorm=math.sqrt(dTxM*dTxM+dTyM*dTyM)
         qnorm=math.sqrt(qMx*qMx+qMy*qMy)
-        ampl=qnorm/dTnorm
+        ampl=old_div(qnorm,dTnorm)
         
         ps=-(dTxM*qMx+dTyM*qMy)/dTnorm/qnorm
         if ps>1.0: ps=1.0
@@ -172,14 +177,14 @@ class MicroModel(tbox.Fct2UdU):
         # version 1 proc (master travaille seul)
         if siz==1:
             #for job in self.jbz.itervalues():
-            for id,job in self.jbz.iteritems():
+            for id,job in self.jbz.items():
                 self.execute(job) 
             return
 
         # version N procs
         it=self.jbz.__iter__()
         njobs=len(self.jbz)
-        slaves=range(1,siz)
+        slaves=list(range(1,siz))
         while True:
             #send jobs to slaves
             jlist=[]
@@ -231,7 +236,7 @@ def main():
         solver.start()
 
         # kill slaves:
-        slaves=range(1,siz)
+        slaves=list(range(1,siz))
         for s in slaves:
             job=Job((0,0),0,0,0); job.killme=True
             if myk.verb: print("[%d] sending suicide job to %d" % (rank,s))
diff --git a/heat/broken/jalil2_taskpull.py b/heat/broken/jalil2_taskpull.py
index a2830f4aaa620aa79cb9a19a69ac038a3e599797..471b591f371dcf4f1f3fb6937b5005247aca7d60 100755
--- a/heat/broken/jalil2_taskpull.py
+++ b/heat/broken/jalil2_taskpull.py
@@ -1,3 +1,4 @@
+from builtins import object
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 # test multiscale - version "task pull"
@@ -9,7 +10,7 @@ import tbox
 import tbox.gmsh as gmsh
 import heat.fe2 as fe2
 
-class HoneyComb:
+class HoneyComb(object):
     def __init__(self):
         self.msh = gmsh.MeshLoader("jalil2_honey.geo", __file__).execute()
         self.pbl = h.Problem(self.msh)
@@ -46,7 +47,7 @@ class HoneyComb:
         self.p = h.Periodic(self.pbl, 0.0, 0.0, 0.0) 
 
 
-class Lshape:
+class Lshape(object):
     def __init__(self, law):
         self.msh = gmsh.MeshLoader("jalil1_corner.geo", __file__).execute()
         self.pbl = h.Problem(self.msh)
diff --git a/heat/fe2.py b/heat/fe2.py
index be8b60f4f72f2cf3da0446e063e3fd1fe7976dd3..d27ef369e84d42167cf8b7382c1d44d0c37483be 100755
--- a/heat/fe2.py
+++ b/heat/fe2.py
@@ -19,6 +19,12 @@
 # FE² for "heat" - version "MPI task pull"
 
 from __future__ import print_function
+from __future__ import division
+from builtins import zip
+from builtins import next
+from builtins import range
+from builtins import object
+from past.utils import old_div
 import heat as h
 import tbox
 import math
@@ -45,14 +51,14 @@ def barrier():
         comm.Barrier()
 
 def enum(*sequential, **named):
-    enums = dict(zip(sequential, range(len(sequential))), **named)
+    enums = dict(list(zip(sequential, list(range(len(sequential))))), **named)
     return type('Enum', (), enums)
 
 tags = enum('READY', 'DONE', 'EXIT', 'START', 'WAKEUP', 'SUICIDE')
 
 
 
-class Job:
+class Job(object):
     """ Class containing data transmitted between MPI procs
     """
     def __init__(self, id, TM, dTxM, dTyM):
@@ -90,7 +96,7 @@ class Job:
         # convert flux to an anisotropic conductivity "k(2,2)"
         dTnorm = math.sqrt(dTxM*dTxM+dTyM*dTyM)
         qnorm  = math.sqrt(qMx*qMx+qMy*qMy)
-        ampl   = qnorm/dTnorm
+        ampl   = old_div(qnorm,dTnorm)
         
         if 1:
             cos=-(dTxM*qMx+dTyM*qMy)/dTnorm/qnorm
@@ -176,14 +182,14 @@ class FE2(tbox.Fct2UdU):
         # version 1 proc (master works alone)
         if siz==1:
             #for job in self.jbz.itervalues():
-            for id,job in self.jbz.iteritems():
+            for id,job in self.jbz.items():
                 job.execute(self.fem) 
             return
 
         # version N procs
         it=self.jbz.__iter__()
         njobs=len(self.jbz)
-        slaves=range(1,siz)
+        slaves=list(range(1,siz))
         
         for s in slaves:
             if verb: print("[0] sending wake-up signal to worker", s)
@@ -228,7 +234,7 @@ class FE2(tbox.Fct2UdU):
                 
         if verb: print("[0] done.")
         
-class Master:
+class Master(object):
     """
     MPI Process with rank #0
     """
@@ -256,13 +262,13 @@ class Master:
             GUI().open(self.macro.msh.name)
         
     def killslaves(self):
-        slaves=range(1,siz)
+        slaves=list(range(1,siz))
         for s in slaves:
             if verb: print("[%d] sending suicide job to %d" % (rank,s))
             comm.send(None, dest=s, tag=tags.SUICIDE)
 
 
-class Worker:
+class Worker(object):
     """
     MPI Process with rank #1-#n
     """
diff --git a/heat/tests/basics/dirichletx.py b/heat/tests/basics/dirichletx.py
index 71ef436b3cc7ea44ffdaa43a45846f8b5a438c17..90a1fb171bfb1415e12aaeeab746964c1cb52a13 100755
--- a/heat/tests/basics/dirichletx.py
+++ b/heat/tests/basics/dirichletx.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import heat.utils as u
 from fwk.testing import *
 
@@ -28,7 +30,7 @@ if __name__ == "__main__":
     u.simpleplot(x1, T1, xlabel='x [mm]', title='Temperature along x')
        
     tests = CTests()
-    tests.add(CTest('mean(Tbottom)', sum(T1)/len(T1), 4.0, 1e-9))
+    tests.add(CTest('mean(Tbottom)', old_div(sum(T1),len(T1)), 4.0, 1e-9))
     tests.add(CTest('max(Tbottom)', max(T1), 5.0))
     tests.add(CTest('min(Tbottom)', min(T1), 3.0))
     tests.run()
diff --git a/heat/tests/basics/dirichletx_stru.py b/heat/tests/basics/dirichletx_stru.py
index 79aeb56c13186a6cb1a4ecb491d8a16bf9bd9793..88de71e59f7244e8b284a9828c2e50b86bbe2e9f 100755
--- a/heat/tests/basics/dirichletx_stru.py
+++ b/heat/tests/basics/dirichletx_stru.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import heat.utils as u
 from fwk.testing import *
 
@@ -28,7 +30,7 @@ if __name__ == "__main__":
     u.simpleplot(x1, T1, xlabel='x [mm]', title='Temperature along x')
        
     tests = CTests()
-    tests.add(CTest('mean(Tbottom)', sum(T1)/len(T1), 4.0, 1e-9))
+    tests.add(CTest('mean(Tbottom)', old_div(sum(T1),len(T1)), 4.0, 1e-9))
     tests.add(CTest('max(Tbottom)', max(T1), 5.0))
     tests.add(CTest('min(Tbottom)', min(T1), 3.0))
     tests.run()
diff --git a/heat/tests/basics/dirichlety.py b/heat/tests/basics/dirichlety.py
index a8163a65726d00e9bd1eacb890b88ecdc5dc95f7..8bad69bbf68bf7e59a34670cfe11a4416655824f 100755
--- a/heat/tests/basics/dirichlety.py
+++ b/heat/tests/basics/dirichlety.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import heat.utils as u
 from fwk.testing import *
 
@@ -28,7 +30,7 @@ if __name__ == "__main__":
     u.simpleplot(y1, T1, xlabel='y [mm]', title='Temperature along y')
        
     tests = CTests()
-    tests.add(CTest('mean(Tleft)', sum(T1)/len(T1), 4.0, 1e-9))
+    tests.add(CTest('mean(Tleft)', old_div(sum(T1),len(T1)), 4.0, 1e-9))
     tests.add(CTest('max(Tleft)', max(T1), 5.0))
     tests.add(CTest('min(Tleft)', min(T1), 3.0))
     tests.run()
diff --git a/heat/tests/basics/mat2hole.py b/heat/tests/basics/mat2hole.py
index 77170350ec550fff7841923bd5b1607aa8d1753a..f9daa959a6edd1c2540cd7548ebbd7cf7d7bdbd8 100755
--- a/heat/tests/basics/mat2hole.py
+++ b/heat/tests/basics/mat2hole.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import heat as h
 import heat.utils as u
 import tbox
@@ -52,7 +54,7 @@ def main(**d):
     u.simpleplot(x1, T1, xlabel='x [mm]', title='Temperature along x')
        
     tests = CTests()
-    tests.add(CTest('mean(Ttop)', sum(T1)/len(T1), 6.639428, 1e-3))
+    tests.add(CTest('mean(Ttop)', old_div(sum(T1),len(T1)), 6.639428, 1e-3))
     tests.add(CTest('max(Ttop)', max(T1), 8.3445125, 1e-3))
     tests.add(CTest('min(Ttop)', min(T1), 3.0))
     tests.run()
diff --git a/heat/tests/basics/source.py b/heat/tests/basics/source.py
index 0d0f671ff1975dd0e53fe12391ae1add3d71291c..0d0f9f08abef2e7e89c31acb90f6b013f77aa839 100755
--- a/heat/tests/basics/source.py
+++ b/heat/tests/basics/source.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import heat.utils as u
 from fwk.testing import *
 
@@ -28,7 +30,7 @@ if __name__ == "__main__":
     u.simpleplot(x1, T1, xlabel='x [mm]', title='Temperature along x')
        
     tests = CTests()
-    tests.add(CTest('mean(Tbottom)', sum(T1)/len(T1), 4.791563, 1e-4))
+    tests.add(CTest('mean(Tbottom)', old_div(sum(T1),len(T1)), 4.791563, 1e-4))
     tests.add(CTest('max(Tbottom)', max(T1), 5.449610, 1e-4))
     tests.add(CTest('min(Tbottom)', min(T1), 3.0))
     tests.run()
diff --git a/heat/tests/directors/material.py b/heat/tests/directors/material.py
index 80ce7c7f95a03b972c90c8ca5333ee22d847b631..5342a7a676846a76d3550f0e09dad27b7a99862d 100755
--- a/heat/tests/directors/material.py
+++ b/heat/tests/directors/material.py
@@ -19,6 +19,8 @@
 # simple test where 
 # the material anisotropy depends on temperature
 
+from __future__ import division
+from past.utils import old_div
 import heat as h
 import heat.utils as u
 import tbox
@@ -88,7 +90,7 @@ def main():
     u.simpleplot(x1, T1, xlabel='x [mm]', title='Temperature along x')
        
     tests = CTests()
-    tests.add(CTest('mean(Ttop)', sum(T1)/len(T1), 5.0, 5e-2))
+    tests.add(CTest('mean(Ttop)', old_div(sum(T1),len(T1)), 5.0, 5e-2))
     tests.add(CTest('max(Ttop)', max(T1), 10, 1e-3))
     tests.add(CTest('min(Ttop)', min(T1), 0, 0.1))
     tests.run()
diff --git a/heat/tests/directors/neumann.py b/heat/tests/directors/neumann.py
index aa69dd6e0ff67446610e6dfd8de487f5d36f4202..128c9f49c23d5068c157c3e74ba2a45833f1854a 100755
--- a/heat/tests/directors/neumann.py
+++ b/heat/tests/directors/neumann.py
@@ -18,6 +18,8 @@
 
 # test of Neumann BCs
 
+from __future__ import division
+from past.utils import old_div
 import heat as h
 import heat.utils as u
 import tbox
@@ -63,7 +65,7 @@ def main():
     u.simpleplot(y1, T1, xlabel='y [mm]', title='Temperature along y')
        
     tests = CTests()
-    tests.add(CTest('mean(Tleft)', sum(T1)/len(T1), 0.0, 1e-6))
+    tests.add(CTest('mean(Tleft)', old_div(sum(T1),len(T1)), 0.0, 1e-6))
     tests.add(CTest('max(Tleft)', max(T1), 15.782894, 1e-3))
     tests.add(CTest('max+min(Tleft)', max(T1)+min(T1), 0.0, 1e-6))
     tests.run()
diff --git a/heat/tests/fe2/Lmpi.py b/heat/tests/fe2/Lmpi.py
index d0d33d19c9bade4266999cf4f3747e16cbf8397e..fdb8c21aaf542cf39d6327d2d84046f40cad9127 100644
--- a/heat/tests/fe2/Lmpi.py
+++ b/heat/tests/fe2/Lmpi.py
@@ -21,6 +21,7 @@
 # mpiexec.openmpi --bycore --bind-to-core -n 6 ./run.py heat/tests/fe2/heat_mpi.py
 
 
+from builtins import object
 import heat as h
 import heat.utils as u
 import tbox
@@ -28,7 +29,7 @@ import tbox.gmsh as gmsh
 import heat.fe2 as fe2
 from fwk.testing import *
 
-class Micro:
+class Micro(object):
     def __init__(self):
         self.msh = gmsh.MeshLoader("Lmicro.geo", __file__).execute()
         self.gmshWriter = tbox.GmshExport(self.msh)
@@ -44,7 +45,7 @@ class Micro:
         self.solver.save = False
         self.solver.verbose = 0
              
-class Macro:
+class Macro(object):
     def __init__(self, law):
         self.msh = gmsh.MeshLoader("Lmacro.geo", __file__).execute()
         self.gmshWriter = tbox.GmshExport(self.msh)
diff --git a/heat/tests/fe2/heat_mpi.py b/heat/tests/fe2/heat_mpi.py
index 777aa7069ea71f72dea7d46af63b4779e97b1da6..0d499f0b0aa84e8b5f6cc916a7d32df289104b1f 100755
--- a/heat/tests/fe2/heat_mpi.py
+++ b/heat/tests/fe2/heat_mpi.py
@@ -22,6 +22,10 @@
 # windows (msmpi):
 #   mpiexec -n 6 python run.py heat\tests\fe2\heat_mpi.py
 
+
+from __future__ import division
+from past.utils import old_div
+from builtins import object
 import heat as h
 import heat.utils as u
 import tbox
@@ -29,7 +33,7 @@ import tbox.gmsh as gmsh
 import heat.fe2 as fe2
 from fwk.testing import *
 
-class Micro:
+class Micro(object):
     def __init__(self):
         self.msh = gmsh.MeshLoader("micro.geo", __file__).execute()
         self.gmshWriter = tbox.GmshExport(self.msh)
@@ -45,7 +49,7 @@ class Micro:
         self.solver.save = False
         self.solver.verbose = 0
              
-class Macro:
+class Macro(object):
     def __init__(self, law):
         self.msh = gmsh.MeshLoader("macro.geo", __file__).execute()
         self.gmshWriter = tbox.GmshExport(self.msh)
@@ -83,7 +87,7 @@ if __name__ == "__main__":
         u.simpleplot(x1, T1, xlabel='x [mm]', title='Temperature along x')
            
         tests = CTests()
-        tests.add(CTest('mean(Tleft)', sum(T1)/len(T1), 4.683412, 2e-5))
+        tests.add(CTest('mean(Tleft)', old_div(sum(T1),len(T1)), 4.683412, 2e-5))
         tests.add(CTest('max(Tleft)', max(T1), 10.0))
         tests.add(CTest('min(Tleft)', min(T1), 0.0))
         tests.run()
diff --git a/heat/tests/nonlinear/mat2vark.py b/heat/tests/nonlinear/mat2vark.py
index e07723c5e83c589c6fe9249c09893f76a2f4b59e..a46b72e515ba39036f2d2651251d5dac4db3a80f 100644
--- a/heat/tests/nonlinear/mat2vark.py
+++ b/heat/tests/nonlinear/mat2vark.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import heat as h
 import heat.utils as u
 import tbox
@@ -58,7 +60,7 @@ def main(**d):
     u.simpleplot(x1, T1, xlabel='x [mm]', title='Temperature along x')
        
     tests = CTests()
-    tests.add(CTest('mean(Ttop)', sum(T1)/len(T1), 169, 1., forceabs=True))
+    tests.add(CTest('mean(Ttop)', old_div(sum(T1),len(T1)), 169, 1., forceabs=True))
     tests.add(CTest('max(Ttop)', max(T1), 300))
     tests.add(CTest('min(Ttop)', min(T1), 0., refval=300))
     tests.run()
diff --git a/heat/tests/periodic/honeycomb.py b/heat/tests/periodic/honeycomb.py
index 846bb0a82135c3733f50be1f4866621e32bceecb..4cf057f30b3911192b37a6bcfee104b65243fbb6 100755
--- a/heat/tests/periodic/honeycomb.py
+++ b/heat/tests/periodic/honeycomb.py
@@ -18,6 +18,8 @@
 
 # test periodic BCs on a honeycomb structure
 
+from __future__ import division
+from past.utils import old_div
 import heat as h
 import heat.utils as u
 import tbox
@@ -28,10 +30,10 @@ class MyMaterial(tbox.Fct2U):
     def __init__(self):
         tbox.Fct2U.__init__(self)
     def eval(self, u, k, fake):
-        t1 = -5
-        t2 = 45
-        k1 = 1
-        k2 = 100
+        t1 = -5.
+        t2 = 45.
+        k1 = 1.
+        k2 = 100.
         k[0,0] = k[1,1] = k1+(k2-k1)/(t2-t1)*(u-t1)
         #k[0,0] = k[1,1] = k1 # simple case
         #print "returning k=%f" %k
@@ -39,7 +41,7 @@ class MyMaterial(tbox.Fct2U):
 
 def main():
     # mesh a unit square
-    pars={ 'h' : 10. , 'k' : 1., 'lc' : 1./3}
+    pars={ 'h' : 10. , 'k' : 1., 'lc' : old_div(1.,3)}
     msh = gmsh.MeshLoader("../../models/honeycomb.geo",__file__).execute(**pars)
     gmshWriter = tbox.GmshExport(msh)
     pbl = h.Problem(msh)
@@ -59,8 +61,8 @@ def main():
 
     # extract some results            
     tests = CTests()
-    tests.add(CTest('mean flux X', p.qM.x[0], -11.140748, 1e-4))
-    tests.add(CTest('mean flux Y', p.qM.x[1], -11.102918, 1e-4))
+    tests.add(CTest('mean flux X', p.qM.x[0], -12.6239, 1e-4))
+    tests.add(CTest('mean flux Y', p.qM.x[1], -12.4904, 1e-4))
     tests.run()
 
 
diff --git a/heat/tests/periodic/lincomb.py b/heat/tests/periodic/lincomb.py
index 6f3f00c0f4fa58c10799a6e02b4de8cfd5258ead..c94c51175c5cdc08815a2b4aafd49ac2d24991b6 100755
--- a/heat/tests/periodic/lincomb.py
+++ b/heat/tests/periodic/lincomb.py
@@ -21,6 +21,8 @@
 # then, checks if the resulting flux is the same as a direct calculation
 
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 import heat as h
 import heat.utils as u
 import tbox
@@ -41,7 +43,7 @@ class MyMaterial(tbox.Fct2XYZ):
         y = pt.x[1]
         L = 1.
         import math
-        v = (self.k1+self.k2)/2+ abs(self.k2-self.k1)/2*math.sin(2*math.pi/L*4*(x+y/2))
+        v = old_div((self.k1+self.k2),2)+ abs(self.k2-self.k1)/2*math.sin(2*math.pi/L*4*(x+old_div(y,2)))
         k[0,0] = k[1,1] = v;
         #k[0,0] = self.k1  # constant
         #k[1,1] = self.k2
diff --git a/heat/tests/periodic/lincomb_fast.py b/heat/tests/periodic/lincomb_fast.py
index 840d02d546e4196bca083b1f978fcb437724557a..792cf5ffd29d32d6c0404a3b7e1de15757d796ca 100755
--- a/heat/tests/periodic/lincomb_fast.py
+++ b/heat/tests/periodic/lincomb_fast.py
@@ -19,6 +19,8 @@
 # A NETTOYER
 
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 import heat as h
 import heat.utils as u
 import tbox
@@ -37,7 +39,7 @@ class MyF(tbox.Fct2XYZ):
         y = pt.x[1]
         L = 1.
         import math
-        v = (self.k1+self.k2)/2+ abs(self.k2-self.k1)/2*math.sin(2*math.pi/L*4*(x+y/2))
+        v = old_div((self.k1+self.k2),2)+ abs(self.k2-self.k1)/2*math.sin(2*math.pi/L*4*(x+old_div(y,2)))
         k[0,0] = k[1,1] = v;
         """
         return (self.k1+self.k2)/2+ abs(self.k2-self.k1)/2*math.sin(2*math.pi/L*4*x)*math.sin(2*math.pi/L*4*y)
diff --git a/heat/utils.py b/heat/utils.py
index 71b23b0a9324990fd213725a230231ab62fcbf53..73eae8a7e6c7180bebea467bf35b6b8e148b1ab1 100644
--- a/heat/utils.py
+++ b/heat/utils.py
@@ -15,7 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
+from builtins import range
 import tbox
 import heat as h
 
diff --git a/heat/viewer.py b/heat/viewer.py
index ca78da0a5ed9d5b86a8e661c0e766a4fec86b126..48fdcd8695dbd0a674fce361ebd49138eae31e7e 100644
--- a/heat/viewer.py
+++ b/heat/viewer.py
@@ -16,9 +16,11 @@
 # limitations under the License.
 
 
+from builtins import range
+from builtins import object
 import os, os.path
 
-class GUI:
+class GUI(object):
     def __init__(self):
         pass
     def open(self,prefix):
diff --git a/mirrors/attic/loop_old.py b/mirrors/attic/loop_old.py
index 52c2d027e806a369720f6e00ed6c8d91ecb651f0..6d9df2194be8447b3b5b59ae8d2bd5dc02385dd0 100755
--- a/mirrors/attic/loop_old.py
+++ b/mirrors/attic/loop_old.py
@@ -2,6 +2,8 @@
 # -*- coding: utf-8 -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import numpy as np
 import time
 from params.src.func import grid 
diff --git a/mirrors/attic/loop_old2.py b/mirrors/attic/loop_old2.py
index cbbab9770939de69b81d68d867e6c74d7f87a441..a90dee58413dc2d15b2f1de9787a04eb74212942 100755
--- a/mirrors/attic/loop_old2.py
+++ b/mirrors/attic/loop_old2.py
@@ -2,6 +2,8 @@
 # -*- coding: utf-8 -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import numpy as np
 import time
 
diff --git a/mirrors/broken/NISP_Leg_cond.py b/mirrors/broken/NISP_Leg_cond.py
index 9e81374044d9a28d6e735f5c3c039a9dd2058226..a9b476e8424b99f33d828ae49b27f92dc321995f 100755
--- a/mirrors/broken/NISP_Leg_cond.py
+++ b/mirrors/broken/NISP_Leg_cond.py
@@ -2,6 +2,9 @@
 # -*- coding: utf-8 -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import numpy as np
 import time
 import os
@@ -14,15 +17,15 @@ def main():
     m1 = 10
     m2 = 11
 
-    d = range(1,m1+1)
-    n = range(0,m2)
+    d = list(range(1,m1+1))
+    n = list(range(0,m2))
 
     X, Y = np.meshgrid(d, n)
     cond = np.zeros((m1,m2))
 
     for i in range(0,m1):
         for j in range(0,m2):
-            cond[i,j] = (2**d[i])/((2./(2*n[j]+1))**d[i])
+            cond[i,j] = old_div((2**d[i]),((old_div(2.,(2*n[j]+1)))**d[i]))
 
     args = parseargs()
     if not args.nogui:
diff --git a/mirrors/broken/mirrors01.py b/mirrors/broken/mirrors01.py
index 772001a70e850501cde10287e7d6a6ad8ee7d190..1e05d4211c48fa410862a308b3d86cd84a657c38 100755
--- a/mirrors/broken/mirrors01.py
+++ b/mirrors/broken/mirrors01.py
@@ -2,6 +2,7 @@
 # -*- coding: utf-8 -*-
 
 from __future__ import print_function
+from builtins import range
 import mirrors as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mirrors/broken/mirrors_test_battery.py b/mirrors/broken/mirrors_test_battery.py
index a5e7e9dc2baae328376f2873d7ea921c480b58cf..4765b3d93c088084810cdeaf25d789cf9e2bb43d 100755
--- a/mirrors/broken/mirrors_test_battery.py
+++ b/mirrors/broken/mirrors_test_battery.py
@@ -2,6 +2,8 @@
 # -*- coding: utf-8 -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import time
 import mirrors as m
 import tbox
diff --git a/mirrors/figs/LSP.py b/mirrors/figs/LSP.py
index 56ee72cc372afdade86b39b7e2918b8b1a866c7b..441fd0d6e7f3d4134ac66bbebd496f52c9c2b5fc 100755
--- a/mirrors/figs/LSP.py
+++ b/mirrors/figs/LSP.py
@@ -2,13 +2,16 @@
 # -*- coding: utf-8 -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import numpy as np
 import matplotlib.pyplot as plt
 
 def main():
     m = 100
     n = 100
-    x = 2*(np.arange(0,m)/(m-1.) -0.5)
+    x = 2*(old_div(np.arange(0,m),(m-1.)) -0.5)
 
     Z = np.zeros((m,n))
 
@@ -22,7 +25,7 @@ def main():
         plt.plot(x,Z[:,i])
 
     plt.subplot(1,3,2)
-    plt.semilogy(range(1,n+1),s,'*')
+    plt.semilogy(list(range(1,n+1)),s,'*')
     plt.xlabel('i')
     plt.ylabel('sigma_i')
 
diff --git a/mirrors/figs/LSP_2.py b/mirrors/figs/LSP_2.py
index 97df03f8df7035dd85569a54e90f2ff4d8263c5a..769e1542b3ccb7e63316654c103c2007875abc64 100755
--- a/mirrors/figs/LSP_2.py
+++ b/mirrors/figs/LSP_2.py
@@ -2,6 +2,7 @@
 # -*- coding: utf-8 -*-
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import matplotlib.pyplot as plt
 
@@ -28,7 +29,7 @@ def main():
         plt.plot(x,Z[:,i])
 
     plt.subplot(1,3,2)
-    plt.semilogy(range(1,n+1),s,'*')
+    plt.semilogy(list(range(1,n+1)),s,'*')
     plt.xlabel('i')
     plt.ylabel('sigma_i')
 
diff --git a/mirrors/figs/LSP_3.py b/mirrors/figs/LSP_3.py
index c97ed6aba612ed62898ce8bcb53c766e4470307f..3e4c047f18cff8f860541c5c1efcd70b83af5a1a 100755
--- a/mirrors/figs/LSP_3.py
+++ b/mirrors/figs/LSP_3.py
@@ -1,3 +1,4 @@
+from builtins import range
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
@@ -45,8 +46,8 @@ def main():
 
     plt.figure()
 
-    plt.semilogy(range(1,n+1),s_1,'*')
-    plt.semilogy(range(1,n**2+1),s_2,'*')
+    plt.semilogy(list(range(1,n+1)),s_1,'*')
+    plt.semilogy(list(range(1,n**2+1)),s_2,'*')
 
     fig = plt.figure()
     ax = fig.gca(projection='3d')
diff --git a/mirrors/figs/numpy_matplotlib02.py b/mirrors/figs/numpy_matplotlib02.py
index 9c0e9bb34558c192d5bab135d9f932ab97cc35b6..6085080314bdbe2ba0c6ba70a24c000cf6594803 100755
--- a/mirrors/figs/numpy_matplotlib02.py
+++ b/mirrors/figs/numpy_matplotlib02.py
@@ -1,3 +1,4 @@
+from builtins import range
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
diff --git a/mirrors/mparams/mparams.py b/mirrors/mparams/mparams.py
index 3e15d0bc2187dc7c862f680a2324818e4d707dd1..20bd18d4d80e5ddb153924401a32a88be3b3ccbd 100755
--- a/mirrors/mparams/mparams.py
+++ b/mirrors/mparams/mparams.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import numpy as np
 import os
 import shutil
diff --git a/mirrors/mparams_sols/s10x10.py b/mirrors/mparams_sols/s10x10.py
index 4a38f5553aa82ef0c2fbf3c79b16d231ff269b12..03f00bf2cac269fe27358d218387170792ec108d 100755
--- a/mirrors/mparams_sols/s10x10.py
+++ b/mirrors/mparams_sols/s10x10.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 
 
diff --git a/mirrors/mparams_sols/s10x10_c_QR_10x10.py b/mirrors/mparams_sols/s10x10_c_QR_10x10.py
index b6ae27de40edcc979358a21106c7296322855224..80c77fb9e4657759e2533c3f99c69ffde501be69 100755
--- a/mirrors/mparams_sols/s10x10_c_QR_10x10.py
+++ b/mirrors/mparams_sols/s10x10_c_QR_10x10.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 
 
diff --git a/mirrors/mparams_sols/s10x10_c_QR_pre_10x10.py b/mirrors/mparams_sols/s10x10_c_QR_pre_10x10.py
index 03f39b477a63243f50efb9caadc1138fe90c4943..1083e28fa29b9efd2501da878a387577cc208373 100644
--- a/mirrors/mparams_sols/s10x10_c_QR_pre_10x10.py
+++ b/mirrors/mparams_sols/s10x10_c_QR_pre_10x10.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 
 
diff --git a/mirrors/mparams_sols/s30x30.py b/mirrors/mparams_sols/s30x30.py
index 9ff633c836ebfc1bfaaedcbd67558a3d99610668..f19faa8672de46b032098de9061e7002fa3e8f83 100755
--- a/mirrors/mparams_sols/s30x30.py
+++ b/mirrors/mparams_sols/s30x30.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 
 
diff --git a/mirrors/mparams_sols/s30x30_c_QR_pre_30x30.py b/mirrors/mparams_sols/s30x30_c_QR_pre_30x30.py
index 9c632a4e9e37391014c616e0837ce3fe26d48ad3..a590734c2041055e748b2d39c2800933e66f5934 100644
--- a/mirrors/mparams_sols/s30x30_c_QR_pre_30x30.py
+++ b/mirrors/mparams_sols/s30x30_c_QR_pre_30x30.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 
 
diff --git a/mirrors/tests/mparams/loop.py b/mirrors/tests/mparams/loop.py
index 6325763ba73f5dca907247b7b466cb7d9c3d25a7..d0817f6b536f2ca689e7e333ff458de3023f50cc 100755
--- a/mirrors/tests/mparams/loop.py
+++ b/mirrors/tests/mparams/loop.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import numpy as np
 import time
 import os
@@ -272,7 +274,7 @@ def main():
         #ax.set_zlim3d(np.amin(sol)-1.,np.amax(sol)+1.)
 
         fig = plt.figure()
-        plt.semilogy(range(1,n_max+1),s,'ko')
+        plt.semilogy(list(range(1,n_max+1)),s,'ko')
         ax = fig.gca()
         ax.set_xlabel('i [-]')
         ax.set_ylabel('sigma_i [-]')
diff --git a/mirrors/tests/mparams/loop2.py b/mirrors/tests/mparams/loop2.py
index 17e1a251694148fd60009f3de705a68f45d3775a..71af81f69a6f2f628ee62c58beb06ad8c2d976c2 100755
--- a/mirrors/tests/mparams/loop2.py
+++ b/mirrors/tests/mparams/loop2.py
@@ -17,6 +17,10 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import numpy as np
 import time
 import os
@@ -106,7 +110,7 @@ def main():
     print(X)
 
     m_max = 1
-    n_max = math.factorial(N[0]+d)/(math.factorial(N[0])*math.factorial(d))
+    n_max = old_div(math.factorial(N[0]+d),(math.factorial(N[0])*math.factorial(d)))
     for j in range(0,d):
         m_max = m_max*M[j] 
 
@@ -254,7 +258,7 @@ def main():
         #ax.set_zlim3d(np.amin(sol)-1.,np.amax(sol)+1.)
 
         fig = plt.figure()
-        plt.semilogy(range(1,n_max+1),s,'ko')
+        plt.semilogy(list(range(1,n_max+1)),s,'ko')
         ax = fig.gca()
         ax.set_xlabel('i [-]')
         ax.set_ylabel('sigma_i [-]')
diff --git a/mirrors/tests/mparams/loop3.py b/mirrors/tests/mparams/loop3.py
index c74c41adeba81799c510acdb844328a6f78bbacf..811a2b312b31abdfdec0dad0125805120672412d 100755
--- a/mirrors/tests/mparams/loop3.py
+++ b/mirrors/tests/mparams/loop3.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import numpy as np
 import time
 import os
@@ -274,7 +276,7 @@ def main():
 
 
         fig = plt.figure()
-        plt.semilogy(range(1,n_max+1),s,'ko')
+        plt.semilogy(list(range(1,n_max+1)),s,'ko')
         ax = fig.gca()
         ax.set_xlabel('i [-]')
         ax.set_ylabel('sigma_i [-]')
diff --git a/mirrors/tests/mparams/loop4.py b/mirrors/tests/mparams/loop4.py
index 0edf2510d7c545b30ae950660a6d286d0bd847e5..6e4dd34c209c05b14747349a80efce1d2c79795c 100755
--- a/mirrors/tests/mparams/loop4.py
+++ b/mirrors/tests/mparams/loop4.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import numpy as np
 import time
 import os
diff --git a/mirrors/tests/mparams/loop5.py b/mirrors/tests/mparams/loop5.py
index b37ee5173e12cc21057b3df6e9ec453c12e05189..2daa4810258764602a24fbd9d37b7041884845b5 100755
--- a/mirrors/tests/mparams/loop5.py
+++ b/mirrors/tests/mparams/loop5.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import numpy as np
 import time
 import os
@@ -277,7 +279,7 @@ def main():
 
 
         fig = plt.figure()
-        plt.semilogy(range(1,n_max+1),s,'ko')
+        plt.semilogy(list(range(1,n_max+1)),s,'ko')
         ax = fig.gca()
         ax.set_xlabel('i [-]')
         ax.set_ylabel('sigma_i [-]')
diff --git a/mirrors/tests/mparams/loop6.py b/mirrors/tests/mparams/loop6.py
index e5cc443f03d86adcd86b0d50404fe04652012d83..56ccbd22891fb9c82e51e1f20a840a1f93ce7a86 100755
--- a/mirrors/tests/mparams/loop6.py
+++ b/mirrors/tests/mparams/loop6.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import numpy as np
 import time
 import os
@@ -276,7 +278,7 @@ def main():
 
 
         fig = plt.figure()
-        plt.semilogy(range(1,n_max+1),s,'ko')
+        plt.semilogy(list(range(1,n_max+1)),s,'ko')
         ax = fig.gca()
         ax.set_xlabel('i [-]')
         ax.set_ylabel('sigma_i [-]')
diff --git a/mirrors/tests/mparams/loop7.py b/mirrors/tests/mparams/loop7.py
index 48b9b01c28ce1667b323b4c2ee1eb5f7af561a9d..4377e3b58efb0e3d77fcf05161cfa5510db49e78 100755
--- a/mirrors/tests/mparams/loop7.py
+++ b/mirrors/tests/mparams/loop7.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import numpy as np
 import time
 import os
diff --git a/mirrors/tests/mparams/loop8.py b/mirrors/tests/mparams/loop8.py
index 90a07fa601e483f501ad2cc7f0bcbcce32a8cf88..54b3451119be1e868dff66e81f0a51ff4bc2e3a3 100755
--- a/mirrors/tests/mparams/loop8.py
+++ b/mirrors/tests/mparams/loop8.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import numpy as np
 import time
 import os
@@ -206,7 +208,7 @@ def main():
     U, s, V_t = np.linalg.svd(W_srZ, full_matrices=True)
     if not args.nogui:
         fig = plt.figure()
-        plt.semilogy(range(1,n_max+1),s,'ko')
+        plt.semilogy(list(range(1,n_max+1)),s,'ko')
         ax = fig.gca()
         ax.set_xlabel('i [-]')
         ax.set_ylabel('sigma_i [-]')
diff --git a/mirrors/tests/mparams/mparams.py b/mirrors/tests/mparams/mparams.py
index 83393490c0df3a67fb821132826e4dbb598765ed..e6e8663192ac2cccf2675469d6e092c7c576f1dd 100755
--- a/mirrors/tests/mparams/mparams.py
+++ b/mirrors/tests/mparams/mparams.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from builtins import str
+from builtins import range
 import numpy as np
 import os
 import shutil
diff --git a/mirrors/viewer.py b/mirrors/viewer.py
index b322d63ec778b39ce89c562ae14bd07734b5e6cf..c09bd13f69a59a647556b19fff5ddac46d1177c8 100644
--- a/mirrors/viewer.py
+++ b/mirrors/viewer.py
@@ -17,9 +17,11 @@
 
 
 from __future__ import print_function
+from builtins import range
+from builtins import object
 import os, os.path
 
-class GUI:
+class GUI(object):
     def __init__(self):
         pass
     def open(self, gmshfile):
diff --git a/mrstlnos/CMAME_tests/model.py b/mrstlnos/CMAME_tests/model.py
index 9b6e0dd36f8eaba5df996f1268743d3759fb3461..35344e14ed528fe0e1a414c1ac3f03c0582d19c5 100644
--- a/mrstlnos/CMAME_tests/model.py
+++ b/mrstlnos/CMAME_tests/model.py
@@ -1,6 +1,10 @@
 #!/usr/bin/env python
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from builtins import object
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -61,7 +65,7 @@ def Compute_QoIs(filename):
   QoI[3] = vals['von Mises'][0]
   return QoI
 
-class plate_model:
+class plate_model(object):
   def __init__(self, ensemble_size, randomVariable, msh, comm, file_dir, current_dir, p=defaut_params):
     
     if p['MueLu xml use template']:
@@ -145,7 +149,7 @@ class plate_model:
     randomParams['Maximum Nonlinear Solver Iterations'] = 5000
     randomParams['Bound Perturbation Size'] = 1E-10
 
-    randomParams['Mean'] = E[0]/(2.*(1.+nu[0]))
+    randomParams['Mean'] = old_div(E[0],(2.*(1.+nu[0])))
     randomParams['Dispersion level'] = p['Dispersion level']
     
     solverList['randomParams'] = randomParams
diff --git a/mrstlnos/CMAME_tests/plate_MC_GS_case_1.py b/mrstlnos/CMAME_tests/plate_MC_GS_case_1.py
index 4e98ec79b2de519d20af6482f0abc336372b3d14..d6bf372d0c0f577420d91525fe7e9fe8077e3aa0 100644
--- a/mrstlnos/CMAME_tests/plate_MC_GS_case_1.py
+++ b/mrstlnos/CMAME_tests/plate_MC_GS_case_1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -35,7 +39,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_MC_GS_case_2.py b/mrstlnos/CMAME_tests/plate_MC_GS_case_2.py
index 41e7f2fa18474f843f39ed89fcd6c1f0b0f6c9fc..075016dcf8d1516eca63b228f4a6a9b788aceddc 100644
--- a/mrstlnos/CMAME_tests/plate_MC_GS_case_2.py
+++ b/mrstlnos/CMAME_tests/plate_MC_GS_case_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -36,7 +40,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_MC_GS_case_3.py b/mrstlnos/CMAME_tests/plate_MC_GS_case_3.py
index 07c650a43aff399cde7f6f1a148f6efb5a4e9788..71bc1138f545ebc1c5f42664c73dad08ffdf3102 100644
--- a/mrstlnos/CMAME_tests/plate_MC_GS_case_3.py
+++ b/mrstlnos/CMAME_tests/plate_MC_GS_case_3.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -39,7 +43,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_MC_GS_case_4.py b/mrstlnos/CMAME_tests/plate_MC_GS_case_4.py
index 4b6efa97fe37de5968308f4ebb8be99cd98bfffd..5d839eec4259bbe30e38013fd4fcdf1dd468395d 100644
--- a/mrstlnos/CMAME_tests/plate_MC_GS_case_4.py
+++ b/mrstlnos/CMAME_tests/plate_MC_GS_case_4.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -40,7 +44,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_1.py b/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_1.py
index 278332b1f132b279c41a99893358cf5df0513ade..37fa27fc4cf357925715cbde253739075f465de6 100644
--- a/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_1.py
+++ b/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -41,7 +45,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_2.py b/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_2.py
index 2759e1153aaab5ffdad2d79a49d449f4a1b919ee..483f6dedc2bc96af19686d27aefac1dfc02f52b6 100644
--- a/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_2.py
+++ b/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -43,7 +47,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_3.py b/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_3.py
index 6c9ce25fbf9eaaeae295484e606dee08a9078d04..0026be9c0654b9c6d229bbd041fc8710416621a1 100644
--- a/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_3.py
+++ b/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_3.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -46,7 +50,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_4.py b/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_4.py
index 1fd6ef9caa82617767fc0f91a6dc4b1a1624ce8d..5d05446fb7f3977418443fea6a8d81d1e376287d 100644
--- a/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_4.py
+++ b/mrstlnos/CMAME_tests/plate_MC_NO_EP_case_4.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -47,7 +51,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_MC_direct_case_1.py b/mrstlnos/CMAME_tests/plate_MC_direct_case_1.py
index 27751fcc633c4e718d0c0b35682a0c3f50392ac5..b65a618119b7a00fb890d53b8451dbde9f911d56 100644
--- a/mrstlnos/CMAME_tests/plate_MC_direct_case_1.py
+++ b/mrstlnos/CMAME_tests/plate_MC_direct_case_1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -38,7 +42,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_MC_direct_case_2.py b/mrstlnos/CMAME_tests/plate_MC_direct_case_2.py
index 76fe023f1ca69512887683387f30b8ccc1437d60..b76df1adcc7a706ec4a9a272a2e4d21f9242dd6e 100644
--- a/mrstlnos/CMAME_tests/plate_MC_direct_case_2.py
+++ b/mrstlnos/CMAME_tests/plate_MC_direct_case_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -40,7 +44,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_MC_direct_case_3.py b/mrstlnos/CMAME_tests/plate_MC_direct_case_3.py
index a026af7d1ec91a10d63b2275fd77f3edfe59b34f..52fad608f89704e2d88da701bb46c481042b9d64 100644
--- a/mrstlnos/CMAME_tests/plate_MC_direct_case_3.py
+++ b/mrstlnos/CMAME_tests/plate_MC_direct_case_3.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -43,7 +47,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_MC_direct_case_4.py b/mrstlnos/CMAME_tests/plate_MC_direct_case_4.py
index 40374c76347bb10e6ee0ecf23619b299eb84489e..38990c5ac3a2f4046718054aab298683a5c94fe4 100644
--- a/mrstlnos/CMAME_tests/plate_MC_direct_case_4.py
+++ b/mrstlnos/CMAME_tests/plate_MC_direct_case_4.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -44,7 +48,7 @@ def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir):
     os.chdir(directory)
     
     N = randomVariable.shape[0]
-    N_ensemble = N/ensemble_size
+    N_ensemble = old_div(N,ensemble_size)
     for ensemble_index in range(0,N_ensemble):
         directory = str(ensemble_index)
         if not os.path.exists(directory):
diff --git a/mrstlnos/CMAME_tests/plate_convergence_direct.py b/mrstlnos/CMAME_tests/plate_convergence_direct.py
index 4f8b8e2239c3c10214043eea8406ccb1feb62260..6e25022bd47c81039cc2c4a2dd04b232187b76da 100644
--- a/mrstlnos/CMAME_tests/plate_convergence_direct.py
+++ b/mrstlnos/CMAME_tests/plate_convergence_direct.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 from mrstlnos.eigenvalues import *
 from mrstlnos.convergence import *
 import os
diff --git a/mrstlnos/CMAME_tests/plate_deltas_omegas_GS.py b/mrstlnos/CMAME_tests/plate_deltas_omegas_GS.py
index 2a4a011365ab6e9fd7721ebb1bccf80bdf0431ee..b3d3a9f0023c555202157f5429b305643ff1a70e 100644
--- a/mrstlnos/CMAME_tests/plate_deltas_omegas_GS.py
+++ b/mrstlnos/CMAME_tests/plate_deltas_omegas_GS.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 from mrstlnos.eigenvalues import *
 import os
 import fwk
@@ -35,7 +39,7 @@ def main():
 
     input_file_dir = file_dir + '/../../workspace/mrstlnos_CMAME_tests_plate_MC_NO_EP/1/'
     
-    sample_per_rank = np.ceil(N/siz)
+    sample_per_rank = np.ceil(old_div(N,siz))
     i_min = rank*sample_per_rank
     i_max = i_min+sample_per_rank
 
diff --git a/mrstlnos/CMAME_tests/plate_deltas_omegas_direct.py b/mrstlnos/CMAME_tests/plate_deltas_omegas_direct.py
index 96ac65cb02a10fca6e3d7d177e743db7dea1fade..3f81b23da5d6abe08654d588c1232aa8f941a93f 100644
--- a/mrstlnos/CMAME_tests/plate_deltas_omegas_direct.py
+++ b/mrstlnos/CMAME_tests/plate_deltas_omegas_direct.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 from mrstlnos.eigenvalues import *
 import os
 import fwk
@@ -27,7 +31,7 @@ def main():
 
     input_file_dir = file_dir + '/../../workspace/mrstlnos_CMAME_tests_plate_MC_NO_EP/1/'
     
-    sample_per_rank = np.ceil(N/siz)
+    sample_per_rank = np.ceil(old_div(N,siz))
     i_min = rank*sample_per_rank
     i_max = (rank+1)*sample_per_rank
 
diff --git a/mrstlnos/CMAME_tests/plate_eigenvalues.py b/mrstlnos/CMAME_tests/plate_eigenvalues.py
index 3a503668cedd20e7cab8271a2f6691960af0bd34..80daaabd0acfc3e9268d901898f125f94cf15588 100644
--- a/mrstlnos/CMAME_tests/plate_eigenvalues.py
+++ b/mrstlnos/CMAME_tests/plate_eigenvalues.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 from mrstlnos.eigenvalues import *
 import os
 import fwk
diff --git a/mrstlnos/CMAME_tests/plate_eigenvalues_gamma.py b/mrstlnos/CMAME_tests/plate_eigenvalues_gamma.py
index 7ee95fda402f0cf340c104d2ea9353ae7bdf28c2..2013e4513c6e90b3afb6941e5020e8f8debe44d3 100644
--- a/mrstlnos/CMAME_tests/plate_eigenvalues_gamma.py
+++ b/mrstlnos/CMAME_tests/plate_eigenvalues_gamma.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 from mrstlnos.eigenvalues import *
 import os
 import fwk
diff --git a/mrstlnos/CMAME_tests/plate_mean_gamma.py b/mrstlnos/CMAME_tests/plate_mean_gamma.py
index f5db661bd6e41bd7d7dd60ea3fb7c955131104ab..e1779ba293dffcfe1ce8cdcaab22f826c96ac54c 100644
--- a/mrstlnos/CMAME_tests/plate_mean_gamma.py
+++ b/mrstlnos/CMAME_tests/plate_mean_gamma.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
diff --git a/mrstlnos/CMAME_tests/plate_mean_prec.py b/mrstlnos/CMAME_tests/plate_mean_prec.py
index fa1a72bb977daca38cc878e988a52a62c973b0db..01c570425d5fa5d74b2e32ba0fea1dae811e338a 100644
--- a/mrstlnos/CMAME_tests/plate_mean_prec.py
+++ b/mrstlnos/CMAME_tests/plate_mean_prec.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
diff --git a/mrstlnos/CMAME_tests/plate_mean_prec_GS_direct.py b/mrstlnos/CMAME_tests/plate_mean_prec_GS_direct.py
index 92f3bddff0a3c0616ea29d3a770d2631137ff6ca..25f16e36da2c4a836c9692e799bc7d61702ddf6b 100644
--- a/mrstlnos/CMAME_tests/plate_mean_prec_GS_direct.py
+++ b/mrstlnos/CMAME_tests/plate_mean_prec_GS_direct.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos.CMAME_tests.model as model
 
 import mrstlnos as m
@@ -87,7 +91,7 @@ def main():
     GS_sweeps_00_max = 17
     delta_GS_sweeps_00 = 2
 
-    N_GS_sweeps_00 = (GS_sweeps_00_max-GS_sweeps_00_min)/delta_GS_sweeps_00
+    N_GS_sweeps_00 = old_div((GS_sweeps_00_max-GS_sweeps_00_min),delta_GS_sweeps_00)
 
     # Damping has to be between 0 and 2
     GS_damping_00_min = 0.9
diff --git a/mrstlnos/CMAME_tests/post_process/grouping.py b/mrstlnos/CMAME_tests/post_process/grouping.py
index 94ab34e8980fa6d4d45cf4e5c4802ef413df0fbf..494dc87c454c2ab01611673d55106aa85301c4d1 100644
--- a/mrstlnos/CMAME_tests/post_process/grouping.py
+++ b/mrstlnos/CMAME_tests/post_process/grouping.py
@@ -1,4 +1,8 @@
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 # require a git clone https://github.com/kliegeois/Same-Size-K-Means.git
 
 from clustering.equal_groups import EqualGroupsKMeans
@@ -11,7 +15,7 @@ def compute_the_groups(N,ensemble_size,num_random_variables):
 
     np.random.seed(42)
 
-    n_clusters = int(N/ensemble_size)
+    n_clusters = int(old_div(N,ensemble_size))
 
     randomVariable = np.random.normal(0, 1, num_random_variables*N)
     X = np.resize(randomVariable,(N,num_random_variables))
diff --git a/mrstlnos/CMAME_tests/post_process/plate_MC.py b/mrstlnos/CMAME_tests/post_process/plate_MC.py
index 3b300aa5b666c4fddf5d9427a9569841d318b72e..86af88e7f996c5d9d86784c5a4486bf28f68a441 100644
--- a/mrstlnos/CMAME_tests/post_process/plate_MC.py
+++ b/mrstlnos/CMAME_tests/post_process/plate_MC.py
@@ -1,6 +1,8 @@
 #!/usr/bin/env python
 # -*- coding: latin-1; -*-
 
+from builtins import str
+from builtins import range
 from mrstlnos.eigenvalues import *
 import os
 import fwk
diff --git a/mrstlnos/CMAME_tests/post_process/plate_MC_convergence.py b/mrstlnos/CMAME_tests/post_process/plate_MC_convergence.py
index cbc8837d0db354e3e202a8b0362b34d2ba37fa28..566d95f8ef2b38b9d1373e34f19b439342e12610 100644
--- a/mrstlnos/CMAME_tests/post_process/plate_MC_convergence.py
+++ b/mrstlnos/CMAME_tests/post_process/plate_MC_convergence.py
@@ -2,13 +2,17 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 from mrstlnos.readers import *
 
 def read_iter_all_ensemble_sizes(n_samples,ensemble_sizes,file_MC_base_dir,reduction=False):
   iter = np.zeros((len(ensemble_sizes),n_samples))
   for i in range(0,len(ensemble_sizes)):
     file_MC_base_dir_2 = file_MC_base_dir + '/' + str(ensemble_sizes[i])+'/'
-    for j in range(0,int(n_samples/ensemble_sizes[i])):
+    for j in range(0,int(old_div(n_samples,ensemble_sizes[i]))):
       input_MC_file_dir = file_MC_base_dir_2 + str(j)+'/'
       es = ensemble_sizes[i]
       if reduction: es = 1
@@ -20,10 +24,10 @@ def read_iter_all_ensemble_sizes(n_samples,ensemble_sizes,file_MC_base_dir,reduc
 def plot_iter_all_ensemble_sizes(n_samples,iter):
   import matplotlib.pyplot as plt
   plt.figure()
-  plt.plot(range(0,n_samples), iter[0][:], 'bo', markersize=8, zorder=1)
-  plt.plot(range(0,n_samples), iter[1][:], 'ro', markersize=6, zorder=2)
-  plt.plot(range(0,n_samples), iter[2][:], 'go', markersize=4, zorder=2)
-  plt.plot(range(0,n_samples), iter[3][:], 'ko', markersize=2, zorder=3)
+  plt.plot(list(range(0,n_samples)), iter[0][:], 'bo', markersize=8, zorder=1)
+  plt.plot(list(range(0,n_samples)), iter[1][:], 'ro', markersize=6, zorder=2)
+  plt.plot(list(range(0,n_samples)), iter[2][:], 'go', markersize=4, zorder=2)
+  plt.plot(list(range(0,n_samples)), iter[3][:], 'ko', markersize=2, zorder=3)
   plt.xlabel('sample')
   plt.ylabel('Number of iterations to converge')
 
diff --git a/mrstlnos/CMAME_tests/post_process/plate_MC_speedup.py b/mrstlnos/CMAME_tests/post_process/plate_MC_speedup.py
index 9617099bbae872cd69bf18dcfef8d8a60bffca2f..ecd847d8ee607c6fcc4b90cce06b178faa0bb36d 100644
--- a/mrstlnos/CMAME_tests/post_process/plate_MC_speedup.py
+++ b/mrstlnos/CMAME_tests/post_process/plate_MC_speedup.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 from mrstlnos.speedup import *
 
 def speedup_of_one_case(case_id,GS,ensemble_reduction,n_samples,ensemble_sizes,quantiles,querylines,use_waves_timers,use_teuchos_timers,per_iteration):
diff --git a/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas.py b/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas.py
index 671cdd0915965d24965cd98dd4c1e0dd7d0c2267..ca236e286b1ccf8cf3b766737e972f4785989662 100644
--- a/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas.py
+++ b/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas.py
@@ -1,6 +1,10 @@
 #!/usr/bin/env python
 # -*- coding: latin-1; -*-
 
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 from mrstlnos.eigenvalues import *
 import os
 import fwk
@@ -160,19 +164,19 @@ def analysis_deltas_omegas(n_samples,base_dir,GS,write):
         plot_eigenvalues_on_unit_circle_highlight(deltas_s,indices)
         plot_polar_function(theta_discrete,deriv_delta,1.5,2.5)
         plot_polar_function(theta_discrete,deriv_delta_omega,3,4)
-        plt.title('Ensemble ' + str(int(i/s)) + ' of ensemble size ' + str(s))
+        plt.title('Ensemble ' + str(int(old_div(i,s))) + ' of ensemble size ' + str(s))
         if GS:
-          plt.savefig('fig_s_GS_'+ str(s) +'_' + str(int(i/s)) + '.png')
+          plt.savefig('fig_s_GS_'+ str(s) +'_' + str(int(old_div(i,s))) + '.png')
         else:
-          plt.savefig('fig_s_direct_'+ str(s) +'_' + str(int(i/s)) + '.png')
+          plt.savefig('fig_s_direct_'+ str(s) +'_' + str(int(old_div(i,s))) + '.png')
         plt.clf()
         plt.close()
         plot_as_bar_plot(theta_discrete,deriv_delta_omega)
-        plt.title('Ensemble ' + str(int(i/s)) + ' of ensemble size ' + str(s))
+        plt.title('Ensemble ' + str(int(old_div(i,s))) + ' of ensemble size ' + str(s))
         if GS:
-          plt.savefig('fig_s_GS_omegas_'+ str(s) +'_' + str(int(i/s)) + '.png')
+          plt.savefig('fig_s_GS_omegas_'+ str(s) +'_' + str(int(old_div(i,s))) + '.png')
         else:
-          plt.savefig('fig_s_direct_omegas_'+ str(s) +'_' + str(int(i/s)) + '.png')
+          plt.savefig('fig_s_direct_omegas_'+ str(s) +'_' + str(int(old_div(i,s))) + '.png')
         plt.clf()
         plt.close()
 
diff --git a/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas_direct_analysis.py b/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas_direct_analysis.py
index c52b48e7e53134622f6d302ba4d6e115af7fce36..ac472922c6ab1fc413cf58946bff14322ec892e8 100644
--- a/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas_direct_analysis.py
+++ b/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas_direct_analysis.py
@@ -1,6 +1,10 @@
 #!/usr/bin/env python
 # -*- coding: latin-1; -*-
 
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 from mrstlnos.eigenvalues import *
 import os
 import fwk
@@ -140,14 +144,14 @@ def main():
         plot_eigenvalues_on_unit_circle_highlight(deltas_s,indices)
         plot_polar_function(theta_discrete,deriv_delta,1.5,2.5)
         plot_polar_function(theta_discrete,deriv_delta_omega,3,4)
-        plt.title('Ensemble ' + str(int(i/s)) + ' of ensemble size ' + str(s))
+        plt.title('Ensemble ' + str(int(old_div(i,s))) + ' of ensemble size ' + str(s))
         
-        plt.savefig('fig_s_'+ str(s) +'_' + str(int(i/s)) + '.png')
+        plt.savefig('fig_s_'+ str(s) +'_' + str(int(old_div(i,s))) + '.png')
         plt.clf()
         plt.close()
         plot_as_bar_plot(theta_discrete,deriv_delta_omega)
-        plt.title('Ensemble ' + str(int(i/s)) + ' of ensemble size ' + str(s))
-        plt.savefig('fig_s_omegas_'+ str(s) +'_' + str(int(i/s)) + '.png')
+        plt.title('Ensemble ' + str(int(old_div(i,s))) + ' of ensemble size ' + str(s))
+        plt.savefig('fig_s_omegas_'+ str(s) +'_' + str(int(old_div(i,s))) + '.png')
         plt.clf()
         plt.close()
     if display: plt.show()
diff --git a/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas_gs_analysis.py b/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas_gs_analysis.py
index d67f6aa7262bb5a7ef24fce0e678aee786fe7c59..97dcd81c37f80dea9809249bb3af402d6437e56b 100644
--- a/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas_gs_analysis.py
+++ b/mrstlnos/CMAME_tests/post_process/plate_deltas_omegas_gs_analysis.py
@@ -1,6 +1,8 @@
 #!/usr/bin/env python
 # -*- coding: latin-1; -*-
 
+from builtins import str
+from builtins import range
 from mrstlnos.eigenvalues import *
 import os
 import fwk
diff --git a/mrstlnos/CMAME_tests/post_process/plate_mean.py b/mrstlnos/CMAME_tests/post_process/plate_mean.py
index 8a6b439b757ed83f13ded9cbd0f3348f662e9b89..573721337b4b89b3cbfffcfbccf08baa85e65fb2 100644
--- a/mrstlnos/CMAME_tests/post_process/plate_mean.py
+++ b/mrstlnos/CMAME_tests/post_process/plate_mean.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 from mrstlnos.eigenvalues import *
 from mrstlnos.readers import *
 import os
@@ -20,11 +24,11 @@ def Kirsch_equations(x,y,center_x,center_y,a,sigma_inf):
   centered_y = y-center_y
 
   r = np.abs(centered_x+centered_y*1.0j)
-  theta = np.angle(centered_x+centered_y*1.0j) - np.pi/2
+  theta = np.angle(centered_x+centered_y*1.0j) - old_div(np.pi,2)
   
-  half_sigma_inf = (sigma_inf/2)
+  half_sigma_inf = (old_div(sigma_inf,2))
   
-  ar = a/r
+  ar = old_div(a,r)
   ar_p_2 = np.power(ar,2)
   ar_p_4 = np.power(ar,4)
   
@@ -176,7 +180,7 @@ def main():
   
   print(norm_Q)
   print(norm_GT)
-  print(norm_Q/norm_GT)
+  print(old_div(norm_Q,norm_GT))
   
   pts, tri, vals = cut_plate(mshName)
   pts_2, quad = extract_quad_msh(mshName)
diff --git a/mrstlnos/CMAME_tests/post_process/plate_mean_convergence.py b/mrstlnos/CMAME_tests/post_process/plate_mean_convergence.py
index fc3d8f4756f0750305c49197b7740512418e4023..bc7411a528e73e8ed225e9f160775449eba523f8 100644
--- a/mrstlnos/CMAME_tests/post_process/plate_mean_convergence.py
+++ b/mrstlnos/CMAME_tests/post_process/plate_mean_convergence.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 from mrstlnos.eigenvalues import *
 import os
 import fwk
@@ -19,11 +23,11 @@ def Kirsch_equations(x,y,center_x,center_y,a,sigma_inf):
   centered_y = y-center_y
 
   r = np.abs(centered_x+centered_y*1.0j)
-  theta = np.angle(centered_x+centered_y*1.0j) - np.pi/2
+  theta = np.angle(centered_x+centered_y*1.0j) - old_div(np.pi,2)
   
-  half_sigma_inf = (sigma_inf/2)
+  half_sigma_inf = (old_div(sigma_inf,2))
   
-  ar = a/r
+  ar = old_div(a,r)
   ar_p_2 = np.power(ar,2)
   ar_p_4 = np.power(ar,4)
   
diff --git a/mrstlnos/Juelich/broken/M1.py b/mrstlnos/Juelich/broken/M1.py
index 55d5a6c93e4721ffd09082b837f08f7734252d6c..6ba6481116f099288ae707e442db74d0ae5cd14f 100644
--- a/mrstlnos/Juelich/broken/M1.py
+++ b/mrstlnos/Juelich/broken/M1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -267,7 +271,7 @@ def main():
     
 
     zero = np.zeros(ensemble_size)
-    hf = (70/0.0121)*0.001 * np.ones(ensemble_size)
+    hf = (old_div(70,0.0121))*0.001 * np.ones(ensemble_size)
 
     m.Neumann(pbl, "Mirror surface","moved",0,zero,0,zero,0,zero,1,hf,ensemble_size)    
     m.Source(pbl, "Mirror", "ihg",2.45*1000)
diff --git a/mrstlnos/Juelich/broken/M1_assembly.py b/mrstlnos/Juelich/broken/M1_assembly.py
index 492afa891948c8b0bbde21e0da46c9c6b7b3a9a8..4dc36d7d14f64e59e05e2a984991081882009d3f 100644
--- a/mrstlnos/Juelich/broken/M1_assembly.py
+++ b/mrstlnos/Juelich/broken/M1_assembly.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/Juelich/broken/M1_assembly_fused_all.py b/mrstlnos/Juelich/broken/M1_assembly_fused_all.py
index 720fe961b9d36ffc843cf189b8fdab77e16d8d77..398e956dc960df61a3a8758ffd5a97ec91d50143 100644
--- a/mrstlnos/Juelich/broken/M1_assembly_fused_all.py
+++ b/mrstlnos/Juelich/broken/M1_assembly_fused_all.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -185,7 +189,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (70/0.0121)* np.ones(ensemble_size) #70 W / (0.0121 m^2)
+    hf = (old_div(70,0.0121))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/Juelich/broken/M1_assembly_fused_mm.py b/mrstlnos/Juelich/broken/M1_assembly_fused_mm.py
index ca884b94e7401eb49b8b0c61c4647832746456a8..bec851adae97d5b9f7ed23e65e6bb9d7cc834ef9 100644
--- a/mrstlnos/Juelich/broken/M1_assembly_fused_mm.py
+++ b/mrstlnos/Juelich/broken/M1_assembly_fused_mm.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -182,7 +186,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.-T_ref,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (70/(0.0121*1000**2))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
+    hf = (old_div(70,(0.0121*1000**2)))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/Juelich/broken/M1_assembly_mm.py b/mrstlnos/Juelich/broken/M1_assembly_mm.py
index a095a8018ad9a972b97b14cee9b05419c9a93f65..59f06c4684f5ccedacdcf3826d17c5b8d131bfc3 100644
--- a/mrstlnos/Juelich/broken/M1_assembly_mm.py
+++ b/mrstlnos/Juelich/broken/M1_assembly_mm.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -184,7 +188,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.-T_ref,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (70/(0.0121*1000**2))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
+    hf = (old_div(70,(0.0121*1000**2)))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/Juelich/broken/M1_optic_test.py b/mrstlnos/Juelich/broken/M1_optic_test.py
index 495cb2ed11ca930bd5979e10f2f8def5327cdbad..cd63ea94661af14fd29f0e048427d458dff8ef09 100644
--- a/mrstlnos/Juelich/broken/M1_optic_test.py
+++ b/mrstlnos/Juelich/broken/M1_optic_test.py
@@ -1,6 +1,8 @@
 #!/usr/bin/env python
 # -*- coding: latin-1; -*-
 
+from __future__ import division
+from past.utils import old_div
 import mrstlnos.utilities as u
 import numpy as np
 import os
@@ -34,9 +36,9 @@ def main():
     dz = npzfile['dz']
     
     dz_1 = 0
-    dz_2 = 0.5/1000
-    dz_3 = 0.87/1000
-    dz_4 = -2./1000
+    dz_2 = old_div(0.5,1000)
+    dz_3 = old_div(0.87,1000)
+    dz_4 = old_div(-2.,1000)
 
     theta_x_1 = 0
     theta_x_2 = 0.0015
diff --git a/mrstlnos/Juelich/post_process/vtk_post_process.py b/mrstlnos/Juelich/post_process/vtk_post_process.py
index 6945a048d5da2ef1018424fe7bab8ce0cbeaa452..17509ff8185c0405001b56c1dc84b5efc5ae28af 100644
--- a/mrstlnos/Juelich/post_process/vtk_post_process.py
+++ b/mrstlnos/Juelich/post_process/vtk_post_process.py
@@ -1,4 +1,7 @@
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import vtk
 import numpy as np
 from numpy import zeros
@@ -23,8 +26,8 @@ def SaveFigureAsImage(fileName,fig=None,**kwargs):
     if 'orig_size' in kwargs: # Aspect ratio scaling if required
         w,h = kwargs['orig_size']
         w2,h2 = fig_size[0],fig_size[1]
-        fig.set_size_inches([(w2/w)*w,(w2/w)*h])
-        fig.set_dpi((w2/w)*fig.get_dpi())
+        fig.set_size_inches([(old_div(w2,w))*w,(old_div(w2,w))*h])
+        fig.set_dpi((old_div(w2,w))*fig.get_dpi())
     a=fig.gca()
     a.set_frame_on(False)
     a.set_xticks([]); a.set_yticks([])
@@ -57,7 +60,7 @@ def compute_integrated_F(volume_id, component_id, cut_origin_x, cut_origin_y, cu
     
     stress = data.GetCellData().GetArray('sigma')
     
-    ntri = triangles.GetNumberOfTuples()/4
+    ntri = old_div(triangles.GetNumberOfTuples(),4)
     npts = points.GetNumberOfPoints()
     nstress = stress.GetNumberOfTuples()
 
@@ -71,18 +74,18 @@ def compute_integrated_F(volume_id, component_id, cut_origin_x, cut_origin_y, cu
     sigma_vector_node = zeros(npts)
     area_node = zeros(npts)
     
-    for i in xrange(0, ntri):
+    for i in range(0, ntri):
         tri[i, 0] = triangles.GetTuple(4*i + 1)[0]
         tri[i, 1] = triangles.GetTuple(4*i + 2)[0]
         tri[i, 2] = triangles.GetTuple(4*i + 3)[0]
 
-    for i in xrange(npts):
+    for i in range(npts):
         pt = points.GetPoint(i)
         x[i] = pt[0]
         y[i] = pt[1]
         z[i] = pt[2]
 
-    for i in xrange(0, nstress):
+    for i in range(0, nstress):
         sigma = stress.GetTuple(i)
         sigma_vector[i] = sigma[component_id]
 
@@ -96,16 +99,16 @@ def compute_integrated_F(volume_id, component_id, cut_origin_x, cut_origin_y, cu
 
     F = 0.
 
-    for i in xrange(0, ntri):
+    for i in range(0, ntri):
         cross = np.cross(np.array([x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], z[tri[i, 1]] - z[tri[i, 0]] ]), np.array([x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], z[tri[i, 2]] - z[tri[i, 0]] ]))
-        area = LA.norm(cross)/2
+        area = old_div(LA.norm(cross),2)
         F = F + area*sigma_vector[i]
-        for j in xrange(0, 3):
+        for j in range(0, 3):
             sigma_vector_node[tri[i, j]] = sigma_vector_node[tri[i, j]] + area*sigma_vector[i]
             area_node[tri[i, j]] = area_node[tri[i, j]] + area
 
-    for i in xrange(npts):
-        sigma_vector_node[i] = sigma_vector_node[i]/area_node[i]
+    for i in range(npts):
+        sigma_vector_node[i] = old_div(sigma_vector_node[i],area_node[i])
 
     fig = plt.figure(figsize=(8, 8))
     plt.set_cmap('coolwarm')
@@ -156,7 +159,7 @@ def post_process():
     stress = data.GetCellData().GetArray('sigma')
     stress_VM = data.GetCellData().GetArray('von Mises')
 
-    ntri = triangles.GetNumberOfTuples()/4
+    ntri = old_div(triangles.GetNumberOfTuples(),4)
     npts = points.GetNumberOfPoints()
     nvls = points.GetNumberOfPoints() #vels.GetNumberOfTuples()
     
@@ -173,34 +176,34 @@ def post_process():
     
     sigma_zz = zeros(nstress)
 
-    for i in xrange(0, ntri):
+    for i in range(0, ntri):
         tri[i, 0] = triangles.GetTuple(4*i + 1)[0]
         tri[i, 1] = triangles.GetTuple(4*i + 2)[0]
         tri[i, 2] = triangles.GetTuple(4*i + 3)[0]
 
-    for i in xrange(npts):
+    for i in range(npts):
         pt = points.GetPoint(i)
         x[i] = pt[0]
         y[i] = pt[1]
         z[i] = pt[2]
 
-    for i in xrange(0, nvls):
+    for i in range(0, nvls):
         U = vels.GetTuple(i)
         ux[i] = U[0]
 
-    for i in xrange(0, nstress):
+    for i in range(0, nstress):
         sigma = stress.GetTuple(i)
         sigma_zz[i] = sigma[8]
 
-    for i in xrange(0, ntri):
+    for i in range(0, ntri):
         cross = np.cross(np.array([x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], z[tri[i, 1]] - z[tri[i, 0]] ]), np.array([x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], z[tri[i, 2]] - z[tri[i, 0]] ]))
-        area = LA.norm(cross)/2
-        for j in xrange(0, 3):
+        area = old_div(LA.norm(cross),2)
+        for j in range(0, 3):
             sigma_vector_node[tri[i, j]] = sigma_vector_node[tri[i, j]] + area*sigma_zz[i]
             area_node[tri[i, j]] = area_node[tri[i, j]] + area
 
-    for i in xrange(npts):
-        sigma_vector_node[i] = sigma_vector_node[i]/area_node[i]
+    for i in range(npts):
+        sigma_vector_node[i] = old_div(sigma_vector_node[i],area_node[i])
 
     #tmp = stress.GetTuple(0)
     
diff --git a/mrstlnos/Juelich/post_process/vtk_post_process_2.py b/mrstlnos/Juelich/post_process/vtk_post_process_2.py
index a875c6f6c2d2d335da74b8ff443b2517ab8bca77..92a446ef71cafe8f99c61001d691fcd13950b343 100644
--- a/mrstlnos/Juelich/post_process/vtk_post_process_2.py
+++ b/mrstlnos/Juelich/post_process/vtk_post_process_2.py
@@ -1,4 +1,7 @@
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import vtk
 import numpy as np
 from numpy import zeros
@@ -23,8 +26,8 @@ def SaveFigureAsImage(fileName,fig=None,**kwargs):
     if 'orig_size' in kwargs: # Aspect ratio scaling if required
         w,h = kwargs['orig_size']
         w2,h2 = fig_size[0],fig_size[1]
-        fig.set_size_inches([(w2/w)*w,(w2/w)*h])
-        fig.set_dpi((w2/w)*fig.get_dpi())
+        fig.set_size_inches([(old_div(w2,w))*w,(old_div(w2,w))*h])
+        fig.set_dpi((old_div(w2,w))*fig.get_dpi())
     a=fig.gca()
     a.set_frame_on(False)
     a.set_xticks([]); a.set_yticks([])
@@ -57,7 +60,7 @@ def compute_integrated_F(volume_id, component_id, cut_origin_x, cut_origin_y, cu
     
     stress = data.GetCellData().GetArray('sigma')
     
-    ntri = triangles.GetNumberOfTuples()/4
+    ntri = old_div(triangles.GetNumberOfTuples(),4)
     npts = points.GetNumberOfPoints()
     nstress = stress.GetNumberOfTuples()
 
@@ -71,18 +74,18 @@ def compute_integrated_F(volume_id, component_id, cut_origin_x, cut_origin_y, cu
     sigma_vector_node = zeros(npts)
     area_node = zeros(npts)
     
-    for i in xrange(0, ntri):
+    for i in range(0, ntri):
         tri[i, 0] = triangles.GetTuple(4*i + 1)[0]
         tri[i, 1] = triangles.GetTuple(4*i + 2)[0]
         tri[i, 2] = triangles.GetTuple(4*i + 3)[0]
 
-    for i in xrange(npts):
+    for i in range(npts):
         pt = points.GetPoint(i)
         x[i] = pt[0]
         y[i] = pt[1]
         z[i] = pt[2]
 
-    for i in xrange(0, nstress):
+    for i in range(0, nstress):
         sigma = stress.GetTuple(i)
         sigma_vector[i] = sigma[component_id]
 
@@ -96,16 +99,16 @@ def compute_integrated_F(volume_id, component_id, cut_origin_x, cut_origin_y, cu
 
     F = 0.
 
-    for i in xrange(0, ntri):
+    for i in range(0, ntri):
         cross = np.cross(np.array([x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], z[tri[i, 1]] - z[tri[i, 0]] ]), np.array([x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], z[tri[i, 2]] - z[tri[i, 0]] ]))
-        area = LA.norm(cross)/2
+        area = old_div(LA.norm(cross),2)
         F = F + area*sigma_vector[i]
-        for j in xrange(0, 3):
+        for j in range(0, 3):
             sigma_vector_node[tri[i, j]] = sigma_vector_node[tri[i, j]] + area*sigma_vector[i]
             area_node[tri[i, j]] = area_node[tri[i, j]] + area
 
-    for i in xrange(npts):
-        sigma_vector_node[i] = sigma_vector_node[i]/area_node[i]
+    for i in range(npts):
+        sigma_vector_node[i] = old_div(sigma_vector_node[i],area_node[i])
 
     fig = plt.figure(figsize=(8, 8))
     plt.set_cmap('coolwarm')
@@ -158,7 +161,7 @@ def post_process():
     stress_VM = data.GetCellData().GetArray('von Mises')
     volume_id = data.GetCellData().GetArray('volume_id')
     
-    ntri = triangles.GetNumberOfTuples()/4
+    ntri = old_div(triangles.GetNumberOfTuples(),4)
     npts = points.GetNumberOfPoints()
     nvls = points.GetNumberOfPoints() #T.GetNumberOfTuples()
     
@@ -184,18 +187,18 @@ def post_process():
     
     level_zz = np.linspace(-1e8, 1e8, 16)
 
-    for i in xrange(0, ntri):
+    for i in range(0, ntri):
         tri[i, 0] = triangles.GetTuple(4*i + 1)[0]
         tri[i, 1] = triangles.GetTuple(4*i + 2)[0]
         tri[i, 2] = triangles.GetTuple(4*i + 3)[0]
 
-    for i in xrange(npts):
+    for i in range(npts):
         pt = points.GetPoint(i)
         x[i] = pt[0]
         y[i] = pt[1]
         z[i] = pt[2]
 
-    for i in xrange(0, nvls):
+    for i in range(0, nvls):
         T_tmp = T.GetTuple(i)
         T_vec[i] = T_tmp[0]
 
@@ -203,7 +206,7 @@ def post_process():
         dy[i] = u.GetTuple(i)[1]
         dz[i] = u.GetTuple(i)[2]
 
-    for i in xrange(0, nstress):
+    for i in range(0, nstress):
         sigma = stress.GetTuple(i)
         sigma_zz[i] = sigma[8]
 
@@ -242,20 +245,20 @@ def post_process():
     
     current_i = 0
     volume_id_vec_2[indices_volume_id[0]] = current_i
-    for i in xrange(1, len(volume_id_vec)):
+    for i in range(1, len(volume_id_vec)):
         if volume_id_vec_tmp[indices_volume_id[i-1]] != volume_id_vec_tmp[indices_volume_id[i]]:
             current_i = current_i + 1
         volume_id_vec_2[indices_volume_id[i]] = current_i
 
-    for i in xrange(0, ntri):
+    for i in range(0, ntri):
         cross = np.cross(np.array([x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], z[tri[i, 1]] - z[tri[i, 0]] ]), np.array([x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], z[tri[i, 2]] - z[tri[i, 0]] ]))
-        area = LA.norm(cross)/2
-        for j in xrange(0, 3):
+        area = old_div(LA.norm(cross),2)
+        for j in range(0, 3):
             sigma_vector_node[tri[i, j]] = sigma_vector_node[tri[i, j]] + area*sigma_zz[i]
             area_node[tri[i, j]] = area_node[tri[i, j]] + area
 
-    for i in xrange(npts):
-        sigma_vector_node[i] = sigma_vector_node[i]/area_node[i]
+    for i in range(npts):
+        sigma_vector_node[i] = old_div(sigma_vector_node[i],area_node[i])
         if sigma_vector_node[i] <= level_zz[0]:
             sigma_vector_node_filtered[i] = level_zz[0]
         elif sigma_vector_node[i] >= level_zz[15]:
diff --git a/mrstlnos/Juelich/tests/M1_assembly_fused.py b/mrstlnos/Juelich/tests/M1_assembly_fused.py
index 7e934725808b6efc6391dd23e44fddc435800f3b..d23f7ae3e7561ad40da01cf0ea2c36482e17d9b3 100644
--- a/mrstlnos/Juelich/tests/M1_assembly_fused.py
+++ b/mrstlnos/Juelich/tests/M1_assembly_fused.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -144,7 +148,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.-T_ref,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (20/0.0121)* np.ones(ensemble_size) #20 W / (0.0121 m^2)
+    hf = (old_div(20,0.0121))* np.ones(ensemble_size) #20 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/Juelich/tests/M1_assembly_fused_2.py b/mrstlnos/Juelich/tests/M1_assembly_fused_2.py
index 4c147788b6cc15b490990e2b754f26aafc91b8f1..45b442d79481c71c46f9931373cccd8b78e0133e 100644
--- a/mrstlnos/Juelich/tests/M1_assembly_fused_2.py
+++ b/mrstlnos/Juelich/tests/M1_assembly_fused_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -140,7 +144,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.-T_ref,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (20/0.0121)* np.ones(ensemble_size) #20 W / (0.0121 m^2)
+    hf = (old_div(20,0.0121))* np.ones(ensemble_size) #20 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/Juelich/tests/M1_assembly_fused_CuCrZr_holder.py b/mrstlnos/Juelich/tests/M1_assembly_fused_CuCrZr_holder.py
index d183fb4874b57f0ae60fa87b1f767bfc1a5d0255..0980ed95da436284bf8836f7896f7f54cca18da2 100644
--- a/mrstlnos/Juelich/tests/M1_assembly_fused_CuCrZr_holder.py
+++ b/mrstlnos/Juelich/tests/M1_assembly_fused_CuCrZr_holder.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -142,7 +146,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.-T_ref,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (20/0.0121)* np.ones(ensemble_size) #20 W / (0.0121 m^2)
+    hf = (old_div(20,0.0121))* np.ones(ensemble_size) #20 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/Juelich/tests/M1_assembly_fused_CuCrZr_holder_2.py b/mrstlnos/Juelich/tests/M1_assembly_fused_CuCrZr_holder_2.py
index 35268d46410b7b77e47d7421df0956189983df8e..7918b30c065d58d4bd6e7f9b95e5d086786d0a1c 100644
--- a/mrstlnos/Juelich/tests/M1_assembly_fused_CuCrZr_holder_2.py
+++ b/mrstlnos/Juelich/tests/M1_assembly_fused_CuCrZr_holder_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -145,7 +149,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.-T_ref,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (20/0.0121)* np.ones(ensemble_size) #20 W / (0.0121 m^2)
+    hf = (old_div(20,0.0121))* np.ones(ensemble_size) #20 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/broken/2_cubes.py b/mrstlnos/broken/2_cubes.py
index a1663d32f32daeb3182c748c98a7b327a6b5d81d..8f2bd4e565c017555cac589fade986708296410a 100644
--- a/mrstlnos/broken/2_cubes.py
+++ b/mrstlnos/broken/2_cubes.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/2_cubes_heat.py b/mrstlnos/broken/2_cubes_heat.py
index 4759685a0cb36f1aa4abaf3bae10a0de6469715c..f7d69fbc2fd1693f5e9cd36fc3bc8343ef2d274d 100644
--- a/mrstlnos/broken/2_cubes_heat.py
+++ b/mrstlnos/broken/2_cubes_heat.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/2_cubes_no_contact.py b/mrstlnos/broken/2_cubes_no_contact.py
index 5cd0c9e2fa785bb3df3f5ed9213d77346e6232bc..f87e4389481dd34c9a6f4cf18c802a90d9980ae0 100644
--- a/mrstlnos/broken/2_cubes_no_contact.py
+++ b/mrstlnos/broken/2_cubes_no_contact.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/2_cubes_patch_SIMPLE_k.py b/mrstlnos/broken/2_cubes_patch_SIMPLE_k.py
index bad79e2632b53468713b8e76ff620e624bbfb9ed..b5c4807386bbeedf8103627475d1f0c28223da0c 100644
--- a/mrstlnos/broken/2_cubes_patch_SIMPLE_k.py
+++ b/mrstlnos/broken/2_cubes_patch_SIMPLE_k.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/2_cubes_sticking.py b/mrstlnos/broken/2_cubes_sticking.py
index ba196364613528a132d4df39e06457d525566963..5f4e99300a3303e44f54c38039a3ba38d21e6818 100644
--- a/mrstlnos/broken/2_cubes_sticking.py
+++ b/mrstlnos/broken/2_cubes_sticking.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/3_bodies.py b/mrstlnos/broken/3_bodies.py
index 5b1c6f1b3c648db3c8f562d8db5eaa7190a192d7..1d89fc21324ddc0ba5ea1694f7c8af08f7f62170 100644
--- a/mrstlnos/broken/3_bodies.py
+++ b/mrstlnos/broken/3_bodies.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/3_cubes_partial_sticking.py b/mrstlnos/broken/3_cubes_partial_sticking.py
index cf0290fc43b8a44d54c5b7dc53ec9a1ddf92797f..b798701edb255b3b66dc7fa0d94381b3cde98cc4 100644
--- a/mrstlnos/broken/3_cubes_partial_sticking.py
+++ b/mrstlnos/broken/3_cubes_partial_sticking.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/L_shape_curv.py b/mrstlnos/broken/L_shape_curv.py
index 1de618994fa3fb7017697f9dcdeb1d31a0c1f6da..4a943f20153fba5749abf928134938e6bf6ed606 100644
--- a/mrstlnos/broken/L_shape_curv.py
+++ b/mrstlnos/broken/L_shape_curv.py
@@ -2,6 +2,7 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/L_shape_curv_rf.py b/mrstlnos/broken/L_shape_curv_rf.py
index c6edad5c09f3208f22eb787042cfd76a58886106..5e1b9298dfe8828455a14cbb2e8c12d0c2925914 100644
--- a/mrstlnos/broken/L_shape_curv_rf.py
+++ b/mrstlnos/broken/L_shape_curv_rf.py
@@ -2,6 +2,9 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -193,7 +196,7 @@ def main():
     randomParams['Correlation length Z'] = 5.
     randomParams['Maximum Nonlinear Solver Iterations'] = 500
 
-    randomParams['Mean'] = 10./(2.*(1.+0.4))
+    randomParams['Mean'] = old_div(10.,(2.*(1.+0.4)))
     randomParams['Dispersion level'] = 0.1
     
     solverList['randomParams'] = randomParams
diff --git a/mrstlnos/broken/M1.py b/mrstlnos/broken/M1.py
index 55d5a6c93e4721ffd09082b837f08f7734252d6c..6ba6481116f099288ae707e442db74d0ae5cd14f 100644
--- a/mrstlnos/broken/M1.py
+++ b/mrstlnos/broken/M1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -267,7 +271,7 @@ def main():
     
 
     zero = np.zeros(ensemble_size)
-    hf = (70/0.0121)*0.001 * np.ones(ensemble_size)
+    hf = (old_div(70,0.0121))*0.001 * np.ones(ensemble_size)
 
     m.Neumann(pbl, "Mirror surface","moved",0,zero,0,zero,0,zero,1,hf,ensemble_size)    
     m.Source(pbl, "Mirror", "ihg",2.45*1000)
diff --git a/mrstlnos/broken/M1_assembly.py b/mrstlnos/broken/M1_assembly.py
index 492afa891948c8b0bbde21e0da46c9c6b7b3a9a8..4dc36d7d14f64e59e05e2a984991081882009d3f 100644
--- a/mrstlnos/broken/M1_assembly.py
+++ b/mrstlnos/broken/M1_assembly.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/M1_assembly_fused.py b/mrstlnos/broken/M1_assembly_fused.py
index b8e4ebe9d8f6b75b01ece1959e6de015936a388b..204b23ac8986722013e896fc42498a9146acdd0b 100644
--- a/mrstlnos/broken/M1_assembly_fused.py
+++ b/mrstlnos/broken/M1_assembly_fused.py
@@ -2,6 +2,9 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -176,7 +179,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.-T_ref,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (70/0.0121)* np.ones(ensemble_size) #70 W / (0.0121 m^2)
+    hf = (old_div(70,0.0121))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/broken/M1_assembly_fused_CuCrZr_holder.py b/mrstlnos/broken/M1_assembly_fused_CuCrZr_holder.py
index f3bd163e30b8948b05b9354cc5a18045fe6c6971..0130406b28755efdadca7ebed0829c20677c169e 100644
--- a/mrstlnos/broken/M1_assembly_fused_CuCrZr_holder.py
+++ b/mrstlnos/broken/M1_assembly_fused_CuCrZr_holder.py
@@ -2,6 +2,9 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -176,7 +179,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.-T_ref,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (70/0.0121)* np.ones(ensemble_size) #70 W / (0.0121 m^2)
+    hf = (old_div(70,0.0121))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/broken/M1_assembly_fused_all.py b/mrstlnos/broken/M1_assembly_fused_all.py
index 720fe961b9d36ffc843cf189b8fdab77e16d8d77..398e956dc960df61a3a8758ffd5a97ec91d50143 100644
--- a/mrstlnos/broken/M1_assembly_fused_all.py
+++ b/mrstlnos/broken/M1_assembly_fused_all.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -185,7 +189,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (70/0.0121)* np.ones(ensemble_size) #70 W / (0.0121 m^2)
+    hf = (old_div(70,0.0121))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/broken/M1_assembly_fused_mm.py b/mrstlnos/broken/M1_assembly_fused_mm.py
index ca884b94e7401eb49b8b0c61c4647832746456a8..bec851adae97d5b9f7ed23e65e6bb9d7cc834ef9 100644
--- a/mrstlnos/broken/M1_assembly_fused_mm.py
+++ b/mrstlnos/broken/M1_assembly_fused_mm.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -182,7 +186,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.-T_ref,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (70/(0.0121*1000**2))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
+    hf = (old_div(70,(0.0121*1000**2)))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/broken/M1_assembly_mm.py b/mrstlnos/broken/M1_assembly_mm.py
index a095a8018ad9a972b97b14cee9b05419c9a93f65..59f06c4684f5ccedacdcf3826d17c5b8d131bfc3 100644
--- a/mrstlnos/broken/M1_assembly_mm.py
+++ b/mrstlnos/broken/M1_assembly_mm.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -184,7 +188,7 @@ def main():
     m.uDirichlet(pbl, "Cooling channels", "Clamped",0,0.,0,0.,0,0.,1,70.-T_ref,ensemble_size)
 
     zero = np.zeros(ensemble_size)
-    hf = (70/(0.0121*1000**2))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
+    hf = (old_div(70,(0.0121*1000**2)))* np.ones(ensemble_size) #70 W / (0.0121 m^2)
 
     m.Neumann(pbl, "Mirror surface","heat fluxes",0,zero,0,zero,0,zero,1,hf,ensemble_size)
 
diff --git a/mrstlnos/broken/beam.py b/mrstlnos/broken/beam.py
index 05fdfee5970cfad22ee9c147e59fac115f1c646e..be397b55ec282d5d261b4ce12410e4b9e75279d9 100644
--- a/mrstlnos/broken/beam.py
+++ b/mrstlnos/broken/beam.py
@@ -2,13 +2,17 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
 
 def analytical(E,nu,L,W,H,d,p,x):
     
-    EI =  (E * W * H**3)/12.
+    EI =  old_div((E * W * H**3),12.)
     q = p * W
     q_1 = 24*EI*d/L**4
     q_2 = 72*EI*d/L**4
@@ -16,10 +20,10 @@ def analytical(E,nu,L,W,H,d,p,x):
 
     if q < q_1:
         case_id = 1
-        sol = -(q/(24*EI))*(x**4-4.*L*x**3+4.*L**2*x**2)
+        sol = -(old_div(q,(24*EI)))*(x**4-4.*L*x**3+4.*L**2*x**2)
     if q >= q_1:
         case_id = 2
-        sol = -(q/(24*EI))*(x**4-(8./3.)*a*x**3+2.*a**2*x**2)
+        sol = -(old_div(q,(24*EI)))*(x**4-(old_div(8.,3.))*a*x**3+2.*a**2*x**2)
         for i in range(0,len(x)):
             if x[i] >= a:
                 sol[i] = -d            
@@ -302,7 +306,7 @@ def main():
                 ax[0].plot(pos, sol[:,i],color=colors[i%8], linewidth=2.0)
                 ax[0].plot(pos, sol_ana[:,i],'--',color=colors[i%8], linewidth=2.0)
                 ax[1].plot(pos, sol[:,i]-sol_ana[:,i],color=colors[i%8], linewidth=2.0)
-                ax[2].plot(pos, (sol[:,i]-sol_ana[:,i])/(sol_ana[len(sol_ana[:,i])-1,i]),color=colors[i%8], linewidth=2.0)
+                ax[2].plot(pos, old_div((sol[:,i]-sol_ana[:,i]),(sol_ana[len(sol_ana[:,i])-1,i])),color=colors[i%8], linewidth=2.0)
 
             ax[0].set_title('Case 1: Solution along '+ tag_name)
 
diff --git a/mrstlnos/broken/beam_2.py b/mrstlnos/broken/beam_2.py
index 3248c09ddce51ff88fc4477f37b6ad2190fbd697..6d09b5d72fda411529512363b4ca27f8da423497 100644
--- a/mrstlnos/broken/beam_2.py
+++ b/mrstlnos/broken/beam_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -10,7 +14,7 @@ import tbox.gmsh as gmsh
 
 def analytical(E,nu,L,W,H,d,p,x):
     
-    EI =  (E * W * H**3)/12.
+    EI =  old_div((E * W * H**3),12.)
     q = p * W
     q_1 = 24*EI*d/L**4
     q_2 = 72*EI*d/L**4
@@ -28,13 +32,13 @@ def analytical(E,nu,L,W,H,d,p,x):
 
     if q < q_1:
         case_id = 1
-        sol = -(q/(24.*EI))*(x**4-4.*L*x**3+4.*L**2*x**2)
+        sol = -(old_div(q,(24.*EI)))*(x**4-4.*L*x**3+4.*L**2*x**2)
     if q >= q_1:
         case_id = 2
-        sol = -(q/(24.*EI))*(x**4-2.*L*x**3+L**2*x**2) +2.*d*x**3/(L**3)-3.*d*x**2/(L**2)       
+        sol = -(old_div(q,(24.*EI)))*(x**4-2.*L*x**3+L**2*x**2) +2.*d*x**3/(L**3)-3.*d*x**2/(L**2)       
     if q >= q_2:
         case_id = 3
-        sol = -(q/(24.*EI))*(x**4-(8./3.)*a*x**3+2.*a**2*x**2)
+        sol = -(old_div(q,(24.*EI)))*(x**4-(old_div(8.,3.))*a*x**3+2.*a**2*x**2)
         for i in range(0,len(x)):
             if x[i] >= a:
                 sol[i] = -d            
diff --git a/mrstlnos/broken/beam_UQ_1.py b/mrstlnos/broken/beam_UQ_1.py
index ede031012cb5e074f5ae2dc8e2fee05520845987..0f908ab8a34ae6238af14d14c34865dbd00151ae 100644
--- a/mrstlnos/broken/beam_UQ_1.py
+++ b/mrstlnos/broken/beam_UQ_1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -9,7 +13,7 @@ import tbox.gmsh as gmsh
 
 def analytical(E,nu,L,W,H,d,p,x):
     
-    EI =  (E * W * H**3)/12.
+    EI =  old_div((E * W * H**3),12.)
     q = p * W
     q_1 = 24*EI*d/L**4
     q_2 = 72*EI*d/L**4
@@ -27,13 +31,13 @@ def analytical(E,nu,L,W,H,d,p,x):
 
     if q < q_1:
         case_id = 1
-        sol = -(q/(24.*EI))*(x**4-4.*L*x**3+4.*L**2*x**2)
+        sol = -(old_div(q,(24.*EI)))*(x**4-4.*L*x**3+4.*L**2*x**2)
     if q >= q_1:
         case_id = 2
-        sol = -(q/(24.*EI))*(x**4-2.*L*x**3+L**2*x**2) +2.*d*x**3/(L**3)-3.*d*x**2/(L**2)       
+        sol = -(old_div(q,(24.*EI)))*(x**4-2.*L*x**3+L**2*x**2) +2.*d*x**3/(L**3)-3.*d*x**2/(L**2)       
     if q >= q_2:
         case_id = 3
-        sol = -(q/(24.*EI))*(x**4-(8./3.)*a*x**3+2.*a**2*x**2)
+        sol = -(old_div(q,(24.*EI)))*(x**4-(old_div(8.,3.))*a*x**3+2.*a**2*x**2)
         for i in range(0,len(x)):
             if x[i] >= a:
                 sol[i] = -d            
diff --git a/mrstlnos/broken/beam_UQ_QMC_1.py b/mrstlnos/broken/beam_UQ_QMC_1.py
index 822cf348f7ea45bc63af4ac3de3805513aa1e7e7..89722ed1c67d52b1cafdfd765261023a9a838673 100644
--- a/mrstlnos/broken/beam_UQ_QMC_1.py
+++ b/mrstlnos/broken/beam_UQ_QMC_1.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/beam_UQ_QMC_16.py b/mrstlnos/broken/beam_UQ_QMC_16.py
index a33fa5284beb39d66f0b62a7894c578347684c5a..24e6f09c3570bf5755c898224fcb65e3f666edc4 100644
--- a/mrstlnos/broken/beam_UQ_QMC_16.py
+++ b/mrstlnos/broken/beam_UQ_QMC_16.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/beam_UQ_QMC_32.py b/mrstlnos/broken/beam_UQ_QMC_32.py
index 593be6f325f1c09fc6da9067f5e873ceb74cd963..52a23eb5bd30e94e6ac95397390ee23df45da0f9 100644
--- a/mrstlnos/broken/beam_UQ_QMC_32.py
+++ b/mrstlnos/broken/beam_UQ_QMC_32.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/beam_UQ_QMC_8.py b/mrstlnos/broken/beam_UQ_QMC_8.py
index 444eeb5716f9ca2e4645a3e532c80b6023127740..a3a764f565d7835f5f6a6fbd9e6f6e89d25e8335 100644
--- a/mrstlnos/broken/beam_UQ_QMC_8.py
+++ b/mrstlnos/broken/beam_UQ_QMC_8.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/beam_gmres_measures.py b/mrstlnos/broken/beam_gmres_measures.py
index 61edb5a8f1fcb95fcd16556cb89a6f64e6035901..66b49ffe869ef34cbc2ff5bfe407c8edfcd08e53 100644
--- a/mrstlnos/broken/beam_gmres_measures.py
+++ b/mrstlnos/broken/beam_gmres_measures.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/bolt.py b/mrstlnos/broken/bolt.py
index ef8a5db8e677114b64eb0e30ce5666d02cb4bc2b..b6e1b712faa313bdd2fb454d2da58eed6d6e4bdb 100644
--- a/mrstlnos/broken/bolt.py
+++ b/mrstlnos/broken/bolt.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/bolt_2.py b/mrstlnos/broken/bolt_2.py
index ca86a2d878c337d30e834a26ba27ca2a711085fc..e0e4b1d092eda635ff8954401d023848b598e4a3 100644
--- a/mrstlnos/broken/bolt_2.py
+++ b/mrstlnos/broken/bolt_2.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/bolt_iterative.py b/mrstlnos/broken/bolt_iterative.py
index b6772e28f68adb7c03e042eacfeae2282b0796be..e6070099b04571d67c3085a570169c44fdc5f263 100644
--- a/mrstlnos/broken/bolt_iterative.py
+++ b/mrstlnos/broken/bolt_iterative.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube.py b/mrstlnos/broken/cube.py
index 9f7d5c6c2b35f8855d014805917e9c16273ad1a4..7d4fb04edef874273bca238dfe0115bd92b20155 100644
--- a/mrstlnos/broken/cube.py
+++ b/mrstlnos/broken/cube.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_1.py b/mrstlnos/broken/cube_1.py
index 5e43514146dd9ed2b3fe04f60f91dc4a07c776eb..44db76be01c37e3028ac4ad3610dcb3077b824f1 100644
--- a/mrstlnos/broken/cube_1.py
+++ b/mrstlnos/broken/cube_1.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_16.py b/mrstlnos/broken/cube_16.py
index c4b6bb449d3261e9d60d96ff484439eb22298bde..010109418a3a07e151c614864c0d9fa105adcfe2 100644
--- a/mrstlnos/broken/cube_16.py
+++ b/mrstlnos/broken/cube_16.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_16_k_scalability.py b/mrstlnos/broken/cube_16_k_scalability.py
index 6b9877ba1c961a444e4d500249e7d4cc15f4f204..3bfb82dca2af38601163f19885d0c702891e708c 100644
--- a/mrstlnos/broken/cube_16_k_scalability.py
+++ b/mrstlnos/broken/cube_16_k_scalability.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_1_heat.py b/mrstlnos/broken/cube_1_heat.py
index b48d617e704d13156cbe51b44468e9222bbf4707..e23e3d034cf11a7e908f479f3ee60564e32132f6 100644
--- a/mrstlnos/broken/cube_1_heat.py
+++ b/mrstlnos/broken/cube_1_heat.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_1_k_scalability.py b/mrstlnos/broken/cube_1_k_scalability.py
index d8dc3d6dbfb36128234263e166e172febd7b5500..490975b784284eea400d0a75d16a02309a073f66 100644
--- a/mrstlnos/broken/cube_1_k_scalability.py
+++ b/mrstlnos/broken/cube_1_k_scalability.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_1_k_scalability1.py b/mrstlnos/broken/cube_1_k_scalability1.py
index c71d38376c36bc5dcead9b9ca06a1c9d9b15eb97..afe1e387c6bf7a682aa6c85a848a9743acb18a91 100644
--- a/mrstlnos/broken/cube_1_k_scalability1.py
+++ b/mrstlnos/broken/cube_1_k_scalability1.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_1_k_scalability2.py b/mrstlnos/broken/cube_1_k_scalability2.py
index 3bf52bf389ceac3468a7802645dc92ba48d051f3..7079876717a60396f67b7fdb49352984e1420ec4 100644
--- a/mrstlnos/broken/cube_1_k_scalability2.py
+++ b/mrstlnos/broken/cube_1_k_scalability2.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_1_k_scalability3.py b/mrstlnos/broken/cube_1_k_scalability3.py
index 3a9bc4c6f0bfcac3f911b24c5a86830e88a11daf..cb8256ae2f8d931ce8f8d30aea590a75cc18a42f 100644
--- a/mrstlnos/broken/cube_1_k_scalability3.py
+++ b/mrstlnos/broken/cube_1_k_scalability3.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_1_k_scalability4.py b/mrstlnos/broken/cube_1_k_scalability4.py
index da1524950889af30227aab73492880ac820ceb64..e73a38e0de686bd7d0d0e37ba205a32b06d7414e 100644
--- a/mrstlnos/broken/cube_1_k_scalability4.py
+++ b/mrstlnos/broken/cube_1_k_scalability4.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_1_k_scalability_2.py b/mrstlnos/broken/cube_1_k_scalability_2.py
index 969f7444a0ca9be9c8d1b505d2c3599bece86508..f0900cc6b1c2b5b44db5719d5b788e9f80422588 100644
--- a/mrstlnos/broken/cube_1_k_scalability_2.py
+++ b/mrstlnos/broken/cube_1_k_scalability_2.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_1_k_scalability_3.py b/mrstlnos/broken/cube_1_k_scalability_3.py
index f249f38aaa330893c6584387433e5f81713685fd..a8471d0c954b2edf334fe72b4fc85f2f1ef09fc6 100644
--- a/mrstlnos/broken/cube_1_k_scalability_3.py
+++ b/mrstlnos/broken/cube_1_k_scalability_3.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_32.py b/mrstlnos/broken/cube_32.py
index f93efbd88221de2a1298d35ff50879952ef3e820..1128c7d95cbf30508caf7209d5ae2dc1f2ae5778 100644
--- a/mrstlnos/broken/cube_32.py
+++ b/mrstlnos/broken/cube_32.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_8.py b/mrstlnos/broken/cube_8.py
index 7ac86bb612a9b792286f01b37536490f76fbff2f..1c27c4a0fcc28727854725801073d6334927b0d5 100644
--- a/mrstlnos/broken/cube_8.py
+++ b/mrstlnos/broken/cube_8.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_8_k_scalability.py b/mrstlnos/broken/cube_8_k_scalability.py
index f66a6bb8b6fae6e264d937193d15705b53b72240..ffa8d674009abd1b9f8d4d2a57427a1dfb0978f5 100644
--- a/mrstlnos/broken/cube_8_k_scalability.py
+++ b/mrstlnos/broken/cube_8_k_scalability.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_LU_analysis.py b/mrstlnos/broken/cube_LU_analysis.py
index 5c77f16b9933c844b008472f941baf4ee39221e4..cfb04319ad35d1abe0da1e8ccca61066fd44dc2f 100644
--- a/mrstlnos/broken/cube_LU_analysis.py
+++ b/mrstlnos/broken/cube_LU_analysis.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_UQ_1.py b/mrstlnos/broken/cube_UQ_1.py
index 22f0204f2a4becad8d4fb1db178d9ae7ffe38c4c..73c664e245195f9b6b767594dcabc815ee5eba68 100644
--- a/mrstlnos/broken/cube_UQ_1.py
+++ b/mrstlnos/broken/cube_UQ_1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_16_scenario_1.py b/mrstlnos/broken/cube_UQ_16_scenario_1.py
index e619e2f161423ba26309add08d7c36d3113ce40c..5ea9de36ab44a128284a32368b53feb783dacaa7 100644
--- a/mrstlnos/broken/cube_UQ_16_scenario_1.py
+++ b/mrstlnos/broken/cube_UQ_16_scenario_1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_16_scenario_2.py b/mrstlnos/broken/cube_UQ_16_scenario_2.py
index 048fadee073eaa31c0f4ca290a5b20b19b56a72d..977454aa1e863c2e3610a6117a7792776711dc1e 100644
--- a/mrstlnos/broken/cube_UQ_16_scenario_2.py
+++ b/mrstlnos/broken/cube_UQ_16_scenario_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_16_scenario_3.py b/mrstlnos/broken/cube_UQ_16_scenario_3.py
index e5aaeccaaf617c92c22713f5e93649d348a609bb..2f01550786dece6d7022550e573f21b2c9aa1ce2 100644
--- a/mrstlnos/broken/cube_UQ_16_scenario_3.py
+++ b/mrstlnos/broken/cube_UQ_16_scenario_3.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_16_senario_1.py b/mrstlnos/broken/cube_UQ_16_senario_1.py
index e619e2f161423ba26309add08d7c36d3113ce40c..5ea9de36ab44a128284a32368b53feb783dacaa7 100644
--- a/mrstlnos/broken/cube_UQ_16_senario_1.py
+++ b/mrstlnos/broken/cube_UQ_16_senario_1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_16_senario_2.py b/mrstlnos/broken/cube_UQ_16_senario_2.py
index 048fadee073eaa31c0f4ca290a5b20b19b56a72d..977454aa1e863c2e3610a6117a7792776711dc1e 100644
--- a/mrstlnos/broken/cube_UQ_16_senario_2.py
+++ b/mrstlnos/broken/cube_UQ_16_senario_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_16_senario_3.py b/mrstlnos/broken/cube_UQ_16_senario_3.py
index e5aaeccaaf617c92c22713f5e93649d348a609bb..2f01550786dece6d7022550e573f21b2c9aa1ce2 100644
--- a/mrstlnos/broken/cube_UQ_16_senario_3.py
+++ b/mrstlnos/broken/cube_UQ_16_senario_3.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_32_scenario_1.py b/mrstlnos/broken/cube_UQ_32_scenario_1.py
index a5f0bdc1558197730971ac2255354ff66e2bf4c3..41b9245ece4265892b8cde9752e5aeb1d5ef4008 100644
--- a/mrstlnos/broken/cube_UQ_32_scenario_1.py
+++ b/mrstlnos/broken/cube_UQ_32_scenario_1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_32_scenario_2.py b/mrstlnos/broken/cube_UQ_32_scenario_2.py
index f4324ef63ee526b260591873a619974d854cd5a4..3e7ca6e2d747c80c12f0968a6be3412da382c6dc 100644
--- a/mrstlnos/broken/cube_UQ_32_scenario_2.py
+++ b/mrstlnos/broken/cube_UQ_32_scenario_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_32_scenario_3.py b/mrstlnos/broken/cube_UQ_32_scenario_3.py
index 4e4b36ae53c705aba6c032fcdc18dcf0234b2663..c8ea4d86630a56dd174181a41dffda18ae79fa13 100644
--- a/mrstlnos/broken/cube_UQ_32_scenario_3.py
+++ b/mrstlnos/broken/cube_UQ_32_scenario_3.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_32_senario_1.py b/mrstlnos/broken/cube_UQ_32_senario_1.py
index a5f0bdc1558197730971ac2255354ff66e2bf4c3..41b9245ece4265892b8cde9752e5aeb1d5ef4008 100644
--- a/mrstlnos/broken/cube_UQ_32_senario_1.py
+++ b/mrstlnos/broken/cube_UQ_32_senario_1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_32_senario_2.py b/mrstlnos/broken/cube_UQ_32_senario_2.py
index f4324ef63ee526b260591873a619974d854cd5a4..3e7ca6e2d747c80c12f0968a6be3412da382c6dc 100644
--- a/mrstlnos/broken/cube_UQ_32_senario_2.py
+++ b/mrstlnos/broken/cube_UQ_32_senario_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_32_senario_3.py b/mrstlnos/broken/cube_UQ_32_senario_3.py
index 4e4b36ae53c705aba6c032fcdc18dcf0234b2663..c8ea4d86630a56dd174181a41dffda18ae79fa13 100644
--- a/mrstlnos/broken/cube_UQ_32_senario_3.py
+++ b/mrstlnos/broken/cube_UQ_32_senario_3.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_8_scenario_1.py b/mrstlnos/broken/cube_UQ_8_scenario_1.py
index c64606baa891f36a1cf216116103a86ffb082526..36c23679c2f3585f2386cdbb5179a6623bd65dc9 100644
--- a/mrstlnos/broken/cube_UQ_8_scenario_1.py
+++ b/mrstlnos/broken/cube_UQ_8_scenario_1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_8_scenario_2.py b/mrstlnos/broken/cube_UQ_8_scenario_2.py
index 65b79239e74d7991479a1d0dc9cf8d0db0b7ee3f..151461c553186501635fe3c49d6688eab1146604 100644
--- a/mrstlnos/broken/cube_UQ_8_scenario_2.py
+++ b/mrstlnos/broken/cube_UQ_8_scenario_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_8_scenario_3.py b/mrstlnos/broken/cube_UQ_8_scenario_3.py
index 15e1ea5a943cce16e3b78338bbd4d107a8aa73e2..0efb4c5d5d14e01920c9366c6492db084619eb22 100644
--- a/mrstlnos/broken/cube_UQ_8_scenario_3.py
+++ b/mrstlnos/broken/cube_UQ_8_scenario_3.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_8_senario_1.py b/mrstlnos/broken/cube_UQ_8_senario_1.py
index c64606baa891f36a1cf216116103a86ffb082526..36c23679c2f3585f2386cdbb5179a6623bd65dc9 100644
--- a/mrstlnos/broken/cube_UQ_8_senario_1.py
+++ b/mrstlnos/broken/cube_UQ_8_senario_1.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_8_senario_2.py b/mrstlnos/broken/cube_UQ_8_senario_2.py
index 65b79239e74d7991479a1d0dc9cf8d0db0b7ee3f..151461c553186501635fe3c49d6688eab1146604 100644
--- a/mrstlnos/broken/cube_UQ_8_senario_2.py
+++ b/mrstlnos/broken/cube_UQ_8_senario_2.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_UQ_8_senario_3.py b/mrstlnos/broken/cube_UQ_8_senario_3.py
index 15e1ea5a943cce16e3b78338bbd4d107a8aa73e2..0efb4c5d5d14e01920c9366c6492db084619eb22 100644
--- a/mrstlnos/broken/cube_UQ_8_senario_3.py
+++ b/mrstlnos/broken/cube_UQ_8_senario_3.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -35,11 +39,11 @@ def main():
 
     use_preconditioner = False
 
-    p_min = p_mean-delta_p/2
-    p_max = p_mean+delta_p/2
+    p_min = p_mean-old_div(delta_p,2)
+    p_max = p_mean+old_div(delta_p,2)
 
-    E_min = E_mean-delta_E/2
-    E_max = E_mean+delta_E/2
+    E_min = E_mean-old_div(delta_E,2)
+    E_max = E_mean+old_div(delta_E,2)
 
     from fwk.wutils import parseargs
     args=parseargs()
diff --git a/mrstlnos/broken/cube_gmres_analysis.py b/mrstlnos/broken/cube_gmres_analysis.py
index ed30bf8c51685a4d9bb7ed85c900f1e78c6b7265..f476e91acab2ea9934ff61443c07a5ba1725da79 100644
--- a/mrstlnos/broken/cube_gmres_analysis.py
+++ b/mrstlnos/broken/cube_gmres_analysis.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_gmres_measures.py b/mrstlnos/broken/cube_gmres_measures.py
index a7e0fc2963aa0a63b2909c8b7f2f8175bedd5767..4ef2dca9371ba5f1e82476e15fc5743fdc4260d0 100644
--- a/mrstlnos/broken/cube_gmres_measures.py
+++ b/mrstlnos/broken/cube_gmres_measures.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_heat.py b/mrstlnos/broken/cube_heat.py
index 417859dc29ac4c6f31c5b51d0ba45de824cbe517..9b293a6f3651e952d9054ef10fc9cb7d18676a33 100644
--- a/mrstlnos/broken/cube_heat.py
+++ b/mrstlnos/broken/cube_heat.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_new.py b/mrstlnos/broken/cube_new.py
index 0c7f56ab99dd86e77b06417fdae9ae502eb19674..36dcf332da7f4ce15064f4c3f74d7a8de37d021c 100644
--- a/mrstlnos/broken/cube_new.py
+++ b/mrstlnos/broken/cube_new.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_new/cube_new_0.py b/mrstlnos/broken/cube_new/cube_new_0.py
index 83e7e24b5a9784108871d76b0bc88ad2520f787b..5138adbc47d968f44ec64841fb87471dcdc6dfdd 100644
--- a/mrstlnos/broken/cube_new/cube_new_0.py
+++ b/mrstlnos/broken/cube_new/cube_new_0.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_new_iterative.py b/mrstlnos/broken/cube_new_iterative.py
index 1f1fefbe48966c9f6b3c007d99eec8a55ec2f59c..2bb35d0ebe30dcfa52ab902f603c1a61ba766763 100644
--- a/mrstlnos/broken/cube_new_iterative.py
+++ b/mrstlnos/broken/cube_new_iterative.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cube_new_iterative_maxNorm.py b/mrstlnos/broken/cube_new_iterative_maxNorm.py
index cd8ea87ec03e263f862fb8e25b655e616e2248f4..db0e74a8af8fe550846e7e5e6de8657007c4f286 100644
--- a/mrstlnos/broken/cube_new_iterative_maxNorm.py
+++ b/mrstlnos/broken/cube_new_iterative_maxNorm.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -173,7 +177,7 @@ def main():
     for i in range(0,d):
         initialGuess = np.zeros(np.shape(V[:,0]))
         for j in range(0,len(K11Indices )-1):
-            initialGuess = initialGuess + (np.sqrt(ordered_d[K11Indices[1]])/np.sqrt(ordered_d[K11Indices[j]]))**expo[i]*V[:,indices[K11Indices[j]]]
+            initialGuess = initialGuess + (old_div(np.sqrt(ordered_d[K11Indices[1]]),np.sqrt(ordered_d[K11Indices[j]])))**expo[i]*V[:,indices[K11Indices[j]]]
 
         np.savetxt(filename1, initialGuess, fmt='%1.4e')
         slv.start()
diff --git a/mrstlnos/broken/cube_new_submit.py b/mrstlnos/broken/cube_new_submit.py
index 5c66aa1a86fac680069e85c576a95f2df0397d01..52b771de518b3bebf7f5e94b95c61808550be540 100644
--- a/mrstlnos/broken/cube_new_submit.py
+++ b/mrstlnos/broken/cube_new_submit.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import shlex, subprocess
 import os
 import numpy as np
@@ -25,8 +29,8 @@ def main():
     cpuPerTasks = np.ones(d)
 
     for i in range(0,d):
-        mm[i] = 20 / ntasks[i] + 1
-        memPerCpu[i] = 8000/ntasks[i]
+        mm[i] = old_div(20, ntasks[i]) + 1
+        memPerCpu[i] = old_div(8000,ntasks[i])
         if memPerCpu[i] < 2000:
             memPerCpu[i] = 2000
 
diff --git a/mrstlnos/broken/cylinder.py b/mrstlnos/broken/cylinder.py
index ed720aa727923b0e50aa1e9a2e63aaf8d5852359..62cea1034747655390c1ecc54f3e56bf915a4a50 100644
--- a/mrstlnos/broken/cylinder.py
+++ b/mrstlnos/broken/cylinder.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cylinder_2.py b/mrstlnos/broken/cylinder_2.py
index a96e311f61be68c0d8dd5e456b6e83bdc52fff89..59e1113f732216d248f26f559c936ed2a5197df5 100644
--- a/mrstlnos/broken/cylinder_2.py
+++ b/mrstlnos/broken/cylinder_2.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/cylinder_ensemble_size.py b/mrstlnos/broken/cylinder_ensemble_size.py
index 3cd5a843d850d5a561c38a05729a67f0c6c30a24..3e08c25b80cf397698e83d9ac1771758052a1b5b 100644
--- a/mrstlnos/broken/cylinder_ensemble_size.py
+++ b/mrstlnos/broken/cylinder_ensemble_size.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/discrete_problem.py b/mrstlnos/broken/discrete_problem.py
index f5882e9fba57a9d45f84171e9ffbe4a94357b549..bc23103d194b7fafc04dd5ddaf454ca8978e0a92 100644
--- a/mrstlnos/broken/discrete_problem.py
+++ b/mrstlnos/broken/discrete_problem.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/example2.py b/mrstlnos/broken/example2.py
index a740e855241937732f198ebb5cae7a6b5439abb8..437c1618d2339a2c27c0f2f51212dd3825474350 100644
--- a/mrstlnos/broken/example2.py
+++ b/mrstlnos/broken/example2.py
@@ -4,6 +4,7 @@
 # trilinos-12.6.1-Source/demos/buildAgainstTrilinos
 
 from __future__ import print_function
+from builtins import range
 import fwk.wutils as wu
 import mrstlnos
 
diff --git a/mrstlnos/broken/hertz.py b/mrstlnos/broken/hertz.py
index 2f4c3211a8c2b58211f41a3f55ccae59775e3005..cf5cd752d9370c7b8d78348a424df12ff17f4e12 100644
--- a/mrstlnos/broken/hertz.py
+++ b/mrstlnos/broken/hertz.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/mirror.py b/mrstlnos/broken/mirror.py
index e6b7cb492d82b04ddd8091925f3daa7246c7ccd6..25cd009af5f3bd218ea3f2dccdd946257c9953ec 100644
--- a/mrstlnos/broken/mirror.py
+++ b/mrstlnos/broken/mirror.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/model_problem.py b/mrstlnos/broken/model_problem.py
index 61858bc47d0b13d8881caf876114c3b72bad5212..ca9870a9aae7d4a6a78ba9f3cc8cb8fcc1e32ebe 100644
--- a/mrstlnos/broken/model_problem.py
+++ b/mrstlnos/broken/model_problem.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/test_memory.py b/mrstlnos/broken/test_memory.py
index df4a0d06a1ccd92941697df24efef6188d18e84f..167dda204517ba0806b54ce3db6b88b90653d6ff 100644
--- a/mrstlnos/broken/test_memory.py
+++ b/mrstlnos/broken/test_memory.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/test_memory_2.py b/mrstlnos/broken/test_memory_2.py
index 558897c64ad55c81447820e109cd6aa955a9b85f..ee354e8535e1b5acd4673f9cfe4bd99c719e9055 100644
--- a/mrstlnos/broken/test_memory_2.py
+++ b/mrstlnos/broken/test_memory_2.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/thermal_stress_1.py b/mrstlnos/broken/thermal_stress_1.py
index c9f75e3e1080dbbe5fe22624fead470f6b90aacb..dfc5075eeb06e5284aade8bbe3b28f21a542987e 100644
--- a/mrstlnos/broken/thermal_stress_1.py
+++ b/mrstlnos/broken/thermal_stress_1.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/broken/thermal_stress_2.py b/mrstlnos/broken/thermal_stress_2.py
index 38bbe7fbdbe45073820a01d712140ce04a4733dc..746b1a77eac6b3b5f7cabae43a9f92a0d9f1d910 100644
--- a/mrstlnos/broken/thermal_stress_2.py
+++ b/mrstlnos/broken/thermal_stress_2.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/convergence.py b/mrstlnos/convergence.py
index ae2dc421f22487306624aea5d7e827b934bacbdc..d765ea0243ad42ef7e705e3d6028c7853aa3689e 100644
--- a/mrstlnos/convergence.py
+++ b/mrstlnos/convergence.py
@@ -2,6 +2,11 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import zip
+from builtins import range
+from past.utils import old_div
+from builtins import object
 import numpy as np
 
 verb = False  # set to True for (a lot of) debug info
@@ -20,12 +25,12 @@ except:
     name = "noname"
 
 def enum(*sequential, **named):
-    enums = dict(zip(sequential, range(len(sequential))), **named)
+    enums = dict(list(zip(sequential, list(range(len(sequential))))), **named)
     return type('Enum', (), enums)
 
 tags = enum('READY', 'DONE', 'EXIT', 'START', 'WAKEUP', 'SUICIDE')
 
-class Index_no_repetition_2:
+class Index_no_repetition_2(object):
   def __init__(self, among_i):
     self.among_i = among_i
     self.n = len(among_i)
@@ -54,7 +59,7 @@ class Index_no_repetition_2:
   def get_i(self):
     return self.i
 
-class Index_no_repetition:
+class Index_no_repetition(object):
   def __init__(self, k, n, n_0=0):
     self.k = k
     self.n = n
@@ -120,7 +125,7 @@ def compute_convergence_serial(k_max,n,omegas,deltas,A,b,x0,verbose):
   convergence[1] = old_sum
   for k in range(2,k_max):
     new_sum = compute_sum_of_product_times_product(k+1,n,omegas,deltas)
-    convergence[k] = new_sum/old_sum
+    convergence[k] = old_div(new_sum,old_sum)
     if verbose:
       print(convergence)
     old_sum = new_sum
@@ -142,7 +147,7 @@ def compute_convergence_mpi(k_max,n,omegas,deltas,A,b,x0,verbose):
     if rank == 0:
       master = Master()
       new_sum = master.start(k+1,n,omegas,deltas)
-      convergence[k] = new_sum/old_sum
+      convergence[k] = old_div(new_sum,old_sum)
       old_sum = new_sum
       if verbose:
         print(convergence)
@@ -151,7 +156,7 @@ def compute_convergence_mpi(k_max,n,omegas,deltas,A,b,x0,verbose):
       worker.start()
   return convergence
 
-class Job:
+class Job(object):
     """ Class containing data transmitted between MPI procs
     """
     def __init__(self,omegas,deltas,index):
@@ -178,12 +183,12 @@ class Job:
           if not i2.compute_next(): break
         self.partial_sum = self.partial_sum + results_product_1 * results_product_2
 
-class Master:
+class Master(object):
     """
     MPI Process with rank #0
     """
     def __init__(self):
-        self.slaves = range(1,siz)
+        self.slaves = list(range(1,siz))
 
     def start(self,k,n,omegas,deltas):
         """
@@ -260,7 +265,7 @@ class Master:
             comm.send(None, dest=s, tag=tags.SUICIDE)
 
 
-class Worker:
+class Worker(object):
     """
     MPI Process with rank #1-#n
     """
diff --git a/mrstlnos/eigenvalues.py b/mrstlnos/eigenvalues.py
index da7f730a8fce5182093afa449d97b81bff49b998..deb0ae93816feded3114c0062c483077d29d6f7a 100644
--- a/mrstlnos/eigenvalues.py
+++ b/mrstlnos/eigenvalues.py
@@ -2,13 +2,18 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
+from builtins import object
 import numpy as np
 
 from scipy.linalg import eig
 
 tol = 1e-6
 
-class Gauss_Seidel:
+class Gauss_Seidel(object):
   def __init__(self, A,n=1,damping=1.):
     from scipy.sparse import tril
     from scipy.sparse import triu
@@ -35,7 +40,7 @@ class Gauss_Seidel:
       self.x = spsolve_triangular(self.M,self.N.dot(self.x)+self.damping*b)
     return self.x
 
-class SIMPLE_preconditioned_matrix:
+class SIMPLE_preconditioned_matrix(object):
   def __init__(self, Q,invQ,G,GT,R,invR,omega=1.):
     from scipy.sparse import diags
     self.n1 = Q.shape[0]
@@ -56,7 +61,7 @@ class SIMPLE_preconditioned_matrix:
     self.invR = invR
     
     Qdiag = Q.diagonal()
-    self.invD = diags(1/Qdiag, 0)
+    self.invD = diags(old_div(1,Qdiag), 0)
   
     self.shape = [Q.shape[0]+G.shape[1],Q.shape[0]+G.shape[1]]
   
@@ -130,7 +135,7 @@ def Schur_complement(GT,invQ,G):
 def approx_Schur_complement(Q,G,GT):
     from scipy.sparse import diags
     Qdiag = Q.diagonal()
-    invD = diags(1/Qdiag, 0)
+    invD = diags(old_div(1,Qdiag), 0)
     R = Schur_complement(GT,invD,G)
     return R
 
@@ -138,7 +143,7 @@ def SIMPLE_prec(Q,invQ,G,GT,R,invR,use_invQG=False,omega=1.):
     from scipy.sparse import eye
     from scipy.sparse import diags
     Qdiag = Q.diagonal()
-    invD = diags(1/Qdiag, 0)
+    invD = diags(old_div(1,Qdiag), 0)
     n1 = Q.shape[0]
     n2 = R.shape[0]
     if use_invQG:
@@ -209,9 +214,9 @@ def compute_VW(A,b,m=0,N=1):
 
     tmp = b.reshape((n,))
     previous_vec = np.zeros((n,))
-    V[:,0] = tmp/np.linalg.norm(tmp)
+    V[:,0] = old_div(tmp,np.linalg.norm(tmp))
     previous_vec = A.dot(V[:,0])
-    W[:,0] = previous_vec/np.linalg.norm(previous_vec)
+    W[:,0] = old_div(previous_vec,np.linalg.norm(previous_vec))
     
     for i in range(1,m):
       tmp = previous_vec
@@ -221,11 +226,11 @@ def compute_VW(A,b,m=0,N=1):
       if norm<=tol:
         m = i
         break
-      tmp = tmp/norm
+      tmp = old_div(tmp,norm)
       V[:,i] = tmp
       previous_vec = A.dot(V[:,i])
       norm = np.linalg.norm(previous_vec)
-      W[:,i] = previous_vec/norm
+      W[:,i] = old_div(previous_vec,norm)
     V = V[:,0:m]
     W = W[:,0:m]
     
@@ -255,7 +260,7 @@ def compute_V(A,b,m=0,N=0):
     V = np.zeros((n,m))
 
     tmp = b.reshape((n,))
-    V[:,0] = tmp/np.linalg.norm(tmp)
+    V[:,0] = old_div(tmp,np.linalg.norm(tmp))
     for i in range(1,m):
       tmp = A.dot(V[:,i-1])
       for j in range(0,i):
@@ -265,7 +270,7 @@ def compute_V(A,b,m=0,N=0):
         m = i
         break
       else:
-        tmp = tmp/norm
+        tmp = old_div(tmp,norm)
         V[:,i] = tmp
     V = V[:,0:m]
     for i in range(0,N):
@@ -278,7 +283,7 @@ def compute_V(A,b,m=0,N=0):
           m = i
           break
         else:
-          tmp = tmp/norm
+          tmp = old_div(tmp,norm)
           V[:,i] = tmp
       V = V[:,0:m]
     return V
@@ -290,20 +295,20 @@ def compute_W(A,b,V,N=0):
     tmp = A.dot(V[:,0])
     W = np.zeros((n,m))
 
-    W[:,0] = tmp/np.linalg.norm(tmp)
+    W[:,0] = old_div(tmp,np.linalg.norm(tmp))
 
     for i in range(1,m):
       tmp = A.dot(V[:,i])
       for j in range(0,i):
         tmp = tmp - (np.inner(tmp,W[:,j])) * W[:,j]
       norm = np.linalg.norm(tmp)
-      W[:,i] = tmp/norm
+      W[:,i] = old_div(tmp,norm)
     for i in range(0,N):
       for i in range(1,m):
         tmp = W[:,i]
         for j in range(0,i):
           tmp = tmp - (np.inner(tmp,W[:,j])) * W[:,j]
-        W[:,i] = tmp/np.linalg.norm(tmp)
+        W[:,i] = old_div(tmp,np.linalg.norm(tmp))
 
     product = np.dot(W.T,b)
 
@@ -333,8 +338,8 @@ def eigenvalues_ZE(Q,invQ,G,GT,R,invR,use_invQG=False):
     from scipy.sparse import diags
     from scipy.sparse import issparse
     Qdiag = Q.diagonal()
-    D = diags(1/Qdiag, 0)
-    invD = diags(1/Qdiag, 0)
+    D = diags(old_div(1,Qdiag), 0)
+    invD = diags(old_div(1,Qdiag), 0)
     n1 = Q.shape[0]
     n2 = R.shape[0]
     v = np.ones((n1+n2,), dtype=complex)
@@ -408,7 +413,7 @@ def jacobi_iteration_matrix(A):
     from scipy.sparse import eye
     
     diagA = A.diagonal()
-    invD = diags(1/diagA, 0)
+    invD = diags(old_div(1,diagA), 0)
     
     jacobi_iteration_matrix = eye(A.shape[0]) - np.dot(invD,A)
     return jacobi_iteration_matrix
@@ -484,12 +489,12 @@ def compute_cum_delta(theta,deltas,omegas,n):
       #indices = np.argwhere((theta_discrete[i-1] <= theta ) & (theta < theta_discrete[i]))
       cum_delta[i] = cum_delta[i-1] + second_index-first_index
       cum_delta_omega[i] = cum_delta_omega[i-1] + np.sum(omegas[first_index:second_index])
-      deriv_delta[i] = second_index-first_index  / (2*np.pi/n)
-      deriv_delta_omega[i] = np.sum(omegas[first_index:second_index])  / (2*np.pi/n)
+      deriv_delta[i] = second_index-old_div(first_index, (2*np.pi/n))
+      deriv_delta_omega[i] = old_div(np.sum(omegas[first_index:second_index]), (2*np.pi/n))
       first_index = second_index
 
-    percent_delta =  cum_delta/cum_delta[n-1]
-    percent_delta_omega = cum_delta_omega/cum_delta_omega[n-1]
+    percent_delta =  old_div(cum_delta,cum_delta[n-1])
+    percent_delta_omega = old_div(cum_delta_omega,cum_delta_omega[n-1])
 
     return theta_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega
 
@@ -537,7 +542,7 @@ def plot_eigenvalues_on_unit_circle_highlight(v,indices):
 
 def plot_polar_function(theta,f,rho_min,rho_max):
     import matplotlib.pyplot as plt
-    scale = (rho_max-rho_min) / np.max(f)
+    scale = old_div((rho_max-rho_min), np.max(f))
     rho = rho_min + scale*f
     plt.plot(theta, rho, zorder=3)
     plt.ylim(0,rho_max+0.5)
@@ -553,7 +558,7 @@ def plot_omegas_percent(v):
     import matplotlib.pyplot as plt
     plt.figure()
     v = -np.sort(-v)
-    plt.plot(np.cumsum(v)/np.sum(v))
+    plt.plot(old_div(np.cumsum(v),np.sum(v)))
     plt.grid(True)
 
 def main():
diff --git a/mrstlnos/old_tests/bolt_muelu.py b/mrstlnos/old_tests/bolt_muelu.py
index eb9a2861e296a9bf43de6e8b04c03cf600e628f3..0b1b08f08cb11e4ec6e00d92f6c2fe528b31b14b 100644
--- a/mrstlnos/old_tests/bolt_muelu.py
+++ b/mrstlnos/old_tests/bolt_muelu.py
@@ -2,6 +2,7 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/old_tests/bolt_muelu2.py b/mrstlnos/old_tests/bolt_muelu2.py
index 3b7374e965586a3f6a7231a1a6a16e526b7bad3c..9ec601b8bafbbfc2596e05c11a24712ba552aae8 100644
--- a/mrstlnos/old_tests/bolt_muelu2.py
+++ b/mrstlnos/old_tests/bolt_muelu2.py
@@ -2,6 +2,7 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/readers.py b/mrstlnos/readers.py
index 0141444049c6eb530763eee2f4f3ac597209956c..6ccec92f9ead492f0abb4b3f4a3fa2695b172e27 100644
--- a/mrstlnos/readers.py
+++ b/mrstlnos/readers.py
@@ -1,6 +1,8 @@
 #!/usr/bin/env python
 # -*- coding: latin-1; -*-
 
+from builtins import str
+from builtins import range
 import numpy as np
 
 def read_timers(filename,querylines):
diff --git a/mrstlnos/speedup.py b/mrstlnos/speedup.py
index 0138bce946f38eb1b9edd635e93f44c520334511..938a7ccf6df14fa5f27c87916a0b889ad305d4b3 100644
--- a/mrstlnos/speedup.py
+++ b/mrstlnos/speedup.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import numpy as np
 
 from mrstlnos.readers import *
@@ -10,7 +14,7 @@ def read_iter_all_ensemble_sizes(n_samples,ensemble_sizes,file_base_dir,reductio
   iter = np.zeros((len(ensemble_sizes),n_samples))
   for i in range(0,len(ensemble_sizes)):
     file_base_dir_2 = file_base_dir + '/' + str(ensemble_sizes[i])+'/'
-    for j in range(0,int(n_samples/ensemble_sizes[i])):
+    for j in range(0,int(old_div(n_samples,ensemble_sizes[i]))):
       input_MC_file_dir = file_base_dir_2 + str(j)+'/'
       es = ensemble_sizes[i]
       if reduction: es = 1
@@ -24,7 +28,7 @@ def read_timers_all_ensemble_sizes(n_samples,ensemble_sizes,file_base_dir,queryl
   timers_s = np.zeros((len(querylines),))
   for i in range(0,len(ensemble_sizes)):
     file_base_dir_2 = file_base_dir + '/' + str(ensemble_sizes[i])+'/'
-    for j in range(0,int(n_samples/ensemble_sizes[i])):
+    for j in range(0,int(old_div(n_samples,ensemble_sizes[i]))):
       input_MC_file_dir = file_base_dir_2 + str(j)+'/'
       for k in use_waves_timers:
         timers_s[int(k)] = read_timers(input_MC_file_dir + 'timers.txt' ,[querylines[int(k)]])[0]
@@ -49,8 +53,8 @@ def compute_speedup(n_samples,ensemble_sizes,file_base_dir,querylines,per_iterat
     if i == i_no_ep:
       speedup[i][:][:] = np.ones((1,len(querylines),n_quantiles))
     else:
-      cum_timers = np.zeros((2,int(n_samples/ensemble_sizes[i]),len(querylines)))
-      for j in range(0,int(n_samples/ensemble_sizes[i])):
+      cum_timers = np.zeros((2,int(old_div(n_samples,ensemble_sizes[i])),len(querylines)))
+      for j in range(0,int(old_div(n_samples,ensemble_sizes[i]))):
         for l in range(0,len(querylines)):
           if per_iteration[l]:
             sum_iter = 0
@@ -60,16 +64,16 @@ def compute_speedup(n_samples,ensemble_sizes,file_base_dir,querylines,per_iterat
             cum_timers[0][j][l] = cum_timers[0][j][l] + timers[i_no_ep][j*ensemble_sizes[i]+k][l]
             if per_iteration[l]:
               sum_iter = sum_iter + iter[i_no_ep][j*ensemble_sizes[i]+k]
-          cum_timers[0][j][l] = cum_timers[0][j][l] / sum_iter
+          cum_timers[0][j][l] = old_div(cum_timers[0][j][l], sum_iter)
           if cum_timers[0][j][l] == 0:
-            print('Warning! The cumulated cpu cost of ' + querylines[l] + ' is zero and is replaced by ' + str(0.01 / sum_iter) + ', the precision of the timers has to be increased or the test is too small.')
-            cum_timers[0][j][l] = 0.01 / sum_iter
+            print('Warning! The cumulated cpu cost of ' + querylines[l] + ' is zero and is replaced by ' + str(old_div(0.01, sum_iter)) + ', the precision of the timers has to be increased or the test is too small.')
+            cum_timers[0][j][l] = old_div(0.01, sum_iter)
           if per_iteration[l]:
-            cum_timers[1][j][l] = timers[i][j*ensemble_sizes[i]][l] / (iter[i][j*ensemble_sizes[i]]*ensemble_sizes[i])
+            cum_timers[1][j][l] = old_div(timers[i][j*ensemble_sizes[i]][l], (iter[i][j*ensemble_sizes[i]]*ensemble_sizes[i]))
           else:
             cum_timers[1][j][l] = timers[i][j*ensemble_sizes[i]][l]
       for l in range(0,len(querylines)):
-        speedup[i][l] = np.quantile(cum_timers[0,:,l]/cum_timers[1,:,l], quantiles, axis=0)
+        speedup[i][l] = np.quantile(old_div(cum_timers[0,:,l],cum_timers[1,:,l]), quantiles, axis=0)
   return speedup
 
 def plot_speedup(speedup,ensemble_sizes,which_l=[0],title=None,querylines=None,per_iteration=None):
@@ -127,12 +131,12 @@ def compute_R(n_samples,ensemble_sizes,file_base_dir,quantiles,reduction=False):
   
   for i in range(0,len(ensemble_sizes)):
     if i != i_no_ep:
-      cum_iter = np.zeros((2,int(n_samples/ensemble_sizes[i])))
-      for j in range(0,int(n_samples/ensemble_sizes[i])):
+      cum_iter = np.zeros((2,int(old_div(n_samples,ensemble_sizes[i]))))
+      for j in range(0,int(old_div(n_samples,ensemble_sizes[i]))):
         for k in range(0,ensemble_sizes[i]):
           cum_iter[0][j] = cum_iter[0][j] + iter[i_no_ep][j*ensemble_sizes[i]+k]
         cum_iter[1][j] = iter[i][j*ensemble_sizes[i]]*ensemble_sizes[i]
-      R[i,:] = np.quantile(cum_iter[1,:]/cum_iter[0,:], quantiles, axis=0)
+      R[i,:] = np.quantile(old_div(cum_iter[1,:],cum_iter[0,:]), quantiles, axis=0)
   return R
 
 def save_R(R,filename):
diff --git a/mrstlnos/tests/1_cube.py b/mrstlnos/tests/1_cube.py
index 792be0601792ed0e56e0609a52c417edd5368a51..535753587930beac09e86c0acb5b02064bccfb3e 100644
--- a/mrstlnos/tests/1_cube.py
+++ b/mrstlnos/tests/1_cube.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/1_cube_k.py b/mrstlnos/tests/1_cube_k.py
index f0adf1e951781794dc984cb45e6f5d222d1b84c1..7a13aaa1c05f9ed60679ef80b11b0e8b97ff65d8 100644
--- a/mrstlnos/tests/1_cube_k.py
+++ b/mrstlnos/tests/1_cube_k.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/1_cube_rf.py b/mrstlnos/tests/1_cube_rf.py
index 24a4ceb0026668c27bb5107846974c4133764b99..0d63be6ad63ccc3630abb1bc644946254d55062a 100644
--- a/mrstlnos/tests/1_cube_rf.py
+++ b/mrstlnos/tests/1_cube_rf.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -95,7 +99,7 @@ def main():
     randomParams['Correlation length Y'] = 2.
     randomParams['Correlation length Z'] = 1.
 
-    randomParams['Mean'] = 1./(2.*(1.+0.2))
+    randomParams['Mean'] = old_div(1.,(2.*(1.+0.2)))
     randomParams['Dispersion level'] = 0.1
 
     m.uDirichlet(pbl, "Surf 1 1", "Clamped",1,0.,1,0.,1,0.,1,10.,ensemble_size)
diff --git a/mrstlnos/tests/1_cube_tet.py b/mrstlnos/tests/1_cube_tet.py
index 137056440d296644fcb7d64e1808f8e9c1ad69c6..ce49c0e0b927c2e4e59cb03709a604556fe37c20 100644
--- a/mrstlnos/tests/1_cube_tet.py
+++ b/mrstlnos/tests/1_cube_tet.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes.py b/mrstlnos/tests/2_cubes.py
index 24830ff171bc5557168df06d269fe9808771db6b..f05dc982ecfdd63b809ae0d780eda834004eb910 100644
--- a/mrstlnos/tests/2_cubes.py
+++ b/mrstlnos/tests/2_cubes.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes_heat.py b/mrstlnos/tests/2_cubes_heat.py
index 4410dc6c05cd31be7f36b42f5ec3ee091a1352b8..b388fb3c34d59f75b54406cfc368726ed3969dd6 100644
--- a/mrstlnos/tests/2_cubes_heat.py
+++ b/mrstlnos/tests/2_cubes_heat.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes_no_contact.py b/mrstlnos/tests/2_cubes_no_contact.py
index 62558c738c3896b66a0206cec0f5601b58cf840f..d2974ffdc89d8d2c824618f6406118923372c555 100644
--- a/mrstlnos/tests/2_cubes_no_contact.py
+++ b/mrstlnos/tests/2_cubes_no_contact.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes_patch.py b/mrstlnos/tests/2_cubes_patch.py
index 7e20fb5b411f97ff3bd3de56e8ef7ee6f54a930a..2df83c22a3f2b9cc364a3e3d85d6ee6adc327986 100644
--- a/mrstlnos/tests/2_cubes_patch.py
+++ b/mrstlnos/tests/2_cubes_patch.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes_patch_2_lvls.py b/mrstlnos/tests/2_cubes_patch_2_lvls.py
index 1378918bf051e403e5bb4267eb0cfa50b9406f31..ce1cf73d597e519d3b3848e6e0351b94fe24333c 100644
--- a/mrstlnos/tests/2_cubes_patch_2_lvls.py
+++ b/mrstlnos/tests/2_cubes_patch_2_lvls.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes_patch_BraessSarazin.py b/mrstlnos/tests/2_cubes_patch_BraessSarazin.py
index 6610acdfe8bbb6731cf95a8b8ddd455822b25ceb..36d3621f03238058c71ffd02f06fd3943e0ebac2 100644
--- a/mrstlnos/tests/2_cubes_patch_BraessSarazin.py
+++ b/mrstlnos/tests/2_cubes_patch_BraessSarazin.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes_patch_IndefBlockDiagonal.py b/mrstlnos/tests/2_cubes_patch_IndefBlockDiagonal.py
index dc0bfd36647b1fe76fbc2cc6f0467a11190d1112..2b6025e610bc5b5166f6c58134b0560deac456f4 100644
--- a/mrstlnos/tests/2_cubes_patch_IndefBlockDiagonal.py
+++ b/mrstlnos/tests/2_cubes_patch_IndefBlockDiagonal.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes_patch_SIMPLE.py b/mrstlnos/tests/2_cubes_patch_SIMPLE.py
index 651d91c07ae981b22f8d64599945e04433dcb307..411e1062739ad58b96002a8647a5ff7db5a099e2 100644
--- a/mrstlnos/tests/2_cubes_patch_SIMPLE.py
+++ b/mrstlnos/tests/2_cubes_patch_SIMPLE.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes_patch_SIMPLEC.py b/mrstlnos/tests/2_cubes_patch_SIMPLEC.py
index bc438e20aa4b8900cdc84f31543f0f78107b4c0a..21fe1fcd88f303cddaec4e467ed3823e6e05b8e4 100644
--- a/mrstlnos/tests/2_cubes_patch_SIMPLEC.py
+++ b/mrstlnos/tests/2_cubes_patch_SIMPLEC.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes_patch_Uzawa.py b/mrstlnos/tests/2_cubes_patch_Uzawa.py
index 75e6421846c5cb464ba2faaf4ae8dc655ac38d1b..566c8c9850dd52b492cfd5d6651fad01479afb1a 100644
--- a/mrstlnos/tests/2_cubes_patch_Uzawa.py
+++ b/mrstlnos/tests/2_cubes_patch_Uzawa.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes_sticking.py b/mrstlnos/tests/2_cubes_sticking.py
index a2a1e23e4079daa8bd456b93819e56dbaac5723d..5ec0151fc70c78be5958878bd20929550004c5a0 100644
--- a/mrstlnos/tests/2_cubes_sticking.py
+++ b/mrstlnos/tests/2_cubes_sticking.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/2_cubes_tet.py b/mrstlnos/tests/2_cubes_tet.py
index a21c025f55af12254772de1890460eaf83a723f2..93e1f369761228509a201cda5955175c2d317f06 100644
--- a/mrstlnos/tests/2_cubes_tet.py
+++ b/mrstlnos/tests/2_cubes_tet.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/3_cubes_partial_sticking.py b/mrstlnos/tests/3_cubes_partial_sticking.py
index 80500927fb0449c29343626fa3f5cf69d8fda634..0241b092336f1eb61a8f6054b930839821fc62fc 100644
--- a/mrstlnos/tests/3_cubes_partial_sticking.py
+++ b/mrstlnos/tests/3_cubes_partial_sticking.py
@@ -2,6 +2,8 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
diff --git a/mrstlnos/tests/M1_optic_test.py b/mrstlnos/tests/M1_optic_test.py
index 0628fb832321d4718b1724d4e34d77628da5ba29..6d512c7a1515a9a7ebaf3b92ac2ada974d744f86 100644
--- a/mrstlnos/tests/M1_optic_test.py
+++ b/mrstlnos/tests/M1_optic_test.py
@@ -1,6 +1,8 @@
 #!/usr/bin/env python
 # -*- coding: latin-1; -*-
 
+from __future__ import division
+from past.utils import old_div
 import mrstlnos.utilities as u
 import numpy as np
 import os
@@ -26,9 +28,9 @@ def main():
     dz = npzfile['dz']
 
     dz_1 = 0
-    dz_2 = 0.5/1000
-    dz_3 = 0.87/1000
-    dz_4 = -2.1/1000
+    dz_2 = old_div(0.5,1000)
+    dz_3 = old_div(0.87,1000)
+    dz_4 = old_div(-2.1,1000)
 
     theta_x_1 = 0
     theta_x_2 = 0.0015
diff --git a/mrstlnos/tests/beam.py b/mrstlnos/tests/beam.py
index 68e82e8a8653655276349ec032278418da80fc20..6f4a044c2377e87bfef85dedc32a782ab9697aee 100644
--- a/mrstlnos/tests/beam.py
+++ b/mrstlnos/tests/beam.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -10,7 +14,7 @@ import tbox.gmsh as gmsh
 
 def analytical(E,nu,L,W,H,d,p,x):
 
-    EI =  (E * W * H**3)/12.
+    EI =  old_div((E * W * H**3),12.)
     q = p * W
     q_1 = 24*EI*d/L**4
     q_2 = 72*EI*d/L**4
@@ -28,13 +32,13 @@ def analytical(E,nu,L,W,H,d,p,x):
 
     if q < q_1:
         case_id = 1
-        sol = -(q/(24.*EI))*(x**4-4.*L*x**3+4.*L**2*x**2)
+        sol = -(old_div(q,(24.*EI)))*(x**4-4.*L*x**3+4.*L**2*x**2)
     if q >= q_1:
         case_id = 2
-        sol = -(q/(24.*EI))*(x**4-2.*L*x**3+L**2*x**2) +2.*d*x**3/(L**3)-3.*d*x**2/(L**2)
+        sol = -(old_div(q,(24.*EI)))*(x**4-2.*L*x**3+L**2*x**2) +2.*d*x**3/(L**3)-3.*d*x**2/(L**2)
     if q >= q_2:
         case_id = 3
-        sol = -(q/(24.*EI))*(x**4-(8./3.)*a*x**3+2.*a**2*x**2)
+        sol = -(old_div(q,(24.*EI)))*(x**4-(old_div(8.,3.))*a*x**3+2.*a**2*x**2)
         for i in range(0,len(x)):
             if x[i] >= a:
                 sol[i] = -d
diff --git a/mrstlnos/utilities.py b/mrstlnos/utilities.py
index 637ac0bb808a4a5f85e017e8dff01cdedad6ed7f..c0abf75a89390197de66ca87503cbcb27fdec5fb 100644
--- a/mrstlnos/utilities.py
+++ b/mrstlnos/utilities.py
@@ -2,6 +2,10 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import mrstlnos as m
 import tbox
 import tbox.gmsh as gmsh
@@ -217,13 +221,13 @@ def extract_2D(msh, tag_name, DOFperNode, which_dof, ensemble_size, name_sol):
     nnodes = len(msh.nodes)
     global_to_local = -1*np.ones((nnodes, ), dtype='int32')
 
-    for i in xrange(0, len(nodes)):
+    for i in range(0, len(nodes)):
         global_to_local[nodes[i]] = i
 
     ntri = len(msh.ntags[tag_name].elems)
     tri = np.zeros((ntri, 3), dtype='uint32')
 
-    for i in xrange(0, ntri):
+    for i in range(0, ntri):
         tri[i, 0] = global_to_local[msh.ntags[tag_name].elems[i].nodes[0].no-1]
         tri[i, 1] = global_to_local[msh.ntags[tag_name].elems[i].nodes[1].no-1]
         tri[i, 2] = global_to_local[msh.ntags[tag_name].elems[i].nodes[2].no-1]
@@ -285,7 +289,7 @@ def extract_2D_all(msh, tag_name, DOFperNode, ensemble_size, name_sol):
     ntri = len(msh.ntags[tag_name].elems)
     tri = np.zeros((ntri, 3), dtype='uint32')
 
-    for i in xrange(0, ntri):
+    for i in range(0, ntri):
         tri[i, 0] = msh.ntags[tag_name].elems[i].nodes[0].no-1
         tri[i, 1] = msh.ntags[tag_name].elems[i].nodes[1].no-1
         tri[i, 2] = msh.ntags[tag_name].elems[i].nodes[2].no-1
@@ -329,7 +333,7 @@ def compute_cross_and_theta(vec1,vec2):
     norm2 = LA.norm(vec2)
     cross = np.cross(vec1, vec2)
     dot = np.dot(vec1, vec2)
-    theta = np.arccos(dot/(norm1*norm2))
+    theta = np.arccos(old_div(dot,(norm1*norm2)))
 
     return cross, theta
 
@@ -339,9 +343,9 @@ def rotation_matrix(axis, theta):
     the given axis by theta radians.
     """
     axis = np.asarray(axis)
-    axis = axis / np.sqrt(np.dot(axis, axis))
-    a = np.cos(theta / 2.0)
-    b, c, d = -axis * np.sin(theta / 2.0)
+    axis = old_div(axis, np.sqrt(np.dot(axis, axis)))
+    a = np.cos(old_div(theta, 2.0))
+    b, c, d = -axis * np.sin(old_div(theta, 2.0))
     aa, bb, cc, dd = a * a, b * b, c * c, d * d
     bc, ad, ac, ab, bd, cd = b * c, a * d, a * c, a * b, b * d, c * d
     return np.array([[aa + bb - cc - dd, 2 * (bc + ad), 2 * (bd - ac)],
@@ -397,7 +401,7 @@ def extract_2D_all_rotated(msh, tag_name, DOFperNode, ensemble_size, name_sol, a
         dz = z_r[max_i_z] - z_r[min_i_z]
         dy = y_r[max_i_z] - y_r[min_i_z]
 
-        theta_Y = np.arctan(-dz/dy)
+        theta_Y = np.arctan(old_div(-dz,dy))
 
         rot_Y = rotation_matrix(cross_prod_OY,theta_Y)
 
@@ -431,14 +435,14 @@ def compute_Zernike(x,y,z,tri,dz,n_Zernike,center_pos):
     for i in range(0,len(x)):
         rho[i] = LA.norm(np.array([x[i],y[i]])-center_pos)
         if x[i]>=center_pos[0] and y[i]>=center_pos[1]:
-            theta[i] = np.arctan((y[i]-center_pos[1])/(x[i]-center_pos[0]))
+            theta[i] = np.arctan(old_div((y[i]-center_pos[1]),(x[i]-center_pos[0])))
         elif y[i]>=center_pos[1] or x[i]<center_pos[0]:
-            theta[i] = np.arctan((y[i]-center_pos[1])/(x[i]-center_pos[0])) + np.pi
+            theta[i] = np.arctan(old_div((y[i]-center_pos[1]),(x[i]-center_pos[0]))) + np.pi
         else:
-            theta[i] = np.arctan((y[i]-center_pos[1])/(x[i]-center_pos[0])) + 2*np.pi
+            theta[i] = np.arctan(old_div((y[i]-center_pos[1]),(x[i]-center_pos[0]))) + 2*np.pi
 
     max_rho = max(rho)
-    rho = rho/max_rho
+    rho = old_div(rho,max_rho)
 
     if n_Zernike>=1:
         Zernike_functions[:,0] = 1.
@@ -468,7 +472,7 @@ def compute_Zernike(x,y,z,tri,dz,n_Zernike,center_pos):
 
     for i in range(0,n_tri):
         cross = np.cross(np.array([x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], z[tri[i, 1]] - z[tri[i, 0]] ]), np.array([x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], z[tri[i, 2]] - z[tri[i, 0]] ]))
-        area = LA.norm(cross)/6 # area per node of the triangle
+        area = old_div(LA.norm(cross),6) # area per node of the triangle
 
         for j in range(0,3):
             W[tri[i, j],tri[i, j]] = W[tri[i, j],tri[i, j]] + area
@@ -505,9 +509,9 @@ def compute_RBM_Curvature_Irreg(x,y,z,tri,dz,unit,center_pos):
     optical_coefficients = np.zeros((5,1)).flatten()
     optical_coefficients[0] = Zernike_coeff[0]                      # piston  [mm]
     index = np.argmax(Zernike_functions[:,1])
-    optical_coefficients[1] = np.arctan(-Zernike_coeff[1]*(Zernike_functions[index,1]/(x[index]-center_pos[0])))     # rot y   [rad]
+    optical_coefficients[1] = np.arctan(-Zernike_coeff[1]*(old_div(Zernike_functions[index,1],(x[index]-center_pos[0]))))     # rot y   [rad]
     index = np.argmax(Zernike_functions[:,2])
-    optical_coefficients[2] = np.arctan(-Zernike_coeff[2]*(Zernike_functions[index,2]/(y[index]-center_pos[1])))     # rot x   [rad]
+    optical_coefficients[2] = np.arctan(-Zernike_coeff[2]*(old_div(Zernike_functions[index,2],(y[index]-center_pos[1]))))     # rot x   [rad]
     optical_coefficients[3] = Zernike_coeff[3]*(np.amax(Zernike_functions[:,3])-np.amin(Zernike_functions[:,3]))
     optical_coefficients[4] = np.amax(dz_residual) - np.amin(dz_residual)
 
@@ -548,7 +552,7 @@ def compute_RBM_Curvature_Irreg_Sequential(x,y,z,tri,dz,unit,center_pos):
 
     for i in range(0,n_tri):
         cross = np.cross(np.array([x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], z[tri[i, 1]] - z[tri[i, 0]] ]), np.array([x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], z[tri[i, 2]] - z[tri[i, 0]] ]))
-        area = LA.norm(cross)/6 # area per node of the triangle
+        area = old_div(LA.norm(cross),6) # area per node of the triangle
 
         for j in range(0,3):
             W[tri[i, j],tri[i, j]] = W[tri[i, j],tri[i, j]] + area
@@ -559,7 +563,7 @@ def compute_RBM_Curvature_Irreg_Sequential(x,y,z,tri,dz,unit,center_pos):
 
         A_Z = np.dot(TMP_Z, RBM_Curvature_Irreg_functions[:,i])
 
-        RBM_Curvature_Irreg_coeff[i] = rhs_Z/A_Z
+        RBM_Curvature_Irreg_coeff[i] = old_div(rhs_Z,A_Z)
         dz = dz - RBM_Curvature_Irreg_coeff[i]*RBM_Curvature_Irreg_functions[:,i]
 
     optical_coefficients = np.zeros((5, ))
diff --git a/mrstlnos/viewer.py b/mrstlnos/viewer.py
index 824945f2b852256406535cb7f5847b9e6b9343b7..e6d0a171760c6842fa3ee6fb331695781a48f296 100644
--- a/mrstlnos/viewer.py
+++ b/mrstlnos/viewer.py
@@ -1,6 +1,11 @@
 # -*- coding: latin-1; -*-
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from builtins import object
+from past.utils import old_div
 import sys
 import mrstlnos as m
 import tbox as tb
@@ -544,7 +549,7 @@ class MeshViewer(QtGui.QWidget, m.DisplayHook):
         self.render()
 
 
-class Mesh:
+class Mesh(object):
     def __init__(self, ugrid):
 
         self.ugrid = ugrid
@@ -584,11 +589,11 @@ class Mesh:
             dist=1.0
         else:
             dist=vmax-vmin
-        thr = 1./256.
+        thr = old_div(1.,256.)
         scalars = self.ugrid.GetPointData().GetScalars()
         for i in range(scalars.GetNumberOfTuples()):
             val = scalars.GetTuple1(i)
-            tc = (val-vmin)/dist
+            tc = old_div((val-vmin),dist)
             if(tc<thr): tc=thr
             if(tc>1.0-thr): tc=1.0-thr
             self.tcoords.InsertTuple2(i, tc, tc)
@@ -643,7 +648,7 @@ class Mesh:
 
 
 
-class ScalarBar:
+class ScalarBar(object):
     def __init__(self, lut):
         tprop = vtk.vtkTextProperty()
         tprop.SetColor(0,0,0)
@@ -659,7 +664,7 @@ class ScalarBar:
         self.actor.SetLabelTextProperty(tprop)
 
 
-class Grid:
+class Grid(object):
     def __init__(self, ugrid):
         # compatibility vtk 5/6 => use a trivial producer
         #self.producer = vtk.vtkTrivialProducer()
diff --git a/params/CVT/python/normal.py b/params/CVT/python/normal.py
index bfc7ac1052c0009a5cc85d995bb9d674db2e5b6e..b865fa65fa0efed2c5f4c59ff874b2be74678a74 100644
--- a/params/CVT/python/normal.py
+++ b/params/CVT/python/normal.py
@@ -16,13 +16,15 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import numpy as np
 
 def rho(X,a,b):
 
     mu = 0.
     sigma =1.
-    rho = np.exp(-(X-mu)**2./(2.*sigma**2))/(sigma*np.sqrt(2.*np.pi))
+    rho = old_div(np.exp(old_div(-(X-mu)**2.,(2.*sigma**2))),(sigma*np.sqrt(2.*np.pi)))
             
     return rho
 
@@ -31,4 +33,4 @@ def rho_max(a,b):
 
     sigma = 1.
 
-    return 1./(sigma*np.sqrt(2.*np.pi))
+    return old_div(1.,(sigma*np.sqrt(2.*np.pi)))
diff --git a/params/CVT/python/rejection.py b/params/CVT/python/rejection.py
index 5ccd922e121f9c739fb55d157723e09bb2886b56..db180eff36af369c3a8bbe4916636c0bd11c8257 100644
--- a/params/CVT/python/rejection.py
+++ b/params/CVT/python/rejection.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import numpy as np
 
 def rejection_method(a,b,m,pdf):
@@ -38,7 +40,7 @@ def rejection_method(a,b,m,pdf):
         X[i] = a+(b-a)*Xp
         U = np.random.uniform(0.,1.)    
         
-        if U < rho(X[i],a,b)/rho_max:
+        if U < old_div(rho(X[i],a,b),rho_max):
             i = i + 1
             
     return X
diff --git a/params/CVT/python/test.py b/params/CVT/python/test.py
index 2a3a0d1a76ea64907a450ba27eb3089988c50ef2..71c779dce916577747231a37b2a3b62ca13de5c5 100644
--- a/params/CVT/python/test.py
+++ b/params/CVT/python/test.py
@@ -17,6 +17,9 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import numpy as np
 
 def compute_energy(z,a,b,k,pdf):
@@ -26,7 +29,7 @@ def compute_energy(z,a,b,k,pdf):
         left = np.abs(a-z[i])
         right = np.abs(b-z[i])
         for j in range(0,k):
-            d_c = np.abs((z[i]-z[j])/2.)
+            d_c = np.abs(old_div((z[i]-z[j]),2.))
             if z[j]<z[i]:
                 if d_c < left:
                     left = d_c
@@ -60,7 +63,7 @@ def MacQueen(a,b,k,pdf,it_max):
             if d_c < d:
                 d = d_c
                 istar = i
-        z[istar] = (j[istar]*z[istar]+y)/(j[istar]+1.)
+        z[istar] = old_div((j[istar]*z[istar]+y),(j[istar]+1.))
         j[istar] = j[istar] + 1.
 
         Energy[it] = compute_energy(z,a,b,k,pdf)
@@ -106,7 +109,7 @@ def new_method(a,b,k,q,alpha,beta,pdf,it_max):
         u = np.zeros((k,))
         for i in range(0,k):
             if np.sum(W[i,:]) > 0.:
-                u[i] = np.dot(W[i,:],y.T)/np.sum(W[i,:]) 
+                u[i] = old_div(np.dot(W[i,:],y.T),np.sum(W[i,:])) 
 
         #print u                     
     
@@ -118,7 +121,7 @@ def new_method(a,b,k,q,alpha,beta,pdf,it_max):
                     #print C_1
                     #print C_2
 
-                    z[i] = ((alpha[0]*j[i]+beta[0])*z[i]+(alpha[1]*j[i]+beta[1])*u[i])/(j[i]+1.)  
+                    z[i] = old_div(((alpha[0]*j[i]+beta[0])*z[i]+(alpha[1]*j[i]+beta[1])*u[i]),(j[i]+1.))  
                     j[i] = j[i] + 1.                 
                     break
         #print z
diff --git a/params/CVT/python/test2D.py b/params/CVT/python/test2D.py
index de8aff8efb544715594b5aa44a03e66bb25ee148..3f72ac8ec16991a87f5f4956293ff0d1733a5b2e 100644
--- a/params/CVT/python/test2D.py
+++ b/params/CVT/python/test2D.py
@@ -17,6 +17,10 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import zip
+from builtins import range
+from past.utils import old_div
 import numpy as np
 import matplotlib.pyplot as plt
 from scipy.spatial import Voronoi
@@ -197,8 +201,8 @@ def new_method(a,b,c,d,k,q,alpha,beta,pdf,it_max):
         u = np.zeros((k,2))
         for i in range(0,k):
             if np.sum(W[i,:]) > 0.:
-                u[i,0] = np.dot(W[i,:],y[:,0].T)/np.sum(W[i,:]) 
-                u[i,1] = np.dot(W[i,:],y[:,1].T)/np.sum(W[i,:]) 
+                u[i,0] = old_div(np.dot(W[i,:],y[:,0].T),np.sum(W[i,:])) 
+                u[i,1] = old_div(np.dot(W[i,:],y[:,1].T),np.sum(W[i,:])) 
 
         #print u                     
     
@@ -210,7 +214,7 @@ def new_method(a,b,c,d,k,q,alpha,beta,pdf,it_max):
                     #print C_1
                     #print C_2
 
-                    z[i,:] = ((alpha[0]*j[i]+beta[0])*z[i,:]+(alpha[1]*j[i]+beta[1])*u[i,:])/(j[i]+1.)  
+                    z[i,:] = old_div(((alpha[0]*j[i]+beta[0])*z[i,:]+(alpha[1]*j[i]+beta[1])*u[i,:]),(j[i]+1.))  
                     j[i] = j[i] + 1.                 
                     break
         #print z
@@ -245,7 +249,7 @@ def new_method(a,b,c,d,k,q,alpha,beta,pdf,it_max):
     # colorize
     for region in regions:
         polygon = vertices[region]
-        plt.fill(*zip(*polygon), alpha=0.4)
+        plt.fill(*list(zip(*polygon)), alpha=0.4)
 
     plt.plot(points[:,0], points[:,1], 'ko')
     if pdf == 'uniform':
@@ -254,8 +258,8 @@ def new_method(a,b,c,d,k,q,alpha,beta,pdf,it_max):
         plt.ylim([c, d])
     elif pdf == 'normal':
         plt.axis('equal')
-        plt.xlim([a/2., b/2.])
-        plt.ylim([c/2., d/2.])
+        plt.xlim([old_div(a,2.), old_div(b,2.)])
+        plt.ylim([old_div(c,2.), old_div(d,2.)])
     plt.savefig('test', 
         #This is simple recomendation for publication plots
         dpi=1000, 
diff --git a/params/CVT/python/test2D2.py b/params/CVT/python/test2D2.py
index d3e3d4ad70636690a1a7e42dcc49959308ac0c77..52a443abcde98b135e5b1ba36906e5463f066429 100644
--- a/params/CVT/python/test2D2.py
+++ b/params/CVT/python/test2D2.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import zip
 import numpy as np
 import matplotlib.pyplot as plt
 from scipy.spatial import Voronoi
@@ -122,7 +123,7 @@ print(vertices)
 # colorize
 for region in regions:
     polygon = vertices[region]
-    plt.fill(*zip(*polygon), alpha=0.4)
+    plt.fill(*list(zip(*polygon)), alpha=0.4)
 
 plt.plot(points[:,0], points[:,1], 'ko')
 plt.xlim(vor.min_bound[0] - 0.1, vor.max_bound[0] + 0.1)
diff --git a/params/CVT/python/test3.py b/params/CVT/python/test3.py
index e9251db7f373793fd8d1668d3ecad90725bb41ce..4520476db7f7f5a861162054bbe7fa6ba872f89e 100644
--- a/params/CVT/python/test3.py
+++ b/params/CVT/python/test3.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import zip
 import numpy as np
 import matplotlib.pyplot as plt
 from scipy.spatial import Voronoi
@@ -121,7 +122,7 @@ print(vertices)
 # colorize
 for region in regions:
     polygon = vertices[region]
-    plt.fill(*zip(*polygon), alpha=0.4)
+    plt.fill(*list(zip(*polygon)), alpha=0.4)
 
 plt.plot(points[:,0], points[:,1], 'ko')
 plt.xlim(vor.min_bound[0] - 0.1, vor.max_bound[0] + 0.1)
diff --git a/params/CVT/python/uniform.py b/params/CVT/python/uniform.py
index 776e0cb1520c996f289c7ba6de1b5db73246d4f8..d64d2f016716ee00ee3522a6f0f79ee5d2ac7f97 100644
--- a/params/CVT/python/uniform.py
+++ b/params/CVT/python/uniform.py
@@ -16,11 +16,13 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import numpy as np
 
 def rho(X,a,b):
 
-    rho = 1./(b-a)
+    rho = old_div(1.,(b-a))
             
     return rho
 
diff --git a/params/arnst_ponthot/src/gamma.py b/params/arnst_ponthot/src/gamma.py
index 892a2b444325f8fff90c1c0065218ecdf21fe84f..16c84c7d502ece6022a8b21e302e260d2e268b5d 100644
--- a/params/arnst_ponthot/src/gamma.py
+++ b/params/arnst_ponthot/src/gamma.py
@@ -16,6 +16,9 @@
 # limitations under the License.
 
 
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import numpy as np
 from scipy.stats import gamma
 from scipy.stats import norm
@@ -43,8 +46,8 @@ def grid(M):
     return X, W
 
 def rho_gamma(g,m_gamma,sigmaS_gamma):
-    k = m_gamma**2/sigmaS_gamma
-    theta = sigmaS_gamma/m_gamma
+    k = old_div(m_gamma**2,sigmaS_gamma)
+    theta = old_div(sigmaS_gamma,m_gamma)
 
     out_shape = np.shape(g)
 
@@ -60,8 +63,8 @@ def rho_gamma(g,m_gamma,sigmaS_gamma):
     return out
 
 def c_gamma(g,m_gamma,sigmaS_gamma):
-    k = m_gamma**2/sigmaS_gamma
-    theta = sigmaS_gamma/m_gamma
+    k = old_div(m_gamma**2,sigmaS_gamma)
+    theta = old_div(sigmaS_gamma,m_gamma)
 
     out_shape = np.shape(g)
 
@@ -77,8 +80,8 @@ def c_gamma(g,m_gamma,sigmaS_gamma):
     return out
 
 def c_inv_gamma(g,m_gamma,sigmaS_gamma):
-    k = m_gamma**2/sigmaS_gamma
-    theta = sigmaS_gamma/m_gamma
+    k = old_div(m_gamma**2,sigmaS_gamma)
+    theta = old_div(sigmaS_gamma,m_gamma)
 
     out_shape = np.shape(g)
 
@@ -106,7 +109,7 @@ def c_inv_xi(g):
 
 def sigma(c1,c2,rho):
 
-    c = 1./(np.sqrt(1-rho**2))
+    c = old_div(1.,(np.sqrt(1-rho**2)))
 
     tmp1 = c_inv_xi(c1)
     tmp2 = c_inv_xi(c2)
@@ -118,7 +121,7 @@ def sigma(c1,c2,rho):
     elif (rho*tmp1)**2 - (2*rho*tmp1*tmp2)  + (rho*tmp2)**2  == float('Inf'):
         out = 0.
     else:
-        out = c*np.exp(-((rho*tmp1)**2 - (2*rho*tmp1*tmp2)  + (rho*tmp2)**2) /(2.*(1.-rho**2)))
+        out = c*np.exp(old_div(-((rho*tmp1)**2 - (2*rho*tmp1*tmp2)  + (rho*tmp2)**2),(2.*(1.-rho**2))))
 
     return out
 
diff --git a/params/arnst_ponthot/tests/test10.py b/params/arnst_ponthot/tests/test10.py
index 98d806e90254978d71017147f55b5648ac50235a..7ecc8d63e76ab839f1e78c6248c7c118f4f4dbfb 100644
--- a/params/arnst_ponthot/tests/test10.py
+++ b/params/arnst_ponthot/tests/test10.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 
 def main():
diff --git a/params/arnst_ponthot/tests/test11.py b/params/arnst_ponthot/tests/test11.py
index 6ccc85bd49dc4aca50be77ac0abe1ab5188452b2..7615688c8163694aa1ea1742974b092f4a175833 100644
--- a/params/arnst_ponthot/tests/test11.py
+++ b/params/arnst_ponthot/tests/test11.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 
 def main():
diff --git a/params/arnst_ponthot/tests/test2.py b/params/arnst_ponthot/tests/test2.py
index c02030b61c40942eaddeee4c595e70e6e482eff8..ef421eafa967ce50a48e304d2297e8d9dd984480 100644
--- a/params/arnst_ponthot/tests/test2.py
+++ b/params/arnst_ponthot/tests/test2.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import numpy as np
 
 def main():
@@ -26,8 +28,8 @@ def main():
 
     m_H = 1495.
     sigmaS_H = 1390.
-    k = m_H**2/sigmaS_H
-    theta = sigmaS_H/m_H
+    k = old_div(m_H**2,sigmaS_H)
+    theta = old_div(sigmaS_H,m_H)
     x = np.linspace(1200,1800, 100)
     loc = 0. 
     ax.plot(x, gamma.pdf(x, k, loc, theta),'r-', lw=5, alpha=0.6, label='norm pdf')
diff --git a/params/arnst_ponthot/tests/test3.py b/params/arnst_ponthot/tests/test3.py
index d970e9c79dabd6d7c9f42ea55accac7e4de03dd1..1e60239eb7a0f17929787392d4c18d10d16f1c7d 100644
--- a/params/arnst_ponthot/tests/test3.py
+++ b/params/arnst_ponthot/tests/test3.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import numpy as np
 
 def main():
@@ -26,8 +28,8 @@ def main():
 
     m_H = 1495.
     sigmaS_H = 1390.
-    k = m_H**2/sigmaS_H
-    theta = sigmaS_H/m_H
+    k = old_div(m_H**2,sigmaS_H)
+    theta = old_div(sigmaS_H,m_H)
     x = np.linspace(1200,1800, 100)
     loc = 0. 
     ax.plot(x, gamma.cdf(x, k, loc, theta),'r-', lw=5, alpha=0.6, label='norm pdf')
diff --git a/params/arnst_ponthot/tests/test4.py b/params/arnst_ponthot/tests/test4.py
index 9b5ec90e0b2b471183ab286176c8a8a14309ba7e..c20769246fde3c9d8bf7c540ade54cdb1e7fab2b 100644
--- a/params/arnst_ponthot/tests/test4.py
+++ b/params/arnst_ponthot/tests/test4.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from __future__ import division
+from past.utils import old_div
 import numpy as np
 
 def main():
@@ -26,8 +28,8 @@ def main():
 
     m_H = 1495.
     sigmaS_H = 1390.
-    k = m_H**2/sigmaS_H
-    theta = sigmaS_H/m_H
+    k = old_div(m_H**2,sigmaS_H)
+    theta = old_div(sigmaS_H,m_H)
     x = np.linspace(0,1, 100)
     loc = 0. 
     ax.plot(x,gamma.isf(1-x, k, loc, theta),'r-', lw=5, alpha=0.6, label='norm pdf')
diff --git a/params/arnst_ponthot/tests/test9.py b/params/arnst_ponthot/tests/test9.py
index 55f91590db400a0126e8774b5b3388c9996d915b..ff921cc6f5fcf0484b927b98babe7ef2a92af72a 100644
--- a/params/arnst_ponthot/tests/test9.py
+++ b/params/arnst_ponthot/tests/test9.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 
 def main():
diff --git a/params/dev_tests/LSP.py b/params/dev_tests/LSP.py
index 2a50bc8f292c1358a5d7bcad772af517f00cb6df..31edde22385c7e8f3166d42f0b4018e6e36c6ae7 100755
--- a/params/dev_tests/LSP.py
+++ b/params/dev_tests/LSP.py
@@ -17,13 +17,16 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import numpy as np
 import matplotlib.pyplot as plt
 
 def main():
     m = 100
     n = 100
-    x = 2*(np.arange(0,m)/(m-1.) -0.5)
+    x = 2*(old_div(np.arange(0,m),(m-1.)) -0.5)
 
     Z = np.zeros((m,n))
 
@@ -37,7 +40,7 @@ def main():
         plt.plot(x,Z[:,i])
 
     plt.subplot(1,3,2)
-    plt.semilogy(range(1,n+1),s,'*')
+    plt.semilogy(list(range(1,n+1)),s,'*')
     plt.xlabel('i')
     plt.ylabel('sigma_i')
 
diff --git a/params/dev_tests/LSP_2.py b/params/dev_tests/LSP_2.py
index 8d5eb3f996caaba0abf1761d30d2ab21fdce97b4..4ea8d82f554606485015309979b2a30684c73dba 100755
--- a/params/dev_tests/LSP_2.py
+++ b/params/dev_tests/LSP_2.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import numpy as np
 import matplotlib.pyplot as plt
 
@@ -43,7 +44,7 @@ def main():
         plt.plot(x,Z[:,i])
 
     plt.subplot(1,3,2)
-    plt.semilogy(range(1,n+1),s,'*')
+    plt.semilogy(list(range(1,n+1)),s,'*')
     plt.xlabel('i')
     plt.ylabel('sigma_i')
 
diff --git a/params/dev_tests/LSP_3.py b/params/dev_tests/LSP_3.py
index 96f4de8380abbbf603a777a8927317e3b568968b..f628f628238a16583ec8c671bd9433c397205f53 100755
--- a/params/dev_tests/LSP_3.py
+++ b/params/dev_tests/LSP_3.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import matplotlib as mpl
 from mpl_toolkits.mplot3d import Axes3D
 from matplotlib import cm
@@ -60,8 +61,8 @@ def main():
 
     plt.figure()
 
-    plt.semilogy(range(1,n+1),s_1**2,'ro')
-    plt.semilogy(range(1,n**2+1),s_2,'ko')
+    plt.semilogy(list(range(1,n+1)),s_1**2,'ro')
+    plt.semilogy(list(range(1,n**2+1)),s_2,'ko')
     for i in range(0,n):
         plt.semilogy([1,n**2+1],[s_1[i]**2,s_1[i]**2],'b')
 
diff --git a/params/dev_tests/LSP_4.py b/params/dev_tests/LSP_4.py
index 115448d63b2519185f1456e2c9253f2b9c1fa7d1..ac2e16d33b270474496d0c658c62ca3c7dc817de 100755
--- a/params/dev_tests/LSP_4.py
+++ b/params/dev_tests/LSP_4.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import matplotlib as mpl
 from mpl_toolkits.mplot3d import Axes3D
 from matplotlib import cm
@@ -101,8 +102,8 @@ def main():
 
     plt.figure()
 
-    plt.semilogy(range(1,n+1),s_1**2,'ro')
-    plt.semilogy(range(1,n**2+1),s_2,'ko')
+    plt.semilogy(list(range(1,n+1)),s_1**2,'ro')
+    plt.semilogy(list(range(1,n**2+1)),s_2,'ko')
     for i in range(0,n):
         plt.semilogy([1,n**2+1],[s_1[i]**2,s_1[i]**2],'b')
 
diff --git a/params/dev_tests/LegPol.py b/params/dev_tests/LegPol.py
index 5ac045420edbf45c29c4f3d0721e749c2e5b9b6e..0e0923e4998d7a60b61e40496a81b3af0b20bd4c 100755
--- a/params/dev_tests/LegPol.py
+++ b/params/dev_tests/LegPol.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import range
 import matplotlib as mpl
 from mpl_toolkits.mplot3d import Axes3D
 from matplotlib import cm
diff --git a/params/dev_tests/LegPol2.py b/params/dev_tests/LegPol2.py
index 9ec600cd84797daff5ee260f6588af7511f6e40f..81d1ee76f46d3bc85d0a93d30a29d2175e16f237 100755
--- a/params/dev_tests/LegPol2.py
+++ b/params/dev_tests/LegPol2.py
@@ -15,7 +15,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
+from builtins import str
+from builtins import range
 import matplotlib as mpl
 from mpl_toolkits.mplot3d import Axes3D
 from matplotlib import cm
diff --git a/params/dev_tests/numpy_matplotlib02.py b/params/dev_tests/numpy_matplotlib02.py
index 006e84d42a2ef4af82816da4a6c4b74e76862166..65cc19da6d02ead5749b449a4109b7cc32b8172b 100755
--- a/params/dev_tests/numpy_matplotlib02.py
+++ b/params/dev_tests/numpy_matplotlib02.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import time
 import numpy as np
 import matplotlib.pyplot as plt
diff --git a/params/src/LSP_3.py b/params/src/LSP_3.py
index 115448d63b2519185f1456e2c9253f2b9c1fa7d1..ac2e16d33b270474496d0c658c62ca3c7dc817de 100755
--- a/params/src/LSP_3.py
+++ b/params/src/LSP_3.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import matplotlib as mpl
 from mpl_toolkits.mplot3d import Axes3D
 from matplotlib import cm
@@ -101,8 +102,8 @@ def main():
 
     plt.figure()
 
-    plt.semilogy(range(1,n+1),s_1**2,'ro')
-    plt.semilogy(range(1,n**2+1),s_2,'ko')
+    plt.semilogy(list(range(1,n+1)),s_1**2,'ro')
+    plt.semilogy(list(range(1,n**2+1)),s_2,'ko')
     for i in range(0,n):
         plt.semilogy([1,n**2+1],[s_1[i]**2,s_1[i]**2],'b')
 
diff --git a/params/src/func.py b/params/src/func.py
index 9f59bc51442f06ad3bdbd964f3ae285e519c20a5..44e5a8ea99ee7ef217220698224c7bf6c35b8a63 100755
--- a/params/src/func.py
+++ b/params/src/func.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 from numpy.polynomial import Polynomial, Legendre
 
diff --git a/params/src/gauss.py b/params/src/gauss.py
index b741d7e4b02bffc7b75a58bba80597b5754ff9aa..f841974a0660cd548e5f6134597b803d35f97780 100644
--- a/params/src/gauss.py
+++ b/params/src/gauss.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 
 def grid(M):
diff --git a/params/src/legendre.py b/params/src/legendre.py
index 850960fec21a0e16b2d55e045974a076329c4709..f631216a2aca64307994c3fd9fffdce594ff8e19 100755
--- a/params/src/legendre.py
+++ b/params/src/legendre.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 import params.src.indices as indices
 from numpy.polynomial import Polynomial, Legendre
diff --git a/params/src/legendre_norm.py b/params/src/legendre_norm.py
index 3a8871cac30f1ff826cefd6406851cf1273c9d8e..59490b6c2a6ecd088dc9dffa762a1f39a7194b52 100755
--- a/params/src/legendre_norm.py
+++ b/params/src/legendre_norm.py
@@ -16,6 +16,9 @@
 # limitations under the License.
 
 
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import numpy as np
 import params.src.indices as indices
 from numpy.polynomial import Polynomial, Legendre
@@ -39,7 +42,7 @@ def phi(xi,N,n_max,d):
     n_i = 0
     while np.all(i != -i_one):
         for j in range(0,d):
-            phi[n_i] = phi[n_i]*L[j,i[j]] / np.sqrt(2./(2*i[j]+1))
+            phi[n_i] = phi[n_i]*L[j,i[j]] / np.sqrt(old_div(2.,(2*i[j]+1)))
         n_i = n_i + 1
         p,i = indices.my_next(p,i,N,d)
     return phi
diff --git a/params/src/monomials.py b/params/src/monomials.py
index 47f064f37cd67b538f245b5fdc92323dd8e6afbc..36e683b96856f59e622aac8f22926c49dbb1ec32 100755
--- a/params/src/monomials.py
+++ b/params/src/monomials.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 import params.src.indices as indices
 
diff --git a/params/src/monomials_1norm.py b/params/src/monomials_1norm.py
index 330845f3121223f79c4834f319619314476cfcad..408f118871aa58d86f7c55c55dbe69863a4906b7 100755
--- a/params/src/monomials_1norm.py
+++ b/params/src/monomials_1norm.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 import numpy as np
 import params.src.indices as indices
 
diff --git a/params/src/plot.py b/params/src/plot.py
index 24939add1adcaf082a90706830ee2d3960fd1aec..a8096978613895e1be51ca404424124243a6a736 100755
--- a/params/src/plot.py
+++ b/params/src/plot.py
@@ -16,6 +16,10 @@
 # limitations under the License.
 
 
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import numpy as np
 from matplotlib import cm
 import matplotlib.pyplot as plt
@@ -91,7 +95,7 @@ def surf(X, Y, surrogate, sol, fixed_value, fig, ax, current_title, keep, save,
 def surf4d(X, Y, Z, surrogate, c_min, c_max, fig, ax, current_title, keep, save, new_title, name,d):
     if d == 3:
         surrogate = surrogate-c_min
-        surrogate = surrogate/(c_max-c_min)
+        surrogate = old_div(surrogate,(c_max-c_min))
         surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=cm.jet(surrogate), alpha=0.5,
                            linewidth=0, antialiased=False)
         current_title.set_text(new_title)
@@ -211,7 +215,7 @@ def finish():
 
 def SVD(n_max,s):
     fig = plt.figure()
-    plt.semilogy(range(1,n_max+1),s,'ko')
+    plt.semilogy(list(range(1,n_max+1)),s,'ko')
     ax = fig.gca()
     ax.set_xlabel('$i [-]$')
     ax.set_ylabel('$\sigma_i [-]$')
diff --git a/params/src/voronoi.py b/params/src/voronoi.py
index 7901e6228bce82d7a9220cf172ca788998f85ca8..015fba8ad8e6c3d58090e6113f3649f5416a9a8e 100644
--- a/params/src/voronoi.py
+++ b/params/src/voronoi.py
@@ -16,6 +16,7 @@
 # limitations under the License.
 
 
+from builtins import range
 from PIL import Image
 import random
 import math
diff --git a/params/src/write.py b/params/src/write.py
index 90895475fee2b6560d5f4f9c4d97cbb1613891df..0575837758789e516c46a0a290a49dbf3fb3de72 100755
--- a/params/src/write.py
+++ b/params/src/write.py
@@ -16,6 +16,8 @@
 # limitations under the License.
 
 
+from builtins import str
+from builtins import range
 import numpy as np
 import time
 
@@ -55,7 +57,7 @@ def col(f, col, n_max):
 
 def w_list(f, list1, name):
     f.write(name+':\n')
-    for k,v in list1.items():
+    for k,v in list(list1.items()):
         line = '{}: {}'.format(k,v) 
         data = line.split()
         for word in data:
diff --git a/params/test/leg_lim.py b/params/test/leg_lim.py
index 77d8528f92a44658dabae0e02650beb7d9f9f4ef..2a1856237fe8c9807e00602db4521d25403fc6b7 100755
--- a/params/test/leg_lim.py
+++ b/params/test/leg_lim.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from builtins import str
+from builtins import range
 import numpy as np
 import os
 import shutil
diff --git a/run.py b/run.py
index 323fcefd04faa41d612b1ae9af3cb13d942b5f59..9cea13ef4e20002eb37f8bb59361169bc5aa8e95 100755
--- a/run.py
+++ b/run.py
@@ -24,6 +24,8 @@
 
 
 from __future__ import print_function
+from past.builtins import execfile
+from builtins import object
 class DupStream(object):
     def __init__(self, stream1, stream2):
         self.stream1 = stream1
diff --git a/sph/broken/cpp/waterdrop.py b/sph/broken/cpp/waterdrop.py
index bc1dbfa0c2512d90abeff4e63281f5452b970554..d329660cd71a3ed1da473360288cfe1bcc1dfa70 100644
--- a/sph/broken/cpp/waterdrop.py
+++ b/sph/broken/cpp/waterdrop.py
@@ -2,6 +2,8 @@
 # -*- coding: utf-8 -*-
 
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 from sph.helpers import *
 
 if __name__=="__main__":
@@ -29,11 +31,11 @@ if __name__=="__main__":
     model.saveInt  = 0.01       # save interval
     
     # mobile particles
-    cube = Cube( o=((boxL-Lwater)/2,(boxL-Lwater)/2, (boxL)/2+0.5), L=(Lwater,Lwater,Lwater), rho=model.rho_0, s=sep)
+    cube = Cube( o=(old_div((boxL-Lwater),2),old_div((boxL-Lwater),2), old_div((boxL),2)+0.5), L=(Lwater,Lwater,Lwater), rho=model.rho_0, s=sep)
     model.addMobile(cube.generate())
     
     # fixed particles
-    plane = Cube( o=((boxL-Lfloor)/2,(boxL-Lfloor)/2, boxL/2), L=(Lfloor,Lfloor,sep), rho=model.rho_0, s=sep)
+    plane = Cube( o=(old_div((boxL-Lfloor),2),old_div((boxL-Lfloor),2), old_div(boxL,2)), L=(Lfloor,Lfloor,sep), rho=model.rho_0, s=sep)
     model.addFixed(plane.generate())
     plane = Cube( o=(0,0,0), L=(boxL,boxL,sep), rho=model.rho_0, s=sep)
     model.addFixed(plane.generate())
diff --git a/sph/genp.py b/sph/genp.py
index 600a36ebae6a9875586b1f874e27de017ffed8d0..e0391b1996233c9921d1fc963b5b4f62c3c3153a 100644
--- a/sph/genp.py
+++ b/sph/genp.py
@@ -16,6 +16,10 @@
 # limitations under the License.
 
 
+from __future__ import division
+from builtins import range
+from builtins import object
+from past.utils import old_div
 import math
 
 class Cube(object):
@@ -32,12 +36,12 @@ class Cube(object):
         
     def generate(self):
         parts = []
-        ni = int(math.ceil(self.Lx/self.s))+1
-        dx = self.Lx/ni
-        nj = int(math.ceil(self.Ly/self.s))+1
-        dy = self.Ly/nj
-        nk = int(math.ceil(self.Lz/self.s))+1
-        dz = self.Lz/nk
+        ni = int(math.ceil(old_div(self.Lx,self.s)))+1
+        dx = old_div(self.Lx,ni)
+        nj = int(math.ceil(old_div(self.Ly,self.s)))+1
+        dy = old_div(self.Ly,nj)
+        nk = int(math.ceil(old_div(self.Lz,self.s)))+1
+        dz = old_div(self.Lz,nk)
         vol = (dx*dy*dz)
         
         for i in range(ni):
diff --git a/sph/louis/build.py b/sph/louis/build.py
index 973113b61823a8cd5f6672d49cd2ba72401b1bca..317e3b93f6767fe181b984d15c64f45027c1da06 100755
--- a/sph/louis/build.py
+++ b/sph/louis/build.py
@@ -17,6 +17,7 @@
 
 
 from __future__ import print_function
+from builtins import input
 import os, sys, subprocess, platform
 
 try:
@@ -34,4 +35,4 @@ try:
     os.chdir('../louis')
 except Exception as e:
     print(e)
-    print("<press ENTER to quit>"); raw_input()
+    print("<press ENTER to quit>"); input()
diff --git a/sph/louis/run.py b/sph/louis/run.py
index 1f5e879679b66d895f191c81f17d5e01b04eaf7e..7d5063ff0a6adc829ab596e84544f84f296d1b9f 100755
--- a/sph/louis/run.py
+++ b/sph/louis/run.py
@@ -22,6 +22,8 @@
 
 
 from __future__ import print_function
+from past.builtins import execfile
+from builtins import object
 class DupStream(object):
     def __init__(self, stream1, stream2):
         self.stream1 = stream1
diff --git a/sph/louis/sph/gui.py b/sph/louis/sph/gui.py
index 71479d6374fefbd124bf6915f135f3ef70318cc0..d9c3a796ebc6da6cb553dd29a4efdb2b7623c75e 100644
--- a/sph/louis/sph/gui.py
+++ b/sph/louis/sph/gui.py
@@ -19,6 +19,9 @@
 # converts .res files to Paraview (VTK)
 
 from __future__ import print_function
+from builtins import map
+from builtins import range
+from builtins import object
 import vtk
 version=vtk.vtkVersion().GetVTKMajorVersion()
 import glob
@@ -99,7 +102,7 @@ class ToParaview(object):
         for line in file:
             #x,y,z, vx,vy,vz, m, p = map(float, line.strip().split())
             try:
-                x,y,z, vx,vy,vz, rho, p, m, c, h, mu, nv = map(float, line.strip().split()) 
+                x,y,z, vx,vy,vz, rho, p, m, c, h, mu, nv = list(map(float, line.strip().split())) 
             except:
                 print("**ERROR while reading file %s!\n\tline=\"%s\"" % (fname,line))
                 break
diff --git a/sph/louis/sph/helpers.py b/sph/louis/sph/helpers.py
index e1c87a547b8fc9b1f69cf6a3fa6523d1812e8ccc..e1a0fafc0e7865cdf1680099f316c2b2997948d4 100644
--- a/sph/louis/sph/helpers.py
+++ b/sph/louis/sph/helpers.py
@@ -19,6 +19,11 @@
 # Python helper classes for Louis' code
 
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
+from builtins import object
 import math, subprocess, os, platform, sys, glob
 import sph.wutils as wu
 
@@ -36,7 +41,7 @@ class Kernel(object):
     def val(self):
         return Kernel.names[self.name]
 
-class EqState:
+class EqState(object):
     names = { 'gas':1, 'liquid':2 }
     def __init__(self, name='liquid'):
         if name in EqState.names:
@@ -225,12 +230,12 @@ class Cube(object):
         
     def generate(self):
         parts = []
-        ni = int(math.ceil(self.Lx/self.s))+1
-        dx = self.Lx/(ni-1)
-        nj = int(math.ceil(self.Ly/self.s))+1
-        dy = self.Ly/(nj-1)
-        nk = int(math.ceil(self.Lz/self.s))+1
-        dz = self.Lz/(nk-1)
+        ni = int(math.ceil(old_div(self.Lx,self.s)))+1
+        dx = old_div(self.Lx,(ni-1))
+        nj = int(math.ceil(old_div(self.Ly,self.s)))+1
+        dy = old_div(self.Ly,(nj-1))
+        nk = int(math.ceil(old_div(self.Lz,self.s)))+1
+        dz = old_div(self.Lz,(nk-1))
         vx = vy = vz = 0.0
         m0 = (dx*dy*dz)*self.rho
         rho0 = self.rho
diff --git a/sph/louis/tests/waterdrop.py b/sph/louis/tests/waterdrop.py
index ce7db063acd9aa4b43657cea656e0868b2d62f9b..1a18eba9c04ed2f00e48122801d4cc7cca82fba2 100644
--- a/sph/louis/tests/waterdrop.py
+++ b/sph/louis/tests/waterdrop.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 from sph.helpers import *
 
 if __name__=="__main__":
@@ -44,11 +46,11 @@ if __name__=="__main__":
     model.saveInt  = 0.01       # save interval
     
     # mobile particles
-    cube = Cube( o=((boxL-Lwater)/2,(boxL-Lwater)/2, (boxL)/2+0.5), L=(Lwater,Lwater,Lwater), rho=model.rho_0, s=sep)
+    cube = Cube( o=(old_div((boxL-Lwater),2),old_div((boxL-Lwater),2), old_div((boxL),2)+0.5), L=(Lwater,Lwater,Lwater), rho=model.rho_0, s=sep)
     model.addMobile(cube.generate())
     
     # fixed particles
-    plane = Cube( o=((boxL-Lfloor)/2,(boxL-Lfloor)/2, boxL/2), L=(Lfloor,Lfloor,sep), rho=model.rho_0, s=sep)
+    plane = Cube( o=(old_div((boxL-Lfloor),2),old_div((boxL-Lfloor),2), old_div(boxL,2)), L=(Lfloor,Lfloor,sep), rho=model.rho_0, s=sep)
     model.addFixed(plane.generate())
     plane = Cube( o=(0,0,0), L=(boxL,boxL,sep), rho=model.rho_0, s=sep)
     model.addFixed(plane.generate())
diff --git a/sph/louis/tests/waterdrop2.py b/sph/louis/tests/waterdrop2.py
index 6a36778593c01f2628886d94a3c2fc05bf5487db..a070899b2b6dab538fb2865540e5ed2f40a26e9a 100644
--- a/sph/louis/tests/waterdrop2.py
+++ b/sph/louis/tests/waterdrop2.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 from sph.helpers import *
 
 if __name__=="__main__":
@@ -44,12 +46,12 @@ if __name__=="__main__":
     model.saveInt  = 0.01       # save interval
     
     # mobile particles
-    cube = Cube( o=((boxL-Lwater)/2,(boxL-Lwater)/2, (boxL)/2+0.5), L=(Lwater,Lwater,Lwater), rho=model.rho_0, s=sep)
+    cube = Cube( o=(old_div((boxL-Lwater),2),old_div((boxL-Lwater),2), old_div((boxL),2)+0.5), L=(Lwater,Lwater,Lwater), rho=model.rho_0, s=sep)
     model.addMobile(cube.generate())
     
     # fixed particles
     #obstacle
-    plane = Cube( o=((boxL-Lfloor)/2,(boxL-Lfloor)/2, boxL/2), L=(Lfloor,Lfloor,sep), rho=model.rho_0, s=sep)
+    plane = Cube( o=(old_div((boxL-Lfloor),2),old_div((boxL-Lfloor),2), old_div(boxL,2)), L=(Lfloor,Lfloor,sep), rho=model.rho_0, s=sep)
     model.addFixed(plane.generate())
     #floor
     plane = Cube( o=(0,0,0), L=(boxL,boxL,sep), rho=model.rho_0, s=sep)
diff --git a/sph/louis/tests/waterdrop3.py b/sph/louis/tests/waterdrop3.py
index 34666cd315dd6f6972014b2226de67b2a6d89037..22d5f273e7601ab58877f4aa9e9ef267dc9f0ac5 100644
--- a/sph/louis/tests/waterdrop3.py
+++ b/sph/louis/tests/waterdrop3.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 from sph.helpers import *
 
 if __name__=="__main__":
@@ -24,7 +26,7 @@ if __name__=="__main__":
     boxL   = 2.
     Lfloor = 0.7
     Lwater = 0.5
-    sep = 0.05/2
+    sep = old_div(0.05,2)
 
     kernel = Kernel('cubic', False)   # 'cubic', 'quadratic' or 'quintic'
     law = EqState('liquid')           # 'gas' or 'liquid'
@@ -34,22 +36,22 @@ if __name__=="__main__":
     model.kernel = kernel     
     model.law    = law     
     
-    model.h_0      = 0.06/2       # initial smoothing length [m]
+    model.h_0      = old_div(0.06,2)       # initial smoothing length [m]
     model.c_0      = 35.0       # initial speed of sound  [m/s]
     model.rho_0    = 1000.0     # initial density [kg/m^3]
     model.dom_dim  = boxL       # domain size (cube)
     model.alpha    = 0.5        # artificial viscosity factor 1
     model.beta     = 0.0        # artificial viscosity factor 2
     model.maxTime  = 3.0        # simulation time
-    model.saveInt  = 0.01/2       # save interval
+    model.saveInt  = old_div(0.01,2)       # save interval
     
     # mobile particles
-    cube = Cube( o=((boxL-Lwater)/2,(boxL-Lwater)/2, (boxL)/2+0.5), L=(Lwater,Lwater,Lwater), rho=model.rho_0, s=sep)
+    cube = Cube( o=(old_div((boxL-Lwater),2),old_div((boxL-Lwater),2), old_div((boxL),2)+0.5), L=(Lwater,Lwater,Lwater), rho=model.rho_0, s=sep)
     model.addMobile(cube.generate())
     
     # fixed particles
     #obstacle
-    plane = Cube( o=((boxL-Lfloor)/2,(boxL-Lfloor)/2, boxL/2), L=(Lfloor,Lfloor,sep), rho=model.rho_0, s=sep)
+    plane = Cube( o=(old_div((boxL-Lfloor),2),old_div((boxL-Lfloor),2), old_div(boxL,2)), L=(Lfloor,Lfloor,sep), rho=model.rho_0, s=sep)
     model.addFixed(plane.generate())
     #floor
     plane = Cube( o=(0,0,0), L=(boxL,boxL,sep), rho=model.rho_0, s=sep)
diff --git a/sph/louis/tests/waterdrop4.py b/sph/louis/tests/waterdrop4.py
index 09ff51b3363b259be3e6c1e4a0912a18cff49e50..5e213b663c2dbe6f339a3f2b2a50f601753a02b9 100644
--- a/sph/louis/tests/waterdrop4.py
+++ b/sph/louis/tests/waterdrop4.py
@@ -17,6 +17,8 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 from sph.helpers import *
 
 if __name__=="__main__":
@@ -24,7 +26,7 @@ if __name__=="__main__":
     boxL   = 2.
     Lfloor = 0.7
     Lwater = 0.5
-    sep = 0.05/4
+    sep = old_div(0.05,4)
 
     kernel = Kernel('cubic', False)   # 'cubic', 'quadratic' or 'quintic'
     law = EqState('liquid')           # 'gas' or 'liquid'
@@ -34,22 +36,22 @@ if __name__=="__main__":
     model.kernel = kernel     
     model.law    = law     
     
-    model.h_0      = 0.06/4       # initial smoothing length [m]
+    model.h_0      = old_div(0.06,4)       # initial smoothing length [m]
     model.c_0      = 35.0       # initial speed of sound  [m/s]
     model.rho_0    = 1000.0     # initial density [kg/m^3]
     model.dom_dim  = boxL       # domain size (cube)
     model.alpha    = 0.5        # artificial viscosity factor 1
     model.beta     = 0.0        # artificial viscosity factor 2
     model.maxTime  = 3.0        # simulation time
-    model.saveInt  = 0.01/2       # save interval
+    model.saveInt  = old_div(0.01,2)       # save interval
     
     # mobile particles
-    cube = Cube( o=((boxL-Lwater)/2,(boxL-Lwater)/2, (boxL)/2+0.5), L=(Lwater,Lwater,Lwater), rho=model.rho_0, s=sep)
+    cube = Cube( o=(old_div((boxL-Lwater),2),old_div((boxL-Lwater),2), old_div((boxL),2)+0.5), L=(Lwater,Lwater,Lwater), rho=model.rho_0, s=sep)
     model.addMobile(cube.generate())
     
     # fixed particles
     #obstacle
-    plane = Cube( o=((boxL-Lfloor)/2,(boxL-Lfloor)/2, boxL/2), L=(Lfloor,Lfloor,sep), rho=model.rho_0, s=sep)
+    plane = Cube( o=(old_div((boxL-Lfloor),2),old_div((boxL-Lfloor),2), old_div(boxL,2)), L=(Lfloor,Lfloor,sep), rho=model.rho_0, s=sep)
     model.addFixed(plane.generate())
     #floor
     plane = Cube( o=(0,0,0), L=(boxL,boxL,sep), rho=model.rho_0, s=sep)
diff --git a/sph/tests/neighbours.py b/sph/tests/neighbours.py
index a0e4b26f712c0ca08b25d460bd71f4a7c206a436..96712168408fe303d0cb3d1381386518803df875 100644
--- a/sph/tests/neighbours.py
+++ b/sph/tests/neighbours.py
@@ -17,6 +17,9 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import sph
 from sph import Vector3d
 from fwk import Timer
@@ -61,7 +64,7 @@ pbl = sph.Problem(h0)
 import sph.genp as genp
 no=0
 
-cube = genp.Cube( o=((boxL-Lwater)/2,(boxL-Lwater)/2, (boxL)/2+0.5), L=(Lwater,Lwater,Lwater), s=sep)
+cube = genp.Cube( o=(old_div((boxL-Lwater),2),old_div((boxL-Lwater),2), old_div((boxL),2)+0.5), L=(Lwater,Lwater,Lwater), s=sep)
 for p in cube.generate():
     no+=1
     pbl.addMobileP(no, sph.Dofs(Vector3d(p[0], p[1], p[2]), Vector3d(0.0, 0.0, 0.0), rho))
diff --git a/sph/tests/sandbox.py b/sph/tests/sandbox.py
index de4ee544fc7a944c2db457c7dd131f6ae4426cc0..a2e7e30e795258acf04775e67f9069ebeee1b980 100644
--- a/sph/tests/sandbox.py
+++ b/sph/tests/sandbox.py
@@ -17,6 +17,9 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from past.utils import old_div
 import sph
 from sph import Vector3d
 from fwk import Timer
@@ -48,7 +51,7 @@ import sph.genp as genp
 
 no=0
 # mobile particles
-cube = genp.Cube( o=((boxL-Lwater)/2,(boxL-Lwater)/2, (boxL)/2+0.5), L=(Lwater,Lwater,Lwater), s=sep)
+cube = genp.Cube( o=(old_div((boxL-Lwater),2),old_div((boxL-Lwater),2), old_div((boxL),2)+0.5), L=(Lwater,Lwater,Lwater), s=sep)
 for p in cube.generate():
     no+=1
     pbl.addMobileP(no, sph.Dofs(Vector3d(p[0], p[1], p[2]), Vector3d(0.0, 0.0, 0.0), rho))
@@ -56,7 +59,7 @@ for p in cube.generate():
 
 # fixed particles
 
-plane = genp.Cube( o=((boxL-Lfloor)/2,(boxL-Lfloor)/2, boxL/2), L=(Lfloor,Lfloor,sep), s=sep)
+plane = genp.Cube( o=(old_div((boxL-Lfloor),2),old_div((boxL-Lfloor),2), old_div(boxL,2)), L=(Lfloor,Lfloor,sep), s=sep)
 for p in plane.generate():
     no+=1
     pbl.addMobileP(no, sph.Dofs(Vector3d(p[0], p[1], p[2]), Vector3d(0.0, 0.0, 0.0), rho))
diff --git a/tbox/gmsh.py b/tbox/gmsh.py
index 3eeae17bbe04c0410df2d793f020d75acce1aded..f3abfad7783ec0f54798c0f5993d894b5c1fa60f 100644
--- a/tbox/gmsh.py
+++ b/tbox/gmsh.py
@@ -17,10 +17,12 @@
 
 
 from __future__ import print_function
+from builtins import str
+from builtins import object
 import os, os.path, sys
 import fwk.wutils as wu
 
-class MeshLoader:
+class MeshLoader(object):
     """
     Chargement d'un fichier 'geo' (execute gmsh si nécessaire)
     gmsh doit être dans le PATH
@@ -48,7 +50,7 @@ class MeshLoader:
 
     def __buildParList(self, pars):
         parcmd=""
-        for k,v in pars.iteritems():
+        for k,v in pars.items():
             if k[0] == '-':
                 parcmd += "%s %s " % (k,v) # option
             else:
diff --git a/tbox/tests/gmshio_test.py b/tbox/tests/gmshio_test.py
index f6a1d3984924f53d825c4eec784e8f0e728334a3..f40c73eadd4e51195085543305511dd6cc0029c8 100755
--- a/tbox/tests/gmshio_test.py
+++ b/tbox/tests/gmshio_test.py
@@ -30,13 +30,13 @@ def main():
 
 def printtags(mshdata):
     print("\n-ptags:")
-    for t in mshdata.ptags.items():
+    for t in list(mshdata.ptags.items()):
         print(t[1])
     print("\n-etags:")
-    for t in mshdata.etags.items():
+    for t in list(mshdata.etags.items()):
         print(t[1])
     print("\n-partitions:")
-    for t in mshdata.parts.items():
+    for t in list(mshdata.parts.items()):
         print(t[1])
 
 if __name__ == "__main__":
diff --git a/tbox/utils.py b/tbox/utils.py
index c3e5a80b32711805ad25705d78870ac658d774e4..a15d3073fca817b119b7b2bdd9edc73e5c18ff77 100644
--- a/tbox/utils.py
+++ b/tbox/utils.py
@@ -21,6 +21,7 @@ Utilities for tbox
 Adrien Crovato
 """
 from __future__ import print_function
+from builtins import range
 
 def myrange(start, stop, step):
     """Extended range with custom step
diff --git a/tbox/viewer.py b/tbox/viewer.py
index 14d7dc20791fa19ba38ae45873f2bdbd781435f5..16badf0c4b9d873c53b0e1b96bcfba8337feb053 100644
--- a/tbox/viewer.py
+++ b/tbox/viewer.py
@@ -16,9 +16,10 @@
 # limitations under the License.
 
 
+from builtins import object
 import os, os.path
 
-class GUI:
+class GUI(object):
     """Default GUI for gmsh
     Romain Boman
     """
diff --git a/tboxVtk/cutter.py b/tboxVtk/cutter.py
index f527539bdf078099dfc113b4d2e553a2681592b8..a2ac356a0a7cffda8ea1ef066f7240a1bfb3bc15 100644
--- a/tboxVtk/cutter.py
+++ b/tboxVtk/cutter.py
@@ -19,12 +19,16 @@
 # @brief VTK cut plane post-processing
 # @authors Adrien Crovato, Kim Liegeois
 
+from __future__ import division
+from builtins import range
+from builtins import object
+from past.utils import old_div
 try:
     import vtk
 except:
     raise Exception('VTK not found. Aborting!\n')
 
-class Cutter:
+class Cutter(object):
     def __init__(self, _grid):
         self.grid = _grid
 
@@ -71,7 +75,7 @@ class Cutter:
             nV = 2
         else:
             raise Exception('tagDim can only be 2 or 3 but ' + tagDim + ' was given!\n')
-        elems = np.zeros((_elems.GetNumberOfTuples()/(nV+1), nV), dtype=int)
+        elems = np.zeros((old_div(_elems.GetNumberOfTuples(),(nV+1)), nV), dtype=int)
         for i in range(0, elems.shape[0]):
                 for j in range(0, nV):
                     elems[i][j] = _elems.GetTuple((nV+1)*i+j+1)[0]
diff --git a/tboxVtk/lineExtractor.py b/tboxVtk/lineExtractor.py
index e4f991bbe08bedf095f43d939dd12be6aa120d4e..20ab2ee91c47caee2db76f0efd4982e574cc238c 100644
--- a/tboxVtk/lineExtractor.py
+++ b/tboxVtk/lineExtractor.py
@@ -19,12 +19,16 @@
 # @brief VTK cut plane post-processing
 # @authors Adrien Crovato, Kim Liegeois
 
+from __future__ import division
+from builtins import range
+from builtins import object
+from past.utils import old_div
 try:
     import vtk
 except:
     raise Exception('VTK not found. Aborting!\n')
 
-class LineExtractor:
+class LineExtractor(object):
     def __init__(self, _grid):
         self.grid = _grid
 
@@ -93,7 +97,7 @@ class LineExtractor:
             tmp = np.zeros((3,))
             for j in range(0, 3):
                 tmp[j] = _pts.GetPoint(i)[j]
-            pts[i] = np.inner(self.p2-self.p1,tmp-self.p1)/norm_p1p2
+            pts[i] = old_div(np.inner(self.p2-self.p1,tmp-self.p1),norm_p1p2)
         indices_tmp = np.argsort(pts)
         pts = pts
         pts_res = pts[indices_tmp]
@@ -102,7 +106,7 @@ class LineExtractor:
         # transfer connectivity
         _elems = cutData.GetLines().GetData()
         nV = 2
-        max_nb_elems = _elems.GetNumberOfTuples()/(nV+1)
+        max_nb_elems = old_div(_elems.GetNumberOfTuples(),(nV+1))
         current_nb_elems = 0
         indices_elems = np.zeros((max_nb_elems,), dtype=int)
         for i in range(0, max_nb_elems):
diff --git a/tboxVtk/qt5vtk6/QVTKRenderWindowInteractor.py b/tboxVtk/qt5vtk6/QVTKRenderWindowInteractor.py
index 9e830585f851f53b43e9593b59e724a61e8f85fa..8e70d460664681f034df196932c63fa4d67bf525 100644
--- a/tboxVtk/qt5vtk6/QVTKRenderWindowInteractor.py
+++ b/tboxVtk/qt5vtk6/QVTKRenderWindowInteractor.py
@@ -54,6 +54,8 @@ Changes by Fabian Wenzel, Jan. 2016
  Support for Python3
 """
 from __future__ import print_function
+from builtins import str
+from builtins import chr
 
 import vtk   # added by RoBo
 PyQtImpl = None # added by RoBo
diff --git a/tboxVtk/reader.py b/tboxVtk/reader.py
index 959d51cb14b6fb4f1f4f4052505ce9eb138750a3..6e547a47ad4cd4c1f1862a3e7321df8d946ebcc8 100644
--- a/tboxVtk/reader.py
+++ b/tboxVtk/reader.py
@@ -20,12 +20,13 @@
 # @authors Adrien Crovato
 
 from __future__ import print_function
+from builtins import object
 try:
     import vtk
 except:
     raise Exception('VTK not found. Aborting!\n')
 
-class Reader:
+class Reader(object):
     def __init__(self):
         self.reader = vtk.vtkXMLUnstructuredGridReader()
 
diff --git a/tboxVtk/tests/vtkio.py b/tboxVtk/tests/vtkio.py
index f3dae14b79d28a6b23fd0c64a21eb7fa6f7937f9..d37acaa1673b7cdd2e39bea34895c64eae17dd8c 100755
--- a/tboxVtk/tests/vtkio.py
+++ b/tboxVtk/tests/vtkio.py
@@ -31,13 +31,13 @@ def main():
 
 def printtags(mshdata):
     print("\n-ptags:")
-    for t in mshdata.ptags.items():
+    for t in list(mshdata.ptags.items()):
         print(t[1])
     print("\n-etags:")
-    for t in mshdata.etags.items():
+    for t in list(mshdata.etags.items()):
         print(t[1])
     print("\n-partitions:")
-    for t in mshdata.parts.items():
+    for t in list(mshdata.parts.items()):
         print(t[1])
 
 if __name__ == "__main__":
diff --git a/waves/broken/cas1.py b/waves/broken/cas1.py
index cc070328af39bc0c74afde84f2e88222de3adc17..43c223c2c3b2bc2033395a71d9dde523965aa02c 100755
--- a/waves/broken/cas1.py
+++ b/waves/broken/cas1.py
@@ -4,6 +4,8 @@
 # TODO: il manque une source...
 
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 import waves as w
 import tbox.gmsh as gmsh
 import waves.wtools as wt
@@ -16,7 +18,7 @@ def main():
 
     L=250.0
     nl=60
-    Le=L/nl
+    Le=old_div(L,nl)
     c=1500.0
     dt=Le/c/2;
 
@@ -27,7 +29,7 @@ def main():
     scheme.nthreads=8
 
     print("dt=", dt)
-    print("nsteps=", int(scheme.ttot/dt))
+    print("nsteps=", int(old_div(scheme.ttot,dt)))
 
     w.Medium(pbl, "Volume", c)
 
diff --git a/waves/broken/geuz/geophysique.py b/waves/broken/geuz/geophysique.py
index 93db74273c5020155cc9a58b21a7ebeafdbf2a0e..4e7449da206784cc403189d104af87ec86bd62f8 100755
--- a/waves/broken/geuz/geophysique.py
+++ b/waves/broken/geuz/geophysique.py
@@ -4,6 +4,8 @@
 # TODO: marche pas/plus
 
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 import waves as w
 import tbox.gmsh as gmsh
 
@@ -17,10 +19,10 @@ def main():
     c    = 1500.0
     X    = 250.0;    Y=250.0;    Z=250.0
     freq = 10.0
-    lam  = c / freq
-    lc   = lam / 10
-    N    = Z / lc
-    Le   = X/N
+    lam  = old_div(c, freq)
+    lc   = old_div(lam, 10)
+    N    = old_div(Z, lc)
+    Le   = old_div(X,N)
     dt   = Le/c/10
 
     scheme = w.ForwardEuler(pbl)
diff --git a/waves/broken/waves01_onelab.py b/waves/broken/waves01_onelab.py
index 260bef92cd764efbe9d044addb8df98d194ff574..b54573e10e8acb2395cd554c69d546297035e51c 100755
--- a/waves/broken/waves01_onelab.py
+++ b/waves/broken/waves01_onelab.py
@@ -3,6 +3,8 @@
 # Simple 2D wave propagation test
 
 from __future__ import print_function
+from __future__ import division
+from past.utils import old_div
 import sys
 #sys.path.append("/usr/local/bin")
 #sys.path.append("C:\local\gmsh-2.9.0-Windows")
@@ -103,10 +105,10 @@ def main():
     c = wspeed
     X=10.0;    Y=10.0;    Z=2.0
     freq=10.0
-    lam = c / freq
-    lc = lam / 10
+    lam = old_div(c, freq)
+    lc = old_div(lam, 10)
 
-    Le=X/Nx
+    Le=old_div(X,Nx)
     dt=Le/c/10;
 
     scheme = w.ForwardEuler(msh, pbl)
diff --git a/waves/models/plane1mat.py b/waves/models/plane1mat.py
index 8e32072f9f9faca29cadf3419f4d5d3da6e9c32c..d94806a7080896673f611fc366143649c90df2c8 100755
--- a/waves/models/plane1mat.py
+++ b/waves/models/plane1mat.py
@@ -18,6 +18,8 @@
 
 # Simple 2D wave-propagation test in 1 material
 
+from __future__ import division
+from past.utils import old_div
 import waves as w
 import tbox
 import tbox.gmsh as gmsh
@@ -33,8 +35,8 @@ def model(p={}):
     pbl = w.Problem(msh)
 
     # compute time-step size
-    Lex = p['Lx'] / p['Nx']
-    Ley = p['Ly'] / p['Ny']
+    Lex = old_div(p['Lx'], p['Nx'])
+    Ley = old_div(p['Ly'], p['Ny'])
     dt = min(Lex, Ley) / p['c'] / 10 * 2
 
     pbl.add(w.Medium(msh, "Volume", p['c']))
@@ -50,7 +52,7 @@ def model(p={}):
 
     elif p['bc'] == 'interf1':  # interférence de 2 srcs sur la frontière basse
         s = srcs.MultiSource(msh, "FaceY0")
-        s.addSource(tbox.Pt(3, 0, 0), p['freq'] / 2)
+        s.addSource(tbox.Pt(3, 0, 0), old_div(p['freq'], 2))
         s.addSource(tbox.Pt(7, 0, 0), p['freq'])
         pbl.add(s)
         pbl.add(w.Boundary(msh, "FaceX0", p['c']))
@@ -65,9 +67,9 @@ def model(p={}):
 
     elif p['bc'] == 'interf2':  # 2 sources non synchrones au centre du domaine
         s = srcs.MultiSource(msh, "Volume")
-        s.addSource(tbox.Pt(3 * p['Lx'] / 10, p['Ly'] / 2, 0), p['freq'])
+        s.addSource(tbox.Pt(3 * p['Lx'] / 10, old_div(p['Ly'], 2), 0), p['freq'])
         s.addSource(
-            tbox.Pt(7 * p['Lx'] / 10, p['Ly'] / 2, 0), 1.05 * p['freq'])
+            tbox.Pt(7 * p['Lx'] / 10, old_div(p['Ly'], 2), 0), 1.05 * p['freq'])
         #pbl.add(s.__disown__())
         pbl.add(s)
         pbl.add(w.Boundary(msh, "FaceX0", p['c']))
diff --git a/waves/models/plane2mat.py b/waves/models/plane2mat.py
index f63de14303410793d04b9dfa41bf189eccf71ae3..0ee3f9c69acf530036a0ede8184c59d11234e866 100755
--- a/waves/models/plane2mat.py
+++ b/waves/models/plane2mat.py
@@ -18,6 +18,8 @@
 
 # Simple 2D wave-propagation test in 2 materials
 
+from __future__ import division
+from past.utils import old_div
 import waves as w
 import tbox
 import tbox.gmsh as gmsh
@@ -40,11 +42,11 @@ def model(p={}):
     pbl = w.Problem(msh)
 
     # compute time-step size
-    Lex = float(p['Lx']) / p['Nx']
-    Ley1 = float(p['Ly1']) / p['Ny1']
-    Ley2 = float(p['Ly2']) / p['Ny2']
-    dt1 = min(Lex, Ley1) / p['c1']
-    dt2 = min(Lex, Ley2) / p['c2']
+    Lex = old_div(float(p['Lx']), p['Nx'])
+    Ley1 = old_div(float(p['Ly1']), p['Ny1'])
+    Ley2 = old_div(float(p['Ly2']), p['Ny2'])
+    dt1 = old_div(min(Lex, Ley1), p['c1'])
+    dt2 = old_div(min(Lex, Ley2), p['c2'])
     dt = min(dt1, dt2) * 0.8
     #lam = maxc / p['freq']
 
@@ -58,7 +60,7 @@ def model(p={}):
 
     elif p['bc'] == 'interf1':  # interference de 2 sources sur la frontière basse
         s = srcs.MultiSource(msh, "FaceY0")
-        s.addSource(tbox.Pt(3, 0, 0), p['freq'] / 2)
+        s.addSource(tbox.Pt(3, 0, 0), old_div(p['freq'], 2))
         s.addSource(tbox.Pt(7, 0, 0), 2 * p['freq'])
         pbl.add(s)
         pbl.add(w.Boundary(msh, "FaceX0_1", p['c1']))
diff --git a/waves/srcs.py b/waves/srcs.py
index ba3cd8ff57ee78ad5c6cc403d05ca819f5069489..2d5ccfd792967125f436d05660d43d506ad686c2 100644
--- a/waves/srcs.py
+++ b/waves/srcs.py
@@ -18,6 +18,7 @@
 # custom sources coded with python
 
 from __future__ import print_function
+from builtins import object
 import waves as w
 import tbox
 import math
@@ -33,7 +34,7 @@ class SinSource(w.Source):
             u[n.row] = math.sin(2 * math.pi * self.freq * t)
 
 
-class Src:
+class Src(object):
     def __init__(self, nod, freq):
         self.nod = nod
         self.freq = freq
diff --git a/waves/viewer.py b/waves/viewer.py
index 748ee6021570748829c237c0332a46a19c3f0fbe..919647b161202048df2c70298ddc702bedca7281 100644
--- a/waves/viewer.py
+++ b/waves/viewer.py
@@ -18,6 +18,10 @@
 
 
 from __future__ import print_function
+from __future__ import division
+from builtins import range
+from builtins import object
+from past.utils import old_div
 import sys
 import waves as w
 import tbox as tb
@@ -311,7 +315,7 @@ class MeshViewer(QWidget, w.DisplayHook):
         writer.Write()
 
 
-class Mesh:
+class Mesh(object):
     def __init__(self, ugrid):
 
         self.ugrid = ugrid
@@ -349,11 +353,11 @@ class Mesh:
             dist = 1.0
         else:
             dist = vmax - vmin
-        thr = 1. / 256.
+        thr = old_div(1., 256.)
         scalars = self.ugrid.GetPointData().GetScalars()
         for i in range(scalars.GetNumberOfTuples()):
             val = scalars.GetTuple1(i)
-            tc = (val - vmin) / dist
+            tc = old_div((val - vmin), dist)
             if (tc < thr): tc = thr
             if (tc > 1.0 - thr): tc = 1.0 - thr
             self.tcoords.InsertTuple2(i, tc, tc)
@@ -407,7 +411,7 @@ class Mesh:
             renderWindowInteractor.Start()
 
 
-class ScalarBar:
+class ScalarBar(object):
     def __init__(self, lut):
         self.actor = vtk.vtkScalarBarActor()
         self.actor.SetLookupTable(lut)
@@ -425,7 +429,7 @@ class ScalarBar:
         self.actor.SetTitle("pressure")
 
 
-class Grid:
+class Grid(object):
     def __init__(self, ugrid):
         self.mapper = vtk.vtkDataSetMapper()
         self.mapper.ImmediateModeRenderingOff()