Repository: ImpedanCEI/wakis (language: python)

Issue:
Speedup
Merge feature speedup into develop


Discussion / hints:

Fix patch:
diff --git a/benchmarks/betacavity/betacavity.py b/benchmarks/betacavity/betacavity.py
index c31fd83..2984416 100644
--- a/benchmarks/betacavity/betacavity.py
+++ b/benchmarks/betacavity/betacavity.py
@@ -12,9 +12,9 @@
 
 # ---------- Domain setup ---------
 # Number of mesh cells
-Nx = 57
-Ny = 57
-Nz = 109
+Nx = 55
+Ny = 55
+Nz = 108*2
 #dt = 5.707829241e-12 # CST
 
 # Embedded boundaries
@@ -26,20 +26,24 @@
 stl_materials = {'cavity': 'vacuum', 'pipe':  'vacuum'}
 background = [100, 1.0, 100] # lossy metal [ε_r, µ_r, σ]
 
+#Geometry
+stl_scale = {'cavity': 1.0, 'pipe': [1.0, 1.0, 2.0]}
+
 # Domain bounds
-surf = pv.read(stl_cavity) + pv.read(stl_pipe)
+surf = pv.read(stl_cavity) + pv.read(stl_pipe).scale(stl_scale['pipe'])
 xmin, xmax, ymin, ymax, zmin, zmax = surf.bounds
 Lx, Ly, Lz = (xmax-xmin), (ymax-ymin), (zmax-zmin)
 
 # Set grid and geometry
 grid = GridFIT3D(xmin, xmax, ymin, ymax, zmin, zmax, Nx, Ny, Nz, 
                 stl_solids=stl_solids, 
-                stl_materials=stl_materials)
-#grid.inspect()
+                stl_materials=stl_materials,
+                stl_scale=stl_scale)
+grid.inspect()
 
 # ------------ Beam source ----------------
 # Beam parameters
-beta = 1.0          # beam relativistic beta 
+beta = 0.5          # beam relativistic beta 
 sigmaz = beta*6e-2  # [m] -> multiplied by beta to have f_max cte
 q = 1e-9            # [C]
 xs = 0.             # x source position [m]
@@ -49,12 +53,13 @@
 # [DEFAULT] tinj = 8.53*sigmaz/(beta*c)  # injection time offset [s] 
 
 # Simualtion
-wakelength = 5. #[m]
-add_space = 10   # no. cells
+wakelength = 10  #[m]
+add_space = 54   # no. cells
 
 wake = WakeSolver(q=q, sigmaz=sigmaz, beta=beta,
             xsource=xs, ysource=ys, xtest=xt, ytest=yt,
-            add_space=add_space, save=True, logfile=True)
+            add_space=add_space, #Ez_file='results/Ez.h5', 
+            save=True, logfile=True)
 
 # ----------- Solver & Simulation ----------
 # boundary conditions``
@@ -72,10 +77,10 @@
             'plane': [int(Nx/2), slice(0, Ny), slice(add_space, -add_space)]}
 
 # Run wakefield time-domain simulation
-run = False
+run = True
 if run:
     solver.wakesolve(wakelength=wakelength, add_space=add_space,
-                    plot=False, plot_every=30, save_J=True,
+                    plot=True, plot_every=30, save_J=False,
                     use_etd=False,
                     **plotkw)
 
@@ -90,15 +95,21 @@
                     plot=False, plot_every=30, save_J=False,
                     use_etd=True, **plotkw)
     
+
+# Run only wake solve
+runWake = False
+if runWake:
+    wake.solve(Ez_file = 'Ez.h5')
+
 #-------------- Compare with CST -------------
 
 #--- Longitudinal wake and impedance ---
-plot = False
+plot = True
 if plot:
 
     # CST wake
-    cstWP = wake.read_txt('cst/WP.txt')
-    cstZ = wake.read_txt('cst/Z.txt')
+    cstWP = wake.read_txt('cst/CSTwake.txt')
+    cstZ = wake.read_txt('cst/CSTZ.txt')
     wake.f = np.abs(wake.f)
 
     fig, ax = plt.subplots(1,2, figsize=[12,4], dpi=150)
@@ -111,7 +122,7 @@
     ax[1].plot(wake.f*1e-9, np.abs(wake.Z), c='b', lw=1.5, label='FIT+Wakis')
     ax[1].plot(cstZ[0], cstZ[1], c='k', ls='--', lw=1.5, label='CST')
     ax[1].set_xlabel('f [GHz]')
-    ax[1].set_ylabel('Longitudinal impedance [Abs][$\Omega$]', color='b')
+    ax[1].set_ylabel(r'Longitudinal impedance [Abs][$\Omega$]', color='b')
     ax[1].legend()
 
     fig.suptitle('Benchmark with CST Wakefield Solver')
@@ -143,7 +154,7 @@
     ax[1].plot(cstZ[0], cstZ[1], c='k', ls='--', lw=1.2, label='Re(Z) CST')
     ax[1].plot(cstZ[0], cstZ[2], c='k', ls=':', lw=1.2, label='Im(Z) CST')
     ax[1].set_xlabel('f [GHz]')
-    ax[1].set_ylabel('Longitudinal impedance [Abs][$\Omega$]', color='b')
+    ax[1].set_ylabel(r'Longitudinal impedance [Abs][$\Omega$]', color='b')
     ax[1].legend()
 
     fig.suptitle('Benchmark with CST Wakefield Solver')
@@ -169,10 +180,10 @@
         fig, ax = plt.subplots(1,1, figsize=[6,4], dpi=150)
         axx = ax.twinx()  
 
-        ax.plot(z, d[step][1,1,:], c='g', lw=1.5, label='Ez(0,0,z) FIT | $\sigma$ = 5 S/m')
+        ax.plot(z, d[step][1,1,:], c='g', lw=1.5, label=r'Ez(0,0,z) FIT | $\sigma$ = 5 S/m')
         ax.plot(z, dd[step][1,1,:], c='grey', lw=1.5, label='Ez(0,0,z) FIT | PEC')
         ax.set_xlabel('z [m]')
-        ax.set_ylabel('$E_z$ field amplitude [V/m]', color='g')
+        ax.set_ylabel(r'$E_z$ field amplitude [V/m]', color='g')
         ax.set_ylim(-3e3, 3e3)
         ax.set_xlim(z.min(), z.max())
         
@@ -180,7 +191,7 @@
         try:    
             cstfiles = sorted(os.listdir('cst/1d/'))
             cst = wake.read_txt('cst/1d/'+cstfiles[n])
-            ax.plot(cst[0]*1e-2, cst[1], c='k', lw=1.5, ls='--', label='Ez(0,0,z) CST | $\sigma$ = 10 S/m')
+            ax.plot(cst[0]*1e-2, cst[1], c='k', lw=1.5, ls='--', label=r'Ez(0,0,z) CST | $\sigma$ = 10 S/m')
         except:
             pass
 
@@ -188,7 +199,7 @@
 
         # charge distribution
         axx.plot(z, current[step][1,1,:], c='r', lw=1.0, label='lambda λ(z)')
-        axx.set_ylabel('$J_z$ beam current [C/m]', color='r')
+        axx.set_ylabel(r'$J_z$ beam current [C/m]', color='r')
         axx.set_ylim(-8e4, 8e4)
 
         fig.suptitle('timestep='+str(n*20))
@@ -242,7 +253,7 @@
     ax[1].plot(cstZ[keys[2]][0], cstZ[keys[2]][1], c='tab:green', ls='--', lw=1.5, label=r'CST $\beta = 0.6$')
     
     ax[1].set_xlabel('f [GHz]')
-    ax[1].set_ylabel('Longitudinal impedance [Abs][$\Omega$]', color='k')
+    ax[1].set_ylabel(r'Longitudinal impedance [Abs][$\Omega$]', color='k')
     ax[1].legend()
     ax[1].margins(x=0.01, tight=True)
 
@@ -254,7 +265,7 @@
 
 
 #-------------- Compare .h5 files -------------
-plot = True
+plot = False
 if plot:
     # E field
     keys = ['beta1_wl5', 'beta0.8_wl5', 'beta0.6_wl5']
@@ -289,7 +300,7 @@
         ax.plot(np.array(d2['z']) , d2[step][1,1,:], c='tab:blue', lw=2.5, alpha=0.6, label=r'Ez(0,0,z) $\beta=0.8$')
         ax.plot(np.array(d3['z']) , d3[step][1,1,:], c='tab:green', lw=2.5, alpha=0.6, label=r'Ez(0,0,z) $\beta=0.6$')
         ax.set_xlabel('z [m]')
-        ax.set_ylabel('$E_z$ field amplitude [V/m]', color='k')
+        ax.set_ylabel(r'$E_z$ field amplitude [V/m]', color='k')
         ax.set_ylim(-1e4, 1e4)
         ax.set_xlim(np.array(d1['z']).min(), np.array(d1['z']).max())
         ax.legend(loc=1, frameon=False)
