From 1715435683d3b2261cbeda1a8a3c44e545abb243 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@ds.mpg.de>
Date: Mon, 30 Sep 2019 15:06:40 +0200
Subject: [PATCH] hacks DNS.py to run static_field

this is not nice at all, but the purpose is to have basic functionality
for testing. It's pretty obvious this will need a custom launcher for
production work.
---
 TurTLE/DNS.py                  | 14 +++++++++-----
 cpp/full_code/static_field.cpp |  7 +++++--
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/TurTLE/DNS.py b/TurTLE/DNS.py
index 411f2cf7..21ef90ed 100644
--- a/TurTLE/DNS.py
+++ b/TurTLE/DNS.py
@@ -440,7 +440,7 @@ class DNS(_code):
         assert (self.parameters['niter_todo'] % self.parameters['niter_stat'] == 0)
         assert (self.parameters['niter_todo'] % self.parameters['niter_out']  == 0)
         assert (self.parameters['niter_out']  % self.parameters['niter_stat'] == 0)
-        if self.dns_type in ['NSVEparticles_no_output', 'NSVEcomplex_particles', 'NSVEparticles']:
+        if self.dns_type in ['NSVEparticles_no_output', 'NSVEcomplex_particles', 'NSVEparticles', 'static_field']:
             assert (self.parameters['niter_todo'] % self.parameters['niter_part'] == 0)
             assert (self.parameters['niter_out']  % self.parameters['niter_part'] == 0)
         _code.write_par(self, iter0 = iter0)
@@ -643,6 +643,10 @@ class DNS(_code):
                 'NSVEparticles_no_output',
                 help = 'plain Navier-Stokes vorticity formulation, with basic fluid tracers, checkpoints are NOT SAVED')
 
+        parser_static_field = subparsers.add_parser(
+                'static_field',
+                help = 'static field with basic fluid tracers')
+
         parser_NSVEp2 = subparsers.add_parser(
                 'NSVEparticles',
                 help = 'plain Navier-Stokes vorticity formulation, with basic fluid tracers')
@@ -655,7 +659,7 @@ class DNS(_code):
                 'NSVEp_extra_sampling',
                 help = 'plain Navier-Stokes vorticity formulation, with basic fluid tracers, that sample velocity gradient, as well as pressure and its derivatives.')
 
-        for parser in ['NSVEparticles_no_output', 'NSVEp2', 'NSVEp2p', 'NSVEp_extra']:
+        for parser in ['NSVEparticles_no_output', 'NSVEp2', 'NSVEp2p', 'NSVEp_extra', 'static_field']:
             eval('self.simulation_parser_arguments({0})'.format('parser_' + parser))
             eval('self.job_parser_arguments({0})'.format('parser_' + parser))
             eval('self.particle_parser_arguments({0})'.format('parser_' + parser))
@@ -698,7 +702,7 @@ class DNS(_code):
         self.dns_type = opt.DNS_class
         self.name = self.dns_type + '-' + self.fluid_precision + '-v' + TurTLE.__version__
         # merge parameters if needed
-        if self.dns_type in ['NSVEparticles', 'NSVEcomplex_particles', 'NSVEparticles_no_output', 'NSVEp_extra_sampling']:
+        if self.dns_type in ['NSVEparticles', 'NSVEcomplex_particles', 'NSVEparticles_no_output', 'NSVEp_extra_sampling', 'static_field']:
             for k in self.NSVEp_extra_parameters.keys():
                 self.parameters[k] = self.NSVEp_extra_parameters[k]
         if type(extra_parameters) != type(None):
@@ -763,7 +767,7 @@ class DNS(_code):
             # hardcoded FFTW complex representation size
             field_size = 3*(opt.nx+2)*opt.ny*opt.nz*self.fluid_dtype.itemsize
             checkpoint_size = field_size
-            if self.dns_type in ['NSVEparticles', 'NSVEcomplex_particles', 'NSVEparticles_no_output', 'NSVEp_extra_sampling']:
+            if self.dns_type in ['static_field', 'NSVEparticles', 'NSVEcomplex_particles', 'NSVEparticles_no_output', 'NSVEp_extra_sampling']:
                 rhs_size = self.parameters['tracers0_integration_steps']
                 if type(opt.tracers0_integration_steps) != type(None):
                     rhs_size = opt.tracers0_integration_steps
@@ -1039,7 +1043,7 @@ class DNS(_code):
                 f['vorticity/complex/{0}'.format(0)] = data
             f.close()
         # now take care of particles' initial condition
-        if self.dns_type in ['NSVEparticles', 'NSVEcomplex_particles', 'NSVEparticles_no_output', 'NSVEp_extra_sampling']:
+        if self.dns_type in ['static_field', 'NSVEparticles', 'NSVEcomplex_particles', 'NSVEparticles_no_output', 'NSVEp_extra_sampling']:
             self.generate_particle_data(opt = opt)
         return None
     def launch_jobs(
diff --git a/cpp/full_code/static_field.cpp b/cpp/full_code/static_field.cpp
index b7aaad36..0b679739 100644
--- a/cpp/full_code/static_field.cpp
+++ b/cpp/full_code/static_field.cpp
@@ -65,14 +65,16 @@ int static_field<rnumber>::initialize(void)
             nx, ny, nz,
             this->comm,
 	    fftw_planner_string_to_flag[this->fftw_plan_rigor]);
+    this->vorticity->real_space_representation = false;
 
     this->velocity = new field<rnumber, FFTW, THREE>(
             nx, ny, nz,
             this->comm,
 	    fftw_planner_string_to_flag[this->fftw_plan_rigor]);
-    //reading initial field which is either default or a specified source field
+    this->velocity->real_space_representation = false;
+    //read vorticity field
     this->vorticity->io(
-	    this->simname + std::string(".h5"),
+	    this->simname + std::string("_checkpoint_0.h5"),
 	    "vorticity",
 	    this->iteration,
 	    true);
@@ -94,6 +96,7 @@ int static_field<rnumber>::initialize(void)
 template <typename rnumber>
 int static_field<rnumber>::step(void)
 {
+    this->iteration ++;
     return EXIT_SUCCESS;
 }
 
-- 
GitLab