use std::vector.data() to access the underlying arrays

This commit is contained in:
Axel Kohlmeyer
2024-10-05 03:38:25 -04:00
parent ca6e9abefa
commit c3c5370570

View File

@ -562,7 +562,7 @@ void FixElectrodeConp::setup_post_neighbor()
if (mask[i] & group_bits[g]) { iele_to_group[tag_to_iele[tag[i]]] = g; } if (mask[i] & group_bits[g]) { iele_to_group[tag_to_iele[tag[i]]] = g; }
} }
} }
MPI_Allreduce(MPI_IN_PLACE, &iele_to_group.front(), ngroup, MPI_INT, MPI_MAX, world); MPI_Allreduce(MPI_IN_PLACE, iele_to_group.data(), ngroup, MPI_INT, MPI_MAX, world);
memory->destroy(elastance); memory->destroy(elastance);
memory->destroy(capacitance); memory->destroy(capacitance);
@ -666,8 +666,8 @@ void FixElectrodeConp::invert()
std::vector<double> work(lwork); std::vector<double> work(lwork);
int info_rf, info_ri; int info_rf, info_ri;
dgetrf_(&m, &n, &capacitance[0][0], &lda, &ipiv.front(), &info_rf); dgetrf_(&m, &n, &capacitance[0][0], &lda, ipiv.data(), &info_rf);
dgetri_(&n, &capacitance[0][0], &lda, &ipiv.front(), &work.front(), &lwork, &info_ri); dgetri_(&n, &capacitance[0][0], &lda, ipiv.data(), work.data(), &lwork, &info_ri);
if (info_rf != 0 || info_ri != 0) error->all(FLERR, "CONP matrix inversion failed!"); if (info_rf != 0 || info_ri != 0) error->all(FLERR, "CONP matrix inversion failed!");
MPI_Barrier(world); MPI_Barrier(world);
if (timer_flag && (comm->me == 0)) if (timer_flag && (comm->me == 0))
@ -734,7 +734,7 @@ void FixElectrodeConp::setup_pre_exchange() // create_taglist
for (int i = 1; i < nprocs; i++) { displs[i] = displs[i - 1] + recvcounts[i - 1]; } for (int i = 1; i < nprocs; i++) { displs[i] = displs[i - 1] + recvcounts[i - 1]; }
int const gnum = displs[nprocs - 1] + recvcounts[nprocs - 1]; int const gnum = displs[nprocs - 1] + recvcounts[nprocs - 1];
std::vector<tagint> taglist_all(gnum); std::vector<tagint> taglist_all(gnum);
MPI_Allgatherv(&taglist_local_group.front(), gnum_local, MPI_LMP_TAGINT, &taglist_all.front(), MPI_Allgatherv(taglist_local_group.data(), gnum_local, MPI_LMP_TAGINT, taglist_all.data(),
recvcounts, displs, MPI_LMP_TAGINT, world); recvcounts, displs, MPI_LMP_TAGINT, world);
std::sort(taglist_all.begin(), taglist_all.end()); std::sort(taglist_all.begin(), taglist_all.end());
for (tagint t : taglist_all) taglist_bygroup.push_back(t); for (tagint t : taglist_all) taglist_bygroup.push_back(t);
@ -820,7 +820,7 @@ void FixElectrodeConp::compute_sd_vectors_ffield()
} }
} }
for (int g = 0; g < num_of_groups; g++) { for (int g = 0; g < num_of_groups; g++) {
MPI_Allreduce(MPI_IN_PLACE, &sd_vectors[g].front(), ngroup, MPI_DOUBLE, MPI_SUM, world); MPI_Allreduce(MPI_IN_PLACE, sd_vectors[g].data(), ngroup, MPI_DOUBLE, MPI_SUM, world);
} }
} }
@ -879,7 +879,7 @@ void FixElectrodeConp::update_charges()
q_local[i_iele] = q_tmp; q_local[i_iele] = q_tmp;
sb_charges[iele_to_group[iele]] += q_tmp; sb_charges[iele_to_group[iele]] += q_tmp;
} }
MPI_Allreduce(MPI_IN_PLACE, &sb_charges.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world); MPI_Allreduce(MPI_IN_PLACE, sb_charges.data(), num_of_groups, MPI_DOUBLE, MPI_SUM, world);
update_psi(); // use for equal-style and conq update_psi(); // use for equal-style and conq
if (qtotal_var_style != VarStyle::UNSET) if (qtotal_var_style != VarStyle::UNSET)
update_psi_qtotal(); // use for qtotal; same for thermo update_psi_qtotal(); // use for qtotal; same for thermo
@ -981,7 +981,7 @@ std::vector<double> FixElectrodeConp::gather_ngroup(std::vector<double> x_local)
int const iele = list_iele[i]; int const iele = list_iele[i];
x[iele] = x_local[i]; x[iele] = x_local[i];
} }
MPI_Allreduce(MPI_IN_PLACE, &x.front(), ngroup, MPI_DOUBLE, MPI_SUM, world); MPI_Allreduce(MPI_IN_PLACE, x.data(), ngroup, MPI_DOUBLE, MPI_SUM, world);
return x; return x;
} }
@ -1135,8 +1135,8 @@ void FixElectrodeConp::compute_macro_matrices()
} }
int info_rf, info_ri; int info_rf, info_ri;
dgetrf_(&m, &n, &tmp.front(), &lda, &ipiv.front(), &info_rf); dgetrf_(&m, &n, tmp.data(), &lda, ipiv.data(), &info_rf);
dgetri_(&n, &tmp.front(), &lda, &ipiv.front(), &work.front(), &lwork, &info_ri); dgetri_(&n, tmp.data(), &lda, ipiv.data(), work.data(), &lwork, &info_ri);
if (info_rf != 0 || info_ri != 0) error->all(FLERR, "ELECTRODE macro matrix inversion failed!"); if (info_rf != 0 || info_ri != 0) error->all(FLERR, "ELECTRODE macro matrix inversion failed!");
for (int i = 0; i < num_of_groups; i++) { for (int i = 0; i < num_of_groups; i++) {
for (int j = 0; j < num_of_groups; j++) { for (int j = 0; j < num_of_groups; j++) {
@ -1433,8 +1433,8 @@ void FixElectrodeConp::request_etypes_neighlists()
else else
elyt[type[i] - 1] += 1; elyt[type[i] - 1] += 1;
} }
MPI_Allreduce(MPI_IN_PLACE, &elec.front(), ntypes, MPI_INT, MPI_SUM, world); MPI_Allreduce(MPI_IN_PLACE, elec.data(), ntypes, MPI_INT, MPI_SUM, world);
MPI_Allreduce(MPI_IN_PLACE, &elyt.front(), ntypes, MPI_INT, MPI_SUM, world); MPI_Allreduce(MPI_IN_PLACE, elyt.data(), ntypes, MPI_INT, MPI_SUM, world);
etypes.clear(); etypes.clear();
for (int i = 0; i < ntypes; i++) { for (int i = 0; i < ntypes; i++) {
if (!elec[i] == !elyt[i]) error->all(FLERR, "Types overlap, cannot use etypes keyword"); if (!elec[i] == !elyt[i]) error->all(FLERR, "Types overlap, cannot use etypes keyword");