Merge branch 'master' into collected-small-changes

This commit is contained in:
Axel Kohlmeyer
2020-07-31 21:51:10 -04:00
17 changed files with 804 additions and 212 deletions

3
.gitattributes vendored Normal file
View File

@ -0,0 +1,3 @@
.gitattributes export-ignore
.gitignore export-ignore
.github export-ignore

View File

@ -747,6 +747,12 @@ if (${_index} GREATER -1)
endif()
message(STATUS "<<< Linker flags: >>>")
message(STATUS "Executable name: ${LAMMPS_BINARY}")
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
get_target_property(OPTIONS lammps LINK_OPTIONS)
if(OPTIONS)
message(STATUS "Linker options: ${OPTIONS}")
endif()
endif()
if(CMAKE_EXE_LINKER_FLAGS)
message(STATUS "Executable linker flags: ${CMAKE_EXE_LINKER_FLAGS}")
endif()

View File

@ -16,6 +16,33 @@ if(ENABLE_TESTING)
set(MEMORYCHECK_COMMAND "${VALGRIND_BINARY}" CACHE FILEPATH "Memory Check Command")
set(MEMORYCHECK_COMMAND_OPTIONS "${VALGRIND_DEFAULT_OPTIONS}" CACHE STRING "Memory Check Command Options")
# check if a faster linker is available.
# only verified with GNU and Clang compilers and new CMake
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
if((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
OR (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang"))
include(CheckCXXCompilerFlag)
set(CMAKE_CUSTOM_LINKER_DEFAULT default)
check_cxx_compiler_flag(-fuse-ld=lld HAVE_LLD_LINKER)
check_cxx_compiler_flag(-fuse-ld=gold HAVE_GOLD_LINKER)
check_cxx_compiler_flag(-fuse-ld=bfd HAVE_BFD_LINKER)
if(HAVE_LLD_LINKER)
set(CMAKE_CUSTOM_LINKER_DEFAULT lld)
elseif(HAVE_GOLD_LINKER)
set(CMAKE_CUSTOM_LINKER_DEFAULT gold)
elseif(HAVE_BFD_LINKER)
set(CMAKE_CUSTOM_LINKER_DEFAULT bfd)
endif()
set(CMAKE_CUSTOM_LINKER_VALUES lld gold bfd default)
set(CMAKE_CUSTOM_LINKER ${CMAKE_CUSTOM_LINKER_DEFAULT} CACHE STRING "Choose a custom linker for faster linking (lld, gold, bfd, default)")
validate_option(CMAKE_CUSTOM_LINKER CMAKE_CUSTOM_LINKER_VALUES)
mark_as_advanced(CMAKE_CUSTOM_LINKER)
if(NOT "${CMAKE_CUSTOM_LINKER}" STREQUAL "default")
target_link_options(lammps PUBLIC -fuse-ld=${CMAKE_CUSTOM_LINKER})
endif()
endif()
endif()
include(CTest)
enable_testing()

View File

@ -259,6 +259,23 @@ and working.
of mis-compiled code (or an undesired large loss of precision due
to significant reordering of operations and thus less error cancellation).
Use custom linker for faster link times when ENABLE_TESTING is active
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
When compiling LAMMPS with enabled tests, most test executables will
need to be linked against the LAMMPS library. Since this can be a
large with many C++ objects when many packages are enabled, link times
can become very long on machines that use the GNU BFD linker (e.g.
Linux systems). Alternatives like the ``lld`` linker of the LLVM project
or the ``gold`` linker available with GNU binutils can speed up this step
substantially. CMake will by default test if any of the two can be
enabled and use it when ``ENABLE_TESTING`` is active. It can also be
selected manually through the ``CMAKE_CUSTOM_LINKER`` CMake variable.
Allowed values are ``lld``, ``gold``, ``bfd``, or ``default``. The
``default`` option will use the system default linker otherwise, the
linker is chosen explicitly. This option is only available for the
GNU or Clang C++ compiler.
Tests for other components and utility functions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -236,6 +236,7 @@ bilayer
bilayers
binsize
binstyle
binutils
biomolecular
biomolecule
Biomolecules

View File

@ -625,9 +625,9 @@ int UCL_Device::set_platform_accelerator(int pid) {
for (int n=0; n<_num_platforms; n++) {
set_platform(n);
for (int i=0; i<num_devices(); i++) {
if (_properties[i].device_type==CL_DEVICE_TYPE_CPU ||
_properties[i].device_type==CL_DEVICE_TYPE_GPU ||
_properties[i].device_type==CL_DEVICE_TYPE_ACCELERATOR) {
if ((_properties[i].device_type & CL_DEVICE_TYPE_CPU) ||
(_properties[i].device_type & CL_DEVICE_TYPE_GPU) ||
(_properties[i].device_type & CL_DEVICE_TYPE_ACCELERATOR)) {
found = 1;
break;
}

View File

@ -31,6 +31,7 @@
#include "error.h"
#include "utils.h"
#include "fmt/format.h"
#include "tokenizer.h"
using namespace LAMMPS_NS;
using namespace FixConst;
@ -41,11 +42,11 @@ using namespace FixConst;
FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg),
random(NULL), fp(NULL), fpr(NULL), nsum(NULL), nsum_all(NULL),
T_initial_set(NULL), gfactor1(NULL), gfactor2(NULL), ratio(NULL),
flangevin(NULL), T_electron(NULL), T_electron_old(NULL), sum_vsq(NULL),
sum_mass_vsq(NULL), sum_vsq_all(NULL), sum_mass_vsq_all(NULL),
net_energy_transfer(NULL), net_energy_transfer_all(NULL)
random(NULL), fp(NULL), nsum(NULL), nsum_all(NULL),
gfactor1(NULL), gfactor2(NULL), ratio(NULL), flangevin(NULL),
T_electron(NULL), T_electron_old(NULL), sum_vsq(NULL), sum_mass_vsq(NULL),
sum_vsq_all(NULL), sum_mass_vsq_all(NULL), net_energy_transfer(NULL),
net_energy_transfer_all(NULL)
{
if (narg < 15) error->all(FLERR,"Illegal fix ttm command");
@ -67,14 +68,6 @@ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) :
nxnodes = force->inumeric(FLERR,arg[10]);
nynodes = force->inumeric(FLERR,arg[11]);
nznodes = force->inumeric(FLERR,arg[12]);
if (comm->me == 0) {
fpr = fopen(arg[13],"r");
if (fpr == NULL)
error->all(FLERR,fmt::format("Cannot open input file {}: {}",
arg[13], utils::getsyserror()));
}
nfileevery = force->inumeric(FLERR,arg[14]);
if (nfileevery) {
@ -115,12 +108,14 @@ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) :
gfactor2 = new double[atom->ntypes+1];
// allocate 3d grid variables
// check for allowed maxium number of total grid nodes
total_nnodes = nxnodes*nynodes*nznodes;
total_nnodes = (bigint)nxnodes * (bigint)nynodes * (bigint)nznodes;
if (total_nnodes > MAXSMALLINT)
error->all(FLERR,"Too many nodes in fix ttm");
memory->create(nsum,nxnodes,nynodes,nznodes,"ttm:nsum");
memory->create(nsum_all,nxnodes,nynodes,nznodes,"ttm:nsum_all");
memory->create(T_initial_set,nxnodes,nynodes,nznodes,"ttm:T_initial_set");
memory->create(sum_vsq,nxnodes,nynodes,nznodes,"ttm:sum_vsq");
memory->create(sum_mass_vsq,nxnodes,nynodes,nznodes,"ttm:sum_mass_vsq");
memory->create(sum_vsq_all,nxnodes,nynodes,nznodes,"ttm:sum_vsq_all");
@ -149,7 +144,7 @@ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) :
// set initial electron temperatures from user input file
if (me == 0) read_initial_electron_temperatures();
if (comm->me == 0) read_initial_electron_temperatures(arg[13]);
MPI_Bcast(&T_electron[0][0][0],total_nnodes,MPI_DOUBLE,0,world);
}
@ -157,7 +152,7 @@ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) :
FixTTM::~FixTTM()
{
if (nfileevery && me == 0) fclose(fp);
if (fp) fclose(fp);
delete random;
@ -166,7 +161,6 @@ FixTTM::~FixTTM()
memory->destroy(nsum);
memory->destroy(nsum_all);
memory->destroy(T_initial_set);
memory->destroy(sum_vsq);
memory->destroy(sum_mass_vsq);
memory->destroy(sum_vsq_all);
@ -221,9 +215,9 @@ void FixTTM::init()
void FixTTM::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
if (utils::strmatch(update->integrate_style,"^verlet")) {
post_force_setup(vflag);
else {
} else {
((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1);
post_force_respa_setup(vflag,nlevels_respa-1,0);
((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1);
@ -329,27 +323,48 @@ void FixTTM::reset_dt()
only called by proc 0
------------------------------------------------------------------------- */
void FixTTM::read_initial_electron_temperatures()
void FixTTM::read_initial_electron_temperatures(const char *filename)
{
char line[MAXLINE];
int ***T_initial_set;
memory->create(T_initial_set,nxnodes,nynodes,nznodes,"ttm:T_initial_set");
memset(&T_initial_set[0][0][0],0,total_nnodes*sizeof(int));
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++)
T_initial_set[ixnode][iynode][iznode] = 0;
std::string name = utils::get_potential_file_path(filename);
if (name.empty())
error->one(FLERR,fmt::format("Cannot open input file: {}",
filename));
FILE *fpr = fopen(name.c_str(),"r");
// read initial electron temperature values from file
char line[MAXLINE];
int ixnode,iynode,iznode;
double T_tmp;
while (1) {
if (fgets(line,MAXLINE,fpr) == NULL) break;
sscanf(line,"%d %d %d %lg",&ixnode,&iynode,&iznode,&T_tmp);
ValueTokenizer values(line);
if (values.has_next()) ixnode = values.next_int();
if (values.has_next()) iynode = values.next_int();
if (values.has_next()) iznode = values.next_int();
if (values.has_next()) T_tmp = values.next_double();
else error->one(FLERR,"Incorrect format in fix ttm input file");
// check correctness of input data
if ((ixnode < 0) || (ixnode >= nxnodes)
|| (iynode < 0) || (iynode >= nynodes)
|| (iznode < 0) || (iznode >= nznodes))
error->one(FLERR,"Fix ttm invalide node index in fix ttm input");
if (T_tmp < 0.0)
error->one(FLERR,"Fix ttm electron temperatures must be > 0.0");
T_electron[ixnode][iynode][iznode] = T_tmp;
T_initial_set[ixnode][iynode][iznode] = 1;
}
fclose(fpr);
// check completeness of input data
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
@ -357,9 +372,7 @@ void FixTTM::read_initial_electron_temperatures()
if (T_initial_set[ixnode][iynode][iznode] == 0)
error->one(FLERR,"Initial temperatures not all set in fix ttm");
// close file
fclose(fpr);
memory->destroy(T_initial_set);
}
/* ---------------------------------------------------------------------- */
@ -463,7 +476,7 @@ void FixTTM::end_of_step()
(T_electron_old[ixnode][iynode][right_znode] +
T_electron_old[ixnode][iynode][left_znode] -
2*T_electron_old[ixnode][iynode][iznode])/dz/dz) -
(net_energy_transfer_all[ixnode][iynode][iznode])/del_vol);
(net_energy_transfer_all[ixnode][iynode][iznode])/del_vol);
}
}
@ -514,7 +527,7 @@ void FixTTM::end_of_step()
MPI_Allreduce(&sum_mass_vsq[0][0][0],&sum_mass_vsq_all[0][0][0],
total_nnodes,MPI_DOUBLE,MPI_SUM,world);
if (me == 0) {
if (comm->me == 0) {
fmt::print(fp,"{}",update->ntimestep);
double T_a;
@ -525,15 +538,15 @@ void FixTTM::end_of_step()
if (nsum_all[ixnode][iynode][iznode] > 0)
T_a = sum_mass_vsq_all[ixnode][iynode][iznode]/
(3.0*force->boltz*nsum_all[ixnode][iynode][iznode]/force->mvv2e);
fprintf(fp," %f",T_a);
fmt::print(fp," {}",T_a);
}
fprintf(fp,"\t");
fputs("\t",fp);
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++)
fprintf(fp,"%f ",T_electron[ixnode][iynode][iznode]);
fprintf(fp,"\n");
fmt::print(fp," {}",T_electron[ixnode][iynode][iznode]);
fputs("\n",fp);
}
}
}
@ -560,7 +573,7 @@ void FixTTM::grow_arrays(int ngrow)
}
/* ----------------------------------------------------------------------
return the energy of the electronic subsystem or the net_energy transfer
return the energy of the electronic subsystem or the net_energy transfer
between the subsystems
------------------------------------------------------------------------- */
@ -582,7 +595,7 @@ double FixTTM::compute_vector(int n)
electronic_density*del_vol;
transfer_energy +=
net_energy_transfer_all[ixnode][iynode][iznode]*update->dt;
}
}
if (n == 0) return e_energy;
if (n == 1) return transfer_energy;

