Merge branch 'develop' into dpd-exclusions
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
---
|
||||
lammps_version: 17 Feb 2022
|
||||
lammps_version: 3 Nov 2022
|
||||
tags: slow, unstable
|
||||
date_generated: Fri Mar 18 22:17:38 2022
|
||||
date_generated: Sat Dec 17 23:00:39 2022
|
||||
epsilon: 5e-13
|
||||
skip_tests:
|
||||
prerequisites: ! |
|
||||
@ -26,142 +26,142 @@ pair_coeff: ! |
|
||||
* * Si.b.meam.sw.spline Si
|
||||
extract: ! ""
|
||||
natoms: 64
|
||||
init_vdwl: -110.4685773088353
|
||||
init_vdwl: -110.45990817806636
|
||||
init_coul: 0
|
||||
init_stress: ! |2-
|
||||
2.0342092779841650e+02 2.9353890615210491e+02 1.9138584169384231e+02 -1.3797329301045073e+02 6.0306018863011829e+01 1.2377595362950453e+02
|
||||
2.0350171190213450e+02 2.9342452017616694e+02 1.9128146785117693e+02 -1.3797012820305963e+02 6.0431847076778510e+01 1.2362227514422503e+02
|
||||
init_forces: ! |2
|
||||
1 -1.3233766738474692e+01 -1.2736008818268305e+01 -8.4807945144710555e+00
|
||||
2 4.9498134298370466e-01 -4.8711972803905459e+00 1.9841873228328510e+00
|
||||
3 -2.2604016428394664e+00 -2.3773175770601909e+00 -4.7907075017529648e+00
|
||||
4 1.3198738000680255e+01 -1.3577671743256937e+01 1.6136271940741899e+01
|
||||
5 1.3902528433647081e+01 1.1756623545348988e+01 1.8280754013108911e+01
|
||||
6 6.8901540190015753e+00 5.2819576857359163e-01 -7.8675982110956089e-01
|
||||
7 4.3967551798115430e+01 -4.9117468284031069e+01 -4.6363366102651781e+01
|
||||
8 -3.1836191663317337e-01 3.0883879768115423e+00 -5.1097052576388817e+00
|
||||
9 -2.7908068855958064e+00 7.7050982801788672e+00 3.2330955564482178e+00
|
||||
10 -5.7249949603241612e+00 -2.2680807026413912e+00 -1.2451606782165879e-01
|
||||
11 -1.9879293598329475e+00 -5.8832854828991987e-01 2.0392314122323150e+00
|
||||
12 7.0064742872897612e-01 1.5300407641809619e+00 1.9000606332983492e+00
|
||||
13 2.8830277529522497e+00 -5.0376828573060344e+00 -4.5641123318483308e+00
|
||||
14 -3.5641086637719632e-01 3.3316973827322767e+00 1.5520247413460666e+00
|
||||
15 3.0195673029305787e+00 -1.1370113697966344e+00 1.9231351239885948e+00
|
||||
16 -6.7288387376476857e+00 5.3263608478791351e+00 -5.2764472456917471e+00
|
||||
17 7.4834137661319025e+00 -7.7902264484075019e+00 8.6946252726062188e+00
|
||||
18 -4.1755975129522884e+00 -2.5699430657626188e+00 -4.2977836975529948e+00
|
||||
19 3.4108501677115384e+00 -5.0213644929496608e+00 8.4390529912948757e+00
|
||||
20 -1.0033945038903749e+01 -3.3507901111231821e+00 -4.6727488289742460e+00
|
||||
21 -6.2068540652920579e+00 3.4071004287861375e+00 -4.8503524549897090e+00
|
||||
22 3.7044509064649720e+00 3.2034743805306962e+00 -7.0182724459224566e-01
|
||||
23 -2.5146112597771859e+00 -4.3317040448192579e+00 -7.5642656175920084e+00
|
||||
24 4.5635360363434234e+00 3.7023566850766709e+00 1.0812746608801380e+01
|
||||
25 -2.0835780726789699e-01 -4.2486174698035821e+00 -6.3897079308047167e-02
|
||||
26 -1.0306970316379593e+00 1.8427304456474338e+00 -6.4139589311691783e+00
|
||||
27 -1.1354569624638295e+00 -5.5273698842261254e+00 -2.3879597418825951e-01
|
||||
28 8.1362602673385371e+00 -2.0456822074343437e+00 1.7204148428462642e+00
|
||||
29 -2.2247398315739852e+00 -7.3248457690196389e-02 1.8441359740570151e+00
|
||||
30 -1.2789440378883537e+01 2.4830270828827270e+01 -2.1324012707920357e+01
|
||||
31 1.0993950780682002e+01 -4.5313116880177020e+00 -4.7804805413834908e+00
|
||||
32 1.0405553416694007e+00 -1.4936536344769231e+00 -3.5285730009134086e+00
|
||||
33 5.4882081643447567e-01 7.8491703768034684e+00 -2.6377232295983504e+00
|
||||
34 5.2588981785394004e+01 -2.1918831265373466e+01 2.1956598057755027e+01
|
||||
35 7.8046474262570298e-01 -2.4881347014019544e+00 6.0375630102203459e+00
|
||||
36 -4.2276865007716971e+01 5.4292350981572241e+01 4.9266989003858072e+01
|
||||
37 -1.1097260777380873e+00 -1.3126379440500497e+00 -6.8247662398165758e+00
|
||||
38 -1.1302711987789383e+01 1.6616699599538180e+01 -1.7028541395741779e+01
|
||||
39 -9.2892522944056155e-01 1.9571409406642393e+00 -3.2188700631890752e+00
|
||||
40 7.5598353472862199e+00 -3.9109458144193141e+01 -9.5038831607955103e+00
|
||||
41 -2.9987592250018720e+00 -6.1730115339276184e+00 -1.1793981243395150e+01
|
||||
42 -1.0360977396201188e+01 6.6892184962390875e+00 7.5363206935697198e+00
|
||||
43 -1.1668025864243502e+01 7.0175372926437785e+00 5.4689942823204074e+00
|
||||
44 6.0934247741301695e+00 -4.1895487094142743e+00 4.5026721419464559e+00
|
||||
45 1.6017089669249820e+01 -2.2402232430874434e+00 -2.7719950140384331e+00
|
||||
46 3.5932060444148934e+00 5.9257448622076971e+00 6.1003594763960436e+00
|
||||
47 -2.6290070974586186e+00 4.7681540193691125e+00 -1.2904578913990603e+00
|
||||
48 -5.5728737956379845e+01 2.5287896488381207e+01 -2.0428163751586954e+01
|
||||
49 -3.2724342987980446e+00 1.7363088781894047e+00 4.8211177632820839e+00
|
||||
50 -2.2022396801693262e+01 -2.7641097475421510e+01 -2.4432235819738597e+01
|
||||
51 -1.0738607486290219e+01 3.8073941000621211e+01 8.1548278739928062e+00
|
||||
52 -2.8582782068459767e+00 4.2124013433380201e+00 9.5650482538226385e+00
|
||||
53 3.5465862163071282e+00 -3.3605789011337004e+00 -6.5797550404237644e+00
|
||||
54 3.1393777827811043e+01 2.9600429284967177e+01 2.0373612442781965e+01
|
||||
55 4.1215698722609977e+00 1.8763276909679188e-03 -2.3728054463263124e+00
|
||||
56 -6.0442642446931147e+00 -2.8689617852051787e+00 -3.0019651755639689e+00
|
||||
57 2.1401151485932792e+00 -1.2229191196896019e+00 4.8698905173700258e+00
|
||||
58 -9.7025892151733117e+00 7.3623122638373237e+00 1.0736672663939244e+01
|
||||
59 -3.8957031419279904e+00 -1.5915332786509047e+00 -4.1982658455255226e+00
|
||||
60 6.6878116992399157e+00 -1.4070238165554530e+01 2.9727739780104184e+01
|
||||
61 1.2492349457611645e+01 -1.3371823784683157e+01 -5.5022361108002711e+00
|
||||
62 3.3475883989333277e+00 1.8378592752954344e+00 -7.1680291906892242e+00
|
||||
63 -7.7783175923354015e+00 3.7799886336365374e+00 1.0295328521877045e+00
|
||||
64 3.7357026805307170e+00 -1.3007690662030017e+01 -6.0208957069512170e+00
|
||||
run_vdwl: -111.22630929183559
|
||||
1 -1.3233811198083473e+01 -1.2736070572233329e+01 -8.4808707273035289e+00
|
||||
2 4.9498356454890757e-01 -4.8711993070333719e+00 1.9841883858153286e+00
|
||||
3 -2.2604015964092734e+00 -2.3773175064717433e+00 -4.7907074442860882e+00
|
||||
4 1.3198495667301660e+01 -1.3577359962998221e+01 1.6135900269928786e+01
|
||||
5 1.3902572533362436e+01 1.1756686047828252e+01 1.8280830704653489e+01
|
||||
6 6.8901544498669205e+00 5.2819569465710137e-01 -7.8675970607736578e-01
|
||||
7 4.3858481944382739e+01 -4.8974286475602334e+01 -4.6231366131073685e+01
|
||||
8 -3.1836179677528631e-01 3.0883878491155285e+00 -5.1097051698112885e+00
|
||||
9 -2.7908095248034255e+00 7.7050989788849229e+00 3.2330987076748587e+00
|
||||
10 -5.7249961606595763e+00 -2.2680837690646087e+00 -1.2452112047906680e-01
|
||||
11 -1.9879292365572312e+00 -5.8832851574163936e-01 2.0392314498102331e+00
|
||||
12 7.0064739474212279e-01 1.5300407800949549e+00 1.9000606550776706e+00
|
||||
13 2.8830274358395283e+00 -5.0376820012332697e+00 -4.5641116436844307e+00
|
||||
14 -3.5641260564338506e-01 3.3317009680357290e+00 1.5520274033544506e+00
|
||||
15 3.0195672387262178e+00 -1.1370114571140135e+00 1.9231350506598899e+00
|
||||
16 -6.7288411021202830e+00 5.3263626672277216e+00 -5.2764485786438211e+00
|
||||
17 7.4834073691973026e+00 -7.7902077849150420e+00 8.6946083644000645e+00
|
||||
18 -4.1756000744532198e+00 -2.5699474404925233e+00 -4.2977874669285603e+00
|
||||
19 3.4108454732862374e+00 -5.0213597975523943e+00 8.4390485643106246e+00
|
||||
20 -1.0033983766292760e+01 -3.3508182855136392e+00 -4.6727668152728583e+00
|
||||
21 -6.2068494074121645e+00 3.4070957302285363e+00 -4.8503479996939900e+00
|
||||
22 3.7044534861596565e+00 3.2034787738399917e+00 -7.0182395452992430e-01
|
||||
23 -2.5146192150472082e+00 -4.3316985441243663e+00 -7.5642672212040489e+00
|
||||
24 4.5635759613141307e+00 3.7023860947043450e+00 1.0812763904657421e+01
|
||||
25 -2.0835780555539607e-01 -4.2486174661555722e+00 -6.3897075384915791e-02
|
||||
26 -1.0306968351593842e+00 1.8427306767096827e+00 -6.4139591865712822e+00
|
||||
27 -1.1354568445282713e+00 -5.5273694393623494e+00 -2.3879582065193236e-01
|
||||
28 8.1362600938228198e+00 -2.0456819704776552e+00 1.7204145778921043e+00
|
||||
29 -2.2247398380759718e+00 -7.3248479911558251e-02 1.8441359889693270e+00
|
||||
30 -1.2788614550584091e+01 2.4828651534012934e+01 -2.1322030730397760e+01
|
||||
31 1.0993954630004431e+01 -4.5313145116300353e+00 -4.7804850374814167e+00
|
||||
32 1.0405552742373023e+00 -1.4936535709138568e+00 -3.5285729643114303e+00
|
||||
33 5.4881998361355722e-01 7.8491703819858571e+00 -2.6377221587778279e+00
|
||||
34 5.2721626611219037e+01 -2.1972649913555475e+01 2.2001582329032132e+01
|
||||
35 7.8046407448302557e-01 -2.4881341790488016e+00 6.0375624798010783e+00
|
||||
36 -4.2167795201634242e+01 5.4149169101126176e+01 4.9134988976588311e+01
|
||||
37 -1.1097252327675804e+00 -1.3126386445976488e+00 -6.8247658163360274e+00
|
||||
38 -1.1302469682373458e+01 1.6616387782494165e+01 -1.7028169695344555e+01
|
||||
39 -9.2892522463802696e-01 1.9571409331999179e+00 -3.2188700594313868e+00
|
||||
40 7.5630028960466937e+00 -3.9121102313877714e+01 -9.5066743263819298e+00
|
||||
41 -2.9987879448499966e+00 -6.1730610483318253e+00 -1.1794027684883742e+01
|
||||
42 -1.0360882357115676e+01 6.6890493268949065e+00 7.5361994774552929e+00
|
||||
43 -1.1667930030103422e+01 7.0174270055138965e+00 5.4689192658765542e+00
|
||||
44 6.0934281073497489e+00 -4.1895504295266566e+00 4.5026735618393401e+00
|
||||
45 1.6017023562469621e+01 -2.2400034625153515e+00 -2.7718328892561077e+00
|
||||
46 3.5932093762208366e+00 5.9257470157791374e+00 6.1003623889196570e+00
|
||||
47 -2.6290067163402946e+00 4.7681539533521855e+00 -1.2904576402655159e+00
|
||||
48 -5.5861382924441671e+01 2.5341715275733023e+01 -2.0473147948383666e+01
|
||||
49 -3.2724345985967904e+00 1.7363091809835076e+00 4.8211179467361323e+00
|
||||
50 -2.2002984296233528e+01 -2.7610743882564218e+01 -2.4410540195558234e+01
|
||||
51 -1.0741775062953366e+01 3.8085585188567762e+01 8.1576190338034706e+00
|
||||
52 -2.8582756100878535e+00 4.2123991529361975e+00 9.5650475070144942e+00
|
||||
53 3.5465861785641004e+00 -3.3605788219482475e+00 -6.5797549973970169e+00
|
||||
54 3.1374365642277844e+01 2.9570075174444383e+01 2.0351916011911861e+01
|
||||
55 4.1215699988090861e+00 1.8760809587661381e-03 -2.3728057583532447e+00
|
||||
56 -6.0442668733285645e+00 -2.8689665103480944e+00 -3.0019616498966610e+00
|
||||
57 2.1401204449590918e+00 -1.2229224608062954e+00 4.8698934985533544e+00
|
||||
58 -9.7024299844860753e+00 7.3621166640646809e+00 1.0736582585674951e+01
|
||||
59 -3.8957030684671095e+00 -1.5915332094618051e+00 -4.1982657990053340e+00
|
||||
60 6.6869819394334442e+00 -1.4068616474102360e+01 2.9725762153889967e+01
|
||||
61 1.2492189265796137e+01 -1.3371626727184099e+01 -5.5021469647060943e+00
|
||||
62 3.3475899298830174e+00 1.8378574063324831e+00 -7.1680310819544770e+00
|
||||
63 -7.7783113903011145e+00 3.7799697198580851e+00 1.0295498375740173e+00
|
||||
64 3.7356072289615092e+00 -1.3007580203154737e+01 -6.0208216221556690e+00
|
||||
run_vdwl: -111.21659048600658
|
||||
run_coul: 0
|
||||
run_stress: ! |2-
|
||||
2.0268172075658492e+02 2.9202363331200354e+02 1.9043000043817165e+02 -1.3707745415338965e+02 6.0598083239028021e+01 1.2285776451761184e+02
|
||||
2.0278201563362660e+02 2.9196565283353033e+02 1.9037039860821531e+02 -1.3710859201604316e+02 6.0684008748230653e+01 1.2275684393379780e+02
|
||||
run_forces: ! |2
|
||||
1 -1.3259971465044423e+01 -1.2785507515610863e+01 -8.5197054623155530e+00
|
||||
2 5.0023309040456532e-01 -4.8629821346591795e+00 1.9764637802294918e+00
|
||||
3 -2.2677377931427651e+00 -2.3823794887731360e+00 -4.7863635818250927e+00
|
||||
4 1.3113686584152981e+01 -1.3489592055692098e+01 1.6008105019735645e+01
|
||||
5 1.3949850627612765e+01 1.1802431751261093e+01 1.8335073239201932e+01
|
||||
6 6.8700059599304835e+00 5.4632722241298493e-01 -7.7579366725791987e-01
|
||||
7 4.3275509857286906e+01 -4.8188171188196151e+01 -4.5485997882690398e+01
|
||||
8 -3.1267253007980922e-01 3.0619466279952148e+00 -5.0916203779899440e+00
|
||||
9 -2.7680038664874678e+00 7.7108153646655655e+00 3.2031965356030496e+00
|
||||
10 -5.7499642075322877e+00 -2.2513095203424780e+00 -1.4961892415499414e-01
|
||||
11 -1.9770455308916988e+00 -6.0859736334867121e-01 2.0310691193888224e+00
|
||||
12 6.9143091304328874e-01 1.5362150617603580e+00 1.9105458106096598e+00
|
||||
13 2.8821268950193271e+00 -5.0412778155023341e+00 -4.5774889161321575e+00
|
||||
14 -3.4026296338944279e-01 3.3455427303911374e+00 1.5416232789862561e+00
|
||||
15 3.0117987911570441e+00 -1.1326582122483435e+00 1.9346917657223297e+00
|
||||
16 -6.7251326136538632e+00 5.3239141745364069e+00 -5.2704562317352375e+00
|
||||
17 7.4914508411345295e+00 -7.8091971878857560e+00 8.7060891880171418e+00
|
||||
18 -4.1485302648778859e+00 -2.5358947212814784e+00 -4.2715486201212647e+00
|
||||
19 3.3929001519571935e+00 -5.0018517915393863e+00 8.4079161422171946e+00
|
||||
20 -9.9896694052802051e+00 -3.3300642136542478e+00 -4.6643224057399060e+00
|
||||
21 -6.1850679399687802e+00 3.3655028451983426e+00 -4.8256026788711797e+00
|
||||
22 3.6983129889973867e+00 3.1864466416482267e+00 -7.4235391538159734e-01
|
||||
23 -2.5749936905630229e+00 -4.3029124136071131e+00 -7.5353137097190119e+00
|
||||
24 4.5118562964627431e+00 3.6640294382434444e+00 1.0808620291017327e+01
|
||||
25 -1.9905841234184962e-01 -4.2464962096117116e+00 -5.5938452120617654e-02
|
||||
26 -1.0041302295782324e+00 1.8728515247709714e+00 -6.4399612121672156e+00
|
||||
27 -1.1363432509016962e+00 -5.5049482411900188e+00 -2.4416486932327680e-01
|
||||
28 8.1582966157400474e+00 -2.0697008984401011e+00 1.7453003252016368e+00
|
||||
29 -2.2213122098447089e+00 -8.2219102349693984e-02 1.8569043534000080e+00
|
||||
30 -1.2752816277373864e+01 2.4795468764313537e+01 -2.1239324573748515e+01
|
||||
31 1.0972163329240701e+01 -4.5588375698197927e+00 -4.7869908799780365e+00
|
||||
32 1.0250061984028942e+00 -1.4743612310521961e+00 -3.5284731569219070e+00
|
||||
33 5.4538327077332127e-01 7.8615911602531590e+00 -2.6331024735532056e+00
|
||||
34 5.2364508196019209e+01 -2.1834356779138908e+01 2.1852462470193895e+01
|
||||
35 7.7239745337792087e-01 -2.4828689677368065e+00 6.0353567610222552e+00
|
||||
36 -4.1592314121759863e+01 5.3378122737562812e+01 4.8379946388391694e+01
|
||||
37 -1.1456952560401832e+00 -1.2960690800316954e+00 -6.8000337140193352e+00
|
||||
38 -1.1227602017822559e+01 1.6529641618878070e+01 -1.6889824660716410e+01
|
||||
39 -9.1938958651913938e-01 1.9471112748920445e+00 -3.2198805693822781e+00
|
||||
40 7.4050718754646585e+00 -3.8600411631398224e+01 -9.3537056118342079e+00
|
||||
41 -3.0229312818078165e+00 -6.2342550627164695e+00 -1.1833111961190037e+01
|
||||
42 -1.0336694715877714e+01 6.6354687142043485e+00 7.5168878239381076e+00
|
||||
43 -1.1637868235626810e+01 6.9696891071476665e+00 5.4371037833311089e+00
|
||||
44 6.0904513196304402e+00 -4.1975760185068047e+00 4.5054224621815724e+00
|
||||
45 1.6031315765437839e+01 -2.1394586514120038e+00 -2.7078408723361429e+00
|
||||
46 3.5948043061696824e+00 5.9275217477059945e+00 6.1074785077440854e+00
|
||||
47 -2.6391255276766992e+00 4.7863681670595222e+00 -1.3072321957877850e+00
|
||||
48 -5.5471981663752139e+01 2.5167897402815846e+01 -2.0344143018180695e+01
|
||||
49 -3.2526098388448768e+00 1.7194455454367283e+00 4.8130045427378230e+00
|
||||
50 -2.1910451325714845e+01 -2.7485335190262969e+01 -2.4262559250289886e+01
|
||||
51 -1.0565501586153097e+01 3.7572592869115532e+01 7.9831187165076036e+00
|
||||
52 -2.8044641239131578e+00 4.1696380611953190e+00 9.5523117595610074e+00
|
||||
53 3.5287651358156618e+00 -3.3421579723008881e+00 -6.5746035144914430e+00
|
||||
54 3.1296089184161161e+01 2.9418636142806918e+01 2.0199210426427342e+01
|
||||
55 4.1204287109949345e+00 1.7030760637765846e-02 -2.3522790658213930e+00
|
||||
56 -6.0369235940879911e+00 -2.8871731180420022e+00 -2.9896086478010102e+00
|
||||
57 2.1307462888977895e+00 -1.2434142909255332e+00 4.8929315574044434e+00
|
||||
58 -9.7169870210491620e+00 7.3813253707945155e+00 1.0719388370967391e+01
|
||||
59 -3.8916559500256014e+00 -1.5800121900587745e+00 -4.1928647410442981e+00
|
||||
60 6.6406627240187008e+00 -1.4050265401488096e+01 2.9636127557766176e+01
|
||||
61 1.2482906655377750e+01 -1.3384445091695822e+01 -5.4994898586073724e+00
|
||||
62 3.3195581608350606e+00 1.8799825808485258e+00 -7.1649172910789147e+00
|
||||
63 -7.7828693881668114e+00 3.8094361085430393e+00 1.0129025465982244e+00
|
||||
64 3.7000596982734959e+00 -1.2966233196575327e+01 -5.9930155597749764e+00
|
||||
1 -1.3259978633464177e+01 -1.2785532232507787e+01 -8.5197370183469303e+00
|
||||
2 5.0023463042634919e-01 -4.8629839983894687e+00 1.9764645477639764e+00
|
||||
3 -2.2677340380111897e+00 -2.3823801306646986e+00 -4.7863622705188522e+00
|
||||
4 1.3113537844730940e+01 -1.3489403159697542e+01 1.6007877153189018e+01
|
||||
5 1.3949863862840170e+01 1.1802451909716837e+01 1.8335098219605719e+01
|
||||
6 6.8700137988599668e+00 5.4631770212153274e-01 -7.7578735563235379e-01
|
||||
7 4.3213280095662221e+01 -4.8106538159631121e+01 -4.5410788094546071e+01
|
||||
8 -3.1267225367424112e-01 3.0619466622486655e+00 -5.0916205207462077e+00
|
||||
9 -2.7680066583528302e+00 7.7108162463904755e+00 3.2031999239646542e+00
|
||||
10 -5.7499735539633026e+00 -2.2513084672141246e+00 -1.4961584089763580e-01
|
||||
11 -1.9770454420993797e+00 -6.0859742805741157e-01 2.0310692906086936e+00
|
||||
12 6.9143079821127973e-01 1.5362150155123482e+00 1.9105459280617763e+00
|
||||
13 2.8821252136741036e+00 -5.0412776050744181e+00 -4.5774869468556183e+00
|
||||
14 -3.4026558408257607e-01 3.3455465711167331e+00 1.5416272679877727e+00
|
||||
15 3.0117991067172944e+00 -1.1326582425675449e+00 1.9346920772805363e+00
|
||||
16 -6.7251346010776007e+00 5.3239161230086847e+00 -5.2704570632624401e+00
|
||||
17 7.4914438512526793e+00 -7.8091780190082964e+00 8.7060720123349302e+00
|
||||
18 -4.1485327457855297e+00 -2.5358989211851095e+00 -4.2715522677312627e+00
|
||||
19 3.3928960221345994e+00 -5.0018476549734761e+00 8.4079123008469772e+00
|
||||
20 -9.9897044942485440e+00 -3.3300920928189734e+00 -4.6643377700872879e+00
|
||||
21 -6.1850637798823778e+00 3.3654986361588097e+00 -4.8255986905167108e+00
|
||||
22 3.6983153288358510e+00 3.1864500918260981e+00 -7.4235257572708291e-01
|
||||
23 -2.5750009268475167e+00 -4.3029075498683502e+00 -7.5353156249093223e+00
|
||||
24 4.5118949699368471e+00 3.6640567458950368e+00 1.0808635558626152e+01
|
||||
25 -1.9905849555362187e-01 -4.2464960192430805e+00 -5.5938409330784700e-02
|
||||
26 -1.0041301344608495e+00 1.8728517721776416e+00 -6.4399614508944172e+00
|
||||
27 -1.1363431093220604e+00 -5.5049477291890847e+00 -2.4416492572214263e-01
|
||||
28 8.1582963607510059e+00 -2.0697006063972636e+00 1.7453001192115123e+00
|
||||
29 -2.2213122145063657e+00 -8.2219125373579560e-02 1.8569043649968835e+00
|
||||
30 -1.2751938662307330e+01 2.4793741244844590e+01 -2.1237214938305609e+01
|
||||
31 1.0972168292596997e+01 -4.5588412158547982e+00 -4.7869954899032807e+00
|
||||
32 1.0250061092808203e+00 -1.4743612117243319e+00 -3.5284730537005391e+00
|
||||
33 5.4538221253924690e-01 7.8615914789139492e+00 -2.6331013470806925e+00
|
||||
34 5.2486931547333640e+01 -2.1884004475548586e+01 2.1893968170317077e+01
|
||||
35 7.7239787887230649e-01 -2.4828673998703619e+00 6.0353547166087589e+00
|
||||
36 -4.1530101704334513e+01 5.3296493449945032e+01 4.8304727868612716e+01
|
||||
37 -1.1456741162176780e+00 -1.2960801714813199e+00 -6.8000652143556461e+00
|
||||
38 -1.1227445979412337e+01 1.6529461582816090e+01 -1.6889583696345390e+01
|
||||
39 -9.1938960561536964e-01 1.9471112176329801e+00 -3.2198804999037716e+00
|
||||
40 7.4088379908548809e+00 -3.8614320146440100e+01 -9.3570332534589102e+00
|
||||
41 -3.0229506499150802e+00 -6.2342994850422304e+00 -1.1833145756819462e+01
|
||||
42 -1.0336604197023160e+01 6.6353075485251711e+00 7.5167730258326477e+00
|
||||
43 -1.1637778195494137e+01 6.9695856271463370e+00 5.4370328998343123e+00
|
||||
44 6.0904485274855276e+00 -4.1975820947018798e+00 4.5054170467968211e+00
|
||||
45 1.6031254396705599e+01 -2.1392555102605630e+00 -2.7076873780982331e+00
|
||||
46 3.5948075218533067e+00 5.9275221219429692e+00 6.1074811717880166e+00
|
||||
47 -2.6391206054786429e+00 4.7863663883409071e+00 -1.3072309977813386e+00
|
||||
48 -5.5594403994418371e+01 2.5217546159882438e+01 -2.0385639375558931e+01
|
||||
49 -3.2526134666777224e+00 1.7194495192628758e+00 4.8130021607449294e+00
|
||||
50 -2.1892633687672998e+01 -2.7457506105212300e+01 -2.4242705118718845e+01
|
||||
51 -1.0569276795989660e+01 3.7586501103592596e+01 7.9864439631038282e+00
|
||||
52 -2.8044621735529511e+00 4.1696365367253403e+00 9.5523111890623920e+00
|
||||
53 3.5287596696315706e+00 -3.3421549912652146e+00 -6.5745990319567866e+00
|
||||
54 3.1278267281173559e+01 2.9390812532904047e+01 2.0179362941646520e+01
|
||||
55 4.1204297618690076e+00 1.7031306830161741e-02 -2.3522777301755653e+00
|
||||
56 -6.0369254287992504e+00 -2.8871794964247837e+00 -2.9896043766168501e+00
|
||||
57 2.1307520645435751e+00 -1.2434173268184785e+00 4.8929341792886945e+00
|
||||
58 -9.7168295235679079e+00 7.3811310401646226e+00 1.0719299024637088e+01
|
||||
59 -3.8916657289633636e+00 -1.5800001191446256e+00 -4.1928629000664497e+00
|
||||
60 6.6397803880477504e+00 -1.4048535326399252e+01 2.9634022422542763e+01
|
||||
61 1.2482748007630276e+01 -1.3384249682560251e+01 -5.4994015730404975e+00
|
||||
62 3.3195599047315758e+00 1.8799804853587909e+00 -7.1649193418076056e+00
|
||||
63 -7.7828598440066212e+00 3.8094125465752326e+00 1.0129155683781550e+00
|
||||
64 3.6999675855963172e+00 -1.2966127466966569e+01 -5.9929472142538129e+00
|
||||
...
|
||||
|
||||
@ -86,6 +86,13 @@ if(CMAKE_Fortran_COMPILER)
|
||||
target_link_libraries(test_fortran_neighlist PRIVATE flammps lammps GTest::GMockMain)
|
||||
add_test(NAME FortranNeighlist COMMAND test_fortran_neighlist)
|
||||
|
||||
# gfortran from GCC 9 on ubuntu has an ICE compiling this test.
|
||||
if ((CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") AND (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER 9.9))
|
||||
add_executable(test_fortran_fixexternal wrap_fixexternal.cpp test_fortran_fixexternal.f90)
|
||||
target_link_libraries(test_fortran_fixexternal PRIVATE flammps lammps GTest::GMockMain)
|
||||
add_test(NAME FortranFixExternal COMMAND test_fortran_fixexternal)
|
||||
endif()
|
||||
|
||||
else()
|
||||
message(STATUS "Skipping Tests for the LAMMPS Fortran Module: no Fortran compiler")
|
||||
endif()
|
||||
|
||||
424
unittest/fortran/test_fortran_fixexternal.f90
Normal file
424
unittest/fortran/test_fortran_fixexternal.f90
Normal file
@ -0,0 +1,424 @@
|
||||
MODULE ext_stuff
|
||||
USE, INTRINSIC :: ISO_Fortran_ENV, ONLY : error_unit
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int, c_int64_t, c_loc
|
||||
USE LIBLAMMPS
|
||||
IMPLICIT NONE
|
||||
|
||||
INTEGER, PARAMETER :: vec_length = 8
|
||||
REAL(c_double), SAVE :: direction = 1.0_c_double
|
||||
REAL(c_double), DIMENSION(:,:), POINTER, SAVE :: f3 => NULL(), f4 => NULL()
|
||||
|
||||
CONTAINS
|
||||
|
||||
SUBROUTINE f_lammps_reverse_direction() BIND(C)
|
||||
direction = -direction
|
||||
END SUBROUTINE f_lammps_reverse_direction
|
||||
|
||||
SUBROUTINE f_callback_ss(instance, timestep, id, x, f)
|
||||
CLASS(*), INTENT(INOUT) :: instance
|
||||
INTEGER(c_int) :: timestep
|
||||
INTEGER(c_int), DIMENSION(:), INTENT(IN) :: id
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(IN) :: x
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(OUT) :: f
|
||||
REAL(c_double), DIMENSION(SIZE(id)) :: e
|
||||
REAL(c_double), DIMENSION(6,SIZE(id)) :: v
|
||||
|
||||
WHERE (id == 1)
|
||||
f(1,:) = 1.0_c_double
|
||||
f(2,:) = -1.0_c_double
|
||||
f(3,:) = 1.25_c_double
|
||||
e = 1.0_c_double
|
||||
v(1,:) = 1.0_c_double
|
||||
v(2,:) = 2.0_c_double
|
||||
v(3,:) = -1.0_c_double
|
||||
v(4,:) = -2.0_c_double
|
||||
v(5,:) = 3.0_c_double
|
||||
v(6,:) = -3.0_c_double
|
||||
ELSEWHERE
|
||||
f(1,:) = -1.0_c_double
|
||||
f(2,:) = +1.0_c_double
|
||||
f(3,:) = -1.25_c_double
|
||||
e = 10.0_c_double
|
||||
v(1,:) = 10.0_c_double
|
||||
v(2,:) = 20.0_c_double
|
||||
v(3,:) = -10.0_c_double
|
||||
v(4,:) = -20.0_c_double
|
||||
v(5,:) = 30.0_c_double
|
||||
v(6,:) = -30.0_c_double
|
||||
END WHERE
|
||||
SELECT TYPE (instance)
|
||||
CLASS IS (lammps)
|
||||
CALL instance%fix_external_set_energy_peratom('ext1', e)
|
||||
CALL instance%fix_external_set_virial_peratom('ext1', v)
|
||||
CLASS DEFAULT
|
||||
WRITE(error_unit,*) 'UMM...this should never happen.'
|
||||
STOP 1
|
||||
END SELECT
|
||||
END SUBROUTINE f_callback_ss
|
||||
|
||||
SUBROUTINE f_callback_sb(instance, timestep, id, x, f)
|
||||
CLASS(*), INTENT(INOUT) :: instance
|
||||
INTEGER(c_int64_t) :: timestep
|
||||
INTEGER(c_int), DIMENSION(:), INTENT(IN) :: id
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(IN) :: x
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(OUT) :: f
|
||||
REAL(c_double), DIMENSION(SIZE(id)) :: e
|
||||
REAL(c_double), DIMENSION(6,SIZE(id)) :: v
|
||||
|
||||
WHERE (id == 1_c_int)
|
||||
f(1,:) = 1.0_c_double
|
||||
f(2,:) = -1.0_c_double
|
||||
f(3,:) = 1.25_c_double
|
||||
e = 1.0_c_double
|
||||
v(1,:) = 1.0_c_double
|
||||
v(2,:) = 2.0_c_double
|
||||
v(3,:) = -1.0_c_double
|
||||
v(4,:) = -2.0_c_double
|
||||
v(5,:) = 3.0_c_double
|
||||
v(6,:) = -3.0_c_double
|
||||
ELSEWHERE
|
||||
f(1,:) = -1.0_c_double
|
||||
f(2,:) = +1.0_c_double
|
||||
f(3,:) = -1.25_c_double
|
||||
e = 10.0_c_double
|
||||
v(1,:) = 10.0_c_double
|
||||
v(2,:) = 20.0_c_double
|
||||
v(3,:) = -10.0_c_double
|
||||
v(4,:) = -20.0_c_double
|
||||
v(5,:) = 30.0_c_double
|
||||
v(6,:) = -30.0_c_double
|
||||
END WHERE
|
||||
SELECT TYPE (instance)
|
||||
CLASS IS (lammps)
|
||||
CALL instance%fix_external_set_energy_peratom('ext1', e)
|
||||
CALL instance%fix_external_set_virial_peratom('ext1', v)
|
||||
CLASS DEFAULT
|
||||
WRITE(error_unit,*) 'UMM...this should never happen.'
|
||||
STOP 1
|
||||
END SELECT
|
||||
END SUBROUTINE f_callback_sb
|
||||
|
||||
SUBROUTINE f_callback_bb(instance, timestep, id, x, f)
|
||||
CLASS(*), INTENT(INOUT) :: instance
|
||||
INTEGER(c_int64_t) :: timestep
|
||||
INTEGER(c_int64_t), DIMENSION(:), INTENT(IN) :: id
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(IN) :: x
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(OUT) :: f
|
||||
REAL(c_double), DIMENSION(SIZE(id)) :: e
|
||||
REAL(c_double), DIMENSION(6,SIZE(id)) :: v
|
||||
|
||||
WHERE (id == 1_c_int64_t)
|
||||
f(1,:) = 1.0_c_double
|
||||
f(2,:) = -1.0_c_double
|
||||
f(3,:) = 1.25_c_double
|
||||
e = 1.0_c_double
|
||||
v(1,:) = 1.0_c_double
|
||||
v(2,:) = 2.0_c_double
|
||||
v(3,:) = -1.0_c_double
|
||||
v(4,:) = -2.0_c_double
|
||||
v(5,:) = 3.0_c_double
|
||||
v(6,:) = -3.0_c_double
|
||||
ELSEWHERE
|
||||
f(1,:) = -1.0_c_double
|
||||
f(2,:) = +1.0_c_double
|
||||
f(3,:) = -1.25_c_double
|
||||
e = 10.0_c_double
|
||||
v(1,:) = 10.0_c_double
|
||||
v(2,:) = 20.0_c_double
|
||||
v(3,:) = -10.0_c_double
|
||||
v(4,:) = -20.0_c_double
|
||||
v(5,:) = 30.0_c_double
|
||||
v(6,:) = -30.0_c_double
|
||||
END WHERE
|
||||
SELECT TYPE (instance)
|
||||
CLASS IS (lammps)
|
||||
CALL instance%fix_external_set_energy_peratom('ext1', e)
|
||||
CALL instance%fix_external_set_virial_peratom('ext1', v)
|
||||
CLASS DEFAULT
|
||||
WRITE(error_unit,*) 'UMM...this should never happen.'
|
||||
STOP 1
|
||||
END SELECT
|
||||
END SUBROUTINE f_callback_bb
|
||||
|
||||
SUBROUTINE f_callback2_ss(entity, timestep, id, x, f)
|
||||
CLASS(*), INTENT(INOUT), target :: entity
|
||||
INTEGER(c_int) :: timestep
|
||||
INTEGER(c_int), DIMENSION(:), INTENT(IN) :: id
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(IN) :: x
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(OUT) :: f
|
||||
|
||||
SELECT TYPE (entity)
|
||||
TYPE IS (REAL(c_double))
|
||||
WHERE (id == 1_c_int)
|
||||
f(1,:) = SIGN(1.0_c_double, entity) * 2.0_c_double
|
||||
f(2,:) = SIGN(1.0_c_double, entity) * (-2.0_c_double)
|
||||
f(3,:) = SIGN(1.0_c_double, entity) * 2.5_c_double
|
||||
ELSEWHERE
|
||||
f(1,:) = SIGN(1.0_c_double, entity) * (-2.0_c_double)
|
||||
f(2,:) = SIGN(1.0_c_double, entity) * 2.0_c_double
|
||||
f(3,:) = SIGN(1.0_c_double, entity) * (-2.5_c_double)
|
||||
END WHERE
|
||||
CLASS DEFAULT
|
||||
WRITE(error_unit,'(A)') 'ERROR: Failed to resolve "entity" in&
|
||||
& f_callback2_ss'
|
||||
STOP 1
|
||||
END SELECT
|
||||
END SUBROUTINE f_callback2_ss
|
||||
|
||||
SUBROUTINE f_callback2_sb(entity, timestep, id, x, f)
|
||||
CLASS(*), INTENT(INOUT), target :: entity
|
||||
INTEGER(c_int64_t) :: timestep
|
||||
INTEGER(c_int), DIMENSION(:), INTENT(IN) :: id
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(IN) :: x
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(OUT) :: f
|
||||
|
||||
SELECT TYPE (entity)
|
||||
TYPE IS (REAL(c_double))
|
||||
WHERE (id == 1_c_int)
|
||||
f(1,:) = SIGN(1.0_c_double, entity) * 2.0_c_double
|
||||
f(2,:) = SIGN(1.0_c_double, entity) * (-2.0_c_double)
|
||||
f(3,:) = SIGN(1.0_c_double, entity) * 2.5_c_double
|
||||
ELSEWHERE
|
||||
f(1,:) = SIGN(1.0_c_double, entity) * (-2.0_c_double)
|
||||
f(2,:) = SIGN(1.0_c_double, entity) * 2.0_c_double
|
||||
f(3,:) = SIGN(1.0_c_double, entity) * (-2.5_c_double)
|
||||
END WHERE
|
||||
CLASS DEFAULT
|
||||
WRITE(error_unit,'(A)') 'ERROR: Failed to resolve "entity" in&
|
||||
& f_callback2_sb'
|
||||
STOP 1
|
||||
END SELECT
|
||||
END SUBROUTINE f_callback2_sb
|
||||
|
||||
SUBROUTINE f_callback2_bb(entity, timestep, id, x, f)
|
||||
CLASS(*), INTENT(INOUT), target :: entity
|
||||
INTEGER(c_int64_t) :: timestep
|
||||
INTEGER(c_int64_t), DIMENSION(:), INTENT(IN) :: id
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(IN) :: x
|
||||
REAL(c_double), DIMENSION(:,:), INTENT(OUT) :: f
|
||||
|
||||
SELECT TYPE (entity)
|
||||
TYPE IS (REAL(c_double))
|
||||
WHERE (id == 1_c_int64_t)
|
||||
f(1,:) = SIGN(1.0_c_double, entity) * 2.0_c_double
|
||||
f(2,:) = SIGN(1.0_c_double, entity) * (-2.0_c_double)
|
||||
f(3,:) = SIGN(1.0_c_double, entity) * 2.5_c_double
|
||||
ELSEWHERE
|
||||
f(1,:) = SIGN(1.0_c_double, entity) * (-2.0_c_double)
|
||||
f(2,:) = SIGN(1.0_c_double, entity) * 2.0_c_double
|
||||
f(3,:) = SIGN(1.0_c_double, entity) * (-2.5_c_double)
|
||||
END WHERE
|
||||
CLASS DEFAULT
|
||||
WRITE(error_unit,'(A)') 'ERROR: Failed to resolve "entity" in&
|
||||
& f_callback2_sb'
|
||||
STOP 1
|
||||
END SELECT
|
||||
END SUBROUTINE f_callback2_bb
|
||||
END MODULE ext_stuff
|
||||
|
||||
FUNCTION f_lammps_with_args() BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY: c_ptr
|
||||
USE liblammps
|
||||
USE keepstuff, ONLY: lmp
|
||||
IMPLICIT NONE
|
||||
TYPE(c_ptr) :: f_lammps_with_args
|
||||
|
||||
CHARACTER(len=12), DIMENSION(12), PARAMETER :: args = &
|
||||
[ CHARACTER(len=12) :: 'liblammps', '-log', 'none', &
|
||||
'-echo','screen','-nocite','-var','zpos','1.5','-var','x','2']
|
||||
|
||||
lmp = lammps(args)
|
||||
f_lammps_with_args = lmp%handle
|
||||
END FUNCTION f_lammps_with_args
|
||||
|
||||
SUBROUTINE f_lammps_close() BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY: c_null_ptr
|
||||
USE liblammps
|
||||
USE keepstuff, ONLY: lmp
|
||||
IMPLICIT NONE
|
||||
|
||||
CALL lmp%close()
|
||||
lmp%handle = c_null_ptr
|
||||
END SUBROUTINE f_lammps_close
|
||||
|
||||
SUBROUTINE f_lammps_setup_fix_external_callback() BIND(C)
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp, demo_input, cont_input, pair_input
|
||||
USE ext_stuff, ONLY : vec_length
|
||||
IMPLICIT NONE
|
||||
|
||||
CALL lmp%commands_list(demo_input)
|
||||
CALL lmp%commands_list(cont_input)
|
||||
CALL lmp%commands_list(pair_input)
|
||||
CALL lmp%command('neigh_modify exclude group all all')
|
||||
CALL lmp%command('fix ext1 all external pf/callback 1 1')
|
||||
CALL lmp%command('fix ext2 all external pf/callback 1 1')
|
||||
CALL lmp%fix_external_set_vector_length('ext2', vec_length)
|
||||
END SUBROUTINE f_lammps_setup_fix_external_callback
|
||||
|
||||
SUBROUTINE f_lammps_setup_fix_external_array() BIND(C)
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp, demo_input, cont_input, pair_input
|
||||
USE ext_stuff, ONLY : f3, f4
|
||||
IMPLICIT NONE
|
||||
|
||||
CALL lmp%commands_list(demo_input)
|
||||
CALL lmp%commands_list(cont_input)
|
||||
CALL lmp%commands_list(pair_input)
|
||||
CALL lmp%command('neigh_modify exclude group all all')
|
||||
CALL lmp%command('fix ext3 all external pf/array 1')
|
||||
CALL lmp%command('fix ext4 all external pf/array 1')
|
||||
CALL lmp%command('thermo_style custom step pxx pe etotal')
|
||||
CALL lmp%command('thermo_modify norm no')
|
||||
CALL lmp%command('thermo 100')
|
||||
f3 = lmp%fix_external_get_force('ext3')
|
||||
f4 = lmp%fix_external_get_force('ext4')
|
||||
END SUBROUTINE f_lammps_setup_fix_external_array
|
||||
|
||||
SUBROUTINE f_lammps_set_fix_external_callbacks() BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
USE ext_stuff
|
||||
IMPLICIT NONE
|
||||
INTEGER :: size_bigint, size_tagint, nlocal
|
||||
|
||||
nlocal = lmp%extract_setting('nlocal')
|
||||
|
||||
size_bigint = lmp%extract_setting('bigint')
|
||||
size_tagint = lmp%extract_setting('tagint')
|
||||
IF (size_bigint == 4_c_int .AND. size_tagint == 4_c_int) THEN
|
||||
CALL lmp%set_fix_external_callback('ext1', f_callback_ss, lmp)
|
||||
CALL lmp%set_fix_external_callback('ext2', f_callback2_ss, direction)
|
||||
ELSE IF (size_bigint == 8_c_int .AND. size_tagint == 8_c_int) THEN
|
||||
CALL lmp%set_fix_external_callback('ext1', f_callback_bb, lmp)
|
||||
CALL lmp%set_fix_external_callback('ext2', f_callback2_bb, direction)
|
||||
ELSE
|
||||
CALL lmp%set_fix_external_callback('ext1', f_callback_sb, lmp)
|
||||
CALL lmp%set_fix_external_callback('ext2', f_callback2_sb, direction)
|
||||
END IF
|
||||
END SUBROUTINE f_lammps_set_fix_external_callbacks
|
||||
|
||||
SUBROUTINE f_lammps_get_force (i, ptr) BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int, c_double, c_ptr, C_F_POINTER
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
IMPLICIT NONE
|
||||
INTEGER(c_int), INTENT(IN), VALUE :: i
|
||||
TYPE(c_ptr), INTENT(IN), VALUE :: ptr
|
||||
REAL(c_double), DIMENSION(:,:), POINTER :: force => NULL()
|
||||
REAL(c_double), DIMENSION(:), POINTER :: f => NULL()
|
||||
|
||||
CALL C_F_POINTER(ptr, f, [3])
|
||||
force = lmp%extract_atom('f')
|
||||
f = force(:,i)
|
||||
END SUBROUTINE f_lammps_get_force
|
||||
|
||||
SUBROUTINE f_lammps_find_forces() BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int, c_int64_t
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
USE ext_stuff, ONLY : f3, f4
|
||||
IMPLICIT NONE
|
||||
INTEGER(c_int) :: size_tagint
|
||||
INTEGER(c_int), DIMENSION(:), POINTER :: id
|
||||
INTEGER(c_int64_t), DIMENSION(:), POINTER :: tag
|
||||
|
||||
f3(:,:) = 0.0_c_double
|
||||
f4(:,:) = 0.0_c_double
|
||||
size_tagint = lmp%extract_setting('tagint')
|
||||
IF (size_tagint == 4_c_int) THEN
|
||||
id = lmp%extract_atom('id')
|
||||
WHERE (id == 1_c_int)
|
||||
f3(1,:) = 4.0_c_double
|
||||
f3(2,:) = -4.0_c_double
|
||||
f3(3,:) = 6.0_c_double
|
||||
f4(1,:) = 10.0_c_double
|
||||
f4(2,:) = -10.0_c_double
|
||||
f4(3,:) = 12.0_c_double
|
||||
ELSEWHERE
|
||||
f3(1,:) = 5.0_c_double
|
||||
f3(2,:) = -5.0_c_double
|
||||
f3(3,:) = 7.0_c_double
|
||||
f4(1,:) = 11.0_c_double
|
||||
f4(2,:) = -11.0_c_double
|
||||
f4(3,:) = 13.0_c_double
|
||||
END WHERE
|
||||
ELSE
|
||||
tag = lmp%extract_atom('id')
|
||||
WHERE (tag == 1_c_int64_t)
|
||||
f3(1,:) = 4.0_c_double
|
||||
f3(2,:) = -4.0_c_double
|
||||
f3(3,:) = 6.0_c_double
|
||||
f4(1,:) = 10.0_c_double
|
||||
f4(2,:) = -10.0_c_double
|
||||
f4(3,:) = 12.0_c_double
|
||||
ELSEWHERE
|
||||
f3(1,:) = 5.0_c_double
|
||||
f3(2,:) = -5.0_c_double
|
||||
f3(3,:) = 7.0_c_double
|
||||
f4(1,:) = 11.0_c_double
|
||||
f4(2,:) = -11.0_c_double
|
||||
f4(3,:) = 13.0_c_double
|
||||
END WHERE
|
||||
END IF
|
||||
END SUBROUTINE f_lammps_find_forces
|
||||
|
||||
SUBROUTINE f_lammps_add_energy() BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
IMPLICIT NONE
|
||||
|
||||
CALL lmp%fix_external_set_energy_global('ext3', -20.2_c_double);
|
||||
END SUBROUTINE f_lammps_add_energy
|
||||
|
||||
SUBROUTINE f_lammps_set_virial() BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
IMPLICIT NONE
|
||||
|
||||
CALL lmp%fix_external_set_virial_global('ext4', [1.0_c_double, &
|
||||
2.0_c_double, 2.5_c_double, -1.0_c_double, -2.25_c_double, -3.02_c_double])
|
||||
END SUBROUTINE f_lammps_set_virial
|
||||
|
||||
FUNCTION f_lammps_find_peratom_energy(i) RESULT(energy) BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int, c_double
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
IMPLICIT NONE
|
||||
INTEGER(c_int), INTENT(IN), VALUE :: i
|
||||
REAL(c_double) :: energy
|
||||
REAL(c_double), DIMENSION(:), POINTER :: e
|
||||
|
||||
e = lmp%extract_compute('peratom', lmp%style%atom, lmp%type%vector)
|
||||
energy = e(i)
|
||||
END FUNCTION f_lammps_Find_peratom_energy
|
||||
|
||||
SUBROUTINE f_lammps_find_peratom_virial(v, i) BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int, c_double
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
IMPLICIT NONE
|
||||
REAL(c_double), DIMENSION(6) :: v
|
||||
INTEGER(c_int), INTENT(IN), VALUE :: i
|
||||
REAL(c_double), DIMENSION(:,:), POINTER :: virial
|
||||
|
||||
virial = lmp%extract_compute('vperatom', lmp%style%atom, lmp%type%array)
|
||||
v = virial(:,i)
|
||||
END SUBROUTINE f_lammps_find_peratom_virial
|
||||
|
||||
SUBROUTINE f_lammps_fixexternal_set_vector() BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
USE ext_stuff, ONLY : vec_length
|
||||
IMPLICIT NONE
|
||||
REAL(c_double), DIMENSION(vec_length) :: v
|
||||
INTEGER :: i
|
||||
DO i = 1, vec_length
|
||||
v(i) = REAL(i, c_double)
|
||||
CALL lmp%fix_external_set_vector('ext2', i, v(i))
|
||||
END DO
|
||||
END SUBROUTINE f_lammps_fixexternal_set_vector
|
||||
@ -24,13 +24,17 @@ END SUBROUTINE f_lammps_close
|
||||
|
||||
SUBROUTINE f_lammps_setup_gather_scatter() BIND(C)
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp, big_input, cont_input, more_input
|
||||
USE keepstuff, ONLY : lmp, big_input, cont_input, more_input, pair_input
|
||||
IMPLICIT NONE
|
||||
|
||||
CALL lmp%command('atom_modify map array')
|
||||
CALL lmp%commands_list(big_input)
|
||||
CALL lmp%commands_list(cont_input)
|
||||
CALL lmp%commands_list(more_input)
|
||||
CALL lmp%commands_list(pair_input)
|
||||
CALL lmp%command('mass 1 1.0')
|
||||
CALL lmp%command("compute pe all pe/atom")
|
||||
CALL lmp%command("fix dummy all ave/atom 1 1 1 c_pe")
|
||||
END SUBROUTINE f_lammps_setup_gather_scatter
|
||||
|
||||
FUNCTION f_lammps_gather_atoms_mask(i) BIND(C)
|
||||
@ -262,3 +266,90 @@ FUNCTION f_lammps_test_gather_bonds_big() BIND(C) RESULT(success)
|
||||
success = 0_c_int
|
||||
END IF
|
||||
END FUNCTION f_lammps_test_gather_bonds_big
|
||||
|
||||
FUNCTION f_lammps_gather_pe_atom(i) BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int, c_double
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
IMPLICIT NONE
|
||||
INTEGER(c_int), INTENT(IN), VALUE :: i
|
||||
REAL(c_double) :: f_lammps_gather_pe_atom
|
||||
REAL(c_double), DIMENSION(:), ALLOCATABLE :: pe_atom
|
||||
|
||||
CALL lmp%gather('c_pe', 1_c_int, pe_atom)
|
||||
f_lammps_gather_pe_atom = pe_atom(i)
|
||||
END FUNCTION f_lammps_gather_pe_atom
|
||||
|
||||
FUNCTION f_lammps_gather_pe_atom_concat(i) BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int, c_double
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
IMPLICIT NONE
|
||||
INTEGER(c_int), INTENT(IN), VALUE :: i
|
||||
REAL(c_double) :: f_lammps_gather_pe_atom_concat
|
||||
REAL(c_double), DIMENSION(:), ALLOCATABLE :: pe_atom
|
||||
INTEGER(c_int), DIMENSION(:), ALLOCATABLE :: tag
|
||||
INTEGER :: j
|
||||
|
||||
CALL lmp%gather_concat('id', 1_c_int, tag)
|
||||
CALL lmp%gather_concat('c_pe', 1_c_int, pe_atom)
|
||||
DO j = 1, SIZE(tag)
|
||||
IF (tag(j) == i) THEN
|
||||
f_lammps_gather_pe_atom_concat = pe_atom(j)
|
||||
EXIT
|
||||
END IF
|
||||
END DO
|
||||
f_lammps_gather_pe_atom_concat = pe_atom(i)
|
||||
END FUNCTION f_lammps_gather_pe_atom_concat
|
||||
|
||||
SUBROUTINE f_lammps_gather_pe_atom_subset(ids, pe) BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int, c_double
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
IMPLICIT NONE
|
||||
INTEGER(c_int), INTENT(IN) :: ids(2)
|
||||
REAL(c_double), INTENT(OUT) :: pe(2)
|
||||
REAL(c_double), DIMENSION(:), ALLOCATABLE :: pe_atom
|
||||
INTEGER(c_int) :: natoms
|
||||
|
||||
natoms = NINT(lmp%get_natoms(), c_int)
|
||||
CALL lmp%gather_subset('c_pe', 1, ids, pe_atom)
|
||||
pe(1:2) = pe_atom(1:2)
|
||||
END SUBROUTINE f_lammps_gather_pe_atom_subset
|
||||
|
||||
SUBROUTINE f_lammps_scatter_compute() BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int, c_double
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
IMPLICIT NONE
|
||||
REAL(c_double), DIMENSION(:), ALLOCATABLE :: pe_atom
|
||||
REAL(c_double) :: swap
|
||||
|
||||
CALL lmp%gather('c_pe', 1_c_int, pe_atom)
|
||||
|
||||
! swap the computed energy of atoms 1 and 3
|
||||
swap = pe_atom(1)
|
||||
pe_atom(1) = pe_atom(3)
|
||||
pe_atom(3) = swap
|
||||
|
||||
CALL lmp%scatter('c_pe', pe_atom) ! push the swap back to LAMMPS
|
||||
END SUBROUTINE f_lammps_scatter_compute
|
||||
|
||||
SUBROUTINE f_lammps_scatter_subset_compute() BIND(C)
|
||||
USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int, c_double
|
||||
USE LIBLAMMPS
|
||||
USE keepstuff, ONLY : lmp
|
||||
IMPLICIT NONE
|
||||
INTEGER(c_int), PARAMETER :: ids(2) = [3,1]
|
||||
REAL(c_double), DIMENSION(:), ALLOCATABLE :: pe_atom
|
||||
REAL(c_double) :: swap
|
||||
|
||||
CALL lmp%gather_subset('c_pe', 1_c_int, ids, pe_atom)
|
||||
|
||||
! swap the computed energy of atoms 1 and 3
|
||||
swap = pe_atom(1)
|
||||
pe_atom(1) = pe_atom(2)
|
||||
pe_atom(2) = swap
|
||||
|
||||
CALL lmp%scatter_subset('c_pe', ids, pe_atom) ! push the swap back to LAMMPS
|
||||
END SUBROUTINE f_lammps_scatter_subset_compute
|
||||
|
||||
@ -72,10 +72,12 @@ FUNCTION f_lammps_get_last_error_message(errmesg, errlen) BIND(C)
|
||||
CALL lmp%get_last_error_message(buffer, status)
|
||||
f_lammps_get_last_error_message = status
|
||||
! and copy to C style string
|
||||
errmesg(1:errlen) = c_null_char
|
||||
DO i=1, errlen
|
||||
errmesg(i) = buffer(i:i)
|
||||
IF (buffer(i:i) == c_null_char) EXIT
|
||||
END DO
|
||||
errmesg(errlen) = c_null_char
|
||||
DEALLOCATE(buffer)
|
||||
END FUNCTION f_lammps_get_last_error_message
|
||||
|
||||
|
||||
194
unittest/fortran/wrap_fixexternal.cpp
Normal file
194
unittest/fortran/wrap_fixexternal.cpp
Normal file
@ -0,0 +1,194 @@
|
||||
|
||||
// unit tests for gathering and scattering data from a LAMMPS instance through
|
||||
// the Fortran wrapper
|
||||
|
||||
#include "lammps.h"
|
||||
#include "library.h"
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include <mpi.h>
|
||||
#include <string>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
// prototypes for Fortran reverse wrapper functions
|
||||
extern "C" {
|
||||
void *f_lammps_with_args();
|
||||
void f_lammps_close();
|
||||
void f_lammps_setup_fix_external_callback();
|
||||
void f_lammps_setup_fix_external_array();
|
||||
void f_lammps_set_fix_external_callbacks();
|
||||
void f_lammps_get_force(int, double*);
|
||||
void f_lammps_reverse_direction();
|
||||
void f_lammps_find_forces();
|
||||
void f_lammps_add_energy();
|
||||
void f_lammps_set_virial();
|
||||
double f_lammps_find_peratom_energy(int);
|
||||
void f_lammps_find_peratom_virial(double[6], int);
|
||||
void f_lammps_fixexternal_set_vector();
|
||||
}
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
|
||||
class LAMMPS_fixexternal : public ::testing::Test {
|
||||
protected:
|
||||
LAMMPS_NS::LAMMPS *lmp;
|
||||
LAMMPS_fixexternal() = default;
|
||||
~LAMMPS_fixexternal() override = default;
|
||||
|
||||
void SetUp() override
|
||||
{
|
||||
::testing::internal::CaptureStdout();
|
||||
lmp = (LAMMPS_NS::LAMMPS *)f_lammps_with_args();
|
||||
std::string output = ::testing::internal::GetCapturedStdout();
|
||||
EXPECT_STREQ(output.substr(0, 8).c_str(), "LAMMPS (");
|
||||
}
|
||||
void TearDown() override
|
||||
{
|
||||
::testing::internal::CaptureStdout();
|
||||
f_lammps_close();
|
||||
std::string output = ::testing::internal::GetCapturedStdout();
|
||||
EXPECT_STREQ(output.substr(0, 16).c_str(), "Total wall time:");
|
||||
lmp = nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_fixexternal, callback)
|
||||
{
|
||||
f_lammps_setup_fix_external_callback();
|
||||
f_lammps_set_fix_external_callbacks();
|
||||
lammps_command(lmp, "run 0");
|
||||
double f[3];
|
||||
f_lammps_get_force(1,f);
|
||||
EXPECT_DOUBLE_EQ(f[0], 3.0);
|
||||
EXPECT_DOUBLE_EQ(f[1], -3.0);
|
||||
EXPECT_DOUBLE_EQ(f[2], 3.75);
|
||||
f_lammps_get_force(2,f);
|
||||
EXPECT_DOUBLE_EQ(f[0], -3.0);
|
||||
EXPECT_DOUBLE_EQ(f[1], 3.0);
|
||||
EXPECT_DOUBLE_EQ(f[2], -3.75);
|
||||
|
||||
f_lammps_reverse_direction();
|
||||
f_lammps_set_fix_external_callbacks();
|
||||
lammps_command(lmp, "run 0");
|
||||
f_lammps_get_force(1,f);
|
||||
EXPECT_DOUBLE_EQ(f[0], -1.0);
|
||||
EXPECT_DOUBLE_EQ(f[1], 1.0);
|
||||
EXPECT_DOUBLE_EQ(f[2], -1.25);
|
||||
f_lammps_get_force(2,f);
|
||||
EXPECT_DOUBLE_EQ(f[0], 1.0);
|
||||
EXPECT_DOUBLE_EQ(f[1], -1.0);
|
||||
EXPECT_DOUBLE_EQ(f[2], 1.25);
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_fixexternal, array)
|
||||
{
|
||||
f_lammps_setup_fix_external_array();
|
||||
double **f;
|
||||
f = (double**) lammps_extract_atom(lmp, "f");
|
||||
f_lammps_find_forces();
|
||||
lammps_command(lmp, "run 0");
|
||||
EXPECT_DOUBLE_EQ(f[0][0], 14.0);
|
||||
EXPECT_DOUBLE_EQ(f[0][1], -14.0);
|
||||
EXPECT_DOUBLE_EQ(f[0][2], 18.0);
|
||||
EXPECT_DOUBLE_EQ(f[1][0], 16.0);
|
||||
EXPECT_DOUBLE_EQ(f[1][1], -16.0);
|
||||
EXPECT_DOUBLE_EQ(f[1][2], 20.0);
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_fixexternal, energy_global)
|
||||
{
|
||||
f_lammps_setup_fix_external_array();
|
||||
double energy;
|
||||
f_lammps_add_energy();
|
||||
lammps_command(lmp, "run 0");
|
||||
energy = lammps_get_thermo(lmp, "etotal");
|
||||
EXPECT_DOUBLE_EQ(energy, -20.2);
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_fixexternal, virial_global)
|
||||
{
|
||||
f_lammps_setup_fix_external_array();
|
||||
double virial[6], volume;
|
||||
f_lammps_set_virial();
|
||||
lammps_command(lmp, "run 0");
|
||||
volume = lammps_get_thermo(lmp, "vol");
|
||||
virial[0] = lammps_get_thermo(lmp, "pxx");
|
||||
virial[1] = lammps_get_thermo(lmp, "pyy");
|
||||
virial[2] = lammps_get_thermo(lmp, "pzz");
|
||||
virial[3] = lammps_get_thermo(lmp, "pxy");
|
||||
virial[4] = lammps_get_thermo(lmp, "pxz");
|
||||
virial[5] = lammps_get_thermo(lmp, "pyz");
|
||||
EXPECT_DOUBLE_EQ(virial[0], 1.0/volume);
|
||||
EXPECT_DOUBLE_EQ(virial[1], 2.0/volume);
|
||||
EXPECT_DOUBLE_EQ(virial[2], 2.5/volume);
|
||||
EXPECT_DOUBLE_EQ(virial[3], -1.0/volume);
|
||||
EXPECT_DOUBLE_EQ(virial[4], -2.25/volume);
|
||||
EXPECT_DOUBLE_EQ(virial[5], -3.02/volume);
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_fixexternal, energy_peratom)
|
||||
{
|
||||
f_lammps_setup_fix_external_callback();
|
||||
f_lammps_set_fix_external_callbacks();
|
||||
lammps_command(lmp, "compute peratom all pe/atom");
|
||||
double energy;
|
||||
lammps_command(lmp, "run 0");
|
||||
int nlocal = lammps_extract_setting(lmp, "nlocal");
|
||||
for (int i = 1; i <= nlocal; i++)
|
||||
{
|
||||
energy = f_lammps_find_peratom_energy(i);
|
||||
if (i == 1)
|
||||
EXPECT_DOUBLE_EQ(energy, 1.0);
|
||||
else
|
||||
EXPECT_DOUBLE_EQ(energy, 10.0);
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_fixexternal, virial_peratom)
|
||||
{
|
||||
f_lammps_setup_fix_external_callback();
|
||||
f_lammps_set_fix_external_callbacks();
|
||||
lammps_command(lmp, "compute vperatom all stress/atom NULL");
|
||||
double virial[6];
|
||||
lammps_command(lmp, "run 0");
|
||||
int nlocal = lammps_extract_setting(lmp, "nlocal");
|
||||
for (int i = 1; i <= nlocal; i++)
|
||||
{
|
||||
f_lammps_find_peratom_virial(virial, i);
|
||||
if (i == 1)
|
||||
{
|
||||
EXPECT_DOUBLE_EQ(virial[0], -1.0);
|
||||
EXPECT_DOUBLE_EQ(virial[1], -2.0);
|
||||
EXPECT_DOUBLE_EQ(virial[2], 1.0);
|
||||
EXPECT_DOUBLE_EQ(virial[3], 2.0);
|
||||
EXPECT_DOUBLE_EQ(virial[4], -3.0);
|
||||
EXPECT_DOUBLE_EQ(virial[5], 3.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
EXPECT_DOUBLE_EQ(virial[0], -10.0);
|
||||
EXPECT_DOUBLE_EQ(virial[1], -20.0);
|
||||
EXPECT_DOUBLE_EQ(virial[2], 10.0);
|
||||
EXPECT_DOUBLE_EQ(virial[3], 20.0);
|
||||
EXPECT_DOUBLE_EQ(virial[4], -30.0);
|
||||
EXPECT_DOUBLE_EQ(virial[5], 30.0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_fixexternal, vector)
|
||||
{
|
||||
f_lammps_setup_fix_external_callback();
|
||||
f_lammps_set_fix_external_callbacks();
|
||||
f_lammps_fixexternal_set_vector();
|
||||
lammps_command(lmp, "run 0");
|
||||
double *v;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
v = (double*) lammps_extract_fix(lmp, "ext2", LMP_STYLE_GLOBAL,
|
||||
LMP_TYPE_VECTOR, i, 1);
|
||||
EXPECT_DOUBLE_EQ(i+1, *v);
|
||||
std::free(v);
|
||||
}
|
||||
};
|
||||
@ -3,6 +3,7 @@
|
||||
|
||||
#include "lammps.h"
|
||||
#include "library.h"
|
||||
#include "atom.h"
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include <mpi.h>
|
||||
@ -26,6 +27,11 @@ void f_lammps_scatter_atoms_positions();
|
||||
void f_lammps_setup_gather_bonds();
|
||||
int f_lammps_test_gather_bonds_small();
|
||||
int f_lammps_test_gather_bonds_big();
|
||||
double f_lammps_gather_pe_atom(int);
|
||||
double f_lammps_gather_pe_atom_concat(int);
|
||||
void f_lammps_gather_pe_atom_subset(int*, double*);
|
||||
void f_lammps_scatter_compute();
|
||||
void f_lammps_scatter_subset_compute();
|
||||
}
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
@ -216,3 +222,113 @@ TEST_F(LAMMPS_gather_scatter, gather_bonds)
|
||||
EXPECT_EQ(f_lammps_test_gather_bonds_small(), 1);
|
||||
#endif
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_gather_scatter, gather_compute)
|
||||
{
|
||||
#ifdef LAMMPS_BIGBIG
|
||||
GTEST_SKIP();
|
||||
#else
|
||||
f_lammps_setup_gather_scatter();
|
||||
lammps_command(lmp, "run 0");
|
||||
int natoms = lmp->atom->natoms;
|
||||
int *tag = lmp->atom->tag;
|
||||
double *pe = (double*) lammps_extract_compute(lmp, "pe", LMP_STYLE_ATOM,
|
||||
LMP_TYPE_VECTOR);
|
||||
for (int i = 0; i < natoms; i++)
|
||||
EXPECT_DOUBLE_EQ(f_lammps_gather_pe_atom(tag[i]), pe[i]);
|
||||
#endif
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_gather_scatter, gather_compute_concat)
|
||||
{
|
||||
#ifdef LAMMPS_BIGBIG
|
||||
GTEST_SKIP();
|
||||
#else
|
||||
f_lammps_setup_gather_scatter();
|
||||
lammps_command(lmp, "run 0");
|
||||
int natoms = lmp->atom->natoms;
|
||||
int *tag = lmp->atom->tag;
|
||||
double *pe = (double*) lammps_extract_compute(lmp, "pe", LMP_STYLE_ATOM,
|
||||
LMP_TYPE_VECTOR);
|
||||
for (int i = 0; i < natoms; i++)
|
||||
EXPECT_DOUBLE_EQ(f_lammps_gather_pe_atom(tag[i]), pe[i]);
|
||||
#endif
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_gather_scatter, gather_compute_subset)
|
||||
{
|
||||
#ifdef LAMMPS_BIGBIG
|
||||
GTEST_SKIP();
|
||||
#else
|
||||
f_lammps_setup_gather_scatter();
|
||||
lammps_command(lmp, "run 0");
|
||||
int ids[2] = {3, 1};
|
||||
int *tag = lmp->atom->tag;
|
||||
double pe[2] = {0.0, 0.0};
|
||||
int nlocal = lammps_extract_setting(lmp, "nlocal");
|
||||
double *pa_pe = (double*) lammps_extract_compute(lmp, "pe", LMP_STYLE_ATOM,
|
||||
LMP_TYPE_VECTOR);
|
||||
|
||||
for (int i = 0; i < nlocal; i++) {
|
||||
if(tag[i] == ids[0]) pe[0] = pa_pe[i];
|
||||
if(tag[i] == ids[1]) pe[1] = pa_pe[i];
|
||||
}
|
||||
|
||||
double ftn_pe[2];
|
||||
f_lammps_gather_pe_atom_subset(ids, ftn_pe);
|
||||
EXPECT_DOUBLE_EQ(ftn_pe[0], pe[0]);
|
||||
EXPECT_DOUBLE_EQ(ftn_pe[1], pe[1]);
|
||||
#endif
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_gather_scatter, scatter_compute)
|
||||
{
|
||||
#ifdef LAMMPS_BIGBIG
|
||||
GTEST_SKIP();
|
||||
#else
|
||||
f_lammps_setup_gather_scatter();
|
||||
int natoms = lmp->atom->natoms;
|
||||
double *pe = new double[natoms];
|
||||
lammps_command(lmp, "run 0");
|
||||
lammps_gather(lmp, "c_pe", 1, 1, pe);
|
||||
double *old_pe = new double[natoms];
|
||||
for (int i = 0; i < natoms; i++)
|
||||
old_pe[i] = pe[i];
|
||||
EXPECT_DOUBLE_EQ(pe[0], old_pe[0]);
|
||||
EXPECT_DOUBLE_EQ(pe[1], old_pe[1]);
|
||||
EXPECT_DOUBLE_EQ(pe[2], old_pe[2]);
|
||||
f_lammps_scatter_compute();
|
||||
lammps_gather(lmp, "c_pe", 1, 1, pe);
|
||||
EXPECT_DOUBLE_EQ(pe[0], old_pe[2]);
|
||||
EXPECT_DOUBLE_EQ(pe[1], old_pe[1]);
|
||||
EXPECT_DOUBLE_EQ(pe[2], old_pe[0]);
|
||||
delete[] old_pe;
|
||||
delete[] pe;
|
||||
#endif
|
||||
};
|
||||
|
||||
TEST_F(LAMMPS_gather_scatter, scatter_subset_compute)
|
||||
{
|
||||
#ifdef LAMMPS_BIGBIG
|
||||
GTEST_SKIP();
|
||||
#else
|
||||
f_lammps_setup_gather_scatter();
|
||||
int natoms = lmp->atom->natoms;
|
||||
double *pe = new double[natoms];
|
||||
lammps_command(lmp, "run 0");
|
||||
lammps_gather(lmp, "c_pe", 1, 1, pe);
|
||||
double *old_pe = new double[natoms];
|
||||
for (int i = 0; i < natoms; i++)
|
||||
old_pe[i] = pe[i];
|
||||
EXPECT_DOUBLE_EQ(pe[0], old_pe[0]);
|
||||
EXPECT_DOUBLE_EQ(pe[1], old_pe[1]);
|
||||
EXPECT_DOUBLE_EQ(pe[2], old_pe[2]);
|
||||
f_lammps_scatter_subset_compute();
|
||||
lammps_gather(lmp, "c_pe", 1, 1, pe);
|
||||
EXPECT_DOUBLE_EQ(pe[0], old_pe[2]);
|
||||
EXPECT_DOUBLE_EQ(pe[1], old_pe[1]);
|
||||
EXPECT_DOUBLE_EQ(pe[2], old_pe[0]);
|
||||
delete[] old_pe;
|
||||
delete[] pe;
|
||||
#endif
|
||||
};
|
||||
|
||||
@ -300,6 +300,26 @@ TEST(Utils, valid_double9)
|
||||
ASSERT_TRUE(utils::is_double("+.0"));
|
||||
}
|
||||
|
||||
TEST(Utils, valid_double10)
|
||||
{
|
||||
ASSERT_TRUE(utils::is_double("-0.15"));
|
||||
}
|
||||
|
||||
TEST(Utils, valid_double11)
|
||||
{
|
||||
ASSERT_TRUE(utils::is_double("-27.5"));
|
||||
}
|
||||
|
||||
TEST(Utils, valid_double12)
|
||||
{
|
||||
ASSERT_TRUE(utils::is_double("+0.15"));
|
||||
}
|
||||
|
||||
TEST(Utils, valid_double13)
|
||||
{
|
||||
ASSERT_TRUE(utils::is_double("+27.5"));
|
||||
}
|
||||
|
||||
TEST(Utils, empty_not_an_integer)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_integer(""));
|
||||
@ -315,6 +335,66 @@ TEST(Utils, text_not_an_integer)
|
||||
ASSERT_FALSE(utils::is_integer("one"));
|
||||
}
|
||||
|
||||
TEST(Utils, minus_not_an_integer1)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_integer("1-"));
|
||||
}
|
||||
|
||||
TEST(Utils, plus_not_an_integer1)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_integer("1+"));
|
||||
}
|
||||
|
||||
TEST(Utils, minus_not_an_integer2)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_integer("--1"));
|
||||
}
|
||||
|
||||
TEST(Utils, plus_not_an_integer2)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_integer("++1"));
|
||||
}
|
||||
|
||||
TEST(Utils, plusminus_not_an_integer1)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_integer("-+1"));
|
||||
}
|
||||
|
||||
TEST(Utils, plusminus_not_an_integer2)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_integer("+-1"));
|
||||
}
|
||||
|
||||
TEST(Utils, minus_not_a_double1)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_double("1-"));
|
||||
}
|
||||
|
||||
TEST(Utils, plus_not_a_double1)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_double("1+"));
|
||||
}
|
||||
|
||||
TEST(Utils, minus_not_a_double2)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_double("--1"));
|
||||
}
|
||||
|
||||
TEST(Utils, plus_not_a_double2)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_double("++1"));
|
||||
}
|
||||
|
||||
TEST(Utils, plusminus_not_a_double1)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_double("+-1"));
|
||||
}
|
||||
|
||||
TEST(Utils, plusminus_not_a_double2)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_double("-+1"));
|
||||
}
|
||||
|
||||
TEST(Utils, text_not_a_double)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_double("half"));
|
||||
@ -365,6 +445,11 @@ TEST(Utils, signed_double_and_exponential)
|
||||
ASSERT_TRUE(utils::is_double("-10E-22"));
|
||||
}
|
||||
|
||||
TEST(Utils, signed_double_and_broken_exponential)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_double("-10e10-2"));
|
||||
}
|
||||
|
||||
TEST(Utils, is_double_with_d_exponential)
|
||||
{
|
||||
ASSERT_FALSE(utils::is_double("10d22"));
|
||||
@ -844,6 +929,44 @@ TEST(Utils, boundsbig_case3)
|
||||
ASSERT_EQ(nhi, -1);
|
||||
}
|
||||
|
||||
TEST(Utils, parse_grid_id)
|
||||
{
|
||||
auto words = utils::parse_grid_id(FLERR, "c_1:full:density", nullptr);
|
||||
ASSERT_THAT(words[0], StrEq("c_1"));
|
||||
ASSERT_THAT(words[1], StrEq("full"));
|
||||
ASSERT_THAT(words[2], StrEq("density"));
|
||||
|
||||
words = utils::parse_grid_id(FLERR, "c_1:full:density[1]", nullptr);
|
||||
ASSERT_THAT(words[0], StrEq("c_1"));
|
||||
ASSERT_THAT(words[1], StrEq("full"));
|
||||
ASSERT_THAT(words[2], StrEq("density[1]"));
|
||||
|
||||
words = utils::parse_grid_id(FLERR, "c_1:full:density[*]", nullptr);
|
||||
ASSERT_THAT(words[0], StrEq("c_1"));
|
||||
ASSERT_THAT(words[1], StrEq("full"));
|
||||
ASSERT_THAT(words[2], StrEq("density[*]"));
|
||||
|
||||
words = utils::parse_grid_id(FLERR, "c_1_full_density", nullptr);
|
||||
ASSERT_THAT(words[0], StrEq(""));
|
||||
ASSERT_THAT(words[1], StrEq(""));
|
||||
ASSERT_THAT(words[0], StrEq(""));
|
||||
|
||||
words = utils::parse_grid_id(FLERR, "c_1:full:", nullptr);
|
||||
ASSERT_THAT(words[0], StrEq(""));
|
||||
ASSERT_THAT(words[1], StrEq(""));
|
||||
ASSERT_THAT(words[0], StrEq(""));
|
||||
|
||||
words = utils::parse_grid_id(FLERR, ":full:density", nullptr);
|
||||
ASSERT_THAT(words[0], StrEq(""));
|
||||
ASSERT_THAT(words[1], StrEq(""));
|
||||
ASSERT_THAT(words[0], StrEq(""));
|
||||
|
||||
words = utils::parse_grid_id(FLERR, "c_1:full", nullptr);
|
||||
ASSERT_THAT(words[0], StrEq(""));
|
||||
ASSERT_THAT(words[1], StrEq(""));
|
||||
ASSERT_THAT(words[0], StrEq(""));
|
||||
}
|
||||
|
||||
TEST(Utils, errorurl)
|
||||
{
|
||||
auto errmesg = utils::errorurl(10);
|
||||
|
||||
Reference in New Issue
Block a user