* @brief Transform the position vectors from cartesian to oblate coordinates * * @param vel * @param pos * @return af::array */
| 275 | * @return af::array |
| 276 | */ |
| 277 | af::array cart_to_oblate_position(const af::array& pos) { |
| 278 | if (pos.dims()[0] != 3) |
| 279 | throw make_error("Arrays must have 3 principal coordintes"); |
| 280 | |
| 281 | af::array x = pos(0, af::span); |
| 282 | af::array y = pos(1, af::span); |
| 283 | af::array z = pos(2, af::span); |
| 284 | auto a = J / M; |
| 285 | auto diff = x * x + y * y + z * z - a * a; |
| 286 | |
| 287 | af::array r = |
| 288 | af::sqrt((diff + af::sqrt(diff * diff + z * z * a * a * 4.0)) / 2.0); |
| 289 | af::array o = af::acos(z / r); |
| 290 | af::array p = af::atan2(y, x); |
| 291 | |
| 292 | af::array transformed_pos = af::join(0, r, o, p); |
| 293 | |
| 294 | return transformed_pos; |
| 295 | } |
| 296 | |
| 297 | /** |
| 298 | * @brief Transform the position vectors from oblate to cartesian coordinates |
no test coverage detected