An anisotropic unstructured triangular adaptive mesh algorithm based on error and error gradient information