diff --git a/examples/kernels b/examples/kernels
index 1f341d04899cd66f60e1f147a1d07f710d355644..d3669abcb372de0f4eda05bbb5ba1eac45bd0b61 100644
--- a/examples/kernels
+++ b/examples/kernels
@@ -1,846 +1,841 @@
 digraph AST {
 	node [color=lightblue2 style=filled]
 	size="6,6"
-	n140112198557368 [label=Block]
-	n140112198162136 [label=KernelBlock]
-	n140112198557368 -> n140112198162136
-	n140112198279352 [label=KernelBlock]
-	n140112198557368 -> n140112198279352
-	n140112198162136 [label=KernelBlock]
-	n140112198161856 [label=Block]
-	n140112198162136 -> n140112198161856
-	n140112198161856 [label=Block]
-	n140112198587056 [label=ParticleFor]
-	n140112198161856 -> n140112198587056
-	n140112198587056 [label=ParticleFor]
-	n140112198161912 [label="Iter(0)"]
-	n140112198587056 -> n140112198161912
-	n140112198162080 [label=Block]
-	n140112198587056 -> n140112198162080
-	n140112198161968 [label=0]
-	n140112198587056 -> n140112198161968
-	n140112198162024 [label=0]
-	n140112198587056 -> n140112198162024
-	n140112198161912 [label="Iter(0)"]
-	n140112198162080 [label=Block]
-	n140112198162248 [label=For]
-	n140112198162080 -> n140112198162248
-	n140112198162528 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198162528 -> n140112198161912
-	n140112198589072 [label=neighborlist_capacity]
-	n140112198162528 -> n140112198589072
-	n140112198589072 [label=neighborlist_capacity]
-	n140112198162752 [label=PropertyAccess]
-	n140112198557592 [label=position]
-	n140112198162752 -> n140112198557592
-	n140112198161912 [label="Iter(0)"]
-	n140112198162752 -> n140112198161912
-	n140112198281984 [label="*"]
-	n140112198162752 -> n140112198281984
-	n140112198316552 [label="+"]
-	n140112198162752 -> n140112198316552
-	n140112198318120 [label="+"]
-	n140112198162752 -> n140112198318120
-	n140112198557592 [label=position]
-	n140112198281984 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198281984 -> n140112198161912
-	n140112198282040 [label=3]
-	n140112198281984 -> n140112198282040
-	n140112198282040 [label=3]
-	n140112198316552 [label="+"]
-	n140112198316384 [label="*"]
-	n140112198316552 -> n140112198316384
-	n140112198316608 [label=1]
-	n140112198316552 -> n140112198316608
-	n140112198316384 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198316384 -> n140112198161912
-	n140112198316440 [label=3]
-	n140112198316384 -> n140112198316440
-	n140112198316440 [label=3]
-	n140112198316608 [label=1]
-	n140112198318120 [label="+"]
-	n140112198317952 [label="*"]
-	n140112198318120 -> n140112198317952
-	n140112198318176 [label=2]
-	n140112198318120 -> n140112198318176
-	n140112198317952 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198317952 -> n140112198161912
-	n140112198318008 [label=3]
-	n140112198317952 -> n140112198318008
-	n140112198318008 [label=3]
-	n140112198318176 [label=2]
-	n140112198163144 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198163144 -> n140112198161912
-	n140112198163200 [label=3]
-	n140112198163144 -> n140112198163200
-	n140112198163200 [label=3]
-	n140112198163928 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198163928 -> n140112198161912
-	n140112198163984 [label=3]
-	n140112198163928 -> n140112198163984
-	n140112198163984 [label=3]
-	n140112198209888 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198209888 -> n140112198161912
-	n140112198209720 [label=3]
-	n140112198209888 -> n140112198209720
-	n140112198209720 [label=3]
-	n140112198210112 [label="+"]
-	n140112198209888 [label="*"]
-	n140112198210112 -> n140112198209888
-	n140112198211568 [label=1]
-	n140112198210112 -> n140112198211568
-	n140112198211568 [label=1]
-	n140112198210672 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198210672 -> n140112198161912
-	n140112198210728 [label=3]
-	n140112198210672 -> n140112198210728
-	n140112198210728 [label=3]
-	n140112198210840 [label="+"]
-	n140112198210672 [label="*"]
-	n140112198210840 -> n140112198210672
-	n140112198210896 [label=1]
-	n140112198210840 -> n140112198210896
-	n140112198210896 [label=1]
-	n140112198211792 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198211792 -> n140112198161912
-	n140112198211960 [label=3]
-	n140112198211792 -> n140112198211960
-	n140112198211960 [label=3]
-	n140112198211904 [label="+"]
-	n140112198211792 [label="*"]
-	n140112198211904 -> n140112198211792
-	n140112198211848 [label=2]
-	n140112198211904 -> n140112198211848
-	n140112198211848 [label=2]
-	n140112198212464 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198212464 -> n140112198161912
-	n140112198212520 [label=3]
-	n140112198212464 -> n140112198212520
-	n140112198212520 [label=3]
-	n140112198212632 [label="+"]
-	n140112198212464 [label="*"]
-	n140112198212632 -> n140112198212464
-	n140112198212688 [label=2]
-	n140112198212632 -> n140112198212688
-	n140112198212688 [label=2]
-	n140112198281312 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198281312 -> n140112198161912
-	n140112198281368 [label=3]
-	n140112198281312 -> n140112198281368
-	n140112198281368 [label=3]
-	n140112198281704 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198281704 -> n140112198161912
-	n140112198281760 [label=3]
-	n140112198281704 -> n140112198281760
-	n140112198281760 [label=3]
-	n140112198282880 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198282880 -> n140112198161912
-	n140112198282936 [label=3]
-	n140112198282880 -> n140112198282936
-	n140112198282936 [label=3]
-	n140112198283048 [label="+"]
-	n140112198282880 [label="*"]
-	n140112198283048 -> n140112198282880
-	n140112198283104 [label=1]
-	n140112198283048 -> n140112198283104
-	n140112198283104 [label=1]
-	n140112198316104 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198316104 -> n140112198161912
-	n140112198316160 [label=3]
-	n140112198316104 -> n140112198316160
-	n140112198316160 [label=3]
-	n140112198316272 [label="+"]
-	n140112198316104 [label="*"]
-	n140112198316272 -> n140112198316104
-	n140112198316328 [label=1]
-	n140112198316272 -> n140112198316328
-	n140112198316328 [label=1]
-	n140112198317280 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198317280 -> n140112198161912
-	n140112198317336 [label=3]
-	n140112198317280 -> n140112198317336
-	n140112198317336 [label=3]
-	n140112198317448 [label="+"]
-	n140112198317280 [label="*"]
-	n140112198317448 -> n140112198317280
-	n140112198317504 [label=2]
-	n140112198317448 -> n140112198317504
-	n140112198317504 [label=2]
-	n140112198317672 [label="*"]
-	n140112198161912 [label="Iter(0)"]
-	n140112198317672 -> n140112198161912
-	n140112198317728 [label=3]
-	n140112198317672 -> n140112198317728
-	n140112198317728 [label=3]
-	n140112198317840 [label="+"]
-	n140112198317672 [label="*"]
-	n140112198317840 -> n140112198317672
-	n140112198317896 [label=2]
-	n140112198317840 -> n140112198317896
-	n140112198317896 [label=2]
-	n140112198162248 [label=For]
-	n140112198162304 [label="Iter(1)"]
-	n140112198162248 -> n140112198162304
-	n140112198162416 [label=Block]
-	n140112198162248 -> n140112198162416
-	n140112198162360 [label=0]
-	n140112198162248 -> n140112198162360
-	n140112198162192 [label=ArrayAccess]
-	n140112198162248 -> n140112198162192
-	n140112198162304 [label="Iter(1)"]
-	n140112198162416 [label=Block]
-	n140112198279240 [label=Filter]
-	n140112198162416 -> n140112198279240
-	n140112198162640 [label="+"]
-	n140112198162528 [label="*"]
-	n140112198162640 -> n140112198162528
-	n140112198162304 [label="Iter(1)"]
-	n140112198162640 -> n140112198162304
-	n140112198162864 [label=PropertyAccess]
-	n140112198557592 [label=position]
-	n140112198162864 -> n140112198557592
-	n140112198162472 [label=ArrayAccess]
-	n140112198162864 -> n140112198162472
-	n140112198282320 [label="*"]
-	n140112198162864 -> n140112198282320
-	n140112198316888 [label="+"]
-	n140112198162864 -> n140112198316888
-	n140112198318456 [label="+"]
-	n140112198162864 -> n140112198318456
-	n140112198162472 [label=ArrayAccess]
-	n140112198589128 [label=neighborlists]
-	n140112198162472 -> n140112198589128
-	n140112198162640 [label="+"]
-	n140112198162472 -> n140112198162640
-	n140112198589128 [label=neighborlists]
-	n140112198282320 [label="*"]
-	n140112198162472 [label=ArrayAccess]
-	n140112198282320 -> n140112198162472
-	n140112198282376 [label=3]
-	n140112198282320 -> n140112198282376
-	n140112198282376 [label=3]
-	n140112198316888 [label="+"]
-	n140112198316720 [label="*"]
-	n140112198316888 -> n140112198316720
-	n140112198316944 [label=1]
-	n140112198316888 -> n140112198316944
-	n140112198316720 [label="*"]
-	n140112198162472 [label=ArrayAccess]
-	n140112198316720 -> n140112198162472
-	n140112198316776 [label=3]
-	n140112198316720 -> n140112198316776
-	n140112198316776 [label=3]
-	n140112198316944 [label=1]
-	n140112198318456 [label="+"]
-	n140112198318288 [label="*"]
-	n140112198318456 -> n140112198318288
-	n140112198318512 [label=2]
-	n140112198318456 -> n140112198318512
-	n140112198318288 [label="*"]
-	n140112198162472 [label=ArrayAccess]
-	n140112198318288 -> n140112198162472
-	n140112198318344 [label=3]
-	n140112198318288 -> n140112198318344
-	n140112198318344 [label=3]
-	n140112198318512 [label=2]
-	n140112198162976 [label="-"]
-	n140112198162752 [label=PropertyAccess]
-	n140112198162976 -> n140112198162752
-	n140112198162864 [label=PropertyAccess]
-	n140112198162976 -> n140112198162864
-	n140112198163480 [label="*"]
-	n140112198162472 [label=ArrayAccess]
-	n140112198163480 -> n140112198162472
-	n140112198163536 [label=3]
-	n140112198163480 -> n140112198163536
-	n140112198163536 [label=3]
-	n140112198164264 [label="*"]
-	n140112198162472 [label=ArrayAccess]
-	n140112198164264 -> n140112198162472
-	n140112198164320 [label=3]
-	n140112198164264 -> n140112198164320
-	n140112198164320 [label=3]
-	n140112198209944 [label="*"]
-	n140112198163816 [label=VectorAccess]
-	n140112198209944 -> n140112198163816
-	n140112198209664 [label=VectorAccess]
-	n140112198209944 -> n140112198209664
-	n140112198163816 [label=VectorAccess]
-	n140112198162976 [label="-"]
-	n140112198163816 -> n140112198162976
-	n140112198209664 [label=VectorAccess]
-	n140112198162976 [label="-"]
-	n140112198209664 -> n140112198162976
-	n140112198210224 [label="*"]
-	n140112198162472 [label=ArrayAccess]
-	n140112198210224 -> n140112198162472
-	n140112198210280 [label=3]
-	n140112198210224 -> n140112198210280
-	n140112198210280 [label=3]
-	n140112198210392 [label="+"]
-	n140112198210224 [label="*"]
-	n140112198210392 -> n140112198210224
-	n140112198210448 [label=1]
-	n140112198210392 -> n140112198210448
-	n140112198210448 [label=1]
-	n140112198211008 [label="*"]
-	n140112198162472 [label=ArrayAccess]
-	n140112198211008 -> n140112198162472
-	n140112198211064 [label=3]
-	n140112198211008 -> n140112198211064
-	n140112198211064 [label=3]
-	n140112198211176 [label="+"]
-	n140112198211008 [label="*"]
-	n140112198211176 -> n140112198211008
-	n140112198211232 [label=1]
-	n140112198211176 -> n140112198211232
-	n140112198211232 [label=1]
-	n140112198211400 [label="*"]
-	n140112198210560 [label=VectorAccess]
-	n140112198211400 -> n140112198210560
-	n140112198211344 [label=VectorAccess]
-	n140112198211400 -> n140112198211344
-	n140112198210560 [label=VectorAccess]
-	n140112198162976 [label="-"]
-	n140112198210560 -> n140112198162976
-	n140112198211344 [label=VectorAccess]
-	n140112198162976 [label="-"]
-	n140112198211344 -> n140112198162976
-	n140112198211512 [label="+"]
-	n140112198209944 [label="*"]
-	n140112198211512 -> n140112198209944
-	n140112198211400 [label="*"]
-	n140112198211512 -> n140112198211400
-	n140112198213472 [label="*"]
-	n140112198162472 [label=ArrayAccess]
-	n140112198213472 -> n140112198162472
-	n140112198212072 [label=3]
-	n140112198213472 -> n140112198212072
-	n140112198212072 [label=3]
-	n140112198212184 [label="+"]
-	n140112198213472 [label="*"]
-	n140112198212184 -> n140112198213472
-	n140112198212240 [label=2]
-	n140112198212184 -> n140112198212240
-	n140112198212240 [label=2]
-	n140112198212800 [label="*"]
-	n140112198162472 [label=ArrayAccess]
-	n140112198212800 -> n140112198162472
-	n140112198212856 [label=3]
-	n140112198212800 -> n140112198212856
-	n140112198212856 [label=3]
-	n140112198212968 [label="+"]
-	n140112198212800 [label="*"]
-	n140112198212968 -> n140112198212800
-	n140112198213024 [label=2]
-	n140112198212968 -> n140112198213024
-	n140112198213024 [label=2]
-	n140112198213192 [label="*"]
-	n140112198212352 [label=VectorAccess]
-	n140112198213192 -> n140112198212352
-	n140112198213136 [label=VectorAccess]
-	n140112198213192 -> n140112198213136
-	n140112198212352 [label=VectorAccess]
-	n140112198162976 [label="-"]
-	n140112198212352 -> n140112198162976
-	n140112198213136 [label=VectorAccess]
-	n140112198162976 [label="-"]
-	n140112198213136 -> n140112198162976
-	n140112198213304 [label="+"]
-	n140112198211512 [label="+"]
-	n140112198213304 -> n140112198211512
-	n140112198213192 [label="*"]
-	n140112198213304 -> n140112198213192
-	n140112198213416 [label="<"]
-	n140112198213304 [label="+"]
-	n140112198213416 -> n140112198213304
-	n140112198213584 [label=2.5]
-	n140112198213416 -> n140112198213584
-	n140112198213584 [label=2.5]
-	n140112198279240 [label=Filter]
-	n140112198213416 [label="<"]
-	n140112198279240 -> n140112198213416
-	n140112198279296 [label=Block]
-	n140112198279240 -> n140112198279296
-	n140112198279296 [label=Block]
-	n140112198281200 [label=Assign]
-	n140112198279296 -> n140112198281200
-	n140112198279632 [label="/"]
-	n140112198279688 [label=1.0]
-	n140112198279632 -> n140112198279688
-	n140112198213304 [label="+"]
-	n140112198279632 -> n140112198213304
-	n140112198279688 [label=1.0]
-	n140112198279800 [label="*"]
-	n140112198279632 [label="/"]
-	n140112198279800 -> n140112198279632
-	n140112198279632 [label="/"]
-	n140112198279800 -> n140112198279632
-	n140112198279912 [label="*"]
-	n140112198279800 [label="*"]
-	n140112198279912 -> n140112198279800
-	n140112198279632 [label="/"]
-	n140112198279912 -> n140112198279632
-	n140112198279576 [label=PropertyAccess]
-	n140112198586440 [label=force]
-	n140112198279576 -> n140112198586440
-	n140112198161912 [label="Iter(0)"]
-	n140112198279576 -> n140112198161912
-	n140112198281704 [label="*"]
-	n140112198279576 -> n140112198281704
-	n140112198316272 [label="+"]
-	n140112198279576 -> n140112198316272
-	n140112198317840 [label="+"]
-	n140112198279576 -> n140112198317840
-	n140112198586440 [label=force]
-	n140112198280248 [label="*"]
-	n140112198162976 [label="-"]
-	n140112198280248 -> n140112198162976
-	n140112198280304 [label=48.0]
-	n140112198280248 -> n140112198280304
-	n140112198280304 [label=48.0]
-	n140112198280416 [label="*"]
-	n140112198162976 [label="-"]
-	n140112198280416 -> n140112198162976
-	n140112197071032 [label="*"]
-	n140112198280416 -> n140112197071032
-	n140112197071032 [label="*"]
-	n140112198280304 [label=48.0]
-	n140112197071032 -> n140112198280304
-	n140112198279912 [label="*"]
-	n140112197071032 -> n140112198279912
-	n140112198280528 [label="-"]
-	n140112198279912 [label="*"]
-	n140112198280528 -> n140112198279912
-	n140112198280584 [label=0.5]
-	n140112198280528 -> n140112198280584
-	n140112198280584 [label=0.5]
-	n140112198280696 [label="*"]
-	n140112198162976 [label="-"]
-	n140112198280696 -> n140112198162976
-	n140112197071144 [label="*"]
-	n140112198280696 -> n140112197071144
-	n140112197071144 [label="*"]
-	n140112197071032 [label="*"]
-	n140112197071144 -> n140112197071032
-	n140112198280528 [label="-"]
-	n140112197071144 -> n140112198280528
-	n140112198280808 [label="*"]
-	n140112198162976 [label="-"]
-	n140112198280808 -> n140112198162976
-	n140112197071256 [label="*"]
-	n140112198280808 -> n140112197071256
-	n140112197071256 [label="*"]
-	n140112197071144 [label="*"]
-	n140112197071256 -> n140112197071144
-	n140112198279632 [label="/"]
-	n140112197071256 -> n140112198279632
-	n140112198280920 [label="*"]
-	n140112198162976 [label="-"]
-	n140112198280920 -> n140112198162976
-	n140112197071256 [label="*"]
-	n140112198280920 -> n140112197071256
-	n140112198281088 [label="+"]
-	n140112198279576 [label=PropertyAccess]
-	n140112198281088 -> n140112198279576
-	n140112198280920 [label="*"]
-	n140112198281088 -> n140112198280920
-	n140112198281200 [label=Assign]
-	n140112198282768 [label=VectorAccess]
-	n140112198281200 -> n140112198282768
-	n140112198281648 [label=VectorAccess]
-	n140112198281200 -> n140112198281648
-	n140112198317168 [label=VectorAccess]
-	n140112198281200 -> n140112198317168
-	n140112198283216 [label=VectorAccess]
-	n140112198281200 -> n140112198283216
-	n140112198318736 [label=VectorAccess]
-	n140112198281200 -> n140112198318736
-	n140112198317616 [label=VectorAccess]
-	n140112198281200 -> n140112198317616
-	n140112198282768 [label=VectorAccess]
-	n140112198279576 [label=PropertyAccess]
-	n140112198282768 -> n140112198279576
-	n140112198281648 [label=VectorAccess]
-	n140112198281088 [label="+"]
-	n140112198281648 -> n140112198281088
-	n140112198317168 [label=VectorAccess]
-	n140112198279576 [label=PropertyAccess]
-	n140112198317168 -> n140112198279576
-	n140112198283216 [label=VectorAccess]
-	n140112198281088 [label="+"]
-	n140112198283216 -> n140112198281088
-	n140112198318736 [label=VectorAccess]
-	n140112198279576 [label=PropertyAccess]
-	n140112198318736 -> n140112198279576
-	n140112198317616 [label=VectorAccess]
-	n140112198281088 [label="+"]
-	n140112198317616 -> n140112198281088
-	n140112198162360 [label=0]
-	n140112198162192 [label=ArrayAccess]
-	n140112198589184 [label=numneighs]
-	n140112198162192 -> n140112198589184
-	n140112198161912 [label="Iter(0)"]
-	n140112198162192 -> n140112198161912
-	n140112198589184 [label=numneighs]
-	n140112198161968 [label=0]
-	n140112198162024 [label=0]
-	n140112198279352 [label=KernelBlock]
-	n140112198589688 [label=Block]
-	n140112198279352 -> n140112198589688
-	n140112198589688 [label=Block]
-	n140112198589632 [label=ParticleFor]
-	n140112198589688 -> n140112198589632
-	n140112198589632 [label=ParticleFor]
-	n140112198590304 [label="Iter(2)"]
-	n140112198589632 -> n140112198590304
-	n140112198589856 [label=Block]
-	n140112198589632 -> n140112198589856
-	n140112198589520 [label=0]
-	n140112198589632 -> n140112198589520
-	n140112198589968 [label=0]
-	n140112198589632 -> n140112198589968
-	n140112198590304 [label="Iter(2)"]
-	n140112198589856 [label=Block]
-	n140112198319520 [label=Assign]
-	n140112198589856 -> n140112198319520
-	n140112198356608 [label=Assign]
-	n140112198589856 -> n140112198356608
-	n140112198318792 [label=PropertyAccess]
-	n140112198557648 [label=velocity]
-	n140112198318792 -> n140112198557648
-	n140112198590304 [label="Iter(2)"]
-	n140112198318792 -> n140112198590304
-	n140112198320024 [label="*"]
-	n140112198318792 -> n140112198320024
-	n140112198354592 [label="+"]
-	n140112198318792 -> n140112198354592
-	n140112198355824 [label="+"]
-	n140112198318792 -> n140112198355824
-	n140112198557648 [label=velocity]
-	n140112198320024 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112198320024 -> n140112198590304
-	n140112198353248 [label=3]
-	n140112198320024 -> n140112198353248
-	n140112198353248 [label=3]
-	n140112198354592 [label="+"]
-	n140112198354088 [label="*"]
-	n140112198354592 -> n140112198354088
-	n140112198354648 [label=1]
-	n140112198354592 -> n140112198354648
-	n140112198354088 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112198354088 -> n140112198590304
-	n140112198354480 [label=3]
-	n140112198354088 -> n140112198354480
-	n140112198354480 [label=3]
-	n140112198354648 [label=1]
-	n140112198355824 [label="+"]
-	n140112198355320 [label="*"]
-	n140112198355824 -> n140112198355320
-	n140112198355880 [label=2]
-	n140112198355824 -> n140112198355880
-	n140112198355320 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112198355320 -> n140112198590304
-	n140112198355712 [label=3]
-	n140112198355320 -> n140112198355712
-	n140112198355712 [label=3]
-	n140112198355880 [label=2]
-	n140112198318904 [label=PropertyAccess]
-	n140112198586440 [label=force]
-	n140112198318904 -> n140112198586440
-	n140112198590304 [label="Iter(2)"]
-	n140112198318904 -> n140112198590304
-	n140112198320080 [label="*"]
-	n140112198318904 -> n140112198320080
-	n140112198354312 [label="+"]
-	n140112198318904 -> n140112198354312
-	n140112198355544 [label="+"]
-	n140112198318904 -> n140112198355544
-	n140112198320080 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112198320080 -> n140112198590304
-	n140112198352968 [label=3]
-	n140112198320080 -> n140112198352968
-	n140112198352968 [label=3]
-	n140112198354312 [label="+"]
-	n140112198354144 [label="*"]
-	n140112198354312 -> n140112198354144
-	n140112198354368 [label=1]
-	n140112198354312 -> n140112198354368
-	n140112198354144 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112198354144 -> n140112198590304
-	n140112198354200 [label=3]
-	n140112198354144 -> n140112198354200
-	n140112198354200 [label=3]
-	n140112198354368 [label=1]
-	n140112198355544 [label="+"]
-	n140112198355376 [label="*"]
-	n140112198355544 -> n140112198355376
-	n140112198355600 [label=2]
-	n140112198355544 -> n140112198355600
-	n140112198355376 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112198355376 -> n140112198590304
-	n140112198355432 [label=3]
-	n140112198355376 -> n140112198355432
-	n140112198355432 [label=3]
-	n140112198355600 [label=2]
-	n140112198319016 [label="*"]
-	n140112198319072 [label=0.005]
-	n140112198319016 -> n140112198319072
-	n140112198318904 [label=PropertyAccess]
-	n140112198319016 -> n140112198318904
-	n140112198319072 [label=0.005]
-	n140112198319184 [label=PropertyAccess]
-	n140112198557536 [label=mass]
-	n140112198319184 -> n140112198557536
-	n140112198590304 [label="Iter(2)"]
-	n140112198319184 -> n140112198590304
-	n140112198557536 [label=mass]
-	n140112198319296 [label="/"]
-	n140112198319016 [label="*"]
-	n140112198319296 -> n140112198319016
-	n140112198319184 [label=PropertyAccess]
-	n140112198319296 -> n140112198319184
-	n140112198319408 [label="+"]
-	n140112198318792 [label=PropertyAccess]
-	n140112198319408 -> n140112198318792
-	n140112198319296 [label="/"]
-	n140112198319408 -> n140112198319296
-	n140112198319632 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112198319632 -> n140112198590304
-	n140112198319688 [label=3]
-	n140112198319632 -> n140112198319688
-	n140112198319688 [label=3]
-	n140112198353696 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112198353696 -> n140112198590304
-	n140112198353752 [label=3]
-	n140112198353696 -> n140112198353752
-	n140112198353752 [label=3]
-	n140112198353864 [label="+"]
-	n140112198353696 [label="*"]
-	n140112198353864 -> n140112198353696
-	n140112198353920 [label=1]
-	n140112198353864 -> n140112198353920
-	n140112198353920 [label=1]
-	n140112198354928 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112198354928 -> n140112198590304
-	n140112198354984 [label=3]
-	n140112198354928 -> n140112198354984
-	n140112198354984 [label=3]
-	n140112198355096 [label="+"]
-	n140112198354928 [label="*"]
-	n140112198355096 -> n140112198354928
-	n140112198355152 [label=2]
-	n140112198355096 -> n140112198355152
-	n140112198355152 [label=2]
-	n140112198319520 [label=Assign]
-	n140112198353584 [label=VectorAccess]
-	n140112198319520 -> n140112198353584
-	n140112198319968 [label=VectorAccess]
-	n140112198319520 -> n140112198319968
-	n140112198354816 [label=VectorAccess]
-	n140112198319520 -> n140112198354816
-	n140112198354032 [label=VectorAccess]
-	n140112198319520 -> n140112198354032
-	n140112198356048 [label=VectorAccess]
-	n140112198319520 -> n140112198356048
-	n140112198355264 [label=VectorAccess]
-	n140112198319520 -> n140112198355264
-	n140112198353584 [label=VectorAccess]
-	n140112198318792 [label=PropertyAccess]
-	n140112198353584 -> n140112198318792
-	n140112198319968 [label=VectorAccess]
-	n140112198319408 [label="+"]
-	n140112198319968 -> n140112198319408
-	n140112198354816 [label=VectorAccess]
-	n140112198318792 [label=PropertyAccess]
-	n140112198354816 -> n140112198318792
-	n140112198354032 [label=VectorAccess]
-	n140112198319408 [label="+"]
-	n140112198354032 -> n140112198319408
-	n140112198356048 [label=VectorAccess]
-	n140112198318792 [label=PropertyAccess]
-	n140112198356048 -> n140112198318792
-	n140112198355264 [label=VectorAccess]
-	n140112198319408 [label="+"]
-	n140112198355264 -> n140112198319408
-	n140112198356104 [label=PropertyAccess]
-	n140112198557592 [label=position]
-	n140112198356104 -> n140112198557592
-	n140112198590304 [label="Iter(2)"]
-	n140112198356104 -> n140112198590304
-	n140112197861896 [label="*"]
-	n140112198356104 -> n140112197861896
-	n140112197863296 [label="+"]
-	n140112198356104 -> n140112197863296
-	n140112197864528 [label="+"]
-	n140112198356104 -> n140112197864528
-	n140112197861896 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112197861896 -> n140112198590304
-	n140112197861952 [label=3]
-	n140112197861896 -> n140112197861952
-	n140112197861952 [label=3]
-	n140112197863296 [label="+"]
-	n140112197863128 [label="*"]
-	n140112197863296 -> n140112197863128
-	n140112197863352 [label=1]
-	n140112197863296 -> n140112197863352
-	n140112197863128 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112197863128 -> n140112198590304
-	n140112197863184 [label=3]
-	n140112197863128 -> n140112197863184
-	n140112197863184 [label=3]
-	n140112197863352 [label=1]
-	n140112197864528 [label="+"]
-	n140112197864360 [label="*"]
-	n140112197864528 -> n140112197864360
-	n140112197864584 [label=2]
-	n140112197864528 -> n140112197864584
-	n140112197864360 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112197864360 -> n140112198590304
-	n140112197864416 [label=3]
-	n140112197864360 -> n140112197864416
-	n140112197864416 [label=3]
-	n140112197864584 [label=2]
-	n140112198356216 [label=PropertyAccess]
-	n140112198557648 [label=velocity]
-	n140112198356216 -> n140112198557648
-	n140112198590304 [label="Iter(2)"]
-	n140112198356216 -> n140112198590304
-	n140112197861560 [label="*"]
-	n140112198356216 -> n140112197861560
-	n140112197862960 [label="+"]
-	n140112198356216 -> n140112197862960
-	n140112197864192 [label="+"]
-	n140112198356216 -> n140112197864192
-	n140112197861560 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112197861560 -> n140112198590304
-	n140112197861616 [label=3]
-	n140112197861560 -> n140112197861616
-	n140112197861616 [label=3]
-	n140112197862960 [label="+"]
-	n140112197862792 [label="*"]
-	n140112197862960 -> n140112197862792
-	n140112197863016 [label=1]
-	n140112197862960 -> n140112197863016
-	n140112197862792 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112197862792 -> n140112198590304
-	n140112197862848 [label=3]
-	n140112197862792 -> n140112197862848
-	n140112197862848 [label=3]
-	n140112197863016 [label=1]
-	n140112197864192 [label="+"]
-	n140112197864024 [label="*"]
-	n140112197864192 -> n140112197864024
-	n140112197864248 [label=2]
-	n140112197864192 -> n140112197864248
-	n140112197864024 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112197864024 -> n140112198590304
-	n140112197864080 [label=3]
-	n140112197864024 -> n140112197864080
-	n140112197864080 [label=3]
-	n140112197864248 [label=2]
-	n140112198356328 [label="*"]
-	n140112198356384 [label=0.005]
-	n140112198356328 -> n140112198356384
-	n140112198356216 [label=PropertyAccess]
-	n140112198356328 -> n140112198356216
-	n140112198356384 [label=0.005]
-	n140112198356496 [label="+"]
-	n140112198356104 [label=PropertyAccess]
-	n140112198356496 -> n140112198356104
-	n140112198356328 [label="*"]
-	n140112198356496 -> n140112198356328
-	n140112198356720 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112198356720 -> n140112198590304
-	n140112198356776 [label=3]
-	n140112198356720 -> n140112198356776
-	n140112198356776 [label=3]
-	n140112197862400 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112197862400 -> n140112198590304
-	n140112197862456 [label=3]
-	n140112197862400 -> n140112197862456
-	n140112197862456 [label=3]
-	n140112197862568 [label="+"]
-	n140112197862400 [label="*"]
-	n140112197862568 -> n140112197862400
-	n140112197862624 [label=1]
-	n140112197862568 -> n140112197862624
-	n140112197862624 [label=1]
-	n140112197863632 [label="*"]
-	n140112198590304 [label="Iter(2)"]
-	n140112197863632 -> n140112198590304
-	n140112197863688 [label=3]
-	n140112197863632 -> n140112197863688
-	n140112197863688 [label=3]
-	n140112197863800 [label="+"]
-	n140112197863632 [label="*"]
-	n140112197863800 -> n140112197863632
-	n140112197863856 [label=2]
-	n140112197863800 -> n140112197863856
-	n140112197863856 [label=2]
-	n140112198356608 [label=Assign]
-	n140112197862288 [label=VectorAccess]
-	n140112198356608 -> n140112197862288
-	n140112197861504 [label=VectorAccess]
-	n140112198356608 -> n140112197861504
-	n140112197863520 [label=VectorAccess]
-	n140112198356608 -> n140112197863520
-	n140112197862736 [label=VectorAccess]
-	n140112198356608 -> n140112197862736
-	n140112197864752 [label=VectorAccess]
-	n140112198356608 -> n140112197864752
-	n140112197863968 [label=VectorAccess]
-	n140112198356608 -> n140112197863968
-	n140112197862288 [label=VectorAccess]
-	n140112198356104 [label=PropertyAccess]
-	n140112197862288 -> n140112198356104
-	n140112197861504 [label=VectorAccess]
-	n140112198356496 [label="+"]
-	n140112197861504 -> n140112198356496
-	n140112197863520 [label=VectorAccess]
-	n140112198356104 [label=PropertyAccess]
-	n140112197863520 -> n140112198356104
-	n140112197862736 [label=VectorAccess]
-	n140112198356496 [label="+"]
-	n140112197862736 -> n140112198356496
-	n140112197864752 [label=VectorAccess]
-	n140112198356104 [label=PropertyAccess]
-	n140112197864752 -> n140112198356104
-	n140112197863968 [label=VectorAccess]
-	n140112198356496 [label="+"]
-	n140112197863968 -> n140112198356496
-	n140112198589520 [label=0]
-	n140112198589968 [label=0]
+	n140589003589112 [label=Block]
+	n140589003139560 [label=KernelBlock]
+	n140589003589112 -> n140589003139560
+	n140589003139616 [label=KernelBlock]
+	n140589003589112 -> n140589003139616
+	n140589003139560 [label=KernelBlock]
+	n140589003139168 [label=Block]
+	n140589003139560 -> n140589003139168
+	n140589003139168 [label=Block]
+	n140589002480104 [label=ParticleFor]
+	n140589003139168 -> n140589002480104
+	n140589002480104 [label=ParticleFor]
+	n140589002480160 [label="Iter(14)"]
+	n140589002480104 -> n140589002480160
+	n140589002480328 [label=Block]
+	n140589002480104 -> n140589002480328
+	n140589002480216 [label=0]
+	n140589002480104 -> n140589002480216
+	n140589002480272 [label=0]
+	n140589002480104 -> n140589002480272
+	n140589002480160 [label="Iter(14)"]
+	n140589002480328 [label=Block]
+	n140589002480496 [label=For]
+	n140589002480328 -> n140589002480496
+	n140589002480776 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589002480776 -> n140589002480160
+	n140589003590792 [label=neighborlist_capacity]
+	n140589002480776 -> n140589003590792
+	n140589003590792 [label=neighborlist_capacity]
+	n140589002481000 [label=PropertyAccess]
+	n140589003589280 [label=position]
+	n140589002481000 -> n140589003589280
+	n140589002480160 [label="Iter(14)"]
+	n140589002481000 -> n140589002480160
+	n140589002519104 [label="*"]
+	n140589002481000 -> n140589002519104
+	n140589002520952 [label="+"]
+	n140589002481000 -> n140589002520952
+	n140589002547384 [label="+"]
+	n140589002481000 -> n140589002547384
+	n140589003589280 [label=position]
+	n140589002519104 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589002519104 -> n140589002480160
+	n140589002519160 [label=3]
+	n140589002519104 -> n140589002519160
+	n140589002519160 [label=3]
+	n140589002520952 [label="+"]
+	n140589002520784 [label="*"]
+	n140589002520952 -> n140589002520784
+	n140589002521008 [label=1]
+	n140589002520952 -> n140589002521008
+	n140589002520784 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589002520784 -> n140589002480160
+	n140589002520840 [label=3]
+	n140589002520784 -> n140589002520840
+	n140589002520840 [label=3]
+	n140589002521008 [label=1]
+	n140589002547384 [label="+"]
+	n140589002522576 [label="*"]
+	n140589002547384 -> n140589002522576
+	n140589002547440 [label=2]
+	n140589002547384 -> n140589002547440
+	n140589002522576 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589002522576 -> n140589002480160
+	n140589002547272 [label=3]
+	n140589002522576 -> n140589002547272
+	n140589002547272 [label=3]
+	n140589002547440 [label=2]
+	n140589002481392 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589002481392 -> n140589002480160
+	n140589002481448 [label=3]
+	n140589002481392 -> n140589002481448
+	n140589002481448 [label=3]
+	n140589002520000 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589002520000 -> n140589002480160
+	n140589002520056 [label=3]
+	n140589002520000 -> n140589002520056
+	n140589002520056 [label=3]
+	n140589002520168 [label="+"]
+	n140589002520000 [label="*"]
+	n140589002520168 -> n140589002520000
+	n140589002520224 [label=1]
+	n140589002520168 -> n140589002520224
+	n140589002520224 [label=1]
+	n140589002521792 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589002521792 -> n140589002480160
+	n140589002521848 [label=3]
+	n140589002521792 -> n140589002521848
+	n140589002521848 [label=3]
+	n140589002521960 [label="+"]
+	n140589002521792 [label="*"]
+	n140589002521960 -> n140589002521792
+	n140589002522016 [label=2]
+	n140589002521960 -> n140589002522016
+	n140589002522016 [label=2]
+	n140589003272432 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589003272432 -> n140589002480160
+	n140589003272488 [label=3]
+	n140589003272432 -> n140589003272488
+	n140589003272488 [label=3]
+	n140589003272824 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589003272824 -> n140589002480160
+	n140589003272880 [label=3]
+	n140589003272824 -> n140589003272880
+	n140589003272880 [label=3]
+	n140589003273328 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589003273328 -> n140589002480160
+	n140589003273384 [label=3]
+	n140589003273328 -> n140589003273384
+	n140589003273384 [label=3]
+	n140589003273496 [label="+"]
+	n140589003273328 [label="*"]
+	n140589003273496 -> n140589003273328
+	n140589003273552 [label=1]
+	n140589003273496 -> n140589003273552
+	n140589003273552 [label=1]
+	n140589003273720 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589003273720 -> n140589002480160
+	n140589003273776 [label=3]
+	n140589003273720 -> n140589003273776
+	n140589003273776 [label=3]
+	n140589003273888 [label="+"]
+	n140589003273720 [label="*"]
+	n140589003273888 -> n140589003273720
+	n140589003273944 [label=1]
+	n140589003273888 -> n140589003273944
+	n140589003273944 [label=1]
+	n140589003274224 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589003274224 -> n140589002480160
+	n140589003274280 [label=3]
+	n140589003274224 -> n140589003274280
+	n140589003274280 [label=3]
+	n140589003274392 [label="+"]
+	n140589003274224 [label="*"]
+	n140589003274392 -> n140589003274224
+	n140589003274448 [label=2]
+	n140589003274392 -> n140589003274448
+	n140589003274448 [label=2]
+	n140589003274616 [label="*"]
+	n140589002480160 [label="Iter(14)"]
+	n140589003274616 -> n140589002480160
+	n140589003274672 [label=3]
+	n140589003274616 -> n140589003274672
+	n140589003274672 [label=3]
+	n140589003274784 [label="+"]
+	n140589003274616 [label="*"]
+	n140589003274784 -> n140589003274616
+	n140589003274840 [label=2]
+	n140589003274784 -> n140589003274840
+	n140589003274840 [label=2]
+	n140589002480496 [label=For]
+	n140589002480552 [label="Iter(15)"]
+	n140589002480496 -> n140589002480552
+	n140589002480664 [label=Block]
+	n140589002480496 -> n140589002480664
+	n140589002480608 [label=0]
+	n140589002480496 -> n140589002480608
+	n140589002480440 [label=ArrayAccess]
+	n140589002480496 -> n140589002480440
+	n140589002480552 [label="Iter(15)"]
+	n140589002480664 [label=Block]
+	n140589002548336 [label=Filter]
+	n140589002480664 -> n140589002548336
+	n140589002480888 [label="+"]
+	n140589002480776 [label="*"]
+	n140589002480888 -> n140589002480776
+	n140589002480552 [label="Iter(15)"]
+	n140589002480888 -> n140589002480552
+	n140589002481112 [label=PropertyAccess]
+	n140589003589280 [label=position]
+	n140589002481112 -> n140589003589280
+	n140589002480720 [label=ArrayAccess]
+	n140589002481112 -> n140589002480720
+	n140589002519440 [label="*"]
+	n140589002481112 -> n140589002519440
+	n140589002521288 [label="+"]
+	n140589002481112 -> n140589002521288
+	n140589002547720 [label="+"]
+	n140589002481112 -> n140589002547720
+	n140589002480720 [label=ArrayAccess]
+	n140589003590848 [label=neighborlists]
+	n140589002480720 -> n140589003590848
+	n140589002480888 [label="+"]
+	n140589002480720 -> n140589002480888
+	n140589003590848 [label=neighborlists]
+	n140589002519440 [label="*"]
+	n140589002480720 [label=ArrayAccess]
+	n140589002519440 -> n140589002480720
+	n140589002519496 [label=3]
+	n140589002519440 -> n140589002519496
+	n140589002519496 [label=3]
+	n140589002521288 [label="+"]
+	n140589002521120 [label="*"]
+	n140589002521288 -> n140589002521120
+	n140589002521344 [label=1]
+	n140589002521288 -> n140589002521344
+	n140589002521120 [label="*"]
+	n140589002480720 [label=ArrayAccess]
+	n140589002521120 -> n140589002480720
+	n140589002521176 [label=3]
+	n140589002521120 -> n140589002521176
+	n140589002521176 [label=3]
+	n140589002521344 [label=1]
+	n140589002547720 [label="+"]
+	n140589002547552 [label="*"]
+	n140589002547720 -> n140589002547552
+	n140589002547776 [label=2]
+	n140589002547720 -> n140589002547776
+	n140589002547552 [label="*"]
+	n140589002480720 [label=ArrayAccess]
+	n140589002547552 -> n140589002480720
+	n140589002547608 [label=3]
+	n140589002547552 -> n140589002547608
+	n140589002547608 [label=3]
+	n140589002547776 [label=2]
+	n140589002481224 [label="-"]
+	n140589002481000 [label=PropertyAccess]
+	n140589002481224 -> n140589002481000
+	n140589002481112 [label=PropertyAccess]
+	n140589002481224 -> n140589002481112
+	n140589002518656 [label="*"]
+	n140589002480720 [label=ArrayAccess]
+	n140589002518656 -> n140589002480720
+	n140589002518712 [label=3]
+	n140589002518656 -> n140589002518712
+	n140589002518712 [label=3]
+	n140589002519832 [label="*"]
+	n140589002518992 [label=VectorAccess]
+	n140589002519832 -> n140589002518992
+	n140589002519776 [label=VectorAccess]
+	n140589002519832 -> n140589002519776
+	n140589002518992 [label=VectorAccess]
+	n140589002481224 [label="-"]
+	n140589002518992 -> n140589002481224
+	n140589002519776 [label=VectorAccess]
+	n140589002481224 [label="-"]
+	n140589002519776 -> n140589002481224
+	n140589002520336 [label="*"]
+	n140589002480720 [label=ArrayAccess]
+	n140589002520336 -> n140589002480720
+	n140589002520392 [label=3]
+	n140589002520336 -> n140589002520392
+	n140589002520392 [label=3]
+	n140589002520504 [label="+"]
+	n140589002520336 [label="*"]
+	n140589002520504 -> n140589002520336
+	n140589002520560 [label=1]
+	n140589002520504 -> n140589002520560
+	n140589002520560 [label=1]
+	n140589002521512 [label="*"]
+	n140589002520672 [label=VectorAccess]
+	n140589002521512 -> n140589002520672
+	n140589002521456 [label=VectorAccess]
+	n140589002521512 -> n140589002521456
+	n140589002520672 [label=VectorAccess]
+	n140589002481224 [label="-"]
+	n140589002520672 -> n140589002481224
+	n140589002521456 [label=VectorAccess]
+	n140589002481224 [label="-"]
+	n140589002521456 -> n140589002481224
+	n140589002521624 [label="+"]
+	n140589002519832 [label="*"]
+	n140589002521624 -> n140589002519832
+	n140589002521512 [label="*"]
+	n140589002521624 -> n140589002521512
+	n140589002522128 [label="*"]
+	n140589002480720 [label=ArrayAccess]
+	n140589002522128 -> n140589002480720
+	n140589002522184 [label=3]
+	n140589002522128 -> n140589002522184
+	n140589002522184 [label=3]
+	n140589002522296 [label="+"]
+	n140589002522128 [label="*"]
+	n140589002522296 -> n140589002522128
+	n140589002522352 [label=2]
+	n140589002522296 -> n140589002522352
+	n140589002522352 [label=2]
+	n140589002547944 [label="*"]
+	n140589002522464 [label=VectorAccess]
+	n140589002547944 -> n140589002522464
+	n140589002547888 [label=VectorAccess]
+	n140589002547944 -> n140589002547888
+	n140589002522464 [label=VectorAccess]
+	n140589002481224 [label="-"]
+	n140589002522464 -> n140589002481224
+	n140589002547888 [label=VectorAccess]
+	n140589002481224 [label="-"]
+	n140589002547888 -> n140589002481224
+	n140589002548056 [label="+"]
+	n140589002521624 [label="+"]
+	n140589002548056 -> n140589002521624
+	n140589002547944 [label="*"]
+	n140589002548056 -> n140589002547944
+	n140589002548168 [label="<"]
+	n140589002548056 [label="+"]
+	n140589002548168 -> n140589002548056
+	n140589002548224 [label=2.5]
+	n140589002548168 -> n140589002548224
+	n140589002548224 [label=2.5]
+	n140589002548336 [label=Filter]
+	n140589002548168 [label="<"]
+	n140589002548336 -> n140589002548168
+	n140589003139504 [label=Block]
+	n140589002548336 -> n140589003139504
+	n140589003139504 [label=Block]
+	n140589003272320 [label=Assign]
+	n140589003139504 -> n140589003272320
+	n140589003139840 [label="/"]
+	n140589003139896 [label=1.0]
+	n140589003139840 -> n140589003139896
+	n140589002548056 [label="+"]
+	n140589003139840 -> n140589002548056
+	n140589003139896 [label=1.0]
+	n140589003140008 [label="*"]
+	n140589003139840 [label="/"]
+	n140589003140008 -> n140589003139840
+	n140589003139840 [label="/"]
+	n140589003140008 -> n140589003139840
+	n140589003140120 [label="*"]
+	n140589003140008 [label="*"]
+	n140589003140120 -> n140589003140008
+	n140589003139840 [label="/"]
+	n140589003140120 -> n140589003139840
+	n140589003139784 [label=PropertyAccess]
+	n140589003589392 [label=force]
+	n140589003139784 -> n140589003589392
+	n140589002480160 [label="Iter(14)"]
+	n140589003139784 -> n140589002480160
+	n140589003272824 [label="*"]
+	n140589003139784 -> n140589003272824
+	n140589003273888 [label="+"]
+	n140589003139784 -> n140589003273888
+	n140589003274784 [label="+"]
+	n140589003139784 -> n140589003274784
+	n140589003589392 [label=force]
+	n140589003140456 [label="*"]
+	n140589002481224 [label="-"]
+	n140589003140456 -> n140589002481224
+	n140589003140680 [label=48.0]
+	n140589003140456 -> n140589003140680
+	n140589003140680 [label=48.0]
+	n140589003140792 [label="*"]
+	n140589002481224 [label="-"]
+	n140589003140792 -> n140589002481224
+	n140589002859408 [label="*"]
+	n140589003140792 -> n140589002859408
+	n140589002859408 [label="*"]
+	n140589003140680 [label=48.0]
+	n140589002859408 -> n140589003140680
+	n140589003140120 [label="*"]
+	n140589002859408 -> n140589003140120
+	n140589003140904 [label="-"]
+	n140589003140120 [label="*"]
+	n140589003140904 -> n140589003140120
+	n140589003140960 [label=0.5]
+	n140589003140904 -> n140589003140960
+	n140589003140960 [label=0.5]
+	n140589003589000 [label="*"]
+	n140589002481224 [label="-"]
+	n140589003589000 -> n140589002481224
+	n140589002963264 [label="*"]
+	n140589003589000 -> n140589002963264
+	n140589002963264 [label="*"]
+	n140589002859408 [label="*"]
+	n140589002963264 -> n140589002859408
+	n140589003140904 [label="-"]
+	n140589002963264 -> n140589003140904
+	n140589003591520 [label="*"]
+	n140589002481224 [label="-"]
+	n140589003591520 -> n140589002481224
+	n140589002548952 [label="*"]
+	n140589003591520 -> n140589002548952
+	n140589002548952 [label="*"]
+	n140589002963264 [label="*"]
+	n140589002548952 -> n140589002963264
+	n140589003139840 [label="/"]
+	n140589002548952 -> n140589003139840
+	n140589003591576 [label="*"]
+	n140589002481224 [label="-"]
+	n140589003591576 -> n140589002481224
+	n140589002548952 [label="*"]
+	n140589003591576 -> n140589002548952
+	n140589003591352 [label="+"]
+	n140589003139784 [label=PropertyAccess]
+	n140589003591352 -> n140589003139784
+	n140589003591576 [label="*"]
+	n140589003591352 -> n140589003591576
+	n140589003272320 [label=Assign]
+	n140589003273216 [label=VectorAccess]
+	n140589003272320 -> n140589003273216
+	n140589003272768 [label=VectorAccess]
+	n140589003272320 -> n140589003272768
+	n140589003274112 [label=VectorAccess]
+	n140589003272320 -> n140589003274112
+	n140589003273664 [label=VectorAccess]
+	n140589003272320 -> n140589003273664
+	n140589003275008 [label=VectorAccess]
+	n140589003272320 -> n140589003275008
+	n140589003274560 [label=VectorAccess]
+	n140589003272320 -> n140589003274560
+	n140589003273216 [label=VectorAccess]
+	n140589003139784 [label=PropertyAccess]
+	n140589003273216 -> n140589003139784
+	n140589003272768 [label=VectorAccess]
+	n140589003591352 [label="+"]
+	n140589003272768 -> n140589003591352
+	n140589003274112 [label=VectorAccess]
+	n140589003139784 [label=PropertyAccess]
+	n140589003274112 -> n140589003139784
+	n140589003273664 [label=VectorAccess]
+	n140589003591352 [label="+"]
+	n140589003273664 -> n140589003591352
+	n140589003275008 [label=VectorAccess]
+	n140589003139784 [label=PropertyAccess]
+	n140589003275008 -> n140589003139784
+	n140589003274560 [label=VectorAccess]
+	n140589003591352 [label="+"]
+	n140589003274560 -> n140589003591352
+	n140589002480608 [label=0]
+	n140589002480440 [label=ArrayAccess]
+	n140589003590904 [label=numneighs]
+	n140589002480440 -> n140589003590904
+	n140589002480160 [label="Iter(14)"]
+	n140589002480440 -> n140589002480160
+	n140589003590904 [label=numneighs]
+	n140589002480216 [label=0]
+	n140589002480272 [label=0]
+	n140589003139616 [label=KernelBlock]
+	n140589003138160 [label=Block]
+	n140589003139616 -> n140589003138160
+	n140589003138160 [label=Block]
+	n140589003138216 [label=ParticleFor]
+	n140589003138160 -> n140589003138216
+	n140589003138216 [label=ParticleFor]
+	n140589003138104 [label="Iter(0)"]
+	n140589003138216 -> n140589003138104
+	n140589003137096 [label=Block]
+	n140589003138216 -> n140589003137096
+	n140589003140624 [label=0]
+	n140589003138216 -> n140589003140624
+	n140589003137152 [label=0]
+	n140589003138216 -> n140589003137152
+	n140589003138104 [label="Iter(0)"]
+	n140589003137096 [label=Block]
+	n140589003275848 [label=Assign]
+	n140589003137096 -> n140589003275848
+	n140589003321128 [label=Assign]
+	n140589003137096 -> n140589003321128
+	n140589003275120 [label=PropertyAccess]
+	n140589003589336 [label=velocity]
+	n140589003275120 -> n140589003589336
+	n140589003138104 [label="Iter(0)"]
+	n140589003275120 -> n140589003138104
+	n140589003317376 [label="*"]
+	n140589003275120 -> n140589003317376
+	n140589003319112 [label="+"]
+	n140589003275120 -> n140589003319112
+	n140589003320344 [label="+"]
+	n140589003275120 -> n140589003320344
+	n140589003589336 [label=velocity]
+	n140589003317376 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003317376 -> n140589003138104
+	n140589003317768 [label=3]
+	n140589003317376 -> n140589003317768
+	n140589003317768 [label=3]
+	n140589003319112 [label="+"]
+	n140589003318608 [label="*"]
+	n140589003319112 -> n140589003318608
+	n140589003319168 [label=1]
+	n140589003319112 -> n140589003319168
+	n140589003318608 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003318608 -> n140589003138104
+	n140589003319000 [label=3]
+	n140589003318608 -> n140589003319000
+	n140589003319000 [label=3]
+	n140589003319168 [label=1]
+	n140589003320344 [label="+"]
+	n140589003319840 [label="*"]
+	n140589003320344 -> n140589003319840
+	n140589003320400 [label=2]
+	n140589003320344 -> n140589003320400
+	n140589003319840 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003319840 -> n140589003138104
+	n140589003320232 [label=3]
+	n140589003319840 -> n140589003320232
+	n140589003320232 [label=3]
+	n140589003320400 [label=2]
+	n140589003275232 [label=PropertyAccess]
+	n140589003589392 [label=force]
+	n140589003275232 -> n140589003589392
+	n140589003138104 [label="Iter(0)"]
+	n140589003275232 -> n140589003138104
+	n140589003317432 [label="*"]
+	n140589003275232 -> n140589003317432
+	n140589003318832 [label="+"]
+	n140589003275232 -> n140589003318832
+	n140589003320064 [label="+"]
+	n140589003275232 -> n140589003320064
+	n140589003317432 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003317432 -> n140589003138104
+	n140589003317488 [label=3]
+	n140589003317432 -> n140589003317488
+	n140589003317488 [label=3]
+	n140589003318832 [label="+"]
+	n140589003318664 [label="*"]
+	n140589003318832 -> n140589003318664
+	n140589003318888 [label=1]
+	n140589003318832 -> n140589003318888
+	n140589003318664 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003318664 -> n140589003138104
+	n140589003318720 [label=3]
+	n140589003318664 -> n140589003318720
+	n140589003318720 [label=3]
+	n140589003318888 [label=1]
+	n140589003320064 [label="+"]
+	n140589003319896 [label="*"]
+	n140589003320064 -> n140589003319896
+	n140589003320120 [label=2]
+	n140589003320064 -> n140589003320120
+	n140589003319896 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003319896 -> n140589003138104
+	n140589003319952 [label=3]
+	n140589003319896 -> n140589003319952
+	n140589003319952 [label=3]
+	n140589003320120 [label=2]
+	n140589003275344 [label="*"]
+	n140589003275400 [label=0.005]
+	n140589003275344 -> n140589003275400
+	n140589003275232 [label=PropertyAccess]
+	n140589003275344 -> n140589003275232
+	n140589003275400 [label=0.005]
+	n140589003275512 [label=PropertyAccess]
+	n140589003589224 [label=mass]
+	n140589003275512 -> n140589003589224
+	n140589003138104 [label="Iter(0)"]
+	n140589003275512 -> n140589003138104
+	n140589003589224 [label=mass]
+	n140589003275624 [label="/"]
+	n140589003275344 [label="*"]
+	n140589003275624 -> n140589003275344
+	n140589003275512 [label=PropertyAccess]
+	n140589003275624 -> n140589003275512
+	n140589003275736 [label="+"]
+	n140589003275120 [label=PropertyAccess]
+	n140589003275736 -> n140589003275120
+	n140589003275624 [label="/"]
+	n140589003275736 -> n140589003275624
+	n140589003275960 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003275960 -> n140589003138104
+	n140589003276016 [label=3]
+	n140589003275960 -> n140589003276016
+	n140589003276016 [label=3]
+	n140589003318216 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003318216 -> n140589003138104
+	n140589003318272 [label=3]
+	n140589003318216 -> n140589003318272
+	n140589003318272 [label=3]
+	n140589003318384 [label="+"]
+	n140589003318216 [label="*"]
+	n140589003318384 -> n140589003318216
+	n140589003318440 [label=1]
+	n140589003318384 -> n140589003318440
+	n140589003318440 [label=1]
+	n140589003319448 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003319448 -> n140589003138104
+	n140589003319504 [label=3]
+	n140589003319448 -> n140589003319504
+	n140589003319504 [label=3]
+	n140589003319616 [label="+"]
+	n140589003319448 [label="*"]
+	n140589003319616 -> n140589003319448
+	n140589003319672 [label=2]
+	n140589003319616 -> n140589003319672
+	n140589003319672 [label=2]
+	n140589003275848 [label=Assign]
+	n140589003318104 [label=VectorAccess]
+	n140589003275848 -> n140589003318104
+	n140589003317320 [label=VectorAccess]
+	n140589003275848 -> n140589003317320
+	n140589003319336 [label=VectorAccess]
+	n140589003275848 -> n140589003319336
+	n140589003318552 [label=VectorAccess]
+	n140589003275848 -> n140589003318552
+	n140589003320568 [label=VectorAccess]
+	n140589003275848 -> n140589003320568
+	n140589003319784 [label=VectorAccess]
+	n140589003275848 -> n140589003319784
+	n140589003318104 [label=VectorAccess]
+	n140589003275120 [label=PropertyAccess]
+	n140589003318104 -> n140589003275120
+	n140589003317320 [label=VectorAccess]
+	n140589003275736 [label="+"]
+	n140589003317320 -> n140589003275736
+	n140589003319336 [label=VectorAccess]
+	n140589003275120 [label=PropertyAccess]
+	n140589003319336 -> n140589003275120
+	n140589003318552 [label=VectorAccess]
+	n140589003275736 [label="+"]
+	n140589003318552 -> n140589003275736
+	n140589003320568 [label=VectorAccess]
+	n140589003275120 [label=PropertyAccess]
+	n140589003320568 -> n140589003275120
+	n140589003319784 [label=VectorAccess]
+	n140589003275736 [label="+"]
+	n140589003319784 -> n140589003275736
+	n140589003320624 [label=PropertyAccess]
+	n140589003589280 [label=position]
+	n140589003320624 -> n140589003589280
+	n140589003138104 [label="Iter(0)"]
+	n140589003320624 -> n140589003138104
+	n140589003354800 [label="*"]
+	n140589003320624 -> n140589003354800
+	n140589003356200 [label="+"]
+	n140589003320624 -> n140589003356200
+	n140589003357432 [label="+"]
+	n140589003320624 -> n140589003357432
+	n140589003354800 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003354800 -> n140589003138104
+	n140589003354856 [label=3]
+	n140589003354800 -> n140589003354856
+	n140589003354856 [label=3]
+	n140589003356200 [label="+"]
+	n140589003356032 [label="*"]
+	n140589003356200 -> n140589003356032
+	n140589003356256 [label=1]
+	n140589003356200 -> n140589003356256
+	n140589003356032 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003356032 -> n140589003138104
+	n140589003356088 [label=3]
+	n140589003356032 -> n140589003356088
+	n140589003356088 [label=3]
+	n140589003356256 [label=1]
+	n140589003357432 [label="+"]
+	n140589003357264 [label="*"]
+	n140589003357432 -> n140589003357264
+	n140589003357488 [label=2]
+	n140589003357432 -> n140589003357488
+	n140589003357264 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003357264 -> n140589003138104
+	n140589003357320 [label=3]
+	n140589003357264 -> n140589003357320
+	n140589003357320 [label=3]
+	n140589003357488 [label=2]
+	n140589003320736 [label=PropertyAccess]
+	n140589003589336 [label=velocity]
+	n140589003320736 -> n140589003589336
+	n140589003138104 [label="Iter(0)"]
+	n140589003320736 -> n140589003138104
+	n140589003354464 [label="*"]
+	n140589003320736 -> n140589003354464
+	n140589003355864 [label="+"]
+	n140589003320736 -> n140589003355864
+	n140589003357096 [label="+"]
+	n140589003320736 -> n140589003357096
+	n140589003354464 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003354464 -> n140589003138104
+	n140589003354520 [label=3]
+	n140589003354464 -> n140589003354520
+	n140589003354520 [label=3]
+	n140589003355864 [label="+"]
+	n140589003355696 [label="*"]
+	n140589003355864 -> n140589003355696
+	n140589003355920 [label=1]
+	n140589003355864 -> n140589003355920
+	n140589003355696 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003355696 -> n140589003138104
+	n140589003355752 [label=3]
+	n140589003355696 -> n140589003355752
+	n140589003355752 [label=3]
+	n140589003355920 [label=1]
+	n140589003357096 [label="+"]
+	n140589003356928 [label="*"]
+	n140589003357096 -> n140589003356928
+	n140589003357152 [label=2]
+	n140589003357096 -> n140589003357152
+	n140589003356928 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003356928 -> n140589003138104
+	n140589003356984 [label=3]
+	n140589003356928 -> n140589003356984
+	n140589003356984 [label=3]
+	n140589003357152 [label=2]
+	n140589003320848 [label="*"]
+	n140589003320904 [label=0.005]
+	n140589003320848 -> n140589003320904
+	n140589003320736 [label=PropertyAccess]
+	n140589003320848 -> n140589003320736
+	n140589003320904 [label=0.005]
+	n140589003321016 [label="+"]
+	n140589003320624 [label=PropertyAccess]
+	n140589003321016 -> n140589003320624
+	n140589003320848 [label="*"]
+	n140589003321016 -> n140589003320848
+	n140589003321240 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003321240 -> n140589003138104
+	n140589003321296 [label=3]
+	n140589003321240 -> n140589003321296
+	n140589003321296 [label=3]
+	n140589003355304 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003355304 -> n140589003138104
+	n140589003355360 [label=3]
+	n140589003355304 -> n140589003355360
+	n140589003355360 [label=3]
+	n140589003355472 [label="+"]
+	n140589003355304 [label="*"]
+	n140589003355472 -> n140589003355304
+	n140589003355528 [label=1]
+	n140589003355472 -> n140589003355528
+	n140589003355528 [label=1]
+	n140589003356536 [label="*"]
+	n140589003138104 [label="Iter(0)"]
+	n140589003356536 -> n140589003138104
+	n140589003356592 [label=3]
+	n140589003356536 -> n140589003356592
+	n140589003356592 [label=3]
+	n140589003356704 [label="+"]
+	n140589003356536 [label="*"]
+	n140589003356704 -> n140589003356536
+	n140589003356760 [label=2]
+	n140589003356704 -> n140589003356760
+	n140589003356760 [label=2]
+	n140589003321128 [label=Assign]
+	n140589003355192 [label=VectorAccess]
+	n140589003321128 -> n140589003355192
+	n140589003354408 [label=VectorAccess]
+	n140589003321128 -> n140589003354408
+	n140589003356424 [label=VectorAccess]
+	n140589003321128 -> n140589003356424
+	n140589003355640 [label=VectorAccess]
+	n140589003321128 -> n140589003355640
+	n140589003357656 [label=VectorAccess]
+	n140589003321128 -> n140589003357656
+	n140589003356872 [label=VectorAccess]
+	n140589003321128 -> n140589003356872
+	n140589003355192 [label=VectorAccess]
+	n140589003320624 [label=PropertyAccess]
+	n140589003355192 -> n140589003320624
+	n140589003354408 [label=VectorAccess]
+	n140589003321016 [label="+"]
+	n140589003354408 -> n140589003321016
+	n140589003356424 [label=VectorAccess]
+	n140589003320624 [label=PropertyAccess]
+	n140589003356424 -> n140589003320624
+	n140589003355640 [label=VectorAccess]
+	n140589003321016 [label="+"]
+	n140589003355640 -> n140589003321016
+	n140589003357656 [label=VectorAccess]
+	n140589003320624 [label=PropertyAccess]
+	n140589003357656 -> n140589003320624
+	n140589003356872 [label=VectorAccess]
+	n140589003321016 [label="+"]
+	n140589003356872 -> n140589003321016
+	n140589003140624 [label=0]
+	n140589003137152 [label=0]
+	n140589003137824 [label="%"]
+	n140589003139000 [label="Iter(1)"]
+	n140589003137824 -> n140589003139000
+	n140589003137880 [label=20]
+	n140589003137824 -> n140589003137880
+	n140589003139000 [label="Iter(1)"]
+	n140589003137880 [label=20]
+	n140589003137488 [label="=="]
+	n140589003137824 [label="%"]
+	n140589003137488 -> n140589003137824
+	n140589003137320 [label=0]
+	n140589003137488 -> n140589003137320
+	n140589003137320 [label=0]
+	n140589003138832 [label="%"]
+	n140589003139000 [label="Iter(1)"]
+	n140589003138832 -> n140589003139000
+	n140589003138440 [label=20]
+	n140589003138832 -> n140589003138440
+	n140589003138440 [label=20]
+	n140589003138608 [label="=="]
+	n140589003138832 [label="%"]
+	n140589003138608 -> n140589003138832
+	n140589003138664 [label=0]
+	n140589003138608 -> n140589003138664
+	n140589003138664 [label=0]
+	n140589003138888 [label="%"]
+	n140589003139000 [label="Iter(1)"]
+	n140589003138888 -> n140589003139000
+	n140589003139112 [label=20]
+	n140589003138888 -> n140589003139112
+	n140589003139112 [label=20]
+	n140589003139672 [label="=="]
+	n140589003138888 [label="%"]
+	n140589003139672 -> n140589003138888
+	n140589003139728 [label=0]
+	n140589003139672 -> n140589003139728
+	n140589003139728 [label=0]
+	n140589003357824 [label="%"]
+	n140589003139000 [label="Iter(1)"]
+	n140589003357824 -> n140589003139000
+	n140589003357880 [label=20]
+	n140589003357824 -> n140589003357880
+	n140589003357880 [label=20]
+	n140589003357992 [label="=="]
+	n140589003357824 [label="%"]
+	n140589003357992 -> n140589003357824
+	n140589003358048 [label=0]
+	n140589003357992 -> n140589003358048
+	n140589003358048 [label=0]
+	n140589003137432 [label="+"]
+	n140589003139000 [label="Iter(1)"]
+	n140589003137432 -> n140589003139000
+	n140589002858680 [label=1]
+	n140589003137432 -> n140589002858680
+	n140589002858680 [label=1]
 }