diff --git a/benchmarks/betapipe/betapipe.py b/benchmarks/betapipe/betapipe.py
new file mode 100644
index 0000000..69a02f1
--- /dev/null
+++ b/benchmarks/betapipe/betapipe.py
@@ -0,0 +1,323 @@
+import os, sys
+import numpy as np
+import pyvista as pv
+import matplotlib.pyplot as plt
+from scipy.constants import c 
+
+sys.path.append('../../')
+
+from solverFIT3D import SolverFIT3D
+from gridFIT3D import GridFIT3D 
+from wakeSolver import WakeSolver
+
+# ---------- Domain setup ---------
+# Number of mesh cells
+Nx = 25
+Ny = 25
+Nz = 150
+#dt = 5.707829241e-12 # CST
+
+# Embedded boundaries
+stl_pipe = 'squarepipe.stl'
+
+# Materials
+stl_solids = {'pipe': stl_pipe}
+stl_materials = {'pipe':  'vacuum'}
+background = 'pec' # lossy metal [ε_r, µ_r, σ]
+
+#Geometry
+stl_scale = {'pipe': [1.0, 1.0, 1.0]}
+
+# Domain bounds
+surf = pv.read(stl_pipe).scale(stl_scale['pipe'])
+xmin, xmax, ymin, ymax, zmin, zmax = surf.bounds
+Lx, Ly, Lz = (xmax-xmin), (ymax-ymin), (zmax-zmin)
+
+# Set grid and geometry
+grid = GridFIT3D(xmin, xmax, ymin, ymax, zmin, zmax, Nx, Ny, Nz, 
+                stl_solids=stl_solids, 
+                stl_materials=stl_materials,
+                stl_scale=stl_scale)
+#grid.inspect()
+
+# ------------ Beam source ----------------
+# Beam parameters
+beta = 0.4        # beam relativistic beta 
+sigmaz = beta*18.5e-3 # [m] -> multiplied by beta to have f_max cte
+q = 1e-9            # [C]
+xs = 0.             # x source position [m]
+ys = 0.             # y source position [m]
+xt = 0.             # x test position [m]
+yt = 0.             # y test position [m]
+tinj = 8.54*sigmaz/(np.sqrt(beta)*beta*c)  # injection time offset [s] 
+
+# Simualtion
+wakelength = 1  #[m]
+add_space = 10   # no. cells
+results_folder = f'results_beta{beta}_add{add_space}_inj/'
+
+wake = WakeSolver(q=q, sigmaz=sigmaz, beta=beta, ti=tinj,
+            xsource=xs, ysource=ys, xtest=xt, ytest=yt,
+            add_space=add_space, results_folder=results_folder,
+            Ez_file='Ez.h5', save=True, logfile=False)
+
+# ----------- Solver & Simulation ----------
+# boundary conditions``
+bc_low=['pec', 'pec', 'pec']
+bc_high=['pec', 'pec', 'pec']
+
+solver = SolverFIT3D(grid, wake, 
+                     bc_low=bc_low, bc_high=bc_high, 
+                     use_stl=True, bg=background)
+# Plot settings
+img_folder = results_folder+'img/'
+if not os.path.exists(img_folder): os.mkdir(img_folder)
+plotkw = {'title': img_folder+'Ez', 
+            #'add_patch':'pipe', 'patch_alpha':0.3,
+            'vmin':-1e4, 'vmax':1e4,
+            'plane': [int(Nx/2), slice(0, Ny), slice(0, Nz)]}
+
+# Run wakefield time-domain simulation
+run = True
+if run:
+    solver.wakesolve(wakelength=wakelength, add_space=add_space,
+                    plot=False, plot_every=50, plot_until=7000,
+                    save_J=False,
+                    **plotkw)    
+
+# Run only wake solve
+runWake = False
+if runWake:
+    wake.solve(Ez_file = 'Ez.h5')
+
+#-------------- Compare with CST -------------
+
+#--- Longitudinal wake and impedance ---
+plot = True
+if plot:
+    #results_folder = f'results_beta{beta}_add0_inj/'
+    #wake.load_results(results_folder)
+
+    # CST wake
+    cstWP = wake.read_txt(f'cst/WP_beta{beta}.txt')
+    cstZ = wake.read_txt(f'cst/Z_beta{beta}.txt')
+    wake.f = np.abs(wake.f)
+
+    fig, ax = plt.subplots(1,2, figsize=[12,4], dpi=150)
+    ax[0].plot(wake.s*1e3, wake.WP, c='r', lw=1.5, label='wakis')
+    ax[0].plot(cstWP[0], cstWP[1], c='k', ls='--', lw=1.2, label='CST')
+    ax[0].set_xlabel('s [mm]')
+    ax[0].set_ylabel('Longitudinal wake potential [V/pC]', color='r')
+    ax[0].legend()
+
+    ax[1].plot(wake.f*1e-9, np.real(wake.Z), c='b', lw=1.5, label='Re(Z) wakis')
+    ax[1].plot(wake.f*1e-9, np.imag(wake.Z), c='cyan', lw=1.3, label='Im(Z) wakis')
+    ax[1].plot(wake.f*1e-9, np.abs(wake.Z), c='b', lw=1.5, alpha=0.5, label='Abs(Z) wakis')
+    ax[1].plot(cstZ[0], cstZ[1], c='k', ls='--', lw=1.2, label='Re(Z) CST')
+    ax[1].plot(cstZ[0], cstZ[2], c='k', ls=':', lw=1.2, label='Im(Z) CST')
+    ax[1].plot(cstZ[0], np.abs(cstZ[1]+1.j*cstZ[2]), c='k', ls='-', lw=1.2, alpha=0.5, label='Abs(Z) CST')
+    ax[1].set_xlabel('f [GHz]')
+    ax[1].set_ylabel(r'Longitudinal impedance [Abs][$\Omega$]', color='b')
+    ax[1].legend()
+
+    fig.suptitle('Benchmark with CST Wakefield Solver')
+    fig.tight_layout()
+    fig.savefig(f'{results_folder}benchmarkReImAbs.png')
+
+    plt.show()
+
+#--- Longitudinal wake and impedance w/ error ---
+plot = True
+if plot:
+    #results_folder = f'results_beta{beta}_add0_inj/'
+    #wake.load_results(results_folder)
+
+    # CST wake
+    cstWP = wake.read_txt(f'cst/WP_beta{beta}.txt')
+    cstZ = wake.read_txt(f'cst/Z_beta{beta}.txt')
+    wake.f = np.abs(wake.f)
+
+    fig, ax = plt.subplots(1,2, figsize=[12,4], dpi=150)
+    ax[0].plot(wake.s*1e3, wake.WP, c='r', lw=1.5, label='wakis')
+    ax[0].plot(cstWP[0], cstWP[1], c='k', ls='--', lw=1.2, label='CST')
+    ax[0].set_xlabel('s [mm]')
+    ax[0].set_ylabel('Longitudinal wake potential [V/pC]', color='r')
+    
+
+    ax[1].plot(wake.f*1e-9, np.real(wake.Z), c='b', lw=1.5, label='Re(Z) wakis')
+    ax[1].plot(wake.f*1e-9, np.imag(wake.Z), c='cyan', lw=1.3, label='Im(Z) wakis')
+    ax[1].plot(wake.f*1e-9, np.abs(wake.Z), c='b', lw=1.5, alpha=0.5, label='Abs(Z) wakis')
+    ax[1].plot(cstZ[0], cstZ[1], c='k', ls='--', lw=1.2, label='Re(Z) CST')
+    ax[1].plot(cstZ[0], cstZ[2], c='k', ls=':', lw=1.2, label='Im(Z) CST')
+    ax[1].plot(cstZ[0], np.abs(cstZ[1]+1.j*cstZ[2]), c='k', ls='-', lw=1.2, alpha=0.5, label='Abs(Z) CST')
+    ax[1].set_xlabel('f [GHz]')
+    ax[1].set_ylabel(r'Longitudinal impedance [Abs][$\Omega$]', color='b')
+
+    err = wake.copy()
+    err.WP = np.interp(wake.s, cstWP[0]*1e-3, cstWP[1]) - wake.WP
+    err.lambdas = None
+    err.calc_long_Z()
+
+    ax[0].plot(err.s*1e3, err.WP, c='g', lw=1.5, label='error')
+    ax[1].plot(err.f*1e-9, np.real(err.Z), c='g', lw=1.5, label='Re(Z) error')
+    ax[1].plot(err.f*1e-9, np.imag(err.Z), c='limegreen', lw=1.3, label='Im(Z) error')
+    ax[1].plot(err.f*1e-9, np.abs(err.Z), c='g', lw=1.5, alpha=0.5, label='Abs(Z) error')
+
+    ax[0].legend()
+    ax[1].legend()
+
+    fig.suptitle('Benchmark with CST Wakefield Solver')
+    fig.tight_layout()
+    fig.savefig(f'{results_folder}benchmarkReImAbs_error.png')
+
+    plt.show()
+
+
+#--- 1d Ez field ---
+plot = False
+if plot:
+    # E field
+    d = wake.read_Ez('results_sigma5/Ez.h5',return_value=True)
+    dd = wake.read_Ez('results_pec/Ez.h5',return_value=True)
+
+    t, z = np.array(d['t']), np.array(d['z'])    
+    dt = t[1]-t[0]
+    steps = list(d.keys())
+
+    # Beam J
+    current = wake.read_Ez('Jz.h5',return_value=True)
+
+    for n, step in enumerate(steps[:1740:20]):
+        fig, ax = plt.subplots(1,1, figsize=[6,4], dpi=150)
+        axx = ax.twinx()  
+
+        ax.plot(z, d[step][1,1,:], c='g', lw=1.5, label=r'Ez(0,0,z) FIT | $\sigma$ = 5 S/m')
+        ax.plot(z, dd[step][1,1,:], c='grey', lw=1.5, label='Ez(0,0,z) FIT | PEC')
+        ax.set_xlabel('z [m]')
+        ax.set_ylabel(r'$E_z$ field amplitude [V/m]', color='g')
+        ax.set_ylim(-3e3, 3e3)
+        ax.set_xlim(z.min(), z.max())
+        
+        # CST E field
+        try:    
+            cstfiles = sorted(os.listdir('cst/1d/'))
+            cst = wake.read_txt('cst/1d/'+cstfiles[n])
+            ax.plot(cst[0]*1e-2, cst[1], c='k', lw=1.5, ls='--', label=r'Ez(0,0,z) CST | $\sigma$ = 10 S/m')
+        except:
+            pass
+
+        ax.legend(loc=1)
+
+        # charge distribution
+        axx.plot(z, current[step][1,1,:], c='r', lw=1.0, label='lambda λ(z)')
+        axx.set_ylabel(r'$J_z$ beam current [C/m]', color='r')
+        axx.set_ylim(-8e4, 8e4)
+
+        fig.suptitle('timestep='+str(n*20))
+        fig.tight_layout()
+        fig.savefig('img/Ez1d_'+str(n*20).zfill(6)+'.png')
+
+        plt.clf()
+        plt.close(fig)
+
+#-------------- Compare result files -------------
+
+#--- Longitudinal wake and impedance ---
+
+# compare beta
+plot = False
+if plot:
+
+    fig, ax = plt.subplots(1,2, figsize=[12,4.5], dpi=150)
+
+    # Read data
+    beta = '0.4'
+    keys = ['1', '10', '20', '30', '40', '50']
+    colors = plt.cm.jet(np.linspace(0.1,0.9,len(keys)))
+    res = {} 
+    for i, k in enumerate(keys):
+        # Wakis wake
+        res[k] = wake.copy()
+        res[k].load_results(f'results_beta{beta}_add{k}/')
+
+        ax[0].plot(res[k].s, res[k].WP, c=colors[i], lw=1.5, alpha=0.8, label=r'$\beta=0.4$'+f' add={k}')
+        ax[1].plot(res[k].f*1e-9, np.real(res[k].Z), c=colors[i], lw=1.5, alpha=0.8, label=r'Re: $\beta=0.4$'+f' add={k}')
+        ax[1].plot(res[k].f*1e-9, np.imag(res[k].Z), c=colors[i], lw=1.5, ls=':', alpha=1.0, label=r'Im: $\beta=0.4$'+f' add={k}')
+    
+    # CST wake
+    cstWP = wake.read_txt(f'cst/WP_beta{beta}.txt')
+    cstZ = wake.read_txt(f'cst/Z_beta{beta}.txt')
+
+    ax[0].plot(cstWP[0]*1e-3, cstWP[1], c='k', ls='--', lw=1.5, label=r'CST $\beta = 0.4$')
+    ax[1].plot(cstZ[0], cstZ[1], c='k', ls='--', lw=1.5, label=r'CST Re: $\beta = 0.4$')
+    ax[1].plot(cstZ[0], cstZ[2], c='k', ls=':', lw=1.5, label=r'CST Im: $\beta = 0.4$')
+    
+    ax[0].set_xlabel('s [m]')
+    ax[0].set_ylabel('Longitudinal wake potential [V/pC]', color='k')
+    #ax[0].set_yscale('symlog')
+    ax[0].set_ylim(-30, 30)
+    ax[0].legend()
+    ax[0].margins(x=0.01, tight=True)
+
+    ax[1].set_xlabel('f [GHz]')
+    ax[1].set_ylabel(r'Longitudinal impedance [Re/Im][$\Omega$]', color='k')
+    #ax[1].set_yscale('symlog')
+    box = ax[1].get_position()
+    ax[1].set_position([box.x0, box.y0, box.width * 0.8, box.height])
+    ax[1].legend(loc='center left', bbox_to_anchor=(1, 0.5))
+    ax[1].margins(x=0.01, tight=True)
+
+    fig.suptitle('Benchmark with CST Wakefield Solver')
+    #fig.tight_layout()
+    
+    fig.savefig(f'benchmark_addspace_beta{beta}.png')
+    plt.show()
+
+
+#-------------- Compare .h5 files -------------
+plot = False
+if plot:
+    # E field
+    keys = ['beta1_wl5', 'beta0.8_wl5', 'beta0.6_wl5']
+    d1 = wake.read_Ez(f'results_{keys[0]}/Ez.h5',return_value=True)
+    d2 = wake.read_Ez(f'results_{keys[1]}/Ez.h5',return_value=True)
+    d3 = wake.read_Ez(f'results_{keys[2]}/Ez.h5',return_value=True)
+
+    t = np.array(d1['t'])   
+    dt = t[1]-t[0]
+    steps = list(d1.keys())
+
+    # Beam J
+    dd1 = wake.read_Ez(f'results_{keys[0]}/Jz.h5',return_value=True)
+    dd2 = wake.read_Ez(f'results_{keys[1]}/Jz.h5',return_value=True)
+    dd3 = wake.read_Ez(f'results_{keys[2]}/Jz.h5',return_value=True)
+
+    for n, step in enumerate(steps[:3660:30]):
+        fig, ax = plt.subplots(1,1, figsize=[7,4], dpi=200)
+        axx = ax.twinx()  
+
+        # Beam current
+        axx.plot(np.array(d1['z']), dd1[step][1,1,:], ls=':', c='k', lw=1.5, label='Current $J_z$')
+        axx.plot(np.array(d1['z']), dd1[step][1,1,:], ls=':', c='tab:red', lw=1.5, )
+        axx.plot(np.array(d2['z']), dd2[step][1,1,:], ls=':', c='tab:blue', lw=1.5, )
+        axx.plot(np.array(d3['z']), dd3[step][1,1,:], ls=':', c='tab:green', lw=1.5, )
+        axx.set_ylabel('$J_z$ beam current [C/m]', color='k')
+        axx.set_ylim(-3e5, 3e5)
+        axx.legend(loc=2, frameon=False)
+
+        # E field
+        ax.plot(np.array(d1['z']) , d1[step][1,1,:], c='tab:red', lw=2.5, alpha=0.6, label=r'Ez(0,0,z) $\beta=1.0$')
+        ax.plot(np.array(d2['z']) , d2[step][1,1,:], c='tab:blue', lw=2.5, alpha=0.6, label=r'Ez(0,0,z) $\beta=0.8$')
+        ax.plot(np.array(d3['z']) , d3[step][1,1,:], c='tab:green', lw=2.5, alpha=0.6, label=r'Ez(0,0,z) $\beta=0.6$')
+        ax.set_xlabel('z [m]')
+        ax.set_ylabel(r'$E_z$ field amplitude [V/m]', color='k')
+        ax.set_ylim(-1e4, 1e4)
+        ax.set_xlim(np.array(d1['z']).min(), np.array(d1['z']).max())
+        ax.legend(loc=1, frameon=False)
+
+        fig.suptitle('timestep='+str(n*30))
+        fig.tight_layout()
+        fig.savefig('img/Ez1d_'+str(n*30).zfill(6)+'.png')
+
+        plt.clf()
+        plt.close(fig)
\ No newline at end of file
diff --git a/benchmarks/betapipe/squarepipe.stl b/benchmarks/betapipe/squarepipe.stl
new file mode 100644
index 0000000..712b7bc
--- /dev/null
+++ b/benchmarks/betapipe/squarepipe.stl
@@ -0,0 +1,86 @@
+solid cavity:pipe
+  facet normal 1.000000e+00 1.019390e-38 1.065308e-38
+    outer loop
+      vertex 7.500000e-03 -7.500000e-03 5.000000e-02
+      vertex -7.500000e-03 7.500000e-03 5.000000e-02
+      vertex -7.500000e-03 -7.500000e-03 5.000000e-02
+    endloop
+  endfacet
+  facet normal 1.000000e+00 0.000000e+00 0.000000e+00
+    outer loop
+      vertex 7.500000e-03 -7.500000e-03 5.000000e-02
+      vertex 7.500000e-03 7.500000e-03 5.000000e-02
+      vertex -7.500000e-03 7.500000e-03 5.000000e-02
+    endloop
+  endfacet
+  facet normal -1.000000e+00 0.000000e+00 0.000000e+00
+    outer loop
+      vertex 7.500000e-03 7.500000e-03 -5.000000e-02
+      vertex -7.500000e-03 -7.500000e-03 -5.000000e-02
+      vertex -7.500000e-03 7.500000e-03 -5.000000e-02
+    endloop
+  endfacet
+  facet normal -1.000000e+00 0.000000e+00 0.000000e+00
+    outer loop
+      vertex 7.500000e-03 7.500000e-03 -5.000000e-02
+      vertex 7.500000e-03 -7.500000e-03 -5.000000e-02
+      vertex -7.500000e-03 -7.500000e-03 -5.000000e-02
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 0.000000e+00
+    outer loop
+      vertex -7.500000e-03 -7.500000e-03 5.000000e-02
+      vertex 7.500000e-03 -7.500000e-03 -5.000000e-02
+      vertex 7.500000e-03 -7.500000e-03 5.000000e-02
+    endloop
+  endfacet
+  facet normal 0.000000e+00 8.448954e-39 5.326553e-39
+    outer loop
+      vertex -7.500000e-03 -7.500000e-03 5.000000e-02
+      vertex -7.500000e-03 -7.500000e-03 -5.000000e-02
+      vertex 7.500000e-03 -7.500000e-03 -5.000000e-02
+    endloop
+  endfacet
+  facet normal -0.000000e+00 8.448954e-39 5.326553e-39
+    outer loop
+      vertex -7.500000e-03 7.500000e-03 5.000000e-02
+      vertex -7.500000e-03 -7.500000e-03 -5.000000e-02
+      vertex -7.500000e-03 -7.500000e-03 5.000000e-02
+    endloop
+  endfacet
+  facet normal -0.000000e+00 0.000000e+00 0.000000e+00
+    outer loop
+      vertex -7.500000e-03 7.500000e-03 5.000000e-02
+      vertex -7.500000e-03 7.500000e-03 -5.000000e-02
+      vertex -7.500000e-03 -7.500000e-03 -5.000000e-02
+    endloop
+  endfacet
+  facet normal -0.000000e+00 0.000000e+00 0.000000e+00
+    outer loop
+      vertex 7.500000e-03 7.500000e-03 5.000000e-02
+      vertex -7.500000e-03 7.500000e-03 -5.000000e-02
+      vertex -7.500000e-03 7.500000e-03 5.000000e-02
+    endloop
+  endfacet
+  facet normal -0.000000e+00 4.590654e-41 0.000000e+00
+    outer loop
+      vertex 7.500000e-03 7.500000e-03 5.000000e-02
+      vertex 7.500000e-03 7.500000e-03 -5.000000e-02
+      vertex -7.500000e-03 7.500000e-03 -5.000000e-02
+    endloop
+  endfacet
+  facet normal -0.000000e+00 4.590654e-41 7.426882e-44
+    outer loop
+      vertex 7.500000e-03 -7.500000e-03 5.000000e-02
+      vertex 7.500000e-03 7.500000e-03 -5.000000e-02
+      vertex 7.500000e-03 7.500000e-03 5.000000e-02
+    endloop
+  endfacet
+  facet normal -0.000000e+00 0.000000e+00 0.000000e+00
+    outer loop
+      vertex 7.500000e-03 -7.500000e-03 5.000000e-02
+      vertex 7.500000e-03 -7.500000e-03 -5.000000e-02
+      vertex 7.500000e-03 7.500000e-03 -5.000000e-02
+    endloop
+  endfacet
+endsolid cavity:pipe
diff --git a/benchmarks/stepout/pipein.stl b/benchmarks/stepout/pipein.stl
new file mode 100644
index 0000000..0835040
--- /dev/null
+++ b/benchmarks/stepout/pipein.stl
@@ -0,0 +1,1094 @@
+solid component1:pipein
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.821723e-03 4.938442e-02 0.000000e+00
+      vertex 3.061617e-18 5.000000e-02 0.000000e+00
+      vertex -7.821723e-03 4.938442e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.821723e-03 -4.938442e-02 0.000000e+00
+      vertex -7.821723e-03 -4.938442e-02 0.000000e+00
+      vertex -9.184850e-18 -5.000000e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.821723e-03 -4.938442e-02 0.000000e+00
+      vertex -1.545085e-02 -4.755282e-02 0.000000e+00
+      vertex -7.821723e-03 -4.938442e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.545085e-02 -4.755282e-02 0.000000e+00
+      vertex -1.545085e-02 -4.755282e-02 0.000000e+00
+      vertex 7.821723e-03 -4.938442e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.545085e-02 -4.755282e-02 0.000000e+00
+      vertex -2.269953e-02 -4.455033e-02 0.000000e+00
+      vertex -1.545085e-02 -4.755282e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.269953e-02 -4.455033e-02 0.000000e+00
+      vertex -2.269953e-02 -4.455033e-02 0.000000e+00
+      vertex 1.545085e-02 -4.755282e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.269953e-02 -4.455033e-02 0.000000e+00
+      vertex -2.938926e-02 -4.045085e-02 0.000000e+00
+      vertex -2.269953e-02 -4.455033e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.938926e-02 -4.045085e-02 0.000000e+00
+      vertex -2.938926e-02 -4.045085e-02 0.000000e+00
+      vertex 2.269953e-02 -4.455033e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.938926e-02 -4.045085e-02 0.000000e+00
+      vertex -3.535534e-02 -3.535534e-02 0.000000e+00
+      vertex -2.938926e-02 -4.045085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 3.535534e-02 -3.535534e-02 0.000000e+00
+      vertex -3.535534e-02 -3.535534e-02 0.000000e+00
+      vertex 2.938926e-02 -4.045085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 3.535534e-02 -3.535534e-02 0.000000e+00
+      vertex -4.045085e-02 -2.938926e-02 0.000000e+00
+      vertex -3.535534e-02 -3.535534e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.045085e-02 -2.938926e-02 0.000000e+00
+      vertex -4.045085e-02 -2.938926e-02 0.000000e+00
+      vertex 3.535534e-02 -3.535534e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.045085e-02 -2.938926e-02 0.000000e+00
+      vertex -4.455033e-02 -2.269953e-02 0.000000e+00
+      vertex -4.045085e-02 -2.938926e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.455033e-02 -2.269953e-02 0.000000e+00
+      vertex -4.455033e-02 -2.269953e-02 0.000000e+00
+      vertex 4.045085e-02 -2.938926e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.455033e-02 -2.269953e-02 0.000000e+00
+      vertex -4.755282e-02 -1.545085e-02 0.000000e+00
+      vertex -4.455033e-02 -2.269953e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.755282e-02 -1.545085e-02 0.000000e+00
+      vertex -4.755282e-02 -1.545085e-02 0.000000e+00
+      vertex 4.455033e-02 -2.269953e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.755282e-02 -1.545085e-02 0.000000e+00
+      vertex -4.938442e-02 -7.821723e-03 0.000000e+00
+      vertex -4.755282e-02 -1.545085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.938442e-02 -7.821723e-03 0.000000e+00
+      vertex -4.938442e-02 -7.821723e-03 0.000000e+00
+      vertex 4.755282e-02 -1.545085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.938442e-02 -7.821723e-03 0.000000e+00
+      vertex -5.000000e-02 6.123234e-18 0.000000e+00
+      vertex -4.938442e-02 -7.821723e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+      vertex -5.000000e-02 6.123234e-18 0.000000e+00
+      vertex 4.938442e-02 -7.821723e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+      vertex -4.938442e-02 7.821723e-03 0.000000e+00
+      vertex -5.000000e-02 6.123234e-18 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.938442e-02 7.821723e-03 0.000000e+00
+      vertex -4.938442e-02 7.821723e-03 0.000000e+00
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.938442e-02 7.821723e-03 0.000000e+00
+      vertex -4.755282e-02 1.545085e-02 0.000000e+00
+      vertex -4.938442e-02 7.821723e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.755282e-02 1.545085e-02 0.000000e+00
+      vertex -4.755282e-02 1.545085e-02 0.000000e+00
+      vertex 4.938442e-02 7.821723e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.755282e-02 1.545085e-02 0.000000e+00
+      vertex -4.455033e-02 2.269953e-02 0.000000e+00
+      vertex -4.755282e-02 1.545085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.455033e-02 2.269953e-02 0.000000e+00
+      vertex -4.455033e-02 2.269953e-02 0.000000e+00
+      vertex 4.755282e-02 1.545085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.455033e-02 2.269953e-02 0.000000e+00
+      vertex -4.045085e-02 2.938926e-02 0.000000e+00
+      vertex -4.455033e-02 2.269953e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.045085e-02 2.938926e-02 0.000000e+00
+      vertex -4.045085e-02 2.938926e-02 0.000000e+00
+      vertex 4.455033e-02 2.269953e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.045085e-02 2.938926e-02 0.000000e+00
+      vertex -3.535534e-02 3.535534e-02 0.000000e+00
+      vertex -4.045085e-02 2.938926e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 3.535534e-02 3.535534e-02 0.000000e+00
+      vertex -3.535534e-02 3.535534e-02 0.000000e+00
+      vertex 4.045085e-02 2.938926e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 3.535534e-02 3.535534e-02 0.000000e+00
+      vertex -2.938926e-02 4.045085e-02 0.000000e+00
+      vertex -3.535534e-02 3.535534e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.938926e-02 4.045085e-02 0.000000e+00
+      vertex -2.938926e-02 4.045085e-02 0.000000e+00
+      vertex 3.535534e-02 3.535534e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.938926e-02 4.045085e-02 0.000000e+00
+      vertex -2.269953e-02 4.455033e-02 0.000000e+00
+      vertex -2.938926e-02 4.045085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.269953e-02 4.455033e-02 0.000000e+00
+      vertex -2.269953e-02 4.455033e-02 0.000000e+00
+      vertex 2.938926e-02 4.045085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.269953e-02 4.455033e-02 0.000000e+00
+      vertex -1.545085e-02 4.755282e-02 0.000000e+00
+      vertex -2.269953e-02 4.455033e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.545085e-02 4.755282e-02 0.000000e+00
+      vertex -1.545085e-02 4.755282e-02 0.000000e+00
+      vertex 2.269953e-02 4.455033e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.545085e-02 4.755282e-02 0.000000e+00
+      vertex -7.821723e-03 4.938442e-02 0.000000e+00
+      vertex -1.545085e-02 4.755282e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.821723e-03 4.938442e-02 0.000000e+00
+      vertex -7.821723e-03 4.938442e-02 0.000000e+00
+      vertex 1.545085e-02 4.755282e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 7.821723e-03 -4.938442e-02 -3.000000e-01
+      vertex 3.061617e-18 -5.000000e-02 -3.000000e-01
+      vertex -7.821723e-03 -4.938442e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 7.821723e-03 4.938442e-02 -3.000000e-01
+      vertex -7.821723e-03 4.938442e-02 -3.000000e-01
+      vertex -9.184850e-18 5.000000e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 7.821723e-03 4.938442e-02 -3.000000e-01
+      vertex -1.545085e-02 4.755282e-02 -3.000000e-01
+      vertex -7.821723e-03 4.938442e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.545085e-02 4.755282e-02 -3.000000e-01
+      vertex -1.545085e-02 4.755282e-02 -3.000000e-01
+      vertex 7.821723e-03 4.938442e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.545085e-02 4.755282e-02 -3.000000e-01
+      vertex -2.269953e-02 4.455033e-02 -3.000000e-01
+      vertex -1.545085e-02 4.755282e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.269953e-02 4.455033e-02 -3.000000e-01
+      vertex -2.269953e-02 4.455033e-02 -3.000000e-01
+      vertex 1.545085e-02 4.755282e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.269953e-02 4.455033e-02 -3.000000e-01
+      vertex -2.938926e-02 4.045085e-02 -3.000000e-01
+      vertex -2.269953e-02 4.455033e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.938926e-02 4.045085e-02 -3.000000e-01
+      vertex -2.938926e-02 4.045085e-02 -3.000000e-01
+      vertex 2.269953e-02 4.455033e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.938926e-02 4.045085e-02 -3.000000e-01
+      vertex -3.535534e-02 3.535534e-02 -3.000000e-01
+      vertex -2.938926e-02 4.045085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.535534e-02 3.535534e-02 -3.000000e-01
+      vertex -3.535534e-02 3.535534e-02 -3.000000e-01
+      vertex 2.938926e-02 4.045085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.535534e-02 3.535534e-02 -3.000000e-01
+      vertex -4.045085e-02 2.938926e-02 -3.000000e-01
+      vertex -3.535534e-02 3.535534e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.045085e-02 2.938926e-02 -3.000000e-01
+      vertex -4.045085e-02 2.938926e-02 -3.000000e-01
+      vertex 3.535534e-02 3.535534e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.045085e-02 2.938926e-02 -3.000000e-01
+      vertex -4.455033e-02 2.269953e-02 -3.000000e-01
+      vertex -4.045085e-02 2.938926e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.455033e-02 2.269953e-02 -3.000000e-01
+      vertex -4.455033e-02 2.269953e-02 -3.000000e-01
+      vertex 4.045085e-02 2.938926e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.455033e-02 2.269953e-02 -3.000000e-01
+      vertex -4.755282e-02 1.545085e-02 -3.000000e-01
+      vertex -4.455033e-02 2.269953e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.755282e-02 1.545085e-02 -3.000000e-01
+      vertex -4.755282e-02 1.545085e-02 -3.000000e-01
+      vertex 4.455033e-02 2.269953e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.755282e-02 1.545085e-02 -3.000000e-01
+      vertex -4.938442e-02 7.821723e-03 -3.000000e-01
+      vertex -4.755282e-02 1.545085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.938442e-02 7.821723e-03 -3.000000e-01
+      vertex -4.938442e-02 7.821723e-03 -3.000000e-01
+      vertex 4.755282e-02 1.545085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.938442e-02 7.821723e-03 -3.000000e-01
+      vertex -5.000000e-02 -6.123234e-18 -3.000000e-01
+      vertex -4.938442e-02 7.821723e-03 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 -3.000000e-01
+      vertex -5.000000e-02 -6.123234e-18 -3.000000e-01
+      vertex 4.938442e-02 7.821723e-03 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 -3.000000e-01
+      vertex -4.938442e-02 -7.821723e-03 -3.000000e-01
+      vertex -5.000000e-02 -6.123234e-18 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.938442e-02 -7.821723e-03 -3.000000e-01
+      vertex -4.938442e-02 -7.821723e-03 -3.000000e-01
+      vertex 5.000000e-02 0.000000e+00 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.938442e-02 -7.821723e-03 -3.000000e-01
+      vertex -4.755282e-02 -1.545085e-02 -3.000000e-01
+      vertex -4.938442e-02 -7.821723e-03 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.755282e-02 -1.545085e-02 -3.000000e-01
+      vertex -4.755282e-02 -1.545085e-02 -3.000000e-01
+      vertex 4.938442e-02 -7.821723e-03 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.755282e-02 -1.545085e-02 -3.000000e-01
+      vertex -4.455033e-02 -2.269953e-02 -3.000000e-01
+      vertex -4.755282e-02 -1.545085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.455033e-02 -2.269953e-02 -3.000000e-01
+      vertex -4.455033e-02 -2.269953e-02 -3.000000e-01
+      vertex 4.755282e-02 -1.545085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.455033e-02 -2.269953e-02 -3.000000e-01
+      vertex -4.045085e-02 -2.938926e-02 -3.000000e-01
+      vertex -4.455033e-02 -2.269953e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.045085e-02 -2.938926e-02 -3.000000e-01
+      vertex -4.045085e-02 -2.938926e-02 -3.000000e-01
+      vertex 4.455033e-02 -2.269953e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.045085e-02 -2.938926e-02 -3.000000e-01
+      vertex -3.535534e-02 -3.535534e-02 -3.000000e-01
+      vertex -4.045085e-02 -2.938926e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.535534e-02 -3.535534e-02 -3.000000e-01
+      vertex -3.535534e-02 -3.535534e-02 -3.000000e-01
+      vertex 4.045085e-02 -2.938926e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.535534e-02 -3.535534e-02 -3.000000e-01
+      vertex -2.938926e-02 -4.045085e-02 -3.000000e-01
+      vertex -3.535534e-02 -3.535534e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.938926e-02 -4.045085e-02 -3.000000e-01
+      vertex -2.938926e-02 -4.045085e-02 -3.000000e-01
+      vertex 3.535534e-02 -3.535534e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.938926e-02 -4.045085e-02 -3.000000e-01
+      vertex -2.269953e-02 -4.455033e-02 -3.000000e-01
+      vertex -2.938926e-02 -4.045085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.269953e-02 -4.455033e-02 -3.000000e-01
+      vertex -2.269953e-02 -4.455033e-02 -3.000000e-01
+      vertex 2.938926e-02 -4.045085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.269953e-02 -4.455033e-02 -3.000000e-01
+      vertex -1.545085e-02 -4.755282e-02 -3.000000e-01
+      vertex -2.269953e-02 -4.455033e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.545085e-02 -4.755282e-02 -3.000000e-01
+      vertex -1.545085e-02 -4.755282e-02 -3.000000e-01
+      vertex 2.269953e-02 -4.455033e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.545085e-02 -4.755282e-02 -3.000000e-01
+      vertex -7.821723e-03 -4.938442e-02 -3.000000e-01
+      vertex -1.545085e-02 -4.755282e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 7.821723e-03 -4.938442e-02 -3.000000e-01
+      vertex -7.821723e-03 -4.938442e-02 -3.000000e-01
+      vertex 1.545085e-02 -4.755282e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 9.917922e-01 1.042896e-01 0.000000e+00
+    outer loop
+      vertex 4.938442e-02 7.821723e-03 -3.000000e-01
+      vertex 4.938442e-02 7.821723e-03 0.000000e+00
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.754778e-01 2.072953e-01 0.000000e+00
+    outer loop
+      vertex 4.755282e-02 1.545085e-02 -3.000000e-01
+      vertex 4.938442e-02 7.821723e-03 0.000000e+00
+      vertex 4.938442e-02 7.821723e-03 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 9.632671e-01 2.581562e-01 0.000000e+00
+    outer loop
+      vertex 4.755282e-02 1.545085e-02 -3.000000e-01
+      vertex 4.755282e-02 1.545085e-02 0.000000e+00
+      vertex 4.938442e-02 7.821723e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.310399e-01 3.573415e-01 0.000000e+00
+    outer loop
+      vertex 4.455033e-02 2.269953e-02 -3.000000e-01
+      vertex 4.755282e-02 1.545085e-02 0.000000e+00
+      vertex 4.755282e-02 1.545085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 9.110232e-01 4.056660e-01 0.000000e+00
+    outer loop
+      vertex 4.455033e-02 2.269953e-02 -3.000000e-01
+      vertex 4.455033e-02 2.269953e-02 0.000000e+00
+      vertex 4.755282e-02 1.545085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 8.636767e-01 4.985887e-01 0.000000e+00
+    outer loop
+      vertex 4.045085e-02 2.938926e-02 -3.000000e-01
+      vertex 4.455033e-02 2.269953e-02 0.000000e+00
+      vertex 4.455033e-02 2.269953e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 8.363469e-01 5.431870e-01 0.000000e+00
+    outer loop
+      vertex 4.045085e-02 2.938926e-02 -3.000000e-01
+      vertex 4.045085e-02 2.938926e-02 0.000000e+00
+      vertex 4.455033e-02 2.269953e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 7.750469e-01 6.275591e-01 0.000000e+00
+    outer loop
+      vertex 3.535534e-02 3.535534e-02 -3.000000e-01
+      vertex 4.045085e-02 2.938926e-02 0.000000e+00
+      vertex 4.045085e-02 2.938926e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 7.410769e-01 6.673329e-01 0.000000e+00
+    outer loop
+      vertex 3.535534e-02 3.535534e-02 -3.000000e-01
+      vertex 3.535534e-02 3.535534e-02 0.000000e+00
+      vertex 4.045085e-02 2.938926e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 6.673329e-01 7.410769e-01 0.000000e+00
+    outer loop
+      vertex 2.938926e-02 4.045085e-02 -3.000000e-01
+      vertex 3.535534e-02 3.535534e-02 0.000000e+00
+      vertex 3.535534e-02 3.535534e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 6.275591e-01 7.750469e-01 0.000000e+00
+    outer loop
+      vertex 2.938926e-02 4.045085e-02 -3.000000e-01
+      vertex 2.938926e-02 4.045085e-02 0.000000e+00
+      vertex 3.535534e-02 3.535534e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 5.431870e-01 8.363469e-01 0.000000e+00
+    outer loop
+      vertex 2.269953e-02 4.455033e-02 -3.000000e-01
+      vertex 2.938926e-02 4.045085e-02 0.000000e+00
+      vertex 2.938926e-02 4.045085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 4.985887e-01 8.636767e-01 0.000000e+00
+    outer loop
+      vertex 2.269953e-02 4.455033e-02 -3.000000e-01
+      vertex 2.269953e-02 4.455033e-02 0.000000e+00
+      vertex 2.938926e-02 4.045085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 4.056660e-01 9.110232e-01 0.000000e+00
+    outer loop
+      vertex 1.545085e-02 4.755282e-02 -3.000000e-01
+      vertex 2.269953e-02 4.455033e-02 0.000000e+00
+      vertex 2.269953e-02 4.455033e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 3.573415e-01 9.310399e-01 0.000000e+00
+    outer loop
+      vertex 1.545085e-02 4.755282e-02 -3.000000e-01
+      vertex 1.545085e-02 4.755282e-02 0.000000e+00
+      vertex 2.269953e-02 4.455033e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 2.581562e-01 9.632671e-01 0.000000e+00
+    outer loop
+      vertex 7.821723e-03 4.938442e-02 -3.000000e-01
+      vertex 1.545085e-02 4.755282e-02 0.000000e+00
+      vertex 1.545085e-02 4.755282e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 2.072953e-01 9.754778e-01 0.000000e+00
+    outer loop
+      vertex 7.821723e-03 4.938442e-02 -3.000000e-01
+      vertex 7.821723e-03 4.938442e-02 0.000000e+00
+      vertex 1.545085e-02 4.755282e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 1.042896e-01 9.917922e-01 0.000000e+00
+    outer loop
+      vertex -9.184850e-18 5.000000e-02 -3.000000e-01
+      vertex 7.821723e-03 4.938442e-02 0.000000e+00
+      vertex 7.821723e-03 4.938442e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 5.214482e-02 9.958961e-01 0.000000e+00
+    outer loop
+      vertex -9.184850e-18 5.000000e-02 -3.000000e-01
+      vertex 3.061617e-18 5.000000e-02 0.000000e+00
+      vertex 7.821723e-03 4.938442e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -5.214482e-02 9.958961e-01 0.000000e+00
+    outer loop
+      vertex -7.821723e-03 4.938442e-02 -3.000000e-01
+      vertex 3.061617e-18 5.000000e-02 0.000000e+00
+      vertex -9.184850e-18 5.000000e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -1.042896e-01 9.917922e-01 0.000000e+00
+    outer loop
+      vertex -7.821723e-03 4.938442e-02 -3.000000e-01
+      vertex -7.821723e-03 4.938442e-02 0.000000e+00
+      vertex 3.061617e-18 5.000000e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -2.072953e-01 9.754778e-01 0.000000e+00
+    outer loop
+      vertex -1.545085e-02 4.755282e-02 -3.000000e-01
+      vertex -7.821723e-03 4.938442e-02 0.000000e+00
+      vertex -7.821723e-03 4.938442e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -2.581562e-01 9.632671e-01 0.000000e+00
+    outer loop
+      vertex -1.545085e-02 4.755282e-02 -3.000000e-01
+      vertex -1.545085e-02 4.755282e-02 0.000000e+00
+      vertex -7.821723e-03 4.938442e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -3.573415e-01 9.310399e-01 0.000000e+00
+    outer loop
+      vertex -2.269953e-02 4.455033e-02 -3.000000e-01
+      vertex -1.545085e-02 4.755282e-02 0.000000e+00
+      vertex -1.545085e-02 4.755282e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -4.056660e-01 9.110232e-01 0.000000e+00
+    outer loop
+      vertex -2.269953e-02 4.455033e-02 -3.000000e-01
+      vertex -2.269953e-02 4.455033e-02 0.000000e+00
+      vertex -1.545085e-02 4.755282e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -4.985887e-01 8.636767e-01 0.000000e+00
+    outer loop
+      vertex -2.938926e-02 4.045085e-02 -3.000000e-01
+      vertex -2.269953e-02 4.455033e-02 0.000000e+00
+      vertex -2.269953e-02 4.455033e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -5.431870e-01 8.363469e-01 0.000000e+00
+    outer loop
+      vertex -2.938926e-02 4.045085e-02 -3.000000e-01
+      vertex -2.938926e-02 4.045085e-02 0.000000e+00
+      vertex -2.269953e-02 4.455033e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -6.275591e-01 7.750469e-01 0.000000e+00
+    outer loop
+      vertex -3.535534e-02 3.535534e-02 -3.000000e-01
+      vertex -2.938926e-02 4.045085e-02 0.000000e+00
+      vertex -2.938926e-02 4.045085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -6.673329e-01 7.410769e-01 0.000000e+00
+    outer loop
+      vertex -3.535534e-02 3.535534e-02 -3.000000e-01
+      vertex -3.535534e-02 3.535534e-02 0.000000e+00
+      vertex -2.938926e-02 4.045085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -7.410769e-01 6.673329e-01 0.000000e+00
+    outer loop
+      vertex -4.045085e-02 2.938926e-02 -3.000000e-01
+      vertex -3.535534e-02 3.535534e-02 0.000000e+00
+      vertex -3.535534e-02 3.535534e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -7.750469e-01 6.275591e-01 0.000000e+00
+    outer loop
+      vertex -4.045085e-02 2.938926e-02 -3.000000e-01
+      vertex -4.045085e-02 2.938926e-02 0.000000e+00
+      vertex -3.535534e-02 3.535534e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -8.363469e-01 5.431870e-01 0.000000e+00
+    outer loop
+      vertex -4.455033e-02 2.269953e-02 -3.000000e-01
+      vertex -4.045085e-02 2.938926e-02 0.000000e+00
+      vertex -4.045085e-02 2.938926e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -8.636767e-01 4.985887e-01 0.000000e+00
+    outer loop
+      vertex -4.455033e-02 2.269953e-02 -3.000000e-01
+      vertex -4.455033e-02 2.269953e-02 0.000000e+00
+      vertex -4.045085e-02 2.938926e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.110232e-01 4.056660e-01 0.000000e+00
+    outer loop
+      vertex -4.755282e-02 1.545085e-02 -3.000000e-01
+      vertex -4.455033e-02 2.269953e-02 0.000000e+00
+      vertex -4.455033e-02 2.269953e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -9.310399e-01 3.573415e-01 0.000000e+00
+    outer loop
+      vertex -4.755282e-02 1.545085e-02 -3.000000e-01
+      vertex -4.755282e-02 1.545085e-02 0.000000e+00
+      vertex -4.455033e-02 2.269953e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.632671e-01 2.581562e-01 0.000000e+00
+    outer loop
+      vertex -4.938442e-02 7.821723e-03 -3.000000e-01
+      vertex -4.755282e-02 1.545085e-02 0.000000e+00
+      vertex -4.755282e-02 1.545085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -9.754778e-01 2.072953e-01 0.000000e+00
+    outer loop
+      vertex -4.938442e-02 7.821723e-03 -3.000000e-01
+      vertex -4.938442e-02 7.821723e-03 0.000000e+00
+      vertex -4.755282e-02 1.545085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.917922e-01 1.042896e-01 0.000000e+00
+    outer loop
+      vertex -5.000000e-02 -6.123234e-18 -3.000000e-01
+      vertex -4.938442e-02 7.821723e-03 0.000000e+00
+      vertex -4.938442e-02 7.821723e-03 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -9.958961e-01 5.214482e-02 0.000000e+00
+    outer loop
+      vertex -5.000000e-02 -6.123234e-18 -3.000000e-01
+      vertex -5.000000e-02 6.123234e-18 0.000000e+00
+      vertex -4.938442e-02 7.821723e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.958961e-01 -5.214482e-02 0.000000e+00
+    outer loop
+      vertex -4.938442e-02 -7.821723e-03 -3.000000e-01
+      vertex -5.000000e-02 6.123234e-18 0.000000e+00
+      vertex -5.000000e-02 -6.123234e-18 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -9.917922e-01 -1.042896e-01 0.000000e+00
+    outer loop
+      vertex -4.938442e-02 -7.821723e-03 -3.000000e-01
+      vertex -4.938442e-02 -7.821723e-03 0.000000e+00
+      vertex -5.000000e-02 6.123234e-18 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.754778e-01 -2.072953e-01 0.000000e+00
+    outer loop
+      vertex -4.755282e-02 -1.545085e-02 -3.000000e-01
+      vertex -4.938442e-02 -7.821723e-03 0.000000e+00
+      vertex -4.938442e-02 -7.821723e-03 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -9.632671e-01 -2.581562e-01 0.000000e+00
+    outer loop
+      vertex -4.755282e-02 -1.545085e-02 -3.000000e-01
+      vertex -4.755282e-02 -1.545085e-02 0.000000e+00
+      vertex -4.938442e-02 -7.821723e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.310399e-01 -3.573415e-01 0.000000e+00
+    outer loop
+      vertex -4.455033e-02 -2.269953e-02 -3.000000e-01
+      vertex -4.755282e-02 -1.545085e-02 0.000000e+00
+      vertex -4.755282e-02 -1.545085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -9.110232e-01 -4.056660e-01 0.000000e+00
+    outer loop
+      vertex -4.455033e-02 -2.269953e-02 -3.000000e-01
+      vertex -4.455033e-02 -2.269953e-02 0.000000e+00
+      vertex -4.755282e-02 -1.545085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -8.636767e-01 -4.985887e-01 0.000000e+00
+    outer loop
+      vertex -4.045085e-02 -2.938926e-02 -3.000000e-01
+      vertex -4.455033e-02 -2.269953e-02 0.000000e+00
+      vertex -4.455033e-02 -2.269953e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -8.363469e-01 -5.431870e-01 0.000000e+00
+    outer loop
+      vertex -4.045085e-02 -2.938926e-02 -3.000000e-01
+      vertex -4.045085e-02 -2.938926e-02 0.000000e+00
+      vertex -4.455033e-02 -2.269953e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -7.750469e-01 -6.275591e-01 0.000000e+00
+    outer loop
+      vertex -3.535534e-02 -3.535534e-02 -3.000000e-01
+      vertex -4.045085e-02 -2.938926e-02 0.000000e+00
+      vertex -4.045085e-02 -2.938926e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -7.410769e-01 -6.673329e-01 0.000000e+00
+    outer loop
+      vertex -3.535534e-02 -3.535534e-02 -3.000000e-01
+      vertex -3.535534e-02 -3.535534e-02 0.000000e+00
+      vertex -4.045085e-02 -2.938926e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -6.673329e-01 -7.410769e-01 0.000000e+00
+    outer loop
+      vertex -2.938926e-02 -4.045085e-02 -3.000000e-01
+      vertex -3.535534e-02 -3.535534e-02 0.000000e+00
+      vertex -3.535534e-02 -3.535534e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -6.275591e-01 -7.750469e-01 0.000000e+00
+    outer loop
+      vertex -2.938926e-02 -4.045085e-02 -3.000000e-01
+      vertex -2.938926e-02 -4.045085e-02 0.000000e+00
+      vertex -3.535534e-02 -3.535534e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -5.431870e-01 -8.363469e-01 0.000000e+00
+    outer loop
+      vertex -2.269953e-02 -4.455033e-02 -3.000000e-01
+      vertex -2.938926e-02 -4.045085e-02 0.000000e+00
+      vertex -2.938926e-02 -4.045085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -4.985887e-01 -8.636767e-01 0.000000e+00
+    outer loop
+      vertex -2.269953e-02 -4.455033e-02 -3.000000e-01
+      vertex -2.269953e-02 -4.455033e-02 0.000000e+00
+      vertex -2.938926e-02 -4.045085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -4.056660e-01 -9.110232e-01 0.000000e+00
+    outer loop
+      vertex -1.545085e-02 -4.755282e-02 -3.000000e-01
+      vertex -2.269953e-02 -4.455033e-02 0.000000e+00
+      vertex -2.269953e-02 -4.455033e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -3.573415e-01 -9.310399e-01 0.000000e+00
+    outer loop
+      vertex -1.545085e-02 -4.755282e-02 -3.000000e-01
+      vertex -1.545085e-02 -4.755282e-02 0.000000e+00
+      vertex -2.269953e-02 -4.455033e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -2.581562e-01 -9.632671e-01 0.000000e+00
+    outer loop
+      vertex -7.821723e-03 -4.938442e-02 -3.000000e-01
+      vertex -1.545085e-02 -4.755282e-02 0.000000e+00
+      vertex -1.545085e-02 -4.755282e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -2.072953e-01 -9.754778e-01 0.000000e+00
+    outer loop
+      vertex -7.821723e-03 -4.938442e-02 -3.000000e-01
+      vertex -7.821723e-03 -4.938442e-02 0.000000e+00
+      vertex -1.545085e-02 -4.755282e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -1.042896e-01 -9.917922e-01 0.000000e+00
+    outer loop
+      vertex 3.061617e-18 -5.000000e-02 -3.000000e-01
+      vertex -7.821723e-03 -4.938442e-02 0.000000e+00
+      vertex -7.821723e-03 -4.938442e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal -5.214482e-02 -9.958961e-01 0.000000e+00
+    outer loop
+      vertex 3.061617e-18 -5.000000e-02 -3.000000e-01
+      vertex -9.184850e-18 -5.000000e-02 0.000000e+00
+      vertex -7.821723e-03 -4.938442e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 5.214482e-02 -9.958961e-01 0.000000e+00
+    outer loop
+      vertex 7.821723e-03 -4.938442e-02 -3.000000e-01
+      vertex -9.184850e-18 -5.000000e-02 0.000000e+00
+      vertex 3.061617e-18 -5.000000e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 1.042896e-01 -9.917922e-01 0.000000e+00
+    outer loop
+      vertex 7.821723e-03 -4.938442e-02 -3.000000e-01
+      vertex 7.821723e-03 -4.938442e-02 0.000000e+00
+      vertex -9.184850e-18 -5.000000e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 2.072953e-01 -9.754778e-01 0.000000e+00
+    outer loop
+      vertex 1.545085e-02 -4.755282e-02 -3.000000e-01
+      vertex 7.821723e-03 -4.938442e-02 0.000000e+00
+      vertex 7.821723e-03 -4.938442e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 2.581562e-01 -9.632671e-01 0.000000e+00
+    outer loop
+      vertex 1.545085e-02 -4.755282e-02 -3.000000e-01
+      vertex 1.545085e-02 -4.755282e-02 0.000000e+00
+      vertex 7.821723e-03 -4.938442e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 3.573415e-01 -9.310399e-01 0.000000e+00
+    outer loop
+      vertex 2.269953e-02 -4.455033e-02 -3.000000e-01
+      vertex 1.545085e-02 -4.755282e-02 0.000000e+00
+      vertex 1.545085e-02 -4.755282e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 4.056660e-01 -9.110232e-01 0.000000e+00
+    outer loop
+      vertex 2.269953e-02 -4.455033e-02 -3.000000e-01
+      vertex 2.269953e-02 -4.455033e-02 0.000000e+00
+      vertex 1.545085e-02 -4.755282e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 4.985887e-01 -8.636767e-01 0.000000e+00
+    outer loop
+      vertex 2.938926e-02 -4.045085e-02 -3.000000e-01
+      vertex 2.269953e-02 -4.455033e-02 0.000000e+00
+      vertex 2.269953e-02 -4.455033e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 5.431870e-01 -8.363469e-01 0.000000e+00
+    outer loop
+      vertex 2.938926e-02 -4.045085e-02 -3.000000e-01
+      vertex 2.938926e-02 -4.045085e-02 0.000000e+00
+      vertex 2.269953e-02 -4.455033e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 6.275591e-01 -7.750469e-01 0.000000e+00
+    outer loop
+      vertex 3.535534e-02 -3.535534e-02 -3.000000e-01
+      vertex 2.938926e-02 -4.045085e-02 0.000000e+00
+      vertex 2.938926e-02 -4.045085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 6.673329e-01 -7.410769e-01 0.000000e+00
+    outer loop
+      vertex 3.535534e-02 -3.535534e-02 -3.000000e-01
+      vertex 3.535534e-02 -3.535534e-02 0.000000e+00
+      vertex 2.938926e-02 -4.045085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 7.410769e-01 -6.673329e-01 0.000000e+00
+    outer loop
+      vertex 4.045085e-02 -2.938926e-02 -3.000000e-01
+      vertex 3.535534e-02 -3.535534e-02 0.000000e+00
+      vertex 3.535534e-02 -3.535534e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 7.750469e-01 -6.275591e-01 0.000000e+00
+    outer loop
+      vertex 4.045085e-02 -2.938926e-02 -3.000000e-01
+      vertex 4.045085e-02 -2.938926e-02 0.000000e+00
+      vertex 3.535534e-02 -3.535534e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 8.363469e-01 -5.431870e-01 0.000000e+00
+    outer loop
+      vertex 4.455033e-02 -2.269953e-02 -3.000000e-01
+      vertex 4.045085e-02 -2.938926e-02 0.000000e+00
+      vertex 4.045085e-02 -2.938926e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 8.636767e-01 -4.985887e-01 0.000000e+00
+    outer loop
+      vertex 4.455033e-02 -2.269953e-02 -3.000000e-01
+      vertex 4.455033e-02 -2.269953e-02 0.000000e+00
+      vertex 4.045085e-02 -2.938926e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.110232e-01 -4.056660e-01 0.000000e+00
+    outer loop
+      vertex 4.755282e-02 -1.545085e-02 -3.000000e-01
+      vertex 4.455033e-02 -2.269953e-02 0.000000e+00
+      vertex 4.455033e-02 -2.269953e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 9.310399e-01 -3.573415e-01 0.000000e+00
+    outer loop
+      vertex 4.755282e-02 -1.545085e-02 -3.000000e-01
+      vertex 4.755282e-02 -1.545085e-02 0.000000e+00
+      vertex 4.455033e-02 -2.269953e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.632671e-01 -2.581562e-01 0.000000e+00
+    outer loop
+      vertex 4.938442e-02 -7.821723e-03 -3.000000e-01
+      vertex 4.755282e-02 -1.545085e-02 0.000000e+00
+      vertex 4.755282e-02 -1.545085e-02 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 9.754778e-01 -2.072953e-01 0.000000e+00
+    outer loop
+      vertex 4.938442e-02 -7.821723e-03 -3.000000e-01
+      vertex 4.938442e-02 -7.821723e-03 0.000000e+00
+      vertex 4.755282e-02 -1.545085e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.917922e-01 -1.042896e-01 0.000000e+00
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 -3.000000e-01
+      vertex 4.938442e-02 -7.821723e-03 0.000000e+00
+      vertex 4.938442e-02 -7.821723e-03 -3.000000e-01
+    endloop
+  endfacet
+  facet normal 9.958961e-01 -5.214482e-02 0.000000e+00
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 -3.000000e-01
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+      vertex 4.938442e-02 -7.821723e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.958961e-01 5.214482e-02 0.000000e+00
+    outer loop
+      vertex 4.938442e-02 7.821723e-03 -3.000000e-01
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+      vertex 5.000000e-02 0.000000e+00 -3.000000e-01
+    endloop
+  endfacet
+endsolid component1:pipein
diff --git a/benchmarks/stepout/pipeout.stl b/benchmarks/stepout/pipeout.stl
new file mode 100644
index 0000000..a89246b
--- /dev/null
+++ b/benchmarks/stepout/pipeout.stl
@@ -0,0 +1,1542 @@
+solid component1:pipeout
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.283625e-02 -1.494498e-01 3.010000e-01
+      vertex -2.134722e-02 -1.484732e-01 3.010000e-01
+      vertex -4.283408e-03 -1.499388e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.978857e-02 -1.470124e-01 3.010000e-01
+      vertex -2.134722e-02 -1.484732e-01 3.010000e-01
+      vertex 1.283625e-02 -1.494498e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.978857e-02 -1.470124e-01 3.010000e-01
+      vertex -3.813275e-02 -1.450720e-01 3.010000e-01
+      vertex -2.134722e-02 -1.484732e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.635255e-02 -1.426585e-01 3.010000e-01
+      vertex -3.813275e-02 -1.450720e-01 3.010000e-01
+      vertex 2.978857e-02 -1.470124e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.635255e-02 -1.426585e-01 3.010000e-01
+      vertex -5.442116e-02 -1.397796e-01 3.010000e-01
+      vertex -3.813275e-02 -1.450720e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 6.231225e-02 -1.364448e-01 3.010000e-01
+      vertex -5.442116e-02 -1.397796e-01 3.010000e-01
+      vertex 4.635255e-02 -1.426585e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 6.231225e-02 -1.364448e-01 3.010000e-01
+      vertex -7.000010e-02 -1.326649e-01 3.010000e-01
+      vertex -5.442116e-02 -1.397796e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.745962e-02 -1.284524e-01 3.010000e-01
+      vertex -7.000010e-02 -1.326649e-01 3.010000e-01
+      vertex 6.231225e-02 -1.364448e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.745962e-02 -1.284524e-01 3.010000e-01
+      vertex -8.466648e-02 -1.238208e-01 3.010000e-01
+      vertex -7.000010e-02 -1.326649e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 9.159719e-02 -1.187853e-01 3.010000e-01
+      vertex -8.466648e-02 -1.238208e-01 3.010000e-01
+      vertex 7.745962e-02 -1.284524e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 9.159719e-02 -1.187853e-01 3.010000e-01
+      vertex -9.822911e-02 -1.133624e-01 3.010000e-01
+      vertex -8.466648e-02 -1.238208e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.045406e-01 -1.075698e-01 3.010000e-01
+      vertex -9.822911e-02 -1.133624e-01 3.010000e-01
+      vertex 9.159719e-02 -1.187853e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.045406e-01 -1.075698e-01 3.010000e-01
+      vertex -1.105112e-01 -1.014262e-01 3.010000e-01
+      vertex -9.822911e-02 -1.133624e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.161212e-01 -9.495187e-02 3.010000e-01
+      vertex -1.105112e-01 -1.014262e-01 3.010000e-01
+      vertex 1.045406e-01 -1.075698e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.161212e-01 -9.495187e-02 3.010000e-01
+      vertex -1.213525e-01 -8.816779e-02 3.010000e-01
+      vertex -1.105112e-01 -1.014262e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.261880e-01 -8.109612e-02 3.010000e-01
+      vertex -1.213525e-01 -8.816779e-02 3.010000e-01
+      vertex 1.161212e-01 -9.495187e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.261880e-01 -8.109612e-02 3.010000e-01
+      vertex -1.306119e-01 -7.375994e-02 3.010000e-01
+      vertex -1.213525e-01 -8.816779e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.346098e-01 -6.618317e-02 3.010000e-01
+      vertex -1.306119e-01 -7.375994e-02 3.010000e-01
+      vertex 1.261880e-01 -8.109612e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.346098e-01 -6.618317e-02 3.010000e-01
+      vertex -1.381685e-01 -5.839052e-02 3.010000e-01
+      vertex -1.306119e-01 -7.375994e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.412767e-01 -5.040741e-02 3.010000e-01
+      vertex -1.381685e-01 -5.839052e-02 3.010000e-01
+      vertex 1.346098e-01 -6.618317e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.412767e-01 -5.040741e-02 3.010000e-01
+      vertex -1.439240e-01 -4.225988e-02 3.010000e-01
+      vertex -1.381685e-01 -5.839052e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.461018e-01 -3.397451e-02 3.010000e-01
+      vertex -1.439240e-01 -4.225988e-02 3.010000e-01
+      vertex 1.412767e-01 -5.040741e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.461018e-01 -3.397451e-02 3.010000e-01
+      vertex -1.478031e-01 -2.557833e-02 3.010000e-01
+      vertex -1.439240e-01 -4.225988e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.490223e-01 -1.709871e-02 3.010000e-01
+      vertex -1.478031e-01 -2.557833e-02 3.010000e-01
+      vertex 1.461018e-01 -3.397451e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.283625e-02 1.494498e-01 3.010000e-01
+      vertex -4.283408e-03 1.499388e-01 3.010000e-01
+      vertex -2.134722e-02 1.484732e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.490223e-01 -1.709871e-02 3.010000e-01
+      vertex -1.497554e-01 -8.563322e-03 3.010000e-01
+      vertex -1.478031e-01 -2.557833e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.490223e-01 -1.709871e-02 3.010000e-01
+      vertex -1.500000e-01 1.836970e-17 3.010000e-01
+      vertex -1.497554e-01 -8.563322e-03 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.500000e-01 0.000000e+00 3.010000e-01
+      vertex -1.500000e-01 1.836970e-17 3.010000e-01
+      vertex 1.490223e-01 -1.709871e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.500000e-01 0.000000e+00 3.010000e-01
+      vertex -1.497554e-01 8.563322e-03 3.010000e-01
+      vertex -1.500000e-01 1.836970e-17 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.490223e-01 1.709871e-02 3.010000e-01
+      vertex -1.497554e-01 8.563322e-03 3.010000e-01
+      vertex 1.500000e-01 0.000000e+00 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.490223e-01 1.709871e-02 3.010000e-01
+      vertex -1.478031e-01 2.557833e-02 3.010000e-01
+      vertex -1.497554e-01 8.563322e-03 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.461018e-01 3.397451e-02 3.010000e-01
+      vertex -1.478031e-01 2.557833e-02 3.010000e-01
+      vertex 1.490223e-01 1.709871e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.461018e-01 3.397451e-02 3.010000e-01
+      vertex -1.439240e-01 4.225988e-02 3.010000e-01
+      vertex -1.478031e-01 2.557833e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.412767e-01 5.040741e-02 3.010000e-01
+      vertex -1.439240e-01 4.225988e-02 3.010000e-01
+      vertex 1.461018e-01 3.397451e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.412767e-01 5.040741e-02 3.010000e-01
+      vertex -1.381685e-01 5.839052e-02 3.010000e-01
+      vertex -1.439240e-01 4.225988e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.346098e-01 6.618317e-02 3.010000e-01
+      vertex -1.381685e-01 5.839052e-02 3.010000e-01
+      vertex 1.412767e-01 5.040741e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.346098e-01 6.618317e-02 3.010000e-01
+      vertex -1.306119e-01 7.375994e-02 3.010000e-01
+      vertex -1.381685e-01 5.839052e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.261880e-01 8.109612e-02 3.010000e-01
+      vertex -1.306119e-01 7.375994e-02 3.010000e-01
+      vertex 1.346098e-01 6.618317e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.261880e-01 8.109612e-02 3.010000e-01
+      vertex -1.213525e-01 8.816779e-02 3.010000e-01
+      vertex -1.306119e-01 7.375994e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.161212e-01 9.495187e-02 3.010000e-01
+      vertex -1.213525e-01 8.816779e-02 3.010000e-01
+      vertex 1.261880e-01 8.109612e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.161212e-01 9.495187e-02 3.010000e-01
+      vertex -1.105112e-01 1.014262e-01 3.010000e-01
+      vertex -1.213525e-01 8.816779e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.045406e-01 1.075698e-01 3.010000e-01
+      vertex -1.105112e-01 1.014262e-01 3.010000e-01
+      vertex 1.161212e-01 9.495187e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.045406e-01 1.075698e-01 3.010000e-01
+      vertex -9.822911e-02 1.133624e-01 3.010000e-01
+      vertex -1.105112e-01 1.014262e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 9.159719e-02 1.187853e-01 3.010000e-01
+      vertex -9.822911e-02 1.133624e-01 3.010000e-01
+      vertex 1.045406e-01 1.075698e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 9.159719e-02 1.187853e-01 3.010000e-01
+      vertex -8.466648e-02 1.238208e-01 3.010000e-01
+      vertex -9.822911e-02 1.133624e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.745962e-02 1.284524e-01 3.010000e-01
+      vertex -8.466648e-02 1.238208e-01 3.010000e-01
+      vertex 9.159719e-02 1.187853e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.745962e-02 1.284524e-01 3.010000e-01
+      vertex -7.000010e-02 1.326649e-01 3.010000e-01
+      vertex -8.466648e-02 1.238208e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 6.231225e-02 1.364448e-01 3.010000e-01
+      vertex -7.000010e-02 1.326649e-01 3.010000e-01
+      vertex 7.745962e-02 1.284524e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 6.231225e-02 1.364448e-01 3.010000e-01
+      vertex -5.442116e-02 1.397796e-01 3.010000e-01
+      vertex -7.000010e-02 1.326649e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.635255e-02 1.426585e-01 3.010000e-01
+      vertex -5.442116e-02 1.397796e-01 3.010000e-01
+      vertex 6.231225e-02 1.364448e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.635255e-02 1.426585e-01 3.010000e-01
+      vertex -3.813275e-02 1.450720e-01 3.010000e-01
+      vertex -5.442116e-02 1.397796e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.978857e-02 1.470124e-01 3.010000e-01
+      vertex -3.813275e-02 1.450720e-01 3.010000e-01
+      vertex 4.635255e-02 1.426585e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 2.978857e-02 1.470124e-01 3.010000e-01
+      vertex -2.134722e-02 1.484732e-01 3.010000e-01
+      vertex -3.813275e-02 1.450720e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.283625e-02 1.494498e-01 3.010000e-01
+      vertex -2.134722e-02 1.484732e-01 3.010000e-01
+      vertex 2.978857e-02 1.470124e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.283625e-02 1.494498e-01 1.000000e-03
+      vertex -2.134722e-02 1.484732e-01 1.000000e-03
+      vertex -4.283408e-03 1.499388e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.978857e-02 1.470124e-01 1.000000e-03
+      vertex -2.134722e-02 1.484732e-01 1.000000e-03
+      vertex 1.283625e-02 1.494498e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.978857e-02 1.470124e-01 1.000000e-03
+      vertex -3.813275e-02 1.450720e-01 1.000000e-03
+      vertex -2.134722e-02 1.484732e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.635255e-02 1.426585e-01 1.000000e-03
+      vertex -3.813275e-02 1.450720e-01 1.000000e-03
+      vertex 2.978857e-02 1.470124e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.635255e-02 1.426585e-01 1.000000e-03
+      vertex -5.442116e-02 1.397796e-01 1.000000e-03
+      vertex -3.813275e-02 1.450720e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 6.231225e-02 1.364448e-01 1.000000e-03
+      vertex -5.442116e-02 1.397796e-01 1.000000e-03
+      vertex 4.635255e-02 1.426585e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 6.231225e-02 1.364448e-01 1.000000e-03
+      vertex -7.000010e-02 1.326649e-01 1.000000e-03
+      vertex -5.442116e-02 1.397796e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 7.745962e-02 1.284524e-01 1.000000e-03
+      vertex -7.000010e-02 1.326649e-01 1.000000e-03
+      vertex 6.231225e-02 1.364448e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 7.745962e-02 1.284524e-01 1.000000e-03
+      vertex -8.466648e-02 1.238208e-01 1.000000e-03
+      vertex -7.000010e-02 1.326649e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 9.159719e-02 1.187853e-01 1.000000e-03
+      vertex -8.466648e-02 1.238208e-01 1.000000e-03
+      vertex 7.745962e-02 1.284524e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 9.159719e-02 1.187853e-01 1.000000e-03
+      vertex -9.822911e-02 1.133624e-01 1.000000e-03
+      vertex -8.466648e-02 1.238208e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.045406e-01 1.075698e-01 1.000000e-03
+      vertex -9.822911e-02 1.133624e-01 1.000000e-03
+      vertex 9.159719e-02 1.187853e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.045406e-01 1.075698e-01 1.000000e-03
+      vertex -1.105112e-01 1.014262e-01 1.000000e-03
+      vertex -9.822911e-02 1.133624e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.161212e-01 9.495187e-02 1.000000e-03
+      vertex -1.105112e-01 1.014262e-01 1.000000e-03
+      vertex 1.045406e-01 1.075698e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.161212e-01 9.495187e-02 1.000000e-03
+      vertex -1.213525e-01 8.816779e-02 1.000000e-03
+      vertex -1.105112e-01 1.014262e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.261880e-01 8.109612e-02 1.000000e-03
+      vertex -1.213525e-01 8.816779e-02 1.000000e-03
+      vertex 1.161212e-01 9.495187e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.261880e-01 8.109612e-02 1.000000e-03
+      vertex -1.306119e-01 7.375994e-02 1.000000e-03
+      vertex -1.213525e-01 8.816779e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.346098e-01 6.618317e-02 1.000000e-03
+      vertex -1.306119e-01 7.375994e-02 1.000000e-03
+      vertex 1.261880e-01 8.109612e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.346098e-01 6.618317e-02 1.000000e-03
+      vertex -1.381685e-01 5.839052e-02 1.000000e-03
+      vertex -1.306119e-01 7.375994e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.412767e-01 5.040741e-02 1.000000e-03
+      vertex -1.381685e-01 5.839052e-02 1.000000e-03
+      vertex 1.346098e-01 6.618317e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.412767e-01 5.040741e-02 1.000000e-03
+      vertex -1.439240e-01 4.225988e-02 1.000000e-03
+      vertex -1.381685e-01 5.839052e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.461018e-01 3.397451e-02 1.000000e-03
+      vertex -1.439240e-01 4.225988e-02 1.000000e-03
+      vertex 1.412767e-01 5.040741e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.461018e-01 3.397451e-02 1.000000e-03
+      vertex -1.478031e-01 2.557833e-02 1.000000e-03
+      vertex -1.439240e-01 4.225988e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.490223e-01 1.709871e-02 1.000000e-03
+      vertex -1.478031e-01 2.557833e-02 1.000000e-03
+      vertex 1.461018e-01 3.397451e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.490223e-01 1.709871e-02 1.000000e-03
+      vertex -1.497554e-01 8.563322e-03 1.000000e-03
+      vertex -1.478031e-01 2.557833e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+      vertex -1.497554e-01 8.563322e-03 1.000000e-03
+      vertex 1.490223e-01 1.709871e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.283625e-02 -1.494498e-01 1.000000e-03
+      vertex -4.283408e-03 -1.499388e-01 1.000000e-03
+      vertex -2.134722e-02 -1.484732e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+      vertex -1.500000e-01 -1.836970e-17 1.000000e-03
+      vertex -1.497554e-01 8.563322e-03 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+      vertex -1.497554e-01 -8.563322e-03 1.000000e-03
+      vertex -1.500000e-01 -1.836970e-17 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.490223e-01 -1.709871e-02 1.000000e-03
+      vertex -1.497554e-01 -8.563322e-03 1.000000e-03
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.490223e-01 -1.709871e-02 1.000000e-03
+      vertex -1.478031e-01 -2.557833e-02 1.000000e-03
+      vertex -1.497554e-01 -8.563322e-03 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.461018e-01 -3.397451e-02 1.000000e-03
+      vertex -1.478031e-01 -2.557833e-02 1.000000e-03
+      vertex 1.490223e-01 -1.709871e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.461018e-01 -3.397451e-02 1.000000e-03
+      vertex -1.439240e-01 -4.225988e-02 1.000000e-03
+      vertex -1.478031e-01 -2.557833e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.412767e-01 -5.040741e-02 1.000000e-03
+      vertex -1.439240e-01 -4.225988e-02 1.000000e-03
+      vertex 1.461018e-01 -3.397451e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.412767e-01 -5.040741e-02 1.000000e-03
+      vertex -1.381685e-01 -5.839052e-02 1.000000e-03
+      vertex -1.439240e-01 -4.225988e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.346098e-01 -6.618317e-02 1.000000e-03
+      vertex -1.381685e-01 -5.839052e-02 1.000000e-03
+      vertex 1.412767e-01 -5.040741e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.346098e-01 -6.618317e-02 1.000000e-03
+      vertex -1.306119e-01 -7.375994e-02 1.000000e-03
+      vertex -1.381685e-01 -5.839052e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.261880e-01 -8.109612e-02 1.000000e-03
+      vertex -1.306119e-01 -7.375994e-02 1.000000e-03
+      vertex 1.346098e-01 -6.618317e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.261880e-01 -8.109612e-02 1.000000e-03
+      vertex -1.213525e-01 -8.816779e-02 1.000000e-03
+      vertex -1.306119e-01 -7.375994e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.161212e-01 -9.495187e-02 1.000000e-03
+      vertex -1.213525e-01 -8.816779e-02 1.000000e-03
+      vertex 1.261880e-01 -8.109612e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.161212e-01 -9.495187e-02 1.000000e-03
+      vertex -1.105112e-01 -1.014262e-01 1.000000e-03
+      vertex -1.213525e-01 -8.816779e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.045406e-01 -1.075698e-01 1.000000e-03
+      vertex -1.105112e-01 -1.014262e-01 1.000000e-03
+      vertex 1.161212e-01 -9.495187e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.045406e-01 -1.075698e-01 1.000000e-03
+      vertex -9.822911e-02 -1.133624e-01 1.000000e-03
+      vertex -1.105112e-01 -1.014262e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 9.159719e-02 -1.187853e-01 1.000000e-03
+      vertex -9.822911e-02 -1.133624e-01 1.000000e-03
+      vertex 1.045406e-01 -1.075698e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 9.159719e-02 -1.187853e-01 1.000000e-03
+      vertex -8.466648e-02 -1.238208e-01 1.000000e-03
+      vertex -9.822911e-02 -1.133624e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 7.745962e-02 -1.284524e-01 1.000000e-03
+      vertex -8.466648e-02 -1.238208e-01 1.000000e-03
+      vertex 9.159719e-02 -1.187853e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 7.745962e-02 -1.284524e-01 1.000000e-03
+      vertex -7.000010e-02 -1.326649e-01 1.000000e-03
+      vertex -8.466648e-02 -1.238208e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 6.231225e-02 -1.364448e-01 1.000000e-03
+      vertex -7.000010e-02 -1.326649e-01 1.000000e-03
+      vertex 7.745962e-02 -1.284524e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 6.231225e-02 -1.364448e-01 1.000000e-03
+      vertex -5.442116e-02 -1.397796e-01 1.000000e-03
+      vertex -7.000010e-02 -1.326649e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.635255e-02 -1.426585e-01 1.000000e-03
+      vertex -5.442116e-02 -1.397796e-01 1.000000e-03
+      vertex 6.231225e-02 -1.364448e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.635255e-02 -1.426585e-01 1.000000e-03
+      vertex -3.813275e-02 -1.450720e-01 1.000000e-03
+      vertex -5.442116e-02 -1.397796e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.978857e-02 -1.470124e-01 1.000000e-03
+      vertex -3.813275e-02 -1.450720e-01 1.000000e-03
+      vertex 4.635255e-02 -1.426585e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.978857e-02 -1.470124e-01 1.000000e-03
+      vertex -2.134722e-02 -1.484732e-01 1.000000e-03
+      vertex -3.813275e-02 -1.450720e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.283625e-02 -1.494498e-01 1.000000e-03
+      vertex -2.134722e-02 -1.484732e-01 1.000000e-03
+      vertex 2.978857e-02 -1.470124e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.994564e-01 -1.902960e-02 0.000000e+00
+    outer loop
+      vertex -1.500000e-01 1.836970e-17 3.010000e-01
+      vertex -1.500000e-01 -1.836970e-17 1.000000e-03
+      vertex -1.497554e-01 -8.563322e-03 3.010000e-01
+    endloop
+  endfacet
+  facet normal -9.994564e-01 1.902960e-02 0.000000e+00
+    outer loop
+      vertex -1.497554e-01 8.563322e-03 1.000000e-03
+      vertex -1.500000e-01 -1.836970e-17 1.000000e-03
+      vertex -1.500000e-01 1.836970e-17 3.010000e-01
+    endloop
+  endfacet
+  facet normal -9.989128e-01 -3.805921e-02 0.000000e+00
+    outer loop
+      vertex -1.497554e-01 -8.563322e-03 1.000000e-03
+      vertex -1.497554e-01 -8.563322e-03 3.010000e-01
+      vertex -1.500000e-01 -1.836970e-17 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.940307e-01 -9.489994e-02 0.000000e+00
+    outer loop
+      vertex -1.478031e-01 -2.557833e-02 1.000000e-03
+      vertex -1.497554e-01 -8.563322e-03 3.010000e-01
+      vertex -1.497554e-01 -8.563322e-03 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.896922e-01 -1.327111e-01 0.000000e+00
+    outer loop
+      vertex -1.478031e-01 -2.557833e-02 1.000000e-03
+      vertex -1.478031e-01 -2.557833e-02 3.010000e-01
+      vertex -1.497554e-01 -8.563322e-03 3.010000e-01
+    endloop
+  endfacet
+  facet normal -9.767335e-01 -2.075923e-01 0.000000e+00
+    outer loop
+      vertex -1.439240e-01 -4.225988e-02 1.000000e-03
+      vertex -1.478031e-01 -2.557833e-02 3.010000e-01
+      vertex -1.478031e-01 -2.557833e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.681132e-01 -2.446624e-01 0.000000e+00
+    outer loop
+      vertex -1.439240e-01 -4.225988e-02 1.000000e-03
+      vertex -1.439240e-01 -4.225988e-02 3.010000e-01
+      vertex -1.478031e-01 -2.557833e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal -9.467032e-01 -3.175784e-01 0.000000e+00
+    outer loop
+      vertex -1.381685e-01 -5.839052e-02 1.000000e-03
+      vertex -1.439240e-01 -4.225988e-02 3.010000e-01
+      vertex -1.439240e-01 -4.225988e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.339134e-01 -3.534242e-01 0.000000e+00
+    outer loop
+      vertex -1.381685e-01 -5.839052e-02 1.000000e-03
+      vertex -1.381685e-01 -5.839052e-02 3.010000e-01
+      vertex -1.439240e-01 -4.225988e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal -9.043310e-01 -4.234244e-01 0.000000e+00
+    outer loop
+      vertex -1.306119e-01 -7.375994e-02 1.000000e-03
+      vertex -1.381685e-01 -5.839052e-02 3.010000e-01
+      vertex -1.381685e-01 -5.839052e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -8.875386e-01 -4.575787e-01 0.000000e+00
+    outer loop
+      vertex -1.306119e-01 -7.375994e-02 1.000000e-03
+      vertex -1.306119e-01 -7.375994e-02 3.010000e-01
+      vertex -1.381685e-01 -5.839052e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal -8.501697e-01 -5.237504e-01 0.000000e+00
+    outer loop
+      vertex -1.213525e-01 -8.816779e-02 1.000000e-03
+      vertex -1.306119e-01 -7.375994e-02 3.010000e-01
+      vertex -1.306119e-01 -7.375994e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -8.295934e-01 -5.557678e-01 0.000000e+00
+    outer loop
+      vertex -1.213525e-01 -8.816779e-02 1.000000e-03
+      vertex -1.213525e-01 -8.816779e-02 3.010000e-01
+      vertex -1.306119e-01 -7.375994e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal -7.849250e-01 -6.172485e-01 0.000000e+00
+    outer loop
+      vertex -1.105112e-01 -1.014262e-01 1.000000e-03
+      vertex -1.213525e-01 -8.816779e-02 3.010000e-01
+      vertex -1.213525e-01 -8.816779e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -7.608331e-01 -6.467116e-01 0.000000e+00
+    outer loop
+      vertex -1.105112e-01 -1.014262e-01 1.000000e-03
+      vertex -1.105112e-01 -1.014262e-01 3.010000e-01
+      vertex -1.213525e-01 -8.816779e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal -7.094476e-01 -7.026998e-01 0.000000e+00
+    outer loop
+      vertex -9.822911e-02 -1.133624e-01 1.000000e-03
+      vertex -1.105112e-01 -1.014262e-01 3.010000e-01
+      vertex -1.105112e-01 -1.014262e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -6.821542e-01 -7.292247e-01 0.000000e+00
+    outer loop
+      vertex -9.822911e-02 -1.133624e-01 1.000000e-03
+      vertex -9.822911e-02 -1.133624e-01 3.010000e-01
+      vertex -1.105112e-01 -1.014262e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -6.247216e-01 -7.789903e-01 0.000000e+00
+    outer loop
+      vertex -8.466648e-02 -1.238208e-01 1.000000e-03
+      vertex -9.822911e-02 -1.133624e-01 3.010000e-01
+      vertex -9.822911e-02 -1.133624e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -5.945824e-01 -8.022311e-01 0.000000e+00
+    outer loop
+      vertex -8.466648e-02 -1.238208e-01 1.000000e-03
+      vertex -8.466648e-02 -1.238208e-01 3.010000e-01
+      vertex -9.822911e-02 -1.133624e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -5.318512e-01 -8.451255e-01 0.000000e+00
+    outer loop
+      vertex -7.000010e-02 -1.326649e-01 1.000000e-03
+      vertex -8.466648e-02 -1.238208e-01 3.010000e-01
+      vertex -8.466648e-02 -1.238208e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -4.992593e-01 -8.647792e-01 0.000000e+00
+    outer loop
+      vertex -7.000010e-02 -1.326649e-01 1.000000e-03
+      vertex -7.000010e-02 -1.326649e-01 3.010000e-01
+      vertex -8.466648e-02 -1.238208e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -4.320475e-01 -9.002433e-01 0.000000e+00
+    outer loop
+      vertex -5.442116e-02 -1.397796e-01 1.000000e-03
+      vertex -7.000010e-02 -1.326649e-01 3.010000e-01
+      vertex -7.000010e-02 -1.326649e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -3.974276e-01 -9.160536e-01 0.000000e+00
+    outer loop
+      vertex -5.442116e-02 -1.397796e-01 1.000000e-03
+      vertex -5.442116e-02 -1.397796e-01 3.010000e-01
+      vertex -7.000010e-02 -1.326649e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -3.266113e-01 -9.436250e-01 0.000000e+00
+    outer loop
+      vertex -3.813275e-02 -1.450720e-01 1.000000e-03
+      vertex -5.442116e-02 -1.397796e-01 3.010000e-01
+      vertex -5.442116e-02 -1.397796e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -2.904148e-01 -9.553859e-01 0.000000e+00
+    outer loop
+      vertex -3.813275e-02 -1.450720e-01 1.000000e-03
+      vertex -3.813275e-02 -1.450720e-01 3.010000e-01
+      vertex -5.442116e-02 -1.397796e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -2.169172e-01 -9.747050e-01 0.000000e+00
+    outer loop
+      vertex -2.134722e-02 -1.484732e-01 1.000000e-03
+      vertex -3.813275e-02 -1.450720e-01 3.010000e-01
+      vertex -3.813275e-02 -1.450720e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -1.796160e-01 -9.822633e-01 0.000000e+00
+    outer loop
+      vertex -2.134722e-02 -1.484732e-01 1.000000e-03
+      vertex -2.134722e-02 -1.484732e-01 3.010000e-01
+      vertex -3.813275e-02 -1.450720e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -1.043952e-01 -9.930784e-01 0.000000e+00
+    outer loop
+      vertex -4.283408e-03 -1.499388e-01 1.000000e-03
+      vertex -2.134722e-02 -1.484732e-01 3.010000e-01
+      vertex -2.134722e-02 -1.484732e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -6.647564e-02 -9.963353e-01 0.000000e+00
+    outer loop
+      vertex -4.283408e-03 -1.499388e-01 1.000000e-03
+      vertex -4.283408e-03 -1.499388e-01 3.010000e-01
+      vertex -2.134722e-02 -1.484732e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 9.487635e-03 -9.985054e-01 0.000000e+00
+    outer loop
+      vertex 1.283625e-02 -1.494498e-01 1.000000e-03
+      vertex -4.283408e-03 -1.499388e-01 3.010000e-01
+      vertex -4.283408e-03 -1.499388e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 4.753132e-02 -9.974186e-01 0.000000e+00
+    outer loop
+      vertex 1.283625e-02 -1.494498e-01 1.000000e-03
+      vertex 1.283625e-02 -1.494498e-01 3.010000e-01
+      vertex -4.283408e-03 -1.499388e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 1.232468e-01 -9.909154e-01 0.000000e+00
+    outer loop
+      vertex 2.978857e-02 -1.470124e-01 1.000000e-03
+      vertex 1.283625e-02 -1.494498e-01 3.010000e-01
+      vertex 1.283625e-02 -1.494498e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 1.609187e-01 -9.854990e-01 0.000000e+00
+    outer loop
+      vertex 2.978857e-02 -1.470124e-01 1.000000e-03
+      vertex 2.978857e-02 -1.470124e-01 3.010000e-01
+      vertex 1.283625e-02 -1.494498e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 2.353993e-01 -9.704072e-01 0.000000e+00
+    outer loop
+      vertex 4.635255e-02 -1.426585e-01 1.000000e-03
+      vertex 2.978857e-02 -1.470124e-01 3.010000e-01
+      vertex 2.978857e-02 -1.470124e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 2.722082e-01 -9.607319e-01 0.000000e+00
+    outer loop
+      vertex 4.635255e-02 -1.426585e-01 1.000000e-03
+      vertex 4.635255e-02 -1.426585e-01 3.010000e-01
+      vertex 2.978857e-02 -1.470124e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 3.444830e-01 -9.372483e-01 0.000000e+00
+    outer loop
+      vertex 6.231225e-02 -1.364448e-01 1.000000e-03
+      vertex 4.635255e-02 -1.426585e-01 3.010000e-01
+      vertex 4.635255e-02 -1.426585e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 3.799490e-01 -9.234402e-01 0.000000e+00
+    outer loop
+      vertex 6.231225e-02 -1.364448e-01 1.000000e-03
+      vertex 6.231225e-02 -1.364448e-01 3.010000e-01
+      vertex 4.635255e-02 -1.426585e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 4.490758e-01 -8.918710e-01 0.000000e+00
+    outer loop
+      vertex 7.745962e-02 -1.284524e-01 1.000000e-03
+      vertex 6.231225e-02 -1.364448e-01 3.010000e-01
+      vertex 6.231225e-02 -1.364448e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 4.827367e-01 -8.741100e-01 0.000000e+00
+    outer loop
+      vertex 7.745962e-02 -1.284524e-01 1.000000e-03
+      vertex 7.745962e-02 -1.284524e-01 3.010000e-01
+      vertex 6.231225e-02 -1.364448e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 5.478143e-01 -8.348668e-01 0.000000e+00
+    outer loop
+      vertex 9.159719e-02 -1.187853e-01 1.000000e-03
+      vertex 7.745962e-02 -1.284524e-01 3.010000e-01
+      vertex 7.745962e-02 -1.284524e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 5.792311e-01 -8.133845e-01 0.000000e+00
+    outer loop
+      vertex 9.159719e-02 -1.187853e-01 1.000000e-03
+      vertex 9.159719e-02 -1.187853e-01 3.010000e-01
+      vertex 7.745962e-02 -1.284524e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 6.394112e-01 -7.669787e-01 0.000000e+00
+    outer loop
+      vertex 1.045406e-01 -1.075698e-01 1.000000e-03
+      vertex 9.159719e-02 -1.187853e-01 3.010000e-01
+      vertex 9.159719e-02 -1.187853e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 6.681743e-01 -7.420552e-01 0.000000e+00
+    outer loop
+      vertex 1.045406e-01 -1.075698e-01 1.000000e-03
+      vertex 1.045406e-01 -1.075698e-01 3.010000e-01
+      vertex 9.159719e-02 -1.187853e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 7.226722e-01 -6.890920e-01 0.000000e+00
+    outer loop
+      vertex 1.161212e-01 -9.495187e-02 1.000000e-03
+      vertex 1.045406e-01 -1.075698e-01 3.010000e-01
+      vertex 1.045406e-01 -1.075698e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 7.484069e-01 -6.610522e-01 0.000000e+00
+    outer loop
+      vertex 1.161212e-01 -9.495187e-02 1.000000e-03
+      vertex 1.161212e-01 -9.495187e-02 3.010000e-01
+      vertex 1.045406e-01 -1.075698e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 7.965122e-01 -6.022220e-01 0.000000e+00
+    outer loop
+      vertex 1.261880e-01 -8.109612e-02 1.000000e-03
+      vertex 1.161212e-01 -9.495187e-02 3.010000e-01
+      vertex 1.161212e-01 -9.495187e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 8.188829e-01 -5.714314e-01 0.000000e+00
+    outer loop
+      vertex 1.261880e-01 -8.109612e-02 1.000000e-03
+      vertex 1.261880e-01 -8.109612e-02 3.010000e-01
+      vertex 1.161212e-01 -9.495187e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 8.599685e-01 -5.075009e-01 0.000000e+00
+    outer loop
+      vertex 1.346098e-01 -6.618317e-02 1.000000e-03
+      vertex 1.261880e-01 -8.109612e-02 3.010000e-01
+      vertex 1.261880e-01 -8.109612e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 8.786834e-01 -4.743610e-01 0.000000e+00
+    outer loop
+      vertex 1.346098e-01 -6.618317e-02 1.000000e-03
+      vertex 1.346098e-01 -6.618317e-02 3.010000e-01
+      vertex 1.261880e-01 -8.109612e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 9.122137e-01 -4.061638e-01 0.000000e+00
+    outer loop
+      vertex 1.412767e-01 -5.040741e-02 1.000000e-03
+      vertex 1.346098e-01 -6.618317e-02 3.010000e-01
+      vertex 1.346098e-01 -6.618317e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.270291e-01 -3.711066e-01 0.000000e+00
+    outer loop
+      vertex 1.412767e-01 -5.040741e-02 1.000000e-03
+      vertex 1.412767e-01 -5.040741e-02 3.010000e-01
+      vertex 1.346098e-01 -6.618317e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 9.525669e-01 -2.995318e-01 0.000000e+00
+    outer loop
+      vertex 1.461018e-01 -3.397451e-02 1.000000e-03
+      vertex 1.412767e-01 -5.040741e-02 3.010000e-01
+      vertex 1.412767e-01 -5.040741e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.632894e-01 -2.630143e-01 0.000000e+00
+    outer loop
+      vertex 1.461018e-01 -3.397451e-02 1.000000e-03
+      vertex 1.461018e-01 -3.397451e-02 3.010000e-01
+      vertex 1.412767e-01 -5.040741e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 9.805018e-01 -1.889950e-01 0.000000e+00
+    outer loop
+      vertex 1.490223e-01 -1.709871e-02 1.000000e-03
+      vertex 1.461018e-01 -3.397451e-02 3.010000e-01
+      vertex 1.461018e-01 -3.397451e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.869918e-01 -1.514932e-01 0.000000e+00
+    outer loop
+      vertex 1.490223e-01 -1.709871e-02 1.000000e-03
+      vertex 1.490223e-01 -1.709871e-02 3.010000e-01
+      vertex 1.461018e-01 -3.397451e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 9.956545e-01 -7.599428e-02 0.000000e+00
+    outer loop
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+      vertex 1.490223e-01 -1.709871e-02 3.010000e-01
+      vertex 1.490223e-01 -1.709871e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.978272e-01 -3.799714e-02 0.000000e+00
+    outer loop
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+      vertex 1.500000e-01 0.000000e+00 3.010000e-01
+      vertex 1.490223e-01 -1.709871e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 9.978272e-01 3.799714e-02 0.000000e+00
+    outer loop
+      vertex 1.490223e-01 1.709871e-02 1.000000e-03
+      vertex 1.500000e-01 0.000000e+00 3.010000e-01
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.956545e-01 7.599428e-02 0.000000e+00
+    outer loop
+      vertex 1.490223e-01 1.709871e-02 1.000000e-03
+      vertex 1.490223e-01 1.709871e-02 3.010000e-01
+      vertex 1.500000e-01 0.000000e+00 3.010000e-01
+    endloop
+  endfacet
+  facet normal 9.869918e-01 1.514932e-01 0.000000e+00
+    outer loop
+      vertex 1.461018e-01 3.397451e-02 1.000000e-03
+      vertex 1.490223e-01 1.709871e-02 3.010000e-01
+      vertex 1.490223e-01 1.709871e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.805018e-01 1.889950e-01 0.000000e+00
+    outer loop
+      vertex 1.461018e-01 3.397451e-02 1.000000e-03
+      vertex 1.461018e-01 3.397451e-02 3.010000e-01
+      vertex 1.490223e-01 1.709871e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 9.632894e-01 2.630143e-01 0.000000e+00
+    outer loop
+      vertex 1.412767e-01 5.040741e-02 1.000000e-03
+      vertex 1.461018e-01 3.397451e-02 3.010000e-01
+      vertex 1.461018e-01 3.397451e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.525669e-01 2.995318e-01 0.000000e+00
+    outer loop
+      vertex 1.412767e-01 5.040741e-02 1.000000e-03
+      vertex 1.412767e-01 5.040741e-02 3.010000e-01
+      vertex 1.461018e-01 3.397451e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 9.270290e-01 3.711066e-01 0.000000e+00
+    outer loop
+      vertex 1.346098e-01 6.618317e-02 1.000000e-03
+      vertex 1.412767e-01 5.040741e-02 3.010000e-01
+      vertex 1.412767e-01 5.040741e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.122137e-01 4.061638e-01 0.000000e+00
+    outer loop
+      vertex 1.346098e-01 6.618317e-02 1.000000e-03
+      vertex 1.346098e-01 6.618317e-02 3.010000e-01
+      vertex 1.412767e-01 5.040741e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 8.786835e-01 4.743610e-01 0.000000e+00
+    outer loop
+      vertex 1.261880e-01 8.109612e-02 1.000000e-03
+      vertex 1.346098e-01 6.618317e-02 3.010000e-01
+      vertex 1.346098e-01 6.618317e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 8.599685e-01 5.075009e-01 0.000000e+00
+    outer loop
+      vertex 1.261880e-01 8.109612e-02 1.000000e-03
+      vertex 1.261880e-01 8.109612e-02 3.010000e-01
+      vertex 1.346098e-01 6.618317e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 8.188829e-01 5.714314e-01 0.000000e+00
+    outer loop
+      vertex 1.161212e-01 9.495187e-02 1.000000e-03
+      vertex 1.261880e-01 8.109612e-02 3.010000e-01
+      vertex 1.261880e-01 8.109612e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 7.965123e-01 6.022219e-01 0.000000e+00
+    outer loop
+      vertex 1.161212e-01 9.495187e-02 1.000000e-03
+      vertex 1.161212e-01 9.495187e-02 3.010000e-01
+      vertex 1.261880e-01 8.109612e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 7.484069e-01 6.610522e-01 0.000000e+00
+    outer loop
+      vertex 1.045406e-01 1.075698e-01 1.000000e-03
+      vertex 1.161212e-01 9.495187e-02 3.010000e-01
+      vertex 1.161212e-01 9.495187e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 7.226722e-01 6.890920e-01 0.000000e+00
+    outer loop
+      vertex 1.045406e-01 1.075698e-01 1.000000e-03
+      vertex 1.045406e-01 1.075698e-01 3.010000e-01
+      vertex 1.161212e-01 9.495187e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal 6.681743e-01 7.420552e-01 0.000000e+00
+    outer loop
+      vertex 9.159719e-02 1.187853e-01 1.000000e-03
+      vertex 1.045406e-01 1.075698e-01 3.010000e-01
+      vertex 1.045406e-01 1.075698e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 6.394111e-01 7.669787e-01 0.000000e+00
+    outer loop
+      vertex 9.159719e-02 1.187853e-01 1.000000e-03
+      vertex 9.159719e-02 1.187853e-01 3.010000e-01
+      vertex 1.045406e-01 1.075698e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 5.792311e-01 8.133845e-01 0.000000e+00
+    outer loop
+      vertex 7.745962e-02 1.284524e-01 1.000000e-03
+      vertex 9.159719e-02 1.187853e-01 3.010000e-01
+      vertex 9.159719e-02 1.187853e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 5.478143e-01 8.348668e-01 0.000000e+00
+    outer loop
+      vertex 7.745962e-02 1.284524e-01 1.000000e-03
+      vertex 7.745962e-02 1.284524e-01 3.010000e-01
+      vertex 9.159719e-02 1.187853e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 4.827367e-01 8.741100e-01 0.000000e+00
+    outer loop
+      vertex 6.231225e-02 1.364448e-01 1.000000e-03
+      vertex 7.745962e-02 1.284524e-01 3.010000e-01
+      vertex 7.745962e-02 1.284524e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 4.490758e-01 8.918710e-01 0.000000e+00
+    outer loop
+      vertex 6.231225e-02 1.364448e-01 1.000000e-03
+      vertex 6.231225e-02 1.364448e-01 3.010000e-01
+      vertex 7.745962e-02 1.284524e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 3.799490e-01 9.234402e-01 0.000000e+00
+    outer loop
+      vertex 4.635255e-02 1.426585e-01 1.000000e-03
+      vertex 6.231225e-02 1.364448e-01 3.010000e-01
+      vertex 6.231225e-02 1.364448e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 3.444830e-01 9.372484e-01 0.000000e+00
+    outer loop
+      vertex 4.635255e-02 1.426585e-01 1.000000e-03
+      vertex 4.635255e-02 1.426585e-01 3.010000e-01
+      vertex 6.231225e-02 1.364448e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 2.722082e-01 9.607319e-01 0.000000e+00
+    outer loop
+      vertex 2.978857e-02 1.470124e-01 1.000000e-03
+      vertex 4.635255e-02 1.426585e-01 3.010000e-01
+      vertex 4.635255e-02 1.426585e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 2.353993e-01 9.704072e-01 0.000000e+00
+    outer loop
+      vertex 2.978857e-02 1.470124e-01 1.000000e-03
+      vertex 2.978857e-02 1.470124e-01 3.010000e-01
+      vertex 4.635255e-02 1.426585e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 1.609187e-01 9.854990e-01 0.000000e+00
+    outer loop
+      vertex 1.283625e-02 1.494498e-01 1.000000e-03
+      vertex 2.978857e-02 1.470124e-01 3.010000e-01
+      vertex 2.978857e-02 1.470124e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 1.232468e-01 9.909154e-01 0.000000e+00
+    outer loop
+      vertex 1.283625e-02 1.494498e-01 1.000000e-03
+      vertex 1.283625e-02 1.494498e-01 3.010000e-01
+      vertex 2.978857e-02 1.470124e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal 4.753132e-02 9.974186e-01 0.000000e+00
+    outer loop
+      vertex -4.283408e-03 1.499388e-01 1.000000e-03
+      vertex 1.283625e-02 1.494498e-01 3.010000e-01
+      vertex 1.283625e-02 1.494498e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.487635e-03 9.985054e-01 0.000000e+00
+    outer loop
+      vertex -4.283408e-03 1.499388e-01 1.000000e-03
+      vertex -4.283408e-03 1.499388e-01 3.010000e-01
+      vertex 1.283625e-02 1.494498e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -6.647564e-02 9.963353e-01 0.000000e+00
+    outer loop
+      vertex -2.134722e-02 1.484732e-01 1.000000e-03
+      vertex -4.283408e-03 1.499388e-01 3.010000e-01
+      vertex -4.283408e-03 1.499388e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -1.043952e-01 9.930784e-01 0.000000e+00
+    outer loop
+      vertex -2.134722e-02 1.484732e-01 1.000000e-03
+      vertex -2.134722e-02 1.484732e-01 3.010000e-01
+      vertex -4.283408e-03 1.499388e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -1.796160e-01 9.822633e-01 0.000000e+00
+    outer loop
+      vertex -3.813275e-02 1.450720e-01 1.000000e-03
+      vertex -2.134722e-02 1.484732e-01 3.010000e-01
+      vertex -2.134722e-02 1.484732e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -2.169172e-01 9.747050e-01 0.000000e+00
+    outer loop
+      vertex -3.813275e-02 1.450720e-01 1.000000e-03
+      vertex -3.813275e-02 1.450720e-01 3.010000e-01
+      vertex -2.134722e-02 1.484732e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -2.904148e-01 9.553859e-01 0.000000e+00
+    outer loop
+      vertex -5.442116e-02 1.397796e-01 1.000000e-03
+      vertex -3.813275e-02 1.450720e-01 3.010000e-01
+      vertex -3.813275e-02 1.450720e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -3.266113e-01 9.436250e-01 0.000000e+00
+    outer loop
+      vertex -5.442116e-02 1.397796e-01 1.000000e-03
+      vertex -5.442116e-02 1.397796e-01 3.010000e-01
+      vertex -3.813275e-02 1.450720e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -3.974276e-01 9.160536e-01 0.000000e+00
+    outer loop
+      vertex -7.000010e-02 1.326649e-01 1.000000e-03
+      vertex -5.442116e-02 1.397796e-01 3.010000e-01
+      vertex -5.442116e-02 1.397796e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -4.320475e-01 9.002433e-01 0.000000e+00
+    outer loop
+      vertex -7.000010e-02 1.326649e-01 1.000000e-03
+      vertex -7.000010e-02 1.326649e-01 3.010000e-01
+      vertex -5.442116e-02 1.397796e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -4.992593e-01 8.647792e-01 0.000000e+00
+    outer loop
+      vertex -8.466648e-02 1.238208e-01 1.000000e-03
+      vertex -7.000010e-02 1.326649e-01 3.010000e-01
+      vertex -7.000010e-02 1.326649e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -5.318512e-01 8.451255e-01 0.000000e+00
+    outer loop
+      vertex -8.466648e-02 1.238208e-01 1.000000e-03
+      vertex -8.466648e-02 1.238208e-01 3.010000e-01
+      vertex -7.000010e-02 1.326649e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -5.945824e-01 8.022311e-01 0.000000e+00
+    outer loop
+      vertex -9.822911e-02 1.133624e-01 1.000000e-03
+      vertex -8.466648e-02 1.238208e-01 3.010000e-01
+      vertex -8.466648e-02 1.238208e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -6.247216e-01 7.789903e-01 0.000000e+00
+    outer loop
+      vertex -9.822911e-02 1.133624e-01 1.000000e-03
+      vertex -9.822911e-02 1.133624e-01 3.010000e-01
+      vertex -8.466648e-02 1.238208e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -6.821542e-01 7.292247e-01 0.000000e+00
+    outer loop
+      vertex -1.105112e-01 1.014262e-01 1.000000e-03
+      vertex -9.822911e-02 1.133624e-01 3.010000e-01
+      vertex -9.822911e-02 1.133624e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -7.094477e-01 7.026998e-01 0.000000e+00
+    outer loop
+      vertex -1.105112e-01 1.014262e-01 1.000000e-03
+      vertex -1.105112e-01 1.014262e-01 3.010000e-01
+      vertex -9.822911e-02 1.133624e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -7.608331e-01 6.467116e-01 0.000000e+00
+    outer loop
+      vertex -1.213525e-01 8.816779e-02 1.000000e-03
+      vertex -1.105112e-01 1.014262e-01 3.010000e-01
+      vertex -1.105112e-01 1.014262e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -7.849250e-01 6.172485e-01 0.000000e+00
+    outer loop
+      vertex -1.213525e-01 8.816779e-02 1.000000e-03
+      vertex -1.213525e-01 8.816779e-02 3.010000e-01
+      vertex -1.105112e-01 1.014262e-01 3.010000e-01
+    endloop
+  endfacet
+  facet normal -8.295934e-01 5.557678e-01 0.000000e+00
+    outer loop
+      vertex -1.306119e-01 7.375994e-02 1.000000e-03
+      vertex -1.213525e-01 8.816779e-02 3.010000e-01
+      vertex -1.213525e-01 8.816779e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -8.501697e-01 5.237504e-01 0.000000e+00
+    outer loop
+      vertex -1.306119e-01 7.375994e-02 1.000000e-03
+      vertex -1.306119e-01 7.375994e-02 3.010000e-01
+      vertex -1.213525e-01 8.816779e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal -8.875386e-01 4.575787e-01 0.000000e+00
+    outer loop
+      vertex -1.381685e-01 5.839052e-02 1.000000e-03
+      vertex -1.306119e-01 7.375994e-02 3.010000e-01
+      vertex -1.306119e-01 7.375994e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.043311e-01 4.234244e-01 0.000000e+00
+    outer loop
+      vertex -1.381685e-01 5.839052e-02 1.000000e-03
+      vertex -1.381685e-01 5.839052e-02 3.010000e-01
+      vertex -1.306119e-01 7.375994e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal -9.339134e-01 3.534242e-01 0.000000e+00
+    outer loop
+      vertex -1.439240e-01 4.225988e-02 1.000000e-03
+      vertex -1.381685e-01 5.839052e-02 3.010000e-01
+      vertex -1.381685e-01 5.839052e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.467032e-01 3.175784e-01 0.000000e+00
+    outer loop
+      vertex -1.439240e-01 4.225988e-02 1.000000e-03
+      vertex -1.439240e-01 4.225988e-02 3.010000e-01
+      vertex -1.381685e-01 5.839052e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal -9.681132e-01 2.446624e-01 0.000000e+00
+    outer loop
+      vertex -1.478031e-01 2.557833e-02 1.000000e-03
+      vertex -1.439240e-01 4.225988e-02 3.010000e-01
+      vertex -1.439240e-01 4.225988e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.767335e-01 2.075923e-01 0.000000e+00
+    outer loop
+      vertex -1.478031e-01 2.557833e-02 1.000000e-03
+      vertex -1.478031e-01 2.557833e-02 3.010000e-01
+      vertex -1.439240e-01 4.225988e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal -9.896922e-01 1.327111e-01 0.000000e+00
+    outer loop
+      vertex -1.497554e-01 8.563322e-03 1.000000e-03
+      vertex -1.478031e-01 2.557833e-02 3.010000e-01
+      vertex -1.478031e-01 2.557833e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.940307e-01 9.489994e-02 0.000000e+00
+    outer loop
+      vertex -1.497554e-01 8.563322e-03 1.000000e-03
+      vertex -1.497554e-01 8.563322e-03 3.010000e-01
+      vertex -1.478031e-01 2.557833e-02 3.010000e-01
+    endloop
+  endfacet
+  facet normal -9.989128e-01 3.805921e-02 0.000000e+00
+    outer loop
+      vertex -1.500000e-01 1.836970e-17 3.010000e-01
+      vertex -1.497554e-01 8.563322e-03 3.010000e-01
+      vertex -1.497554e-01 8.563322e-03 1.000000e-03
+    endloop
+  endfacet
+endsolid component1:pipeout
diff --git a/benchmarks/stepout/stepout.py b/benchmarks/stepout/stepout.py
new file mode 100644
index 0000000..5f65270
--- /dev/null
+++ b/benchmarks/stepout/stepout.py
@@ -0,0 +1,353 @@
+import os, sys
+import numpy as np
+import pyvista as pv
+import matplotlib.pyplot as plt
+from scipy.constants import c 
+
+sys.path.append('../../')
+
+from solverFIT3D import SolverFIT3D
+from gridFIT3D import GridFIT3D 
+from wakeSolver import WakeSolver
+
+# ---------- Domain setup ---------
+# Number of mesh cells
+Nx = 67 
+Ny = 67 
+Nz = 72 + 20
+#dt = 5.707829241e-12 # CST
+
+# Embedded boundaries
+stl_pipein = 'pipein.stl' 
+stl_pipeout = 'pipeout.stl'
+stl_taper = 'taper.stl'
+
+# Materials
+stl_solids = {'pipein': stl_pipein, 'pipeout': stl_pipeout, 'taper': stl_taper}
+stl_materials = {'pipein': 'vacuum', 'pipeout': 'vacuum', 'taper': 'vacuum'}
+background = 'pec' # lossy metal [ε_r, µ_r, σ]
+
+# Domain bounds
+surf = pv.read(stl_pipein) + pv.read(stl_pipeout) + pv.read(stl_taper)
+#surf.plot()
+
+xmin, xmax, ymin, ymax, zmin, zmax = surf.bounds
+Lx, Ly, Lz = (xmax-xmin), (ymax-ymin), (zmax-zmin)
+
+# Set grid and geometry
+grid = GridFIT3D(xmin, xmax, ymin, ymax, zmin, zmax, Nx, Ny, Nz, 
+                stl_solids=stl_solids, 
+                stl_materials=stl_materials)
+#grid.inspect()
+
+# ------------ Beam source ----------------
+# Beam parameters
+beta = 1.0          # beam relativistic beta 
+sigmaz = beta*4e-2  # [m] -> multiplied by beta to have f_max cte
+q = 1e-9            # [C]
+xs = 0.             # x source position [m]
+ys = 0.             # y source position [m]
+xt = 0.             # x test position [m]
+yt = 0.             # y test position [m]
+# [DEFAULT] tinj = 8.53*sigmaz/(beta*c)  # injection time offset [s] 
+
+# Simualtion
+wakelength = 10. #[m]
+add_space = 15   # no. cells
+
+wake = WakeSolver(q=q, sigmaz=sigmaz, beta=beta,
+            xsource=xs, ysource=ys, xtest=xt, ytest=yt,
+            add_space=add_space, save=True, logfile=True)
+
+# ----------- Solver & Simulation ----------
+# boundary conditions``
+bc_low=['pec', 'pec', 'pml']
+bc_high=['pec', 'pec', 'pml']
+
+solver = SolverFIT3D(grid, wake, 
+                     bc_low=bc_low, bc_high=bc_high, 
+                     use_stl=True, bg=background)
+# Plot settings
+if not os.path.exists('img/'): os.mkdir('img/')
+plotkw = {'title':'img/Ez', 
+            'add_patch':'cavity', 'patch_alpha':0.3,
+            'vmin':-1e4, 'vmax':1e4,
+            'plane': [int(Nx/2), slice(0, Ny), slice(add_space, -add_space)]}
+
+# Run wakefield time-domain simulation
+run = True
+if run:
+    solver.wakesolve(wakelength=wakelength, add_space=add_space,
+                    plot=False, plot_every=30, save_J=True,
+                    use_etd=False,
+                    **plotkw)
+
+# Run only electromagnetic time-domain simulation
+runEM = False
+if runEM:
+    from sources import Beam
+    beam = Beam(q=q, sigmaz=sigmaz, beta=beta,
+                xsource=xs, ysource=ys)
+
+    solver.emsolve(Nt=500, source=beam, add_space=add_space,
+                    plot=False, plot_every=30, save_J=False,
+                    use_etd=True, **plotkw)
+    
+#-------------- Compare with CST -------------
+
+#--- Longitudinal wake and impedance ---
+plot = False
+if plot:
+    results = 'results/'
+    wake.load_results(results)
+
+    # CST wake
+    cstWP = wake.read_txt('cst/W.txt')
+    cstZ = wake.read_txt('cst/cZ.txt')
+    cstZ[1] = np.abs(cstZ[1]+1.j*cstZ[2])
+    wake.f = np.abs(wake.f)
+
+    fig, ax = plt.subplots(1,2, figsize=[12,4], dpi=150)
+    ax[0].plot(wake.s*1e2, wake.WP, c='r', lw=1.5, alpha=0.8, label='wakis ABC')
+    ax[0].plot(cstWP[0], cstWP[1], c='k', ls='--', lw=1.2, label='CST PEC')
+    ax[0].set_xlabel('s [mm]')
+    ax[0].set_ylabel('Longitudinal wake potential [V/pC]', color='r')
+    ax[0].legend()
+
+    ax[1].plot(wake.f*1e-9, np.abs(wake.Z), c='b', alpha=0.8, lw=1.5, label='wakis ABC')
+    ax[1].plot(cstZ[0], cstZ[1], c='k', ls='--', lw=1.2, label='CST')
+    ax[1].set_xlabel('f [GHz]')
+    ax[1].set_ylabel(r'Longitudinal impedance [Abs][$\Omega$]', color='b')
+    ax[1].legend()
+
+    fig.suptitle('Benchmark with CST Wakefield Solver')
+    fig.tight_layout()
+    fig.savefig(f'{results}benchmarkAbs.png')
+
+    plt.show()
+
+#--- Longitudinal wake and impedance ---
+plot = False
+if plot:
+    results = 'results_pec/'
+    wake.load_results(results)
+
+    # CST wake
+    cstWP = wake.read_txt('cst/W_pec.txt')
+    cstZ = wake.read_txt('cst/Z_pec.txt')
+    wake.f = np.abs(wake.f)
+
+    fig, ax = plt.subplots(1,2, figsize=[12,4], dpi=150)
+    ax[0].plot(wake.s*1e2, wake.WP, c='r', lw=1.5, alpha=0.8, label='wakis PEC')
+    ax[0].plot(cstWP[0], cstWP[1], c='k', ls='--', lw=1.2, label='CST PEC')
+    ax[0].set_xlabel('s [mm]')
+    ax[0].set_ylabel('Longitudinal wake potential [V/pC]', color='r')
+    ax[0].legend()
+
+    ax[1].plot(wake.f*1e-9, np.abs(wake.Z), c='b', alpha=0.8, lw=1.5, label='wakis PEC')
+    ax[1].plot(cstZ[0], cstZ[1], c='k', ls='--', lw=1.2, label='CST')
+    ax[1].set_xlabel('f [GHz]')
+    ax[1].set_ylabel(r'Longitudinal impedance [Abs][$\Omega$]', color='b')
+    ax[1].legend()
+
+    fig.suptitle('Benchmark with CST Wakefield Solver')
+    fig.tight_layout()
+    fig.savefig(f'{results}benchmarkAbs_pec.png')
+
+    plt.show()
+
+#--- Longitudinal wake and impedance ---
+plot = False
+if plot:
+    results = 'results_pml_add15/'
+    wake.load_results(results)
+
+    # CST wake
+    cstWP = wake.read_txt('cst/W.txt')
+    cstZ = wake.read_txt('cst/cZ.txt')
+    cstZ[1] = np.abs(cstZ[1]+1.j*cstZ[2])
+    wake.f = np.abs(wake.f)
+
+    fig, ax = plt.subplots(1,2, figsize=[12,4], dpi=150)
+    ax[0].plot(wake.s*1e2, wake.WP, c='r', lw=1.5, alpha=0.8, label='wakis PML')
+    ax[0].plot(cstWP[0], cstWP[1], c='k', ls='--', lw=1.2, label='CST PML')
+    ax[0].set_xlabel('s [mm]')
+    ax[0].set_ylabel('Longitudinal wake potential [V/pC]', color='r')
+    ax[0].legend()
+
+    ax[1].plot(wake.f*1e-9, np.abs(wake.Z), c='b', alpha=0.8, lw=1.5, label='wakis PML')
+    ax[1].plot(cstZ[0], cstZ[1], c='k', ls='--', lw=1.2, label='CST PML')
+    ax[1].set_xlabel('f [GHz]')
+    ax[1].set_ylabel(r'Longitudinal impedance [Abs][$\Omega$]', color='b')
+    ax[1].legend()
+
+    fig.suptitle('Benchmark with CST Wakefield Solver')
+    fig.tight_layout()
+    fig.savefig(f'{results}benchmarkAbs.png')
+
+    plt.show()
+
+#--- Longitudinal wake and impedance ---
+plot = False
+if plot:
+    results = 'results_pec/'
+    wake.load_results(results)
+    
+    # CST wake
+    cstWP = wake.read_txt('cst/W_pec.txt')
+    cstZ = wake.read_txt('cst/cZ_pec.txt')
+    wake.f = np.abs(wake.f)
+
+    fig, ax = plt.subplots(1,2, figsize=[12,4], dpi=150)
+    ax[0].plot(wake.s*1e2, wake.WP, c='r', lw=1.5, label='wakis PEC')
+    ax[0].plot(cstWP[0], cstWP[1], c='k', ls='--', lw=1.2, label='CST PEC')
+    ax[0].set_xlabel('s [mm]')
+    ax[0].set_ylabel('Longitudinal wake potential [V/pC]', color='r')
+    ax[0].legend()
+
+    ax[1].plot(wake.f*1e-9, np.real(wake.Z), c='b', lw=1.5, label='Re(Z) wakis PEC')
+    ax[1].plot(cstZ[0], cstZ[1], c='k', ls='--', lw=1.2, label='Re(Z) CST')
+    ax[1].plot(wake.f*1e-9, np.imag(wake.Z), c='royalblue', lw=1.5, label='Im(Z) wakis PEC')
+    ax[1].plot(cstZ[0], cstZ[2], c='k', ls=':', lw=1.2, label='Im(Z) CST')
+    ax[1].set_xlabel('f [GHz]')
+    ax[1].set_ylabel(r'Longitudinal impedance [$\Omega$]', color='b')
+    ax[1].legend()
+
+    fig.suptitle('Benchmark with CST Wakefield Solver')
+    fig.tight_layout()
+    fig.savefig(f'{results}benchmarkReIm_pec.png')
+
+    plt.show()
+
+#--- 1d Ez field ---
+plot = True
+if plot:
+    # E field
+    d = wake.read_Ez('results/Ez.h5',return_value=True)
+    #dd = wake.read_Ez('results_pec/Ez.h5',return_value=True)
+    t, z = np.array(d['t']), np.array(d['z'])    
+    dt = t[1]-t[0]
+    steps = list(d.keys())
+
+    # Beam J
+    current = wake.read_Ez('Jz.h5',return_value=True)
+
+    for n, step in enumerate(steps[:1740:20]):
+        fig, ax = plt.subplots(1,1, figsize=[6,4], dpi=150)
+        axx = ax.twinx()  
+
+        ax.plot(z, d[step][1,1,:], c='g', lw=1.5, label=r'Ez(0,0,z) PML')
+        #ax.plot(z, dd[step][1,1,:], c='grey', lw=1.5, label='Ez(0,0,z) FIT | PEC')
+        ax.set_xlabel('z [m]')
+        ax.set_ylabel('$E_z$ field amplitude [V/m]', color='g')
+        ax.set_ylim(-3e3, 3e3)
+        ax.set_xlim(z.min(), z.max())
+        
+        # CST E field
+        try:    
+            cstfiles = sorted(os.listdir('cst/1d/'))
+            cst = wake.read_txt('cst/1d/'+cstfiles[n])
+            ax.plot(cst[0]*1e-2, cst[1], c='k', lw=1.5, ls='--', label=r'Ez(0,0,z) CST | $\sigma$ = 10 S/m')
+        except:
+            pass
+
+        ax.legend(loc=1)
+
+        # charge distribution
+        axx.plot(z, current[step][1,1,:], c='r', lw=1.0, label='lambda λ(z)')
+        axx.set_ylabel(r'$J_z$ beam current [C/m]', color='r')
+        axx.set_ylim(-8e4, 8e4)
+
+        fig.suptitle('timestep='+str(n*20))
+        fig.tight_layout()
+        fig.savefig('img/Ez1d_'+str(n*20).zfill(6)+'.png')
+
+        plt.clf()
+        plt.close(fig)
+
+#-------------- Compare result files -------------
+
+#--- Longitudinal wake and impedance ---
+
+# compare BC
+plot = True
+if plot:
+    # CST wake (PML)
+    cstWP = wake.read_txt('cst/W.txt')
+    cstZ = wake.read_txt('cst/cZ.txt')
+    cstWP_pec = wake.read_txt('cst/W_pec.txt')
+    cstZ_pec = wake.read_txt('cst/cZ_pec.txt')
+
+    fig, ax = plt.subplots(1,2, figsize=[12,4], dpi=150)
+
+    # Wakis wake
+    keys = ['pec', 'pml_add15']
+    res = {}
+    for k in keys:
+        res[k] = wake.copy()
+        res[k].load_results(f'results_{k}/')
+
+    ax[0].plot(res[keys[0]].s, res[keys[0]].WP, c='r', alpha=0.4,  lw=1.0, label='wakis PEC')
+    ax[0].plot(res[keys[1]].s, res[keys[1]].WP, c='r', lw=1.5, label='wakis PML')
+
+    ax[0].plot(cstWP_pec[0]*1e-2, cstWP_pec[1], c='k', ls='--', lw=1, alpha=0.4, label='CST PEC')
+    ax[0].plot(cstWP[0]*1e-2, cstWP[1], c='k', ls='--', lw=1.5, label='CST PML')
+    ax[0].set_xlabel('s [m]')
+    ax[0].set_ylabel('Longitudinal wake potential [V/pC]', color='r')
+    ax[0].legend()
+
+    ax[1].plot(res[keys[0]].f*1e-9, np.real(res[keys[0]].Z), c='b', lw=1.0, alpha=0.4, label='wakis PEC')
+    ax[1].plot(res[keys[1]].f*1e-9, np.real(res[keys[1]].Z), c='b', lw=1.5,  label='wakis PML')
+
+    ax[1].plot(cstZ_pec[0], cstZ_pec[1], c='k', ls='--', alpha=0.4, lw=1, label='CST PEC')
+    ax[1].plot(cstZ[0], cstZ[1], c='k', ls='-', lw=1.5, label='CST PML')
+    ax[1].set_xlabel('f [GHz]')
+    ax[1].set_ylabel(r'Longitudinal impedance [Re][$\Omega$]', color='b')
+    ax[1].legend()
+
+    fig.suptitle('Benchmark with CST Wakefield Solver')
+    fig.tight_layout()
+    fig.savefig('benchmark_BC_pml.png')
+
+    plt.show()
+
+#-------------- Compare .h5 files -------------
+plot = False
+if plot:
+    # E field
+    d1 = wake.read_Ez('EzABC.h5',return_value=True)
+    d2 = wake.read_Ez('EzPEC.h5',return_value=True)
+    d3 = wake.read_Ez('EzPECadd.h5',return_value=True)
+
+    t = np.array(d1['t'])   
+    dt = t[1]-t[0]
+    steps = list(d1.keys())
+
+    # Beam J
+    dd = wake.read_Ez('Jz.h5',return_value=True)
+
+    for n, step in enumerate(steps[:3750:30]):
+        fig, ax = plt.subplots(1,1, figsize=[6,4], dpi=150)
+        axx = ax.twinx()  
+
+        # Beam current
+        axx.plot(np.array(d1['z']), dd[step][1,1,:], c='r', lw=1.0, label='lambda λ(z)')
+        axx.set_ylabel(r'$J_z$ beam current [C/m]', color='r')
+        axx.set_ylim(-7e6, 7e6)
+
+        # E field
+        ax.plot(np.array(d1['z']) , d1[step][1,1,:], c='b', lw=1.5, label='Ez(0,0,z) ABC bc')
+        ax.plot(np.array(d2['z']) , d2[step][1,1,:], c='g', lw=1.5, label='Ez(0,0,z) PEC bc')
+        ax.plot(np.array(d3['z']) , d3[step][1,1,:], c='limegreen', lw=1.5, label='Ez(0,0,z) PEC+addspace 15')
+        ax.set_xlabel('z [m]')
+        ax.set_ylabel(r'$E_z$ field amplitude [V/m]', color='k')
+        ax.set_ylim(-4e4, 4e4)
+        ax.set_xlim(np.array(d1['z']).min(), np.array(d1['z']).max())
+        ax.legend(loc=1)
+
+        fig.suptitle('timestep='+str(n*30))
+        fig.tight_layout()
+        fig.savefig('img/Ez1d_'+str(n*30).zfill(6)+'.png')
+
+        plt.clf()
+        plt.close(fig)
\ No newline at end of file
diff --git a/benchmarks/stepout/taper.stl b/benchmarks/stepout/taper.stl
new file mode 100644
index 0000000..189a6ec
--- /dev/null
+++ b/benchmarks/stepout/taper.stl
@@ -0,0 +1,1626 @@
+solid component1:taper
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 6.366180e-03 -1.498648e-01 1.000000e-03
+      vertex -1.905267e-02 -1.487851e-01 1.000000e-03
+      vertex -6.366180e-03 -1.498648e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.905267e-02 -1.487851e-01 1.000000e-03
+      vertex -1.905267e-02 -1.487851e-01 1.000000e-03
+      vertex 6.366180e-03 -1.498648e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.905267e-02 -1.487851e-01 1.000000e-03
+      vertex -3.160189e-02 -1.466333e-01 1.000000e-03
+      vertex -1.905267e-02 -1.487851e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 3.160189e-02 -1.466333e-01 1.000000e-03
+      vertex -3.160189e-02 -1.466333e-01 1.000000e-03
+      vertex 1.905267e-02 -1.487851e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 3.160189e-02 -1.466333e-01 1.000000e-03
+      vertex -4.392342e-02 -1.434250e-01 1.000000e-03
+      vertex -3.160189e-02 -1.466333e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.392342e-02 -1.434250e-01 1.000000e-03
+      vertex -4.392342e-02 -1.434250e-01 1.000000e-03
+      vertex 3.160189e-02 -1.466333e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.392342e-02 -1.434250e-01 1.000000e-03
+      vertex -5.592847e-02 -1.391833e-01 1.000000e-03
+      vertex -4.392342e-02 -1.434250e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 5.592847e-02 -1.391833e-01 1.000000e-03
+      vertex -5.592847e-02 -1.391833e-01 1.000000e-03
+      vertex 4.392342e-02 -1.434250e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 5.592847e-02 -1.391833e-01 1.000000e-03
+      vertex -6.753056e-02 -1.339389e-01 1.000000e-03
+      vertex -5.592847e-02 -1.391833e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 6.753056e-02 -1.339389e-01 1.000000e-03
+      vertex -6.753056e-02 -1.339389e-01 1.000000e-03
+      vertex 5.592847e-02 -1.391833e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 6.753056e-02 -1.339389e-01 1.000000e-03
+      vertex -7.864609e-02 -1.277294e-01 1.000000e-03
+      vertex -6.753056e-02 -1.339389e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.864609e-02 -1.277294e-01 1.000000e-03
+      vertex -7.864609e-02 -1.277294e-01 1.000000e-03
+      vertex 6.753056e-02 -1.339389e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.864609e-02 -1.277294e-01 1.000000e-03
+      vertex -8.919497e-02 -1.205996e-01 1.000000e-03
+      vertex -7.864609e-02 -1.277294e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 8.919497e-02 -1.205996e-01 1.000000e-03
+      vertex -8.919497e-02 -1.205996e-01 1.000000e-03
+      vertex 7.864609e-02 -1.277294e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 8.919497e-02 -1.205996e-01 1.000000e-03
+      vertex -9.910121e-02 -1.126008e-01 1.000000e-03
+      vertex -8.919497e-02 -1.205996e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 9.910121e-02 -1.126008e-01 1.000000e-03
+      vertex -9.910121e-02 -1.126008e-01 1.000000e-03
+      vertex 8.919497e-02 -1.205996e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 9.910121e-02 -1.126008e-01 1.000000e-03
+      vertex -1.082934e-01 -1.037908e-01 1.000000e-03
+      vertex -9.910121e-02 -1.126008e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.082934e-01 -1.037908e-01 1.000000e-03
+      vertex -1.082934e-01 -1.037908e-01 1.000000e-03
+      vertex 9.910121e-02 -1.126008e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.082934e-01 -1.037908e-01 1.000000e-03
+      vertex -1.167054e-01 -9.423300e-02 1.000000e-03
+      vertex -1.082934e-01 -1.037908e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.167054e-01 -9.423300e-02 1.000000e-03
+      vertex -1.167054e-01 -9.423300e-02 1.000000e-03
+      vertex 1.082934e-01 -1.037908e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.167054e-01 -9.423300e-02 1.000000e-03
+      vertex -1.242764e-01 -8.399622e-02 1.000000e-03
+      vertex -1.167054e-01 -9.423300e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.242764e-01 -8.399622e-02 1.000000e-03
+      vertex -1.242764e-01 -8.399622e-02 1.000000e-03
+      vertex 1.167054e-01 -9.423300e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.242764e-01 -8.399622e-02 1.000000e-03
+      vertex -1.309521e-01 -7.315424e-02 1.000000e-03
+      vertex -1.242764e-01 -8.399622e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.309521e-01 -7.315424e-02 1.000000e-03
+      vertex -1.309521e-01 -7.315424e-02 1.000000e-03
+      vertex 1.242764e-01 -8.399622e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.309521e-01 -7.315424e-02 1.000000e-03
+      vertex -1.366843e-01 -6.178519e-02 1.000000e-03
+      vertex -1.309521e-01 -7.315424e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.366843e-01 -6.178519e-02 1.000000e-03
+      vertex -1.366843e-01 -6.178519e-02 1.000000e-03
+      vertex 1.309521e-01 -7.315424e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.366843e-01 -6.178519e-02 1.000000e-03
+      vertex -1.414316e-01 -4.997097e-02 1.000000e-03
+      vertex -1.366843e-01 -6.178519e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.414316e-01 -4.997097e-02 1.000000e-03
+      vertex -1.414316e-01 -4.997097e-02 1.000000e-03
+      vertex 1.366843e-01 -6.178519e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.414316e-01 -4.997097e-02 1.000000e-03
+      vertex -1.451599e-01 -3.779671e-02 1.000000e-03
+      vertex -1.414316e-01 -4.997097e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.451599e-01 -3.779671e-02 1.000000e-03
+      vertex -1.451599e-01 -3.779671e-02 1.000000e-03
+      vertex 1.414316e-01 -4.997097e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.451599e-01 -3.779671e-02 1.000000e-03
+      vertex -1.478424e-01 -2.535012e-02 1.000000e-03
+      vertex -1.451599e-01 -3.779671e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.478424e-01 -2.535012e-02 1.000000e-03
+      vertex -1.478424e-01 -2.535012e-02 1.000000e-03
+      vertex 1.451599e-01 -3.779671e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.478424e-01 -2.535012e-02 1.000000e-03
+      vertex -1.494596e-01 -1.272089e-02 1.000000e-03
+      vertex -1.478424e-01 -2.535012e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.494596e-01 -1.272089e-02 1.000000e-03
+      vertex -1.494596e-01 -1.272089e-02 1.000000e-03
+      vertex 1.478424e-01 -2.535012e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.494596e-01 -1.272089e-02 1.000000e-03
+      vertex -1.500000e-01 1.836970e-17 1.000000e-03
+      vertex -1.494596e-01 -1.272089e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+      vertex -1.500000e-01 1.836970e-17 1.000000e-03
+      vertex 1.494596e-01 -1.272089e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+      vertex -1.494596e-01 1.272089e-02 1.000000e-03
+      vertex -1.500000e-01 1.836970e-17 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.494596e-01 1.272089e-02 1.000000e-03
+      vertex -1.494596e-01 1.272089e-02 1.000000e-03
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.494596e-01 1.272089e-02 1.000000e-03
+      vertex -1.478424e-01 2.535012e-02 1.000000e-03
+      vertex -1.494596e-01 1.272089e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.478424e-01 2.535012e-02 1.000000e-03
+      vertex -1.478424e-01 2.535012e-02 1.000000e-03
+      vertex 1.494596e-01 1.272089e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.478424e-01 2.535012e-02 1.000000e-03
+      vertex -1.451599e-01 3.779671e-02 1.000000e-03
+      vertex -1.478424e-01 2.535012e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.451599e-01 3.779671e-02 1.000000e-03
+      vertex -1.451599e-01 3.779671e-02 1.000000e-03
+      vertex 1.478424e-01 2.535012e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.451599e-01 3.779671e-02 1.000000e-03
+      vertex -1.414316e-01 4.997097e-02 1.000000e-03
+      vertex -1.451599e-01 3.779671e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.414316e-01 4.997097e-02 1.000000e-03
+      vertex -1.414316e-01 4.997097e-02 1.000000e-03
+      vertex 1.451599e-01 3.779671e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.414316e-01 4.997097e-02 1.000000e-03
+      vertex -1.366843e-01 6.178519e-02 1.000000e-03
+      vertex -1.414316e-01 4.997097e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.366843e-01 6.178519e-02 1.000000e-03
+      vertex -1.366843e-01 6.178519e-02 1.000000e-03
+      vertex 1.414316e-01 4.997097e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.366843e-01 6.178519e-02 1.000000e-03
+      vertex -1.309521e-01 7.315424e-02 1.000000e-03
+      vertex -1.366843e-01 6.178519e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.309521e-01 7.315424e-02 1.000000e-03
+      vertex -1.309521e-01 7.315424e-02 1.000000e-03
+      vertex 1.366843e-01 6.178519e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.309521e-01 7.315424e-02 1.000000e-03
+      vertex -1.242764e-01 8.399622e-02 1.000000e-03
+      vertex -1.309521e-01 7.315424e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.242764e-01 8.399622e-02 1.000000e-03
+      vertex -1.242764e-01 8.399622e-02 1.000000e-03
+      vertex 1.309521e-01 7.315424e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.242764e-01 8.399622e-02 1.000000e-03
+      vertex -1.167054e-01 9.423300e-02 1.000000e-03
+      vertex -1.242764e-01 8.399622e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.167054e-01 9.423300e-02 1.000000e-03
+      vertex -1.167054e-01 9.423300e-02 1.000000e-03
+      vertex 1.242764e-01 8.399622e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.167054e-01 9.423300e-02 1.000000e-03
+      vertex -1.082934e-01 1.037908e-01 1.000000e-03
+      vertex -1.167054e-01 9.423300e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.082934e-01 1.037908e-01 1.000000e-03
+      vertex -1.082934e-01 1.037908e-01 1.000000e-03
+      vertex 1.167054e-01 9.423300e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.082934e-01 1.037908e-01 1.000000e-03
+      vertex -9.910121e-02 1.126008e-01 1.000000e-03
+      vertex -1.082934e-01 1.037908e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 9.910121e-02 1.126008e-01 1.000000e-03
+      vertex -9.910121e-02 1.126008e-01 1.000000e-03
+      vertex 1.082934e-01 1.037908e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 9.910121e-02 1.126008e-01 1.000000e-03
+      vertex -8.919497e-02 1.205996e-01 1.000000e-03
+      vertex -9.910121e-02 1.126008e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 8.919497e-02 1.205996e-01 1.000000e-03
+      vertex -8.919497e-02 1.205996e-01 1.000000e-03
+      vertex 9.910121e-02 1.126008e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 8.919497e-02 1.205996e-01 1.000000e-03
+      vertex -7.864609e-02 1.277294e-01 1.000000e-03
+      vertex -8.919497e-02 1.205996e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.864609e-02 1.277294e-01 1.000000e-03
+      vertex -7.864609e-02 1.277294e-01 1.000000e-03
+      vertex 8.919497e-02 1.205996e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 7.864609e-02 1.277294e-01 1.000000e-03
+      vertex -6.753056e-02 1.339389e-01 1.000000e-03
+      vertex -7.864609e-02 1.277294e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 6.753056e-02 1.339389e-01 1.000000e-03
+      vertex -6.753056e-02 1.339389e-01 1.000000e-03
+      vertex 7.864609e-02 1.277294e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 6.753056e-02 1.339389e-01 1.000000e-03
+      vertex -5.592847e-02 1.391833e-01 1.000000e-03
+      vertex -6.753056e-02 1.339389e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 5.592847e-02 1.391833e-01 1.000000e-03
+      vertex -5.592847e-02 1.391833e-01 1.000000e-03
+      vertex 6.753056e-02 1.339389e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 5.592847e-02 1.391833e-01 1.000000e-03
+      vertex -4.392342e-02 1.434250e-01 1.000000e-03
+      vertex -5.592847e-02 1.391833e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.392342e-02 1.434250e-01 1.000000e-03
+      vertex -4.392342e-02 1.434250e-01 1.000000e-03
+      vertex 5.592847e-02 1.391833e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 4.392342e-02 1.434250e-01 1.000000e-03
+      vertex -3.160189e-02 1.466333e-01 1.000000e-03
+      vertex -4.392342e-02 1.434250e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 3.160189e-02 1.466333e-01 1.000000e-03
+      vertex -3.160189e-02 1.466333e-01 1.000000e-03
+      vertex 4.392342e-02 1.434250e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 3.160189e-02 1.466333e-01 1.000000e-03
+      vertex -1.905267e-02 1.487851e-01 1.000000e-03
+      vertex -3.160189e-02 1.466333e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.905267e-02 1.487851e-01 1.000000e-03
+      vertex -1.905267e-02 1.487851e-01 1.000000e-03
+      vertex 3.160189e-02 1.466333e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 1.905267e-02 1.487851e-01 1.000000e-03
+      vertex -6.366180e-03 1.498648e-01 1.000000e-03
+      vertex -1.905267e-02 1.487851e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 1.000000e+00
+    outer loop
+      vertex 6.366180e-03 1.498648e-01 1.000000e-03
+      vertex -6.366180e-03 1.498648e-01 1.000000e-03
+      vertex 1.905267e-02 1.487851e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.951972e-03 7.679852e-04 -9.999500e-01
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+      vertex 4.946717e-02 7.280058e-03 0.000000e+00
+      vertex 1.494596e-01 1.272089e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.904028e-03 1.331293e-03 -9.999500e-01
+    outer loop
+      vertex 4.946717e-02 7.280058e-03 0.000000e+00
+      vertex 1.478424e-01 2.535012e-02 1.000000e-03
+      vertex 1.494596e-01 1.272089e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.808484e-03 1.888506e-03 -9.999500e-01
+    outer loop
+      vertex 4.946717e-02 7.280058e-03 0.000000e+00
+      vertex 1.451599e-01 3.779671e-02 1.000000e-03
+      vertex 1.478424e-01 2.535012e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.715104e-03 2.285480e-03 -9.999500e-01
+    outer loop
+      vertex 4.788003e-02 1.440495e-02 0.000000e+00
+      vertex 1.451599e-01 3.779671e-02 1.000000e-03
+      vertex 4.946717e-02 7.280058e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.560226e-03 2.910577e-03 -9.999500e-01
+    outer loop
+      vertex 4.788003e-02 1.440495e-02 0.000000e+00
+      vertex 1.414316e-01 4.997097e-02 1.000000e-03
+      vertex 1.451599e-01 3.779671e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.352620e-03 3.485478e-03 -9.999500e-01
+    outer loop
+      vertex 4.527241e-02 2.122283e-02 0.000000e+00
+      vertex 1.414316e-01 4.997097e-02 1.000000e-03
+      vertex 4.788003e-02 1.440495e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.198054e-03 3.898131e-03 -9.999500e-01
+    outer loop
+      vertex 4.527241e-02 2.122283e-02 0.000000e+00
+      vertex 1.366843e-01 6.178519e-02 1.000000e-03
+      vertex 1.414316e-01 4.997097e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 8.965188e-03 4.413289e-03 -9.999500e-01
+    outer loop
+      vertex 4.527241e-02 2.122283e-02 0.000000e+00
+      vertex 1.309521e-01 7.315424e-02 1.000000e-03
+      vertex 1.366843e-01 6.178519e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 8.707765e-03 4.879487e-03 -9.999500e-01
+    outer loop
+      vertex 4.169989e-02 2.758839e-02 0.000000e+00
+      vertex 1.309521e-01 7.315424e-02 1.000000e-03
+      vertex 4.527241e-02 2.122283e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 8.451317e-03 5.331192e-03 -9.999500e-01
+    outer loop
+      vertex 4.169989e-02 2.758839e-02 0.000000e+00
+      vertex 1.242764e-01 8.399622e-02 1.000000e-03
+      vertex 1.309521e-01 7.315424e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 8.134738e-03 5.799585e-03 -9.999500e-01
+    outer loop
+      vertex 4.169989e-02 2.758839e-02 0.000000e+00
+      vertex 1.167054e-01 9.423300e-02 1.000000e-03
+      vertex 1.242764e-01 8.399622e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 7.855627e-03 6.157381e-03 -9.999500e-01
+    outer loop
+      vertex 3.723861e-02 3.336594e-02 0.000000e+00
+      vertex 1.167054e-01 9.423300e-02 1.000000e-03
+      vertex 4.169989e-02 2.758839e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 7.482173e-03 6.624594e-03 -9.999500e-01
+    outer loop
+      vertex 3.723861e-02 3.336594e-02 0.000000e+00
+      vertex 1.082934e-01 1.037908e-01 1.000000e-03
+      vertex 1.167054e-01 9.423300e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 7.020986e-03 7.092661e-03 -9.999500e-01
+    outer loop
+      vertex 3.198365e-02 3.843236e-02 0.000000e+00
+      vertex 1.082934e-01 1.037908e-01 1.000000e-03
+      vertex 3.723861e-02 3.336594e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 6.740676e-03 7.370492e-03 -9.999500e-01
+    outer loop
+      vertex 3.198365e-02 3.843236e-02 0.000000e+00
+      vertex 9.910121e-02 1.126008e-01 1.000000e-03
+      vertex 1.082934e-01 1.037908e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 6.316287e-03 7.744002e-03 -9.999500e-01
+    outer loop
+      vertex 3.198365e-02 3.843236e-02 0.000000e+00
+      vertex 8.919497e-02 1.205996e-01 1.000000e-03
+      vertex 9.910121e-02 1.126008e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 5.850529e-03 8.087054e-03 -9.999500e-01
+    outer loop
+      vertex 2.604702e-02 4.267965e-02 0.000000e+00
+      vertex 8.919497e-02 1.205996e-01 1.000000e-03
+      vertex 3.198365e-02 3.843236e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 5.465996e-03 8.363313e-03 -9.999500e-01
+    outer loop
+      vertex 2.604702e-02 4.267965e-02 0.000000e+00
+      vertex 7.864609e-02 1.277294e-01 1.000000e-03
+      vertex 8.919497e-02 1.205996e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 4.984588e-03 8.659728e-03 -9.999500e-01
+    outer loop
+      vertex 2.604702e-02 4.267965e-02 0.000000e+00
+      vertex 6.753056e-02 1.339389e-01 1.000000e-03
+      vertex 7.864609e-02 1.277294e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 4.540602e-03 8.889106e-03 -9.999500e-01
+    outer loop
+      vertex 1.955524e-02 4.601731e-02 0.000000e+00
+      vertex 6.753056e-02 1.339389e-01 1.000000e-03
+      vertex 2.604702e-02 4.267965e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 4.047014e-03 9.136747e-03 -9.999500e-01
+    outer loop
+      vertex 1.955524e-02 4.601731e-02 0.000000e+00
+      vertex 5.592847e-02 1.391833e-01 1.000000e-03
+      vertex 6.753056e-02 1.339389e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 3.522437e-03 9.347538e-03 -9.999500e-01
+    outer loop
+      vertex 1.955524e-02 4.601731e-02 0.000000e+00
+      vertex 4.392342e-02 1.434250e-01 1.000000e-03
+      vertex 5.592847e-02 1.391833e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 3.122713e-03 9.479515e-03 -9.999500e-01
+    outer loop
+      vertex 1.264667e-02 4.837419e-02 0.000000e+00
+      vertex 4.392342e-02 1.434250e-01 1.000000e-03
+      vertex 1.955524e-02 4.601731e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 2.521325e-03 9.670202e-03 -9.999500e-01
+    outer loop
+      vertex 1.264667e-02 4.837419e-02 0.000000e+00
+      vertex 3.160189e-02 1.466333e-01 1.000000e-03
+      vertex 4.392342e-02 1.434250e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 1.909851e-03 9.796310e-03 -9.999500e-01
+    outer loop
+      vertex 5.468560e-03 4.970005e-02 0.000000e+00
+      vertex 3.160189e-02 1.466333e-01 1.000000e-03
+      vertex 1.264667e-02 4.837419e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 1.490153e-03 9.877696e-03 -9.999500e-01
+    outer loop
+      vertex 5.468560e-03 4.970005e-02 0.000000e+00
+      vertex 1.905267e-02 1.487851e-01 1.000000e-03
+      vertex 3.160189e-02 1.466333e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.293876e-04 9.949504e-03 -9.999500e-01
+    outer loop
+      vertex 5.468560e-03 4.970005e-02 0.000000e+00
+      vertex 6.366180e-03 1.498648e-01 1.000000e-03
+      vertex 1.905267e-02 1.487851e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 3.842821e-04 9.974278e-03 -9.999500e-01
+    outer loop
+      vertex -1.826101e-03 4.996664e-02 0.000000e+00
+      vertex 6.366180e-03 1.498648e-01 1.000000e-03
+      vertex 5.468560e-03 4.970005e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -1.217340e-04 9.991270e-03 -9.999500e-01
+    outer loop
+      vertex -1.826101e-03 4.996664e-02 0.000000e+00
+      vertex -6.366180e-03 1.498648e-01 1.000000e-03
+      vertex 6.366180e-03 1.498648e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -6.865691e-04 9.967276e-03 -9.999500e-01
+    outer loop
+      vertex -1.826101e-03 4.996664e-02 0.000000e+00
+      vertex -1.905267e-02 1.487851e-01 1.000000e-03
+      vertex -6.366180e-03 1.498648e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -1.150531e-03 9.914834e-03 -9.999500e-01
+    outer loop
+      vertex -9.081842e-03 4.916828e-02 0.000000e+00
+      vertex -1.905267e-02 1.487851e-01 1.000000e-03
+      vertex -1.826101e-03 4.996664e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -1.731027e-03 9.842246e-03 -9.999500e-01
+    outer loop
+      vertex -9.081842e-03 4.916828e-02 0.000000e+00
+      vertex -3.160189e-02 1.466333e-01 1.000000e-03
+      vertex -1.905267e-02 1.487851e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -2.383869e-03 9.690718e-03 -9.999500e-01
+    outer loop
+      vertex -1.614402e-02 4.732199e-02 0.000000e+00
+      vertex -3.160189e-02 1.466333e-01 1.000000e-03
+      vertex -9.081842e-03 4.916828e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -2.754470e-03 9.600059e-03 -9.999500e-01
+    outer loop
+      vertex -1.614402e-02 4.732199e-02 0.000000e+00
+      vertex -4.392342e-02 1.434250e-01 1.000000e-03
+      vertex -3.160189e-02 1.466333e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -3.295034e-03 9.434514e-03 -9.999500e-01
+    outer loop
+      vertex -1.614402e-02 4.732199e-02 0.000000e+00
+      vertex -5.592847e-02 1.391833e-01 1.000000e-03
+      vertex -4.392342e-02 1.434250e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -3.843072e-03 9.211776e-03 -9.999500e-01
+    outer loop
+      vertex -2.286212e-02 4.446711e-02 0.000000e+00
+      vertex -5.592847e-02 1.391833e-01 1.000000e-03
+      vertex -1.614402e-02 4.732199e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -4.267462e-03 9.033405e-03 -9.999500e-01
+    outer loop
+      vertex -2.286212e-02 4.446711e-02 0.000000e+00
+      vertex -6.753056e-02 1.339389e-01 1.000000e-03
+      vertex -5.592847e-02 1.391833e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -4.772272e-03 8.778885e-03 -9.999500e-01
+    outer loop
+      vertex -2.286212e-02 4.446711e-02 0.000000e+00
+      vertex -7.864609e-02 1.277294e-01 1.000000e-03
+      vertex -6.753056e-02 1.339389e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -5.211101e-03 8.513444e-03 -9.999500e-01
+    outer loop
+      vertex -2.909295e-02 4.066449e-02 0.000000e+00
+      vertex -7.864609e-02 1.277294e-01 1.000000e-03
+      vertex -2.286212e-02 4.446711e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -5.669048e-03 8.228975e-03 -9.999500e-01
+    outer loop
+      vertex -2.909295e-02 4.066449e-02 0.000000e+00
+      vertex -8.919497e-02 1.205996e-01 1.000000e-03
+      vertex -7.864609e-02 1.277294e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -6.123583e-03 7.892802e-03 -9.999500e-01
+    outer loop
+      vertex -2.909295e-02 4.066449e-02 0.000000e+00
+      vertex -9.910121e-02 1.126008e-01 1.000000e-03
+      vertex -8.919497e-02 1.205996e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -6.455036e-03 7.612504e-03 -9.999500e-01
+    outer loop
+      vertex -3.470371e-02 3.599517e-02 0.000000e+00
+      vertex -9.910121e-02 1.126008e-01 1.000000e-03
+      vertex -2.909295e-02 4.066449e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -6.922004e-03 7.208022e-03 -9.999500e-01
+    outer loop
+      vertex -3.470371e-02 3.599517e-02 0.000000e+00
+      vertex -1.082934e-01 1.037908e-01 1.000000e-03
+      vertex -9.910121e-02 1.126008e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -7.358055e-03 6.743050e-03 -9.999500e-01
+    outer loop
+      vertex -3.957482e-02 3.055869e-02 0.000000e+00
+      vertex -1.082934e-01 1.037908e-01 1.000000e-03
+      vertex -3.470371e-02 3.599517e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -7.637913e-03 6.437453e-03 -9.999500e-01
+    outer loop
+      vertex -3.957482e-02 3.055869e-02 0.000000e+00
+      vertex -1.167054e-01 9.423300e-02 1.000000e-03
+      vertex -1.082934e-01 1.037908e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -7.993073e-03 5.997595e-03 -9.999500e-01
+    outer loop
+      vertex -3.957482e-02 3.055869e-02 0.000000e+00
+      vertex -1.242764e-01 8.399622e-02 1.000000e-03
+      vertex -1.167054e-01 9.423300e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -8.306436e-03 5.534945e-03 -9.999500e-01
+    outer loop
+      vertex -4.360247e-02 2.447089e-02 0.000000e+00
+      vertex -1.242764e-01 8.399622e-02 1.000000e-03
+      vertex -3.957482e-02 3.055869e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -8.578149e-03 5.123369e-03 -9.999500e-01
+    outer loop
+      vertex -4.360247e-02 2.447089e-02 0.000000e+00
+      vertex -1.309521e-01 7.315424e-02 1.000000e-03
+      vertex -1.242764e-01 8.399622e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -8.853864e-03 4.629815e-03 -9.999500e-01
+    outer loop
+      vertex -4.360247e-02 2.447089e-02 0.000000e+00
+      vertex -1.366843e-01 6.178519e-02 1.000000e-03
+      vertex -1.309521e-01 7.315424e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.057194e-03 4.194957e-03 -9.999500e-01
+    outer loop
+      vertex -4.670081e-02 1.786155e-02 0.000000e+00
+      vertex -1.366843e-01 6.178519e-02 1.000000e-03
+      vertex -4.360247e-02 2.447089e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.293276e-03 3.674056e-03 -9.999500e-01
+    outer loop
+      vertex -4.670081e-02 1.786155e-02 0.000000e+00
+      vertex -1.414316e-01 4.997097e-02 1.000000e-03
+      vertex -1.366843e-01 6.178519e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.481614e-03 3.141006e-03 -9.999500e-01
+    outer loop
+      vertex -1.451599e-01 3.779671e-02 1.000000e-03
+      vertex -1.414316e-01 4.997097e-02 1.000000e-03
+      vertex -4.670081e-02 1.786155e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.592270e-03 2.755326e-03 -9.999500e-01
+    outer loop
+      vertex -4.880379e-02 1.087151e-02 0.000000e+00
+      vertex -1.451599e-01 3.779671e-02 1.000000e-03
+      vertex -4.670081e-02 1.786155e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.764262e-03 2.127924e-03 -9.999500e-01
+    outer loop
+      vertex -1.478424e-01 2.535012e-02 1.000000e-03
+      vertex -1.451599e-01 3.779671e-02 1.000000e-03
+      vertex -4.880379e-02 1.087151e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.862921e-03 1.531344e-03 -9.999500e-01
+    outer loop
+      vertex -4.986661e-02 3.649766e-03 0.000000e+00
+      vertex -1.478424e-01 2.535012e-02 1.000000e-03
+      vertex -4.880379e-02 1.087151e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.930656e-03 1.089286e-03 -9.999500e-01
+    outer loop
+      vertex -1.494596e-01 1.272089e-02 1.000000e-03
+      vertex -1.478424e-01 2.535012e-02 1.000000e-03
+      vertex -4.986661e-02 3.649766e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.990607e-03 -2.433056e-04 -9.999500e-01
+    outer loop
+      vertex -1.500000e-01 1.836970e-17 1.000000e-03
+      vertex -5.000000e-02 6.123234e-18 0.000000e+00
+      vertex -4.986661e-02 -3.649766e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.990607e-03 2.433056e-04 -9.999500e-01
+    outer loop
+      vertex -1.500000e-01 1.836970e-17 1.000000e-03
+      vertex -4.986661e-02 3.649766e-03 0.000000e+00
+      vertex -5.000000e-02 6.123234e-18 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.978600e-03 5.259779e-04 -9.999500e-01
+    outer loop
+      vertex -1.494596e-01 1.272089e-02 1.000000e-03
+      vertex -4.986661e-02 3.649766e-03 0.000000e+00
+      vertex -1.500000e-01 1.836970e-17 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.978600e-03 -5.259779e-04 -9.999500e-01
+    outer loop
+      vertex -4.986661e-02 -3.649766e-03 0.000000e+00
+      vertex -1.494596e-01 -1.272089e-02 1.000000e-03
+      vertex -1.500000e-01 1.836970e-17 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.930656e-03 -1.089286e-03 -9.999500e-01
+    outer loop
+      vertex -4.986661e-02 -3.649766e-03 0.000000e+00
+      vertex -1.478424e-01 -2.535012e-02 1.000000e-03
+      vertex -1.494596e-01 -1.272089e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.862920e-03 -1.531344e-03 -9.999500e-01
+    outer loop
+      vertex -4.880379e-02 -1.087151e-02 0.000000e+00
+      vertex -1.478424e-01 -2.535012e-02 1.000000e-03
+      vertex -4.986661e-02 -3.649766e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.764261e-03 -2.127924e-03 -9.999500e-01
+    outer loop
+      vertex -4.880379e-02 -1.087151e-02 0.000000e+00
+      vertex -1.451599e-01 -3.779671e-02 1.000000e-03
+      vertex -1.478424e-01 -2.535012e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.592270e-03 -2.755326e-03 -9.999500e-01
+    outer loop
+      vertex -4.670081e-02 -1.786155e-02 0.000000e+00
+      vertex -1.451599e-01 -3.779671e-02 1.000000e-03
+      vertex -4.880379e-02 -1.087151e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -9.481614e-03 -3.141005e-03 -9.999500e-01
+    outer loop
+      vertex -4.670081e-02 -1.786155e-02 0.000000e+00
+      vertex -1.414316e-01 -4.997097e-02 1.000000e-03
+      vertex -1.451599e-01 -3.779671e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.293276e-03 -3.674056e-03 -9.999500e-01
+    outer loop
+      vertex -4.670081e-02 -1.786155e-02 0.000000e+00
+      vertex -1.366843e-01 -6.178519e-02 1.000000e-03
+      vertex -1.414316e-01 -4.997097e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -9.057194e-03 -4.194957e-03 -9.999500e-01
+    outer loop
+      vertex -4.360247e-02 -2.447089e-02 0.000000e+00
+      vertex -1.366843e-01 -6.178519e-02 1.000000e-03
+      vertex -4.670081e-02 -1.786155e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -8.853864e-03 -4.629815e-03 -9.999500e-01
+    outer loop
+      vertex -4.360247e-02 -2.447089e-02 0.000000e+00
+      vertex -1.309521e-01 -7.315424e-02 1.000000e-03
+      vertex -1.366843e-01 -6.178519e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -8.578148e-03 -5.123369e-03 -9.999500e-01
+    outer loop
+      vertex -4.360247e-02 -2.447089e-02 0.000000e+00
+      vertex -1.242764e-01 -8.399622e-02 1.000000e-03
+      vertex -1.309521e-01 -7.315424e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -8.306436e-03 -5.534945e-03 -9.999500e-01
+    outer loop
+      vertex -3.957482e-02 -3.055869e-02 0.000000e+00
+      vertex -1.242764e-01 -8.399622e-02 1.000000e-03
+      vertex -4.360247e-02 -2.447089e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -7.993073e-03 -5.997595e-03 -9.999500e-01
+    outer loop
+      vertex -3.957482e-02 -3.055869e-02 0.000000e+00
+      vertex -1.167054e-01 -9.423300e-02 1.000000e-03
+      vertex -1.242764e-01 -8.399622e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -7.637912e-03 -6.437453e-03 -9.999500e-01
+    outer loop
+      vertex -3.957482e-02 -3.055869e-02 0.000000e+00
+      vertex -1.082934e-01 -1.037908e-01 1.000000e-03
+      vertex -1.167054e-01 -9.423300e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal -7.358055e-03 -6.743050e-03 -9.999500e-01
+    outer loop
+      vertex -3.470371e-02 -3.599517e-02 0.000000e+00
+      vertex -1.082934e-01 -1.037908e-01 1.000000e-03
+      vertex -3.957482e-02 -3.055869e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -6.922004e-03 -7.208022e-03 -9.999500e-01
+    outer loop
+      vertex -3.470371e-02 -3.599517e-02 0.000000e+00
+      vertex -9.910121e-02 -1.126008e-01 1.000000e-03
+      vertex -1.082934e-01 -1.037908e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -6.455036e-03 -7.612504e-03 -9.999500e-01
+    outer loop
+      vertex -2.909295e-02 -4.066449e-02 0.000000e+00
+      vertex -9.910121e-02 -1.126008e-01 1.000000e-03
+      vertex -3.470371e-02 -3.599517e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -6.123583e-03 -7.892802e-03 -9.999500e-01
+    outer loop
+      vertex -2.909295e-02 -4.066449e-02 0.000000e+00
+      vertex -8.919497e-02 -1.205996e-01 1.000000e-03
+      vertex -9.910121e-02 -1.126008e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -5.669048e-03 -8.228975e-03 -9.999500e-01
+    outer loop
+      vertex -2.909295e-02 -4.066449e-02 0.000000e+00
+      vertex -7.864609e-02 -1.277294e-01 1.000000e-03
+      vertex -8.919497e-02 -1.205996e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -5.211101e-03 -8.513444e-03 -9.999500e-01
+    outer loop
+      vertex -2.286212e-02 -4.446711e-02 0.000000e+00
+      vertex -7.864609e-02 -1.277294e-01 1.000000e-03
+      vertex -2.909295e-02 -4.066449e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -4.772272e-03 -8.778885e-03 -9.999500e-01
+    outer loop
+      vertex -2.286212e-02 -4.446711e-02 0.000000e+00
+      vertex -6.753056e-02 -1.339389e-01 1.000000e-03
+      vertex -7.864609e-02 -1.277294e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -4.267462e-03 -9.033405e-03 -9.999500e-01
+    outer loop
+      vertex -2.286212e-02 -4.446711e-02 0.000000e+00
+      vertex -5.592847e-02 -1.391833e-01 1.000000e-03
+      vertex -6.753056e-02 -1.339389e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -3.843072e-03 -9.211776e-03 -9.999500e-01
+    outer loop
+      vertex -1.614402e-02 -4.732199e-02 0.000000e+00
+      vertex -5.592847e-02 -1.391833e-01 1.000000e-03
+      vertex -2.286212e-02 -4.446711e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -3.295034e-03 -9.434513e-03 -9.999500e-01
+    outer loop
+      vertex -1.614402e-02 -4.732199e-02 0.000000e+00
+      vertex -4.392342e-02 -1.434250e-01 1.000000e-03
+      vertex -5.592847e-02 -1.391833e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -2.657667e-03 -9.619427e-03 -9.999500e-01
+    outer loop
+      vertex -9.081842e-03 -4.916828e-02 0.000000e+00
+      vertex -4.392342e-02 -1.434250e-01 1.000000e-03
+      vertex -1.614402e-02 -4.732199e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -2.283682e-03 -9.723139e-03 -9.999500e-01
+    outer loop
+      vertex -9.081842e-03 -4.916828e-02 0.000000e+00
+      vertex -3.160189e-02 -1.466333e-01 1.000000e-03
+      vertex -4.392342e-02 -1.434250e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -1.731027e-03 -9.842246e-03 -9.999500e-01
+    outer loop
+      vertex -9.081842e-03 -4.916828e-02 0.000000e+00
+      vertex -1.905267e-02 -1.487851e-01 1.000000e-03
+      vertex -3.160189e-02 -1.466333e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -1.150531e-03 -9.914834e-03 -9.999500e-01
+    outer loop
+      vertex -1.826101e-03 -4.996664e-02 0.000000e+00
+      vertex -1.905267e-02 -1.487851e-01 1.000000e-03
+      vertex -9.081842e-03 -4.916828e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal -6.865691e-04 -9.967275e-03 -9.999500e-01
+    outer loop
+      vertex -1.826101e-03 -4.996664e-02 0.000000e+00
+      vertex -6.366180e-03 -1.498648e-01 1.000000e-03
+      vertex -1.905267e-02 -1.487851e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal -1.217340e-04 -9.991270e-03 -9.999500e-01
+    outer loop
+      vertex -1.826101e-03 -4.996664e-02 0.000000e+00
+      vertex 6.366180e-03 -1.498648e-01 1.000000e-03
+      vertex -6.366180e-03 -1.498648e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 3.842821e-04 -9.974278e-03 -9.999500e-01
+    outer loop
+      vertex 5.468560e-03 -4.970005e-02 0.000000e+00
+      vertex 6.366180e-03 -1.498648e-01 1.000000e-03
+      vertex -1.826101e-03 -4.996664e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.293877e-04 -9.949504e-03 -9.999500e-01
+    outer loop
+      vertex 5.468560e-03 -4.970005e-02 0.000000e+00
+      vertex 1.905267e-02 -1.487851e-01 1.000000e-03
+      vertex 6.366180e-03 -1.498648e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 1.490153e-03 -9.877696e-03 -9.999500e-01
+    outer loop
+      vertex 5.468560e-03 -4.970005e-02 0.000000e+00
+      vertex 3.160189e-02 -1.466333e-01 1.000000e-03
+      vertex 1.905267e-02 -1.487851e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 1.909851e-03 -9.796310e-03 -9.999500e-01
+    outer loop
+      vertex 1.264667e-02 -4.837419e-02 0.000000e+00
+      vertex 3.160189e-02 -1.466333e-01 1.000000e-03
+      vertex 5.468560e-03 -4.970005e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 2.521325e-03 -9.670203e-03 -9.999500e-01
+    outer loop
+      vertex 1.264667e-02 -4.837419e-02 0.000000e+00
+      vertex 4.392342e-02 -1.434250e-01 1.000000e-03
+      vertex 3.160189e-02 -1.466333e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 3.122713e-03 -9.479514e-03 -9.999500e-01
+    outer loop
+      vertex 1.955524e-02 -4.601731e-02 0.000000e+00
+      vertex 4.392342e-02 -1.434250e-01 1.000000e-03
+      vertex 1.264667e-02 -4.837419e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 3.522437e-03 -9.347539e-03 -9.999500e-01
+    outer loop
+      vertex 1.955524e-02 -4.601731e-02 0.000000e+00
+      vertex 5.592847e-02 -1.391833e-01 1.000000e-03
+      vertex 4.392342e-02 -1.434250e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 4.047014e-03 -9.136747e-03 -9.999500e-01
+    outer loop
+      vertex 1.955524e-02 -4.601731e-02 0.000000e+00
+      vertex 6.753056e-02 -1.339389e-01 1.000000e-03
+      vertex 5.592847e-02 -1.391833e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 4.540602e-03 -8.889106e-03 -9.999500e-01
+    outer loop
+      vertex 2.604702e-02 -4.267965e-02 0.000000e+00
+      vertex 6.753056e-02 -1.339389e-01 1.000000e-03
+      vertex 1.955524e-02 -4.601731e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 4.984589e-03 -8.659728e-03 -9.999500e-01
+    outer loop
+      vertex 2.604702e-02 -4.267965e-02 0.000000e+00
+      vertex 7.864609e-02 -1.277294e-01 1.000000e-03
+      vertex 6.753056e-02 -1.339389e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 5.465996e-03 -8.363313e-03 -9.999500e-01
+    outer loop
+      vertex 2.604702e-02 -4.267965e-02 0.000000e+00
+      vertex 8.919497e-02 -1.205996e-01 1.000000e-03
+      vertex 7.864609e-02 -1.277294e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 5.850529e-03 -8.087054e-03 -9.999500e-01
+    outer loop
+      vertex 3.198365e-02 -3.843236e-02 0.000000e+00
+      vertex 8.919497e-02 -1.205996e-01 1.000000e-03
+      vertex 2.604702e-02 -4.267965e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 6.316287e-03 -7.744001e-03 -9.999500e-01
+    outer loop
+      vertex 3.198365e-02 -3.843236e-02 0.000000e+00
+      vertex 9.910121e-02 -1.126008e-01 1.000000e-03
+      vertex 8.919497e-02 -1.205996e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 6.740676e-03 -7.370492e-03 -9.999500e-01
+    outer loop
+      vertex 3.198365e-02 -3.843236e-02 0.000000e+00
+      vertex 1.082934e-01 -1.037908e-01 1.000000e-03
+      vertex 9.910121e-02 -1.126008e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 7.020987e-03 -7.092661e-03 -9.999500e-01
+    outer loop
+      vertex 3.723861e-02 -3.336594e-02 0.000000e+00
+      vertex 1.082934e-01 -1.037908e-01 1.000000e-03
+      vertex 3.198365e-02 -3.843236e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 7.482172e-03 -6.624594e-03 -9.999500e-01
+    outer loop
+      vertex 3.723861e-02 -3.336594e-02 0.000000e+00
+      vertex 1.167054e-01 -9.423300e-02 1.000000e-03
+      vertex 1.082934e-01 -1.037908e-01 1.000000e-03
+    endloop
+  endfacet
+  facet normal 7.855627e-03 -6.157381e-03 -9.999500e-01
+    outer loop
+      vertex 4.169989e-02 -2.758839e-02 0.000000e+00
+      vertex 1.167054e-01 -9.423300e-02 1.000000e-03
+      vertex 3.723861e-02 -3.336594e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 8.134738e-03 -5.799585e-03 -9.999500e-01
+    outer loop
+      vertex 4.169989e-02 -2.758839e-02 0.000000e+00
+      vertex 1.242764e-01 -8.399622e-02 1.000000e-03
+      vertex 1.167054e-01 -9.423300e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 8.451316e-03 -5.331192e-03 -9.999500e-01
+    outer loop
+      vertex 4.169989e-02 -2.758839e-02 0.000000e+00
+      vertex 1.309521e-01 -7.315424e-02 1.000000e-03
+      vertex 1.242764e-01 -8.399622e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 8.707765e-03 -4.879487e-03 -9.999500e-01
+    outer loop
+      vertex 4.527241e-02 -2.122283e-02 0.000000e+00
+      vertex 1.309521e-01 -7.315424e-02 1.000000e-03
+      vertex 4.169989e-02 -2.758839e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 8.965188e-03 -4.413289e-03 -9.999500e-01
+    outer loop
+      vertex 4.527241e-02 -2.122283e-02 0.000000e+00
+      vertex 1.366843e-01 -6.178519e-02 1.000000e-03
+      vertex 1.309521e-01 -7.315424e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.198054e-03 -3.898131e-03 -9.999500e-01
+    outer loop
+      vertex 4.527241e-02 -2.122283e-02 0.000000e+00
+      vertex 1.414316e-01 -4.997097e-02 1.000000e-03
+      vertex 1.366843e-01 -6.178519e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.352620e-03 -3.485478e-03 -9.999500e-01
+    outer loop
+      vertex 4.788003e-02 -1.440495e-02 0.000000e+00
+      vertex 1.414316e-01 -4.997097e-02 1.000000e-03
+      vertex 4.527241e-02 -2.122283e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.560225e-03 -2.910577e-03 -9.999500e-01
+    outer loop
+      vertex 4.788003e-02 -1.440495e-02 0.000000e+00
+      vertex 1.451599e-01 -3.779671e-02 1.000000e-03
+      vertex 1.414316e-01 -4.997097e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.715104e-03 -2.285480e-03 -9.999500e-01
+    outer loop
+      vertex 4.946717e-02 -7.280058e-03 0.000000e+00
+      vertex 1.451599e-01 -3.779671e-02 1.000000e-03
+      vertex 4.788003e-02 -1.440495e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.808484e-03 -1.888506e-03 -9.999500e-01
+    outer loop
+      vertex 4.946717e-02 -7.280058e-03 0.000000e+00
+      vertex 1.478424e-01 -2.535012e-02 1.000000e-03
+      vertex 1.451599e-01 -3.779671e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.904027e-03 -1.331293e-03 -9.999500e-01
+    outer loop
+      vertex 4.946717e-02 -7.280058e-03 0.000000e+00
+      vertex 1.494596e-01 -1.272089e-02 1.000000e-03
+      vertex 1.478424e-01 -2.535012e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.951972e-03 -7.679852e-04 -9.999500e-01
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+      vertex 1.494596e-01 -1.272089e-02 1.000000e-03
+      vertex 4.946717e-02 -7.280058e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 9.987492e-03 -2.826723e-04 -9.999500e-01
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+      vertex 1.494596e-01 -1.272089e-02 1.000000e-03
+    endloop
+  endfacet
+  facet normal 9.987492e-03 2.826723e-04 -9.999500e-01
+    outer loop
+      vertex 1.494596e-01 1.272089e-02 1.000000e-03
+      vertex 1.500000e-01 0.000000e+00 1.000000e-03
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 5.468560e-03 4.970005e-02 0.000000e+00
+      vertex -9.081842e-03 4.916828e-02 0.000000e+00
+      vertex -1.826101e-03 4.996664e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.264667e-02 4.837419e-02 0.000000e+00
+      vertex -9.081842e-03 4.916828e-02 0.000000e+00
+      vertex 5.468560e-03 4.970005e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.264667e-02 4.837419e-02 0.000000e+00
+      vertex -1.614402e-02 4.732199e-02 0.000000e+00
+      vertex -9.081842e-03 4.916828e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.955524e-02 4.601731e-02 0.000000e+00
+      vertex -1.614402e-02 4.732199e-02 0.000000e+00
+      vertex 1.264667e-02 4.837419e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.955524e-02 4.601731e-02 0.000000e+00
+      vertex -2.286212e-02 4.446711e-02 0.000000e+00
+      vertex -1.614402e-02 4.732199e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.604702e-02 4.267965e-02 0.000000e+00
+      vertex -2.286212e-02 4.446711e-02 0.000000e+00
+      vertex 1.955524e-02 4.601731e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.604702e-02 4.267965e-02 0.000000e+00
+      vertex -2.909295e-02 4.066449e-02 0.000000e+00
+      vertex -2.286212e-02 4.446711e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.198365e-02 3.843236e-02 0.000000e+00
+      vertex -2.909295e-02 4.066449e-02 0.000000e+00
+      vertex 2.604702e-02 4.267965e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.198365e-02 3.843236e-02 0.000000e+00
+      vertex -3.470371e-02 3.599517e-02 0.000000e+00
+      vertex -2.909295e-02 4.066449e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.723861e-02 3.336594e-02 0.000000e+00
+      vertex -3.470371e-02 3.599517e-02 0.000000e+00
+      vertex 3.198365e-02 3.843236e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.723861e-02 3.336594e-02 0.000000e+00
+      vertex -3.957482e-02 3.055869e-02 0.000000e+00
+      vertex -3.470371e-02 3.599517e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.169989e-02 2.758839e-02 0.000000e+00
+      vertex -3.957482e-02 3.055869e-02 0.000000e+00
+      vertex 3.723861e-02 3.336594e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.169989e-02 2.758839e-02 0.000000e+00
+      vertex -4.360247e-02 2.447089e-02 0.000000e+00
+      vertex -3.957482e-02 3.055869e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.527241e-02 2.122283e-02 0.000000e+00
+      vertex -4.360247e-02 2.447089e-02 0.000000e+00
+      vertex 4.169989e-02 2.758839e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.527241e-02 2.122283e-02 0.000000e+00
+      vertex -4.670081e-02 1.786155e-02 0.000000e+00
+      vertex -4.360247e-02 2.447089e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.788003e-02 1.440495e-02 0.000000e+00
+      vertex -4.670081e-02 1.786155e-02 0.000000e+00
+      vertex 4.527241e-02 2.122283e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.788003e-02 1.440495e-02 0.000000e+00
+      vertex -4.880379e-02 1.087151e-02 0.000000e+00
+      vertex -4.670081e-02 1.786155e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.946717e-02 7.280058e-03 0.000000e+00
+      vertex -4.880379e-02 1.087151e-02 0.000000e+00
+      vertex 4.788003e-02 1.440495e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.946717e-02 7.280058e-03 0.000000e+00
+      vertex -4.986661e-02 3.649766e-03 0.000000e+00
+      vertex -4.880379e-02 1.087151e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+      vertex -4.986661e-02 3.649766e-03 0.000000e+00
+      vertex 4.946717e-02 7.280058e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 5.468560e-03 -4.970005e-02 0.000000e+00
+      vertex -1.826101e-03 -4.996664e-02 0.000000e+00
+      vertex -9.081842e-03 -4.916828e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+      vertex -5.000000e-02 6.123234e-18 0.000000e+00
+      vertex -4.986661e-02 3.649766e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+      vertex -4.986661e-02 -3.649766e-03 0.000000e+00
+      vertex -5.000000e-02 6.123234e-18 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.946717e-02 -7.280058e-03 0.000000e+00
+      vertex -4.986661e-02 -3.649766e-03 0.000000e+00
+      vertex 5.000000e-02 0.000000e+00 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.946717e-02 -7.280058e-03 0.000000e+00
+      vertex -4.880379e-02 -1.087151e-02 0.000000e+00
+      vertex -4.986661e-02 -3.649766e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.788003e-02 -1.440495e-02 0.000000e+00
+      vertex -4.880379e-02 -1.087151e-02 0.000000e+00
+      vertex 4.946717e-02 -7.280058e-03 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.788003e-02 -1.440495e-02 0.000000e+00
+      vertex -4.670081e-02 -1.786155e-02 0.000000e+00
+      vertex -4.880379e-02 -1.087151e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.527241e-02 -2.122283e-02 0.000000e+00
+      vertex -4.670081e-02 -1.786155e-02 0.000000e+00
+      vertex 4.788003e-02 -1.440495e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.527241e-02 -2.122283e-02 0.000000e+00
+      vertex -4.360247e-02 -2.447089e-02 0.000000e+00
+      vertex -4.670081e-02 -1.786155e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.169989e-02 -2.758839e-02 0.000000e+00
+      vertex -4.360247e-02 -2.447089e-02 0.000000e+00
+      vertex 4.527241e-02 -2.122283e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 4.169989e-02 -2.758839e-02 0.000000e+00
+      vertex -3.957482e-02 -3.055869e-02 0.000000e+00
+      vertex -4.360247e-02 -2.447089e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.723861e-02 -3.336594e-02 0.000000e+00
+      vertex -3.957482e-02 -3.055869e-02 0.000000e+00
+      vertex 4.169989e-02 -2.758839e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.723861e-02 -3.336594e-02 0.000000e+00
+      vertex -3.470371e-02 -3.599517e-02 0.000000e+00
+      vertex -3.957482e-02 -3.055869e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.198365e-02 -3.843236e-02 0.000000e+00
+      vertex -3.470371e-02 -3.599517e-02 0.000000e+00
+      vertex 3.723861e-02 -3.336594e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 3.198365e-02 -3.843236e-02 0.000000e+00
+      vertex -2.909295e-02 -4.066449e-02 0.000000e+00
+      vertex -3.470371e-02 -3.599517e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.604702e-02 -4.267965e-02 0.000000e+00
+      vertex -2.909295e-02 -4.066449e-02 0.000000e+00
+      vertex 3.198365e-02 -3.843236e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 2.604702e-02 -4.267965e-02 0.000000e+00
+      vertex -2.286212e-02 -4.446711e-02 0.000000e+00
+      vertex -2.909295e-02 -4.066449e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.955524e-02 -4.601731e-02 0.000000e+00
+      vertex -2.286212e-02 -4.446711e-02 0.000000e+00
+      vertex 2.604702e-02 -4.267965e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.955524e-02 -4.601731e-02 0.000000e+00
+      vertex -1.614402e-02 -4.732199e-02 0.000000e+00
+      vertex -2.286212e-02 -4.446711e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.264667e-02 -4.837419e-02 0.000000e+00
+      vertex -1.614402e-02 -4.732199e-02 0.000000e+00
+      vertex 1.955524e-02 -4.601731e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 1.264667e-02 -4.837419e-02 0.000000e+00
+      vertex -9.081842e-03 -4.916828e-02 0.000000e+00
+      vertex -1.614402e-02 -4.732199e-02 0.000000e+00
+    endloop
+  endfacet
+  facet normal 0.000000e+00 0.000000e+00 -1.000000e+00
+    outer loop
+      vertex 5.468560e-03 -4.970005e-02 0.000000e+00
+      vertex -9.081842e-03 -4.916828e-02 0.000000e+00
+      vertex 1.264667e-02 -4.837419e-02 0.000000e+00
+    endloop
+  endfacet
+endsolid component1:taper
diff --git a/examples/script_PML_fit.py b/examples/script_PML_fit.py
new file mode 100644
index 0000000..19de398
--- /dev/null
+++ b/examples/script_PML_fit.py
@@ -0,0 +1,135 @@
+import numpy as np
+import matplotlib.pyplot as plt
+import os, sys
+import h5py
+from tqdm import tqdm
+from scipy.constants import c as c_light, epsilon_0 as eps_0, mu_0 as mu_0
+from mpl_toolkits.mplot3d import Axes3D
+sys.path.append('../')
+
+from solverFIT3D import SolverFIT3D
+from gridFIT3D import GridFIT3D 
+from sources import Pulse
+
+# ---------- Domain setup ---------
+n_pml = 0
+
+# Number of mesh cells
+Nx = 100
+Ny = 200
+Nz = 20
+
+# boundary conditions
+bcx = 'pml'
+bcy = 'pec'
+bc_low=[bcx, bcy, 'pec']
+bc_high=[bcx, bcy, 'pec']
+
+if bcx == 'pml':
+    bcx += 'v3'
+    n_pml = 30
+    Nx += n_pml
+
+# set grid 
+xmin, xmax, ymin, ymax, zmin, zmax = -Nx/2, Nx/2, -Ny/2, Ny/2, -Nz/2, Nz/2
+grid = GridFIT3D(xmin, xmax, ymin, ymax, zmin, zmax, Nx, Ny, Nz) 
+
+# set solver
+solver = SolverFIT3D(grid, dt=0.5*grid.dx/c_light,
+                     bc_low=bc_low, bc_high=bc_high)
+
+# set source
+source = Pulse(field='Ez', 
+               xs=25+n_pml, ys=100, zs=slice(0,Nz), #zs=int(Nz/2),
+               shape='harris', L=50*solver.dx)
+
+# ------------ Time loop ----------------
+run = True
+if run:
+    Nt = 200 
+    plot = True
+    for n in tqdm(range(Nt)):
+        # Advance
+        solver.one_step()
+
+        # Update source
+        source.update(solver, n*solver.dt)
+
+        # Clean z-dir
+        #for k in range(1,Nz-1):
+        #    solver.E[:,:,k,'z'] = solver.E[:,:,int(Nz/2),'z']
+
+        # Plot
+        if plot and n%5==0:
+            solver.plot2D(field='E', component='Abs', plane='XY', pos=0.5, 
+                    norm=None, vmin=0, vmax=1.e-1, figsize=[8,4], cmap='jet', 
+                    title='imgEpml/Ez', off_screen=True, n=n, interpolation='spline36')
+
+    # Plot 2D
+    plot = False
+    if plot:
+        Y_r, X_r = np.meshgrid(solver.y, solver.x)
+        #hf = h5py.File(f'Ez_test_pec.h5', 'r')
+        field = np.abs(solver.E[:,:,int(Nz/2),'z']) #- np.abs(hf['Ez'])
+
+        fig = plt.figure(1, tight_layout=False, dpi=200)
+        ax = fig.add_subplot(111, projection='3d')
+
+        #ax.plot_surface(X_R, Y_R, abs(R), cmap='jet', rstride=1,  cstride=1, linewidth=0, alpha=1, antialiased=False)
+        ax.plot_surface(X_r, Y_r, field, cmap='jet', rstride=1,  cstride=1, linewidth=0, alpha=1, antialiased=False)
+        
+        ax.set_xlabel('x [a.u.]', labelpad=10)
+        ax.set_ylabel('y [a.u.]', labelpad=20)
+        ax.set_zlabel('Ez [V/m]', labelpad=10)   
+        ax.set_xlim(-50-n_pml/2,50+n_pml/2)
+        ax.set_ylim(-100,100)
+        ax.set_zticks(np.linspace(0, np.max(field), 2), labels= ['0', '{:.2e}'.format(np.max(field))])  
+        ax.get_proj = lambda: np.dot(Axes3D.get_proj(ax), np.diag([1.0, 1.0, 0.4, 1]))
+
+        #fig.savefig(f'imgEpml/Ezsurf_{str(n).zfill(5)}')
+        #plt.close()
+        plt.show()
+
+    # Save
+    hf = h5py.File(f'Ez_test_{bcx}.h5', 'w')
+    hf['x'], hf['y'], hf['z'] = solver.x, solver.y, solver.z
+    hf['t'] = np.arange(0, Nt*solver.dt, solver.dt)
+    hf['Ez'] = solver.E[:,:,int(Nz/2),'z']
+    hf.close()
+
+# ------------ Compute reflection ----------------
+ht = h5py.File(f'Ez_test_{bcx}.h5', 'r')
+hr = h5py.File('Ez_ref.h5', 'r')
+
+R = np.abs(ht['Ez'][0+n_pml:76+n_pml, :]) - np.abs(hr['Ez'][75:151, :]) #[76x201]
+R = R/np.max(np.abs(hr['Ez']))*100
+
+ht.close()
+hr.close()
+
+# Save
+hres = h5py.File('R.h5', 'w')
+hres[bcx] = R
+hres.close()
+
+plot = True
+if plot:
+    Y_r, X_r = np.meshgrid(solver.y, solver.x[0+n_pml:76+n_pml])
+    field = np.abs(R)
+
+    fig = plt.figure(1, tight_layout=True, dpi=200)
+    ax = fig.add_subplot(111, projection='3d')
+
+    #ax.plot_surface(X_R, Y_R, abs(R), cmap='jet', rstride=1,  cstride=1, linewidth=0, alpha=1, antialiased=False)
+    ax.plot_surface(X_r, Y_r, field, cmap='plasma', rstride=1,  cstride=1, linewidth=0, alpha=1, antialiased=False)
+    
+    ax.set_xlabel('x [a.u.]', labelpad=10)
+    ax.set_ylabel('y [a.u.]', labelpad=20)
+    ax.set_zlabel('R [%]', labelpad=10)   
+    ax.set_xlim(-50+n_pml/2,25+n_pml/2)
+    ax.set_ylim(-100,100)
+    ax.set_zticks(np.linspace(0, np.max(field), 3))  
+    ax.get_proj = lambda: np.dot(Axes3D.get_proj(ax), np.diag([1.0, 1.0, 0.4, 1.]))
+    
+    fig.savefig('imgEpml/R.png')
+    plt.show()
diff --git a/examples/script_PMLref_fit.py b/examples/script_PMLref_fit.py
new file mode 100644
index 0000000..f9ed1bc
--- /dev/null
+++ b/examples/script_PMLref_fit.py
@@ -0,0 +1,89 @@
+import numpy as np
+import matplotlib.pyplot as plt
+import os, sys
+import h5py
+from tqdm import tqdm
+from scipy.constants import c as c_light, epsilon_0 as eps_0, mu_0 as mu_0
+from mpl_toolkits.mplot3d import Axes3D
+sys.path.append('../')
+
+from solverFIT3D import SolverFIT3D
+from gridFIT3D import GridFIT3D 
+from sources import Pulse
+
+# ---------- Domain setup ---------
+
+# Number of mesh cells
+Nx = 200
+Ny = 200
+Nz = 20
+
+# Domain bounds: box 10cmx10cmx30cm
+xmin, xmax, ymin, ymax, zmin, zmax = -Nx/2, Nx/2, -Ny/2, Ny/2, -Nz/2, Nz/2
+
+# boundary conditions
+bc_low=['pec', 'pec', 'pec']
+bc_high=['pec', 'pec', 'pec']
+
+# set grid 
+grid = GridFIT3D(xmin, xmax, ymin, ymax, zmin, zmax, Nx, Ny, Nz) 
+
+# set solver
+solver = SolverFIT3D(grid, dt=0.5*grid.dx/c_light,
+                     bc_low=bc_low, bc_high=bc_high)
+
+# set source
+source = Pulse(field='Ez', 
+               xs=int(Nx/2), ys=int(Ny/2), zs=slice(0,Nz), #zs=int(Nz/2),
+               shape='harris', L=50*solver.dx)
+
+# ------------ Time loop ----------------
+
+Nt = 200 
+plot = False
+for n in tqdm(range(Nt)):
+    # Advance
+    solver.one_step()
+
+    # Update source
+    source.update(solver, n*solver.dt)
+
+    # Clean z-dir
+    #for k in range(1,Nz-1):
+    #    solver.E[:,:,k,'z'] = solver.E[:,:,int(Nz/2),'z']
+
+    # Plot
+    if plot and n%2==0:
+        solver.plot2D(field='E', component='Abs', plane='XY', pos=0.5, 
+                norm=None, vmin=0, vmax=None, figsize=[8,4], cmap='jet', 
+                title='imgEpml/Ez', off_screen=True, n=n, interpolation='spline36')
+
+
+# Save
+hf = h5py.File('Ez.h5', 'w')
+hf['x'], hf['y'], hf['z'] = solver.x, solver.y, solver.z
+hf['t'] = np.arange(0, Nt*solver.dt, solver.dt)
+hf['Ez'] = solver.E[:,:,int(Nz/2),'z']
+hf.close()
+
+# Plot 2D
+plot = True
+if plot:
+    Y_r, X_r = np.meshgrid(solver.y, solver.x)
+    field = np.abs(solver.E[:,:,int(Nz/2),'z'])
+
+    fig = plt.figure(1, tight_layout=True, dpi=200)
+    ax = fig.add_subplot(111, projection='3d')
+
+    #ax.plot_surface(X_R, Y_R, abs(R), cmap='jet', rstride=1,  cstride=1, linewidth=0, alpha=1, antialiased=False)
+    ax.plot_surface(X_r, Y_r, field, cmap='jet', rstride=1,  cstride=1, linewidth=0, alpha=1, antialiased=False)
+    
+    ax.set_xlabel('x [a.u.]', labelpad=10)
+    ax.set_ylabel('y [a.u.]', labelpad=20)
+    ax.set_zlabel('Ez [V/m]', labelpad=10)   
+    ax.set_xlim(-100,100)
+    ax.set_ylim(-100,100)
+    ax.set_zticks(np.linspace(0, np.max(field), 2), labels= ['0', '{:.2e}'.format(np.max(field))])  
+    ax.get_proj = lambda: np.dot(Axes3D.get_proj(ax), np.diag([1.0, 1.0, 0.4, 1]))
+
+    plt.show()
\ No newline at end of file
diff --git a/field.py b/field.py
index 68964b1..5d18567 100644
--- a/field.py
+++ b/field.py
@@ -1,4 +1,10 @@
-import numpy as np
+import numpy as xp
+
+try:
+    import cupy as xp_gpu
+    imported_cupy = True
+except ImportError:
+    imported_cupy = False
 
 class Field:
     '''
@@ -9,85 +15,154 @@ class Field:
     n = 1 + (i-1) + (j-1)*Nx + (k-1)*Nx*Ny
     len(n) = Nx*Ny*Nz
     '''
