Skip to content

Commit 3a59060

Browse files
committed
WIP: C++ migration
1 parent 759012e commit 3a59060

32 files changed

Lines changed: 10003 additions & 28 deletions

.gitignore

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*.bak
88
.project
99
.pydevproject
10+
.vscode
1011

1112
# Compiled source #
1213
###################
@@ -48,4 +49,10 @@ build_standalone/*.f90
4849
build_standalone/*.c
4950
build_standalone/*.h
5051
build_standalone/*.inc
51-
build_standalone/*.classes
52+
build_standalone/*.classes
53+
54+
# Meson subprojects
55+
cpp/subprojects/packagecache
56+
cpp/subprojects/Catch2-*
57+
cpp/subprojects/eigen-*
58+
cpp/subprojects/pybind11-*

cpp/include/atomistica/atomistica.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,14 @@
4141
// Bond-order potentials
4242
#include "potentials/bop/bop_base.hpp"
4343
#include "potentials/bop/tersoff.hpp"
44+
45+
// Coulomb potentials
46+
#include "potentials/coulomb/coulomb.hpp"
47+
#include "potentials/coulomb/pme.hpp"
48+
#include "potentials/coulomb/fmm.hpp"
49+
50+
// Tight-binding
51+
#include "tightbinding/tightbinding.hpp"
52+
53+
// Integrators
54+
#include "integrators/integrators.hpp"

cpp/include/atomistica/config.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ using Vec3 = Eigen::Matrix<Scalar, 3, 1>;
3434
using Mat3 = Eigen::Matrix<Scalar, 3, 3>;
3535
using VecX = Eigen::Matrix<Scalar, Eigen::Dynamic, 1>;
3636
using MatX = Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic>;
37+
using MatX3 = Eigen::Matrix<Scalar, Eigen::Dynamic, 3>; // N x 3 matrix for forces
3738

3839
// Array types for per-atom data (row-major for cache efficiency when iterating atoms)
3940
using Array3X = Eigen::Array<Scalar, 3, Eigen::Dynamic>;

cpp/include/atomistica/core/atomic_system.hpp

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,50 @@ class AtomicSystem {
9696
Array3X& positions() { return positions_; }
9797
const Array3X& positions() const { return positions_; }
9898

99-
// Single atom position access
100-
auto position(std::size_t i) { return positions_.col(i); }
101-
auto position(std::size_t i) const { return positions_.col(i); }
99+
// Single atom position access - always returns a Vec3 copy for type safety
100+
// Use positions().col(i) for assignment or set_position() method
101+
Vec3 position(std::size_t i) const { return positions_.col(i).matrix(); }
102+
103+
// Set single atom position
104+
void set_position(std::size_t i, const Vec3& r) {
105+
positions_.col(i) = r.array();
106+
++position_revision_;
107+
}
102108

103109
// Atomic numbers
104110
ArrayXi& atomic_numbers() { return atomic_numbers_; }
105111
const ArrayXi& atomic_numbers() const { return atomic_numbers_; }
106112

113+
// Single atom atomic number access
114+
int atomic_number(std::size_t i) const { return atomic_numbers_[i]; }
115+
116+
// Masses
117+
ArrayX& masses() { return masses_; }
118+
const ArrayX& masses() const { return masses_; }
119+
120+
// Single atom mass access
121+
Scalar mass(std::size_t i) const { return masses_[i]; }
122+
void set_mass(std::size_t i, Scalar m) { masses_[i] = m; }
123+
124+
// Velocities
125+
Array3X& velocities() { return velocities_; }
126+
const Array3X& velocities() const { return velocities_; }
127+
128+
// Single atom velocity access - always returns a Vec3 copy for type safety
129+
// Use velocities().col(i) for assignment or set_velocity() method
130+
Vec3 velocity(std::size_t i) const { return velocities_.col(i).matrix(); }
131+
void set_velocity(std::size_t i, const Vec3& v) { velocities_.col(i) = v.array(); }
132+
133+
// Add atom with position and mass
134+
void add_atom(int Z, const Vec3& r, Scalar m = 1.0) {
135+
std::size_t i = num_atoms_;
136+
resize(num_atoms_ + 1);
137+
positions_.col(i) = r.array();
138+
atomic_numbers_[i] = Z;
139+
masses_[i] = m;
140+
velocities_.col(i).setZero();
141+
}
142+
107143
// Forces (accumulated by potentials)
108144
Array3X& forces() { return forces_; }
109145
const Array3X& forces() const { return forces_; }
@@ -139,6 +175,8 @@ class AtomicSystem {
139175

140176
Array3X positions_;
141177
ArrayXi atomic_numbers_;
178+
ArrayX masses_;
179+
Array3X velocities_;
142180
Array3X forces_;
143181

144182
PropertyMap properties_;

0 commit comments

Comments
 (0)