Skip to content
This repository was archived by the owner on Aug 28, 2024. It is now read-only.

Pull Request with Dump File Changes #1

Merged
merged 4 commits into from
Jun 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
#******************************************************************************

SWIFTEST_MODULES = swiftest_globals.f90 \
user.f90 \
swiftest_data_structures.f90 \
lambda_function.f90\
module_swifter.f90 \
Expand Down Expand Up @@ -135,11 +134,6 @@ lib:
ln -s $(SWIFTEST_HOME)/Makefile.Defines .; \
ln -s $(SWIFTEST_HOME)/Makefile .; \
make libdir
cd $(SWIFTEST_HOME)/src/user; \
rm -f Makefile.Defines Makefile; \
ln -s $(SWIFTEST_HOME)/Makefile.Defines .; \
ln -s $(SWIFTEST_HOME)/Makefile .; \
make libdir2
cd $(SWIFTEST_HOME)/src/util; \
rm -f Makefile.Defines Makefile; \
ln -s $(SWIFTEST_HOME)/Makefile.Defines .; \
Expand Down Expand Up @@ -186,7 +180,6 @@ clean:
cd $(SWIFTEST_HOME)/src/rmvs; rm -f Makefile.Defines Makefile *.gc*
cd $(SWIFTEST_HOME)/src/swiftest; rm -f Makefile.Defines Makefile *.gc*
cd $(SWIFTEST_HOME)/src/symba; rm -f Makefile.Defines Makefile *.gc*
cd $(SWIFTEST_HOME)/src/user; rm -f Makefile.Defines Makefile *.gc*
cd $(SWIFTEST_HOME)/src/util; rm -f Makefile.Defines Makefile *.gc*
cd $(SWIFTEST_HOME)/src/main; rm -f Makefile.Defines Makefile *.gc*
cd $(SWIFTEST_HOME)/src/tool; rm -f Makefile.Defines Makefile *.gc*
Expand Down
2 changes: 1 addition & 1 deletion src/io/io_conservation_report.f90
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ module subroutine io_conservation_report(t, symba_plA, npl, j2rp2, j4rp4, param,
type(symba_pl), intent(inout) :: symba_plA !! Swiftest planet data structure
integer(I4B), intent(in) :: npl !! Number of massive bodies
real(DP), intent(in) :: j2rp2, j4rp4 !! Central body oblateness terms
type(user_input_parameters), intent(inout) :: param !! Input colleciton of user-defined parameters
type(swiftest_parameters), intent(inout) :: param !! Input colleciton of user-defined parameters
logical, intent(in) :: lterminal !! Indicates whether to output information to the terminal screen
! Internals
real(DP), dimension(NDIM) :: Ltot_now, Lorbit_now, Lspin_now
Expand Down
19 changes: 10 additions & 9 deletions src/user/user_dump_param.f90 → src/io/io_dump_param.f90
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
submodule(user) s_user_dump_param
submodule(swiftest_data_structures) s_io_dump_param
contains
module subroutine user_dump_param(param,t)
module subroutine io_dump_param(param, t, swiftest_plA)
!! author: David A. Minton
!!
!! Dump integration parameters to file
!!
!! Adapted from David E. Kaufmann's Swifter routine io_dump_param.f90
!! Adapted from Martin Duncan's Swift routine io_dump_param.f
use swiftest, except_this_one => user_dump_param
use swiftest, except_this_one => io_dump_param
implicit none

! Arguments
class(user_input_parameters),intent(in) :: param !! Output collection of user-defined parameters
real(DP),intent(in) :: t !! Current simulation tim
class(swiftest_parameters),intent(in) :: param !! Output collection of user-defined parameters
real(DP),intent(in) :: t !! Current simulation tim
type(swiftest_pl), intent(inout) :: swiftest_plA

! Internals
type(user_input_parameters) :: param_dump !! Data type of dumped parameter file
type(swiftest_parameters) :: param_dump !! Data type of dumped parameter file
integer(I4B), parameter :: LUN = 7 !! Unit number of output file
integer(I4B) :: ierr !! Error code
integer(I4B), save :: idx = 1 !! Index of current dump file. Output flips between 2 files for extra security
Expand All @@ -38,7 +39,7 @@ module subroutine user_dump_param(param,t)
!! todo: Currently this procedure does not work in user-defined derived-type input mode
!! due to compiler incompatabilities
!write(LUN,'(DT)') param_dump
call param_dump%udio_writer(LUN, iotype="none",v_list=(/0/),iostat=ierr,iomsg=error_message)
call param_dump%udio_writer(LUN, iotype="none",v_list=(/0/),iostat=ierr,iomsg=error_message, swiftest_plA=swiftest_plA)
call random_seed(put = param_dump%seed)

if (idx == 2) then
Expand All @@ -51,5 +52,5 @@ module subroutine user_dump_param(param,t)

return

end subroutine user_dump_param
end submodule s_user_dump_param
end subroutine io_dump_param
end submodule s_io_dump_param
2 changes: 1 addition & 1 deletion src/io/io_dump_pl.f90
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ SUBROUTINE io_dump_pl(npl, swiftest_plA, param)
! Arguments
INTEGER(I4B), INTENT(IN) :: npl
TYPE(swiftest_pl), INTENT(INOUT) :: swiftest_plA
type(user_input_parameters),intent(inout) :: param
type(swiftest_parameters),intent(inout) :: param

! Internals
INTEGER(I4B) :: ierr
Expand Down
2 changes: 1 addition & 1 deletion src/io/io_dump_pl_symba.f90
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ subroutine io_dump_pl_symba(npl, symba_plA, param)
! arguments
integer(I4B), intent(in) :: npl
type(symba_pl), intent(inout) :: symba_plA
type(user_input_parameters),intent(inout) :: param
type(swiftest_parameters),intent(inout) :: param

! internals
integer(I4B) :: ierr
Expand Down
10 changes: 5 additions & 5 deletions src/user/user_get_token.f90 → src/io/io_get_token.f90
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
submodule(user) s_user_get_token
submodule(swiftest_data_structures) s_io_get_token
contains
module function user_get_token(buffer, ifirst, ilast, ierr) result(token)
module function io_get_token(buffer, ifirst, ilast, ierr) result(token)
!! author: David A. Minton
!!
!! Retrieves a character token from an input string. Here a token is defined as any set of contiguous non-blank characters not
!! beginning with or containing "!". If "!" is present, any remaining part of the buffer including the "!" is ignored
!!
!! Adapted from David E. Kaufmann's Swifter routine user_get_token.f90
use swiftest, except_this_one => user_get_token
use swiftest, except_this_one => io_get_token
implicit none

! Arguments
Expand Down Expand Up @@ -49,5 +49,5 @@ module function user_get_token(buffer, ifirst, ilast, ierr) result(token)

return

end function user_get_token
end submodule s_user_get_token
end function io_get_token
end submodule s_io_get_token
17 changes: 9 additions & 8 deletions src/user/user_read_param_in.f90 → src/io/io_read_param_in.f90
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
submodule (user) s_user_read_param_in
submodule (swiftest_data_structures) s_io_read_param_in
contains
module subroutine user_read_param_in(param,inparfile)
module subroutine io_read_param_in(param, inparfile, swiftest_plA)
!! author: The Purdue Swiftest Team - David A. Minton, Carlisle A. Wishard, Jennifer L.L. Pouplin, and Jacob R. Elliott
!!
!! Read in parameters for the integration
!!
!! Adapted from David E. Kaufmann's Swifter routine io_init_param.f90
!! Adapted from Martin Duncan's Swift routine io_init_param.f
!$ use omp_lib
use swiftest, except_this_one => user_read_param_in
use swiftest, except_this_one => io_read_param_in
implicit none

! Arguments
class(user_input_parameters),intent(out) :: param !! Input collection of user-defined parameters
character(*), intent(in) :: inparfile !! Parameter input file name (i.e. param.in)
class(swiftest_parameters),intent(out) :: param !! Input collection of user-defined parameters
character(*), intent(in) :: inparfile !! Parameter input file name (i.e. param.in)
type(swiftest_pl), intent(inout) :: swiftest_plA

! Internals
integer(I4B), parameter :: LUN = 7 !! Unit number of input file
Expand All @@ -35,7 +36,7 @@ module subroutine user_read_param_in(param,inparfile)
!! as the newline characters are ignored in the input file when compiled in ifort.

!read(LUN,'(DT)', iostat= ierr, iomsg = error_message) param
call param%udio_reader(LUN,iotype="none",v_list=(/0/),iostat=ierr,iomsg=error_message)
call param%udio_reader(LUN,iotype="none",v_list=(/0/),iostat=ierr,iomsg=error_message, swiftest_plA=swiftest_plA)
if (ierr /= 0) then
write(*,*) 'Swiftest error reading ', trim(adjustl(inparfile))
write(*,*) ierr,trim(adjustl(error_message))
Expand Down Expand Up @@ -117,6 +118,6 @@ module subroutine user_read_param_in(param,inparfile)

return

end subroutine user_read_param_in
end subroutine io_read_param_in

end submodule s_user_read_param_in
end submodule s_io_read_param_in
2 changes: 1 addition & 1 deletion src/io/io_read_particle.f90
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ module subroutine io_read_particle_pl(swiftest_plA, param)
implicit none
! Arguments
class(swiftest_pl), intent(inout) :: swiftest_plA !! Swiftest massive body structure
type(user_input_parameters), intent(in) :: param !! Input colleciton of user-defined parameters
type(swiftest_parameters), intent(in) :: param !! Input colleciton of user-defined parameters
! Internals
integer(I4B), parameter :: lun = 22
integer(I4B) :: i, ierr, id, idx
Expand Down
64 changes: 50 additions & 14 deletions src/user/user_udio_reader.f90 → src/io/io_udio_reader.f90
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
submodule (user) s_user_udio_reader
submodule (swiftest_data_structures) s_io_udio_reader
contains
module subroutine user_udio_reader(param, unit, iotype, v_list, iostat, iomsg)
module subroutine io_udio_reader(param, unit, iotype, v_list, iostat, iomsg, swiftest_plA)
!! author: The Purdue Swiftest Team - David A. Minton, Carlisle A. Wishard, Jennifer L.L. Pouplin, and Jacob R. Elliott
!!
!! Read in parameters for the integration
Expand All @@ -12,16 +12,17 @@ module subroutine user_udio_reader(param, unit, iotype, v_list, iostat, iomsg)
!! Adapted from Martin Duncan's Swift routine io_init_param.f
!$ use omp_lib
!use util, only: util_exit ! IMPLEMENTATION TBD
use swiftest, except_this_one => user_udio_reader
use swiftest, except_this_one => io_udio_reader
implicit none

! Arguments
class(user_input_parameters),intent(inout) :: param !! Input collection of user-defined parameters
class(swiftest_parameters),intent(inout) :: param !! Input collection of user-defined parameters
integer, intent(in) :: unit
character(len=*), intent(in) :: iotype
integer, intent(in) :: v_list(:)
integer, intent(out) :: iostat
character(len=*), intent(inout) :: iomsg
type(swiftest_pl), intent(inout) :: swiftest_plA

! Internals
logical :: t0_set = .false. !! Is the initial time set in the input file?
Expand All @@ -46,11 +47,11 @@ module subroutine user_udio_reader(param, unit, iotype, v_list, iostat, iomsg)
if ((ilength /= 0)) then
ifirst = 1
! Read the pair of tokens. The first one is the parameter name, the second is the value.
param_name = user_get_token(line_trim, ifirst, ilast, iostat)
param_name = io_get_token(line_trim, ifirst, ilast, iostat)
if (param_name == '') cycle ! No parameter name (usually because this line is commented out)
call util_toupper(param_name)
ifirst = ilast + 1
param_value = user_get_token(line_trim, ifirst, ilast, iostat)
param_value = io_get_token(line_trim, ifirst, ilast, iostat)
select case (param_name)
case ("T0")
read(param_value, *) param%t0
Expand Down Expand Up @@ -106,7 +107,7 @@ module subroutine user_udio_reader(param, unit, iotype, v_list, iostat, iomsg)
case ("CHK_QMIN_RANGE")
read(param_value, *) param%qmin_alo
ifirst = ilast + 1
param_value = user_get_token(line, ifirst, ilast, iostat)
param_value = io_get_token(line, ifirst, ilast, iostat)
read(param_value, *) param%qmin_ahi
case ("ENC_OUT")
param%encounter_file = param_value
Expand Down Expand Up @@ -167,13 +168,13 @@ module subroutine user_udio_reader(param, unit, iotype, v_list, iostat, iomsg)
allocate(param%seed(nseeds))
do i = 1, nseeds
ifirst = ilast + 1
param_value = user_get_token(line, ifirst, ilast, iostat)
param_value = io_get_token(line, ifirst, ilast, iostat)
read(param_value, *) param%seed(i)
end do
else ! Seed array in file is too small
do i = 1, nseeds_from_file
ifirst = ilast + 1
param_value = user_get_token(line, ifirst, ilast, iostat)
param_value = io_get_token(line, ifirst, ilast, iostat)
read(param_value, *) param%seed(i)
end do
param%seed(nseeds_from_file+1:nseeds) = [(param%seed(1) - param%seed(nseeds_from_file) + i, i=nseeds_from_file+1, nseeds)]
Expand All @@ -193,24 +194,59 @@ module subroutine user_udio_reader(param, unit, iotype, v_list, iostat, iomsg)
read(param_value, *) param%Ltot_orig(1)
do i = 2, NDIM
ifirst = ilast + 1
param_value = user_get_token(line, ifirst, ilast, iostat)
param_value = io_get_token(line, ifirst, ilast, iostat)
read(param_value, *) param%Ltot_orig(i)
end do
param%Lmag_orig = norm2(param%Ltot_orig(:))
case("LORBIT_ORIG")
read(param_value, *) param%Lorbit_orig(1)
do i = 2, NDIM
ifirst = ilast + 1
param_value = user_get_token(line, ifirst, ilast, iostat)
param_value = io_get_token(line, ifirst, ilast, iostat)
read(param_value, *) param%Lorbit_orig(i)
end do
case("LSPIN_ORIG")
read(param_value, *) param%Lspin_orig(1)
do i = 2, NDIM
ifirst = ilast + 1
param_value = user_get_token(line, ifirst, ilast, iostat)
param_value = io_get_token(line, ifirst, ilast, iostat)
read(param_value, *) param%Lspin_orig(i)
end do
case("LCB_INITIAL")
read(param_value, *) swiftest_plA%Lcb_initial(1)
do i = 2, NDIM
ifirst = ilast + 1
param_value = io_get_token(line, ifirst, ilast, iostat)
read(param_value, *) swiftest_plA%Lcb_initial(i)
end do
case("DLCB")
read(param_value, *) swiftest_plA%dLcb(1)
do i = 2, NDIM
ifirst = ilast + 1
param_value = io_get_token(line, ifirst, ilast, iostat)
read(param_value, *) swiftest_plA%dLcb(i)
end do
case("LESCAPE")
read(param_value, *) swiftest_plA%Lescape(1)
do i = 2, NDIM
ifirst = ilast + 1
param_value = io_get_token(line, ifirst, ilast, iostat)
read(param_value, *) swiftest_plA%Lescape(i)
end do
case("MCB_INITIAL")
read(param_value, *) swiftest_plA%Mcb_initial
case("DMCB")
read(param_value, *) swiftest_plA%dMcb
case("MESCAPE")
read(param_value, *) swiftest_plA%Mescape
case("RCB_INITIAL")
read(param_value, *) swiftest_plA%Rcb_initial
case("DRCB")
read(param_value, *) swiftest_plA%dRcb
case("ECOLLISIONS")
read(param_value, *) swiftest_plA%Ecollisions
case("EUNTRACKED")
read(param_value, *) swiftest_plA%Euntracked
case default
write(iomsg,*) "Unknown parameter -> ",param_name
iostat = -1
Expand Down Expand Up @@ -299,6 +335,6 @@ module subroutine user_udio_reader(param, unit, iotype, v_list, iostat, iomsg)

return

end subroutine user_udio_reader
end subroutine io_udio_reader

end submodule s_user_udio_reader
end submodule s_io_udio_reader
24 changes: 18 additions & 6 deletions src/user/user_udio_writer.f90 → src/io/io_udio_writer.f90
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
submodule(user) s_user_udio_writer
submodule(swiftest_data_structures) s_io_udio_writer
contains
module subroutine user_udio_writer(param, unit, iotype, v_list, iostat, iomsg)
module subroutine io_udio_writer(param, unit, iotype, v_list, iostat, iomsg, swiftest_plA)
!! author: David A. Minton
!!
!! Dump integration parameters to file
!!
!! Adapted from David E. Kaufmann's Swifter routine io_dump_param.f90
!! Adapted from Martin Duncan's Swift routine io_dump_param.f
use swiftest, except_this_one => user_udio_writer
use swiftest, except_this_one => io_udio_writer
implicit none

! Arguments
class(user_input_parameters),intent(in) :: param !! Output collection of user-defined parameters
class(swiftest_parameters),intent(in) :: param !! Output collection of user-defined parameters
integer, intent(in) :: unit
character(len=*), intent(in) :: iotype
integer, intent(in) :: v_list(:)
integer, intent(out) :: iostat
character(len=*), intent(inout) :: iomsg
type(swiftest_pl), intent(inout) :: swiftest_plA

! Internals
character(*),parameter :: Ifmt = '(I0)' !! Format label for integer values
Expand Down Expand Up @@ -114,12 +115,23 @@ module subroutine user_udio_writer(param, unit, iotype, v_list, iostat, iomsg)
write(unit, '("LTOT_ORIG ",3(1X,ES25.17))') param%Ltot_orig(:)
write(unit, '("LORBIT_ORIG",3(1X,ES25.17))') param%Lorbit_orig(:)
write(unit, '("LSPIN_ORIG ",3(1X,ES25.17))') param%Lspin_orig(:)
write(unit, '("LCB_INITIAL ",3(1X,ES25.17))') swiftest_pLA%Lcb_initial(:)
write(unit, '("DLCB ",3(1X,ES25.17))') swiftest_pLA%dLcb(:)
write(unit, '("LESCAPE ",3(1X,ES25.17))') swiftest_pLA%Lescape(:)

write(param_name, Afmt) "MCB_INITIAL"; write(param_value, Rfmt) swiftest_pLA%Mcb_initial; write(unit, Afmt) adjustl(param_name), adjustl(param_value)
write(param_name, Afmt) "DMCB"; write(param_value, Rfmt) swiftest_pLA%dMcb; write(unit, Afmt) adjustl(param_name), adjustl(param_value)
write(param_name, Afmt) "MESCAPE"; write(param_value, Rfmt) swiftest_pLA%Mescape; write(unit, Afmt) adjustl(param_name), adjustl(param_value)
write(param_name, Afmt) "RCB_INITIAL"; write(param_value, Rfmt) swiftest_pLA%Rcb_initial; write(unit, Afmt) adjustl(param_name), adjustl(param_value)
write(param_name, Afmt) "DRCB"; write(param_value, Rfmt) swiftest_pLA%dRcb; write(unit, Afmt) adjustl(param_name), adjustl(param_value)
write(param_name, Afmt) "ECOLLISIONS"; write(param_value, Rfmt) swiftest_pLA%Ecollisions; write(unit, Afmt) adjustl(param_name), adjustl(param_value)
write(param_name, Afmt) "EUNTRACKED"; write(param_value, Rfmt) swiftest_pLA%Euntracked; write(unit, Afmt) adjustl(param_name), adjustl(param_value)
end if
write(param_name, Afmt) "FIRSTKICK"; write(param_value, Lfmt) param%lfirstkick; write(unit, Afmt) adjustl(param_name), adjustl(param_value)

iostat = 0

return

end subroutine user_udio_writer
end submodule s_user_udio_writer
end subroutine io_udio_writer
end submodule s_io_udio_writer
2 changes: 1 addition & 1 deletion src/io/io_write_particle.f90
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ module subroutine io_write_particle_pl(swiftest_plA, idx, param)
! Arguments
class(swiftest_pl), intent(in) :: swiftest_plA !! Swiftest massive body structure
integer(I4B), dimension(:), intent(in) :: idx !! Array of particle indices to append to the particle file
type(user_input_parameters), intent(in) :: param !! Input colleciton of user-defined parameters
type(swiftest_parameters), intent(in) :: param !! Input colleciton of user-defined parameters
! Internals
logical, save :: lfirst = .true.
integer(I4B), parameter :: lun = 22
Expand Down
Loading