mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-08-30 12:43:40 +02:00
75 lines
2.8 KiB
Fortran
75 lines
2.8 KiB
Fortran
subroutine write_cipsi_json(pt2_data, pt2_data_err)
|
|
use selection_types
|
|
implicit none
|
|
BEGIN_DOC
|
|
! Writes JSON data for CIPSI runs
|
|
END_DOC
|
|
type(pt2_type), intent(in) :: pt2_data, pt2_data_err
|
|
integer :: i,j,k
|
|
|
|
call lock_io
|
|
character*(64), allocatable :: fmtk(:)
|
|
double precision:: pt2_minus,pt2_plus,pt2_tot, pt2_abs
|
|
double precision :: error_pt2_minus, error_pt2_plus, error_pt2_tot, error_pt2_abs
|
|
integer :: N_states_p, N_iter_p
|
|
N_states_p = min(N_states,N_det)
|
|
N_iter_p = min(N_iter,8)
|
|
allocate(fmtk(0:N_iter_p))
|
|
fmtk(:) = '('' '',E22.15,'','')'
|
|
fmtk(N_iter_p) = '('' '',E22.15)'
|
|
|
|
write(json_unit, json_dict_uopen_fmt)
|
|
write(json_unit, json_int_fmt) 'n_det', N_det
|
|
if (s2_eig) then
|
|
write(json_unit, json_int_fmt) 'n_cfg', N_configuration
|
|
if (only_expected_s2) then
|
|
write(json_unit, json_int_fmt) 'n_csf', N_csf
|
|
endif
|
|
endif
|
|
write(json_unit, json_array_open_fmt) 'states'
|
|
do k=1,N_states_p
|
|
pt2_plus = pt2_data % variance(k)
|
|
pt2_minus = pt2_data % pt2(k)
|
|
pt2_abs = pt2_plus - pt2_minus
|
|
pt2_tot = pt2_plus + pt2_minus
|
|
error_pt2_minus = pt2_data_err % pt2(k)
|
|
error_pt2_plus = pt2_data_err % variance(k)
|
|
error_pt2_tot = dsqrt(error_pt2_minus**2+error_pt2_plus**2)
|
|
error_pt2_abs = error_pt2_tot ! same variance because independent variables
|
|
write(json_unit, json_dict_uopen_fmt)
|
|
write(json_unit, json_real_fmt) 'energy', psi_energy_with_nucl_rep(k)
|
|
write(json_unit, json_real_fmt) 's2', psi_s2(k)
|
|
|
|
write(json_unit, json_real_fmt) 'pt2', pt2_tot
|
|
write(json_unit, json_real_fmt) 'pt2_err', error_pt2_tot
|
|
|
|
write(json_unit, json_real_fmt) 'pt2_minus', pt2_minus
|
|
write(json_unit, json_real_fmt) 'pt2_minus_err', error_pt2_minus
|
|
|
|
write(json_unit, json_real_fmt) 'pt2_abs', pt2_abs
|
|
write(json_unit, json_real_fmt) 'pt2_abs_err', error_pt2_abs
|
|
|
|
write(json_unit, json_real_fmt) 'pt2_plus', pt2_plus
|
|
write(json_unit, json_real_fmt) 'pt2_plus_err', error_pt2_plus
|
|
|
|
write(json_unit, json_real_fmt) 'rpt2', pt2_data % rpt2(k)
|
|
write(json_unit, json_real_fmt) 'rpt2_err', pt2_data_err % rpt2(k)
|
|
! write(json_unit, json_real_fmt) 'variance', pt2_data % variance(k)
|
|
! write(json_unit, json_real_fmt) 'variance_err', pt2_data_err % variance(k)
|
|
write(json_unit, json_array_open_fmt) 'ex_energy'
|
|
do i=2,N_iter_p
|
|
write(json_unit, fmtk(i)) extrapolated_energy(i,k)
|
|
enddo
|
|
write(json_unit, json_array_close_fmtx)
|
|
if (k < N_states_p) then
|
|
write(json_unit, json_dict_close_fmt)
|
|
else
|
|
write(json_unit, json_dict_close_fmtx)
|
|
endif
|
|
enddo
|
|
write(json_unit, json_array_close_fmtx)
|
|
write(json_unit, json_dict_close_fmt)
|
|
deallocate(fmtk)
|
|
call unlock_io
|
|
end
|