diff --git a/C++/preisach/preisachScalar/preisach.cc b/C++/preisach/preisachScalar/preisach.cc index 343e3a134ef80c967bce81423defcf147f936955..7d57c032624c11a96527fef7b3296b3663aada3d 100644 --- a/C++/preisach/preisachScalar/preisach.cc +++ b/C++/preisach/preisachScalar/preisach.cc @@ -162,6 +162,8 @@ namespace preisachScalar_ns{ void preisach::updatePilot()const{ if (!isPilot){ (*pilot) = (*this); + + pilot->bAutoUpdateKL=false; } } @@ -633,7 +635,6 @@ namespace preisachScalar_ns{ void preisach::updateKL(){ if(oKL == nullptr){ // create KL - // cout << "created KL" << endl; oKL = make_shared<KL>(E->getDiscInputValues(), E->getMaxInputVal(), E->getMaxOutputVal(), 1); } if(!oKL->isValid()){ diff --git a/C++/preisach/preisachScalar/test_preisach.cc b/C++/preisach/preisachScalar/test_preisach.cc index 28edb4c56f7086886d806744bccaca724bbc5ff5..b6bf2525a801cedf8bef1266b26810bcc5fd7c81 100644 --- a/C++/preisach/preisachScalar/test_preisach.cc +++ b/C++/preisach/preisachScalar/test_preisach.cc @@ -53,33 +53,36 @@ int main( /*int argc, char * argv[]*/){ - shared_ptr<EverettMatrix>ptrE3 = make_shared<Everett_Lorentzian>(NA, maxH, maxB, -56.5895187, 35.203259, 0.0172599749, 0.207211005, 132.612003, 0.00348025117, true, "adaptive", 7.0); - cout << ptrE3->getName() << endl; - preisach p(ptrE3); - cout << "preisach created" << endl; + auto ev = std::make_shared<Everett_Lorentzian>(501, 1640, 1.5); + auto p = preisach(ev); - cout << p.pilotH(1000)->getB_interpolated() << " " << p.pilotH(0)->getB_interpolated() << endl; - cout << p.addH(1000) << " " << p.pilotH(0)->getB_interpolated() << endl; - cout << p.addH(1000) << " " << p.addH(0) << endl; + auto KL = p.getKL(); - // p.demagnetise(); - // double tmp = p.addB(1); - // cout << tmp << " " << endl; + auto KL_data = KL->GetData(); - // p.demagnetise(); - // cout << p.addH(tmp) << endl; + double H_1 = KL_data[KL_data.size()/2 + 4].first; + double H_2 = KL_data[KL_data.size()/2 + 6].first; + double H_3 = KL_data[KL_data.size()/2 + 8].first; - // p.demagnetise(); - // cout << p.pilotB(1)->getH_interpolated() << " " << endl; - // cout << p.addB(1) << " " << endl; + assert_equal(p.pilotH(H_1)->getOutputVal_interpolated(), KL->EvaluateH(H_1)); + p.addH(H_2); + + assert_notequal(p.pilotH(H_1)->getOutputVal_interpolated(), KL->EvaluateH(H_1)); + + p.updateKL(); + assert_equal(p.pilotH(H_1)->getOutputVal_interpolated(), KL->EvaluateH(H_1)); p.demagnetise(); - cout << p.pilotB(1)->getH_interpolated() << " " << p.pilotB(0)->getH_interpolated() << endl; - cout << p.addB(1) << " " << p.pilotB(0)->getH_interpolated() << endl; - cout << p.addB(1) << " " << p.addB(0) << endl; + + p.setAutoUpdateKL(true); + + p.addH(H_3); + cout << "hereThere" << endl; + assert_equal(p.pilotH(H_1)->getOutputVal_interpolated(), KL->EvaluateH(H_1)); + cout << "hereTadfhere" << endl; return 0; p.addH(1640); diff --git a/C++/preisach/preisachScalar/unitTest b/C++/preisach/preisachScalar/unitTest index b7f5ced82f63cc7b86fcd9556921cf5b36d9d041..0cb0e0897c262b58fcafeb745fb6399685ab500d 100755 Binary files a/C++/preisach/preisachScalar/unitTest and b/C++/preisach/preisachScalar/unitTest differ diff --git a/pythonExamples/preisach/visoMagCurveDynamically.py b/pythonExamples/preisach/visoMagCurveDynamically.py index d2e2cbf46b4f97aa83979e06b9376393d74fa8f0..f36db2db27d1fb01c5c2df73dd08e09d5c6e5fbb 100644 --- a/pythonExamples/preisach/visoMagCurveDynamically.py +++ b/pythonExamples/preisach/visoMagCurveDynamically.py @@ -45,7 +45,7 @@ P_perfectDemag.usePerfectDemag = True # ----------- Input # ----------------------------------------------------------------------------- -N = 5000 +N = 500 # val = np.linspace(0, maxH/16, N) @@ -129,7 +129,7 @@ for v in val: H_perfectDemag_KL_dyn = data[:, 0] B_perfectDemag_KL_dyn = data[:, 1] - if i % 100 == 0: + if i % 10 == 0: plt.figure(1) plt.clf()