digraph task_dep {
	 # Header
	 compound=true;
	 ratio=1.41;
	 node[nodesep=0.15, fontsize=30, penwidth=3.];
	 edge[fontsize=0, penwidth=0.5];
	 ranksep=0.8;

	 # Special tasks
	 sort[color=blue3];
	 self_density[color=blue3];
	 self_gradient[color=blue3];
	 self_force[color=blue3];
	 self_stars_density[color=darkorange1];
	 pair_density[color=blue3];
	 pair_gradient[color=blue3];
	 pair_force[color=blue3];
	 pair_limiter[color=black];
	 pair_stars_density[color=darkorange1];
	 sub_self_density[color=blue3];
	 sub_self_gradient[color=blue3];
	 sub_self_force[color=blue3];
	 sub_self_limiter[color=black];
	 sub_self_stars_density[color=darkorange1];
	 sub_pair_density[color=blue3];
	 sub_pair_gradient[color=blue3];
	 sub_pair_force[color=blue3];
	 sub_pair_limiter[color=black];
	 sub_pair_stars_density[color=darkorange1];
	 ghost_in[style=filled,fillcolor=grey90,color=blue3];
	 ghost[color=blue3];
	 ghost_out[style=filled,fillcolor=grey90,color=blue3];
	 extra_ghost[color=blue3];
	 drift_part[color=blue3];
	 end_hydro_force[color=blue3];
	 send_gradient[shape=diamond,style=filled,fillcolor=azure,color=blue3];
	 send_xv[shape=diamond,style=filled,fillcolor=azure,color=blue3];
	 send_rho[shape=diamond,style=filled,fillcolor=azure,color=blue3];
	 recv_gradient[shape=diamond,style=filled,fillcolor=azure,color=blue3];
	 recv_tend_part[shape=diamond,style=filled,fillcolor=azure,color=blue3];
	 recv_xv[shape=diamond,style=filled,fillcolor=azure,color=blue3];
	 recv_rho[shape=diamond,style=filled,fillcolor=azure,color=blue3];
	 cooling_in[style=filled,fillcolor=grey90,color=blue3];
	 
	 # Clusters
	 subgraph clusterDensity {
		 label="";
		 bgcolor="grey99";
		 pair_density;
		 self_density;
		 sub_pair_density;
		 sub_self_density;
	 };

	 subgraph clusterForce {
		 label="";
		 bgcolor="grey99";
		 pair_force;
		 self_force;
		 sub_pair_force;
		 sub_self_force;
	 };

	 subgraph clusterGradient {
		 label="";
		 bgcolor="grey99";
		 pair_gradient;
		 self_gradient;
		 sub_pair_gradient;
		 sub_self_gradient;
	 };

	 subgraph clusterStarsDensity {
		 label="";
		 bgcolor="grey99";
		 pair_stars_density;
		 self_stars_density;
		 sub_pair_stars_density;
		 sub_self_stars_density;
	 };

	 subgraph clusterTimestep_limiter {
		 label="";
		 bgcolor="grey99";
		 pair_limiter;
		 self_limiter;
		 sub_pair_limiter;
		 sub_self_limiter;
	 };


	 # Dependencies
	 sort->pair_density[fontcolor=blue3,color=blue3]
	 sort->pair_stars_density[fontcolor=blue3,color=blue3]
	 sort->recv_rho[fontcolor=blue3,color=blue3]
	 sort->sub_self_density[fontcolor=blue3,color=blue3]
	 sort->sub_self_stars_density[fontcolor=blue3,color=blue3]
	 sort->sub_pair_density[fontcolor=blue3,color=blue3]
	 sort->sub_pair_stars_density[fontcolor=blue3,color=blue3]
	 self_density->ghost_in[fontcolor=blue3,color=blue3]
	 self_gradient->extra_ghost[fontcolor=blue3,color=blue3]
	 self_force->end_hydro_force[fontcolor=blue3,color=blue3]
	 pair_density->ghost_in[fontcolor=blue3,color=blue3]
	 pair_density->recv_rho[fontcolor=blue3,color=blue3]
	 pair_gradient->extra_ghost[fontcolor=blue3,color=blue3]
	 pair_gradient->recv_gradient[fontcolor=blue3,color=blue3]
	 pair_force->end_hydro_force[fontcolor=blue3,color=blue3]
	 pair_force->recv_tend_part[fontcolor=blue3,color=blue3]
	 sub_self_density->ghost_in[fontcolor=blue3,color=blue3]
	 sub_self_gradient->extra_ghost[fontcolor=blue3,color=blue3]
	 sub_self_force->end_hydro_force[fontcolor=blue3,color=blue3]
	 sub_pair_density->ghost_in[fontcolor=blue3,color=blue3]
	 sub_pair_density->recv_rho[fontcolor=blue3,color=blue3]
	 sub_pair_gradient->extra_ghost[fontcolor=blue3,color=blue3]
	 sub_pair_gradient->recv_gradient[fontcolor=blue3,color=blue3]
	 sub_pair_force->end_hydro_force[fontcolor=blue3,color=blue3]
	 sub_pair_force->recv_tend_part[fontcolor=blue3,color=blue3]
	 ghost_in->ghost[fontcolor=blue3,color=blue3]
	 ghost->ghost_out[fontcolor=blue3,color=blue3]
	 ghost_out->self_gradient[fontcolor=blue3,color=blue3]
	 ghost_out->pair_gradient[fontcolor=blue3,color=blue3]
	 ghost_out->send_rho[fontcolor=blue3,color=blue3]
	 ghost_out->sub_self_gradient[fontcolor=blue3,color=blue3]
	 ghost_out->sub_pair_gradient[fontcolor=blue3,color=blue3]
	 extra_ghost->self_force[fontcolor=blue3,color=blue3]
	 extra_ghost->pair_force[fontcolor=blue3,color=blue3]
	 extra_ghost->send_gradient[fontcolor=blue3,color=blue3]
	 extra_ghost->sub_self_force[fontcolor=blue3,color=blue3]
	 extra_ghost->sub_pair_force[fontcolor=blue3,color=blue3]
	 drift_part->self_density[fontcolor=blue3,color=blue3]
	 drift_part->self_stars_density[fontcolor=blue3,color=blue3]
	 drift_part->self_limiter[fontcolor=blue3,color=blue3]
	 drift_part->pair_density[fontcolor=blue3,color=blue3]
	 drift_part->pair_stars_density[fontcolor=blue3,color=blue3]
	 drift_part->pair_limiter[fontcolor=blue3,color=blue3]
	 drift_part->sort[fontcolor=blue3,color=blue3]
	 drift_part->send_rho[fontcolor=blue3,color=blue3]
	 drift_part->send_xv[fontcolor=blue3,color=blue3]
	 drift_part->sub_self_density[fontcolor=blue3,color=blue3]
	 drift_part->sub_self_stars_density[fontcolor=blue3,color=blue3]
	 drift_part->sub_self_limiter[fontcolor=blue3,color=blue3]
	 drift_part->sub_pair_density[fontcolor=blue3,color=blue3]
	 drift_part->sub_pair_stars_density[fontcolor=blue3,color=blue3]
	 drift_part->sub_pair_limiter[fontcolor=blue3,color=blue3]
	 end_hydro_force->cooling_in[fontcolor=blue3,color=blue3]
	 send_gradient->end_hydro_force[fontcolor=blue3,color=blue3]
	 send_xv->ghost_in[fontcolor=blue3,color=blue3]
	 send_rho->extra_ghost[fontcolor=blue3,color=blue3]
	 recv_gradient->pair_force[fontcolor=blue3,color=blue3]
	 recv_gradient->sub_pair_force[fontcolor=blue3,color=blue3]
	 recv_xv->sort[fontcolor=blue3,color=blue3]
	 recv_xv->pair_density[fontcolor=blue3,color=blue3]
	 recv_xv->sub_pair_density[fontcolor=blue3,color=blue3]
	 recv_rho->pair_gradient[fontcolor=blue3,color=blue3]
	 recv_rho->pair_stars_density[fontcolor=blue3,color=blue3]
	 recv_rho->sub_pair_gradient[fontcolor=blue3,color=blue3]
	 recv_rho->sub_pair_stars_density[fontcolor=blue3,color=blue3]
}