From c64066eb21c0c21d4ac8b230f4347c7626bb59ff Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 21 Dec 2022 21:16:59 -0500 Subject: [PATCH] simplify processing of expressions --- src/LEPTON/pair_lepton.cpp | 27 ++++--- .../force-styles/tests/mol-pair-lepton.yaml | 78 +++++++++---------- 2 files changed, 54 insertions(+), 51 deletions(-) diff --git a/src/LEPTON/pair_lepton.cpp b/src/LEPTON/pair_lepton.cpp index f596a901f0..11587d637c 100644 --- a/src/LEPTON/pair_lepton.cpp +++ b/src/LEPTON/pair_lepton.cpp @@ -24,9 +24,11 @@ #include "neigh_list.h" #include "update.h" -#include +#include #include +#include "LMP_Lepton.h" + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ @@ -93,13 +95,14 @@ template 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 force; std::vector 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 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; } diff --git a/unittest/force-styles/tests/mol-pair-lepton.yaml b/unittest/force-styles/tests/mol-pair-lepton.yaml index 56640e3834..d58780b1fe 100644 --- a/unittest/force-styles/tests/mol-pair-lepton.yaml +++ b/unittest/force-styles/tests/mol-pair-lepton.yaml @@ -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