simplify processing of expressions
This commit is contained in:
@ -24,9 +24,11 @@
|
||||
#include "neigh_list.h"
|
||||
#include "update.h"
|
||||
|
||||
#include <LMP_Lepton.h>
|
||||
#include <cctype>
|
||||
#include <cstring>
|
||||
|
||||
#include "LMP_Lepton.h"
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
@ -93,13 +95,14 @@ template <int EVFLAG, int EFLAG, int NEWTON_PAIR> void PairLepton::eval()
|
||||
const int *const ilist = list->ilist;
|
||||
const int *const numneigh = list->numneigh;
|
||||
const int *const *const firstneigh = list->firstneigh;
|
||||
double fxtmp, fytmp, fztmp;
|
||||
|
||||
std::vector<LMP_Lepton::CompiledExpression> force;
|
||||
std::vector<LMP_Lepton::CompiledExpression> epot;
|
||||
for (const auto &expr : expressions) {
|
||||
force.emplace_back(
|
||||
LMP_Lepton::Parser::parse(expr).differentiate("r").createCompiledExpression());
|
||||
if (EFLAG) epot.emplace_back(LMP_Lepton::Parser::parse(expr).createCompiledExpression());
|
||||
auto parsed = LMP_Lepton::Parser::parse(expr);
|
||||
force.emplace_back(parsed.differentiate("r").createCompiledExpression());
|
||||
if (EFLAG) epot.emplace_back(parsed.createCompiledExpression());
|
||||
}
|
||||
|
||||
// loop over neighbors of my atoms
|
||||
@ -112,7 +115,6 @@ template <int EVFLAG, int EFLAG, int NEWTON_PAIR> void PairLepton::eval()
|
||||
const int itype = type[i];
|
||||
const int *jlist = firstneigh[i];
|
||||
const int jnum = numneigh[i];
|
||||
double fxtmp, fytmp, fztmp;
|
||||
fxtmp = fytmp = fztmp = 0.0;
|
||||
|
||||
for (int jj = 0; jj < jnum; jj++) {
|
||||
@ -210,8 +212,9 @@ void PairLepton::coeff(int narg, char **arg)
|
||||
if (!isspace(c) && (c != '"') && (c != '\'')) exp_one.push_back(c);
|
||||
|
||||
try {
|
||||
auto epot = LMP_Lepton::Parser::parse(exp_one).createCompiledExpression();
|
||||
auto force = LMP_Lepton::Parser::parse(exp_one).differentiate("r").createCompiledExpression();
|
||||
auto parsed = LMP_Lepton::Parser::parse(exp_one);
|
||||
auto epot = parsed.createCompiledExpression();
|
||||
auto force = parsed.differentiate("r").createCompiledExpression();
|
||||
double &r_pot = epot.getVariableReference("r");
|
||||
double &r_for = force.getVariableReference("r");
|
||||
r_for = r_pot = 1.0;
|
||||
@ -281,15 +284,15 @@ void PairLepton::write_data_all(FILE *fp)
|
||||
double PairLepton::single(int /* i */, int /* j */, int itype, int jtype, double rsq,
|
||||
double /* factor_coul */, double factor_lj, double &fforce)
|
||||
{
|
||||
auto expr = expressions[type2expression[itype][jtype]];
|
||||
auto epot = LMP_Lepton::Parser::parse(expr).createCompiledExpression();
|
||||
auto force = LMP_Lepton::Parser::parse(expr).differentiate("r").createCompiledExpression();
|
||||
auto parsed = LMP_Lepton::Parser::parse(expressions[type2expression[itype][jtype]]);
|
||||
auto epot = parsed.createCompiledExpression();
|
||||
auto force = parsed.differentiate("r").createCompiledExpression();
|
||||
|
||||
double r = sqrt(rsq);
|
||||
double &r_pot = epot.getVariableReference("r");
|
||||
double &r_for = force.getVariableReference("r");
|
||||
|
||||
r_pot = r_for = r;
|
||||
fforce = -force.evaluate() / r;
|
||||
return epot.evaluate();
|
||||
fforce = -force.evaluate() / r * factor_lj;
|
||||
return epot.evaluate() * factor_lj;
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
lammps_version: 3 Nov 2022
|
||||
tags: generated
|
||||
date_generated: Wed Dec 21 18:26:23 2022
|
||||
date_generated: Wed Dec 21 20:29:34 2022
|
||||
epsilon: 5e-14
|
||||
skip_tests:
|
||||
prerequisites: ! |
|
||||
@ -30,65 +30,65 @@ natoms: 29
|
||||
init_vdwl: 749.2370315373564
|
||||
init_coul: 0
|
||||
init_stress: ! |2-
|
||||
2.1793853434038242e+03 2.1988955172192768e+03 4.6653977523326257e+03 -7.5956547636050584e+02 2.4751536734032868e+01 6.6652028436400667e+02
|
||||
2.1793853434038242e+03 2.1988955172192768e+03 4.6653977523326257e+03 -7.5956547636050584e+02 2.4751536734032861e+01 6.6652028436400667e+02
|
||||
init_forces: ! |2
|
||||
1 -2.3333390280895909e+01 2.6994567613322647e+02 3.3272827850356805e+02
|
||||
1 -2.3333390280895912e+01 2.6994567613322641e+02 3.3272827850356805e+02
|
||||
2 1.5828554630414899e+02 1.3025008843535872e+02 -1.8629682358935722e+02
|
||||
3 -1.3528903738169063e+02 -3.8704313358319996e+02 -1.4568978437133106e+02
|
||||
4 -7.8711096705893366e+00 2.1350518625373534e+00 -5.5954532185548143e+00
|
||||
5 -2.5176757268228540e+00 -4.0521510681020230e+00 1.2152704057877019e+01
|
||||
6 -8.3190662465252137e+02 9.6394149462625592e+02 1.1509093566509246e+03
|
||||
7 5.8203388932513604e+01 -3.3608997951626793e+02 -1.7179617996573040e+03
|
||||
8 1.4451392284291526e+02 -1.0927475861088995e+02 3.9990593492420442e+02
|
||||
3 -1.3528903738169066e+02 -3.8704313358319990e+02 -1.4568978437133106e+02
|
||||
4 -7.8711096705893366e+00 2.1350518625373538e+00 -5.5954532185548134e+00
|
||||
5 -2.5176757268228540e+00 -4.0521510681020239e+00 1.2152704057877019e+01
|
||||
6 -8.3190662465252137e+02 9.6394149462625603e+02 1.1509093566509248e+03
|
||||
7 5.8203388932513583e+01 -3.3608997951626793e+02 -1.7179617996573040e+03
|
||||
8 1.4451392284291535e+02 -1.0927475861088995e+02 3.9990593492420442e+02
|
||||
9 7.9156945283097443e+01 8.5273009783986538e+01 3.5032175698445189e+02
|
||||
10 5.3118875219105371e+02 -6.1040990859419412e+02 -1.8355872642619292e+02
|
||||
11 -2.3530157267965524e+00 -5.9077640073819726e+00 -9.6590723955414290e+00
|
||||
12 1.7527155146800425e+01 1.0633119523437513e+01 -7.9254398064483160e+00
|
||||
13 8.0986409579532950e+00 -3.2098088264781550e+00 -1.4896399843793842e-01
|
||||
14 -3.3852721292265158e+00 6.8636181241903627e-01 -8.7507190862499868e+00
|
||||
15 -2.0454999188605297e-01 8.4846165523049901e+00 3.0131615419406712e+00
|
||||
10 5.3118875219105360e+02 -6.1040990859419412e+02 -1.8355872642619292e+02
|
||||
11 -2.3530157267965532e+00 -5.9077640073819717e+00 -9.6590723955414290e+00
|
||||
12 1.7527155146800425e+01 1.0633119523437511e+01 -7.9254398064483169e+00
|
||||
13 8.0986409579532967e+00 -3.2098088264781546e+00 -1.4896399843793839e-01
|
||||
14 -3.3852721292265153e+00 6.8636181241903649e-01 -8.7507190862499868e+00
|
||||
15 -2.0454999188605300e-01 8.4846165523049883e+00 3.0131615419406712e+00
|
||||
16 4.6326310311812108e+02 -3.3087715736498188e+02 -1.1893024561782554e+03
|
||||
17 -4.5334300923766733e+02 3.1554283255882575e+02 1.2058417793481203e+03
|
||||
18 -1.8862623280672661e-02 -3.3402010907951661e-02 3.1000479299095263e-02
|
||||
19 3.1843079640570047e-04 -2.3918627818763423e-04 1.7427252638513439e-03
|
||||
20 -9.9760831209706009e-04 -1.0209184826753086e-03 3.6910972636601454e-04
|
||||
17 -4.5334300923766727e+02 3.1554283255882569e+02 1.2058417793481203e+03
|
||||
18 -1.8862623280672661e-02 -3.3402010907951661e-02 3.1000479299095260e-02
|
||||
19 3.1843079640570047e-04 -2.3918627818763426e-04 1.7427252638513439e-03
|
||||
20 -9.9760831209706009e-04 -1.0209184826753090e-03 3.6910972636601454e-04
|
||||
21 -7.1566125273265186e+01 -8.1615678329920655e+01 2.2589561408339890e+02
|
||||
22 -1.0808835729977497e+02 -2.6193787235943894e+01 -1.6957904943161401e+02
|
||||
23 1.7964455474779490e+02 1.0782097695276948e+02 -5.6305786479140629e+01
|
||||
22 -1.0808835729977498e+02 -2.6193787235943887e+01 -1.6957904943161401e+02
|
||||
23 1.7964455474779487e+02 1.0782097695276950e+02 -5.6305786479140636e+01
|
||||
24 3.6591406576584546e+01 -2.1181587621785579e+02 1.1218301872572377e+02
|
||||
25 -1.4851489147738798e+02 2.3907118122949061e+01 -1.2485634873166291e+02
|
||||
26 1.1191129453598218e+02 1.8789774664223384e+02 1.2650137204319906e+01
|
||||
26 1.1191129453598219e+02 1.8789774664223384e+02 1.2650137204319904e+01
|
||||
27 5.1810388677546001e+01 -2.2705458321213797e+02 9.0849111082069669e+01
|
||||
28 -1.8041307121444069e+02 7.7534042932772905e+01 -1.2206956760706598e+02
|
||||
29 1.2861057254925012e+02 1.4952711274394568e+02 3.1216025556267880e+01
|
||||
run_vdwl: 719.4432816774653
|
||||
run_coul: 0
|
||||
run_stress: ! |2-
|
||||
2.1330153957371017e+03 2.1547728168285516e+03 4.3976497417710116e+03 -7.3873328448298525e+02 4.1743821105368760e+01 6.2788012209191072e+02
|
||||
2.1330153957371017e+03 2.1547728168285516e+03 4.3976497417710125e+03 -7.3873328448298525e+02 4.1743821105370067e+01 6.2788012209191027e+02
|
||||
run_forces: ! |2
|
||||
1 -2.0299419751359164e+01 2.6686193378823020e+02 3.2358785870694010e+02
|
||||
1 -2.0299419751359164e+01 2.6686193378823020e+02 3.2358785870694015e+02
|
||||
2 1.5298617928491225e+02 1.2596516341409203e+02 -1.7961292655338619e+02
|
||||
3 -1.3353630652439830e+02 -3.7923748696131315e+02 -1.4291839793625815e+02
|
||||
3 -1.3353630652439830e+02 -3.7923748696131315e+02 -1.4291839793625817e+02
|
||||
4 -7.8374717836161762e+00 2.1276610789823409e+00 -5.5845014473820616e+00
|
||||
5 -2.5014258630866721e+00 -4.0250131424704412e+00 1.2103512372025637e+01
|
||||
5 -2.5014258630866735e+00 -4.0250131424704412e+00 1.2103512372025639e+01
|
||||
6 -8.0681462887292457e+02 9.2165637136761688e+02 1.0270795806932783e+03
|
||||
7 5.5780279349903516e+01 -3.1117530951561662e+02 -1.5746991292869018e+03
|
||||
7 5.5780279349903523e+01 -3.1117530951561656e+02 -1.5746991292869018e+03
|
||||
8 1.3452983055535049e+02 -1.0064659350255911e+02 3.8851791558207651e+02
|
||||
9 7.6746213883425980e+01 8.2501469877402130e+01 3.3944351200617888e+02
|
||||
9 7.6746213883425980e+01 8.2501469877402130e+01 3.3944351200617882e+02
|
||||
10 5.2128033527695595e+02 -5.9920098848285863e+02 -1.8126029815043339e+02
|
||||
11 -2.3573118090915250e+00 -5.8616944550888368e+00 -9.6049808811326240e+00
|
||||
12 1.7503975847822900e+01 1.0626930310560816e+01 -8.0603160272054986e+00
|
||||
13 8.0530313322973104e+00 -3.1756495170399108e+00 -1.4618315664740528e-01
|
||||
14 -3.3416065168069768e+00 6.6492606336082150e-01 -8.6345131440469700e+00
|
||||
15 -2.2253843262374914e-01 8.5025661635348762e+00 3.0369735873081622e+00
|
||||
11 -2.3573118090915246e+00 -5.8616944550888359e+00 -9.6049808811326205e+00
|
||||
12 1.7503975847822900e+01 1.0626930310560814e+01 -8.0603160272054968e+00
|
||||
13 8.0530313322973104e+00 -3.1756495170399117e+00 -1.4618315664740528e-01
|
||||
14 -3.3416065168069773e+00 6.6492606336082150e-01 -8.6345131440469700e+00
|
||||
15 -2.2253843262374914e-01 8.5025661635348779e+00 3.0369735873081622e+00
|
||||
16 4.3476311264989465e+02 -3.1171086735551415e+02 -1.1135217194927448e+03
|
||||
17 -4.2469846140777139e+02 2.9615411776780593e+02 1.1302573488400665e+03
|
||||
18 -1.8849981672825911e-02 -3.3371636477421307e-02 3.0986293443778734e-02
|
||||
19 3.0940277774414016e-04 -2.4634536455373038e-04 1.7433360008861014e-03
|
||||
20 -9.8648131277150747e-04 -1.0112587134526948e-03 3.6932948773965417e-04
|
||||
17 -4.2469846140777133e+02 2.9615411776780593e+02 1.1302573488400669e+03
|
||||
18 -1.8849981672825908e-02 -3.3371636477421307e-02 3.0986293443778727e-02
|
||||
19 3.0940277774414027e-04 -2.4634536455373044e-04 1.7433360008861016e-03
|
||||
20 -9.8648131277150790e-04 -1.0112587134526946e-03 3.6932948773965417e-04
|
||||
21 -7.0490745283106378e+01 -7.9749153581142139e+01 2.2171003384646431e+02
|
||||
22 -1.0638717908920071e+02 -2.5949502163177975e+01 -1.6645589526812273e+02
|
||||
23 1.7686797710735033e+02 1.0571018898885515e+02 -5.5243337084099373e+01
|
||||
22 -1.0638717908920071e+02 -2.5949502163177968e+01 -1.6645589526812276e+02
|
||||
23 1.7686797710735027e+02 1.0571018898885514e+02 -5.5243337084099387e+01
|
||||
24 3.8206017656281375e+01 -2.1022820141992960e+02 1.1260711266189014e+02
|
||||
25 -1.4918881473530880e+02 2.3762151395876508e+01 -1.2549188139143085e+02
|
||||
26 1.1097059498808308e+02 1.8645503634228518e+02 1.2861559677865248e+01
|
||||
|
||||
Reference in New Issue
Block a user