diff --git a/examples/kernels.pdf b/examples/kernels.pdf
index 12844fa0ef674cc8aac18d7586a87a09b51f5b94..ce7b3462a9f6380bce3b82a907317bc6979cfe78 100644
Binary files a/examples/kernels.pdf and b/examples/kernels.pdf differ
diff --git a/examples/lj_func.py b/examples/lj_func.py
index baba7a9bbfc8e155e458fbe2649d998e4cdd34cb..5ec2c46e69ffe4e8d89c3269f1e8b5435c6f81bb 100644
--- a/examples/lj_func.py
+++ b/examples/lj_func.py
@@ -4,8 +4,6 @@ import pairs
 def lj(i, j):
     sr2 = 1.0 / rsq
     sr6 = sr2 * sr2 * sr2 * sigma6
-    #f = 48.0 * sr6 * (sr6 - 0.5) * sr2 * epsilon
-    #force[i] += delta * f
     force[i] += delta * 48.0 * sr6 * (sr6 - 0.5) * sr2 * epsilon
 
 
@@ -23,7 +21,7 @@ sigma6 = sigma ** 6
 
 psim = pairs.simulation("lj_ns")
 psim.add_real_property('mass', 1.0)
-psim.add_vector_property('position')
+psim.add_position('position')
 psim.add_vector_property('velocity')
 psim.add_vector_property('force', vol=True)
 psim.from_file("data/minimd_setup_4x4x4.input", ['mass', 'position', 'velocity'])
