// MapReduce

num_reduces = 10;

map_inputs = [http('http://www.mrry.co.uk/input00'),
              http('http://www.mrry.co.uk/input01'),
              http('http://www.mrry.co.uk/input02'),
              ...,
              http('http://www.mrry.co.uk/input80')];
              
function map_reduce(map_inputs, num_reduces, map, reduce) { 
	 
	map_outputs = [map(m, num_reduces) for m in map_inputs];
	// or
	map_outputs = []
	for i in range(len(map_inputs))
		map_outputs[i] = map(map_inputs[i], num_reduces)
	
	reduce_inputs = [[map_outputs[i][j] for j in len(map_outputs[i])] for i in len(map_inputs)];
	// or
	reduce_inputs = [];
	for i in range(num_reduces) {
		reduce_inputs[i] = [];
		for j in range(len(map_inputs))
			reduce_inputs[i][j] = map_outputs[j][i];
	}
	
	reduce_outputs = [reduce(r) for r in reduce_inputs];
	// or
	reduce_outputs = [];
	for r in reduce_inputs
		reduce_outputs[i] = reduce(r);
		
}

// Halo-swap

grid_x = 10;
grid_y = 10;

input_data = file('/home/initial_climate_settings');

init_data = partition_data(input_data, grid_x, grid_y);

next_iter = []
n_halo = []
s_halo = []
e_halo = []
w_halo = []

for i in range(grid_x) {
	curr_iter[i] = [];
	for j in range(grid_y) {
		curr_iter[i][j] = compute_first(init_data[i][j]); 
	}
}

do {
	next_iter = [];
	for i in range(grid_x) {
		next_iter[i] = []
		for j in range(grid_y) {
			next_iter[i][j] = compute(curr_iter[i][j].data,
									  curr_iter[i_left][j].e_halo,
									  ...);	
		}
	}
	should_term = summarise(next_iter);
} while (!*should_term);