File: wrap_neighlist.cpp

package info (click to toggle)
lammps 20250204%2Bdfsg.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 474,368 kB
  • sloc: cpp: 1,060,070; python: 27,785; ansic: 8,956; f90: 7,254; sh: 6,044; perl: 4,171; fortran: 2,442; xml: 1,714; makefile: 1,352; objc: 238; lisp: 188; yacc: 58; csh: 16; awk: 14; tcl: 6; javascript: 2
file content (124 lines) | stat: -rw-r--r-- 3,854 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// unit tests for accessing neighbor lists in a LAMMPS instance through the Fortran wrapper

#include "force.h"
#include "info.h"
#include "lammps.h"
#include "library.h"
#include "modify.h"
#include "neigh_list.h"
#include "neighbor.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_neigh_tests();
int f_lammps_pair_neighlist_test();
int f_lammps_fix_neighlist_test();
int f_lammps_compute_neighlist_test();
int f_lammps_neighlist_num_elements(int);
}

namespace LAMMPS_NS {

class LAMMPS_neighbors : public ::testing::Test {
protected:
    LAMMPS_NS::LAMMPS *lmp;
    LAMMPS_neighbors()           = default;
    ~LAMMPS_neighbors() 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_neighbors, pair)
{
    f_lammps_setup_neigh_tests();
    int pair_neighlist = f_lammps_pair_neighlist_test();
    Pair *pair         = lmp->force->pair_match("lj/cut", 1, 0);
    int index          = -2;
    if (pair != nullptr) {
        for (int i = 0; i < lmp->neighbor->nlist; i++) {
            NeighList *list = lmp->neighbor->lists[i];
            if ((list->requestor_type == NeighList::PAIR) and (pair == list->requestor) and
                (list->id == 0)) {
                index = i;
                break;
            }
        }
    }
    EXPECT_EQ(index, pair_neighlist);
};

TEST_F(LAMMPS_neighbors, fix)
{
    if (not Info::has_package("REPLICA")) GTEST_SKIP();
    f_lammps_setup_neigh_tests();
    auto *fix = lmp->modify->get_fix_by_id("f");
    EXPECT_NE(fix, nullptr);
    int ilist = -2;
    for (int i = 0; i < lmp->neighbor->nlist; i++) {
        NeighList *list = lmp->neighbor->lists[i];
        if ((list->requestor_type == NeighList::FIX) and (fix == list->requestor) and
            (list->id == 0)) {
            ilist = i;
            break;
        }
    }
    EXPECT_EQ(ilist, f_lammps_fix_neighlist_test());
};

TEST_F(LAMMPS_neighbors, compute)
{
    f_lammps_setup_neigh_tests();
    auto *compute = lmp->modify->get_compute_by_id("c");
    EXPECT_NE(compute, nullptr);
    int ilist = -2;
    for (int i = 0; i < lmp->neighbor->nlist; i++) {
        NeighList *list = lmp->neighbor->lists[i];
        if ((list->requestor_type == NeighList::COMPUTE) and (compute == list->requestor) and
            (list->id == 0)) {
            ilist = i;
            break;
        }
    }
    EXPECT_EQ(ilist, f_lammps_compute_neighlist_test());
};

TEST_F(LAMMPS_neighbors, numelements)
{
    f_lammps_setup_neigh_tests();
    int num_neigh = 0;
    int pair_id   = f_lammps_pair_neighlist_test();
    num_neigh     = f_lammps_neighlist_num_elements(pair_id);
    EXPECT_EQ(num_neigh, lammps_neighlist_num_elements(lmp, pair_id));
    if (Info::has_package("REPLICA")) {
        int fix_id = f_lammps_fix_neighlist_test();
        num_neigh  = f_lammps_neighlist_num_elements(fix_id);
        EXPECT_EQ(num_neigh, lammps_neighlist_num_elements(lmp, fix_id));
    }
    int compute_id = f_lammps_compute_neighlist_test();
    num_neigh      = f_lammps_neighlist_num_elements(compute_id);
    EXPECT_EQ(num_neigh, lammps_neighlist_num_elements(lmp, compute_id));
};

} // namespace LAMMPS_NS