Construct a Wigner-Seitz cell for a molecular structure
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(wignerseitz_cell), | intent(out) | :: | self |
Wigner-Seitz cell instance |
||
| type(structure_type), | intent(in) | :: | mol |
Molecular structure data |
subroutine new_wignerseitz_cell(self, mol) !> Wigner-Seitz cell instance type(wignerseitz_cell), intent(out) :: self !> Molecular structure data type(structure_type), intent(in) :: mol integer :: iat, jat, ntr, nimg integer, allocatable :: tridx(:) real(wp) :: vec(3) real(wp), allocatable :: trans(:, :) call get_lattice_points(mol%periodic, mol%lattice, thr, trans) ntr = size(trans, 2) allocate(self%nimg(mol%nat, mol%nat), self%tridx(ntr, mol%nat, mol%nat), & & tridx(ntr)) !$omp parallel do default(none) schedule(runtime) collapse(2) & !$omp& shared(mol, trans, self) private(iat, jat, vec, nimg, tridx) do iat = 1, mol%nat do jat = 1, mol%nat vec(:) = mol%xyz(:, iat) - mol%xyz(:, jat) call get_pairs(nimg, trans, vec, tridx) self%nimg(jat, iat) = nimg self%tridx(:, jat, iat) = tridx end do end do if (mol%nat > 0) self%nimg_max = maxval(self%nimg) call move_alloc(trans, self%trans) end subroutine new_wignerseitz_cell