Update coordinates and lattice parameters (quantities in Bohr)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(c_ptr), | value | :: | verror | |||
type(c_ptr), | value | :: | vmol | |||
real(kind=c_double), | intent(in) | :: | positions(3,*) | |||
real(kind=c_double), | intent(in), | optional | :: | lattice(3,3) |
subroutine update_structure_api(verror, vmol, positions, lattice) & & bind(C, name=namespace//"update_structure") !DEC$ ATTRIBUTES DLLEXPORT :: update_structure_api type(c_ptr), value :: verror type(vp_error), pointer :: error type(c_ptr), value :: vmol type(vp_structure), pointer :: mol real(c_double), intent(in) :: positions(3, *) real(c_double), intent(in), optional :: lattice(3, 3) if (debug) print'("[Info]",1x, a)', "update_structure" if (.not.c_associated(verror)) then return end if call c_f_pointer(verror, error) if (.not.c_associated(vmol)) then call fatal_error(error%ptr, "Molecular structure data is missing") return end if call c_f_pointer(vmol, mol) if (mol%ptr%nat <= 0 .or. mol%ptr%nid <= 0 .or. .not.allocated(mol%ptr%num) & & .or. .not.allocated(mol%ptr%id) .or. .not.allocated(mol%ptr%xyz)) then call fatal_error(error%ptr, "Invalid molecular structure data provided") return end if mol%ptr%xyz(:, :) = positions(:3, :mol%ptr%nat) if (present(lattice)) then mol%ptr%lattice(:, :) = lattice(:3, :3) end if call wrap_to_central_cell(mol%ptr%xyz, mol%ptr%lattice, mol%ptr%periodic) call verify_structure(error%ptr, mol%ptr) end subroutine update_structure_api