Program Listing for File signature.h¶
↰ Return to documentation for file (source/adem/signature.h
)
/*
* signature.h Eddy Signatures for use with the Attached-Detached Eddy Method
*
* Author: Tom Clark (thclark @ github)
*
* Copyright (c) 2019 Octue Ltd. All Rights Reserved.
*
*/
#ifndef SOURCE_ADEM_SIGNATURE_H_
#define SOURCE_ADEM_SIGNATURE_H_
#include <boost/algorithm/string/classification.hpp> // Include boost::for is_any_of
#include <boost/algorithm/string/split.hpp> // Include for boost::split
#include <Eigen/Dense>
#include <Eigen/Core>
#include <stdexcept>
#include <unsupported/Eigen/CXX11/Tensor>
#include "variable_readers.h"
#include "profile.h"
#include "relations/stress.h"
#include "relations/velocity.h"
#include "utilities/filter.h"
#include "cpplot.h"
#include <unsupported/Eigen/FFT>
#include "utilities/conv.h"
#include "utilities/tensors.h"
using namespace utilities;
namespace es {
class EddySignature {
public:
std::string eddy_type;
Eigen::VectorXd lambda;
Eigen::ArrayXXd k1z;
Eigen::Tensor<double, 3> g;
Eigen::ArrayXXd j;
void load(std::string file_name, bool print_var = false) {
std::cout << "Reading eddy signature data from file " << file_name << std::endl;
// Open the MAT file for reading
mat_t *matfp = Mat_Open(file_name.c_str(), MAT_ACC_RDONLY);
if (matfp == NULL) {
std::string msg = "Error reading MAT file: ";
throw std::invalid_argument(msg + file_name);
}
// Use the variable readers to assist
eddy_type = readString(matfp, "type", print_var);
lambda = readVectorXd(matfp, "lambda", print_var);
k1z = readArrayXXd(matfp, "k1z", print_var);
g = readTensor3d(matfp, "g", print_var);
j = readArrayXXd(matfp, "J", print_var);
// Close the file
Mat_Close(matfp);
std::cout << "Finished reading eddy signature (Type " + eddy_type + ")" << std::endl;
}
void save(std::string filename) {
std::cout << "Writing signature data..." << std::endl;
throw std::invalid_argument("Error writing mat file - function not implemented");
}
EddySignature operator+(const EddySignature& c) const
{
EddySignature result;
result.eddy_type = this->eddy_type + "+" + c.eddy_type;
// TODO assert equality of lambda and k1z
result.lambda = this->lambda;
result.k1z = this->k1z;
result.g = (this->g + c.g);
result.j = (this->j + c.j);
return result;
}
EddySignature operator/(double denom) const
{
EddySignature result;
result.eddy_type = "(" + this->eddy_type + ")/" + std::to_string(denom);
// TODO assert equality of lambda and k1z
result.lambda = this->lambda;
result.k1z = this->k1z;
result.g = this->g;
result.j = this->j;
result.g = result.g / denom;
result.j = result.j / denom;
return result;
}
};
} /* namespace es */
#endif /* SOURCE_ADEM_SIGNATURE_H_ */