diff --git a/src/parallel/Communicator.h b/src/parallel/Communicator.h
index 1468074286ab1fa0a5b29c2692872c9b4ff81459..23a760981944cfa143d7521275255f39a92bb7fe 100644
--- a/src/parallel/Communicator.h
+++ b/src/parallel/Communicator.h
@@ -55,22 +55,22 @@ public:
 
     virtual ~Communicator() = default;
 
-    virtual int getBundleID()                      = 0;
-    virtual int getNumberOfBundles()               = 0;
-    virtual int getProcessID() const               = 0;
-    virtual int getProcessID(int bundle, int rank) = 0;
-    virtual bool isRoot() const                    = 0;
-    virtual void *getNativeCommunicator()          = 0;
+    virtual int getBundleID() const                      = 0;
+    virtual int getNumberOfBundles() const               = 0;
+    virtual int getProcessID() const                     = 0;
+    virtual int getProcessID(int bundle, int rank) const = 0;
+    virtual bool isRoot() const                          = 0;
+    virtual void *getNativeCommunicator()                = 0;
 
     virtual void sendSerializedObject(std::stringstream &ss, int target)    = 0;
     virtual void receiveSerializedObject(std::stringstream &ss, int source) = 0;
 
-    virtual int getRoot()                                = 0;
-    virtual int getBundleRoot()                          = 0;
-    virtual int getProcessRoot()                         = 0;
-    virtual int getNumberOfProcessesInBundle(int bundle) = 0;
-    virtual void barrier()                               = 0;
-    virtual void abort(int errorcode)                    = 0;
+    virtual int getRoot() const                                = 0;
+    virtual int getBundleRoot() const                          = 0;
+    virtual int getProcessRoot() const                         = 0;
+    virtual int getNumberOfProcessesInBundle(int bundle) const = 0;
+    virtual void barrier()                                     = 0;
+    virtual void abort(int errorcode)                          = 0;
 
     virtual std::vector<std::string> gather(const std::string &str)                         = 0;
     virtual std::vector<int> gather(std::vector<int> &values)                               = 0;
