Skip to content

Commit

Permalink
Parallelization bugs removed
Browse files Browse the repository at this point in the history
  • Loading branch information
juerghutter committed Mar 19, 2019
1 parent 99c43e5 commit 5dbef76
Show file tree
Hide file tree
Showing 10 changed files with 722 additions and 2 deletions.
65 changes: 64 additions & 1 deletion src/qs_dispersion_pairpot.F
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ MODULE qs_dispersion_pairpot
USE mathconstants, ONLY: twopi
USE memory_utilities, ONLY: reallocate
USE message_passing, ONLY: mp_bcast,&
mp_allgather,&
mp_max,&
mp_shift,&
mp_sum
Expand Down Expand Up @@ -96,7 +97,7 @@ MODULE qs_dispersion_pairpot
REAL(KIND=dp), DIMENSION(:, :), POINTER :: rik
END TYPE dcnum_type

PUBLIC :: d3_cnumber, dcnum_type
PUBLIC :: d3_cnumber, dcnum_type, d3_cnumber_bcast

! **************************************************************************************************

Expand Down Expand Up @@ -3152,5 +3153,67 @@ SUBROUTINE d3_cnumber(qs_env, dispersion_env, cnumbers, dcnum, ghost, floating,
END SUBROUTINE d3_cnumber

! **************************************************************************************************
!> \brief Broadcast the DCNUM array to all processes (sum up results)
!> \param dcnum ...
!> \param para_env ...
! **************************************************************************************************
SUBROUTINE d3_cnumber_bcast(dcnum, para_env)
TYPE(dcnum_type), DIMENSION(:), INTENT(INOUT) :: dcnum
TYPE(cp_para_env_type), POINTER :: para_env

CHARACTER(LEN=*), PARAMETER :: routineN = 'd3_cnumber', routineP = moduleN//':'//routineN

INTEGER :: iatom, natom, np, ne, nn, ntot, jn, j, ip
INTEGER, ALLOCATABLE, DIMENSION(:) :: nne, nl1
INTEGER, ALLOCATABLE, DIMENSION(:,:) :: nlist
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: dv1
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:,:) :: dvals, r1
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:,:,:) :: rik

np = para_env%num_pe
IF(np > 1) THEN
natom = SIZE(dcnum)
ALLOCATE(nne(np))
DO iatom=1,natom
ne = dcnum(iatom)%neighbors
CALL mp_allgather(ne, nne, para_env%group)
nn = MAXVAL(nne)
ALLOCATE(nlist(nn,np),nl1(nn))
nl1 = 0
nl1(1:ne) = dcnum(iatom)%nlist(1:ne)
CALL mp_allgather(nl1, nlist, para_env%group)
ALLOCATE(dvals(nn,np),dv1(nn))
dv1 = 0.0_dp
dv1(1:ne) = dcnum(iatom)%dvals(1:ne)
CALL mp_allgather(dv1, dvals, para_env%group)
ALLOCATE(rik(3,nn,np),r1(3,nn))
r1 = 0.0_dp
r1(1:3,1:ne) = dcnum(iatom)%rik(1:3,1:ne)
CALL mp_allgather(r1, rik, para_env%group)
!
ntot = SUM(nne)
!
dcnum(iatom)%neighbors = ntot
CALL reallocate(dcnum(iatom)%nlist, 1, ntot)
CALL reallocate(dcnum(iatom)%dvals, 1, ntot)
CALL reallocate(dcnum(iatom)%rik, 1, 3, 1, ntot)
!
jn = 0
DO ip=1,np
DO j=1,nne(ip)
jn = jn + 1
dcnum(iatom)%nlist(jn) = nlist(j,ip)
dcnum(iatom)%dvals(jn) = dvals(j,ip)
dcnum(iatom)%rik(1:3,jn) = rik(1:3,j,ip)
END DO
END DO
!
DEALLOCATE(nlist,dvals,rik,nl1,dv1,r1)
END DO
DEALLOCATE(nne)
END IF

END SUBROUTINE d3_cnumber_bcast
! **************************************************************************************************

END MODULE qs_dispersion_pairpot
31 changes: 30 additions & 1 deletion src/xtb_matrices.F
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,12 @@ MODULE xtb_matrices
USE kinds, ONLY: dp
USE kpoint_types, ONLY: get_kpoint_info,&
kpoint_type
USE message_passing, ONLY: mp_sum
USE message_passing, ONLY: mp_sum, mp_minloc, mp_wait
USE mulliken, ONLY: ao_charges
USE orbital_pointers, ONLY: ncoset
USE particle_types, ONLY: particle_type
USE qs_dispersion_pairpot, ONLY: d3_cnumber,&
d3_cnumber_bcast,&
dcnum_type
USE qs_dispersion_types, ONLY: qs_dispersion_type
USE qs_energy_types, ONLY: qs_energy_type
Expand Down Expand Up @@ -298,6 +299,10 @@ SUBROUTINE build_xtb_matrices(qs_env, para_env, calculate_forces)
CALL d3_cnumber(qs_env, dispersion_env, cnumbers, dcnum, ghost, floating, atomnumber, &
calculate_forces, .FALSE.)
DEALLOCATE (ghost, floating, atomnumber)
CALL mp_sum(cnumbers, para_env%group)
IF (calculate_forces) THEN
CALL d3_cnumber_bcast(dcnum, para_env)
END IF

