`sd->dPdu`, `sd->dPdv`, `sd->du` and `sd->dv` are computed from `sd->dP` by constructing a local frame, so both results are the same, subject to some numerical differences. This avoids constructing the local frame again, so might be faster.