@@ -31,6 +29,6 @@ psim.create_cell_lists(2.8, 2.8)
 psim.create_neighbor_lists()
 psim.periodic(2.8)
 psim.vtk_output("output/test")
-psim.compute(psim, lj, cutoff_radius, 'position', {'sigma6': sigma6, 'epsilon': epsilon})
-psim.compute(psim, euler, symbols={'dt': dt})
+psim.compute(lj, cutoff_radius, {'sigma6': sigma6, 'epsilon': epsilon})
+psim.compute(euler, symbols={'dt': dt})
 psim.generate()
diff --git a/examples/lj_ns.cpp b/examples/lj_ns.cpp
index 169705c0928b4546786bb23109f1869a78a2c207..ac376f0318cc2547f737c7e5a27053d7cc41f652 100644
--- a/examples/lj_ns.cpp
+++ b/examples/lj_ns.cpp
@@ -3,9 +3,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 //---
-#include "runtime/pairs.hpp"
-#include "runtime/read_from_file.hpp"
-#include "runtime/vtk.hpp"
+#include "../src/pairs/runtime/pairs.hpp"
+#include "../src/pairs/runtime/read_from_file.hpp"
+#include "../src/pairs/runtime/vtk.hpp"
 
 using namespace pairs;
 
@@ -27,7 +27,6 @@ int main() {
     int neighborlist_capacity = 32;
     int npbc = 0;
     int pbc_capacity = 100;
-    int resize = 0;
     double grid_buffer[6];
     int dim_cells[3];
     int *cell_particles = (int *) malloc((sizeof(int) * (ncells_capacity * cell_capacity)));
@@ -60,429 +59,429 @@ int main() {
     grid0_d2_min = a4;
     const double a5 = grid_buffer[5];
     grid0_d2_max = a5;
-    const double e462 = grid0_d0_max - grid0_d0_min;
-    const double e463 = e462 / 2.8;
-    const int e464 = ceil(e463) + 2;
-    dim_cells[0] = e464;
-    const double e466 = grid0_d1_max - grid0_d1_min;
-    const double e467 = e466 / 2.8;
-    const int e468 = ceil(e467) + 2;
-    dim_cells[1] = e468;
-    const int a54 = dim_cells[0];
-    const int a56 = dim_cells[1];
-    const int e469 = a54 * a56;
-    const double e470 = grid0_d2_max - grid0_d2_min;
-    const double e471 = e470 / 2.8;
-    const int e472 = ceil(e471) + 2;
-    dim_cells[2] = e472;
-    const int a58 = dim_cells[2];
-    const int e473 = e469 * a58;
-    ncells = e473;
-    resize = 1;
+    const double e94 = grid0_d0_max - grid0_d0_min;
+    const double e95 = e94 / 2.8;
+    const int e96 = ceil(e95) + 2;
+    dim_cells[0] = e96;
+    const double e98 = grid0_d1_max - grid0_d1_min;
+    const double e99 = e98 / 2.8;
+    const int e100 = ceil(e99) + 2;
+    dim_cells[1] = e100;
+    const int a7 = dim_cells[0];
+    const int a9 = dim_cells[1];
+    const int e101 = a7 * a9;
+    const double e102 = grid0_d2_max - grid0_d2_min;
+    const double e103 = e102 / 2.8;
+    const int e104 = ceil(e103) + 2;
+    dim_cells[2] = e104;
+    const int a11 = dim_cells[2];
+    const int e105 = e101 * a11;
+    ncells = e105;
+    int resize = 1;
     while((resize > 0)) {
         resize = 0;
-        const bool e475 = ncells >= ncells_capacity;
-        if(e475) {
+        const bool e107 = ncells >= ncells_capacity;
+        if(e107) {
             resize = ncells;
         }
-        const bool e476 = resize > 0;
-        if(e476) {
+        const bool e108 = resize > 0;
+        if(e108) {
             fprintf(stdout, "Resize ncells_capacity\n");
             fflush(stdout);
-            const int e477 = resize * 2;
-            ncells_capacity = e477;
+            const int e109 = resize * 2;
+            ncells_capacity = e109;
             cell_particles = (int *) realloc(cell_particles, (sizeof(int) * (ncells_capacity * cell_capacity)));
             cell_sizes = (int *) realloc(cell_sizes, (sizeof(int) * ncells_capacity));
         }
     }
     nstencil = 0;
-    for(int i15 = -1; i15 < 2; i15++) {
-        const int a59 = dim_cells[0];
-        const int e481 = i15 * a59;
-        for(int i16 = -1; i16 < 2; i16++) {
-            const int e482 = e481 + i16;
-            const int a60 = dim_cells[1];
-            const int e483 = e482 * a60;
-            for(int i17 = -1; i17 < 2; i17++) {
-                const int e484 = e483 + i17;
-                stencil[nstencil] = e484;
-                const int e485 = nstencil + 1;
-                nstencil = e485;
+    for(int i2 = -1; i2 < 2; i2++) {
+        const int a12 = dim_cells[0];
+        const int e113 = i2 * a12;
+        for(int i3 = -1; i3 < 2; i3++) {
+            const int e114 = e113 + i3;
+            const int a13 = dim_cells[1];
+            const int e115 = e114 * a13;
+            for(int i4 = -1; i4 < 2; i4++) {
+                const int e116 = e115 + i4;
+                stencil[nstencil] = e116;
+                const int e117 = nstencil + 1;
+                nstencil = e117;
             }
         }
     }
-    const int e486 = nlocal + npbc;
+    const int e118 = nlocal + npbc;
     pairs::vtk_write_data(ps, "output/test_local", 0, nlocal, 0);
-    pairs::vtk_write_data(ps, "output/test_pbc", nlocal, e486, 0);
-    for(int i14 = 0; i14 < 101; i14++) {
-        const int e452 = i14 % 20;
-        const bool e453 = e452 == 0;
-        if(e453) {
-            pairs::copy_to_device(position)
-            const double e115 = grid0_d0_max - grid0_d0_min;
-            const double e122 = grid0_d0_max - grid0_d0_min;
-            const double e129 = grid0_d1_max - grid0_d1_min;
-            const double e136 = grid0_d1_max - grid0_d1_min;
-            const double e143 = grid0_d2_max - grid0_d2_min;
-            const double e150 = grid0_d2_max - grid0_d2_min;
-            for(int i3 = 0; i3 < nlocal; i3++) {
-                const int e110 = i3 * 3;
-                const double p8_0 = position[e110];
-                const bool e112 = p8_0 < grid0_d0_min;
-                if(e112) {
-                    const int e113 = i3 * 3;
-                    const double p9_0 = position[e113];
-                    const double e116 = p9_0 + e115;
-                    position[e113] = e116;
+    pairs::vtk_write_data(ps, "output/test_pbc", nlocal, e118, 0);
+    for(int i1 = 0; i1 < 101; i1++) {
+        const int e65 = i1 % 20;
+        const bool e66 = e65 == 0;
+        if(e66) {
+            //pairs::copy_to_device(position)
+            const double e124 = grid0_d0_max - grid0_d0_min;
+            const double e131 = grid0_d0_max - grid0_d0_min;
+            const double e138 = grid0_d1_max - grid0_d1_min;
+            const double e145 = grid0_d1_max - grid0_d1_min;
+            const double e152 = grid0_d2_max - grid0_d2_min;
+            const double e159 = grid0_d2_max - grid0_d2_min;
+            for(int i5 = 0; i5 < nlocal; i5++) {
+                const int e119 = i5 * 3;
+                const double p6_0 = position[e119];
+                const bool e121 = p6_0 < grid0_d0_min;
+                if(e121) {
+                    const int e122 = i5 * 3;
+                    const double p7_0 = position[e122];
+                    const double e125 = p7_0 + e124;
+                    position[e122] = e125;
                 }
-                const int e117 = i3 * 3;
-                const double p10_0 = position[e117];
-                const bool e119 = p10_0 > grid0_d0_max;
-                if(e119) {
-                    const int e120 = i3 * 3;
-                    const double p11_0 = position[e120];
-                    const double e123 = p11_0 - e122;
-                    position[e120] = e123;
+                const int e126 = i5 * 3;
+                const double p8_0 = position[e126];
+                const bool e128 = p8_0 > grid0_d0_max;
+                if(e128) {
+                    const int e129 = i5 * 3;
+                    const double p9_0 = position[e129];
+                    const double e132 = p9_0 - e131;
+                    position[e129] = e132;
                 }
-                const int e124 = i3 * 3;
-                const int e125 = e124 + 1;
-                const double p12_1 = position[e125];
-                const bool e126 = p12_1 < grid0_d1_min;
-                if(e126) {
-                    const int e127 = i3 * 3;
-                    const int e128 = e127 + 1;
-                    const double p13_1 = position[e128];
-                    const double e130 = p13_1 + e129;
-                    position[e128] = e130;
+                const int e133 = i5 * 3;
+                const int e134 = e133 + 1;
+                const double p10_1 = position[e134];
+                const bool e135 = p10_1 < grid0_d1_min;
+                if(e135) {
+                    const int e136 = i5 * 3;
+                    const int e137 = e136 + 1;
+                    const double p11_1 = position[e137];
+                    const double e139 = p11_1 + e138;
+                    position[e137] = e139;
                 }
-                const int e131 = i3 * 3;
-                const int e132 = e131 + 1;
-                const double p14_1 = position[e132];
-                const bool e133 = p14_1 > grid0_d1_max;
-                if(e133) {
-                    const int e134 = i3 * 3;
-                    const int e135 = e134 + 1;
-                    const double p15_1 = position[e135];
-                    const double e137 = p15_1 - e136;
-                    position[e135] = e137;
+                const int e140 = i5 * 3;
+                const int e141 = e140 + 1;
+                const double p12_1 = position[e141];
+                const bool e142 = p12_1 > grid0_d1_max;
+                if(e142) {
+                    const int e143 = i5 * 3;
+                    const int e144 = e143 + 1;
+                    const double p13_1 = position[e144];
+                    const double e146 = p13_1 - e145;
+                    position[e144] = e146;
                 }
-                const int e138 = i3 * 3;
-                const int e139 = e138 + 2;
-                const double p16_2 = position[e139];
-                const bool e140 = p16_2 < grid0_d2_min;
-                if(e140) {
-                    const int e141 = i3 * 3;
-                    const int e142 = e141 + 2;
-                    const double p17_2 = position[e142];
-                    const double e144 = p17_2 + e143;
-                    position[e142] = e144;
+                const int e147 = i5 * 3;
+                const int e148 = e147 + 2;
+                const double p14_2 = position[e148];
+                const bool e149 = p14_2 < grid0_d2_min;
+                if(e149) {
+                    const int e150 = i5 * 3;
+                    const int e151 = e150 + 2;
+                    const double p15_2 = position[e151];
+                    const double e153 = p15_2 + e152;
+                    position[e151] = e153;
                 }
-                const int e145 = i3 * 3;
-                const int e146 = e145 + 2;
-                const double p18_2 = position[e146];
-                const bool e147 = p18_2 > grid0_d2_max;
-                if(e147) {
-                    const int e148 = i3 * 3;
-                    const int e149 = e148 + 2;
-                    const double p19_2 = position[e149];
-                    const double e151 = p19_2 - e150;
-                    position[e149] = e151;
+                const int e154 = i5 * 3;
+                const int e155 = e154 + 2;
+                const double p16_2 = position[e155];
+                const bool e156 = p16_2 > grid0_d2_max;
+                if(e156) {
+                    const int e157 = i5 * 3;
+                    const int e158 = e157 + 2;
+                    const double p17_2 = position[e158];
+                    const double e160 = p17_2 - e159;
+                    position[e158] = e160;
                 }
             }
         }
-        const int e454 = i14 % 20;
-        const bool e455 = e454 == 0;
-        if(e455) {
+        const int e67 = i1 % 20;
+        const bool e68 = e67 == 0;
+        if(e68) {
             resize = 1;
             while((resize > 0)) {
                 resize = 0;
                 npbc = 0;
-                const int e153 = nlocal + npbc;
-                const double e157 = grid0_d0_min + 2.8;
-                const double e168 = grid0_d0_max - grid0_d0_min;
-                const double e185 = grid0_d0_max - 2.8;
-                const double e196 = grid0_d0_max - grid0_d0_min;
-                for(int i4 = 0; i4 < e153; i4++) {
-                    const int e154 = nlocal + npbc;
-                    const int e155 = i4 * 3;
-                    const double p20_0 = position[e155];
-                    const bool e158 = p20_0 < e157;
-                    if(e158) {
-                        const bool e159 = npbc >= pbc_capacity;
-                        if(e159) {
-                            const bool e160 = resize > npbc;
-                            resize = (e160) ? ((resize + 1)) : (npbc);
+                const int e162 = nlocal + npbc;
+                const double e166 = grid0_d0_min + 2.8;
+                const double e177 = grid0_d0_max - grid0_d0_min;
+                const double e194 = grid0_d0_max - 2.8;
+                const double e205 = grid0_d0_max - grid0_d0_min;
+                for(int i6 = 0; i6 < e162; i6++) {
+                    const int e163 = nlocal + npbc;
+                    const int e164 = i6 * 3;
+                    const double p18_0 = position[e164];
+                    const bool e167 = p18_0 < e166;
+                    if(e167) {
+                        const bool e168 = npbc >= pbc_capacity;
+                        if(e168) {
+                            const bool e169 = resize > npbc;
+                            resize = (e169) ? ((resize + 1)) : (npbc);
                         } else {
-                            pbc_map[npbc] = i4;
-                            const int e162 = npbc * 3;
-                            pbc_mult[e162] = 1;
-                            const int e164 = e154 * 3;
-                            const double p21_0 = position[e164];
-                            const int e166 = i4 * 3;
-                            const double p22_0 = position[e166];
-                            const double e169 = p22_0 + e168;
-                            position[e164] = e169;
-                            const int e170 = npbc * 3;
-                            const int e171 = e170 + 1;
-                            pbc_mult[e171] = 0;
-                            const int e172 = e154 * 3;
-                            const int e173 = e172 + 1;
-                            const double p23_1 = position[e173];
-                            const int e174 = i4 * 3;
-                            const int e175 = e174 + 1;
-                            const double p24_1 = position[e175];
-                            position[e173] = p24_1;
-                            const int e176 = npbc * 3;
-                            const int e177 = e176 + 2;
-                            pbc_mult[e177] = 0;
-                            const int e178 = e154 * 3;
-                            const int e179 = e178 + 2;
-                            const double p25_2 = position[e179];
-                            const int e180 = i4 * 3;
-                            const int e181 = e180 + 2;
-                            const double p26_2 = position[e181];
-                            position[e179] = p26_2;
-                            const int e182 = npbc + 1;
-                            npbc = e182;
+                            pbc_map[npbc] = i6;
+                            const int e171 = npbc * 3;
+                            pbc_mult[e171] = 1;
+                            const int e173 = e163 * 3;
+                            const double p19_0 = position[e173];
+                            const int e175 = i6 * 3;
+                            const double p20_0 = position[e175];
+                            const double e178 = p20_0 + e177;
+                            position[e173] = e178;
+                            const int e179 = npbc * 3;
+                            const int e180 = e179 + 1;
+                            pbc_mult[e180] = 0;
+                            const int e181 = e163 * 3;
+                            const int e182 = e181 + 1;
+                            const double p21_1 = position[e182];
+                            const int e183 = i6 * 3;
+                            const int e184 = e183 + 1;
+                            const double p22_1 = position[e184];
+                            position[e182] = p22_1;
+                            const int e185 = npbc * 3;
+                            const int e186 = e185 + 2;
+                            pbc_mult[e186] = 0;
+                            const int e187 = e163 * 3;
+                            const int e188 = e187 + 2;
+                            const double p23_2 = position[e188];
+                            const int e189 = i6 * 3;
+                            const int e190 = e189 + 2;
+                            const double p24_2 = position[e190];
+                            position[e188] = p24_2;
+                            const int e191 = npbc + 1;
+                            npbc = e191;
                         }
                     }
-                    const int e183 = i4 * 3;
-                    const double p27_0 = position[e183];
-                    const bool e186 = p27_0 > e185;
-                    if(e186) {
-                        const bool e187 = npbc >= pbc_capacity;
-                        if(e187) {
-                            const bool e188 = resize > npbc;
-                            resize = (e188) ? ((resize + 1)) : (npbc);
+                    const int e192 = i6 * 3;
+                    const double p25_0 = position[e192];
+                    const bool e195 = p25_0 > e194;
+                    if(e195) {
+                        const bool e196 = npbc >= pbc_capacity;
+                        if(e196) {
+                            const bool e197 = resize > npbc;
+                            resize = (e197) ? ((resize + 1)) : (npbc);
                         } else {
-                            pbc_map[npbc] = i4;
-                            const int e190 = npbc * 3;
-                            pbc_mult[e190] = -1;
-                            const int e192 = e154 * 3;
-                            const double p28_0 = position[e192];
-                            const int e194 = i4 * 3;
-                            const double p29_0 = position[e194];
-                            const double e197 = p29_0 - e196;
-                            position[e192] = e197;
-                            const int e198 = npbc * 3;
-                            const int e199 = e198 + 1;
-                            pbc_mult[e199] = 0;
-                            const int e200 = e154 * 3;
-                            const int e201 = e200 + 1;
-                            const double p30_1 = position[e201];
-                            const int e202 = i4 * 3;
-                            const int e203 = e202 + 1;
-                            const double p31_1 = position[e203];
-                            position[e201] = p31_1;
-                            const int e204 = npbc * 3;
-                            const int e205 = e204 + 2;
-                            pbc_mult[e205] = 0;
-                            const int e206 = e154 * 3;
-                            const int e207 = e206 + 2;
-                            const double p32_2 = position[e207];
-                            const int e208 = i4 * 3;
-                            const int e209 = e208 + 2;
-                            const double p33_2 = position[e209];
-                            position[e207] = p33_2;
-                            const int e210 = npbc + 1;
-                            npbc = e210;
+                            pbc_map[npbc] = i6;
+                            const int e199 = npbc * 3;
+                            pbc_mult[e199] = -1;
+                            const int e201 = e163 * 3;
+                            const double p26_0 = position[e201];
+                            const int e203 = i6 * 3;
+                            const double p27_0 = position[e203];
+                            const double e206 = p27_0 - e205;
+                            position[e201] = e206;
+                            const int e207 = npbc * 3;
+                            const int e208 = e207 + 1;
+                            pbc_mult[e208] = 0;
+                            const int e209 = e163 * 3;
+                            const int e210 = e209 + 1;
+                            const double p28_1 = position[e210];
+                            const int e211 = i6 * 3;
+                            const int e212 = e211 + 1;
+                            const double p29_1 = position[e212];
+                            position[e210] = p29_1;
+                            const int e213 = npbc * 3;
+                            const int e214 = e213 + 2;
+                            pbc_mult[e214] = 0;
+                            const int e215 = e163 * 3;
+                            const int e216 = e215 + 2;
+                            const double p30_2 = position[e216];
+                            const int e217 = i6 * 3;
+                            const int e218 = e217 + 2;
+                            const double p31_2 = position[e218];
+                            position[e216] = p31_2;
+                            const int e219 = npbc + 1;
+                            npbc = e219;
                         }
                     }
                 }
-                const int e211 = nlocal + npbc;
-                const double e215 = grid0_d1_min + 2.8;
-                const double e226 = grid0_d1_max - grid0_d1_min;
-                const double e243 = grid0_d1_max - 2.8;
-                const double e254 = grid0_d1_max - grid0_d1_min;
-                for(int i5 = 0; i5 < e211; i5++) {
-                    const int e212 = nlocal + npbc;
-                    const int e213 = i5 * 3;
-                    const int e214 = e213 + 1;
-                    const double p34_1 = position[e214];
-                    const bool e216 = p34_1 < e215;
-                    if(e216) {
-                        const bool e217 = npbc >= pbc_capacity;
-                        if(e217) {
-                            const bool e218 = resize > npbc;
-                            resize = (e218) ? ((resize + 1)) : (npbc);
+                const int e220 = nlocal + npbc;
+                const double e224 = grid0_d1_min + 2.8;
+                const double e235 = grid0_d1_max - grid0_d1_min;
+                const double e252 = grid0_d1_max - 2.8;
+                const double e263 = grid0_d1_max - grid0_d1_min;
+                for(int i7 = 0; i7 < e220; i7++) {
+                    const int e221 = nlocal + npbc;
+                    const int e222 = i7 * 3;
+                    const int e223 = e222 + 1;
+                    const double p32_1 = position[e223];
+                    const bool e225 = p32_1 < e224;
+                    if(e225) {
+                        const bool e226 = npbc >= pbc_capacity;
+                        if(e226) {
+                            const bool e227 = resize > npbc;
+                            resize = (e227) ? ((resize + 1)) : (npbc);
                         } else {
-                            pbc_map[npbc] = i5;
-                            const int e220 = npbc * 3;
-                            const int e221 = e220 + 1;
-                            pbc_mult[e221] = 1;
-                            const int e222 = e212 * 3;
-                            const int e223 = e222 + 1;
-                            const double p35_1 = position[e223];
-                            const int e224 = i5 * 3;
-                            const int e225 = e224 + 1;
-                            const double p36_1 = position[e225];
-                            const double e227 = p36_1 + e226;
-                            position[e223] = e227;
-                            const int e228 = npbc * 3;
-                            pbc_mult[e228] = 0;
-                            const int e230 = e212 * 3;
-                            const double p37_0 = position[e230];
-                            const int e232 = i5 * 3;
-                            const double p38_0 = position[e232];
-                            position[e230] = p38_0;
-                            const int e234 = npbc * 3;
-                            const int e235 = e234 + 2;
-                            pbc_mult[e235] = 0;
-                            const int e236 = e212 * 3;
-                            const int e237 = e236 + 2;
-                            const double p39_2 = position[e237];
-                            const int e238 = i5 * 3;
-                            const int e239 = e238 + 2;
-                            const double p40_2 = position[e239];
-                            position[e237] = p40_2;
-                            const int e240 = npbc + 1;
-                            npbc = e240;
+                            pbc_map[npbc] = i7;
+                            const int e229 = npbc * 3;
+                            const int e230 = e229 + 1;
+                            pbc_mult[e230] = 1;
+                            const int e231 = e221 * 3;
+                            const int e232 = e231 + 1;
+                            const double p33_1 = position[e232];
+                            const int e233 = i7 * 3;
+                            const int e234 = e233 + 1;
+                            const double p34_1 = position[e234];
+                            const double e236 = p34_1 + e235;
+                            position[e232] = e236;
+                            const int e237 = npbc * 3;
+                            pbc_mult[e237] = 0;
+                            const int e239 = e221 * 3;
+                            const double p35_0 = position[e239];
+                            const int e241 = i7 * 3;
+                            const double p36_0 = position[e241];
+                            position[e239] = p36_0;
+                            const int e243 = npbc * 3;
+                            const int e244 = e243 + 2;
+                            pbc_mult[e244] = 0;
+                            const int e245 = e221 * 3;
+                            const int e246 = e245 + 2;
+                            const double p37_2 = position[e246];
+                            const int e247 = i7 * 3;
+                            const int e248 = e247 + 2;
+                            const double p38_2 = position[e248];
+                            position[e246] = p38_2;
+                            const int e249 = npbc + 1;
+                            npbc = e249;
                         }
                     }
-                    const int e241 = i5 * 3;
-                    const int e242 = e241 + 1;
-                    const double p41_1 = position[e242];
-                    const bool e244 = p41_1 > e243;
-                    if(e244) {
-                        const bool e245 = npbc >= pbc_capacity;
-                        if(e245) {
-                            const bool e246 = resize > npbc;
-                            resize = (e246) ? ((resize + 1)) : (npbc);
+                    const int e250 = i7 * 3;
+                    const int e251 = e250 + 1;
+                    const double p39_1 = position[e251];
+                    const bool e253 = p39_1 > e252;
+                    if(e253) {
+                        const bool e254 = npbc >= pbc_capacity;
+                        if(e254) {
+                            const bool e255 = resize > npbc;
+                            resize = (e255) ? ((resize + 1)) : (npbc);
                         } else {
-                            pbc_map[npbc] = i5;
-                            const int e248 = npbc * 3;
-                            const int e249 = e248 + 1;
-                            pbc_mult[e249] = -1;
-                            const int e250 = e212 * 3;
-                            const int e251 = e250 + 1;
-                            const double p42_1 = position[e251];
-                            const int e252 = i5 * 3;
-                            const int e253 = e252 + 1;
-                            const double p43_1 = position[e253];
-                            const double e255 = p43_1 - e254;
-                            position[e251] = e255;
-                            const int e256 = npbc * 3;
-                            pbc_mult[e256] = 0;
-                            const int e258 = e212 * 3;
-                            const double p44_0 = position[e258];
-                            const int e260 = i5 * 3;
-                            const double p45_0 = position[e260];
-                            position[e258] = p45_0;
-                            const int e262 = npbc * 3;
-                            const int e263 = e262 + 2;
-                            pbc_mult[e263] = 0;
-                            const int e264 = e212 * 3;
-                            const int e265 = e264 + 2;
-                            const double p46_2 = position[e265];
-                            const int e266 = i5 * 3;
-                            const int e267 = e266 + 2;
-                            const double p47_2 = position[e267];
-                            position[e265] = p47_2;
-                            const int e268 = npbc + 1;
-                            npbc = e268;
+                            pbc_map[npbc] = i7;
+                            const int e257 = npbc * 3;
+                            const int e258 = e257 + 1;
+                            pbc_mult[e258] = -1;
+                            const int e259 = e221 * 3;
+                            const int e260 = e259 + 1;
+                            const double p40_1 = position[e260];
+                            const int e261 = i7 * 3;
+                            const int e262 = e261 + 1;
+                            const double p41_1 = position[e262];
+                            const double e264 = p41_1 - e263;
+                            position[e260] = e264;
+                            const int e265 = npbc * 3;
+                            pbc_mult[e265] = 0;
+                            const int e267 = e221 * 3;
+                            const double p42_0 = position[e267];
+                            const int e269 = i7 * 3;
+                            const double p43_0 = position[e269];
+                            position[e267] = p43_0;
+                            const int e271 = npbc * 3;
+                            const int e272 = e271 + 2;
+                            pbc_mult[e272] = 0;
+                            const int e273 = e221 * 3;
+                            const int e274 = e273 + 2;
+                            const double p44_2 = position[e274];
+                            const int e275 = i7 * 3;
+                            const int e276 = e275 + 2;
+                            const double p45_2 = position[e276];
+                            position[e274] = p45_2;
+                            const int e277 = npbc + 1;
+                            npbc = e277;
                         }
                     }
                 }
-                const int e269 = nlocal + npbc;
-                const double e273 = grid0_d2_min + 2.8;
-                const double e284 = grid0_d2_max - grid0_d2_min;
-                const double e301 = grid0_d2_max - 2.8;
-                const double e312 = grid0_d2_max - grid0_d2_min;
-                for(int i6 = 0; i6 < e269; i6++) {
-                    const int e270 = nlocal + npbc;
-                    const int e271 = i6 * 3;
-                    const int e272 = e271 + 2;
-                    const double p48_2 = position[e272];
-                    const bool e274 = p48_2 < e273;
-                    if(e274) {
-                        const bool e275 = npbc >= pbc_capacity;
-                        if(e275) {
-                            const bool e276 = resize > npbc;
-                            resize = (e276) ? ((resize + 1)) : (npbc);
+                const int e278 = nlocal + npbc;
+                const double e282 = grid0_d2_min + 2.8;
+                const double e293 = grid0_d2_max - grid0_d2_min;
+                const double e310 = grid0_d2_max - 2.8;
+                const double e321 = grid0_d2_max - grid0_d2_min;
+                for(int i8 = 0; i8 < e278; i8++) {
+                    const int e279 = nlocal + npbc;
+                    const int e280 = i8 * 3;
+                    const int e281 = e280 + 2;
+                    const double p46_2 = position[e281];
+                    const bool e283 = p46_2 < e282;
+                    if(e283) {
+                        const bool e284 = npbc >= pbc_capacity;
+                        if(e284) {
+                            const bool e285 = resize > npbc;
+                            resize = (e285) ? ((resize + 1)) : (npbc);
                         } else {
-                            pbc_map[npbc] = i6;
-                            const int e278 = npbc * 3;
-                            const int e279 = e278 + 2;
-                            pbc_mult[e279] = 1;
-                            const int e280 = e270 * 3;
-                            const int e281 = e280 + 2;
-                            const double p49_2 = position[e281];
-                            const int e282 = i6 * 3;
-                            const int e283 = e282 + 2;
-                            const double p50_2 = position[e283];
-                            const double e285 = p50_2 + e284;
-                            position[e281] = e285;
-                            const int e286 = npbc * 3;
-                            pbc_mult[e286] = 0;
-                            const int e288 = e270 * 3;
-                            const double p51_0 = position[e288];
-                            const int e290 = i6 * 3;
-                            const double p52_0 = position[e290];
-                            position[e288] = p52_0;
-                            const int e292 = npbc * 3;
-                            const int e293 = e292 + 1;
-                            pbc_mult[e293] = 0;
-                            const int e294 = e270 * 3;
-                            const int e295 = e294 + 1;
-                            const double p53_1 = position[e295];
-                            const int e296 = i6 * 3;
-                            const int e297 = e296 + 1;
-                            const double p54_1 = position[e297];
-                            position[e295] = p54_1;
-                            const int e298 = npbc + 1;
-                            npbc = e298;
+                            pbc_map[npbc] = i8;
+                            const int e287 = npbc * 3;
+                            const int e288 = e287 + 2;
+                            pbc_mult[e288] = 1;
+                            const int e289 = e279 * 3;
+                            const int e290 = e289 + 2;
+                            const double p47_2 = position[e290];
+                            const int e291 = i8 * 3;
+                            const int e292 = e291 + 2;
+                            const double p48_2 = position[e292];
+                            const double e294 = p48_2 + e293;
+                            position[e290] = e294;
+                            const int e295 = npbc * 3;
+                            pbc_mult[e295] = 0;
+                            const int e297 = e279 * 3;
+                            const double p49_0 = position[e297];
+                            const int e299 = i8 * 3;
+                            const double p50_0 = position[e299];
+                            position[e297] = p50_0;
+                            const int e301 = npbc * 3;
+                            const int e302 = e301 + 1;
+                            pbc_mult[e302] = 0;
+                            const int e303 = e279 * 3;
+                            const int e304 = e303 + 1;
+                            const double p51_1 = position[e304];
+                            const int e305 = i8 * 3;
+                            const int e306 = e305 + 1;
+                            const double p52_1 = position[e306];
+                            position[e304] = p52_1;
+                            const int e307 = npbc + 1;
+                            npbc = e307;
                         }
                     }
-                    const int e299 = i6 * 3;
-                    const int e300 = e299 + 2;
-                    const double p55_2 = position[e300];
-                    const bool e302 = p55_2 > e301;
-                    if(e302) {
-                        const bool e303 = npbc >= pbc_capacity;
-                        if(e303) {
-                            const bool e304 = resize > npbc;
-                            resize = (e304) ? ((resize + 1)) : (npbc);
+                    const int e308 = i8 * 3;
+                    const int e309 = e308 + 2;
+                    const double p53_2 = position[e309];
+                    const bool e311 = p53_2 > e310;
+                    if(e311) {
+                        const bool e312 = npbc >= pbc_capacity;
+                        if(e312) {
+                            const bool e313 = resize > npbc;
+                            resize = (e313) ? ((resize + 1)) : (npbc);
                         } else {
-                            pbc_map[npbc] = i6;
-                            const int e306 = npbc * 3;
-                            const int e307 = e306 + 2;
-                            pbc_mult[e307] = -1;
-                            const int e308 = e270 * 3;
-                            const int e309 = e308 + 2;
-                            const double p56_2 = position[e309];
-                            const int e310 = i6 * 3;
-                            const int e311 = e310 + 2;
-                            const double p57_2 = position[e311];
-                            const double e313 = p57_2 - e312;
-                            position[e309] = e313;
-                            const int e314 = npbc * 3;
-                            pbc_mult[e314] = 0;
-                            const int e316 = e270 * 3;
-                            const double p58_0 = position[e316];
-                            const int e318 = i6 * 3;
-                            const double p59_0 = position[e318];
-                            position[e316] = p59_0;
-                            const int e320 = npbc * 3;
-                            const int e321 = e320 + 1;
-                            pbc_mult[e321] = 0;
-                            const int e322 = e270 * 3;
-                            const int e323 = e322 + 1;
-                            const double p60_1 = position[e323];
-                            const int e324 = i6 * 3;
-                            const int e325 = e324 + 1;
-                            const double p61_1 = position[e325];
-                            position[e323] = p61_1;
-                            const int e326 = npbc + 1;
-                            npbc = e326;
+                            pbc_map[npbc] = i8;
+                            const int e315 = npbc * 3;
+                            const int e316 = e315 + 2;
+                            pbc_mult[e316] = -1;
+                            const int e317 = e279 * 3;
+                            const int e318 = e317 + 2;
+                            const double p54_2 = position[e318];
+                            const int e319 = i8 * 3;
+                            const int e320 = e319 + 2;
+                            const double p55_2 = position[e320];
+                            const double e322 = p55_2 - e321;
+                            position[e318] = e322;
+                            const int e323 = npbc * 3;
+                            pbc_mult[e323] = 0;
+                            const int e325 = e279 * 3;
+                            const double p56_0 = position[e325];
+                            const int e327 = i8 * 3;
+                            const double p57_0 = position[e327];
+                            position[e325] = p57_0;
+                            const int e329 = npbc * 3;
+                            const int e330 = e329 + 1;
+                            pbc_mult[e330] = 0;
+                            const int e331 = e279 * 3;
+                            const int e332 = e331 + 1;
+                            const double p58_1 = position[e332];
+                            const int e333 = i8 * 3;
+                            const int e334 = e333 + 1;
+                            const double p59_1 = position[e334];
+                            position[e332] = p59_1;
+                            const int e335 = npbc + 1;
+                            npbc = e335;
                         }
                     }
                 }
-                const bool e327 = resize > 0;
-                if(e327) {
+                const bool e336 = resize > 0;
+                if(e336) {
                     fprintf(stdout, "Resize pbc_capacity\n");
                     fflush(stdout);
-                    const int e328 = resize * 2;
-                    pbc_capacity = e328;
+                    const int e337 = resize * 2;
+                    pbc_capacity = e337;
                     pbc_map = (int *) realloc(pbc_map, (sizeof(int) * pbc_capacity));
                     pbc_mult = (int *) realloc(pbc_mult, (sizeof(int) * (pbc_capacity * 3)));
                     mass = (double *) realloc(mass, (sizeof(double) * (particle_capacity + pbc_capacity)));
@@ -496,169 +495,171 @@ int main() {
                 }
             }
         } else {
-            const double e348 = grid0_d0_max - grid0_d0_min;
-            const double e358 = grid0_d1_max - grid0_d1_min;
-            const double e368 = grid0_d2_max - grid0_d2_min;
-            for(int i7 = 0; i7 < npbc; i7++) {
-                const int e341 = nlocal + i7;
-                const int e342 = e341 * 3;
-                const double p62_0 = position[e342];
-                const int a32 = pbc_map[i7];
-                const int e344 = a32 * 3;
-                const double p63_0 = position[e344];
-                const int e346 = i7 * 3;
-                const int a33 = pbc_mult[e346];
-                const double e349 = a33 * e348;
-                const double e350 = p63_0 + e349;
-                position[e342] = e350;
-                const int e351 = nlocal + i7;
-                const int e352 = e351 * 3;
-                const int e353 = e352 + 1;
-                const double p64_1 = position[e353];
-                const int a34 = pbc_map[i7];
-                const int e354 = a34 * 3;
-                const int e355 = e354 + 1;
-                const double p65_1 = position[e355];
-                const int e356 = i7 * 3;
-                const int e357 = e356 + 1;
-                const int a35 = pbc_mult[e357];
-                const double e359 = a35 * e358;
-                const double e360 = p65_1 + e359;
-                position[e353] = e360;
-                const int e361 = nlocal + i7;
-                const int e362 = e361 * 3;
-                const int e363 = e362 + 2;
-                const double p66_2 = position[e363];
-                const int a36 = pbc_map[i7];
-                const int e364 = a36 * 3;
-                const int e365 = e364 + 2;
-                const double p67_2 = position[e365];
-                const int e366 = i7 * 3;
-                const int e367 = e366 + 2;
-                const int a37 = pbc_mult[e367];
-                const double e369 = a37 * e368;
-                const double e370 = p67_2 + e369;
-                position[e363] = e370;
+            const double e357 = grid0_d0_max - grid0_d0_min;
+            const double e367 = grid0_d1_max - grid0_d1_min;
+            const double e377 = grid0_d2_max - grid0_d2_min;
+            for(int i9 = 0; i9 < npbc; i9++) {
+                const int e350 = nlocal + i9;
+                const int e351 = e350 * 3;
+                const double p60_0 = position[e351];
+                const int a39 = pbc_map[i9];
+                const int e353 = a39 * 3;
+                const double p61_0 = position[e353];
+                const int e355 = i9 * 3;
+                const int a40 = pbc_mult[e355];
+                const double e358 = a40 * e357;
+                const double e359 = p61_0 + e358;
+                position[e351] = e359;
+                const int e360 = nlocal + i9;
+                const int e361 = e360 * 3;
+                const int e362 = e361 + 1;
+                const double p62_1 = position[e362];
+                const int a41 = pbc_map[i9];
+                const int e363 = a41 * 3;
+                const int e364 = e363 + 1;
+                const double p63_1 = position[e364];
+                const int e365 = i9 * 3;
+                const int e366 = e365 + 1;
+                const int a42 = pbc_mult[e366];
+                const double e368 = a42 * e367;
+                const double e369 = p63_1 + e368;
+                position[e362] = e369;
+                const int e370 = nlocal + i9;
+                const int e371 = e370 * 3;
+                const int e372 = e371 + 2;
+                const double p64_2 = position[e372];
+                const int a43 = pbc_map[i9];
+                const int e373 = a43 * 3;
+                const int e374 = e373 + 2;
+                const double p65_2 = position[e374];
+                const int e375 = i9 * 3;
+                const int e376 = e375 + 2;
+                const int a44 = pbc_mult[e376];
+                const double e378 = a44 * e377;
+                const double e379 = p65_2 + e378;
+                position[e372] = e379;
             }
         }
-        const int e456 = i14 % 20;
-        const bool e457 = e456 == 0;
-        if(e457) {
+        const int e69 = i1 % 20;
+        const bool e70 = e69 == 0;
+        if(e70) {
             resize = 1;
             while((resize > 0)) {
                 resize = 0;
-                for(int i8 = 0; i8 < ncells; i8++) {
-                    cell_sizes[i8] = 0;
+                for(int i10 = 0; i10 < ncells; i10++) {
+                    cell_sizes[i10] = 0;
                 }
-                const int e511 = nlocal + npbc;
-                for(int i9 = 0; i9 < e511; i9++) {
-                    const int e372 = i9 * 3;
-                    const double p68_0 = position[e372];
-                    const double e374 = p68_0 - grid0_d0_min;
-                    const double e375 = e374 / 2.8;
-                    const int e376 = i9 * 3;
-                    const int e377 = e376 + 1;
-                    const double p69_1 = position[e377];
-                    const double e378 = p69_1 - grid0_d1_min;
-                    const double e379 = e378 / 2.8;
-                    const int e380 = i9 * 3;
-                    const int e381 = e380 + 2;
-                    const double p70_2 = position[e381];
-                    const double e382 = p70_2 - grid0_d2_min;
-                    const double e383 = e382 / 2.8;
-                    const int a39 = dim_cells[1];
-                    const int e384 = (int)(e375) * a39;
-                    const int e385 = e384 + (int)(e379);
-                    const int a40 = dim_cells[2];
-                    const int e386 = e385 * a40;
-                    const int e387 = e386 + (int)(e383);
-                    const bool e388 = e387 >= 0;
-                    const bool e389 = e387 <= ncells;
-                    const bool e390 = e388 && e389;
-                    if(e390) {
-                        const int a41 = cell_sizes[e387];
-                        const bool e391 = a41 >= cell_capacity;
-                        if(e391) {
-                            resize = a41;
+                const int e499 = nlocal + npbc;
+                for(int i11 = 0; i11 < e499; i11++) {
+                    const int e381 = i11 * 3;
+                    const double p66_0 = position[e381];
+                    const double e383 = p66_0 - grid0_d0_min;
+                    const double e384 = e383 / 2.8;
+                    const int e385 = i11 * 3;
+                    const int e386 = e385 + 1;
+                    const double p67_1 = position[e386];
+                    const double e387 = p67_1 - grid0_d1_min;
+                    const double e388 = e387 / 2.8;
+                    const int e389 = i11 * 3;
+                    const int e390 = e389 + 2;
+                    const double p68_2 = position[e390];
+                    const double e391 = p68_2 - grid0_d2_min;
+                    const double e392 = e391 / 2.8;
+                    const int a46 = dim_cells[1];
+                    const int e393 = (int)(e384) * a46;
+                    const int e394 = e393 + (int)(e388);
+                    const int a47 = dim_cells[2];
+                    const int e395 = e394 * a47;
+                    const int e396 = e395 + (int)(e392);
+                    const bool e397 = e396 >= 0;
+                    const bool e398 = e396 <= ncells;
+                    const bool e399 = e397 && e398;
+                    if(e399) {
+                        const int a48 = cell_sizes[e396];
+                        const bool e400 = a48 >= cell_capacity;
+                        if(e400) {
+                            resize = a48;
                         } else {
-                            const int e392 = e387 * cell_capacity;
-                            const int e393 = e392 + a41;
-                            cell_particles[e393] = i9;
-                            particle_cell[i9] = e387;
+                            const int e401 = e396 * cell_capacity;
+                            const int e402 = e401 + a48;
+                            cell_particles[e402] = i11;
+                            particle_cell[i11] = e396;
                         }
-                        const int e394 = a41 + 1;
-                        cell_sizes[e387] = e394;
+                        const int e403 = a48 + 1;
+                        cell_sizes[e396] = e403;
                     }
                 }
-                const bool e395 = resize > 0;
-                if(e395) {
+                const bool e404 = resize > 0;
+                if(e404) {
                     fprintf(stdout, "Resize cell_capacity\n");
                     fflush(stdout);
-                    const int e396 = resize * 2;
-                    cell_capacity = e396;
+                    const int e405 = resize * 2;
+                    cell_capacity = e405;
                     cell_particles = (int *) realloc(cell_particles, (sizeof(int) * (ncells_capacity * cell_capacity)));
                 }
             }
         }
-        const int e458 = i14 % 20;
-        const bool e459 = e458 == 0;
-        if(e459) {
+        const int e71 = i1 % 20;
+        const bool e72 = e71 == 0;
+        if(e72) {
             resize = 1;
             while((resize > 0)) {
                 resize = 0;
-                for(int i10 = 0; i10 < nlocal; i10++) {
-                    numneighs[i10] = 0;
-                    for(int i11 = 0; i11 < nstencil; i11++) {
-                        const int a46 = particle_cell[i10];
-                        const int a47 = stencil[i11];
-                        const int e400 = a46 + a47;
-                        const bool e401 = e400 >= 0;
-                        const bool e402 = e400 <= ncells;
-                        const bool e403 = e401 && e402;
-                        if(e403) {
-                            const int e404 = e400 * cell_capacity;
-                            const int e412 = i10 * 3;
-                            const double p71_0 = position[e412];
-                            const int e421 = i10 * 3;
-                            const int e422 = e421 + 1;
-                            const double p71_1 = position[e422];
-                            const int e431 = i10 * 3;
-                            const int e432 = e431 + 2;
-                            const double p71_2 = position[e432];
-                            const int e439 = i10 * neighborlist_capacity;
-                            const int a48 = cell_sizes[e400];
-                            for(int i12 = 0; i12 < a48; i12++) {
-                                const int e405 = e404 + i12;
-                                const int a49 = cell_particles[e405];
-                                const bool e406 = a49 != i10;
-                                if(e406) {
-                                    const int e414 = a49 * 3;
-                                    const double p72_0 = position[e414];
-                                    const int e423 = a49 * 3;
-                                    const int e424 = e423 + 1;
-                                    const double p72_1 = position[e424];
-                                    const int e433 = a49 * 3;
-                                    const int e434 = e433 + 2;
-                                    const double p72_2 = position[e434];
-                                    const double e407_0 = p71_0 - p72_0;
-                                    const double e407_1 = p71_1 - p72_1;
-                                    const double e407_2 = p71_2 - p72_2;
-                                    const double e416 = e407_0 * e407_0;
-                                    const double e425 = e407_1 * e407_1;
-                                    const double e426 = e416 + e425;
-                                    const double e435 = e407_2 * e407_2;
-                                    const double e436 = e426 + e435;
-                                    const bool e437 = e436 < 2.8;
-                                    if(e437) {
-                                        const int a50 = numneighs[i10];
-                                        const bool e438 = a50 >= neighborlist_capacity;
-                                        if(e438) {
-                                            resize = a50;
+                for(int i12 = 0; i12 < nlocal; i12++) {
+                    numneighs[i12] = 0;
+                }
+                for(int i16 = 0; i16 < nlocal; i16++) {
+                    for(int i17 = 0; i17 < nstencil; i17++) {
+                        const int a58 = particle_cell[i16];
+                        const int a59 = stencil[i17];
+                        const int e457 = a58 + a59;
+                        const bool e458 = e457 >= 0;
+                        const bool e459 = e457 <= ncells;
+                        const bool e460 = e458 && e459;
+                        if(e460) {
+                            const int e461 = e457 * cell_capacity;
+                            const int e469 = i16 * 3;
+                            const double p72_0 = position[e469];
+                            const int e478 = i16 * 3;
+                            const int e479 = e478 + 1;
+                            const double p72_1 = position[e479];
+                            const int e488 = i16 * 3;
+                            const int e489 = e488 + 2;
+                            const double p72_2 = position[e489];
+                            const int e410 = i16 * neighborlist_capacity;
+                            const int a60 = cell_sizes[e457];
+                            for(int i18 = 0; i18 < a60; i18++) {
+                                const int e462 = e461 + i18;
+                                const int a61 = cell_particles[e462];
+                                const bool e463 = a61 != i16;
+                                if(e463) {
+                                    const int e471 = a61 * 3;
+                                    const double p73_0 = position[e471];
+                                    const int e480 = a61 * 3;
+                                    const int e481 = e480 + 1;
+                                    const double p73_1 = position[e481];
+                                    const int e490 = a61 * 3;
+                                    const int e491 = e490 + 2;
+                                    const double p73_2 = position[e491];
+                                    const double e464_0 = p72_0 - p73_0;
+                                    const double e464_1 = p72_1 - p73_1;
+                                    const double e464_2 = p72_2 - p73_2;
+                                    const double e473 = e464_0 * e464_0;
+                                    const double e482 = e464_1 * e464_1;
+                                    const double e483 = e473 + e482;
+                                    const double e492 = e464_2 * e464_2;
+                                    const double e493 = e483 + e492;
+                                    const bool e494 = e493 < 2.8;
+                                    if(e494) {
+                                        const int a53 = numneighs[i16];
+                                        const bool e409 = a53 >= neighborlist_capacity;
+                                        if(e409) {
+                                            resize = a53;
                                         } else {
-                                            const int e440 = e439 + a50;
-                                            neighborlists[e440] = a49;
-                                            const int e441 = a50 + 1;
-                                            numneighs[i10] = e441;
+                                            const int e411 = e410 + a53;
+                                            neighborlists[e411] = a61;
+                                            const int e412 = a53 + 1;
+                                            numneighs[i16] = e412;
                                         }
                                     }
                                 }
@@ -666,150 +667,150 @@ int main() {
                         }
                     }
                 }
-                const bool e442 = resize > 0;
-                if(e442) {
+                const bool e413 = resize > 0;
+                if(e413) {
                     fprintf(stdout, "Resize neighborlist_capacity\n");
                     fflush(stdout);
-                    const int e443 = resize * 2;
-                    neighborlist_capacity = e443;
+                    const int e414 = resize * 2;
+                    neighborlist_capacity = e414;
                     neighborlists = (int *) realloc(neighborlists, (sizeof(int) * (particle_capacity * neighborlist_capacity)));
                 }
             }
         }
-        pairs::copy_to_device(force)
+        //pairs::copy_to_device(force)
         for(int i13 = 0; i13 < nlocal; i13++) {
-            const int e446 = i13 * 3;
-            const double p73_0 = force[e446];
-            const int e448 = i13 * 3;
-            const int e449 = e448 + 1;
-            const double p73_1 = force[e449];
-            const int e450 = i13 * 3;
-            const int e451 = e450 + 2;
-            const double p73_2 = force[e451];
-            force[e446] = 0.0;
-            force[e449] = 0.0;
-            force[e451] = 0.0;
+            const int e417 = i13 * 3;
+            const double p69_0 = force[e417];
+            const int e419 = i13 * 3;
+            const int e420 = e419 + 1;
+            const double p69_1 = force[e420];
+            const int e421 = i13 * 3;
+            const int e422 = e421 + 2;
+            const double p69_2 = force[e422];
+            force[e417] = 0.0;
+            force[e420] = 0.0;
+            force[e422] = 0.0;
         }
-        const int e460 = i14 + 1;
-        for(int i0 = 0; i0 < nlocal; i0++) {
-            const int e1 = i0 * neighborlist_capacity;
-            const int e47 = i0 * 3;
-            const double p0_0 = position[e47];
-            const int e55 = i0 * 3;
-            const int e56 = e55 + 1;
-            const double p0_1 = position[e56];
-            const int e63 = i0 * 3;
-            const int e64 = e63 + 2;
-            const double p0_2 = position[e64];
-            const int e51 = i0 * 3;
-            const int e59 = i0 * 3;
-            const int e60 = e59 + 1;
-            const int e67 = i0 * 3;
-            const int e68 = e67 + 2;
-            const int a6 = numneighs[i0];
-            for(int i1 = 0; i1 < a6; i1++) {
-                const int e2 = e1 + i1;
-                const int a7 = neighborlists[e2];
-                const int e49 = a7 * 3;
-                const double p1_0 = position[e49];
-                const int e57 = a7 * 3;
-                const int e58 = e57 + 1;
-                const double p1_1 = position[e58];
-                const int e65 = a7 * 3;
-                const int e66 = e65 + 2;
-                const double p1_2 = position[e66];
-                const double e3_0 = p0_0 - p1_0;
-                const double e3_1 = p0_1 - p1_1;
-                const double e3_2 = p0_2 - p1_2;
-                const double e12 = e3_0 * e3_0;
-                const double e21 = e3_1 * e3_1;
-                const double e22 = e12 + e21;
-                const double e31 = e3_2 * e3_2;
-                const double e32 = e22 + e31;
-                const bool e33 = e32 < 2.5;
-                if(e33) {
-                    const double e34 = 1.0 / e32;
-                    const double e35 = e34 * e34;
-                    const double e36 = e35 * e34;
-                    const double p2_0 = force[e51];
-                    const double p2_1 = force[e60];
-                    const double p2_2 = force[e68];
-                    const double e40 = e36 - 0.5;
-                    const double e507 = 48.0 * e36;
-                    const double e508 = e507 * e40;
-                    const double e509 = e508 * e34;
-                    const double e43_0 = e3_0 * e509;
-                    const double e43_1 = e3_1 * e509;
-                    const double e43_2 = e3_2 * e509;
-                    const double e44_0 = p2_0 + e43_0;
-                    const double e44_1 = p2_1 + e43_1;
-                    const double e44_2 = p2_2 + e43_2;
-                    force[e51] = e44_0;
-                    force[e60] = e44_1;
-                    force[e68] = e44_2;
+        for(int i14 = 0; i14 < nlocal; i14++) {
+            const int e423 = i14 * neighborlist_capacity;
+            const int e430 = i14 * 3;
+            const double p70_0 = position[e430];
+            const int e439 = i14 * 3;
+            const int e440 = e439 + 1;
+            const double p70_1 = position[e440];
+            const int e449 = i14 * 3;
+            const int e450 = e449 + 2;
+            const double p70_2 = position[e450];
+            const int e14 = i14 * 3;
+            const int e18 = i14 * 3;
+            const int e19 = e18 + 1;
+            const int e22 = i14 * 3;
+            const int e23 = e22 + 2;
+            const int a56 = numneighs[i14];
+            for(int i15 = 0; i15 < a56; i15++) {
+                const int e424 = e423 + i15;
+                const int a57 = neighborlists[e424];
+                const int e432 = a57 * 3;
+                const double p71_0 = position[e432];
+                const int e441 = a57 * 3;
+                const int e442 = e441 + 1;
+                const double p71_1 = position[e442];
+                const int e451 = a57 * 3;
+                const int e452 = e451 + 2;
+                const double p71_2 = position[e452];
+                const double e425_0 = p70_0 - p71_0;
+                const double e425_1 = p70_1 - p71_1;
+                const double e425_2 = p70_2 - p71_2;
+                const double e434 = e425_0 * e425_0;
+                const double e443 = e425_1 * e425_1;
+                const double e444 = e434 + e443;
+                const double e453 = e425_2 * e425_2;
+                const double e454 = e444 + e453;
+                const bool e455 = e454 < 2.5;
+                if(e455) {
+                    const double e1 = 1.0 / e454;
+                    const double e2 = e1 * e1;
+                    const double e3 = e2 * e1;
+                    const double p0_0 = force[e14];
+                    const double p0_1 = force[e19];
+                    const double p0_2 = force[e23];
+                    const double e7 = e3 - 0.5;
+                    const double e495 = 48.0 * e3;
+                    const double e496 = e495 * e7;
+                    const double e497 = e496 * e1;
+                    const double e10_0 = e425_0 * e497;
+                    const double e10_1 = e425_1 * e497;
+                    const double e10_2 = e425_2 * e497;
+                    const double e11_0 = p0_0 + e10_0;
+                    const double e11_1 = p0_1 + e10_1;
+                    const double e11_2 = p0_2 + e10_2;
+                    force[e14] = e11_0;
+                    force[e19] = e11_1;
+                    force[e23] = e11_2;
                 }
             }
         }
-        pairs::copy_to_device(velocity)
-        pairs::copy_to_device(mass)
-        for(int i2 = 0; i2 < nlocal; i2++) {
-            const int e76 = i2 * 3;
-            const double p3_0 = velocity[e76];
-            const int e82 = i2 * 3;
-            const int e83 = e82 + 1;
-            const double p3_1 = velocity[e83];
-            const int e88 = i2 * 3;
-            const int e89 = e88 + 2;
-            const double p3_2 = velocity[e89];
-            const int e74 = i2 * 3;
-            const double p4_0 = force[e74];
-            const int e80 = i2 * 3;
-            const int e81 = e80 + 1;
-            const double p4_1 = force[e81];
-            const int e86 = i2 * 3;
-            const int e87 = e86 + 2;
-            const double p4_2 = force[e87];
-            const double e69_0 = 0.005 * p4_0;
-            const double e69_1 = 0.005 * p4_1;
-            const double e69_2 = 0.005 * p4_2;
-            const double p5 = mass[i2];
-            const double e70_0 = e69_0 / p5;
-            const double e70_1 = e69_1 / p5;
-            const double e70_2 = e69_2 / p5;
-            const double e71_0 = p3_0 + e70_0;
-            const double e71_1 = p3_1 + e70_1;
-            const double e71_2 = p3_2 + e70_2;
-            velocity[e76] = e71_0;
-            velocity[e83] = e71_1;
-            velocity[e89] = e71_2;
-            const int e96 = i2 * 3;
-            const double p6_0 = position[e96];
-            const int e102 = i2 * 3;
-            const int e103 = e102 + 1;
-            const double p6_1 = position[e103];
-            const int e108 = i2 * 3;
-            const int e109 = e108 + 2;
-            const double p6_2 = position[e109];
-            const int e94 = i2 * 3;
-            const double p7_0 = velocity[e94];
-            const int e100 = i2 * 3;
-            const int e101 = e100 + 1;
-            const double p7_1 = velocity[e101];
-            const int e106 = i2 * 3;
-            const int e107 = e106 + 2;
-            const double p7_2 = velocity[e107];
-            const double e90_0 = 0.005 * p7_0;
-            const double e90_1 = 0.005 * p7_1;
-            const double e90_2 = 0.005 * p7_2;
-            const double e91_0 = p6_0 + e90_0;
-            const double e91_1 = p6_1 + e90_1;
-            const double e91_2 = p6_2 + e90_2;
-            position[e96] = e91_0;
-            position[e103] = e91_1;
-            position[e109] = e91_2;
+        //pairs::copy_to_device(velocity)
+        //pairs::copy_to_device(mass)
+        for(int i0 = 0; i0 < nlocal; i0++) {
+            const int e31 = i0 * 3;
+            const double p1_0 = velocity[e31];
+            const int e37 = i0 * 3;
+            const int e38 = e37 + 1;
+            const double p1_1 = velocity[e38];
+            const int e43 = i0 * 3;
+            const int e44 = e43 + 2;
+            const double p1_2 = velocity[e44];
+            const int e29 = i0 * 3;
+            const double p2_0 = force[e29];
+            const int e35 = i0 * 3;
+            const int e36 = e35 + 1;
+            const double p2_1 = force[e36];
+            const int e41 = i0 * 3;
+            const int e42 = e41 + 2;
+            const double p2_2 = force[e42];
+            const double e24_0 = 0.005 * p2_0;
+            const double e24_1 = 0.005 * p2_1;
+            const double e24_2 = 0.005 * p2_2;
+            const double p3 = mass[i0];
+            const double e25_0 = e24_0 / p3;
+            const double e25_1 = e24_1 / p3;
+            const double e25_2 = e24_2 / p3;
+            const double e26_0 = p1_0 + e25_0;
+            const double e26_1 = p1_1 + e25_1;
+            const double e26_2 = p1_2 + e25_2;
+            velocity[e31] = e26_0;
+            velocity[e38] = e26_1;
+            velocity[e44] = e26_2;
+            const int e51 = i0 * 3;
+            const double p4_0 = position[e51];
+            const int e57 = i0 * 3;
+            const int e58 = e57 + 1;
+            const double p4_1 = position[e58];
+            const int e63 = i0 * 3;
+            const int e64 = e63 + 2;
+            const double p4_2 = position[e64];
+            const int e49 = i0 * 3;
+            const double p5_0 = velocity[e49];
+            const int e55 = i0 * 3;
+            const int e56 = e55 + 1;
+            const double p5_1 = velocity[e56];
+            const int e61 = i0 * 3;
+            const int e62 = e61 + 2;
+            const double p5_2 = velocity[e62];
+            const double e45_0 = 0.005 * p5_0;
+            const double e45_1 = 0.005 * p5_1;
+            const double e45_2 = 0.005 * p5_2;
+            const double e46_0 = p4_0 + e45_0;
+            const double e46_1 = p4_1 + e45_1;
+            const double e46_2 = p4_2 + e45_2;
+            position[e51] = e46_0;
+            position[e58] = e46_1;
+            position[e64] = e46_2;
         }
-        const int e461 = nlocal + npbc;
-        pairs::vtk_write_data(ps, "output/test_local", 0, nlocal, e460);
-        pairs::vtk_write_data(ps, "output/test_pbc", nlocal, e461, e460);
+        const int e73 = i1 + 1;
+        const int e456 = nlocal + npbc;
+        pairs::vtk_write_data(ps, "output/test_local", 0, nlocal, e73);
+        pairs::vtk_write_data(ps, "output/test_pbc", nlocal, e456, e73);
     }
 }
diff --git a/src/pairs/coupling/parse_cpp.py b/src/pairs/coupling/parse_cpp.py
index 8c94702a2e8140f32c02a012258eaa072355d946..1659115392a89f6b5c12306f5442bed7be3fb24f 100644
--- a/src/pairs/coupling/parse_cpp.py
+++ b/src/pairs/coupling/parse_cpp.py
@@ -5,6 +5,7 @@ from pairs.ast.branches import Branch
 from pairs.ast.data_types import Type_Float, Type_Vector
 from pairs.ast.math import Sqrt
 from pairs.ast.select import Select
+from pairs.sim.interaction import ParticleInteraction
 
 
 def print_tree(node, indent=0):
@@ -76,7 +77,7 @@ def getVelocityAtWFPoint(sim, params):
     wf_pt = params[2]
     lin_vel = sim.property('velocity')
     ang_vel = sim.property('angular_velocity')
-    position = sim.property('position')
+    position = sim.position()
     return lin_vel[p_idx] + ang_vel[p_idx] * (wf_pt - position[p_idx])
 
 
@@ -87,7 +88,7 @@ def addForceAtWFPosAtomic(sim, params):
     wf_pt = params[3]
     force = sim.property('force')
     torque = sim.property('torque')
-    position = sim.property('position')
+    position = sim.position()
     force[p_idx].add(f)
     torque[p_idx].add((wf_pt - position[p_idx]) * f)
 
@@ -150,7 +151,9 @@ def map_kernel_to_simulation(sim, node):
     contactNormal = sim.add_var('contactNormal', Type_Vector)
     penetrationDepth = sim.add_var('penetrationDepth', Type_Float)
 
-    for i, j in sim.particle_pairs():
+    self.clear_block()
+    pairs = ParticleInteraction(sim, 2)
+    for i, j in pairs:
         return map_method_tree(sim, node, {
             'element_mappings': {
                 'p_idx1': i,
@@ -173,6 +176,8 @@ def map_kernel_to_simulation(sim, node):
             }
         })
 
+    self.build_kernel_block_with_statements()
+
 
 def map_method_tree(sim, node, assignments={}, mappings={}):
     if node is not None:
diff --git a/src/pairs/ir/branches.py b/src/pairs/ir/branches.py
index 93962ada8da15565684d5bc7ac43d1c1c1193f50..75bbfe7f8afe166ed7ec525f50b30931504bbfa1 100644
--- a/src/pairs/ir/branches.py
+++ b/src/pairs/ir/branches.py
@@ -38,8 +38,8 @@ class Branch(ASTNode):
 
 
 class Filter(Branch):
-    def __init__(self, sim, cond):
-        super().__init__(sim, cond, True)
+    def __init__(self, sim, cond, block=None):
+        super().__init__(sim, cond, True, block)
 
     def __iter__(self):
         self.sim.add_statement(self)
diff --git a/src/pairs/ir/loops.py b/src/pairs/ir/loops.py
index 40d73d228fee13ef80286e14cbd7e24a6637cf7c..9f187393a1c3b7cda0fc761be64a1739cd85e2af 100644
--- a/src/pairs/ir/loops.py
+++ b/src/pairs/ir/loops.py
@@ -99,29 +99,3 @@ class While(ASTNode):
 
     def children(self):
         return [self.cond, self.block]
-
-
-class NeighborFor():
-    def __init__(self, sim, particle, cell_lists, neighbor_lists=None):
-        self.sim = sim
-        self.particle = particle
-        self.cell_lists = cell_lists
-        self.neighbor_lists = neighbor_lists
-
-    def __str__(self):
-        return f"NeighborFor<particle: {self.particle}>"
-
-    def __iter__(self):
-        if self.neighbor_lists is None:
-            cl = self.cell_lists
-            for s in For(self.sim, 0, cl.nstencil):
-                neigh_cell = cl.particle_cell[self.particle] + cl.stencil[s]
-                for _ in Filter(self.sim, BinOp.and_op(neigh_cell >= 0, neigh_cell <= cl.ncells)):
-                    for nc in For(self.sim, 0, cl.cell_sizes[neigh_cell]):
-                        it = cl.cell_particles[neigh_cell][nc]
-                        for _ in Filter(self.sim, BinOp.neq(it, self.particle)):
-                                yield it
-        else:
-            neighbor_lists = self.neighbor_lists
-            for k in For(self.sim, 0, neighbor_lists.numneighs[self.particle]):
-                yield neighbor_lists.neighborlists[self.particle][k]
diff --git a/src/pairs/ir/symbols.py b/src/pairs/ir/symbols.py
new file mode 100644
index 0000000000000000000000000000000000000000..08ee01d0ba7470dc090d3d056261ee2f0e77d031
--- /dev/null
+++ b/src/pairs/ir/symbols.py
@@ -0,0 +1,19 @@
+from pairs.ir.ast_node import ASTNode
+from pairs.ir.assign import Assign
+from pairs.ir.bin_op import ASTTerm 
+
+
+class Symbol(ASTTerm):
+    def __init__(self, sim, sym_type):
+        super().__init__(sim)
+        self.sym_type = sym_type
+        self.assign_to = None
+
+    def __str__(self):
+        return f"Symbol<type: {self.var_type}>"
+
+    def assign(self, node):
+        self.assign_to = node
+
+    def type(self):
+        return self.sym_type
diff --git a/src/pairs/ir/variables.py b/src/pairs/ir/variables.py
index 9f456e872ae91e517288f7e006e1bf067e65dd3d..102dc2d7a439dd34ff0f1704d7aae4bbe89e1d4f 100644
--- a/src/pairs/ir/variables.py
+++ b/src/pairs/ir/variables.py
@@ -24,6 +24,7 @@ class Variables:
 
         return None
 
+
 class Var(ASTTerm):
     def __init__(self, sim, var_name, var_type, init_value=0):
         super().__init__(sim)
diff --git a/src/pairs/mapping/funcs.py b/src/pairs/mapping/funcs.py
index 7b47ec66e54073f197a78b80edda14a0589e214e..57bb43c9f6f74df26be4c64fcbe480565ac0f961 100644
--- a/src/pairs/mapping/funcs.py
+++ b/src/pairs/mapping/funcs.py
@@ -2,6 +2,8 @@ import ast
 import inspect
 from pairs.ir.assign import Assign
 from pairs.ir.bin_op import BinOp
+from pairs.ir.loops import ParticleFor
+from pairs.sim.interaction import ParticleInteraction
 
 
 class UndefinedSymbol():
@@ -119,7 +121,7 @@ class BuildParticleIR(ast.NodeVisitor):
         return self.visit(node.value)[self.visit(node.slice)]
 
 
-def compute(sim, func, cutoff_radius=None, position=None, symbols={}):
+def compute(sim, func, cutoff_radius=None, symbols={}):
     src = inspect.getsource(func)
     tree = ast.parse(src, mode='exec')
     #print(ast.dump(ast.parse(src, mode='exec')))
@@ -132,16 +134,18 @@ def compute(sim, func, cutoff_radius=None, position=None, symbols={}):
 
     # Start building IR
     ir = BuildParticleIR(sim, symbols)
+    assert nparams > 0, "Number of parameters from compute functions must be higher than zero!"
 
+    sim.clear_block()
     if nparams == 1:
-        for i in sim.particles():
+        for i in ParticleFor(sim):
             ir.add_symbols({params[0]: i})
             ir.visit(tree)
 
-    elif nparams == 2:
-        for i, j, delta, rsq in sim.particle_pairs(cutoff_radius, sim.property(position)):
-            ir.add_symbols({params[0]: i, params[1]: j, 'delta': delta, 'rsq': rsq})
+    else:
+        pairs = ParticleInteraction(sim, nparams, cutoff_radius)
+        for i, j in pairs:
+            ir.add_symbols({params[0]: i, params[1]: j, 'delta': pairs.delta(), 'rsq': pairs.squared_distance()})
             ir.visit(tree)
 
-    else:
-        raise Exception(f"Invalid number of parameters: {nparams}")
+    sim.build_kernel_block_with_statements()
diff --git a/src/pairs/sim/cell_lists.py b/src/pairs/sim/cell_lists.py
index 1a36a04bde66ad4728151195fe288db878cfd4a6..df6f2dc4fcfd2218396b18cddb4d0b975efa1864 100644
--- a/src/pairs/sim/cell_lists.py
+++ b/src/pairs/sim/cell_lists.py
@@ -74,7 +74,7 @@ class CellListsBuild(Lowerable):
         sim = self.sim
         cl = self.cell_lists
         grid = sim.grid
-        positions = sim.property('position')
+        positions = sim.position()
 
         for resize in Resize(sim, cl.cell_capacity):
             for c in For(sim, 0, cl.ncells):
diff --git a/src/pairs/sim/interaction.py b/src/pairs/sim/interaction.py
new file mode 100644
index 0000000000000000000000000000000000000000..9658ee778e7e48f680663d61c53c90b0fd0b4eee
--- /dev/null
+++ b/src/pairs/sim/interaction.py
@@ -0,0 +1,81 @@
+from pairs.ir.bin_op import BinOp
+from pairs.ir.block import Block, pairs_block
+from pairs.ir.branches import Branch, Filter
+from pairs.ir.data_types import Type_Int, Type_Float, Type_Vector
+from pairs.ir.loops import For, ParticleFor
+from pairs.ir.utils import Print
+from pairs.sim.lowerable import Lowerable
+from pairs.sim.resize import Resize
+
+
+class NeighborFor():
+    def __init__(self, sim, particle, cell_lists, neighbor_lists=None):
+        self.sim = sim
+        self.particle = particle
+        self.cell_lists = cell_lists
+        self.neighbor_lists = neighbor_lists
+
+    def __str__(self):
+        return f"NeighborFor<particle: {self.particle}>"
+
+    def __iter__(self):
+        if self.neighbor_lists is None:
+            cl = self.cell_lists
+            for s in For(self.sim, 0, cl.nstencil):
+                neigh_cell = cl.particle_cell[self.particle] + cl.stencil[s]
+                for _ in Filter(self.sim, BinOp.and_op(neigh_cell >= 0, neigh_cell <= cl.ncells)):
+                    for nc in For(self.sim, 0, cl.cell_sizes[neigh_cell]):
+                        it = cl.cell_particles[neigh_cell][nc]
+                        for _ in Filter(self.sim, BinOp.neq(it, self.particle)):
+                                yield it
+        else:
+            neighbor_lists = self.neighbor_lists
+            for k in For(self.sim, 0, neighbor_lists.numneighs[self.particle]):
+                yield neighbor_lists.neighborlists[self.particle][k]
+
+
+class ParticleInteraction(Lowerable):
+    def __init__(self, sim, nbody, cutoff_radius, block=None, bypass_neighbor_lists=False):
+        super().__init__(sim)
+        self.nbody = nbody
+        self.cutoff_radius = cutoff_radius
+        self.bypass_neighbor_lists = bypass_neighbor_lists
+        self.i = sim.add_symbol(Type_Int)
+        self.j = sim.add_symbol(Type_Int)
+        self.dp = sim.add_symbol(Type_Vector)
+        self.rsq = sim.add_symbol(Type_Float)
+        self.block = Block(sim, []) if block is None else block
+
+    def delta(self):
+        return self.dp
+
+    def squared_distance(self):
+        return self.rsq
+
+    def add_statement(self, stmt):
+        self.block.add_statement(stmt)
+
+    def __iter__(self):
+        self.sim.add_statement(self)
+        self.sim.enter_scope(self)
+        yield self.i, self.j
+        self.sim.leave_scope()
+
+    @pairs_block
+    def lower(self):
+        if self.nbody == 2:
+            position = self.sim.position()
+            cell_lists = self.sim.cell_lists
+            neighbor_lists = None if self.bypass_neighbor_lists else self.sim.neighbor_lists
+            for i in ParticleFor(self.sim):
+                self.i.assign(i)
+                for j in NeighborFor(self.sim, i, cell_lists, neighbor_lists):
+                    dp = position[i] - position[j]
+                    rsq = dp.x() * dp.x() + dp.y() * dp.y() + dp.z() * dp.z()
+                    self.j.assign(j)
+                    self.dp.assign(dp)
+                    self.rsq.assign(rsq)
+                    self.sim.add_statement(Filter(self.sim, rsq < self.cutoff_radius, self.block))
+
+        else:
+            raise Exception("Interactions among more than two particles is currently not implemented!")
diff --git a/src/pairs/sim/neighbor_lists.py b/src/pairs/sim/neighbor_lists.py
index 798a243a22f33c7cc4c7f1208077299466ca24ce..d55a1122786a53ef9f9b907cb0144dcb3d3cc3e1 100644
--- a/src/pairs/sim/neighbor_lists.py
+++ b/src/pairs/sim/neighbor_lists.py
@@ -1,8 +1,9 @@
 from pairs.ir.block import pairs_device_block
 from pairs.ir.branches import Branch, Filter
 from pairs.ir.data_types import Type_Int
-from pairs.ir.loops import For, ParticleFor, NeighborFor
+from pairs.ir.loops import ParticleFor
 from pairs.ir.utils import Print
+from pairs.sim.interaction import ParticleInteraction
 from pairs.sim.lowerable import Lowerable
 from pairs.sim.resize import Resize
 
@@ -27,20 +28,18 @@ class NeighborListsBuild(Lowerable):
         neighbor_lists = self.neighbor_lists
         cell_lists = neighbor_lists.cell_lists
         cutoff_radius = cell_lists.cutoff_radius
-        position = sim.property('position')
+        position = sim.position()
 
         for resize in Resize(sim, neighbor_lists.capacity):
             for i in ParticleFor(sim):
                 neighbor_lists.numneighs[i].set(0)
-                for j in NeighborFor(sim, i, cell_lists):
-                    # TODO: find a way to not repeat this (already present in particle_pairs)
-                    dp = position[i] - position[j]
-                    rsq = dp.x() * dp.x() + dp.y() * dp.y() + dp.z() * dp.z()
-                    for _ in Filter(sim, rsq < cutoff_radius):
-                        numneighs = neighbor_lists.numneighs[i]
-                        for cond in Branch(sim, numneighs >= neighbor_lists.capacity):
-                            if cond:
-                                resize.set(numneighs)
-                            else:
-                                neighbor_lists.neighborlists[i][numneighs].set(j)
-                                neighbor_lists.numneighs[i].set(numneighs + 1)
+
+            pairs = ParticleInteraction(sim, 2, cutoff_radius, bypass_neighbor_lists=True)
+            for i, j in pairs:
+                numneighs = neighbor_lists.numneighs[i]
+                for cond in Branch(sim, numneighs >= neighbor_lists.capacity):
+                    if cond:
+                        resize.set(numneighs)
+                    else:
+                        neighbor_lists.neighborlists[i][numneighs].set(j)
+                        neighbor_lists.numneighs[i].set(numneighs + 1)
diff --git a/src/pairs/sim/pbc.py b/src/pairs/sim/pbc.py
index 1a5d4809423800fb670e635924d23de8318549ae..87b8aadb34007759fe3465691e7f44daa97d19a1 100644
--- a/src/pairs/sim/pbc.py
+++ b/src/pairs/sim/pbc.py
@@ -33,7 +33,7 @@ class UpdatePBC(Lowerable):
         npbc = self.pbc.npbc
         pbc_map = self.pbc.pbc_map
         pbc_mult = self.pbc.pbc_mult
-        positions = self.pbc.sim.property('position')
+        positions = self.pbc.sim.position()
         nlocal = self.pbc.sim.nlocal
 
         for i in For(sim, 0, npbc):
@@ -53,7 +53,7 @@ class EnforcePBC(Lowerable):
         sim = self.sim
         ndims = sim.ndims()
         grid = self.pbc.grid
-        positions = sim.property('position')
+        positions = sim.position()
 
         for i in ParticleFor(sim):
             # TODO: VecFilter?
@@ -80,7 +80,7 @@ class SetupPBC(Lowerable):
         pbc_capacity = self.pbc.pbc_capacity
         pbc_map = self.pbc.pbc_map
         pbc_mult = self.pbc.pbc_mult
-        positions = self.pbc.sim.property('position')
+        positions = self.pbc.sim.position()
         nlocal = self.pbc.sim.nlocal
 
         for resize in Resize(sim, pbc_capacity):
diff --git a/src/pairs/sim/simulation.py b/src/pairs/sim/simulation.py
index f8c34613a9b28f4f4114b27748e06e16e245cb42..db46e6a7ed545e76a255ecc4c40b6f3e58d11cfb 100644
--- a/src/pairs/sim/simulation.py
+++ b/src/pairs/sim/simulation.py
@@ -3,8 +3,8 @@ from pairs.ir.block import Block, KernelBlock
 from pairs.ir.branches import Filter
 from pairs.ir.data_types import Type_Int, Type_Float, Type_Vector
 from pairs.ir.layouts import Layout_AoS
-from pairs.ir.loops import ParticleFor, NeighborFor
 from pairs.ir.properties import Properties
+from pairs.ir.symbols import Symbol
 from pairs.ir.variables import Variables
 from pairs.graph.graphviz import ASTGraph
 from pairs.mapping.funcs import compute
@@ -26,6 +26,7 @@ from pairs.transformations.simplify import simplify_expressions
 from pairs.transformations.LICM import move_loop_invariant_code
 from pairs.transformations.lower import lower_everything
 from pairs.transformations.merge_adjacent_blocks import merge_adjacent_blocks
+from pairs.transformations.replace_symbols import replace_symbols
 
 
 class Simulation:
@@ -33,6 +34,7 @@ class Simulation:
         self.code_gen = code_gen
         self.code_gen.assign_simulation(self)
         self.global_scope = None
+        self.position_prop = None
         self.properties = Properties(self)
         self.vars = Variables(self)
         self.arrays = Arrays(self)
@@ -54,6 +56,7 @@ class Simulation:
         self.ntimesteps = timesteps
         self.expr_id = 0
         self.iter_id = 0
+        self.temp_id = 1000
         self.vtk_file = None
         self.nparticles = self.nlocal + self.nghost
         self.properties.add_capacity(self.particle_capacity)
@@ -65,6 +68,11 @@ class Simulation:
         assert self.property(prop_name) is None, f"Property already defined: {prop_name}"
         return self.properties.add(prop_name, Type_Float, value, vol)
 
+    def add_position(self, prop_name, value=[0.0, 0.0, 0.0], vol=False, layout=Layout_AoS):
+        assert self.property(prop_name) is None, f"Property already defined: {prop_name}"
+        self.position_prop = self.properties.add(prop_name, Type_Vector, value, vol, layout)
+        return self.position_prop
+
     def add_vector_property(self, prop_name, value=[0.0, 0.0, 0.0], vol=False, layout=Layout_AoS):
         assert self.property(prop_name) is None, f"Property already defined: {prop_name}"
         return self.properties.add(prop_name, Type_Vector, value, vol, layout)
@@ -72,6 +80,9 @@ class Simulation:
     def property(self, prop_name):
         return self.properties.find(prop_name)
 
+    def position(self):
+        return self.position_prop
+
     def add_array(self, arr_name, arr_sizes, arr_type, arr_layout=Layout_AoS):
         assert self.array(arr_name) is None, f"Array already defined: {arr_name}"
         return self.arrays.add(arr_name, arr_sizes, arr_type, arr_layout)
@@ -95,6 +106,15 @@ class Simulation:
 
         return self.vars.add(var_name, var_type, init_value)
 
+    def add_symbol(self, sym_type):
+        return Symbol(self, sym_type)
+
+    def add_temporary_vector(self):
+        return self.vars.add(f"tmp{self.temp_id}", Type_Vector)
+
+    def add_temporary_real(self):
+        return self.vars.add(f"tmp{self.temp_id}", Type_Float)
+
     def var(self, var_name):
         return self.vars.find(var_name)
 
@@ -107,7 +127,7 @@ class Simulation:
         return self.grid
 
     def create_particle_lattice(self, grid, spacing, props={}):
-        positions = self.property('position')
+        positions = self.position()
         lattice = ParticleLattice(self, grid, spacing, props, positions)
         self.setups.add_statement(lattice)
 
@@ -130,34 +150,15 @@ class Simulation:
         self.properties.add_capacity(self.pbc.pbc_capacity)
         return self.pbc
 
-    def compute(self, sim, func, cutoff_radius=None, position=None, symbols={}):
-        return compute(sim, func, cutoff_radius, position, symbols)
-
-    def particle_pairs(self, cutoff_radius=None, position=None):
-        self.clear_block()
-        for i in ParticleFor(self):
-            for j in NeighborFor(self, i, self.cell_lists, self.neighbor_lists):
-                if cutoff_radius is not None and position is not None:
-                    dp = position[i] - position[j]
-                    rsq = dp.x() * dp.x() + dp.y() * dp.y() + dp.z() * dp.z()
-                    for _ in Filter(self, rsq < cutoff_radius):
-                        yield i, j, dp, rsq
-
-                else:
-                    yield i, j
-
-        self.kernels.add_statement(KernelBlock(self, self.block))
-
-    def particles(self):
-        self.clear_block()
-        for i in ParticleFor(self):
-            yield i
-
-        self.kernels.add_statement(KernelBlock(self, self.block))
+    def compute(self, func, cutoff_radius=None, symbols={}):
+        return compute(self, func, cutoff_radius, symbols)
 
     def clear_block(self):
         self.block = Block(self, [])
 
+    def build_kernel_block_with_statements(self):
+        self.kernels.add_statement(KernelBlock(self, self.block))
+
     def add_statement(self, stmt):
         if not self.scope:
             self.block.add_statement(stmt)
@@ -216,6 +217,7 @@ class Simulation:
 
         # Transformations
         lower_everything(program)
+        replace_symbols(program)
         merge_adjacent_blocks(program)
         prioritize_scalar_ops(program)
         simplify_expressions(program)
diff --git a/src/pairs/transformations/replace_symbols.py b/src/pairs/transformations/replace_symbols.py
new file mode 100644
index 0000000000000000000000000000000000000000..a23a5a26705504bddbfc8bed004809e2d62bd95e
--- /dev/null
+++ b/src/pairs/transformations/replace_symbols.py
@@ -0,0 +1,14 @@
+from pairs.ir.mutator import Mutator
+
+
+class ReplaceSymbols(Mutator):
+    def __init__(self, ast):
+        super().__init__(ast)
+
+    def mutate_Symbol(self, ast_node):
+        return ast_node.assign_to
+
+
+def replace_symbols(ast):
+    replace = ReplaceSymbols(ast)
+    replace.mutate()