diff --git a/cpp/full_code/ornstein_uhlenbeck_process.cpp b/cpp/full_code/ornstein_uhlenbeck_process.cpp
index 849231de5bd09d08cf8697b733ab748e8be06ae7..42cdfdcb868b6969271bc2dfc377f13ff02bc29f 100644
--- a/cpp/full_code/ornstein_uhlenbeck_process.cpp
+++ b/cpp/full_code/ornstein_uhlenbeck_process.cpp
@@ -152,6 +152,81 @@ void ornstein_uhlenbeck_process<rnumber,be>::initialize_B()
         });
 }
 
+template <class rnumber, field_backend be>
+void ornstein_uhlenbeck_process<rnumber,be>::add_to_field_replace(
+  field<rnumber, be, THREE> *src)
+{
+  assert(src->real_space_representation==false);
+  this->kk->CLOOP_K2(
+          [&](ptrdiff_t cindex,
+            ptrdiff_t xindex,
+            ptrdiff_t yindex,
+            ptrdiff_t zindex,
+            double k2){
+
+              if (k2 <= this->ou_kmax_squ && k2 >= this->ou_kmin_squ)
+              {
+                src->cval(cindex,0,0) = this->ou_field->cval(cindex,0,0);
+                src->cval(cindex,1,0) = this->ou_field->cval(cindex,1,0);
+                src->cval(cindex,2,0) = this->ou_field->cval(cindex,2,0);
+
+                src->cval(cindex,0,1) = this->ou_field->cval(cindex,0,1);
+                src->cval(cindex,1,1) = this->ou_field->cval(cindex,1,1);
+                src->cval(cindex,2,1) = this->ou_field->cval(cindex,2,1);
+              }
+              // else {
+              //   assert(src->cval(cindex,0,0) == this->ou_field->cval(cindex,0,0));
+              // }
+
+      }
+
+  );
+}
+
+template <class rnumber, field_backend be>
+void ornstein_uhlenbeck_process<rnumber,be>::add_to_field_sharp(
+  field<rnumber, be, THREE> *src)
+{
+  assert(src->real_space_representation==false);
+  this->kk->CLOOP_K2(
+          [&](ptrdiff_t cindex,
+            ptrdiff_t xindex,
+            ptrdiff_t yindex,
+            ptrdiff_t zindex,
+            double k2){
+
+              if (k2 <= this->ou_kmax_squ && k2 >= this->ou_kmin_squ)
+              {
+
+              }
+
+      }
+
+  );
+}
+
+template <class rnumber, field_backend be>
+void ornstein_uhlenbeck_process<rnumber,be>::add_to_field_gaussian(
+  field<rnumber, be, THREE> *src, double param)
+{
+  assert(src->real_space_representation==false);
+  this->kk->CLOOP_K2(
+          [&](ptrdiff_t cindex,
+            ptrdiff_t xindex,
+            ptrdiff_t yindex,
+            ptrdiff_t zindex,
+            double k2){
+
+              if (k2 <= this->ou_kmax_squ && k2 >= this->ou_kmin_squ)
+              {
+
+              }
+
+      }
+
+  );
+}
+
 
 template class ornstein_uhlenbeck_process<float,FFTW>;
 template class ornstein_uhlenbeck_process<double,FFTW>;
diff --git a/cpp/full_code/ornstein_uhlenbeck_process.hpp b/cpp/full_code/ornstein_uhlenbeck_process.hpp
index 07c7af594bf7e1445917c57b7e144ad555ffffdd..676ec527b3598639c5b9408af29d3eb14f55b51a 100644
--- a/cpp/full_code/ornstein_uhlenbeck_process.hpp
+++ b/cpp/full_code/ornstein_uhlenbeck_process.hpp
@@ -50,9 +50,15 @@ class ornstein_uhlenbeck_process{
         {
             return this->ou_energy_amplitude * pow(ksqu,1./3.);
         }
-        // double sigma(double k_abs);
         void initialize_B(void);
-        // void fill_number_of_modes(double dk, double kmax);
+
+        void add_to_field_gaussian(
+          field<rnumber,be,THREE> *src, double param);
+        void add_to_field_sharp(
+          field<rnumber,be,THREE> *src);
+        void add_to_field_replace(
+          field<rnumber,be,THREE> *src);
+
 
 };