Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | unit |
Unit for output |
||
class(structure_type), | intent(in) | :: | mol |
Molecular structure data |
||
real(kind=wp), | intent(in) | :: | pair_disp2(:,:) | |||
real(kind=wp), | intent(in) | :: | pair_disp3(:,:) |
subroutine ascii_pairwise(unit, mol, pair_disp2, pair_disp3) !DEC$ ATTRIBUTES DLLEXPORT :: ascii_pairwise !> Unit for output integer, intent(in) :: unit !> Molecular structure data class(structure_type), intent(in) :: mol real(wp), intent(in) :: pair_disp2(:, :) real(wp), intent(in) :: pair_disp3(:, :) integer :: iat, jat, isp, jsp real(wp) :: disp, e2, e3 e2 = 0.0_wp e3 = 0.0_wp write(unit, '(a,":")') "Pairwise representation of dispersion (in kcal/mol)" write(unit, '(82("-"))') write(unit, '(2(a6,1x,a4,5x),*(1x,a10:,1x,a7))') & "#", "Z", "#", "Z", "additive", "(rel.)", "non-add.", "(rel.)", "total" write(unit, '(82("-"))') do iat = 1, mol%nat isp = mol%id(iat) do jat = 1, mol%nat jsp = mol%id(jat) e2 = e2 + pair_disp2(jat, iat) e3 = e3 + pair_disp3(jat, iat) disp = pair_disp2(jat, iat) + pair_disp3(jat, iat) if (abs(disp) < epsilon(disp)) cycle write(unit, '(2(i6,1x,i4,1x,a4),*(1x,es10.2:,1x,"(",i4,"%)"))') & & iat, mol%num(isp), mol%sym(isp), & & jat, mol%num(jsp), mol%sym(jsp), & & pair_disp2(jat, iat) * autokcal, nint(pair_disp2(jat, iat)/disp*100), & & pair_disp3(jat, iat) * autokcal, nint(pair_disp3(jat, iat)/disp*100), & & disp * autokcal end do end do write(unit, '(82("-"))') disp = e2 + e3 write(unit, '(1x, a, t33,*(1x,es10.2:,1x,"(",i4,"%)"))') & & "total dispersion energy", & & e2 * autokcal, nint(e2/disp*100), & & e3 * autokcal, nint(e3/disp*100), & & disp * autokcal write(unit, '(82("-"))') write(unit, '(a)') end subroutine ascii_pairwise