diff --git a/src/parallel/MPICommunicator.cpp b/src/parallel/MPICommunicator.cpp
index 08fa2878e7026ce2dd99c44a971e90cc5a8737e4..8ae7ea66387f5e02b2e90dcacefbc324e81ca564 100644
--- a/src/parallel/MPICommunicator.cpp
+++ b/src/parallel/MPICommunicator.cpp
@@ -20,7 +20,7 @@ namespace vf::parallel
 std::shared_ptr<Communicator> MPICommunicator::getInstance()
 {
     std::lock_guard<std::mutex> myLock(instantiation_mutex);
-    if (!instance){
+    if (!instance) {
         instance = std::shared_ptr<MPICommunicator>(new MPICommunicator);
     }
     return instance;
@@ -96,23 +96,23 @@ std::vector<unsigned long long> MPICommunicator::gather(std::vector<unsigned lon
 //////////////////////////////////////////////////////////////////////////
 int MPICommunicator::getProcessID() const { return PID; }
 //////////////////////////////////////////////////////////////////////////
-int MPICommunicator::getProcessID(int /*bundle*/, int /*rank*/) { return PID; }
+int MPICommunicator::getProcessID(int /*bundle*/, int /*rank*/) const { return PID; }
 //////////////////////////////////////////////////////////////////////////
 int MPICommunicator::getNumberOfProcesses() const { return numprocs; }
 //////////////////////////////////////////////////////////////////////////
 void *MPICommunicator::getNativeCommunicator() { return &comm; }
 //////////////////////////////////////////////////////////////////////////
-int MPICommunicator::getBundleID() { return 0; }
+int MPICommunicator::getBundleID() const { return 0; }
 //////////////////////////////////////////////////////////////////////////
-int MPICommunicator::getNumberOfBundles() { return 1; }
+int MPICommunicator::getNumberOfBundles() const { return 1; }
 //////////////////////////////////////////////////////////////////////////
-int MPICommunicator::getRoot() { return root; }
+int MPICommunicator::getRoot() const { return root; }
 //////////////////////////////////////////////////////////////////////////
-int MPICommunicator::getBundleRoot() { return 0; }
+int MPICommunicator::getBundleRoot() const { return 0; }
 //////////////////////////////////////////////////////////////////////////
-int MPICommunicator::getProcessRoot() { return 0; }
+int MPICommunicator::getProcessRoot() const { return 0; }
 //////////////////////////////////////////////////////////////////////////
-int MPICommunicator::getNumberOfProcessesInBundle(int /*bundle*/) { return numprocs; }
+int MPICommunicator::getNumberOfProcessesInBundle(int /*bundle*/) const { return numprocs; }
 //////////////////////////////////////////////////////////////////////////
 bool MPICommunicator::isRoot() const { return PID == root; }
 //////////////////////////////////////////////////////////////////////////
diff --git a/src/parallel/MPICommunicator.h b/src/parallel/MPICommunicator.h
index d011fa130c132693054728fc9fd8ec9580542acd..466a3c3f8d311c743b546116a0a4ca9a23735488 100644
--- a/src/parallel/MPICommunicator.h
+++ b/src/parallel/MPICommunicator.h
@@ -33,16 +33,16 @@ public:
 
     ~MPICommunicator() override;
     static std::shared_ptr<Communicator> getInstance();
-    int getBundleID() override;
-    int getNumberOfBundles() override;
+    int getBundleID() const override;
+    int getNumberOfBundles() const override;
     int getProcessID() const override;
-    int getProcessID(int bundle, int rank) override;
+    int getProcessID(int bundle, int rank) const override;
     int getNumberOfProcesses() const override;
     void *getNativeCommunicator() override;
-    int getRoot() override;
-    int getBundleRoot() override;
-    int getProcessRoot() override;
-    int getNumberOfProcessesInBundle(int bundle) override;
+    int getRoot() const override;
+    int getBundleRoot() const override;
+    int getProcessRoot() const override;
+    int getNumberOfProcessesInBundle(int bundle) const override;
     bool isRoot() const override;
     void abort(int errorcode) override;
 
diff --git a/src/parallel/NullCommunicator.cpp b/src/parallel/NullCommunicator.cpp
index b319fbd257ad593d3739897c689226de8b3e6eb3..4166b490dc4264345fbfe931c9414d4d077cc9c1 100644
--- a/src/parallel/NullCommunicator.cpp
+++ b/src/parallel/NullCommunicator.cpp
@@ -45,21 +45,21 @@ namespace vf::parallel
         return instance;
     }
     //////////////////////////////////////////////////////////////////////////
-    int NullCommunicator::getBundleID() { return 0; }
+    int NullCommunicator::getBundleID() const { return 0; }
     //////////////////////////////////////////////////////////////////////////
-    int NullCommunicator::getNumberOfBundles() { return 0; }
+    int NullCommunicator::getNumberOfBundles() const { return 0; }
     //////////////////////////////////////////////////////////////////////////
-    int NullCommunicator::getProcessID() const { return 0; }
+    int NullCommunicator::getProcessID()  const { return 0; }
     //////////////////////////////////////////////////////////////////////////
-    int NullCommunicator::getNumberOfProcesses() { return 0; }
+    int NullCommunicator::getNumberOfProcesses() const { return 1; }
     //////////////////////////////////////////////////////////////////////////
     void *NullCommunicator::getNativeCommunicator() { return NULL; }
     //////////////////////////////////////////////////////////////////////////
-    int NullCommunicator::getRoot() { return 0; }
+    int NullCommunicator::getRoot() const { return 0; }
     //////////////////////////////////////////////////////////////////////////
-    int NullCommunicator::getBundleRoot() { return 0; }
+    int NullCommunicator::getBundleRoot() const { return 0; }
     //////////////////////////////////////////////////////////////////////////
-    int NullCommunicator::getProcessRoot() { return 0; }
+    int NullCommunicator::getProcessRoot() const { return 0; }
     //////////////////////////////////////////////////////////////////////////
     std::vector<std::string> NullCommunicator::gather(const std::string & /*str*/) { return std::vector<std::string>(); }
     //////////////////////////////////////////////////////////////////////////
@@ -68,10 +68,10 @@ namespace vf::parallel
     //////////////////////////////////////////////////////////////////////////
     void NullCommunicator::receiveSerializedObject(std::stringstream &ss, int source) {}
 
-    int NullCommunicator::getProcessID(int bundle, int rank) { return 0; }
+    int NullCommunicator::getProcessID(int bundle, int rank) const { return 0; }
     bool NullCommunicator::isRoot() const { return true; }
 
-    int NullCommunicator::getNumberOfProcessesInBundle(int bundle) {return 0;}
+    int NullCommunicator::getNumberOfProcessesInBundle(int bundle) const {return 0;}
     void NullCommunicator::barrier() {}
     void NullCommunicator::abort(int errorcode) {}
 
@@ -101,11 +101,6 @@ namespace vf::parallel
 
     void NullCommunicator::send(real *sbuf, int count_s, int nb_rank) const {};
     double NullCommunicator::reduceSum(double quantityPerProcess) const { return 0.0; };
-    int NullCommunicator::getNumberOfProcesses() const
-    {
-        return 1;
-    }
-
     int NullCommunicator::mapCudaDevicesOnHosts(const std::vector<unsigned int> &devices, int numberOfDevices) const
     {
         return 0;
diff --git a/src/parallel/NullCommunicator.h b/src/parallel/NullCommunicator.h
index 312a40f08834fe4803236edb4d4eef78012d5ac4..69f437db733f9f6368cfdebc358c888da85ea1d8 100644
--- a/src/parallel/NullCommunicator.h
+++ b/src/parallel/NullCommunicator.h
@@ -46,21 +46,21 @@ class NullCommunicator : public Communicator
 public:
     static std::shared_ptr<Communicator> getInstance();
 
-    int getBundleID() override;
-    int getNumberOfBundles() override;
+    int getBundleID() const override;
+    int getNumberOfBundles() const override;
     int getProcessID() const override;
-    int getProcessID(int bundle, int rank) override;
-    int getNumberOfProcesses();
+    int getProcessID(int bundle, int rank) const override;
+    int getNumberOfProcesses() const override;
     bool isRoot() const override;
     void *getNativeCommunicator() override;
 
     void sendSerializedObject(std::stringstream &ss, int target) override;
     void receiveSerializedObject(std::stringstream &ss, int source) override;
 
-    int getRoot() override;
-    int getBundleRoot() override;
-    int getProcessRoot() override;
-    int getNumberOfProcessesInBundle(int bundle) override;
+    int getRoot() const override;
+    int getBundleRoot() const override;
+    int getProcessRoot() const override;
+    int getNumberOfProcessesInBundle(int bundle) const override;
     void barrier() override;
     void abort(int errorcode) override;
 
@@ -90,7 +90,6 @@ public:
     void send(real *sbuf, int count_s, int nb_rank) const override;
 
     double reduceSum(double quantityPerProcess) const override;
-    int getNumberOfProcesses() const override;
     int mapCudaDevicesOnHosts(const std::vector<unsigned int> &devices, int numberOfDevices) const override;
 
     void receiveSend(real *buffer_send, int size_buffer_send, real *buffer_receive, int size_buffer_recv,