! Calculate Huckel parameters
! Eq 12
Expand Down Expand Up @@ -1058,11 +1063,35 @@ SUBROUTINE xb_neighbors(neighbor_atoms, para_env)
CHARACTER(len=*), PARAMETER :: routineN = 'xb_neighbors', routineP = moduleN//':'//routineN

INTEGER :: nkind, ikind, iatom, natom
INTEGER, DIMENSION(:), ALLOCATABLE :: matom
REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: dmloc, rab
REAL(KIND=dp), DIMENSION(:,:), ALLOCATABLE :: coord

nkind = SIZE(neighbor_atoms)
DO ikind = 1,nkind
IF(ASSOCIATED(neighbor_atoms(ikind)%rab)) THEN
natom = SIZE(neighbor_atoms(ikind)%rab)
ALLOCATE(dmloc(2*natom),matom(natom),coord(3,natom))
dmloc = 0.0_dp
DO iatom=1,natom
dmloc(2*iatom-1) = neighbor_atoms(ikind)%rab(iatom)
dmloc(2*iatom) = REAL(para_env%mepos,KIND=dp)
END DO
CALL mp_minloc(dmloc,para_env%group)
coord = 0.0_dp
matom = 0
DO iatom=1,natom
neighbor_atoms(ikind)%rab(iatom) = dmloc(2*iatom-1)
IF(NINT(dmloc(2*iatom)) == para_env%mepos) THEN
coord(1:3,iatom) = neighbor_atoms(ikind)%coord(1:3,iatom)
matom(iatom) = neighbor_atoms(ikind)%katom(iatom)
END IF
END DO
CALL mp_sum(coord,para_env%group)
neighbor_atoms(ikind)%coord(1:3,:) = coord(1:3,:)
CALL mp_sum(matom,para_env%group)
neighbor_atoms(ikind)%katom(:) = matom(:)
DEALLOCATE(dmloc,matom,coord)
END IF
END DO

