From 0d0c47ede381b1d7e163a13175e3d1c2b91e38e4 Mon Sep 17 00:00:00 2001 From: Will Handley Date: Tue, 9 Jan 2024 12:41:56 +0000 Subject: [PATCH] Remove GenerateFromSeed functionality (#112) * Removed GenerateFromSeed functionality * Removed more_points_needed and request_point * Removed generate_from_seed from settings * Bumped version number --- README.rst | 2 +- pypolychord/__init__.py | 2 +- src/polychord/feedback.f90 | 4 +- src/polychord/generate.F90 | 255 +----------------------------- src/polychord/ini.f90 | 2 - src/polychord/mpi_utils.F90 | 64 +------- src/polychord/nested_sampling.F90 | 8 +- src/polychord/settings.f90 | 1 - 8 files changed, 10 insertions(+), 328 deletions(-) diff --git a/README.rst b/README.rst index 156ca1c2..8105303c 100644 --- a/README.rst +++ b/README.rst @@ -5,7 +5,7 @@ :target: https://arxiv.org/abs/1506.00171 :alt: Open-access paper -PolyChord v 1.21.0 +PolyChord v 1.21.1 Will Handley, Mike Hobson & Anthony Lasenby diff --git a/pypolychord/__init__.py b/pypolychord/__init__.py index 7c6e3ddb..cfbdea33 100644 --- a/pypolychord/__init__.py +++ b/pypolychord/__init__.py @@ -1,3 +1,3 @@ -__version__ = "1.21.0" +__version__ = "1.21.1" from pypolychord.settings import PolyChordSettings from pypolychord.polychord import run_polychord diff --git a/src/polychord/feedback.f90 b/src/polychord/feedback.f90 index 8c8e4596..c27e93bf 100644 --- a/src/polychord/feedback.f90 +++ b/src/polychord/feedback.f90 @@ -28,8 +28,8 @@ subroutine write_opening_statement(settings) write(stdout_unit,'("")') write(stdout_unit,'("PolyChord: Next Generation Nested Sampling")') write(stdout_unit,'("copyright: Will Handley, Mike Hobson & Anthony Lasenby")') - write(stdout_unit,'(" version: 1.21.0")') - write(stdout_unit,'(" release: 1st June 2021")') + write(stdout_unit,'(" version: 1.21.1")') + write(stdout_unit,'(" release: 9th Jan 2024")') write(stdout_unit,'(" email: wh260@mrao.cam.ac.uk")') write(stdout_unit,'("")') end if diff --git a/src/polychord/generate.F90 b/src/polychord/generate.F90 index 3bc0decc..fc8e3a25 100644 --- a/src/polychord/generate.F90 +++ b/src/polychord/generate.F90 @@ -69,7 +69,7 @@ subroutine GenerateLivePoints(loglikelihood,prior,settings,RTI,mpi_information) use array_module, only: add_point use abort_module #ifdef MPI - use mpi_module, only: mpi_bundle,is_root,linear_mode,throw_point,catch_point,more_points_needed,sum_integers,sum_doubles,request_point,no_more_points,request_live_point,live_point_needed + use mpi_module, only: mpi_bundle,is_root,linear_mode,throw_point,catch_point,sum_integers,sum_doubles,no_more_points,request_live_point,live_point_needed #else use mpi_module, only: mpi_bundle,is_root,linear_mode #endif @@ -454,257 +454,4 @@ function prior(cube) result(theta) end subroutine time_speeds - - subroutine GenerateLivePointsFromSeed(loglikelihood,prior,settings,RTI,mpi_information) - use settings_module, only: program_settings - use utils_module, only: write_phys_unit,DB_FMT,fmt_len,minpos,time,stdout_unit - use calculate_module, only: calculate_point - use read_write_module, only: phys_live_file - use feedback_module, only: write_started_generating,write_finished_generating,write_generating_live_points - use run_time_module, only: run_time_info,initialise_run_time_info, find_min_loglikelihoods - use array_module, only: add_point - use abort_module - use chordal_module, only: slice_sample -#ifdef MPI - use mpi_module, only: mpi_bundle,is_root,linear_mode,throw_point,catch_point,more_points_needed,sum_integers,sum_doubles,request_point,no_more_points -#else - use mpi_module, only: mpi_bundle,is_root,linear_mode -#endif - - implicit none - - interface - function loglikelihood(theta,phi) - import :: dp - real(dp), intent(in), dimension(:) :: theta - real(dp), intent(out), dimension(:) :: phi - real(dp) :: loglikelihood - end function - end interface - interface - function prior(cube) result(theta) - import :: dp - real(dp), intent(in), dimension(:) :: cube - real(dp), dimension(size(cube)) :: theta - end function - end interface - - - !> Program settings - type(program_settings), intent(in) :: settings - - ! The run time info (very important, see src/run_time_info.f90) - type(run_time_info) :: RTI - - type(mpi_bundle),intent(in) :: mpi_information -#ifdef MPI - integer :: active_workers ! Number of currently working workers - integer :: worker_id ! Worker identifier to signal who to throw back to -#endif - - real(dp), dimension(settings%nTotal) :: live_point ! Temporary live point array - - - character(len=fmt_len) :: fmt_dbl ! writing format variable - - integer :: nprior - - real(dp) :: time0,time1 - real(dp),dimension(size(settings%grade_dims)) :: speed - real(dp),dimension(size(settings%grade_dims)) :: times - integer, dimension(size(settings%grade_dims)) :: nlikes - - integer :: i_dim,i_repeat,i_grade - integer, dimension(settings%nDims) :: grade - real(dp), dimension(settings%nDims) :: nhat - - do i_grade = size(settings%grade_dims),1,-1 - grade(:sum(settings%grade_dims(:i_grade))) = i_grade - end do - nlikes = 0 - times = 0d0 - - if(is_root(mpi_information)) then - ! ---------------------------------------------- ! - call write_started_generating(settings%feedback) - ! ---------------------------------------------- ! - - ! Initialise the format - write(fmt_dbl,'("(",I0,A,")")') settings%nDims+settings%nDerived+1, DB_FMT - - ! Open the live points file to sequentially add live points - if(settings%write_live) open(write_phys_unit,file=trim(phys_live_file(settings)), action='write') - - ! Allocate the run time arrays, and set the default values for the variables - call initialise_run_time_info(settings,RTI) - - end if - - if (settings%nprior <= 0) then - nprior = settings%nlive - else - nprior = settings%nprior - end if - - if(linear_mode(mpi_information)) then - !===================== LINEAR MODE ========================= - - live_point = settings%seed_point - do while(RTI%nlive(1)0) - - ! Recieve a point from any worker - worker_id = catch_point(live_point,mpi_information) - - ! If its valid, and we need more points, add it to the array - if(RTI%nlive(1) worker - ! request_point more_points_needed -> true - ! no_more_points more_points_needed -> false - ! - - !> Request point - !! - !! This subroutine is used by the root node to request a new live point - subroutine request_point(mpi_information,worker_id) - implicit none - type(mpi_bundle), intent(in) :: mpi_information - integer, intent(in) :: worker_id !> Worker to request a new point from - - - integer :: empty_buffer(0) ! empty buffer to send - - call MPI_SEND( & - empty_buffer, &! not sending anything - 0, &! size of nothing - MPI_INTEGER, &! sending no integers - worker_id, &! process id to send to - tag_gen_request, &! continuation tag - mpi_information%communicator,&! mpi handle - mpierror &! error flag - ) - - end subroutine request_point + ! no_more_points keep_going -> false + ! request_live_point keep_going -> true + ! live_point_needed keep_going -> true !> No more points please @@ -658,41 +635,6 @@ subroutine no_more_points(mpi_information,worker_id) end subroutine no_more_points - !> See if more points are needed - !! - !! This subroutine is used by the root node to request a new live point - function more_points_needed(mpi_information) - use abort_module - implicit none - type(mpi_bundle), intent(in) :: mpi_information - - integer :: empty_buffer(0) ! empty buffer to send - integer, dimension(MPI_STATUS_SIZE) :: mpistatus ! status identifier - - logical :: more_points_needed !> Whether we need more points or not - - call MPI_RECV( &! - empty_buffer, &! - 0, &! - MPI_INTEGER, &! - mpi_information%root, &! - MPI_ANY_TAG, &! - mpi_information%communicator,&! - mpistatus, &! - mpierror &! - ) - - ! If we've recieved a kill signal, then exit this loop - if(mpistatus(MPI_TAG) == tag_gen_stop ) then - more_points_needed = .false. - else if(mpistatus(MPI_TAG) == tag_gen_request) then - more_points_needed = .true. - else - call halt_program('generate error: unrecognised tag') - end if - - end function more_points_needed - !> Request specific live points ! administrator ----> worker ! request_live_point(live_point) point_needed -> true diff --git a/src/polychord/nested_sampling.F90 b/src/polychord/nested_sampling.F90 index 0db480ae..276fe2e2 100644 --- a/src/polychord/nested_sampling.F90 +++ b/src/polychord/nested_sampling.F90 @@ -21,7 +21,7 @@ function NestedSampling(loglikelihood,prior, dumper, settings, mpi_communicator) use chordal_module, only: SliceSampling use random_module, only: random_integer,random_direction use cluster_module, only: do_clustering - use generate_module, only: GenerateSeed,GenerateLivePoints,GenerateLivePointsFromSeed + use generate_module, only: GenerateSeed,GenerateLivePoints use maximise_module, only: maximise #ifdef MPI use utils_module, only: normal_fb,stdout_unit @@ -191,11 +191,7 @@ end subroutine dumper end if ! Intialise the run by setting all of the relevant run time info, and generating live points - if (settings%generate_from_seed) then - call GenerateLivePointsFromSeed(loglikelihood,prior,settings,RTI,mpi_information) - else - call GenerateLivePoints(loglikelihood,prior,settings,RTI,mpi_information) - end if + call GenerateLivePoints(loglikelihood,prior,settings,RTI,mpi_information) if(is_root(mpi_information)) then if(settings%write_prior) call write_prior_file(settings,RTI) diff --git a/src/polychord/settings.f90 b/src/polychord/settings.f90 index d0318ab4..475029af 100644 --- a/src/polychord/settings.f90 +++ b/src/polychord/settings.f90 @@ -50,7 +50,6 @@ module settings_module real(dp), allocatable,dimension(:) :: seed_point - logical :: generate_from_seed = .false. integer :: nprior = -1 integer :: nfail = -1 integer :: nprior_repeat = -1