diff --git a/TurTLE/TEST.py b/TurTLE/TEST.py index 2dc2283c27d21bd981abc0cf1df39881aa59d995..3da0c8095b505521c66b6c66d24e92486d960f74 100644 --- a/TurTLE/TEST.py +++ b/TurTLE/TEST.py @@ -51,6 +51,7 @@ class TEST(_code): work_dir = work_dir, simname = simname) self.generate_default_parameters() + self.check_current_vorticity_exists = False return None def set_precision( self, @@ -181,11 +182,16 @@ class TEST(_code): kspace = self.get_kspace() nshells = kspace['nshell'].shape[0] ofile['checkpoint'] = int(0) - vec_stat_datasets = [] - scal_stat_datasets = [] + vec_spectra_stats = [] + tens_rspace_stats = [] + vec4_rspace_stats = [] + scal_rspace_stats = [] if self.dns_type in ['Gauss_field_test']: - vec_stat_datasets.append('velocity') - for k in vec_stat_datasets: + vec_spectra_stats.append('velocity') + vec4_rspace_stats.append('velocity') + tens_rspace_stats.append('velocity_gradient') + scal_rspace_stats.append('velocity_divergence') + for k in vec_spectra_stats: time_chunk = 2**20//(8*3*3*nshells) time_chunk = max(time_chunk, 1) ofile.create_dataset('statistics/spectra/' + k + '_' + k, @@ -193,6 +199,25 @@ class TEST(_code): chunks = (time_chunk, nshells, 3, 3), maxshape = (None, nshells, 3, 3), dtype = np.float64) + for k in scal_rspace_stats: + time_chunk = 2**20//(8*10) + time_chunk = max(time_chunk, 1) + a = ofile.create_dataset('statistics/moments/' + k, + (1, 10), + chunks = (time_chunk, 10), + maxshape = (None, 10), + dtype = np.float64) + time_chunk = 2**20//(8*self.parameters['histogram_bins']) + time_chunk = max(time_chunk, 1) + ofile.create_dataset('statistics/histograms/' + k, + (1, + self.parameters['histogram_bins']), + chunks = (time_chunk, + self.parameters['histogram_bins']), + maxshape = (None, + self.parameters['histogram_bins']), + dtype = np.int64) + for k in vec4_rspace_stats: time_chunk = 2**20//(8*4*10) time_chunk = max(time_chunk, 1) a = ofile.create_dataset('statistics/moments/' + k, @@ -213,6 +238,27 @@ class TEST(_code): self.parameters['histogram_bins'], 4), dtype = np.int64) + for k in tens_rspace_stats: + time_chunk = 2**20//(8*9*10) + time_chunk = max(time_chunk, 1) + a = ofile.create_dataset('statistics/moments/' + k, + (1, 10, 3, 3), + chunks = (time_chunk, 10, 3, 3), + maxshape = (None, 10, 3, 3), + dtype = np.float64) + time_chunk = 2**20//(8*9*self.parameters['histogram_bins']) + time_chunk = max(time_chunk, 1) + ofile.create_dataset('statistics/histograms/' + k, + (1, + self.parameters['histogram_bins'], + 3, 3), + chunks = (time_chunk, + self.parameters['histogram_bins'], + 3, 3), + maxshape = (None, + self.parameters['histogram_bins'], + 3, 3), + dtype = np.int64) return None def job_parser_arguments( self, diff --git a/TurTLE/test/test_Gaussian_field.py b/TurTLE/test/test_Gaussian_field.py index 5fdc3506f87f5fc7e964bb779007d303cbfd0ef7..149073e7c1abe931368df1a026ef8f02ac4bc070 100644 --- a/TurTLE/test/test_Gaussian_field.py +++ b/TurTLE/test/test_Gaussian_field.py @@ -94,6 +94,13 @@ def plot_stuff(simname, total_energy = 1.): a.set_ylim(1e-5,1) f.tight_layout() f.savefig('spectrum_isotropy_test.pdf') + plt.close(f) + + ### check divergence + print('Divergence second moment is: {0}'.format( + df['statistics/moments/velocity_divergence'][0, 2])) + print('Gradient second moment is: {0}'.format( + df['statistics/moments/velocity_gradient'][0, 2].mean())) df.close() return None diff --git a/cpp/full_code/Gauss_field_test.cpp b/cpp/full_code/Gauss_field_test.cpp index 6251d558efec714385c134ebde681d940f7512eb..6822b6d8c02f87a532ffb0d0f63ed9bc767a8564 100644 --- a/cpp/full_code/Gauss_field_test.cpp +++ b/cpp/full_code/Gauss_field_test.cpp @@ -130,13 +130,43 @@ int Gauss_field_test<rnumber>::do_work(void) stat_group = 0; } + /// compute gradient and divergence of field + field<rnumber, FFTW, THREExTHREE> *tensor_field = new field<rnumber, FFTW, THREExTHREE>( + nx, ny, nz, + this->comm, + FFTW_ESTIMATE); + compute_gradient( + this->kk, + this->vector_field, + tensor_field); + compute_divergence( + this->kk, + this->vector_field, + this->scalar_field); + /// compute basic statistics of Gaussian field this->vector_field->compute_stats( this->kk, stat_group, "velocity", 0, - 8.); + this->max_velocity_estimate); + + /// verify divergence free method + tensor_field->ift(); + /// for the stats max value doesn't really matter, I just want the moments + tensor_field->compute_rspace_stats( + stat_group, + "velocity_gradient", + 0, + std::vector<double>({1, 1, 1, 1, 1, 1, 1, 1, 1})); + this->scalar_field->ift(); + this->scalar_field->compute_rspace_stats( + stat_group, + "velocity_divergence", + 0, + std::vector<double>({1})); + delete tensor_field; /// close stat file if (this->myrank == 0)