Expand Down
1 change: 1 addition & 0 deletions tests/xTB/regtest-1/ch2o.inp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
&QS
METHOD xTB
&xTB
COULOMB_INTERACTION T
&PARAMETER
DISPERSION_PARAMETER_FILE dftd3.dat
&END PARAMETER
Expand Down
38 changes: 38 additions & 0 deletions tests/xTB/regtest-1/ch2o_geo.inp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
&FORCE_EVAL
&DFT
&QS
METHOD xTB
&xTB
&PARAMETER
DISPERSION_PARAMETER_FILE dftd3.dat
&END PARAMETER
&END XTB
&END QS
&SCF
SCF_GUESS MOPAC
MAX_SCF 100
EPS_SCF 1.e-7
&MIXING
METHOD DIRECT_P_MIXING
ALPHA 0.2
&END
&END SCF
&END DFT
&SUBSYS
&CELL
ABC 20.0 20.0 20.0
PERIODIC NONE
&END CELL
&COORD
O 0.051368 0.000000 0.000000
C 1.278612 0.000000 0.000000
H 1.870460 0.939607 0.000000
H 1.870460 -0.939607 0.000000
&END COORD
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
PROJECT CH2O
RUN_TYPE GEO_OPT
PRINT_LEVEL LOW
&END GLOBAL
163 changes: 163 additions & 0 deletions tests/xTB/regtest-1/h2o-atprop.inp
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
&FORCE_EVAL
STRESS_TENSOR ANALYTICAL
&PROPERTIES
&ATOMIC
ENERGY
PRESSURE
&END ATOMIC
&END PROPERTIES
&DFT
&QS
METHOD xTB
&xTB
DO_EWALD T
&PARAMETER
DISPERSION_PARAMETER_FILE dftd3.dat
&END PARAMETER
&END
&END QS
&SCF
SCF_GUESS CORE
&MIXING
METHOD DIRECT_P_MIXING
ALPHA 0.75
&END
MAX_SCF 20
&END SCF
&POISSON
&EWALD
EWALD_TYPE SPME
GMAX 45
O_SPLINE 8
&END EWALD
&END POISSON
&END DFT
&SUBSYS
&CELL
ABC 9.865 9.865 9.865
&END CELL
&COORD
O -4.583 5.333 1.560 H2O
H -3.777 5.331 0.943 H2O
H -5.081 4.589 1.176 H2O
O -0.083 4.218 0.070 H2O
H -0.431 3.397 0.609 H2O
H 0.377 3.756 -0.688 H2O
O -1.488 2.692 4.125 H2O
H -2.465 2.433 3.916 H2O
H -1.268 2.145 4.952 H2O
O -2.461 -2.548 -6.136 H2O
H -1.892 -2.241 -6.921 H2O
H -1.970 -3.321 -5.773 H2O
O 4.032 0.161 2.183 H2O
H 4.272 -0.052 1.232 H2O
H 4.044 -0.760 2.641 H2O
O 2.950 -3.497 -1.006 H2O
H 2.599 -3.901 -0.129 H2O
H 3.193 -4.283 -1.533 H2O
O -2.890 -4.797 -2.735 H2O
H -2.810 -5.706 -2.297 H2O
H -2.437 -4.128 -2.039 H2O
O -0.553 0.922 -3.731 H2O
H -0.163 1.552 -3.085 H2O
H -1.376 0.544 -3.469 H2O
O 4.179 4.017 4.278 H2O
H 3.275 3.832 3.876 H2O
H 4.658 4.492 3.572 H2O
O 5.739 1.425 3.944 H2O
H 5.125 2.066 4.346 H2O
H 5.173 1.181 3.097 H2O
O 0.988 -0.760 -5.445 H2O
H 1.640 -1.372 -4.989 H2O
H 0.546 -0.220 -4.762 H2O
O -0.748 1.985 1.249 H2O
H -0.001 1.490 1.540 H2O
H -1.160 2.255 2.109 H2O
O 4.127 -0.234 -3.149 H2O
H 5.022 -0.436 -3.428 H2O
H 3.540 -0.918 -3.601 H2O
O -2.473 2.768 -1.395 H2O
H -1.533 2.719 -1.214 H2O
H -2.702 1.808 -1.479 H2O
O -0.124 -2.116 2.404 H2O
H 0.612 -2.593 2.010 H2O
H 0.265 -1.498 3.089 H2O
O 0.728 2.823 -2.190 H2O
H 0.646 3.694 -2.685 H2O
H 1.688 2.705 -1.947 H2O
O 4.256 -5.427 -2.644 H2O
H 5.222 -5.046 -2.479 H2O
H 4.174 -5.628 -3.593 H2O
O -3.178 -0.508 -4.227 H2O
H -2.762 -1.221 -4.818 H2O
H -3.603 0.073 -4.956 H2O
O -1.449 5.300 -4.805 H2O
H -1.397 4.470 -5.317 H2O
H -2.102 5.091 -4.067 H2O
O 3.354 2.192 -1.755 H2O
H 3.407 1.433 -2.405 H2O
H 3.971 2.958 -2.196 H2O
O 1.773 -4.018 1.769 H2O
H 1.121 -4.532 1.201 H2O
H 1.975 -4.529 2.618 H2O
O 1.526 1.384 2.712 H2O
H 2.317 1.070 2.251 H2O
H 1.353 0.657 3.364 H2O
O 2.711 -2.398 -4.253 H2O
H 2.202 -3.257 -4.120 H2O
H 3.305 -2.610 -5.099 H2O
O 6.933 0.093 -1.393 H2O
H 6.160 -0.137 -0.795 H2O
H 6.748 -0.394 -2.229 H2O
O -5.605 -2.549 3.151 H2O
H -4.756 -2.503 3.616 H2O
H -5.473 -3.187 2.378 H2O
O 0.821 -4.406 6.516 H2O
H 0.847 -3.675 7.225 H2O
H -0.014 -4.240 5.988 H2O
O 1.577 3.933 3.762 H2O
H 1.221 2.975 3.640 H2O
H 1.367 4.126 4.659 H2O
O -2.111 -3.741 -0.219 H2O
H -1.378 -4.425 -0.036 H2O
H -1.825 -2.775 0.003 H2O
O 0.926 -1.961 -2.063 H2O
H 0.149 -1.821 -1.402 H2O
H 1.725 -2.303 -1.536 H2O
O 4.531 -1.030 -0.547 H2O
H 4.290 -1.980 -0.581 H2O
H 4.292 -0.597 -1.390 H2O
O -0.740 -1.262 -0.029 H2O
H -1.272 -0.422 -0.099 H2O
H -0.403 -1.349 0.873 H2O
O 3.655 3.021 0.988 H2O
H 2.706 3.053 1.282 H2O
H 3.542 2.615 0.020 H2O
&END COORD
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
PROJECT h2o
RUN_TYPE MD
PRINT_LEVEL LOW
&END GLOBAL
&MOTION
&MD
ENSEMBLE NPT_I
STEPS 5
TIMESTEP 0.48
TEMPERATURE 330.0
&THERMOSTAT
&NOSE
LENGTH 3
YOSHIDA 3
TIMECON [wavenumber_t] 2000
MTS 2
&END NOSE
&END
&BAROSTAT
PRESSURE 1.0
TIMECON 300
&END BAROSTAT
&END MD
&END MOTION

0 comments on commit 5dbef76

Please sign in to comment.