-    def __init__(self, Nx, Ny, Nz, dtype=float, use_ones=False):
+    def __init__(self, Nx, Ny, Nz, dtype=float, 
+                 use_ones=False, use_gpu=False):
 
         self.Nx = Nx
         self.Ny = Ny
         self.Nz = Nz
         self.N = Nx*Ny*Nz
         self.dtype = dtype
+        self.on_gpu = use_gpu
 
+        if self.on_gpu:
+            if imported_cupy:
+                self.xp = xp_gpu
+            else:
+                print('*** cupy could not be imported, please CUDA check installation')
+        else:
+            self.xp = xp
+            
         if use_ones:
-            self.field_x = np.ones((Nx, Ny, Nz), dtype=self.dtype)
-            self.field_y = np.ones((Nx, Ny, Nz), dtype=self.dtype)
-            self.field_z = np.ones((Nx, Ny, Nz), dtype=self.dtype)
+            self.array = self.xp.ones(self.N*3, dtype=self.dtype, order='F')
+        else:
+            self.array = self.xp.zeros(self.N*3, dtype=self.dtype, order='F')
+
+    @property
+    def field_x(self):
+        return self.array[0:self.N]
+
+    @property
+    def field_y(self):
+        return self.array[self.N: 2*self.N]
+    
+    @property
+    def field_z(self):
+        return self.array[2*self.N:3*self.N]
+
+    @field_x.setter
+    def field_x(self, value):
+        if len(value.shape) > 1:
+            self.from_matrix(value, 'x')
+        else:
+            self.array[0:self.N] = value
 
