| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | module scaled_chartmap_coordinates | ||
| 2 | use, intrinsic :: iso_fortran_env, only: dp => real64 | ||
| 3 | use libneo_coordinates, only: coordinate_system_t, chartmap_coordinate_system_t | ||
| 4 | |||
| 5 | implicit none | ||
| 6 | |||
| 7 | private | ||
| 8 | public :: scaled_chartmap_coordinate_system_t | ||
| 9 | public :: wrap_scaled_chartmap_coordinate_system | ||
| 10 | |||
| 11 | type, extends(chartmap_coordinate_system_t) :: scaled_chartmap_coordinate_system_t | ||
| 12 | real(dp) :: cart_scale = 1.0_dp | ||
| 13 | contains | ||
| 14 | procedure :: evaluate_cart => scaled_chartmap_evaluate_cart | ||
| 15 | procedure :: evaluate_cyl => scaled_chartmap_evaluate_cyl | ||
| 16 | procedure :: covariant_basis => scaled_chartmap_covariant_basis | ||
| 17 | procedure :: metric_tensor => scaled_chartmap_metric_tensor | ||
| 18 | procedure :: from_cyl => scaled_chartmap_from_cyl | ||
| 19 | procedure :: from_cart => scaled_chartmap_from_cart | ||
| 20 | end type scaled_chartmap_coordinate_system_t | ||
| 21 | |||
| 22 | contains | ||
| 23 | |||
| 24 | 21 | subroutine wrap_scaled_chartmap_coordinate_system(coords, cart_scale) | |
| 25 | class(coordinate_system_t), allocatable, intent(inout) :: coords | ||
| 26 | real(dp), intent(in) :: cart_scale | ||
| 27 | |||
| 28 | 21 | class(coordinate_system_t), allocatable :: wrapped | |
| 29 | |||
| 30 |
2/2✓ Branch 0 taken 19 times.
✓ Branch 1 taken 2 times.
|
21 | if (abs(cart_scale - 1.0_dp) <= epsilon(1.0_dp)) return |
| 31 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
2 | if (cart_scale <= 0.0_dp) error stop "chartmap cart_scale must be positive" |
| 32 | |||
| 33 | select type (base => coords) | ||
| 34 | type is (scaled_chartmap_coordinate_system_t) | ||
| 35 | ✗ | base%cart_scale = base%cart_scale*cart_scale | |
| 36 | type is (chartmap_coordinate_system_t) | ||
| 37 |
28/28✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 6 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 6 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 6 times.
✓ Branch 12 taken 2 times.
✓ Branch 13 taken 6 times.
✓ Branch 14 taken 2 times.
✓ Branch 15 taken 6 times.
✓ Branch 16 taken 2 times.
✓ Branch 17 taken 6 times.
✓ Branch 18 taken 2 times.
✓ Branch 19 taken 6 times.
✓ Branch 20 taken 2 times.
✓ Branch 21 taken 6 times.
✓ Branch 22 taken 2 times.
✓ Branch 23 taken 6 times.
✓ Branch 24 taken 2 times.
✓ Branch 25 taken 6 times.
✓ Branch 26 taken 2 times.
✓ Branch 27 taken 6 times.
✓ Branch 28 taken 2 times.
|
86 | allocate (scaled_chartmap_coordinate_system_t :: wrapped) |
| 38 | select type (scaled => wrapped) | ||
| 39 | type is (scaled_chartmap_coordinate_system_t) | ||
| 40 |
5/10✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
2 | scaled%chartmap_coordinate_system_t = base |
| 41 | 2 | scaled%cart_scale = cart_scale | |
| 42 | class default | ||
| 43 | error stop "wrap_scaled_chartmap_coordinate_system: allocation failed" | ||
| 44 | end select | ||
| 45 |
3/6✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
6 | call move_alloc(wrapped, coords) |
| 46 | class default | ||
| 47 | ✗ | error stop "wrap_scaled_chartmap_coordinate_system: expected chartmap coords" | |
| 48 | end select | ||
| 49 | end subroutine wrap_scaled_chartmap_coordinate_system | ||
| 50 | |||
| 51 | 2 | subroutine scaled_chartmap_evaluate_cart(self, u, x) | |
| 52 | class(scaled_chartmap_coordinate_system_t), intent(in) :: self | ||
| 53 | real(dp), intent(in) :: u(3) | ||
| 54 | real(dp), intent(out) :: x(3) | ||
| 55 | |||
| 56 | 2 | call self%chartmap_coordinate_system_t%evaluate_cart(u, x) | |
| 57 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 2 times.
|
8 | x = self%cart_scale*x |
| 58 | 2 | end subroutine scaled_chartmap_evaluate_cart | |
| 59 | |||
| 60 | ✗ | subroutine scaled_chartmap_evaluate_cyl(self, u, x) | |
| 61 | class(scaled_chartmap_coordinate_system_t), intent(in) :: self | ||
| 62 | real(dp), intent(in) :: u(3) | ||
| 63 | real(dp), intent(out) :: x(3) | ||
| 64 | |||
| 65 | ✗ | call self%chartmap_coordinate_system_t%evaluate_cyl(u, x) | |
| 66 | ✗ | x(1) = self%cart_scale*x(1) | |
| 67 | ✗ | x(3) = self%cart_scale*x(3) | |
| 68 | ✗ | end subroutine scaled_chartmap_evaluate_cyl | |
| 69 | |||
| 70 | ✗ | subroutine scaled_chartmap_covariant_basis(self, u, e_cov) | |
| 71 | class(scaled_chartmap_coordinate_system_t), intent(in) :: self | ||
| 72 | real(dp), intent(in) :: u(3) | ||
| 73 | real(dp), intent(out) :: e_cov(3, 3) | ||
| 74 | |||
| 75 | ✗ | call self%chartmap_coordinate_system_t%covariant_basis(u, e_cov) | |
| 76 | ✗ | e_cov = self%cart_scale*e_cov | |
| 77 | ✗ | end subroutine scaled_chartmap_covariant_basis | |
| 78 | |||
| 79 | ✗ | subroutine scaled_chartmap_metric_tensor(self, u, g, ginv, sqrtg) | |
| 80 | class(scaled_chartmap_coordinate_system_t), intent(in) :: self | ||
| 81 | real(dp), intent(in) :: u(3) | ||
| 82 | real(dp), intent(out) :: g(3, 3), ginv(3, 3), sqrtg | ||
| 83 | |||
| 84 | real(dp) :: scale2 | ||
| 85 | |||
| 86 | ✗ | call self%chartmap_coordinate_system_t%metric_tensor(u, g, ginv, sqrtg) | |
| 87 | ✗ | scale2 = self%cart_scale*self%cart_scale | |
| 88 | ✗ | g = scale2*g | |
| 89 | ✗ | ginv = ginv/scale2 | |
| 90 | ✗ | sqrtg = self%cart_scale*scale2*sqrtg | |
| 91 | ✗ | end subroutine scaled_chartmap_metric_tensor | |
| 92 | |||
| 93 | ✗ | subroutine scaled_chartmap_from_cyl(self, xcyl, u, ierr) | |
| 94 | class(scaled_chartmap_coordinate_system_t), intent(in) :: self | ||
| 95 | real(dp), intent(in) :: xcyl(3) | ||
| 96 | real(dp), intent(out) :: u(3) | ||
| 97 | integer, intent(out) :: ierr | ||
| 98 | |||
| 99 | real(dp) :: xcyl_base(3) | ||
| 100 | |||
| 101 | ✗ | xcyl_base = xcyl | |
| 102 | ✗ | xcyl_base(1) = xcyl_base(1)/self%cart_scale | |
| 103 | ✗ | xcyl_base(3) = xcyl_base(3)/self%cart_scale | |
| 104 | ✗ | call self%chartmap_coordinate_system_t%from_cyl(xcyl_base, u, ierr) | |
| 105 | ✗ | end subroutine scaled_chartmap_from_cyl | |
| 106 | |||
| 107 | 1 | subroutine scaled_chartmap_from_cart(self, x, u, ierr) | |
| 108 | class(scaled_chartmap_coordinate_system_t), intent(in) :: self | ||
| 109 | real(dp), intent(in) :: x(3) | ||
| 110 | real(dp), intent(out) :: u(3) | ||
| 111 | integer, intent(out) :: ierr | ||
| 112 | |||
| 113 | real(dp) :: x_base(3) | ||
| 114 | |||
| 115 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 1 time.
|
4 | x_base = x/self%cart_scale |
| 116 | 1 | call self%chartmap_coordinate_system_t%from_cart(x_base, u, ierr) | |
| 117 | 1 | end subroutine scaled_chartmap_from_cart | |
| 118 | |||
| 119 |
7/12✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 3 times.
|
7 | end module scaled_chartmap_coordinates |
| 120 |