From 70dd7b5e25267e49e9ce849e48e2c693a9843db2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=BChle=2C=20Laura=20Christine=20=28lakue103=29?=
 <laura.kuehle@uni-duesseldorf.de>
Date: Wed, 24 Nov 2021 16:08:38 +0100
Subject: [PATCH] Restructured '_generate_cell_data()' and improved comments
 for it.

---
 ANN_Data_Generator.py | 47 +++++++++++++++++--------------------------
 1 file changed, 19 insertions(+), 28 deletions(-)

diff --git a/ANN_Data_Generator.py b/ANN_Data_Generator.py
index 0a9bebc..c8a4e91 100644
--- a/ANN_Data_Generator.py
+++ b/ANN_Data_Generator.py
@@ -2,7 +2,7 @@
 """
 @author: Soraya Terrab (sorayaterrab), Laura C. Kühle
 
-TODO: Improve '_generate_cell_data'
+TODO: Improve '_generate_cell_data' -> Done
 TODO: Extract normalization (Combine smooth and troubled before normalizing) -> Done
 TODO: Adapt code to generate both normalized and non-normalized data -> Done
 TODO: Improve verbose output -> Done
@@ -91,59 +91,50 @@ class TrainingDataGenerator(object):
 
         input_data = np.zeros((num_samples, self._stencil_length+2))
         num_init_cond = len(initial_conditions)
-
         count = 0
         for i in range(num_samples):
-            # Pick a Function here
+            # Select and initialize initial condition
             function_id = i % num_init_cond
             initial_condition = initial_conditions[function_id]['function']
             initial_condition.randomize(initial_conditions[function_id]['config'])
 
-            # Create basis_coefficients for function mapped onto stencil
-            polynomial_degree = np.random.randint(1, high=5)
-
-            # Calculating Cell centers for a given 1D domain with n elements, and
-            # Calculating Corresponding Legendre Basis Coefficients for given polynomial_degree
-            # Create stencil and basis_coefficients for smooth_function mapped onto stencil
-            interval, centers, h = self._build_stencil()
+            # Build random stencil of given length
+            interval, centers, spacing = self._build_stencil()
+            left_bound, right_bound = interval
             centers = [center[0] for center in centers]
 
-            initial_condition.induce_adjustment(-h[0]/3)
+            # Induce adjustment to capture troubled cells
+            adjustment = 0 if initial_condition.is_smooth else centers[self._stencil_length//2]
+            initial_condition.induce_adjustment(-spacing[0]/3)
 
-            left_bound, right_bound = interval
+            # Calculate basis coefficients for stencil
+            polynomial_degree = np.random.randint(1, high=5)
             dg_scheme = DG_Approximation.DGScheme(
                 'NoDetection', polynomial_degree=polynomial_degree,
                 num_grid_cells=self._stencil_length, left_bound=left_bound, right_bound=right_bound,
                 quadrature='Gauss', quadrature_config={'num_eval_points': polynomial_degree+1})
-
-            if initial_condition.is_smooth():
-                input_data[i] = dg_scheme.build_training_data(
-                    0, self._stencil_length, initial_condition)
-            else:
-                input_data[i] = dg_scheme.build_training_data(
-                    centers[self._stencil_length//2], self._stencil_length, initial_condition)
+            input_data[i] = dg_scheme.build_training_data(adjustment, initial_condition)
 
             count += 1
-            if count % 100 == 0:
+            if count % 1000 == 0:
                 print(str(count) + ' samples completed.')
 
         toc = timeit.default_timer()
         print('Finished calculating data ' + troubled_indicator + ' troubled cells!')
         print('Calculation time:', toc-tic, '\n')
 
-        # Shuffle input data
-        order = np.random.permutation(num_samples)
-        input_data = input_data[order]
-
+        # Set output data
         output_data = np.zeros((num_samples, 2))
-        if is_smooth:
-            output_data[:, 1] = np.ones(num_samples)
-        else:
-            output_data[:, 0] = np.ones(num_samples)
+        output_index = 1 if is_smooth else 0
+        output_data[:, output_index] = np.ones(num_samples)
 
         return input_data, output_data
 
     def _build_stencil(self):
+        # Calculating Cell centers for a given 1D domain with n elements, and
+        # Calculating Corresponding Legendre Basis Coefficients for given polynomial_degree
+        # Create stencil and basis_coefficients for smooth_function mapped onto stencil
+
         # Determining grid_spacing
         grid_spacing = 2 / (2 ** np.random.randint(3, high=9, size=1))
 
-- 
GitLab