*** Wartungsfenster jeden ersten Mittwoch vormittag im Monat ***

Skip to content
Snippets Groups Projects
Commit 5d333e7b authored by Hanser, Valentin's avatar Hanser, Valentin
Browse files

working on harmonics selection

parent 6914bbd4
No related branches found
No related tags found
No related merge requests found
Pipeline #281425 passed with stages
in 10 minutes and 37 seconds
......@@ -79,19 +79,20 @@ void declare_nonLinCF_harmonicBalance(py::module &m){
.def(py::init(
[](shared_ptr<MeshAccess>& mesh, IntegrationRule& intrule,
const vector<shared_ptr<CoefficientFunction>> ptrInput_i,
const vector<double> omega_i,
vector<double> H_KL,
vector<double> B_KL,
vector<double> ti,
const std::string cFieldIn, const std::string cFieldOut, const shared_ptr<CoefficientFunction>& ptrMask, unsigned int order,
bool usePreisBiro)
{
return new nonLinCF_harmonicBalance<T, DIM>(mesh, intrule, ptrInput_i, H_KL, B_KL, ti, cFieldIn, cFieldOut, ptrMask, order, usePreisBiro);
}), py::arg("mesh"), py::arg("IntegrationRule"), py::arg("InputFunctions"), py::arg("H_KL"), py::arg("B_KL"), py::arg("ti"), py::arg("field_in") = "H", py::arg("field_out") = "B",py::arg("mask")=nullptr, py::arg("order")=3, py::arg("usePreisBiro")=false)
return new nonLinCF_harmonicBalance<T, DIM>(mesh, intrule, ptrInput_i, omega_i, H_KL, B_KL, ti, cFieldIn, cFieldOut, ptrMask, order, usePreisBiro);
}), py::arg("mesh"), py::arg("IntegrationRule"), py::arg("InputFunctions"), py::arg("omegas"), py::arg("H_KL"), py::arg("B_KL"), py::arg("ti"), py::arg("field_in") = "H", py::arg("field_out") = "B",py::arg("mask")=nullptr, py::arg("order")=3, py::arg("usePreisBiro")=false)
.def("Update", overload_cast_<>()(&nonLinCF_harmonicBalance<T, DIM>::Update), "Updates the output CF according to the current input CF")
.def("Update", overload_cast_<const vector<shared_ptr<CoefficientFunction>> >()(&nonLinCF_harmonicBalance<T, DIM>::Update), "Updates the output CF according to the given input CF")
.def("getParts", &nonLinCF_harmonicBalance<T, DIM>::getParts)
.def("getTi", &nonLinCF_harmonicBalance<T, DIM>::getTi)
.def_property("omega0", &nonLinCF_harmonicBalance<T, DIM>::getOmega, &nonLinCF_harmonicBalance<T, DIM>::setOmega)
.def_property("omega", &nonLinCF_harmonicBalance<T, DIM>::getOmegas, &nonLinCF_harmonicBalance<T, DIM>::setOmegas)
;
}
......
......@@ -411,13 +411,14 @@ unsigned int nonLinCF<T, DIM>::getOrder() const{
template <typename T, unsigned int DIM>
nonLinCF_harmonicBalance<T, DIM>::nonLinCF_harmonicBalance(shared_ptr<MeshAccess>& mesh, IntegrationRule& intrule,
const vector<shared_ptr<CoefficientFunction>> ptrInput_i,
const vector<double> omega_i,
vector<double> H_KL,
vector<double> B_KL,
vector<double> ti,
const std::string cFieldIn, const std::string cFieldOut,
const shared_ptr<CoefficientFunction>& ptrMask, unsigned int order, bool usePreisBiro):
nonLinCF<T, DIM>{mesh, intrule, nullptr, H_KL, B_KL, cFieldIn, cFieldOut, ptrMask, order, usePreisBiro},
ptrInput_i{ptrInput_i}, ti{ti}, omega_0{2.0*M_PI/(ti.back() - ti.front())}{
ptrInput_i{ptrInput_i}, omega_i{omega_i}, ti{ti}{
unsigned int i;
for(i = 0; i!= ti.size(); ++i){
......@@ -464,9 +465,10 @@ void nonLinCF_harmonicBalance<T, DIM>::Update(const vector<shared_ptr<Coefficien
for(j = 0; j!= ptrInput_i.size(); ++j){
ptrInput_i[j]->Evaluate(this->mips[el][ip], fV_tmp);
val_in_c += fV_tmp(0) * std::exp( j * 1i * omega_0 * ti[i]);
val_in_c += fV_tmp(0) * std::exp( 1i * omega_i[j] * ti[i]);
}
// TODO: let the user decide....
val_in = std::abs(val_in_c.real());
if(!std::strcmp(this->sFieldIn.c_str(), "H")){
......
......@@ -144,6 +144,7 @@ class nonLinCF_harmonicBalance : public nonLinCF<T, DIM>{
public:
nonLinCF_harmonicBalance(shared_ptr<MeshAccess>& mesh, IntegrationRule& intrule,
const vector<shared_ptr<CoefficientFunction>> ptrInput_i,
const vector<double> omega_i,
vector<double> H_KL,
vector<double> B_KL,
vector<double> ti,
......@@ -155,12 +156,12 @@ class nonLinCF_harmonicBalance : public nonLinCF<T, DIM>{
virtual void Update(const vector<shared_ptr<CoefficientFunction>> ptrInput);
double getOmega()const{
return omega_0;
vector<double> getOmegas()const{
return omega_i;
}
void setOmega(const double val){
omega_0 = val;
void setOmegas(const vector<double> val){
omega_i = val;
}
vector<double> getTi() const{
......@@ -174,8 +175,8 @@ class nonLinCF_harmonicBalance : public nonLinCF<T, DIM>{
private:
vector<shared_ptr<CoefficientFunction>> ptrInput_i;
vector<double> omega_i;
vector<double> ti;
double omega_0 = 0;
vector<std::shared_ptr<nonLinCF<T, DIM>>> nonLin_parts;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment