subroutine json_results(unit, indentation, energy, gradient, sigma, hessian, &
& cn, q, c6, alpha, pairwise_energy2, pairwise_energy3)
!DEC$ ATTRIBUTES DLLEXPORT :: json_results
integer, intent(in) :: unit
character(len=*), intent(in), optional :: indentation
real(wp), intent(in), optional :: energy
real(wp), intent(in), optional :: gradient(:, :)
real(wp), intent(in), optional :: sigma(:, :)
real(wp), intent(in), optional :: hessian(:, :, :, :)
real(wp), intent(in), optional :: cn(:)
real(wp), intent(in), optional :: q(:)
real(wp), intent(in), optional :: c6(:, :)
real(wp), intent(in), optional :: alpha(:)
real(wp), intent(in), optional :: pairwise_energy2(:, :)
real(wp), intent(in), optional :: pairwise_energy3(:, :)
character(len=:), allocatable :: indent, version_string
character(len=*), parameter :: jsonkey = "('""',a,'"":',1x)"
real(wp), allocatable :: array(:)
call get_dftd4_version(string=version_string)
if (present(indentation)) then
indent = indentation
end if
write(unit, '("{")', advance='no')
if (allocated(indent)) write(unit, '(/,a)', advance='no') repeat(indent, 1)
write(unit, jsonkey, advance='no') 'version'
write(unit, '(1x,a)', advance='no') '"'//version_string//'"'
if (present(energy)) then
write(unit, '(",")', advance='no')
if (allocated(indent)) write(unit, '(/,a)', advance='no') repeat(indent, 1)
write(unit, jsonkey, advance='no') 'energy'
write(unit, '(1x,es25.16)', advance='no') energy
end if
if (present(sigma)) then
write(unit, '(",")', advance='no')
if (allocated(indent)) write(unit, '(/,a)', advance='no') repeat(indent, 1)
write(unit, jsonkey, advance='no') 'virial'
array = reshape(sigma, [size(sigma)])
call write_json_array(unit, array, indent)
end if
if (present(gradient)) then
write(unit, '(",")', advance='no')
if (allocated(indent)) write(unit, '(/,a)', advance='no') repeat(indent, 1)
write(unit, jsonkey, advance='no') 'gradient'
array = reshape(gradient, [size(gradient)])
call write_json_array(unit, array, indent)
end if
if (present(hessian)) then
write(unit, '(",")', advance='no')
if (allocated(indent)) write(unit, '(/,a)', advance='no') repeat(indent, 1)
write(unit, jsonkey, advance='no') 'hessian'
array = reshape(hessian, [size(hessian)])
call write_json_array(unit, array, indent)
end if
if (present(cn)) then
write(unit, '(",")', advance='no')
if (allocated(indent)) write(unit, '(/,a)', advance='no') repeat(indent, 1)
write(unit, jsonkey, advance='no') 'coordination numbers'
call write_json_array(unit, cn, indent)
end if
if (present(q)) then
write(unit, '(",")', advance='no')
if (allocated(indent)) write(unit, '(/,a)', advance='no') repeat(indent, 1)
write(unit, jsonkey, advance='no') 'partial charges'
call write_json_array(unit, q, indent)
end if
if (present(c6)) then
write(unit, '(",")', advance='no')
if (allocated(indent)) write(unit, '(/,a)', advance='no') repeat(indent, 1)
write(unit, jsonkey, advance='no') 'c6 coefficients'
array = reshape(c6, [size(c6)])
call write_json_array(unit, array, indent)
end if
if (present(alpha)) then
write(unit, '(",")', advance='no')
if (allocated(indent)) write(unit, '(/,a)', advance='no') repeat(indent, 1)
write(unit, jsonkey, advance='no') 'polarizibilities'
call write_json_array(unit, alpha, indent)
end if
if (present(pairwise_energy2)) then
write(unit, '(",")', advance='no')
if (allocated(indent)) write(unit, '(/,a)', advance='no') repeat(indent, 1)
write(unit, jsonkey, advance='no') 'additive pairwise energy'
array = reshape(pairwise_energy2, [size(pairwise_energy2)])
call write_json_array(unit, array, indent)
end if
if (present(pairwise_energy3)) then
write(unit, '(",")', advance='no')
if (allocated(indent)) write(unit, '(/,a)', advance='no') repeat(indent, 1)
write(unit, jsonkey, advance='no') 'non-additive pairwise energy'
array = reshape(pairwise_energy3, [size(pairwise_energy3)])
call write_json_array(unit, array, indent)
end if
if (allocated(indent)) write(unit, '(/)', advance='no')
write(unit, '("}")')
end subroutine json_results