Merge pull request #3064 from rbberger/collected-small-changes
Collected small changes and fixes
This commit is contained in:
@ -339,7 +339,6 @@ pkg_depends(ML-IAP ML-SNAP)
|
|||||||
pkg_depends(MPIIO MPI)
|
pkg_depends(MPIIO MPI)
|
||||||
pkg_depends(ATC MANYBODY)
|
pkg_depends(ATC MANYBODY)
|
||||||
pkg_depends(LATBOLTZ MPI)
|
pkg_depends(LATBOLTZ MPI)
|
||||||
pkg_depends(PHONON KSPACE)
|
|
||||||
pkg_depends(SCAFACOS MPI)
|
pkg_depends(SCAFACOS MPI)
|
||||||
pkg_depends(DIELECTRIC KSPACE)
|
pkg_depends(DIELECTRIC KSPACE)
|
||||||
pkg_depends(DIELECTRIC EXTRA-PAIR)
|
pkg_depends(DIELECTRIC EXTRA-PAIR)
|
||||||
@ -609,7 +608,7 @@ endif()
|
|||||||
# packages which selectively include variants based on enabled styles
|
# packages which selectively include variants based on enabled styles
|
||||||
# e.g. accelerator packages
|
# e.g. accelerator packages
|
||||||
######################################################################
|
######################################################################
|
||||||
foreach(PKG_WITH_INCL CORESHELL QEQ OPENMP DPD-SMOOTH KOKKOS OPT INTEL GPU)
|
foreach(PKG_WITH_INCL CORESHELL DPD-SMOOTH PHONON QEQ OPENMP KOKKOS OPT INTEL GPU)
|
||||||
if(PKG_${PKG_WITH_INCL})
|
if(PKG_${PKG_WITH_INCL})
|
||||||
include(Packages/${PKG_WITH_INCL})
|
include(Packages/${PKG_WITH_INCL})
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
9
cmake/Modules/Packages/PHONON.cmake
Normal file
9
cmake/Modules/Packages/PHONON.cmake
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# fix phonon may only be installed if also the FFT wrappers from KSPACE are installed
|
||||||
|
if(NOT PKG_KSPACE)
|
||||||
|
get_property(LAMMPS_FIX_HEADERS GLOBAL PROPERTY FIX)
|
||||||
|
list(REMOVE_ITEM LAMMPS_FIX_HEADERS ${LAMMPS_SOURCE_DIR}/PHONON/fix_phonon.h)
|
||||||
|
set_property(GLOBAL PROPERTY FIX "${LAMMPS_FIX_HEADERS}")
|
||||||
|
get_target_property(LAMMPS_SOURCES lammps SOURCES)
|
||||||
|
list(REMOVE_ITEM LAMMPS_SOURCES ${LAMMPS_SOURCE_DIR}/PHONON/fix_phonon.cpp)
|
||||||
|
set_property(TARGET lammps PROPERTY SOURCES "${LAMMPS_SOURCES}")
|
||||||
|
endif()
|
||||||
@ -1880,6 +1880,12 @@ MPIIO library. It adds :doc:`dump styles <dump>` with a "mpiio" in
|
|||||||
their style name. Restart files with an ".mpiio" suffix are also
|
their style name. Restart files with an ".mpiio" suffix are also
|
||||||
written and read in parallel.
|
written and read in parallel.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
The MPIIO package is currently unmaintained and has become
|
||||||
|
unreliable. Use with caution.
|
||||||
|
|
||||||
|
|
||||||
**Install:**
|
**Install:**
|
||||||
|
|
||||||
The MPIIO package requires that LAMMPS is build in :ref:`MPI parallel mode <serial>`.
|
The MPIIO package requires that LAMMPS is build in :ref:`MPI parallel mode <serial>`.
|
||||||
|
|||||||
@ -137,7 +137,7 @@ Examples
|
|||||||
dump myDump all atom/gz 100 dump.atom.gz
|
dump myDump all atom/gz 100 dump.atom.gz
|
||||||
dump myDump all atom/zstd 100 dump.atom.zst
|
dump myDump all atom/zstd 100 dump.atom.zst
|
||||||
dump 2 subgroup atom 50 dump.run.bin
|
dump 2 subgroup atom 50 dump.run.bin
|
||||||
dump 2 subgroup atom 50 dump.run.mpiio.bin
|
dump 2 subgroup atom/mpiio 50 dump.run.mpiio.bin
|
||||||
dump 4a all custom 100 dump.myforce.* id type x y vx fx
|
dump 4a all custom 100 dump.myforce.* id type x y vx fx
|
||||||
dump 4b flow custom 100 dump.%.myforce id type c_myF[3] v_ke
|
dump 4b flow custom 100 dump.%.myforce id type c_myF[3] v_ke
|
||||||
dump 4b flow custom 100 dump.%.myforce id type c_myF[*] v_ke
|
dump 4b flow custom 100 dump.%.myforce id type c_myF[*] v_ke
|
||||||
@ -219,6 +219,11 @@ you should thus consider the *atom* and *atom/mpiio* styles (etc) to
|
|||||||
be inter-changeable. The one exception is how the filename is
|
be inter-changeable. The one exception is how the filename is
|
||||||
specified for the MPI-IO styles, as explained below.
|
specified for the MPI-IO styles, as explained below.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
The MPIIO package is currently unmaintained and has become
|
||||||
|
unreliable. Use with caution.
|
||||||
|
|
||||||
The precision of values output to text-based dump files can be
|
The precision of values output to text-based dump files can be
|
||||||
controlled by the :doc:`dump_modify format <dump_modify>` command and
|
controlled by the :doc:`dump_modify format <dump_modify>` command and
|
||||||
its options.
|
its options.
|
||||||
@ -452,6 +457,11 @@ use the :doc:`read_dump <read_dump>` command or perform other
|
|||||||
post-processing, just as if the dump file was not written using
|
post-processing, just as if the dump file was not written using
|
||||||
MPI-IO.
|
MPI-IO.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
The MPIIO package is currently unmaintained and has become
|
||||||
|
unreliable. Use with caution.
|
||||||
|
|
||||||
Note that MPI-IO dump files are one large file which all processors
|
Note that MPI-IO dump files are one large file which all processors
|
||||||
write to. You thus cannot use the "%" wildcard character described
|
write to. You thus cannot use the "%" wildcard character described
|
||||||
above in the filename since that specifies generation of multiple
|
above in the filename since that specifies generation of multiple
|
||||||
|
|||||||
@ -504,8 +504,7 @@ void FixGCMC::init()
|
|||||||
int flagall;
|
int flagall;
|
||||||
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
|
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
|
||||||
if (flagall && comm->me == 0)
|
if (flagall && comm->me == 0)
|
||||||
error->all(FLERR,
|
error->all(FLERR, "Fix gcmc cannot exchange individual atoms belonging to a molecule");
|
||||||
"Fix gcmc cannot exchange individual atoms belonging to a molecule");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if molecules are exchanged or moved, check for unset mol IDs
|
// if molecules are exchanged or moved, check for unset mol IDs
|
||||||
@ -520,16 +519,13 @@ void FixGCMC::init()
|
|||||||
int flagall;
|
int flagall;
|
||||||
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
|
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
|
||||||
if (flagall && comm->me == 0)
|
if (flagall && comm->me == 0)
|
||||||
error->all(FLERR,
|
error->all(FLERR, "All mol IDs should be set for fix gcmc group atoms");
|
||||||
"All mol IDs should be set for fix gcmc group atoms");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exchmode == EXCHMOL || movemode == MOVEMOL)
|
if (exchmode == EXCHMOL || movemode == MOVEMOL)
|
||||||
if (atom->molecule_flag == 0 || !atom->tag_enable
|
if (atom->molecule_flag == 0 || !atom->tag_enable
|
||||||
|| (atom->map_style == Atom::MAP_NONE))
|
|| (atom->map_style == Atom::MAP_NONE))
|
||||||
error->all(FLERR,
|
error->all(FLERR, "Fix gcmc molecule command requires that atoms have molecule attributes");
|
||||||
"Fix gcmc molecule command requires that "
|
|
||||||
"atoms have molecule attributes");
|
|
||||||
|
|
||||||
// if rigidflag defined, check for rigid/small fix
|
// if rigidflag defined, check for rigid/small fix
|
||||||
// its molecule template must be same as this one
|
// its molecule template must be same as this one
|
||||||
@ -541,9 +537,7 @@ void FixGCMC::init()
|
|||||||
fixrigid = modify->fix[ifix];
|
fixrigid = modify->fix[ifix];
|
||||||
int tmp;
|
int tmp;
|
||||||
if (&onemols[imol] != (Molecule **) fixrigid->extract("onemol",tmp))
|
if (&onemols[imol] != (Molecule **) fixrigid->extract("onemol",tmp))
|
||||||
error->all(FLERR,
|
error->all(FLERR, "Fix gcmc and fix rigid/small not using same molecule template ID");
|
||||||
"Fix gcmc and fix rigid/small not using "
|
|
||||||
"same molecule template ID");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if shakeflag defined, check for SHAKE fix
|
// if shakeflag defined, check for SHAKE fix
|
||||||
|
|||||||
@ -310,16 +310,13 @@ void FixWidom::init()
|
|||||||
int flagall;
|
int flagall;
|
||||||
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
|
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
|
||||||
if (flagall && comm->me == 0)
|
if (flagall && comm->me == 0)
|
||||||
error->all(FLERR,
|
error->all(FLERR, "All mol IDs should be set for fix widom group atoms");
|
||||||
"All mol IDs should be set for fix widom group atoms");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exchmode == EXCHMOL)
|
if (exchmode == EXCHMOL)
|
||||||
if (atom->molecule_flag == 0 || !atom->tag_enable
|
if (atom->molecule_flag == 0 || !atom->tag_enable
|
||||||
|| (atom->map_style == Atom::MAP_NONE))
|
|| (atom->map_style == Atom::MAP_NONE))
|
||||||
error->all(FLERR,
|
error->all(FLERR, "Fix widom molecule command requires that atoms have molecule attributes");
|
||||||
"Fix widom molecule command requires that "
|
|
||||||
"atoms have molecule attributes");
|
|
||||||
|
|
||||||
if (domain->dimension == 2)
|
if (domain->dimension == 2)
|
||||||
error->all(FLERR,"Cannot use fix widom in a 2d simulation");
|
error->all(FLERR,"Cannot use fix widom in a 2d simulation");
|
||||||
|
|||||||
@ -1072,10 +1072,10 @@ void FixCMAP::read_data_header(char *line)
|
|||||||
store CMAP interactions as if newton_bond = OFF, even if actually ON
|
store CMAP interactions as if newton_bond = OFF, even if actually ON
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void FixCMAP::read_data_section(char *keyword, int n, char *buf,
|
void FixCMAP::read_data_section(char * /*keyword*/, int /*n*/, char *buf,
|
||||||
tagint id_offset)
|
tagint id_offset)
|
||||||
{
|
{
|
||||||
int m,tmp,itype;
|
int m,itype;
|
||||||
tagint atom1,atom2,atom3,atom4,atom5;
|
tagint atom1,atom2,atom3,atom4,atom5;
|
||||||
|
|
||||||
auto lines = utils::split_lines(buf);
|
auto lines = utils::split_lines(buf);
|
||||||
|
|||||||
@ -38,7 +38,12 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
DumpAtomMPIIO::DumpAtomMPIIO(LAMMPS *lmp, int narg, char **arg) : DumpAtom(lmp, narg, arg) {}
|
DumpAtomMPIIO::DumpAtomMPIIO(LAMMPS *lmp, int narg, char **arg)
|
||||||
|
: DumpAtom(lmp, narg, arg)
|
||||||
|
{
|
||||||
|
if (me == 0)
|
||||||
|
error->warning(FLERR,"MPI-IO output is unmaintained and unreliable. Use with caution.");
|
||||||
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|||||||
@ -51,7 +51,11 @@ using namespace LAMMPS_NS;
|
|||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
DumpCFGMPIIO::DumpCFGMPIIO(LAMMPS *lmp, int narg, char **arg) :
|
DumpCFGMPIIO::DumpCFGMPIIO(LAMMPS *lmp, int narg, char **arg) :
|
||||||
DumpCFG(lmp, narg, arg) {}
|
DumpCFG(lmp, narg, arg)
|
||||||
|
{
|
||||||
|
if (me == 0)
|
||||||
|
error->warning(FLERR,"MPI-IO output is unmaintained and unreliable. Use with caution.");
|
||||||
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|||||||
@ -53,7 +53,12 @@ enum{ LT, LE, GT, GE, EQ, NEQ };
|
|||||||
// clang-format on
|
// clang-format on
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
DumpCustomMPIIO::DumpCustomMPIIO(LAMMPS *lmp, int narg, char **arg) : DumpCustom(lmp, narg, arg) {}
|
DumpCustomMPIIO::DumpCustomMPIIO(LAMMPS *lmp, int narg, char **arg)
|
||||||
|
: DumpCustom(lmp, narg, arg)
|
||||||
|
{
|
||||||
|
if (me == 0)
|
||||||
|
error->warning(FLERR,"MPI-IO output is unmaintained and unreliable. Use with caution.");
|
||||||
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,10 @@ enum{LT,LE,GT,GE,EQ,NEQ};
|
|||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
DumpXYZMPIIO::DumpXYZMPIIO(LAMMPS *lmp, int narg, char **arg) :
|
DumpXYZMPIIO::DumpXYZMPIIO(LAMMPS *lmp, int narg, char **arg) :
|
||||||
DumpXYZ(lmp, narg, arg) {}
|
DumpXYZ(lmp, narg, arg) {
|
||||||
|
if (me == 0)
|
||||||
|
error->warning(FLERR,"MPI-IO output is unmaintained and unreliable. Use with caution.");
|
||||||
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|||||||
@ -26,16 +26,6 @@ action () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# PHONON uses the parallel FFT wrapper used in PPPM,
|
|
||||||
# so we must require the KSPACE package to be installed.
|
|
||||||
|
|
||||||
if (test $1 = 1) then
|
|
||||||
if (test ! -e ../fft3d_wrap.h) then
|
|
||||||
echo "Must install KSPACE package with PHONON"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# list of files with optional dependcies
|
# list of files with optional dependcies
|
||||||
|
|
||||||
action fix_phonon.cpp fft3d_wrap.h
|
action fix_phonon.cpp fft3d_wrap.h
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
// clang-format off
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
https://www.lammps.org/, Sandia National Laboratories
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
@ -247,8 +246,8 @@ FixReaxFFSpecies::~FixReaxFFSpecies()
|
|||||||
if (posflag && multipos_opened) fclose(pos);
|
if (posflag && multipos_opened) fclose(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
modify->delete_compute("SPECATOM");
|
modify->delete_compute(fmt::format("SPECATOM_{}",id));
|
||||||
modify->delete_fix("SPECBOND");
|
modify->delete_fix(fmt::format("SPECBOND_{}",id));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -288,22 +287,16 @@ void FixReaxFFSpecies::init()
|
|||||||
if (nvalid != update->ntimestep)
|
if (nvalid != update->ntimestep)
|
||||||
nvalid = update->ntimestep+nfreq;
|
nvalid = update->ntimestep+nfreq;
|
||||||
|
|
||||||
// check if this fix has been called twice
|
|
||||||
int count = 0;
|
|
||||||
for (int i = 0; i < modify->nfix; i++)
|
|
||||||
if (strcmp(modify->fix[i]->style,"reaxff/species") == 0) count++;
|
|
||||||
if (count > 1 && comm->me == 0)
|
|
||||||
error->warning(FLERR,"More than one fix reaxff/species");
|
|
||||||
|
|
||||||
if (!setupflag) {
|
if (!setupflag) {
|
||||||
// create a compute to store properties
|
// create a compute to store properties
|
||||||
modify->add_compute("SPECATOM all SPEC/ATOM q x y z vx vy vz abo01 abo02 abo03 abo04 "
|
modify->add_compute(fmt::format("SPECATOM_{} all SPEC/ATOM q x y z vx vy vz abo01 abo02 "
|
||||||
"abo05 abo06 abo07 abo08 abo09 abo10 abo11 abo12 abo13 abo14 "
|
"abo03 abo04 abo05 abo06 abo07 abo08 abo09 abo10 abo11 "
|
||||||
"abo15 abo16 abo17 abo18 abo19 abo20 abo21 abo22 abo23 abo24");
|
"abo12 abo13 abo14 abo15 abo16 abo17 abo18 abo19 abo20 "
|
||||||
|
"abo21 abo22 abo23 abo24",id));
|
||||||
|
|
||||||
// create a fix to point to fix_ave_atom for averaging stored properties
|
// create a fix to point to fix_ave_atom for averaging stored properties
|
||||||
auto fixcmd = fmt::format("SPECBOND all ave/atom {} {} {}",nevery,nrepeat,nfreq);
|
auto fixcmd = fmt::format("SPECBOND_{} all ave/atom {} {} {}",id,nevery,nrepeat,nfreq);
|
||||||
for (int i = 1; i < 32; ++i) fixcmd += " c_SPECATOM[" + std::to_string(i) + "]";
|
for (int i = 1; i < 32; ++i) fixcmd += fmt::format(" c_SPECATOM_{}[{}]",id,i);
|
||||||
f_SPECBOND = (FixAveAtom *) modify->add_fix(fixcmd);
|
f_SPECBOND = (FixAveAtom *) modify->add_fix(fixcmd);
|
||||||
setupflag = 1;
|
setupflag = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -583,6 +583,7 @@ namespace ReaxFF {
|
|||||||
} catch (std::exception &e) {
|
} catch (std::exception &e) {
|
||||||
error->one(FLERR,e.what());
|
error->one(FLERR,e.what());
|
||||||
}
|
}
|
||||||
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// broadcast global parameters and allocate list on ranks != 0
|
// broadcast global parameters and allocate list on ranks != 0
|
||||||
|
|||||||
@ -128,8 +128,7 @@ Dump::Dump(LAMMPS *lmp, int /*narg*/, char **arg) : Pointers(lmp)
|
|||||||
char *ptr;
|
char *ptr;
|
||||||
if ((ptr = strchr(filename,'%'))) {
|
if ((ptr = strchr(filename,'%'))) {
|
||||||
if (strstr(style,"mpiio"))
|
if (strstr(style,"mpiio"))
|
||||||
error->all(FLERR,
|
error->all(FLERR,"Dump file MPI-IO output not allowed with % in filename");
|
||||||
"Dump file MPI-IO output not allowed with % in filename");
|
|
||||||
multiproc = 1;
|
multiproc = 1;
|
||||||
nclusterprocs = 1;
|
nclusterprocs = 1;
|
||||||
filewriter = 1;
|
filewriter = 1;
|
||||||
|
|||||||
@ -294,7 +294,6 @@ void FixNVESphere::final_integrate()
|
|||||||
// update v,omega for all particles
|
// update v,omega for all particles
|
||||||
// d_omega/dt = torque / inertia
|
// d_omega/dt = torque / inertia
|
||||||
|
|
||||||
double rke = 0.0;
|
|
||||||
for (int i = 0; i < nlocal; i++)
|
for (int i = 0; i < nlocal; i++)
|
||||||
if (mask[i] & groupbit) {
|
if (mask[i] & groupbit) {
|
||||||
dtfm = dtf / rmass[i];
|
dtfm = dtf / rmass[i];
|
||||||
@ -306,8 +305,5 @@ void FixNVESphere::final_integrate()
|
|||||||
omega[i][0] += dtirotate * torque[i][0];
|
omega[i][0] += dtirotate * torque[i][0];
|
||||||
omega[i][1] += dtirotate * torque[i][1];
|
omega[i][1] += dtirotate * torque[i][1];
|
||||||
omega[i][2] += dtirotate * torque[i][2];
|
omega[i][2] += dtirotate * torque[i][2];
|
||||||
rke += (omega[i][0]*omega[i][0] + omega[i][1]*omega[i][1] +
|
|
||||||
omega[i][2]*omega[i][2])*radius[i]*radius[i]*rmass[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1059,8 +1059,9 @@ static void print_columns(FILE *fp, std::map<std::string, ValueType> *styles)
|
|||||||
for (typename std::map<std::string, ValueType>::iterator it = styles->begin(); it != styles->end(); ++it) {
|
for (typename std::map<std::string, ValueType>::iterator it = styles->begin(); it != styles->end(); ++it) {
|
||||||
const std::string &style_name = it->first;
|
const std::string &style_name = it->first;
|
||||||
|
|
||||||
// skip "secret" styles
|
// skip "internal" styles
|
||||||
if (isupper(style_name[0])) continue;
|
if (isupper(style_name[0]) || utils::strmatch(style_name,"/kk/host$")
|
||||||
|
|| utils::strmatch(style_name,"/kk/device$")) continue;
|
||||||
|
|
||||||
int len = style_name.length();
|
int len = style_name.length();
|
||||||
if (pos + len > 80) {
|
if (pos + len > 80) {
|
||||||
|
|||||||
@ -1305,12 +1305,14 @@ void _noopt LAMMPS::help()
|
|||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
print style names in columns
|
print style names in columns
|
||||||
skip any style that starts with upper-case letter, since internal
|
skip any internal style that starts with an upper-case letter
|
||||||
|
also skip "redundant" KOKKOS styles ending in kk/host or kk/device
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void print_style(FILE *fp, const char *str, int &pos)
|
void print_style(FILE *fp, const char *str, int &pos)
|
||||||
{
|
{
|
||||||
if (isupper(str[0])) return;
|
if (isupper(str[0]) || utils::strmatch(str,"/kk/host$")
|
||||||
|
|| utils::strmatch(str,"/kk/device$")) return;
|
||||||
|
|
||||||
int len = strlen(str);
|
int len = strlen(str);
|
||||||
if (pos+len > 80) {
|
if (pos+len > 80) {
|
||||||
|
|||||||
@ -328,7 +328,7 @@ int MinLineSearch::linemin_quadratic(double eoriginal, double &alpha)
|
|||||||
int i,m,n;
|
int i,m,n;
|
||||||
double fdothall,fdothme,hme,hmax,hmaxall;
|
double fdothall,fdothme,hme,hmax,hmaxall;
|
||||||
double de_ideal,de;
|
double de_ideal,de;
|
||||||
double delfh,engprev,relerr,alphaprev,fhprev,ff,fh,alpha0;
|
double delfh,engprev,relerr,alphaprev,fhprev,fh,alpha0;
|
||||||
double dot[2],dotall[2];
|
double dot[2],dotall[2];
|
||||||
double *xatom,*x0atom,*fatom,*hatom;
|
double *xatom,*x0atom,*fatom,*hatom;
|
||||||
double alphamax;
|
double alphamax;
|
||||||
@ -439,12 +439,8 @@ int MinLineSearch::linemin_quadratic(double eoriginal, double &alpha)
|
|||||||
dotall[1] += fextra[i]*hextra[i];
|
dotall[1] += fextra[i]*hextra[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ff = dotall[0];
|
|
||||||
fh = dotall[1];
|
fh = dotall[1];
|
||||||
if (output->thermo->normflag) {
|
if (output->thermo->normflag) fh /= atom->natoms;
|
||||||
ff /= atom->natoms;
|
|
||||||
fh /= atom->natoms;
|
|
||||||
}
|
|
||||||
|
|
||||||
delfh = fh - fhprev;
|
delfh = fh - fhprev;
|
||||||
|
|
||||||
|
|||||||
@ -782,12 +782,12 @@ void Output::create_restart(int narg, char **arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int mpiioflag;
|
int mpiioflag;
|
||||||
if (strstr(arg[1],".mpi")) mpiioflag = 1;
|
if (utils::strmatch(arg[1],"\\.mpiio$")) mpiioflag = 1;
|
||||||
else mpiioflag = 0;
|
else mpiioflag = 0;
|
||||||
if (nfile == 2) {
|
if (nfile == 2) {
|
||||||
if (mpiioflag && !strstr(arg[2],".mpi"))
|
if (mpiioflag && !utils::strmatch(arg[2],"\\.mpiio$"))
|
||||||
error->all(FLERR,"Both restart files must use MPI-IO or neither");
|
error->all(FLERR,"Both restart files must use MPI-IO or neither");
|
||||||
if (!mpiioflag && strstr(arg[2],".mpi"))
|
if (!mpiioflag && utils::strmatch(arg[2],"\\.mpiio$"))
|
||||||
error->all(FLERR,"Both restart files must use MPI-IO or neither");
|
error->all(FLERR,"Both restart files must use MPI-IO or neither");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -63,10 +63,10 @@ int ReaderNative::read_time(bigint &ntimestep)
|
|||||||
magic_string = "";
|
magic_string = "";
|
||||||
unit_style = "";
|
unit_style = "";
|
||||||
|
|
||||||
fread(&ntimestep, sizeof(bigint), 1, fp);
|
auto ret = fread(&ntimestep, sizeof(bigint), 1, fp);
|
||||||
|
|
||||||
// detect end-of-file
|
// detect end-of-file
|
||||||
if (feof(fp)) return 1;
|
if (ret != 1 || feof(fp)) return 1;
|
||||||
|
|
||||||
// detect newer format
|
// detect newer format
|
||||||
if (ntimestep < 0) {
|
if (ntimestep < 0) {
|
||||||
@ -485,12 +485,8 @@ void ReaderNative::read_atoms(int n, int nfield, double **fields)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int i,m;
|
for (int i = 0; i < n; i++) {
|
||||||
char *eof;
|
utils::sfgets(FLERR, line, MAXLINE, fp, nullptr, error);
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
|
||||||
eof = fgets(line,MAXLINE,fp);
|
|
||||||
if (eof == nullptr) error->one(FLERR,"Unexpected end of dump file");
|
|
||||||
|
|
||||||
// tokenize the line
|
// tokenize the line
|
||||||
std::vector<std::string> words = Tokenizer(line).as_vector();
|
std::vector<std::string> words = Tokenizer(line).as_vector();
|
||||||
@ -499,7 +495,7 @@ void ReaderNative::read_atoms(int n, int nfield, double **fields)
|
|||||||
|
|
||||||
// convert selected fields to floats
|
// convert selected fields to floats
|
||||||
|
|
||||||
for (m = 0; m < nfield; m++)
|
for (int m = 0; m < nfield; m++)
|
||||||
fields[i][m] = atof(words[fieldindex[m]].c_str());
|
fields[i][m] = atof(words[fieldindex[m]].c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -527,18 +523,14 @@ int ReaderNative::find_label(const std::string &label, const std::map<std::strin
|
|||||||
|
|
||||||
void ReaderNative::read_lines(int n)
|
void ReaderNative::read_lines(int n)
|
||||||
{
|
{
|
||||||
char *eof = nullptr;
|
for (int i = 0; i < n; i++) {
|
||||||
if (n <= 0) return;
|
utils::sfgets(FLERR, line, MAXLINE, fp, nullptr, error);
|
||||||
for (int i = 0; i < n; i++) eof = fgets(line,MAXLINE,fp);
|
}
|
||||||
if (eof == nullptr) error->one(FLERR,"Unexpected end of dump file");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReaderNative::read_buf(void * ptr, size_t size, size_t count)
|
void ReaderNative::read_buf(void * ptr, size_t size, size_t count)
|
||||||
{
|
{
|
||||||
fread(ptr, size, count, fp);
|
utils::sfread(FLERR, ptr, size, count, fp, nullptr, error);
|
||||||
|
|
||||||
// detect end-of-file
|
|
||||||
if (feof(fp)) error->one(FLERR,"Unexpected end of dump file");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ReaderNative::read_binary_str(size_t size)
|
std::string ReaderNative::read_binary_str(size_t size)
|
||||||
@ -550,7 +542,6 @@ std::string ReaderNative::read_binary_str(size_t size)
|
|||||||
|
|
||||||
void ReaderNative::read_double_chunk(size_t count)
|
void ReaderNative::read_double_chunk(size_t count)
|
||||||
{
|
{
|
||||||
if (count < 0) return;
|
|
||||||
// extend buffer to fit chunk size
|
// extend buffer to fit chunk size
|
||||||
if (count > maxbuf) {
|
if (count > maxbuf) {
|
||||||
memory->grow(databuf,count,"reader:databuf");
|
memory->grow(databuf,count,"reader:databuf");
|
||||||
|
|||||||
@ -52,7 +52,7 @@ class ReaderNative : public Reader {
|
|||||||
int nwords; // # of per-atom columns in dump file
|
int nwords; // # of per-atom columns in dump file
|
||||||
|
|
||||||
int size_one; // number of double for one atom
|
int size_one; // number of double for one atom
|
||||||
int maxbuf; // maximum buffer size
|
size_t maxbuf; // maximum buffer size
|
||||||
int nchunk; // number of chunks in the binary file
|
int nchunk; // number of chunks in the binary file
|
||||||
int ichunk; // index of current reading chunk
|
int ichunk; // index of current reading chunk
|
||||||
int natom_chunk; // number of atoms in the current chunks
|
int natom_chunk; // number of atoms in the current chunks
|
||||||
|
|||||||
@ -73,9 +73,12 @@ void WriteRestart::command(int narg, char **arg)
|
|||||||
|
|
||||||
if (strchr(arg[0],'%')) multiproc = nprocs;
|
if (strchr(arg[0],'%')) multiproc = nprocs;
|
||||||
else multiproc = 0;
|
else multiproc = 0;
|
||||||
if (strstr(arg[0],".mpiio")) mpiioflag = 1;
|
if (utils::strmatch(arg[0],"\\.mpiio$")) mpiioflag = 1;
|
||||||
else mpiioflag = 0;
|
else mpiioflag = 0;
|
||||||
|
|
||||||
|
if ((comm->me == 0) && mpiioflag)
|
||||||
|
error->warning(FLERR,"MPI-IO output is unmaintained and unreliable. Use with caution.");
|
||||||
|
|
||||||
// setup output style and process optional args
|
// setup output style and process optional args
|
||||||
// also called by Output class for periodic restart files
|
// also called by Output class for periodic restart files
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user