From e66ca96b77a84a08ad0a119d2cf74dfcf2cc56ac Mon Sep 17 00:00:00 2001 From: David A Minton Date: Tue, 24 Aug 2021 00:40:32 -0400 Subject: [PATCH] Fixed memory allocation issue in the orbital element conversion method --- src/io/io.f90 | 2 -- src/orbel/orbel.f90 | 21 +++++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/io/io.f90 b/src/io/io.f90 index 58e233dd1..3123710db 100644 --- a/src/io/io.f90 +++ b/src/io/io.f90 @@ -1660,8 +1660,6 @@ module subroutine io_write_frame_system(self, iu, param) call pl%write_frame(iu, param) call tp%write_frame(iu, param) - deallocate(cb, pl, tp) - close(iu, err = 667, iomsg = errmsg) return diff --git a/src/orbel/orbel.f90 b/src/orbel/orbel.f90 index c07200b14..0a93ec599 100644 --- a/src/orbel/orbel.f90 +++ b/src/orbel/orbel.f90 @@ -16,7 +16,7 @@ module subroutine orbel_el2xv_vec(self, cb) if (self%nbody == 0) return call self%set_mu(cb) - do i = 1, self%nbody + do concurrent (i = 1:self%nbody) call orbel_el2xv(self%mu(i), self%a(i), self%e(i), self%inc(i), self%capom(i), & self%omega(i), self%capm(i), self%xh(:, i), self%vh(:, i)) end do @@ -288,7 +288,7 @@ real(DP) pure function orbel_flon(e,icapn) end if return - end function orbel_flon + end function orbel_flon !********************************************************************** @@ -358,7 +358,7 @@ real(DP) pure function orbel_fget(e,capn) !write(*,*) 'fget : returning without complete convergence' return - end function orbel_fget + end function orbel_fget !********************************************************************** @@ -878,18 +878,19 @@ module subroutine orbel_xv2el_vec(self, cb) if (self%nbody == 0) return call self%set_mu(cb) - if (.not.allocated(self%a)) allocate(self%a(self%nbody)) - if (.not.allocated(self%e)) allocate(self%e(self%nbody)) - if (.not.allocated(self%inc)) allocate(self%inc(self%nbody)) - if (.not.allocated(self%capom)) allocate(self%capom(self%nbody)) - if (.not.allocated(self%omega)) allocate(self%omega(self%nbody)) - if (.not.allocated(self%capm)) allocate(self%capm(self%nbody)) - do i = 1, self%nbody + if (allocated(self%a)) deallocate(self%a); allocate(self%a(self%nbody)) + if (allocated(self%e)) deallocate(self%e); allocate(self%e(self%nbody)) + if (allocated(self%inc)) deallocate(self%inc); allocate(self%inc(self%nbody)) + if (allocated(self%capom)) deallocate(self%capom); allocate(self%capom(self%nbody)) + if (allocated(self%omega)) deallocate(self%omega); allocate(self%omega(self%nbody)) + if (allocated(self%capm)) deallocate(self%capm); allocate(self%capm(self%nbody)) + do concurrent (i = 1:self%nbody) call orbel_xv2el(self%mu(i), self%xh(:, i), self%vh(:, i), self%a(i), self%e(i), self%inc(i), & self%capom(i), self%omega(i), self%capm(i)) end do end subroutine orbel_xv2el_vec + module pure subroutine orbel_xv2el(mu, x, v, a, e, inc, capom, omega, capm) !! author: David A. Minton !!