json_results Subroutine

public subroutine json_results(unit, indentation, energy, gradient, sigma, hessian, cn, q, c6, alpha, pairwise_energy2, pairwise_energy3)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: unit
character(len=*), intent(in), optional :: indentation
real(kind=wp), intent(in), optional :: energy
real(kind=wp), intent(in), optional :: gradient(:,:)
real(kind=wp), intent(in), optional :: sigma(:,:)
real(kind=wp), intent(in), optional :: hessian(:,:,:,:)
real(kind=wp), intent(in), optional :: cn(:)
real(kind=wp), intent(in), optional :: q(:)
real(kind=wp), intent(in), optional :: c6(:,:)
real(kind=wp), intent(in), optional :: alpha(:)
real(kind=wp), intent(in), optional :: pairwise_energy2(:,:)
real(kind=wp), intent(in), optional :: pairwise_energy3(:,:)

Source Code

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") "polarizabilities"
      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