Yes `dX/dp` is simply the jacobian of the `ModelInstance`. Remember that after `PDM` was pulled in this family of objects are capable of producing their own `Jacobians` (in their global versions (`OrthoPDM` and `GlobalPDM`) the `Jacobian` of the global transform is automatically chained) so no need to worry, the call to `dX_dp = self.pdm.d_dp` seems correct to me.