View File

@ -48,17 +48,15 @@ class FixTTM : public Fix {
double compute_vector(int);
private:
int me;
int nfileevery;
int nlevels_respa;
int seed;
class RanMars *random;
FILE *fp,*fpr;
int nxnodes,nynodes,nznodes,total_nnodes;
int ***nsum;
int ***nsum_all,***T_initial_set;
double *gfactor1,*gfactor2,*ratio;
double **flangevin;
FILE *fp;
int nxnodes,nynodes,nznodes;
bigint total_nnodes;
int ***nsum, ***nsum_all;
double *gfactor1,*gfactor2,*ratio,**flangevin;
double ***T_electron,***T_electron_old;
double ***sum_vsq,***sum_mass_vsq;
double ***sum_vsq_all,***sum_mass_vsq_all;
@ -67,7 +65,7 @@ class FixTTM : public Fix {
double electronic_thermal_conductivity;
double gamma_p,gamma_s,v_0,v_0_sq;
void read_initial_electron_temperatures();
void read_initial_electron_temperatures(const char *);
};
}

View File

@ -34,6 +34,7 @@
#include "math_const.h"
#include "utils.h"
#include "fmt/format.h"
#include "tokenizer.h"
using namespace LAMMPS_NS;
using namespace FixConst;
@ -65,7 +66,12 @@ static const char cite_fix_ttm_mod[] =
/* ---------------------------------------------------------------------- */
FixTTMMod::FixTTMMod(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
Fix(lmp, narg, arg),
random(NULL), fp(NULL), nsum(NULL), nsum_all(NULL),
gfactor1(NULL), gfactor2(NULL), ratio(NULL), flangevin(NULL),
T_electron(NULL), T_electron_old(NULL), sum_vsq(NULL), sum_mass_vsq(NULL),
sum_vsq_all(NULL), sum_mass_vsq_all(NULL), net_energy_transfer(NULL),
net_energy_transfer_all(NULL)
{
if (lmp->citeme) lmp->citeme->add(cite_fix_ttm_mod);
@ -82,32 +88,20 @@ FixTTMMod::FixTTMMod(LAMMPS *lmp, int narg, char **arg) :
if (seed <= 0)
error->all(FLERR,"Invalid random number seed in fix ttm/mod command");
FILE *fpr_2 = force->open_potential(arg[4]);
if (fpr_2 == NULL) {
char str[128];
snprintf(str,128,"Cannot open file %s",arg[4]);
error->all(FLERR,str);
}
nxnodes = force->inumeric(FLERR,arg[5]);
nynodes = force->inumeric(FLERR,arg[6]);
nznodes = force->inumeric(FLERR,arg[7]);
if (nxnodes <= 0 || nynodes <= 0 || nznodes <= 0)
error->all(FLERR,"Fix ttm/mod number of nodes must be > 0");
const char *filename = arg[8];
FILE *fpr = force->open_potential(filename);
if (fpr == NULL) {
char str[128];
snprintf(str,128,"Cannot open file %s",filename);
error->all(FLERR,str);
}
total_nnodes = (bigint)nxnodes * (bigint)nynodes * (bigint)nznodes;
if (total_nnodes > MAXSMALLINT)
error->all(FLERR,"Too many nodes in fix ttm/mod");
nfileevery = force->inumeric(FLERR,arg[9]);
if (nfileevery > 0) {
if (narg != 11) error->all(FLERR,"Illegal fix ttm/mod command");
MPI_Comm_rank(world,&me);
if (me == 0) {
if (comm->me == 0) {
fp = fopen(arg[10],"w");
if (fp == NULL) {
char str[128];
@ -116,121 +110,11 @@ FixTTMMod::FixTTMMod(LAMMPS *lmp, int narg, char **arg) :
}
}
}
char linee[MAXLINE];
double tresh_d;
int tresh_i;
// C0 (metal)
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
esheat_0 = tresh_d;
// C1 (metal*10^3)
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
esheat_1 = tresh_d;
// C2 (metal*10^6)
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
esheat_2 = tresh_d;
// C3 (metal*10^9)
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
esheat_3 = tresh_d;
// C4 (metal*10^12)
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
esheat_4 = tresh_d;
// C_limit
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
C_limit = tresh_d;
//Temperature damping factor
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
T_damp = tresh_d;
// rho_e
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
electronic_density = tresh_d;
//thermal_diffusion
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
el_th_diff = tresh_d;
// gamma_p
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
gamma_p = tresh_d;
// gamma_s
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
gamma_s = tresh_d;
// v0
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
v_0 = tresh_d;
// average intensity of pulse (source of energy) (metal units)
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
intensity = tresh_d;
// coordinate of 1st surface in x-direction (in box units) - constant
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%d",&tresh_i);
surface_l = tresh_i;
// coordinate of 2nd surface in x-direction (in box units) - constant
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%d",&tresh_i);
surface_r = tresh_i;
// skin_layer = intensity is reduced (I=I0*exp[-x/skin_layer])
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%d",&tresh_i);
skin_layer = tresh_i;
// width of pulse (picoseconds)
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
width = tresh_d;
// factor of electronic pressure (PF) Pe = PF*Ce*Te
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
pres_factor = tresh_d;
// effective free path of electrons (angstrom)
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
free_path = tresh_d;
// ionic density (ions*angstrom^{-3})
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
ionic_density = tresh_d;
// if movsur = 0: surface is freezed
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%d",&tresh_i);
movsur = tresh_i;
// electron_temperature_min
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
utils::sfgets(FLERR,linee,MAXLINE,fpr_2,filename,error);
sscanf(linee,"%lg",&tresh_d);
electron_temperature_min = tresh_d;
fclose(fpr_2);
//t_surface is determined by electronic temperature (not constant)
read_parameters(arg[4]);
// t_surface is determined by electronic temperature (not constant)
t_surface_l = surface_l;
mult_factor = intensity;
duration = 0.0;
@ -255,7 +139,6 @@ FixTTMMod::FixTTMMod(LAMMPS *lmp, int narg, char **arg) :
total_nnodes = nxnodes*nynodes*nznodes;
memory->create(nsum,nxnodes,nynodes,nznodes,"ttm/mod:nsum");
memory->create(nsum_all,nxnodes,nynodes,nznodes,"ttm/mod:nsum_all");
memory->create(T_initial_set,nxnodes,nynodes,nznodes,"ttm/mod:T_initial_set");
memory->create(sum_vsq,nxnodes,nynodes,nznodes,"ttm/mod:sum_vsq");
memory->create(sum_mass_vsq,nxnodes,nynodes,nznodes,"ttm/mod:sum_mass_vsq");
memory->create(sum_vsq_all,nxnodes,nynodes,nznodes,"ttm/mod:sum_vsq_all");
@ -270,31 +153,36 @@ FixTTMMod::FixTTMMod(LAMMPS *lmp, int narg, char **arg) :
"ttm/mod:net_energy_transfer_all");
flangevin = NULL;
grow_arrays(atom->nmax);
// zero out the flangevin array
for (int i = 0; i < atom->nmax; i++) {
flangevin[i][0] = 0;
flangevin[i][1] = 0;
flangevin[i][2] = 0;
}
atom->add_callback(0);
atom->add_callback(1);
// set initial electron temperatures from user input file
if (me == 0) read_initial_electron_temperatures(fpr);
if (comm->me == 0) read_initial_electron_temperatures(arg[8]);
MPI_Bcast(&T_electron[0][0][0],total_nnodes,MPI_DOUBLE,0,world);
fclose(fpr);
}
/* ---------------------------------------------------------------------- */
FixTTMMod::~FixTTMMod()
{
if (nfileevery && me == 0) fclose(fp);
if (fp) fclose(fp);
delete random;
delete [] gfactor1;
delete [] gfactor2;
memory->destroy(nsum);
memory->destroy(nsum_all);
memory->destroy(T_initial_set);
memory->destroy(sum_vsq);
memory->destroy(sum_mass_vsq);
memory->destroy(sum_vsq_all);
@ -328,16 +216,20 @@ void FixTTMMod::init()
error->all(FLERR,"Cannot use non-periodic boundares with fix ttm/mod");
if (domain->triclinic)
error->all(FLERR,"Cannot use fix ttm/mod with triclinic box");
// set force prefactors
for (int i = 1; i <= atom->ntypes; i++) {
gfactor1[i] = - gamma_p / force->ftm2v;
gfactor2[i] =
sqrt(24.0*force->boltz*gamma_p/update->dt/force->mvv2e) / force->ftm2v;
}
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++)
net_energy_transfer_all[ixnode][iynode][iznode] = 0;
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
}
@ -346,7 +238,7 @@ void FixTTMMod::init()
void FixTTMMod::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet")) {
if (utils::strmatch(update->integrate_style,"^verlet")) {
post_force_setup(vflag);
} else {
((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1);
@ -365,13 +257,17 @@ void FixTTMMod::post_force(int /*vflag*/)
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double dx = domain->xprd/nxnodes;
double dy = domain->yprd/nynodes;
double dz = domain->zprd/nynodes;
double gamma1,gamma2;
// apply damping and thermostat to all atoms in fix group
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
double xscale = (x[i][0] - domain->boxlo[0])/domain->xprd;
double yscale = (x[i][1] - domain->boxlo[1])/domain->yprd;
double zscale = (x[i][2] - domain->boxlo[2])/domain->zprd;
@ -384,9 +280,12 @@ void FixTTMMod::post_force(int /*vflag*/)
while (ixnode < 0) ixnode += nxnodes;
while (iynode < 0) iynode += nynodes;
while (iznode < 0) iznode += nznodes;
if (T_electron[ixnode][iynode][iznode] < 0)
error->all(FLERR,"Electronic temperature dropped below zero");
double tsqrt = sqrt(T_electron[ixnode][iynode][iznode]);
gamma1 = gfactor1[type[i]];
double vsq = v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2];
if (vsq > v_0_sq) gamma1 *= (gamma_p + gamma_s)/gamma_p;
@ -455,7 +354,9 @@ void FixTTMMod::post_force_setup(int /*vflag*/)
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
// apply langevin forces that have been stored from previous run
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
f[i][0] += flangevin[i][0];
@ -488,33 +389,209 @@ void FixTTMMod::reset_dt()
sqrt(24.0*force->boltz*gamma_p/update->dt/force->mvv2e) / force->ftm2v;
}
/* ----------------------------------------------------------------------
read in ttm/mod parameters from a user-specified file
only called by proc 0
------------------------------------------------------------------------- */
void FixTTMMod::read_parameters(const char *filename)
{
char line[MAXLINE];
std::string name = utils::get_potential_file_path(filename);
if (name.empty())
error->one(FLERR,fmt::format("Cannot open input file: {}",
filename));
FILE *fpr = fopen(name.c_str(),"r");
// C0 (metal)
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
esheat_0 = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// C1 (metal*10^3)
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
esheat_1 = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// C2 (metal*10^6)
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
esheat_2 = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// C3 (metal*10^9)
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
esheat_3 = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// C4 (metal*10^12)
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
esheat_4 = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// C_limit
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
C_limit = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// Temperature damping factor
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
T_damp = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// rho_e
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
electronic_density = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// thermal_diffusion
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
el_th_diff = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// gamma_p
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
gamma_p = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// gamma_s
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
gamma_s = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// v0
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
v_0 = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// average intensity of pulse (source of energy) (metal units)
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
intensity = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// coordinate of 1st surface in x-direction (in box units) - constant
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
surface_l = utils::inumeric(FLERR,utils::trim(line).c_str(),true,lmp);
// coordinate of 2nd surface in x-direction (in box units) - constant
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
surface_r = utils::inumeric(FLERR,utils::trim(line).c_str(),true,lmp);
// skin_layer = intensity is reduced (I=I0*exp[-x/skin_layer])
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
skin_layer = utils::inumeric(FLERR,utils::trim(line).c_str(),true,lmp);
// width of pulse (picoseconds)
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
width = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// factor of electronic pressure (PF) Pe = PF*Ce*Te
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
pres_factor = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// effective free path of electrons (angstrom)
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
free_path = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// ionic density (ions*angstrom^{-3})
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
ionic_density = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
// if movsur = 0: surface is frozen
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
movsur = utils::inumeric(FLERR,utils::trim(line).c_str(),true,lmp);
// electron_temperature_min
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
utils::sfgets(FLERR,line,MAXLINE,fpr,filename,error);
electron_temperature_min = utils::numeric(FLERR,utils::trim(line).c_str(),true,lmp);
fclose(fpr);
}
/* ----------------------------------------------------------------------
read in initial electron temperatures from a user-specified file
only called by proc 0
------------------------------------------------------------------------- */
void FixTTMMod::read_initial_electron_temperatures(FILE *fpr)
void FixTTMMod::read_initial_electron_temperatures(const char *filename)
{
char line[MAXLINE];
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++)
T_initial_set[ixnode][iynode][iznode] = 0;
int ***T_initial_set;
memory->create(T_initial_set,nxnodes,nynodes,nznodes,"ttm/mod:T_initial_set");
memset(&T_initial_set[0][0][0],0,total_nnodes*sizeof(int));
std::string name = utils::get_potential_file_path(filename);
if (name.empty())
error->one(FLERR,fmt::format("Cannot open input file: {}",
filename));
FILE *fpr = fopen(name.c_str(),"r");
// read initial electron temperature values from file
char line[MAXLINE];
int ixnode,iynode,iznode;
double T_tmp;
while (1) {
if (fgets(line,MAXLINE,fpr) == NULL) break;
sscanf(line,"%d %d %d %lg",&ixnode,&iynode,&iznode,&T_tmp);
if (T_tmp < 0.0) error->one(FLERR,"Fix ttm/mod electron temperatures must be >= 0.0");
ValueTokenizer values(line);
if (values.has_next()) ixnode = values.next_int();
if (values.has_next()) iynode = values.next_int();
if (values.has_next()) iznode = values.next_int();
if (values.has_next()) T_tmp = values.next_double();
else error->one(FLERR,"Incorrect format in fix ttm input file");
// check correctness of input data
if ((ixnode < 0) || (ixnode >= nxnodes)
|| (iynode < 0) || (iynode >= nynodes)
|| (iznode < 0) || (iznode >= nznodes))
error->one(FLERR,"Fix ttm invalide node index in fix ttm input");
if (T_tmp < 0.0)
error->one(FLERR,"Fix ttm electron temperatures must be > 0.0");
T_electron[ixnode][iynode][iznode] = T_tmp;
T_initial_set[ixnode][iynode][iznode] = 1;
}
fclose(fpr);
// check completeness of input data
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++)
if (T_initial_set[ixnode][iynode][iznode] == 0)
error->one(FLERR,"Initial temperatures not all set in fix ttm/mod");
error->one(FLERR,"Initial temperatures not all set in fix ttm");
memory->destroy(T_initial_set);
}
/* ---------------------------------------------------------------------- */
@ -551,6 +628,7 @@ void FixTTMMod::end_of_step()
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (movsur == 1){
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
@ -566,6 +644,7 @@ void FixTTMMod::end_of_step()
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++)
net_energy_transfer[ixnode][iynode][iznode] = 0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
double xscale = (x[i][0] - domain->boxlo[0])/domain->xprd;
@ -587,9 +666,11 @@ void FixTTMMod::end_of_step()
flangevin[i][2]*v[i][2]);
}
}
MPI_Allreduce(&net_energy_transfer[0][0][0],
&net_energy_transfer_all[0][0][0],
total_nnodes,MPI_DOUBLE,MPI_SUM,world);
double dx = domain->xprd/nxnodes;
double dy = domain->yprd/nynodes;
double dz = domain->zprd/nznodes;
@ -611,6 +692,7 @@ void FixTTMMod::end_of_step()
}
// num_inner_timesteps = # of inner steps (thermal solves)
// required this MD step to maintain a stable explicit solve
int num_inner_timesteps = 1;
double inner_dt = update->dt;
double stability_criterion = 0.0;
@ -720,9 +802,13 @@ void FixTTMMod::end_of_step()
(el_thermal_conductivity*(1.0/dx/dx + 1.0/dy/dy + 1.0/dz/dz));
} while (stability_criterion < 0.0);
// output nodal temperatures for current timestep
if ((nfileevery) && !(update->ntimestep % nfileevery)) {
// compute atomic Ta for each grid point
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++) {
@ -733,6 +819,7 @@ void FixTTMMod::end_of_step()
sum_vsq_all[ixnode][iynode][iznode] = 0.0;
sum_mass_vsq_all[ixnode][iynode][iznode] = 0.0;
}
double massone;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
@ -755,36 +842,39 @@ void FixTTMMod::end_of_step()
sum_vsq[ixnode][iynode][iznode] += vsq;
sum_mass_vsq[ixnode][iynode][iznode] += massone*vsq;
}
MPI_Allreduce(&nsum[0][0][0],&nsum_all[0][0][0],total_nnodes,
MPI_INT,MPI_SUM,world);
MPI_Allreduce(&sum_vsq[0][0][0],&sum_vsq_all[0][0][0],total_nnodes,
MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&sum_mass_vsq[0][0][0],&sum_mass_vsq_all[0][0][0],
total_nnodes,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&t_surface_l,&surface_l,
1,MPI_INT,MPI_MIN,world);
if (me == 0) {
MPI_Allreduce(&t_surface_l,&surface_l,1,MPI_INT,MPI_MIN,world);
if (comm->me == 0) {
fmt::print(fp,"{}",update->ntimestep);
double T_a;
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++) {
T_a = 0;
if (nsum_all[ixnode][iynode][iznode] > 0){
if (nsum_all[ixnode][iynode][iznode] > 0) {
T_a = sum_mass_vsq_all[ixnode][iynode][iznode]/
(3.0*force->boltz*nsum_all[ixnode][iynode][iznode]/force->mvv2e);
if (movsur == 1){
if (T_electron[ixnode][iynode][iznode]==0.0) T_electron[ixnode][iynode][iznode] = electron_temperature_min;
}
}
fprintf(fp," %f",T_a);
fmt::print(fp," {}",T_a);
}
fprintf(fp,"\t");
fputs("\t",fp);
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++)
fprintf(fp,"%f ",T_electron[ixnode][iynode][iznode]);
fprintf(fp,"\n");
fmt::print(fp," {}",T_electron[ixnode][iynode][iznode]);
fputs("\n",fp);
}
}
}
@ -817,10 +907,12 @@ double FixTTMMod::compute_vector(int n)
{
double e_energy = 0.0;
double transfer_energy = 0.0;
double dx = domain->xprd/nxnodes;
double dy = domain->yprd/nynodes;
double dz = domain->zprd/nznodes;
double del_vol = dx*dy*dz;
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++) {
@ -828,6 +920,7 @@ double FixTTMMod::compute_vector(int n)
transfer_energy +=
net_energy_transfer_all[ixnode][iynode][iznode]*update->dt;
}
if (n == 0) return e_energy;
if (n == 1) return transfer_energy;
return 0.0;
@ -841,17 +934,21 @@ void FixTTMMod::write_restart(FILE *fp)
{
double *rlist;
memory->create(rlist,nxnodes*nynodes*nznodes+1,"ttm/mod:rlist");
int n = 0;
rlist[n++] = seed;
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++)
rlist[n++] = T_electron[ixnode][iynode][iznode];
rlist[n++] = T_electron[ixnode][iynode][iznode];
if (comm->me == 0) {
int size = n * sizeof(double);
fwrite(&size,sizeof(int),1,fp);
fwrite(rlist,sizeof(double),n,fp);
}
memory->destroy(rlist);
}
@ -863,12 +960,16 @@ void FixTTMMod::restart(char *buf)
{
int n = 0;
double *rlist = (double *) buf;
// the seed must be changed from the initial seed
seed = static_cast<int> (0.5*rlist[n++]);
for (int ixnode = 0; ixnode < nxnodes; ixnode++)
for (int iynode = 0; iynode < nynodes; iynode++)
for (int iznode = 0; iznode < nznodes; iznode++)
T_electron[ixnode][iynode][iznode] = rlist[n++];
delete random;
random = new RanMars(lmp,seed+comm->me);
}
@ -893,10 +994,13 @@ int FixTTMMod::pack_restart(int i, double *buf)
void FixTTMMod::unpack_restart(int nlocal, int nth)
{
double **extra = atom->extra;
// skip to Nth set of extra values
int m = 0;
for (int i = 0; i < nth; i++) m += static_cast<int> (extra[nlocal][m]);
m++;
flangevin[nlocal][0] = extra[nlocal][m++];
flangevin[nlocal][1] = extra[nlocal][m++];
flangevin[nlocal][2] = extra[nlocal][m++];

View File

@ -53,17 +53,15 @@ class FixTTMMod : public Fix {
double compute_vector(int);
private:
int me;
int nfileevery;
int nlevels_respa;
int seed;
class RanMars *random;
FILE *fp;
int nxnodes,nynodes,nznodes,total_nnodes;
int ***nsum;
int ***nsum_all,***T_initial_set;
double *gfactor1,*gfactor2,*ratio;
double **flangevin;
int nxnodes,nynodes,nznodes;
bigint total_nnodes;
int ***nsum, ***nsum_all;
double *gfactor1,*gfactor2,*ratio,**flangevin;
double ***T_electron,***T_electron_old,***T_electron_first;
double ***sum_vsq,***sum_mass_vsq;
double ***sum_vsq_all,***sum_mass_vsq_all;
@ -79,7 +77,8 @@ class FixTTMMod : public Fix {
double electron_temperature_min;
el_heat_capacity_thermal_conductivity el_properties(double);
double el_sp_heat_integral(double);
void read_initial_electron_temperatures(FILE *);
void read_parameters(const char *);
void read_initial_electron_temperatures(const char *);
};
}

View File

@ -348,6 +348,19 @@ tagint utils::tnumeric(const char *file, int line, const char *str,
return ATOTAGINT(str);
}
/* ----------------------------------------------------------------------
Return string without leading or trailing whitespace
------------------------------------------------------------------------- */
std::string utils::trim(const std::string & line) {
int beg = re_match(line.c_str(),"\\S+");
int end = re_match(line.c_str(),"\\s+$");
if (beg < 0) beg = 0;
if (end < 0) end = line.size();
return line.substr(beg,end-beg);
}
/* ----------------------------------------------------------------------
Return string without trailing # comment
------------------------------------------------------------------------- */

View File

@ -143,6 +143,13 @@ namespace LAMMPS_NS {
tagint tnumeric(const char *file, int line, const char *str,
bool do_abort, LAMMPS *lmp);
/**
* \brief Trim leading and trailing whitespace. Like TRIM() in Fortran.
* \param line string that should be trimmed
* \return new string without whitespace (string)
*/
std::string trim(const std::string &line);
/**
* \brief Trim anything from '#' onward
* \param line string that should be trimmed

View File

@ -0,0 +1,101 @@
---
lammps_version: 21 Jul 2020
date_generated: Fri Jul 31 11:30:59 202
epsilon: 5e-14
prerequisites: ! |
atom full
pair born
pre_commands: ! ""
post_commands: ! ""
input_file: in.fourmol
pair_style: born 8.0
pair_coeff: ! |
1 1 2.51937098847838 0.148356076521964 1.82166848001002 29.0375806150613 141.547923828784
1 2 2.87560097202631 0.103769845319212 1.18949647259382 1.7106306969663 4.09225030876458
1 3 2.73333746288062 0.169158133709025 2.06291417638668 63.7180294456725 403.51858739517
1 4 2.51591531388789 0.166186965980131 2.01659390849669 49.622913109061 303.336540547726
1 5 2.51591531388789 0.166186965980131 2.01659390849669 49.622913109061 303.336540547726
2 2 1.0594557710255 0.281261664467988 0.314884389172266 0.271080184997071 0.177172207445923
2 3 2.12127488295383 0.124576922646243 1.46526793359105 5.10367785279284 17.5662073921955
2 4 0.523836115049206 0.140093804714855 0.262040872137659 0.00432916334694855 0.000703093129207124
2 5 2.36887234111228 0.121604450909563 1.39946581861656 3.82529730669145 12.548008396489
3 3 2.81831917530019 0.189944649028137 2.31041576143228 127.684271782117 1019.38354056979
3 4 2.5316180773506 0.186976803503293 2.26748506873271 100.602835334624 778.254162800904
3 5 2.5316180773506 0.186976803503293 2.26748506873271 100.602835334624 778.254162800904
4 4 2.63841820292211 0.184008285863681 2.19742633928911 79.1465822481912 592.979935420722
4 5 2.63841820292211 0.184008285863681 2.19742633928911 79.1465822481912 592.979935420722
5 5 2.63841820292211 0.184008285863681 2.19742633928911 79.1465822481912 592.979935420722
extract: ! |
a 2
c 2
d 2
natoms: 29
init_vdwl: 225.01325775005
init_coul: 0
init_stress: ! |2-
4.8890135912686276e+02 4.9476399950851692e+02 8.2928912031456082e+02 -1.0579437249928866e+02 4.4179413858812438e+01 9.5101960701751082e+01
init_forces: ! |2
1 -6.9893383802546962e+00 6.6029484782767952e+01 8.3756568617383323e+01
2 4.0451866140633364e+01 3.3281238501966307e+01 -4.7609572091467101e+01
3 -3.3554420459361133e+01 -9.0366128102758736e+01 -3.5316607577134356e+01
4 -5.4073880610506162e+00 1.4446970275947606e+00 -3.8476430305660450e+00
5 -1.6945125260616778e+00 -2.7877656601727141e+00 7.9522401328715366e+00
6 -1.3632256873869170e+02 1.4939600552520452e+02 1.3659626640534242e+02
7 3.3654149102999633e+00 -4.3825682948657864e+01 -2.4770247768336748e+02
8 9.4256799970526348e+00 -1.2748610635504216e+01 6.3401042922319014e+01
9 1.8214255707343796e+01 1.9634013462823493e+01 8.0627903889311966e+01
10 9.3246929195512337e+01 -1.1604313193477655e+02 -3.3499092894518185e+01
11 -1.5551881794825244e+00 -3.9302596365151383e+00 -6.4152106265937565e+00
12 1.1280784656332765e+01 5.7304267382999692e+00 -4.8408891298437595e+00
13 5.6681661555106224e+00 -2.2485598040323831e+00 -1.0337527359002666e-01
14 -2.3386018881230815e+00 4.7373017575312287e-01 -6.0367036404675947e+00
15 -1.3919036266533302e-01 5.9086314064227237e+00 2.0961592452498299e+00
16 7.5982502517085123e+01 -5.7865285413867682e+01 -1.7681361314063858e+02
17 -6.9601631652927367e+01 4.7943078126464606e+01 1.8773972338580970e+02
18 -1.7638834547123915e-02 -3.1951813093162265e-02 2.9618331655533261e-02
19 -2.7917883175529663e-04 -1.0814182946186390e-03 2.2202001768571464e-03
20 -5.7104234747899134e-04 -7.8074218300731402e-04 7.2628317005618385e-04
21 -1.8437130720809485e+01 -2.1632915199788872e+01 6.1464911328600842e+01
22 -2.9579890614400888e+01 -7.1679619383431872e+00 -4.6407011665270588e+01
23 4.8006251756481980e+01 2.8813363350657969e+01 -1.5046330694799972e+01
24 1.1355386172593194e+01 -5.6677213697182935e+01 3.1221909936704108e+01
25 -4.1170774220209523e+01 6.6256133865767302e+00 -3.4614250263817894e+01
26 2.9803365929697637e+01 5.0039673341961418e+01 3.3685284865566483e+00
27 1.1754339453870926e+01 -6.1391797882279533e+01 2.3297502014340736e+01
28 -4.7133554549788215e+01 2.0256243416311925e+01 -3.1891313669103603e+01
29 3.5387736817138148e+01 4.1142927584645129e+01 8.5887702016863265e+00
run_vdwl: 156.543264192972
run_coul: 0
run_stress: ! |2-
3.8217409303560629e+02 3.9644927104438381e+02 5.4741622167620551e+02 -9.9916269275610532e+01 3.6853516322661612e+01 6.7569991842117304e+01
run_forces: ! |2
1 1.0395674707735731e+00 5.5256813605008816e+01 5.6773276352200661e+01
2 2.4481921282193845e+01 1.9879632440195810e+01 -2.8528936799032302e+01
3 -3.0770161776503635e+01 -6.2238142906829239e+01 -2.4064417240263371e+01
4 -5.1681544316504038e+00 1.4863747534138627e+00 -3.7546490114181550e+00
5 -1.4671781617695223e+00 -2.3821362963461601e+00 7.2672287644994524e+00
6 -9.8499362763180983e+01 1.0257804525013071e+02 5.3495439213952984e+01
7 4.2001835596160104e+00 -2.6937041762260563e+01 -1.3607048811616696e+02
8 4.6511093906491512e+00 -5.1080518517972804e+00 5.5257861257710744e+01
9 1.1843202778068722e+01 1.2416390727106398e+01 5.1473652467930826e+01
10 7.0145695491089597e+01 -8.9295009657311510e+01 -2.9634434514715853e+01
11 -1.7228090610547173e+00 -3.6991390929261971e+00 -6.3108366948469161e+00
12 1.0660819163349736e+01 5.8147700758899523e+00 -5.4355772152867248e+00
13 5.2924774467636020e+00 -2.0068724896508732e+00 -7.8093372156985835e-02
14 -2.0358243249672157e+00 3.2827307490873597e-01 -5.1944474119957285e+00
15 -2.6827906151865294e-01 5.7618640647259713e+00 2.1709750862347468e+00
16 4.7636632061962267e+01 -3.9810879273462064e+01 -9.6151504817851247e+01
17 -3.9986659907067860e+01 2.7980343203916043e+01 1.0876993658623469e+02
18 -1.7426743545211711e-02 -3.1530831655227590e-02 2.9358218896064495e-02
19 -3.2185264613315649e-04 -1.1165230646128495e-03 2.2446047347148388e-03
20 -5.4449298929830944e-04 -7.4700830397387554e-04 7.2352482859877815e-04
21 -1.2591458573727806e+01 -1.3846681617243361e+01 4.1802224946997235e+01
22 -2.0391390443413155e+01 -5.1794508883407548e+00 -3.1545667320662130e+01
23 3.2971780932048034e+01 1.9038950539781588e+01 -1.0244642035304839e+01
24 1.0960784435729556e+01 -4.0895918302034367e+01 2.4332900990266868e+01
25 -3.2019961323106763e+01 4.8905379432638307e+00 -2.7175126429424967e+01
26 2.1046878688704115e+01 3.5993356715466817e+01 2.8179811510290729e+00
27 7.6414241493444806e+00 -4.2201314723630858e+01 1.4744843719921445e+01
28 -3.1401246838529225e+01 1.3739835837624105e+01 -2.0945633715119591e+01
29 2.3768302905377848e+01 2.8468844993424415e+01 6.1958078088075466e+00
...

View File

@ -0,0 +1,101 @@
---
lammps_version: 21 Jul 2020
date_generated: Fri Jul 31 12:07:29 202
epsilon: 5e-14
prerequisites: ! |
atom full
pair buck
pre_commands: ! ""
post_commands: ! |
pair_modify mix arithmetic
input_file: in.fourmol
pair_style: buck 8.0
pair_coeff: ! |
1 1 170339.505032359 0.166879344173798 13.642356513989
1 2 85988.1490021027 0.116722557424471 0.80085535265993
1 3 169866.420176425 0.190286500706475 29.9623467274028
1 4 147160.913151695 0.186942613268455 23.3320434749744
1 5 147160.913151695 0.186942613268455 23.3320434749744
2 2 43972.4676803832 0.0665738276248451 0.0138732735747516
2 3 85535.686235147 0.140128612516736 2.39406114840173
2 4 45975.8370021332 0.0331639834863857 0.000214673167591639
2 5 74124.142292174 0.136784828511181 1.79395952625758
3 3 169504.649065961 0.213692863412526 60.0617510100503
3 4 146835.114678908 0.210349185259049 47.3225728524629
3 5 146835.114678908 0.210349185259049 47.3225728524629
4 4 127198.698386798 0.207005479340455 37.2289658745028
4 5 127198.698386798 0.207005479340455 37.2289658745028
5 5 127198.698386798 0.207005479340455 37.2289658745028
extract: ! |
a 2
c 2
natoms: 29
init_vdwl: 143.749538808172
init_coul: 0
init_stress: ! |2-
2.8546063261749947e+02 2.8737384899658309e+02 4.6113105064788800e+02 -5.4335721921076150e+01 3.0318888748596905e+01 4.6619308801703639e+01
init_forces: ! |2
1 -4.1623312328968973e+00 3.8386614428046357e+01 4.8751961502428443e+01
2 2.3627361581160311e+01 1.9437613549333786e+01 -2.7808992075045698e+01
3 -1.9523183463523988e+01 -5.0755464292132672e+01 -2.0167041215602033e+01
4 -4.2090793543049374e+00 1.1066643676095793e+00 -2.9972422908039085e+00
5 -1.3267826706072230e+00 -2.2204322651025663e+00 6.0778809239934031e+00
6 -7.1123146444528984e+01 7.7052674244983237e+01 6.6070828458754377e+01
7 1.0820695183752402e-01 -2.1456209303205753e+01 -1.2988794014127086e+02
8 2.7685557706153210e+00 -6.4055292922227114e+00 3.5054112799000308e+01
9 1.0385287876594045e+01 1.1200082574985384e+01 4.5981266271691283e+01
10 4.8483646678620808e+01 -6.2863078092157814e+01 -1.7919415564214969e+01
11 -1.1854585526102190e+00 -3.0186873903081461e+00 -4.9190342962819997e+00
12 8.7532668786692849e+00 4.0320399320855103e+00 -3.6940200610553369e+00
13 4.4340021275893049e+00 -1.7594799545276503e+00 -8.0344014115374854e-02
14 -1.8210427053902465e+00 3.6741358935389795e-01 -4.6918194401673006e+00
15 -1.0513684115705089e-01 4.6130019283969581e+00 1.6347276488933093e+00
16 4.1042300863600815e+01 -3.2293537348976294e+01 -9.0261473702885723e+01
17 -3.6114856830930577e+01 2.4604092710226865e+01 9.8841500263570012e+01
18 -1.8830057555437815e-02 -3.1807694496772947e-02 2.8355454534004447e-02
19 2.6053607178351323e-04 -1.3620418845373267e-04 1.2427459444534828e-03
20 -7.4132921210516805e-04 -7.5129738985115445e-04 2.4973630220728152e-04
21 -1.0785432870565986e+01 -1.2742946265488097e+01 3.6432133538627276e+01
22 -1.7555577697607394e+01 -4.2541329162364496e+00 -2.7543137610931119e+01
23 2.8333543503091875e+01 1.7005758896986869e+01 -8.8808421884931406e+00
24 6.9230417127829202e+00 -3.3463292262284696e+01 1.8600914290859674e+01
25 -2.4509700096241421e+01 3.9444180063920515e+00 -2.0606959828990203e+01
26 1.7575838201618030e+01 2.9510218159180141e+01 1.9863483973633074e+00
27 6.6485844671195089e+00 -3.6337865162938726e+01 1.3616306220323644e+01
28 -2.7672101461511541e+01 1.1892759906164907e+01 -1.8723455368858552e+01
29 2.1029504459272502e+01 2.4449997447911123e+01 5.1038895464304854e+00
run_vdwl: 120.389680224171
run_coul: 0
run_stress: ! |2-
2.5557166389926206e+02 2.5949417167124227e+02 3.7925104786399675e+02 -5.4331393627941310e+01 2.7328919467287310e+01 4.1740569884135837e+01
run_forces: ! |2
1 -9.5102708897346455e-01 3.5351062606429096e+01 3.9457733214248897e+01
2 1.8087890515496976e+01 1.4881434680716316e+01 -2.0866808731191739e+01
3 -1.9025508531664734e+01 -4.1963948953355988e+01 -1.6664473721320441e+01
4 -3.9859936185258591e+00 1.0788564827143394e+00 -2.9029989743807403e+00
5 -1.2023708529709598e+00 -2.0086879656199623e+00 5.6818744336161462e+00
6 -6.0409772126459337e+01 6.4308106551875014e+01 4.2296815285620539e+01
7 9.3621550069352033e-01 -1.7314144864058704e+01 -9.7141526659041332e+01
8 8.4374361809492626e-01 -3.2803089626972723e+00 3.3704954165999396e+01
9 8.3054222825151562e+00 8.6081913892167101e+00 3.6111642840146494e+01
10 4.2561465006293496e+01 -5.5914110438197461e+01 -1.7451020505581198e+01
11 -1.1800071294153933e+00 -2.7475347695713208e+00 -4.5818357717762055e+00
12 8.4355441219410157e+00 3.9902239161298425e+00 -4.1474152018012402e+00
13 4.1920543033657660e+00 -1.5869427440184440e+00 -6.2698395028072312e-02
14 -1.6199437861441099e+00 2.6216625984075043e-01 -4.1331730392715746e+00
15 -2.0331861757557249e-01 4.5411724061177665e+00 1.7063136735856890e+00
16 3.3204342242339152e+01 -2.7557624751669067e+01 -6.8101189912981496e+01
17 -2.7956860933621105e+01 1.9379541761121082e+01 7.7078954287050578e+01
18 -1.8741424461778945e-02 -3.1649884712668143e-02 2.8217417081434781e-02
19 1.9029936416168166e-04 -1.9563725068207617e-04 1.2476265945711711e-03
20 -6.5715774497830453e-04 -6.7847978231991518e-04 2.5322071517207300e-04
21 -9.1337259194023357e+00 -9.9740863798564536e+00 2.9985619540557138e+01
22 -1.4775512665496439e+01 -3.7890914376536640e+00 -2.2670107265406628e+01
23 2.3901611003748002e+01 1.3772048119294055e+01 -7.3071693693756625e+00
24 7.5921975362095528e+00 -2.9274148880351355e+01 1.7211334413645822e+01
25 -2.2853219834051913e+01 3.3601430585201730e+00 -1.9347508542196454e+01
26 1.5250009909775976e+01 2.5905316887603249e+01 2.1161976888390273e+00
27 5.7137029453806143e+00 -3.0279106879537387e+01 1.0695172767212116e+01
28 -2.2862798673549364e+01 9.8830244186589091e+00 -1.5214423020169862e+01
29 1.7155069074839023e+01 2.0400972490095437e+01 4.5160185346096364e+00
...

View File

@ -0,0 +1,90 @@
---
lammps_version: 21 Jul 2020
date_generated: Thu Jul 30 17:50:31 202
epsilon: 5e-14
prerequisites: ! |
atom full
pair lj96/cut
pre_commands: ! ""
post_commands: ! |
pair_modify mix arithmetic
input_file: in.fourmol
pair_style: lj96/cut 8.0
pair_coeff: ! |
1 1 0.03375 2.5
2 2 0.0084375 1
2 4 0.0084375 0.5
3 3 0.03375 3.2
4 4 0.0253125 3.1
5 5 0.0253125 3.1
extract: ! ""
natoms: 29
init_vdwl: 112.146791176334
init_coul: 0
init_stress: ! |2-
2.7158278777258107e+02 2.7440178205574091e+02 5.0791544617614926e+02 -7.4064553668076726e+01 1.5914543736637080e+01 6.4534029091470870e+01
init_forces: ! |2
1 -3.3777973593212809e+00 3.5545635438901954e+01 4.4314877326597234e+01
2 2.1246234898362292e+01 1.7476299423941875e+01 -2.5004215116563586e+01
3 -1.7927412817149385e+01 -4.9190396814315186e+01 -1.8896792785801519e+01
4 -2.2072043093017770e+00 5.6842818236266046e-01 -1.5742728020277861e+00
5 -7.0744981952807140e-01 -1.1922469268168869e+00 3.2437916035884831e+00
6 -8.6998267867026087e+01 9.7764473706343594e+01 1.0202986522306712e+02
7 3.9192203160616295e+00 -3.1196459404458086e+01 -1.6755500605471892e+02
8 1.0139684351085185e+01 -9.5490259386372500e+00 4.1301764730680418e+01
9 9.9859714866559290e+00 1.0771120636870165e+01 4.4213809582690985e+01
10 5.7818139733358116e+01 -6.9212661516922012e+01 -2.0461125385983994e+01
11 -6.2546377610776427e-01 -1.6067042936894926e+00 -2.6099632289340895e+00
12 4.7897264025969228e+00 2.3727904946045775e+00 -2.0472597104356356e+00
13 2.2916772472287570e+00 -9.1302577057923795e-01 -3.9825164685891618e-02
14 -9.5096714582282216e-01 1.9180313565563914e-01 -2.4414141103510900e+00
15 -4.9279341465817569e-02 2.3995669963138120e+00 8.4564728773676301e-01
16 4.8376700948044835e+01 -3.5754311268858402e+01 -1.1815109107161469e+02
17 -4.5689033351786698e+01 3.1549948855298439e+01 1.2281501700916789e+02
18 -1.7514642520770635e-02 -3.3311189388567079e-02 3.2078054477722696e-02
19 3.2652628216664009e-04 -5.1136464273309173e-04 2.5633332577917165e-03
20 -1.3444915196834763e-03 -1.4148545154393395e-03 6.1115167010809552e-04
21 -9.6598953585397211e+00 -1.1184810497697173e+01 3.1489525753831362e+01
22 -1.5114902822373411e+01 -3.6623747925443664e+00 -2.3714004395622915e+01
23 2.4761710640921983e+01 1.4862303459806434e+01 -7.7614857580049508e+00
24 5.5277946924940053e+00 -2.9228307700364422e+01 1.5836163373784084e+01
25 -2.0934231598109697e+01 3.3680636165303528e+00 -1.7602286256960230e+01
26 1.5393201782168342e+01 2.5846154974687341e+01 1.7391904339691853e+00
27 6.4971923893309373e+00 -3.1514490531631594e+01 1.2213590546072449e+01
28 -2.4531453852672385e+01 1.0543491079658937e+01 -1.6598700916460793e+01
29 1.8044637138654299e+01 2.0979972864085106e+01 4.3789473475744867e+00
run_vdwl: 85.3637858985071
run_coul: 0
run_stress: ! |2-
2.2754228627541102e+02 2.3244361909607221e+02 3.4720338018814073e+02 -6.2752907332006977e+01 2.0031328703307860e+01 4.5642299883984968e+01
run_forces: ! |2
1 -1.7102885069784018e-01 3.1533956108996044e+01 3.3930989107796911e+01
2 1.5242712436518843e+01 1.2559448850532041e+01 -1.7559550179061056e+01
3 -1.6411191452119652e+01 -3.9259275347259468e+01 -1.5175265603764856e+01
4 -2.1129024607003992e+00 5.5899779277359796e-01 -1.5412444123368652e+00
5 -6.5399311226949464e-01 -1.0992854083637122e+00 3.0847441904927702e+00
6 -6.6956140190141298e+01 7.0695358389850611e+01 4.4363555461094826e+01
7 3.2006694637513582e+00 -1.9015134117876272e+01 -9.4508817328761609e+01
8 4.3709804685094014e+00 -3.7828942844862610e+00 3.4420665964407604e+01
9 7.4255513265294741e+00 7.7714111044319969e+00 3.2469284047194634e+01
10 4.7868465571922641e+01 -5.7873993481240355e+01 -1.8445892867106085e+01
11 -6.4282354742693992e-01 -1.4901411864631078e+00 -2.4825345769459188e+00
12 4.6644382526129480e+00 2.3675273515613648e+00 -2.3210885143837441e+00
13 2.1755706764185181e+00 -8.2537435725404673e-01 -3.1764318332116126e-02
14 -8.4883782554397047e-01 1.3856669869330718e-01 -2.1638310551977069e+00
15 -9.8065086650338654e-02 2.4014804591867152e+00 8.9535982313950302e-01
16 3.1356115121770181e+01 -2.4553533117975913e+01 -7.1922364887796476e+01
17 -2.8374813038610231e+01 1.9897527415171968e+01 7.6971515508623952e+01
18 -1.7388092460317611e-02 -3.2978151143102555e-02 3.1978967188726254e-02
19 2.3207237645516519e-04 -5.8898238853603954e-04 2.5835874691380401e-03
20 -1.2239441378849943e-03 -1.3073743382692831e-03 6.0511915291252378e-04
21 -7.9294050694887739e+00 -8.5054797415804853e+00 2.5228413587702210e+01
22 -1.2417380443045314e+01 -3.1901494132514641e+00 -1.9020413060598994e+01
23 2.0333472638959208e+01 1.1711012905410914e+01 -6.1937024286615507e+00
24 6.6338736703656007e+00 -2.5347184037135683e+01 1.4941978068506790e+01
25 -1.9872316686870089e+01 2.8994801273220521e+00 -1.6817508030632830e+01
26 1.3225082814853838e+01 2.2433588031877850e+01 1.8484145884308429e+00
27 5.2058354737312715e+00 -2.5482655118182759e+01 9.2158010863084936e+00
28 -1.9559411413838472e+01 8.4316105041505196e+00 -1.3009506428903164e+01
29 1.4363921225681294e+01 1.7060008378980431e+01 3.7875945849736650e+00
...

View File

@ -0,0 +1,94 @@
---
lammps_version: 21 Jul 2020
date_generated: Fri Jul 31 12:10:52 202
epsilon: 5e-14
prerequisites: ! |
atom full
pair mie/cut
pre_commands: ! ""
post_commands: ! |
pair_modify mix arithmetic
input_file: in.fourmol
pair_style: mie/cut 8.0
pair_coeff: ! |
1 1 0.02 2.5 11.5 5.5
2 2 0.005 1.0 12.1 6.1
2 4 0.005 0.5 9.9 4.5
3 3 0.02 3.2 12.0 6.0
4 4 0.015 3.1 12.0 6.0
5 5 0.015 3.1 10.0 4.0
extract: ! |
epsilon 2
sigma 2
gamR 2
gamA 2
natoms: 29
init_vdwl: 572.65241169595
init_coul: 0
init_stress: ! |2-
1.5112451012221711e+03 1.6108090633309916e+03 3.6313538023188962e+03 -6.4519502381294672e+02 -7.6958115438443343e+01 5.2466156989449894e+02
init_forces: ! |2
1 -5.8786571485479342e+01 1.8079827320037572e+02 3.1108122148297724e+02
2 1.6574996599907652e+02 1.3639265892510775e+02 -1.9508174911047740e+02
3 -1.0556575177787515e+02 -3.0729492394021275e+02 -1.1643018530218110e+02
4 -6.9158847940436274e+00 1.8664536146166713e+00 -4.9177442130271061e+00
5 -2.2248911785940653e+00 -3.6055135301391625e+00 1.0645222793281134e+01
6 -6.4739901889394866e+02 7.4789819096880626e+02 8.8208297564676764e+02
7 4.2919652255963356e+01 -2.5769485911509145e+02 -1.3268558183204348e+03
8 8.9866897586934840e+01 -1.0626205537451992e+02 2.2132900964911838e+02
9 8.2981710277616131e+01 8.9392264033153111e+01 3.6724719266511363e+02
10 4.1798278249930138e+02 -4.7681101220557474e+02 -1.4267988158912885e+02
11 -2.0577291614058821e+00 -5.1770783338667874e+00 -8.4596450760102062e+00
12 1.2337038002060897e+01 6.4169814744056826e+00 -4.9357284141731874e+00
13 7.1191539550966878e+00 -2.8226358529509912e+00 -1.3071562684536020e-01
14 -2.9736757302518346e+00 6.0252756310798461e-01 -7.6831662329025932e+00
15 -1.7791849135049803e-01 7.4570683924340813e+00 2.6470427995260137e+00
16 3.5794281297583314e+02 -2.5516822690129456e+02 -9.2142059046624001e+02
17 -3.5076369676215467e+02 2.4403684457822652e+02 9.3354755530799275e+02
18 -1.8951126964912624e-02 -3.3993774502566194e-02 3.1533886412968185e-02
19 3.8800476434765256e-04 -2.7384118126890476e-04 1.9063062358782470e-03
20 -1.0827812240089239e-03 -1.1248902198540479e-03 4.6233482511654996e-04
21 -2.9561501874580159e+01 -3.3892173691417348e+01 9.4342070297487950e+01
22 -4.5192259597879939e+01 -1.0951488661627819e+01 -7.0902011595602801e+01
23 7.4740580624735912e+01 4.4858870593803836e+01 -2.3426093582270489e+01
24 1.5723489061598853e+01 -8.8155103130920935e+01 4.7060897039215362e+01
25 -6.2263260825297202e+01 1.0021822827689149e+01 -5.2346230791335181e+01
26 4.6527181452726950e+01 7.8119145678909035e+01 5.2589263025731130e+00
27 2.0888442237096100e+01 -9.4688431023944986e+01 3.7478527939720465e+01
28 -7.4711699859811475e+01 3.2108421478054176e+01 -5.0551006653560087e+01
29 5.3833799408056237e+01 6.2589370938775232e+01 1.3066022522941514e+01
run_vdwl: 131.819620520303
run_coul: 0
run_stress: ! |2-
5.2376360693642835e+02 5.7808495843346577e+02 4.5321969785624492e+02 -2.2533910749543824e+02 2.5446238074471928e+01 9.3000624407488445e+01
run_forces: ! |2
1 1.5269882261159061e+01 8.5457734305401502e+01 6.0203135045526906e+01
2 1.7309256021708190e+01 1.3327906939297119e+01 -2.0973172027242693e+01
3 -1.1348668391073240e+02 -1.6907934425683319e+01 8.8304974127351166e+00
4 -7.2611685656686955e+00 2.5440247467996895e+00 -5.2310253850736599e+00
5 -1.6331788851006233e+00 -2.4563580828052327e+00 9.1291658252154164e+00
6 -3.6304751097556647e+01 3.5989039476331882e+01 -6.1606249993575794e+01
7 4.4576729445436856e+00 -1.3824126675019009e+01 -5.7320638969633400e+01
8 -1.2611247591832864e+01 1.9534487230325507e+01 7.5227958247422706e+01
9 9.2896774614026967e+00 1.0731713246245308e+01 4.1288720638654937e+01
10 9.4327776819515861e+01 -1.0894475298691272e+02 -5.8475394508772112e+01
11 -4.5695652120382260e+00 -6.5415420663552508e+00 -1.2704215257635372e+01
12 1.0795905949967926e+01 7.6703950291745073e+00 -5.7682240949128900e+00
13 6.4628140331599777e+00 -2.4523641841992529e+00 -9.5484896445262660e-02
14 -2.4700568763322290e+00 3.9611003778965026e-01 -6.3058734689697280e+00
15 -3.3806295897988964e-01 7.1471351946850925e+00 2.6960805597741961e+00
16 4.0160220118648304e+01 -4.5015800901539421e+01 -2.2343490283291196e+01
17 -1.9362591683165103e+01 1.3367106544264416e+01 5.3433992362426636e+01
18 -1.8269471792509578e-02 -3.2492174873532322e-02 3.0338390664931467e-02
19 3.2503350050501191e-04 -2.8639278101074735e-04 1.8513053603820379e-03
20 -9.6205495509295920e-04 -1.0114694627461503e-03 4.4443061856092806e-04
21 -1.2403203032317574e+01 -1.3904861539263642e+01 4.2624743908416868e+01
22 -2.0606176232885055e+01 -5.1765533341392338e+00 -3.2178356967253826e+01
23 3.2995214962355504e+01 1.9097540785043826e+01 -1.0431241015469915e+01
24 1.2353976144502097e+01 -4.1826884116759601e+01 2.5796189871409752e+01
25 -3.3536020084019192e+01 5.3434177835053038e+00 -2.8542923861815211e+01
26 2.1168768190727246e+01 3.6468979949788483e+01 2.7194251563161034e+00
27 6.7596879628888722e+00 -4.2934067896212120e+01 1.4454254639022803e+01
28 -3.0946671037079934e+01 1.3715958306415276e+01 -2.0695277777595567e+01
29 2.4197430790376114e+01 2.9227486670938596e+01 6.2347707141212778e+00
...

View File

@ -25,6 +25,24 @@ using ::testing::EndsWith;
using ::testing::Eq;
using ::testing::StrEq;
TEST(Utils, trim)
{
auto trimmed = utils::trim("\t some text");
ASSERT_THAT(trimmed, StrEq("some text"));
trimmed = utils::trim("some text \r\n");
ASSERT_THAT(trimmed, StrEq("some text"));
trimmed = utils::trim("\v some text \f");
ASSERT_THAT(trimmed, StrEq("some text"));
trimmed = utils::trim(" some\t text ");
ASSERT_THAT(trimmed, StrEq("some\t text"));
trimmed = utils::trim(" \t\n ");
ASSERT_THAT(trimmed, StrEq(""));
}
TEST(Utils, trim_comment)
{
auto trimmed = utils::trim_comment("some text # comment");