A parallel adaptive fast multipole method