+    @field_y.setter
+    def field_y(self, value):
+        if len(value.shape) > 1:
+            self.from_matrix(value, 'y')
         else:
-            self.field_x = np.zeros((Nx, Ny, Nz), dtype=self.dtype)
-            self.field_y = np.zeros((Nx, Ny, Nz), dtype=self.dtype)
-            self.field_z = np.zeros((Nx, Ny, Nz), dtype=self.dtype)
+            self.array[self.N: 2*self.N] = value
 
+    @field_z.setter
+    def field_z(self, value):
+        if len(value.shape) > 1:
+            self.from_matrix(value, 'z')
+        else:
+            self.array[2*self.N:3*self.N] = value
+
+    def toarray(self):
+        return self.array
+
+    def fromarray(self, array):
+        self.array = array
+
+    def to_matrix(self, key):
+        if key == 0 or key == 'x':
+            return self.xp.reshape(self.array[0:self.N], (self.Nx, self.Ny, self.Nz), order='F')
+        if key == 1 or key == 'y':
+            return self.xp.reshape(self.array[self.N: 2*self.N], (self.Nx, self.Ny, self.Nz), order='F')
+        if key == 2 or key == 'z':
+            return self.xp.reshape(self.array[2*self.N:3*self.N], (self.Nx, self.Ny, self.Nz), order='F')
+
+    def from_matrix(self, mat, key):
+        if key == 0 or key == 'x':
+            self.array[0:self.N] = self.xp.reshape(mat, self.N, order='F')
+        elif key == 1 or key == 'y':
+            self.array[self.N: 2*self.N] = self.xp.reshape(mat, self.N, order='F')
+        elif key == 2 or key == 'z':
+            self.array[2*self.N:3*self.N] = self.xp.reshape(mat, self.N, order='F')
+        else:
+            raise IndexError('Component id not valid')
+    
     def __getitem__(self, key):
 
         if type(key) is tuple:
             if len(key) != 4:
                 raise IndexError('Need 3 indexes and component to access the field')
             if key[3] == 0 or key[3] == 'x':
