Commit 8d88006b authored by Chichi Lalescu's avatar Chichi Lalescu
Browse files

real space conversion works

parent bd927f06
......@@ -451,6 +451,12 @@ class PP(_code):
self.simulation_parser_arguments(parser_native_binary_to_hdf5)
self.job_parser_arguments(parser_native_binary_to_hdf5)
self.parameters_to_parser_arguments(parser_native_binary_to_hdf5)
parser_get_rfields = subparsers.add_parser(
'get_rfields',
help = 'get real space velocity field')
self.simulation_parser_arguments(parser_get_rfields)
self.job_parser_arguments(parser_get_rfields)
self.parameters_to_parser_arguments(parser_get_rfields)
return None
def prepare_launch(
self,
......@@ -671,6 +677,8 @@ class PP(_code):
njobs = opt.njobs,
hours = opt.minutes // 60,
minutes = opt.minutes % 60,
no_submit = opt.no_submit)
no_submit = opt.no_submit,
err_file = 'err_' + self.dns_type,
out_file = 'out_' + self.dns_type)
return None
#include <string>
#include <cmath>
#include "NSVE_field_stats.hpp"
#include "scope_timer.hpp"
template <typename rnumber>
int NSVE_field_stats<rnumber>::initialize(void)
{
this->postprocess::read_parameters();
this->vorticity = new field<rnumber, FFTW, THREE>(
nx, ny, nz,
this->comm,
DEFAULT_FFTW_FLAG);
this->vorticity->real_space_representation = false;
hid_t parameter_file = H5Fopen(
(this->simname + std::string(".h5")).c_str(),
H5F_ACC_RDONLY,
H5P_DEFAULT);
if (!H5Lexists(parameter_file, "field_dtype", H5P_DEFAULT))
this->bin_IO = NULL;
else
{
hid_t dset = H5Dopen(parameter_file, "field_dtype", H5P_DEFAULT);
hid_t space = H5Dget_space(dset);
hid_t memtype = H5Dget_type(dset);
char *string_data = (char*)malloc(256);
H5Dread(dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, &string_data);
// check that we're using the correct data type
// field_dtype SHOULD be something like "<f4", "<f8", ">f4", ">f8"
// first character is ordering, which is machine specific
// for the other two I am checking that they have the correct values
assert(string_data[1] == 'f');
assert(string_data[2] == '0' + sizeof(rnumber));
free(string_data);
H5Sclose(space);
H5Tclose(memtype);
H5Dclose(dset);
this->bin_IO = new field_binary_IO<rnumber, COMPLEX, THREE>(
this->vorticity->clayout->sizes,
this->vorticity->clayout->subsizes,
this->vorticity->clayout->starts,
this->vorticity->clayout->comm);
}
H5Fclose(parameter_file);
return EXIT_SUCCESS;
}
template <typename rnumber>
int NSVE_field_stats<rnumber>::read_current_cvorticity(void)
{
this->vorticity->real_space_representation = false;
if (this->bin_IO != NULL)
{
char itername[16];
sprintf(itername, "i%.5x", this->iteration);
std::string native_binary_fname = (
this->simname +
std::string("_cvorticity_") +
std::string(itername));
this->bin_IO->read(
native_binary_fname,
this->vorticity->get_cdata());
}
else
{
this->vorticity->io(
this->simname + std::string("_fields.h5"),
"vorticity",
this->iteration,
true);
}
return EXIT_SUCCESS;
}
template <typename rnumber>
int NSVE_field_stats<rnumber>::finalize(void)
{
if (this->bin_IO != NULL)
delete this->bin_IO;
delete this->vorticity;
return EXIT_SUCCESS;
}
template <typename rnumber>
int NSVE_field_stats<rnumber>::work_on_current_iteration(void)
{
DEBUG_MSG("entered NSVE_field_stats::work_on_current_iteration\n");
return EXIT_SUCCESS;
}
template class NSVE_field_stats<float>;
template class NSVE_field_stats<double>;
/**********************************************************************
* *
* Copyright 2017 Max Planck Institute *
* for Dynamics and Self-Organization *
* *
* This file is part of bfps. *
* *
* bfps is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published *
* by the Free Software Foundation, either version 3 of the License, *
* or (at your option) any later version. *
* *
* bfps is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with bfps. If not, see <http://www.gnu.org/licenses/> *
* *
* Contact: Cristian.Lalescu@ds.mpg.de *
* *
**********************************************************************/
#ifndef NSVE_FIELD_STATS_HPP
#define NSVE_FIELD_STATS_HPP
#include <cstdlib>
#include <sys/types.h>
#include <sys/stat.h>
#include <vector>
#include "base.hpp"
#include "field.hpp"
#include "field_binary_IO.hpp"
#include "full_code/postprocess.hpp"
template <typename rnumber>
class NSVE_field_stats: public postprocess
{
private:
field_binary_IO<rnumber, COMPLEX, THREE> *bin_IO;
public:
field<rnumber, FFTW, THREE> *vorticity;
NSVE_field_stats(
const MPI_Comm COMMUNICATOR,
const std::string &simulation_name):
postprocess(
COMMUNICATOR,
simulation_name){}
virtual ~NSVE_field_stats(){}
virtual int initialize(void);
virtual int work_on_current_iteration(void);
virtual int finalize(void);
int read_current_cvorticity(void);
};
#endif//NSVE_FIELD_STATS_HPP
#include <string>
#include <cmath>
#include "get_rfields.hpp"
#include "scope_timer.hpp"
template <typename rnumber>
int get_rfields<rnumber>::initialize(void)
{
this->NSVE_field_stats<rnumber>::initialize();
this->kk = new kspace<FFTW, SMOOTH>(
this->vorticity->clayout, this->dkx, this->dky, this->dkz);
hid_t parameter_file = H5Fopen(
(this->simname + std::string(".h5")).c_str(),
H5F_ACC_RDONLY,
H5P_DEFAULT);
hid_t dset = H5Dopen(parameter_file, "/parameters/niter_out", H5P_DEFAULT);
H5Dread(dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &this->niter_out);
H5Dclose(dset);
if (H5Lexists(parameter_file, "/parameters/checkpoints_per_file", H5P_DEFAULT))
{
dset = H5Dopen(parameter_file, "/parameters/checkpoints_per_file", H5P_DEFAULT);
H5Dread(dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &this->checkpoints_per_file);
H5Dclose(dset);
}
else
this->checkpoints_per_file = 1;
this->iteration_list = hdf5_tools::read_vector<int>(
parameter_file,
"/get_rfields/iteration_list");
H5Fclose(parameter_file);
return EXIT_SUCCESS;
}
template <typename rnumber>
int get_rfields<rnumber>::work_on_current_iteration(void)
{
DEBUG_MSG("entered get_rfields::work_on_current_iteration\n");
this->read_current_cvorticity();
field<rnumber, FFTW, THREE> *vel = new field<rnumber, FFTW, THREE>(
this->nx, this->ny, this->nz,
this->comm,
this->vorticity->fftw_plan_rigor);
vel->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->kk->kM2 && k2 > 0)
{
vel->cval(cindex,0,0) = -(this->kk->ky[yindex]*this->vorticity->cval(cindex,2,1) - this->kk->kz[zindex]*this->vorticity->cval(cindex,1,1)) / k2;
vel->cval(cindex,0,1) = (this->kk->ky[yindex]*this->vorticity->cval(cindex,2,0) - this->kk->kz[zindex]*this->vorticity->cval(cindex,1,0)) / k2;
vel->cval(cindex,1,0) = -(this->kk->kz[zindex]*this->vorticity->cval(cindex,0,1) - this->kk->kx[xindex]*this->vorticity->cval(cindex,2,1)) / k2;
vel->cval(cindex,1,1) = (this->kk->kz[zindex]*this->vorticity->cval(cindex,0,0) - this->kk->kx[xindex]*this->vorticity->cval(cindex,2,0)) / k2;
vel->cval(cindex,2,0) = -(this->kk->kx[xindex]*this->vorticity->cval(cindex,1,1) - this->kk->ky[yindex]*this->vorticity->cval(cindex,0,1)) / k2;
vel->cval(cindex,2,1) = (this->kk->kx[xindex]*this->vorticity->cval(cindex,1,0) - this->kk->ky[yindex]*this->vorticity->cval(cindex,0,0)) / k2;
}
else
std::fill_n((rnumber*)(vel->get_cdata()+3*cindex), 6, 0.0);
}
);
vel->symmetrize();
vel->ift();
std::string fname = (
this->simname +
std::string("_checkpoint_") +
std::to_string(this->iteration / (this->niter_out*this->checkpoints_per_file)) +
std::string(".h5"));
vel->io(
fname,
"velocity",
this->iteration,
false);
delete vel;
return EXIT_SUCCESS;
}
template <typename rnumber>
int get_rfields<rnumber>::finalize(void)
{
delete this->kk;
this->NSVE_field_stats<rnumber>::finalize();
return EXIT_SUCCESS;
}
template class get_rfields<float>;
template class get_rfields<double>;
/**********************************************************************
* *
* Copyright 2017 Max Planck Institute *
* for Dynamics and Self-Organization *
* *
* This file is part of bfps. *
* *
* bfps is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published *
* by the Free Software Foundation, either version 3 of the License, *
* or (at your option) any later version. *
* *
* bfps is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with bfps. If not, see <http://www.gnu.org/licenses/> *
* *
* Contact: Cristian.Lalescu@ds.mpg.de *
* *
**********************************************************************/
#ifndef GET_RFIELDS_HPP
#define GET_RFIELDS_HPP
#include <cstdlib>
#include <sys/types.h>
#include <sys/stat.h>
#include <vector>
#include "base.hpp"
#include "field.hpp"
#include "field_binary_IO.hpp"
#include "full_code/NSVE_field_stats.hpp"
template <typename rnumber>
class get_rfields: public NSVE_field_stats<rnumber>
{
public:
int checkpoints_per_file;
int niter_out;
kspace<FFTW, SMOOTH> *kk;
get_rfields(
const MPI_Comm COMMUNICATOR,
const std::string &simulation_name):
NSVE_field_stats<rnumber>(
COMMUNICATOR,
simulation_name){}
virtual ~get_rfields(){}
int initialize(void);
int work_on_current_iteration(void);
int finalize(void);
};
#endif//GET_RFIELDS_HPP
......@@ -61,6 +61,7 @@ int native_binary_to_hdf5<rnumber>::read_parameters(void)
this->iteration_list = hdf5_tools::read_vector<int>(
parameter_file,
"/native_binary_to_hdf5/iteration_list");
H5Fclose(parameter_file);
return EXIT_SUCCESS;
}
......
......@@ -8,6 +8,8 @@
int postprocess::main_loop(void)
{
DEBUG_MSG("entered postprocess::main_loop\n");
DEBUG_MSG("interation_list.size = %d\n", iteration_list.size());
this->start_simple_timer();
for (unsigned int iteration_counter = 0;
iteration_counter < iteration_list.size();
......@@ -32,7 +34,6 @@ int postprocess::read_parameters()
hid_t parameter_file;
hid_t dset, memtype, space;
char fname[256];
hsize_t dims[1];
char *string_data;
sprintf(fname, "%s.h5", this->simname.c_str());
parameter_file = H5Fopen(fname, H5F_ACC_RDONLY, H5P_DEFAULT);
......
......@@ -89,6 +89,8 @@ print('This is bfps version ' + VERSION)
### lists of files and MANIFEST.in
src_file_list = ['hdf5_tools',
'full_code/get_rfields',
'full_code/NSVE_field_stats',
'full_code/native_binary_to_hdf5',
'full_code/postprocess',
'full_code/code_base',
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment