在 C++ 中实现 PDE 积分器的周期性边界条件

Implementing periodic boundary conditions of PDE integrator in C++

我需要在 C++ 中实现偏微分方程的有限差分积分器。在Python中我使用了numpy.roll的方法来滚动数组从而得到周期性的边界条件。

C 中是否有一个库可以提供这种方法?也就是说,当我访问长度为 n 的向量的位置 n+1 时,它将指向向量位置 0 处的单元格?

您可以使用mod运算符调整索引。

#include <vector>

using namespace std;

int roll(vector<int>& v, unsigned int n) {
   return v[n % v.size()];
}

int main() {
   vector<int> v;
   for (int i=0; i<10; ++i) {
      v.push_back(i);
   }

   return roll(v, 2);
}

要滚动整个向量,请使用此函数:

vector<int> rollVector(const vector<int>& v, unsigned int n) {   
   auto b = v.begin() + (n % v.size());
   vector<int> ret(b, v.end());
   ret.insert(ret.end(), v.begin(), b);
   return ret;
}