-                return self.field_x[key[0], key[1], key[2]]
+                if self.on_gpu:
+                    field = self.xp.reshape(self.array[0:self.N], (self.Nx, self.Ny, self.Nz), order='F')
+                    return field[key[0], key[1], key[2]].get()
+                else:
+                    field = self.xp.reshape(self.array[0:self.N], (self.Nx, self.Ny, self.Nz), order='F')
+                    return field[key[0], key[1], key[2]]
             elif key[3] == 1 or key[3] == 'y':
-                return self.field_y[key[0], key[1], key[2]]
+                if self.on_gpu:
+                    field = self.xp.reshape(self.array[self.N: 2*self.N], (self.Nx, self.Ny, self.Nz), order='F')
+                    return field[key[0], key[1], key[2]].get()
+                else:
+                    field = self.xp.reshape(self.array[self.N: 2*self.N], (self.Nx, self.Ny, self.Nz), order='F')
+                    return field[key[0], key[1], key[2]]
             elif key[3] == 2 or key[3] == 'z':
-                return self.field_z[key[0], key[1], key[2]]
+                if self.on_gpu:
+                    field = self.xp.reshape(self.array[2*self.N:3*self.N], (self.Nx, self.Ny, self.Nz), order='F')
+                    return field[key[0], key[1], key[2]].get()
+                else:
+                    field = self.xp.reshape(self.array[2*self.N:3*self.N], (self.Nx, self.Ny, self.Nz), order='F')
+                    return field[key[0], key[1], key[2]]
             else:
                 raise IndexError('Component id not valid')
 
         elif type(key) is int:
             if key <= self.N:
