From 113f0757eee8f6f4ec58404fb2610a69368ca039 Mon Sep 17 00:00:00 2001 From: madgal Date: Tue, 27 Jun 2017 13:30:09 -0500 Subject: [PATCH] Added save iterations to Full_CI_ZMQ (#203) * Added/Updated files to save iterations Modified EZFIO.cfg to include iteratively saved data if the keyword of "full_ci_zmq/iterative" is set to true in the ezfio. The default is false. Will save the number of total iterations in full_ci_zmq/n_iter Saves the number of determinants in full_ci_zmq/n_det_iter Saves the energy in full_ci_zmq/energy_iter. Saves the energy_pt2 in full_ci_zmq/energybefore_pt2_iter These results are the same as the output of the program at every iteration. Modified fci_zmq.irp.f to include calls to fci_iterations.irp.f at each iteration (starting at N_det==1 and including the final call to do the final pt2 correction) Created fci_iterations as a subroutine to save the number of determinants, energy, and energy+pt2 for every iteration and saves the results in the full_ci_zmq output directory. * Updated files to include 3 save options Updated "iterative" in EZFIO.cfg to be an integer that can take the values of 1 (Append), 2 (Overwrite), or 3 (Do not save). Updated fci_iterations to be simpler and include the three options. Also updated the output so that only N_det, energy, and pt2 are output. The user must manipulate from there. * Delete fci_iterations.irp.f The file was modified and moved to fci_iterations.f90 * Fixed the comments * Rename fci_iterations to dump_fci_iterations_value Changed name to be clear on purpose. * Updated files for iterative saving Renamed fci_iterations to dump_fci_iterations_value for clarity In EZFIO.cfg changed keyword "iterative" to "iterative_save" for clarity Update dump_fci_iterations_value with "iterative_save" keyword Removed call to dump_fci_iterations on line 27 in fci_zmq Updated fci_zmq with the name change for calls * Delete fci_zmq.irp.f * Delete fci_zmq_pt2.irp.f * Delete EZFIO.cfg * Get latest updates from master * Added calls to dump_fci_iterations_value * Readded dump_fci_iterations_value * Updated EZFIO.cfg --- plugins/Full_CI_ZMQ/EZFIO.cfg | 27 ++++++ .../Full_CI_ZMQ/dump_fci_iterations_value.f90 | 83 +++++++++++++++++++ plugins/Full_CI_ZMQ/fci_zmq.irp.f | 5 +- 3 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 plugins/Full_CI_ZMQ/dump_fci_iterations_value.f90 diff --git a/plugins/Full_CI_ZMQ/EZFIO.cfg b/plugins/Full_CI_ZMQ/EZFIO.cfg index 26f1a8e5..15ebab6d 100644 --- a/plugins/Full_CI_ZMQ/EZFIO.cfg +++ b/plugins/Full_CI_ZMQ/EZFIO.cfg @@ -8,4 +8,31 @@ type: double precision doc: Calculated FCI energy + PT2 interface: ezfio +[iterative_save] +type: integer +doc: Save data at each iteration : 1(Append) | 2(Overwrite) | 3(NoSave) +interface: ezfio,ocaml +default: 1 +[n_iter] +interface: ezfio +doc: number of iterations +type:integer + +[n_det_iter] +interface: ezfio +doc: number of determinants at iteration +type: integer +size: (full_ci_zmq.n_iter) + +[energy_iter] +interface: ezfio +doc: The energy without a pt2 correction for n_det +type: double precision +size: (full_ci_zmq.n_iter) + +[pt2_iter] +interface: ezfio +doc: The pt2 correction for n_det +type: double precision +size: (full_ci_zmq.n_iter) diff --git a/plugins/Full_CI_ZMQ/dump_fci_iterations_value.f90 b/plugins/Full_CI_ZMQ/dump_fci_iterations_value.f90 new file mode 100644 index 00000000..0e7565d8 --- /dev/null +++ b/plugins/Full_CI_ZMQ/dump_fci_iterations_value.f90 @@ -0,0 +1,83 @@ +subroutine dump_fci_iterations_value(n_determinants,energy,pt2) + implicit none + +! Not using an irp.f90 environment because the SAVE statement is needed for simpler code + +! BEGIN_DOC +!! Output the number of determinants, energy, and pt2 correction at each iteration +! END_DOC + integer :: n_determinants + double precision :: energy, pt2 + integer :: N_iterations + integer, allocatable :: n_determinants_list(:) + double precision, allocatable :: energy_list(:) + double precision, allocatable :: pt2_list(:) + integer :: saveMethod + logical :: hasIter + logical,save :: firstAccess=.TRUE. !! every update of firstAccess will be saved + + !!! Check to ensure that we should save iterations (default is Append) + ! saveMethod: 1==Append, 2==Overwrite, 3==NoSave + call ezfio_get_full_ci_zmq_iterative_save(saveMethod) + + !!! Check we are saving data + if (saveMethod/=3) then + + !!! If the iteration number exists get it + !!! otherwise set it to zero + call ezfio_has_full_ci_zmq_n_iter(hasIter) + if (hasIter) then + call ezfio_get_full_ci_zmq_n_iter(N_iterations) + else + N_iterations=0 + endif + + !!! If it is append we don't have to do any more checks + !!! N_iterations will be correct now. + + !!! If we should overwrite and this is the first time + !!! Then we need to reset N_iterations to zero + if ((saveMethod==2).AND.(firstAccess)) then + N_iterations=0 + endif + + !! Now allocate the array for entire size needed + allocate(n_determinants_list(N_iterations+1)) + allocate(energy_list(N_iterations+1)) + allocate(pt2_list(N_iterations+1)) + + !!! Pull previously written data + !!! Unless it is at the beginning of a new/restarted calculation + if((hasIter).AND.(N_iterations>0)) then + call ezfio_get_full_ci_zmq_n_det_iter(n_determinants_list(1:N_iterations)) + call ezfio_get_full_ci_zmq_energy_iter(energy_list(1:N_iterations)) + call ezfio_get_full_ci_zmq_pt2_iter(pt2_list(1:N_iterations)) + endif + + !! Now increment to the current iteration + N_iterations = N_iterations+1 + + !! Add the data from latest iteration + n_determinants_list(N_iterations) = n_determinants + energy_list(N_iterations) = energy + pt2_list(N_iterations) = pt2 + + ! Reset the iteration number + call ezfio_set_full_ci_zmq_n_iter(N_iterations) + + !!!! Now reset the ezfio values + !!!! To include the latest data + call ezfio_set_full_ci_zmq_n_det_iter(n_determinants_list) + call ezfio_set_full_ci_zmq_energy_iter(energy_list) + call ezfio_set_full_ci_zmq_pt2_iter(pt2_list) + + deallocate(n_determinants_list) + deallocate(energy_list) + deallocate(pt2_list) + + endif + + !!! set first access to false + !!! it will be saved + firstAccess=.FALSE. + end subroutine diff --git a/plugins/Full_CI_ZMQ/fci_zmq.irp.f b/plugins/Full_CI_ZMQ/fci_zmq.irp.f index dc9d6d42..80ba5a7b 100644 --- a/plugins/Full_CI_ZMQ/fci_zmq.irp.f +++ b/plugins/Full_CI_ZMQ/fci_zmq.irp.f @@ -44,6 +44,7 @@ program fci_zmq print *, 'E+PT2 = ', CI_energy(k) + pt2(k) print *, '-----' enddo + call dump_fci_iterations_value(N_det,CI_energy(1),pt2(1)) ! This call automatically appends data endif @@ -135,7 +136,7 @@ program fci_zmq call save_wavefunction call ezfio_set_full_ci_zmq_energy(CI_energy(1)) call ezfio_set_full_ci_zmq_energy_pt2(CI_energy(1)+pt2(1)) - + call dump_fci_iterations_value(N_det,CI_energy(1),pt2(1)) ! This call automatically appends data enddo endif @@ -144,6 +145,7 @@ program fci_zmq call diagonalize_CI call save_wavefunction call ezfio_set_full_ci_zmq_energy(CI_energy(1)) + call dump_fci_iterations_value(N_det,CI_energy(1),pt2(1)) ! This call automatically appends data endif if (do_pt2) then @@ -163,6 +165,7 @@ program fci_zmq call ZMQ_selection(0, pt2) ! Deterministic PT2 endif call ezfio_set_full_ci_zmq_energy_pt2(CI_energy(1)+pt2(1)) + call dump_fci_iterations_value(N_det,CI_energy(1),pt2(1)) ! This call automatically appends data endif