-                field = self.field_x
-            elif self.N < key <= 2*self.N:
-                field = self.field_y
-                key -= self.N
-            elif 2*self.N < key <= 3*self.N:
-                field = self.field_z
-                key -= 2*self.N
+                if self.on_gpu:
+                    return self.array[key].get()
+                else:
+                    return self.array[key]
             else:
                 raise IndexError('Lexico-graphic index cannot be higher than product of dimensions')
-
-            i, j, k = self.compute_ijk(key)
-            return field[i, j, k]
+            
+        elif type(key) is slice:
+            if self.on_gpu:
+                return self.array[key].get()
+            else:
+                return self.array[key]
 
         else:
             raise ValueError('key must be a 3-tuple or an integer')
 
     def __setitem__(self, key, value):
 
+        if self.on_gpu:
+            value = self.xp.asarray(value)
+
         if type(key) is tuple:
             if len(key) != 4:
                 raise IndexError('Need 3 indexes and component to access the field')
-            if key[3] == 0 or key[3] == 'x':
-                self.field_x[key[0], key[1], key[2]] = value
-            elif key[3] == 1 or key[3] == 'y':
-                self.field_y[key[0], key[1], key[2]] = value
-            elif key[3] == 2 or key[3] == 'z':
-                self.field_z[key[0], key[1], key[2]] = value
             else:
-                raise IndexError('Component id not valid')
+                field = self.to_matrix(key[3])
+                field[key[0], key[1], key[2]] = value
+                self.from_matrix(field, key[3])
 
         elif type(key) is int:
             if key <= self.N:
-                field = self.field_x
-            elif self.N < key <= 2*self.N:
-                field = self.field_y
-                key -= self.N
-            elif 2*self.N < key <= 3*self.N:
-                field = self.field_z
-                key -= 2*self.N
+                self.array[key] = value
             else:
                 raise IndexError('Lexico-graphic index cannot be higher than product of dimensions')
-
-            i, j, k = self.compute_ijk(key)
-            field[i, j, k] = value
-
+            
+        elif type(key) is slice:
+                self.array[key] = value   
         else:
             raise IndexError('key must be a 3-tuple or an integer')
 
@@ -96,10 +171,21 @@ def __mul__(self, other, dtype=None):
         if dtype is None:
             dtype = self.dtype
 
-        mulField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
-        mulField.field_x = self.field_x * other
-        mulField.field_y = self.field_y * other
-        mulField.field_z = self.field_z * other
+        # other is number
+        if type(other) is float or type(other) is int:
+            mulField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
+            mulField.array = self.array * other
+
+        # other is matrix 
+        elif len(other.shape) > 1:
+            mulField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
+            for d in ['x', 'y', 'z']:
+                mulField.from_matrix(self.to_matrix(d) * other, d)
+
+        # other is 1d array 
+        else:
+            mulField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
+            mulField.array = self.array * other
 
         return mulField
 
@@ -107,13 +193,24 @@ def __div__(self, other, dtype=None):
 
         if dtype is None:
             dtype = self.dtype
-            
-        mulField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
-        mulField.field_x = self.field_x / other
-        mulField.field_y = self.field_y / other
-        mulField.field_z = self.field_z / other
 
-        return mulField
+        # other is number
+        if type(other) is float or type(other) is int:
+            divField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
+            divField.array = self.array / other
+
+        # other is matrix
+        if len(other.shape) > 1:
+            divField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
+            for d in ['x', 'y', 'z']:
+                divField.from_matrix(self.to_matrix(d) / other, d)
+
+        # other is constant or 1d array 
+        else:
+            divField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
+            divField.array = self.array / other
+
+        return divField
 
     def __add__(self, other, dtype=None):
 
@@ -121,17 +218,24 @@ def __add__(self, other, dtype=None):
             dtype = self.dtype
         
         if type(other) is Field:
-            mulField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
-            mulField.field_x = self.field_x + other.field_x
-            mulField.field_y = self.field_y + other.field_y
-            mulField.field_z = self.field_z + other.field_z  
+            
+            addField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
+            addField.field_x = self.field_x + other.field_x
+            addField.field_y = self.field_y + other.field_y
+            addField.field_z = self.field_z + other.field_z  
+            
+        # other is matrix 
+        elif len(other.shape) > 1:
+            addField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
+            for d in ['x', 'y', 'z']:
+                addField.from_matrix(self.to_matrix(d) + other, d)
+
+        # other is constant or 1d array 
         else:
-            mulField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
-            mulField.field_x = self.field_x + other
-            mulField.field_y = self.field_y + other
-            mulField.field_z = self.field_z + other
+            addField = Field(self.Nx, self.Ny, self.Nz, dtype=dtype)
+            addField.array = self.array + other
 
-        return mulField
+        return addField
 
     def __repr__(self):
         return 'x:\n' + self.field_x.__repr__() + '\n'+  \
@@ -143,22 +247,6 @@ def __str__(self):
                 'y:\n' + self.field_y.__str__() + '\n'+ \
                 'z:\n' + self.field_z.__str__()
 
-    def toarray(self):
-        return np.concatenate((
-                np.reshape(self.field_x, self.N, order='F'),
-                np.reshape(self.field_y, self.N, order='F'),
-                np.reshape(self.field_z, self.N, order='F')
-            ))
-
-    def fromarray(self, arr):
-        if len(arr.shape) > 1:
-            raise ValueError('Can only assign 1d array to a Field')
-        if len(arr) != 3*self.N:
-            raise ValueError('Can only assign to a field an array of size 3*Nx*Ny*Nz')
-        self.field_x = np.reshape(arr[0:self.N], (self.Nx, self.Ny, self.Nz), order='F')
-        self.field_y = np.reshape(arr[self.N: 2*self.N], (self.Nx, self.Ny, self.Nz), order='F')
-        self.field_z = np.reshape(arr[2*self.N:3*self.N], (self.Nx, self.Ny, self.Nz), order='F')
-
     def compute_ijk(self, n):
         if n > (self.N):
             raise IndexError('Lexico-graphic index cannot be higher than product of dimensions')
@@ -169,8 +257,26 @@ def compute_ijk(self, n):
 
         return i, j, k
 
-    def get_abs(self):
-        return np.sqrt(self.field_x**2 + self.field_y**2, self.field_z**2)
+    def get_abs(self, as_matrix=True):
+        '''Computes the absolute or magnitude
+        out of the field components
+        '''
+        if as_matrix:
+            if self.on_gpu:
+                return xp.sqrt(self.to_matrix('x')**2 + 
+                            self.to_matrix('y')**2 + 
+                            self.to_matrix('z')**2 ).get()
+            else:
+                return xp.sqrt(self.to_matrix('x')**2 + 
+                            self.to_matrix('y')**2 + 
+                            self.to_matrix('z')**2 )
+
+        else: # 1d array
+            self.fill_components()
+            if self.on_gpu:
+                return xp.sqrt(self.field_x**2 + self.field_y**2, self.field_z**2).get()
+            else:
+                return xp.sqrt(self.field_x**2 + self.field_y**2, self.field_z**2)
 
     def inspect(self, plane='YZ', cmap='bwr', dpi=100, x=None, y=None, z=None, show=True, handles=False):
         import matplotlib.pyplot as plt
@@ -183,26 +289,38 @@ def inspect(self, plane='YZ', cmap='bwr', dpi=100, x=None, y=None, z=None, show=
             x, y, z = key[0], key[1], key[2]
             extent = (0, self.Nx, 0, self.Ny)
             xax, yax = 'nx', 'ny'
+            transpose = True
 
         elif plane == 'XZ':
             key=[slice(0,self.Nx), int(self.Ny//2), slice(0,self.Nz)]
             x, y, z = key[0], key[1], key[2]
-            extent = (0, self.Nx, 0, self.Nz)
-            xax, yax = 'nx', 'ny'
+            extent = (0, self.Nz, 0, self.Nx)
+            xax, yax = 'nz', 'nx'
+            transpose = False
+
         elif plane == 'YZ':
             key=[int(self.Nx//2), slice(0,self.Ny), slice(0,self.Nz)]
             x, y, z = key[0], key[1], key[2]
             extent = (0, self.Nz, 0, self.Ny)
             xax, yax = 'nz', 'ny'
+            transpose = False
 
         fig, axs = plt.subplots(1, 3, tight_layout=True, figsize=[8,6], dpi=dpi)
         dims = {0:'x', 1:'y', 2:'z'}
 
-        im = np.zeros_like(axs)
+        im = self.xp.zeros_like(axs)
+
+        for d in [0,1,2]:
+            field = self.to_matrix(d)
+            
+            if self.on_gpu:
+                field = field.get()
+
+            if transpose:
+                im[d] = axs[d].imshow(field[x,y,z].T, cmap=cmap, vmin=-field.max(), vmax=field.max(), extent=extent, origin='lower')
 
-        im[0] = axs[0].imshow(self.field_x[x,y,z], cmap=cmap, vmin=-np.max(np.max(self.field_x)), vmax=np.max(np.max(self.field_x)), extent=extent, origin='lower')
-        im[1] = axs[1].imshow(self.field_y[x,y,z], cmap=cmap, vmin=-np.max(np.max(self.field_y)), vmax=np.max(np.max(self.field_y)), extent=extent, origin='lower')
-        im[2] = axs[2].imshow(self.field_z[x,y,z], cmap=cmap, vmin=-np.max(np.max(self.field_z)), vmax=np.max(np.max(self.field_z)), extent=extent, origin='lower')
+            else:
+                im[d] = axs[d].imshow(field[x,y,z], cmap=cmap, vmin=-field.max(), vmax=field.max(), extent=extent, origin='lower')
 
         for i, ax in enumerate(axs):
             ax.set_title(f'Field {dims[i]}, plane {plane}')
@@ -241,63 +359,63 @@ def inspect3D(self, field='all', xmax=None, ymax=None, zmax=None, cmap='bwr', dp
         if ymax is None: ymax = self.Ny
         if zmax is None: zmax = self.Nz
 
-        x,y,z = np.mgrid[0:xmax+1,0:ymax+1,0:zmax+1]
+        x,y,z = self.xp.mgrid[0:xmax+1,0:ymax+1,0:zmax+1]
         axs = []
 
         # field x
         if plot_x:
-            arr = self.field_x[0:int(xmax),0:int(ymax),0:int(zmax)]
+            arr = self.to_matrix('x')[0:int(xmax),0:int(ymax),0:int(zmax)]
             if field == 'all':
                 ax = fig.add_subplot(1, 3, 1, projection='3d')
             else:
                 ax = fig.add_subplot(1, 1, 1, projection='3d')
             
-            vmin, vmax = -np.max(np.abs(arr)), +np.max(np.abs(arr))
+            vmin, vmax = -self.xp.max(self.xp.abs(arr)), +self.xp.max(self.xp.abs(arr))
             norm = mpl.colors.Normalize(vmin=vmin, vmax=vmax)
             colors = mpl.colormaps[cmap](norm(arr))
-            vox = ax.voxels(x, y, z, filled=np.ones_like(arr), facecolors=colors)
+            vox = ax.voxels(x, y, z, filled=self.xp.ones_like(arr), facecolors=colors)
             
             m = mpl.cm.ScalarMappable(cmap=cmap, norm=norm)
             m.set_array([])
-            fig.colorbar(m, shrink=0.5, aspect=10)
+            #fig.colorbar(m, shrink=0.5, aspect=10)
             ax.set_title(f'Field x')
             axs.append(ax)
 
         # field y
         if plot_y:
-            arr = self.field_y[0:int(xmax),0:int(ymax),0:int(zmax)]
+            arr = self.to_matrix('y')[0:int(xmax),0:int(ymax),0:int(zmax)]
             if field == 'all':
                 ax = fig.add_subplot(1, 3, 2, projection='3d')
             else:
                 ax = fig.add_subplot(1, 1, 1, projection='3d')
             
-            vmin, vmax = -np.max(np.abs(arr)), +np.max(np.abs(arr))
+            vmin, vmax = -self.xp.max(self.xp.abs(arr)), +self.xp.max(self.xp.abs(arr))
             norm = mpl.colors.Normalize(vmin=vmin, vmax=vmax)
             colors = mpl.colormaps[cmap](norm(arr))
-            vox = ax.voxels(x, y, z, filled=np.ones_like(arr), facecolors=colors)
+            vox = ax.voxels(x, y, z, filled=self.xp.ones_like(arr), facecolors=colors)
             
             m = mpl.cm.ScalarMappable(cmap=cmap, norm=norm)
             m.set_array([])
-            fig.colorbar(m, shrink=0.5, aspect=10)
+            #fig.colorbar(m, shrink=0.5, aspect=10)
             ax.set_title(f'Field y')
             axs.append(ax)
 
         # field z
         if plot_z:
-            arr = self.field_z[0:int(xmax),0:int(ymax),0:int(zmax)]
+            arr = self.to_matrix('z')[0:int(xmax),0:int(ymax),0:int(zmax)]
             if field == 'all':
                 ax = fig.add_subplot(1, 3, 3, projection='3d')
             else:
                 ax = fig.add_subplot(1, 1, 1, projection='3d')
 
-            vmin, vmax = -np.max(np.abs(arr)), +np.max(np.abs(arr))
+            vmin, vmax = -self.xp.max(self.xp.abs(arr)), +self.xp.max(self.xp.abs(arr))
             norm = mpl.colors.Normalize(vmin=vmin, vmax=vmax)
             colors = mpl.colormaps[cmap](norm(arr))
-            vox = ax.voxels(x, y, z, filled=np.ones_like(arr), facecolors=colors)
+            vox = ax.voxels(x, y, z, filled=self.xp.ones_like(arr), facecolors=colors)
             
             m = mpl.cm.ScalarMappable(cmap=cmap, norm=norm)
             m.set_array([])
-            fig.colorbar(m, shrink=0.5, aspect=10)
+            #fig.colorbar(m, shrink=0.5, aspect=10)
             ax.set_title(f'Field z')
             axs.append(ax)
 
@@ -318,64 +436,3 @@ def inspect3D(self, field='all', xmax=None, ymax=None, zmax=None, cmap='bwr', dp
         
         if show:
             plt.show()
-
-class Field2D:
-    '''
-    Class to switch from 2D to collapsed notation by
-    defining the __getitem__ magic method
-
-    linear numbering:
-    n = 1 + (i-1) + (j-1)*Nx
-    len(n) = Nx*Ny
-    '''
-    def __init__(self, Nx, Ny, dtype=float):
-
-        self.Nx = Nx
-        self.Ny = Ny
-        self.N = Nx*Ny
-        self.dtype = dtype
-
-        self.field = np.zeros((Nx, Ny), dtype=self.dtype)
-
-    def __getitem__(self, key):
-
-        if type(key) is tuple:
-            if len(key) != 2:
-                raise ValueError('Need 3 indexes to access the field')
-            return self.field[key[0], key[1]]
-
-        elif type(key) is int:
-            i, j = self.compute_ij(key)
-            return self.field[i, j]
-
-        else:
-            raise ValueError('key must be a 3-tuple or an integer')
-
-    def __setitem__(self, key, value):
-
-        if type(key) is tuple:
-            if len(key) != 2:
-                raise ValueError('Need 3 indexes to access the field')
-            self.field[key[0], key[1]] = value
-
-        elif type(key) is int:
-            i, j = self.compute_ij(key)
-            self.field[i, j] = value
-
-        else:
-            raise ValueError('key must be a 3-tuple or an integer')
-
-    def __repr__(self):
-        return self.field.__repr__()
-
-    def __str__(self):
-        return self.field.__str__()
-
-    def compute_ij(self, n):
-        if n > (self.N):
-            raise ValueError('Lexico-graphic index cannot be higher than product of dimensions')
-
-        i = n%self.Nx
-        j = n//self.Nx
-
-        return i, j
\ No newline at end of file
diff --git a/gridFIT3D.py b/gridFIT3D.py
index d196827..596a92a 100644
--- a/gridFIT3D.py
+++ b/gridFIT3D.py
@@ -34,13 +34,20 @@ class GridFIT3D:
         Scaling value to apply to the stl model to convert to [m]
         - if float, it will be applied to all stl in `stl_solids`
         - if dict, it must contain the same keys as `stl_solids` 
-          
+    tol: float, default 1e-3
+        Tolerance factor for stl import, used in grid.select_enclosed_points.
+        Importing tolerance is computed by: tol*min(dx,dy,dz). 
+    verbose: int or bool, default 1
+        Enable verbose ouput on the terminal
     """
 
     def __init__(self, xmin, xmax, ymin, ymax, zmin, zmax, 
                 Nx, Ny, Nz, stl_solids=None, stl_materials=None, 
-                stl_rotate=[0., 0., 0.], stl_translate=[0., 0., 0.], stl_scale=1.0):
+                stl_rotate=[0., 0., 0.], stl_translate=[0., 0., 0.], stl_scale=1.0,
+                verbose=1, tol=1e-3):
         
+        self.verbose = verbose
+
         # domain limits
         self.xmin = xmin
         self.xmax = xmax
@@ -70,7 +77,11 @@ def __init__(self, xmin, xmax, ymin, ymax, zmin, zmax,
         self.y = np.linspace(self.ymin, self.ymax, self.Ny+1)
         self.z = np.linspace(self.zmin, self.zmax, self.Nz+1)
 
+        #tolerance for stl import tol*min(dx,dy,dz)
+        self.tol = tol 
+
         # grid
+        if verbose: print('Generating grid...')
         X, Y, Z = np.meshgrid(self.x, self.y, self.z, indexing='ij')
         self.grid = pv.StructuredGrid(X.transpose(), Y.transpose(), Z.transpose())
 
@@ -115,6 +126,8 @@ def __init__(self, xmin, xmax, ymin, ymax, zmin, zmax,
 
     def mark_cells_in_stl(self):
 
+        if self.verbose: print('Importing stl solids...')
+
         if type(self.stl_solids) is not dict:
             if type(self.stl_solids) is str:
                 self.stl_solids = {'Solid 1' : self.stl_solids}
@@ -142,7 +155,7 @@ def mark_cells_in_stl(self):
                 stl_translate[key] = self.stl_translate
             self.stl_translate = stl_translate
 
-        tol = np.min([self.dx, self.dy, self.dz])*1e-3
+        tol = np.min([self.dx, self.dy, self.dz])*self.tol
         for key in self.stl_solids.keys():
 
             surf = self.read_stl(key)
diff --git a/requirements.txt b/requirements.txt
index c1a44b9..98771db 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,135 @@
-numpy>=1.21.0
-scipy>=1.7.0
-matplotlib>=3.4.0
-pyvista>=0.32.0
-h5py>=3.6.0
-tqdm>=4.62.0
\ No newline at end of file
+aiohttp==3.9.5
+aiosignal==1.3.1
+anyio==4.4.0
+argon2-cffi==23.1.0
+argon2-cffi-bindings==21.2.0
+arrow==1.3.0
+asttokens==2.4.1
+async-lru==2.0.4
+async-timeout==4.0.3
+attrs==23.2.0
+Babel==2.15.0
+beautifulsoup4==4.12.3
+bleach==6.1.0
+certifi==2024.6.2
+cffi==1.16.0
+charset-normalizer==3.3.2
+cmocean==4.0.3
+colorcet==3.1.0
+comm==0.2.2
+contourpy==1.2.1
+cycler==0.12.1
+debugpy==1.8.2
+decorator==5.1.1
+defusedxml==0.7.1
+exceptiongroup==1.2.1
+executing==2.0.1
+fastjsonschema==2.20.0
+fonttools==4.53.0
+fqdn==1.5.1
+frozenlist==1.4.1
+h11==0.14.0
+h5py==3.11.0
+httpcore==1.0.5
+httpx==0.27.0
+idna==3.7
+imageio==2.34.2
+importlib_metadata==8.0.0
+importlib_resources==6.4.0
+ipykernel==6.29.4
+ipython==8.18.1
+ipywidgets==8.1.3
+isoduration==20.11.0
+jedi==0.19.1
+Jinja2==3.1.4
+json5==0.9.25
+jsonpointer==3.0.0
+jsonschema==4.22.0
+jsonschema-specifications==2023.12.1
+jupyter-events==0.10.0
+jupyter-lsp==2.2.5
+jupyter_client==8.6.2
+jupyter_core==5.7.2
+jupyter_server==2.14.1
+jupyter_server_proxy==4.2.0
+jupyter_server_terminals==0.5.3
+jupyterlab==4.2.3
+jupyterlab_pygments==0.3.0
+jupyterlab_server==2.27.2
+jupyterlab_widgets==3.0.11
+kiwisolver==1.4.5
+markdown-it-py==3.0.0
+MarkupSafe==2.1.5
+matplotlib==3.9.0
+matplotlib-inline==0.1.7
+mdurl==0.1.2
+meshio==5.3.5
+mistune==3.0.2
+more-itertools==10.3.0
+msgpack==1.0.8
+multidict==6.0.5
+nbclient==0.10.0
+nbconvert==7.16.4
+nbformat==5.10.4
+nest-asyncio==1.6.0
+notebook_shim==0.2.4
+numpy==1.24.2
+overrides==7.7.0
+packaging==24.1
+pandocfilters==1.5.1
+parso==0.8.4
+pexpect==4.9.0
+pillow==10.3.0
+platformdirs==4.2.2
+pooch==1.8.2
+prometheus_client==0.20.0
+prompt_toolkit==3.0.47
+psutil==6.0.0
+ptyprocess==0.7.0
+pure-eval==0.2.2
+pycparser==2.22
+Pygments==2.18.0
+pyparsing==3.1.2
+python-dateutil==2.9.0.post0
+python-json-logger==2.0.7
+pyvista==0.43.10
+PyYAML==6.0.1
+pyzmq==26.0.3
+referencing==0.35.1
+requests==2.32.3
+rfc3339-validator==0.1.4
+rfc3986-validator==0.1.1
+rich==13.7.1
+rpds-py==0.18.1
+scipy==1.13.1
+scooby==0.10.0
+Send2Trash==1.8.3
+simpervisor==1.0.0
+six==1.16.0
+sniffio==1.3.1
+soupsieve==2.5
+stack-data==0.6.3
+terminado==0.18.1
+tinycss2==1.3.0
+tomli==2.0.1
+tornado==6.4.1
+tqdm==4.66.4
+traitlets==5.14.3
+trame==3.6.3
+trame-client==3.2.0
+trame-server==3.0.2
+trame-vtk==2.8.9
+trame-vuetify==2.6.0
+types-python-dateutil==2.9.0.20240316
+typing_extensions==4.12.2
+uri-template==1.3.0
+urllib3==2.2.2
+vtk==9.3.0
+wcwidth==0.2.13
+webcolors==24.6.0
+webencodings==0.5.1
+websocket-client==1.8.0
+widgetsnbextension==4.0.11
+wslink==2.1.1
+yarl==1.9.4
+zipp==3.19.2
diff --git a/solverFIT3D.py b/solverFIT3D.py
index 5097e88..e414458 100644
--- a/solverFIT3D.py
+++ b/solverFIT3D.py
@@ -5,21 +5,58 @@
 
 from scipy.constants import c as c_light, epsilon_0 as eps_0, mu_0 as mu_0
 from scipy.sparse import csc_matrix as sparse_mat
-from scipy.sparse import diags, block_diag, hstack, vstack
-from scipy.sparse.linalg import inv
+from scipy.sparse import diags, hstack, vstack
 
 from field import Field
 from materials import material_lib
 
+try:
+    from cupyx.scipy.sparse import csc_matrix as gpu_sparse_mat
+    imported_cupyx = True
+except ImportError:
+    imported_cupyx = False
+
 class SolverFIT3D:
 
     def __init__(self, grid, wake=None, cfln=0.5, dt=None,
                  bc_low=['Periodic', 'Periodic', 'Periodic'],
                  bc_high=['Periodic', 'Periodic', 'Periodic'],
-                 use_conductors=False, use_stl=False,
-                 bg=[1.0, 1.0], verbose=0):
+                 use_conductors=False, use_stl=False, use_gpu=False,
+                 bg=[1.0, 1.0], verbose=1):
         '''
-        TODO Docstring
+        Class holding the 3D time-domain electromagnetic solver 
+        algorithm based on the Finite Integration Technique (FIT)
+
+        Parameters
+        ----------
+        grid: GridFIT3D object
+            Instance of GridFIT3D class containing the simulation mesh and the 
+            imported geometry
+        wake: WakeSolver object, optional
+            Instance of WakeSolver class containing the beam parameters. Needed to 
+            run a wakefield simulation to compute wake potential and impedance
+        cfln: float, default 0.5
+            Convergence condition by Courant–Friedrichs–Lewy, used to compute the
+            simulation timestep
+        dt: float, optional
+            Simulation timestep. If not None, it overrides the cfln-based timestep
+        bc_low: list, default ['Periodic', 'Periodic', 'Periodic']
+            Domain box boundary conditions for X-, Y-, Z-
+        bc_high: list, default ['Periodic', 'Periodic', 'Periodic']
+            Domain box boundary conditions for X+, Y+, Z+
+        use_conductors: bool, default False
+            If true, enables geometry import based on elements from `conductors.py`
+        use_stl: bool, default False
+            If true, activates all the solids and materials passed to the `grid` object
+        use_gpu: bool, default False, 
+            Using cupyx, enables GPU accelerated computation of every timestep
+        bg: list, default [1.0, 1.0]
+            Background material for the simulation box [eps_r, mu_r, sigma]. Default is vacuum.
+            It supports any material from the material library in `materials.py`, of a 
+            custom list of floats. If conductivity (sigma) is passed, 
+            it enables flag: use_conductivity
+        verbose: int or bool, default True
+            Enable verbose ouput on the terminal if 1 or True
         '''
 
         self.verbose = verbose
@@ -30,6 +67,7 @@ def __init__(self, grid, wake=None, cfln=0.5, dt=None,
         self.plotter_active = False
         self.use_conductors = use_conductors
         self.use_stl = use_stl
+        self.use_gpu = use_gpu
         self.activate_abc = False        # Will turn true if abc BCs are chosen
         self.activate_pml = False        # Will turn true if pml BCs are chosen
         self.use_conductivity = False    # Will turn true if conductive material or pml is added
@@ -68,9 +106,9 @@ def __init__(self, grid, wake=None, cfln=0.5, dt=None,
         self.wake = wake
 
         # Fields
-        self.E = Field(self.Nx, self.Ny, self.Nz)
-        self.H = Field(self.Nx, self.Ny, self.Nz)
-        self.J = Field(self.Nx, self.Ny, self.Nz)
+        self.E = Field(self.Nx, self.Ny, self.Nz, use_gpu=self.use_gpu)
+        self.H = Field(self.Nx, self.Ny, self.Nz, use_gpu=self.use_gpu)
+        self.J = Field(self.Nx, self.Ny, self.Nz, use_gpu=self.use_gpu)
 
         # Matrices
         if verbose: print('Assembling operator matrices...')
@@ -133,12 +171,53 @@ def __init__(self, grid, wake=None, cfln=0.5, dt=None,
         self.Dsigma = diags(self.sigma.toarray(), shape=(3*N, 3*N), dtype=float)
 
         # Pre-computing
-        if verbose: print('Pre-computing ...'); 
+        if verbose: print('Pre-computing ...') 
         self.tDsiDmuiDaC = self.tDs * self.iDmu * self.iDa * self.C 
         self.itDaiDepsDstC = self.itDa * self.iDeps * self.Ds * self.C.transpose()
         
+        # Move to GPU
+        if use_gpu:
+            if verbose: print('Moving to GPU...') 
+            if imported_cupyx:
+                self.tDsiDmuiDaC = gpu_sparse_mat(self.tDsiDmuiDaC)
+                self.itDaiDepsDstC = gpu_sparse_mat(self.itDaiDepsDstC)
+                self.iDeps = gpu_sparse_mat(self.iDeps)
+                self.Dsigma = gpu_sparse_mat(self.Dsigma)
+            else:
+                print('*** cupyx could not be imported, please check CUDA installation')
+
         if verbose:  print(f'Total initialization time: {time.time() - t0} s')
 
+    def update_tensors(self, tensor='ieps'):
+        '''Update tensor matrices after 
+        Field ieps, imu or sigma have been modified 
+        and pre-compute the time-stepping matrices
+
+        Params
+        ------
+        tensor : str, default 'all'
+            Name of the tensor to update: 'ieps', 'imu', 'sigma' 
+            for permitivity, permeability and conductivity, respectively. 
+            If left to default 'all', all thre tensors will be recomputed. 
+        '''
+        if self.verbose: print(f'Re-computing tensor "{tensor}"...') 
+
+        if tensor == 'ieps': 
+            self.iDeps = diags(self.ieps.toarray(), shape=(3*self.N, 3*self.N), dtype=float)
+        elif tensor =='imu':
+            self.iDmu = diags(self.imu.toarray(), shape=(3*self.N, 3*self.N), dtype=float)
+        elif tensor == 'sigma':
+            self.Dsigma = diags(self.sigma.toarray(), shape=(3*self.N, 3*self.N), dtype=float)
+        elif tensor == 'all':
+            self.iDeps = diags(self.ieps.toarray(), shape=(3*self.N, 3*self.N), dtype=float)
+            self.iDmu = diags(self.imu.toarray(), shape=(3*self.N, 3*self.N), dtype=float)
+            self.Dsigma = diags(self.sigma.toarray(), shape=(3*self.N, 3*self.N), dtype=float)
+
+        if self.verbose: print('Re-Pre-computing ...') 
+        self.tDsiDmuiDaC = self.tDs * self.iDmu * self.iDa * self.C 
+        self.itDaiDepsDstC = self.itDa * self.iDeps * self.Ds * self.C.transpose()
+        self.step_0 = False
+
     def one_step(self):
 
         if self.step_0:
@@ -339,10 +418,13 @@ def emsolve(self, Nt, source=None, save=False, fields=['E'], components=['Abs'],
             if plot3d and n%plot_every == 0:
                 self.plot3D(n=n, **plotkw)
 
+        # End
+        for hf in hfs:
+            hf.close()
 
     def wakesolve(self, wakelength, wake=None, 
                   save_J=False, add_space=None, use_etd=False,
-                  plot=False, plot_every=1, **kwargs):
+                  plot=False, plot_every=1, plot_until=None, **kwargs):
         '''
         Run the EM simulation and compute the longitudinal (z) and transverse (x,y)
         wake potential WP(s) and impedance Z(s). 
@@ -402,6 +484,8 @@ def wakesolve(self, wakelength, wake=None,
         except:
             raise('Python package `h5py` is needed to save field data in HDF5 format')
         
+        self.Ez_file = self.wake.Ez_file
+
         # beam parameters
         self.q = self.wake.q
         self.ti = self.wake.ti
@@ -443,13 +527,13 @@ def beam(self, t):
         tmax = (wakelength + self.ti*self.v + (self.z.max()-self.z.min()))/self.v #[s]
         Nt = int(tmax/self.dt)
         xx, yy = slice(self.ixt-1, self.ixt+2), slice(self.iyt-1, self.iyt+2)
-        if add_space is not None:
+        if add_space is not None and add_space !=0:
             zz = slice(add_space, -add_space)
         else: 
             zz = slice(0, self.Nz)
 
         # hdf5 
-        hf = h5py.File('Ez.h5', 'w')
+        hf = h5py.File(self.Ez_file, 'w')
         hf['x'], hf['y'], hf['z'] = self.x[xx], self.y[yy], self.z[zz]
         hf['t'] = np.arange(0, Nt*self.dt, self.dt)
 
@@ -464,6 +548,8 @@ def beam(self, t):
         else:
             update = self.one_step
 
+        if plot_until is None: plot_until = Nt
+
         print('Running electromagnetic time-domain simulation...')
         for n in tqdm(range(Nt)):
 
@@ -479,8 +565,11 @@ def beam(self, t):
             update()
             
             # Plot
-            if plot and n%plot_every == 0:
-                self.plot2D(field='E', component='z', n=n, **plotkw)
+            if plot:
+                if n%plot_every == 0 and n<plot_until and n>int(self.ti/self.dt):
+                    self.plot2D(field='E', component='z', n=n, **plotkw)
+                else:
+                    pass
 
         hf.close()
         if save_J:
@@ -607,6 +696,11 @@ def apply_bc_to_C(self):
 
         # Absorbing boundary conditions ABC
         if any(True for x in self.bc_low if x.lower() == 'abc'):
+            # maybe we need this for abc to work?
+            self.tL[-1, :, :, 'x'] = self.L[0, :, :, 'x']
+            self.itA[-1, :, :, 'y'] = self.iA[0, :, :, 'y']
+            self.itA[-1, :, :, 'z'] = self.iA[0, :, :, 'z']
+
             self.activate_abc = True
 
         # Perfect Matching Layers (PML)
@@ -626,9 +720,19 @@ def fill_pml_sigmas(self):
 
         # Fill
         if self.bc_low[0].lower() == 'pml':
-            sx[0:self.npml] = 1/(2*self.dt)*((self.x[self.npml] - self.x[:self.npml])/(self.npml*self.dx))**pml_exp
-            for i in range(self.npml):
-                self.sigma[i, :, :, 'x'] = sx[i]
+            sx[0:self.npml] = eps_0/(2*self.dt)*((self.x[self.npml] - self.x[:self.npml])/(self.npml*self.dx))**pml_exp
+            #sx[0:self.npml] = 20*((self.x[self.npml] - self.x[:self.npml])/(self.npml*self.dx))**pml_exp
+            print(f'sx min: {sx.min()}')
+            print(f'sx max: {sx.max()}')
+            for d in ['x', 'y', 'z']:
+                for i in range(self.npml):
+                    #if d == 'x':
+                    #    self.sigma[i, :, :, d] = 1/sx[i]
+                    #else:
+                    self.sigma[i, :, :, d] = sx[i]
+                    #if sx[i] > 0: self.ieps[i, :, :, d] = 1/(5*self.npml*eps_0)
+                    #if sx[i] > 0.001 : self.ieps[i, :, :, d] = 1/(np.mean(sx[:self.npml])*eps_0)
+                    if sx[i] > 0 : self.ieps[i, :, :, d] = 1/(eps_0+sx[i]*(2*self.dt)) 
 
         if self.bc_low[1].lower() == 'pml':
             sy[0:self.npml] = 1/(2*self.dt)*((self.y[self.npml] - self.y[:self.npml])/(self.npml*self.dy))**pml_exp
@@ -698,7 +802,7 @@ def update_abc(self):
 
         if self.bc_high[0].lower() == 'abc':
             for d in ['x', 'y', 'z']:
-                self.E[-1, :, :, d] = self.E[-2, :, :, d]
+                self.E[-1, :, :, d] = -self.E[-2, :, :, d]
                 self.H[-1, :, :, d] = self.H[-2, :, :, d] 
 
         if self.bc_high[1].lower() == 'abc':
diff --git a/sources.py b/sources.py
index 4fd4598..3b18e83 100644
--- a/sources.py
+++ b/sources.py
@@ -58,7 +58,7 @@ def update(self, solver, t):
         solver.J[self.ixs,self.iys,:,'z'] = self.q*c_light*profile/solver.dx/solver.dy
 
 class PlaneWave:
-    def __init__(self,   xs=None, ys=None, nodes=15, f=None, beta=1.0):
+    def __init__(self, xs=None, ys=None, zs=0, nodes=15, f=None, beta=1.0):
         '''
         Updates the fields E and H every timestep 
         to introduce a planewave excitation at the given 
@@ -67,18 +67,23 @@ def __init__(self,   xs=None, ys=None, nodes=15, f=None, beta=1.0):
         Parameters
         ---
         xs, ys: slice, default 0:N
-            Transverse positions of the source [m]
+            Transverse positions of the source (indexes)
+        zs: int or slice, default 0
+            Injection position in z 
         nodes: float, default 15
             Number of nodes between z.min and z.max
         f: float, default nodes/T
             Frequency of the plane wave [Hz]. It overrides nodes param.
         beta: float, default 1.
             Relativistic beta
+
+        # TODO: support different directions
         '''
         # Check inputs and update self
         self.nodes = nodes
         self.beta = beta
         self.xs, self.ys = xs, ys
+        self.zs = zs
         self.f = f
         self.is_first_update = True
      
@@ -91,13 +96,14 @@ def update(self, solver, t):
             if self.f is None:
                 T = (solver.z.max()-solver.z.min())/c_light
                 self.f = self.nodes/T
+
             self.vp = self.beta*c_light  # wavefront velocity beta*c
             self.w = 2*np.pi*self.f           # ang. frequency  
             self.kz = self.w/c_light     # wave number   
             self.is_first_update = False
 
-        solver.H[self.xs,self.ys,0,'y'] = -1.0 * np.cos(self.w*t) 
-        solver.E[self.xs,self.ys,0,'x'] = 1.0 * np.cos(self.w*t) /(self.kz/(mu_0*self.vp)) 
+        solver.H[self.xs,self.ys,self.zs,'y'] = -1.0 * np.cos(self.w*t) 
+        solver.E[self.xs,self.ys,self.zs,'x'] = 1.0 * np.cos(self.w*t) /(self.kz/(mu_0*self.vp)) 
 
 class WavePacket:
     def __init__(self, xs=None, ys=None, 
@@ -161,4 +167,158 @@ def update(self, solver, t):
 
         # Update
         self.H[self.xs,self.ys,0,'y'] = -1.0*np.cos(self.w*t)*gaussxy*gausst
-        self.E[self.xs,self.ys,0,'x'] = 1.0*mu_0*c_light*np.cos(self.w*t)*gaussxy*gausst
\ No newline at end of file
+        self.E[self.xs,self.ys,0,'x'] = 1.0*mu_0*c_light*np.cos(self.w*t)*gaussxy*gausst
+
+class Dipole:
+    def __init__(self, field='E', component='z',
+                xs=None, ys=None, zs=None, 
+                nodes=10, f=None, amplitude=1.0):
+        '''
+        Updates the fields E and H every timestep 
+        to introduce a planewave excitation at the given 
+        xs, ys slice, moving in z+ direction
+
+        Parameters
+        ---
+        field: str, default 'E'
+            Field to add to source to. Supports component e.g. 'Ex'
+        component: str, default 'z'
+            If not specified in field, component of the field to add the source to
+        xs, ys, zs: int or slice, default N/2
+            Positions of the source (indexes)
+        nodes: float, default 15
+            Number of nodes between z.min and z.max
+        f: float, default nodes/T
+            Frequency of the plane wave [Hz]. It overrides nodes param.
+        '''
+        # Check inputs and update self
+        self.nodes = nodes
+        self.xs, self.ys, self.zs = xs, ys, zs
+        self.f = f
+        self.field = field
+        self.component = component
+        self.amplitude = amplitude
+
+        if len(field) == 2: #support for e.g. field='Ex'
+            self.component = field[1]
+            self.field = field[0]
+
+        self.is_first_update = True
+
+     
+    def update(self, solver, t):
+        if self.is_first_update:
+            if self.xs is None:
+                self.xs = int(solver.Nx/2)
+            if self.ys is None:
+                self.ys = int(solver.Ny/2)
+            if self.zs is None:
+                self.zs = int(solver.Nz/2)
+            if self.f is None:
+                T = (solver.z.max()-solver.z.min())/c_light
+                self.f = self.nodes/T
+            
+            self.w = 2*np.pi*self.f
+            self.is_first_update = False
+
+        if self.field == 'E':
+            solver.E[self.xs,self.ys,self.zs,self.component] = self.amplitude*np.sin(self.w*t) 
+        elif self.field == 'H':
+            solver.H[self.xs,self.ys,self.zs,self.component] = self.amplitude*np.sin(self.w*t) 
+        elif self.field == 'J':
+            solver.J[self.xs,self.ys,self.zs,self.component] = self.amplitude*np.sin(self.w*t) 
+        else:
+            print(f'Field "{self.field}" not valid, should be "E", "H" or "J"]')
+
+class Pulse:
+    def __init__(self, field='E', component='z',
+                xs=None, ys=None, zs=None, 
+                shape='Harris', L=None, amplitude=1.0,
+                delay=0.):
+        '''
+        Injects an electromagnetic pulse at the given 
+        source point (xs, ys, zs), with the selected
+        shape, length and amplitude.
+
+        Parameters
+        ----
+        field: str, default 'E'
+            Field to add to source to. Supports component e.g. 'Ex'
+        component: str, default 'z'
+            If not specified in field, component of the field to add the source to
+        xs, ys, zs: int or slice, default N/2
+            Positions of the source (indexes)
+        shape: str, default 'Harris'
+            Profile of the pulse in time: ['Harris', 'Gaussian']
+        L: float, default 50*dt
+            width of the pulse (~10*sigma)
+
+        Note: injection time for the gaussian pulse t0=5*L to ensure smooth derivative.
+        '''
+        # Check inputs and update self
+
+        self.xs, self.ys, self.zs = xs, ys, zs
+        self.field = field
+        self.component = component
+        self.amplitude = amplitude
+        self.shape = shape
+        self.L = L
+        self.delay = delay
+
+        if len(field) == 2: #support for e.g. field='Ex'
+            self.component = field[1]
+            self.field = field[0]
+
+        if shape.lower() == 'harris':
+            self.tprofile = self.harris_pulse
+        elif shape.lower() == 'gaussian':
+            self.tprofile = self.gaussian_pulse
+        elif shape.lower() == 'rectangular':
+            self.tprofile = self.rectangular_pulse
+        else:
+            print('** shape does not, match available types: "Harris", "Gaussian", "Rectangular"')
+
+        self.is_first_update = True
+
+    def harris_pulse(self, t):
+        t = t*c_light - self.delay
+        try:
+            if t<self.L: 
+                return (10 - 15*np.cos(2*np.pi/self.L*t) + 6*np.cos(4*np.pi/self.L*t) - np.cos(6*np.pi/self.L*t))/32 #L dividing (working)
+            else:
+                return 0.
+        except: #support for time arrays
+            return (10 - 15*np.cos(2*np.pi/self.L*t) + 6*np.cos(4*np.pi/self.L*t) - np.cos(6*np.pi/self.L*t))/32 #L dividing (working)
+
+    def gaussian_pulse(self, t):
+        t = t*c_light - self.delay
+        return np.exp(-(t-5*(self.L/10))**2/(2*(self.L/10)**2))
+    
+    def rectangular_pulse(self, t):
+        t = t*c_light - self.delay
+        if t<self.L and t>0.:
+            return 1.0
+        else:
+            return 0.0
+
+    def update(self, solver, t):
+        if self.is_first_update:
+            if self.xs is None:
+                self.xs = int(solver.Nx/2)
+            if self.ys is None:
+                self.ys = int(solver.Ny/2)
+            if self.zs is None:
+                self.zs = int(solver.Nz/2)
+            if self.L is None:
+                self.L = 50*solver.dt
+
+            self.is_first_update = False
+
+        if self.field == 'E':
+            solver.E[self.xs,self.ys,self.zs,self.component] = self.amplitude*self.tprofile(t)
+        elif self.field == 'H':
+            solver.H[self.xs,self.ys,self.zs,self.component] = self.amplitude*self.tprofile(t) 
+        elif self.field == 'J':
+            solver.J[self.xs,self.ys,self.zs,self.component] = self.amplitude*self.tprofile(t) 
+        else:
+            print(f'Field "{self.field}" not valid, should be "E", "H" or "J"]')
\ No newline at end of file
diff --git a/wakeSolver.py b/wakeSolver.py
index 149fbfa..bbbe976 100644
--- a/wakeSolver.py
+++ b/wakeSolver.py
@@ -16,7 +16,7 @@ def __init__(self, q=1e-9, sigmaz=1e-3, beta=1.0,
                  xsource=0., ysource=0., xtest=0., ytest=0., 
                  chargedist=None, ti=None, add_space=0, Ez_file='Ez.h5', 
                  save=True, results_folder='results/',
-                 verbose=0, logfile=True):
+                 verbose=0, logfile=False):
         '''
         Parameters
         ----------
@@ -53,7 +53,7 @@ def __init__(self, q=1e-9, sigmaz=1e-3, beta=1.0,
             - Charge distribution: lambda.txt, spectrum.txt
         verbose: bool, default 0
             Controls the level of verbose in the terminal output
-        logfile: bool, default True
+        logfile: bool, default False
             Creates a `wake.log` file with the summary of the input parameters
             and calculations performed 
 
@@ -278,7 +278,8 @@ def calc_long_WP(self, Ezt=None,**kwargs):
                 for k in range(nz): 
                     ts = (self.zf[k]+s[n])/self.v-zmin/self.v-self.t[0]+ti
                     it = int(ts/dt)                 #find index for t
-                    WP[n] = WP[n]+(Ezt[k, it])*dz   #compute integral
+                    if it < nt:
+                        WP[n] = WP[n]+(Ezt[k, it])*dz   #compute integral
                     pbar.update(1)
 
         WP = WP/(self.q*1e12)     # [V/pC]
@@ -508,7 +509,10 @@ def calc_long_Z(self, samples=1001, fmax=None, **kwargs):
             self.calc_lambdas()
         elif self.lambdas is None and self.chargedist is None:
             self.calc_lambdas_analytic()
-            self.log('Using analytic charge distribution λ(s) since no data was provided')
+            try:
+                self.log('! Using analytic charge distribution λ(s) since no data was provided')
+            except: #ascii encoder error handling
+                self.log('! Using analytic charge distribution since no data was provided')
 
         # Set up the DFT computation
         ds = np.mean(self.s[1:]-self.s[:-1])
@@ -739,7 +743,7 @@ def log(self, txt):
         if self.verbose:
             print('\x1b[2;37m'+txt+'\x1b[0m')
 
-        if not self.log:
+        if not self.logfile:
             return
 
         title = 'wake'


Test patch:
diff --git a/examples/tests/letters_Carlo.stl b/examples/tests/letters_Carlo.stl
new file mode 100644
index 0000000..7965c85
Binary files /dev/null and b/examples/tests/letters_Carlo.stl differ
diff --git a/examples/tests/letters_LEO.stl b/examples/tests/letters_LEO.stl
new file mode 100644
index 0000000..39b9050
Binary files /dev/null and b/examples/tests/letters_LEO.stl differ