/* * File: KT17.hh * Author: Furkan - AKKA I&S * * Created on January 19, 2022, 4:14 PM */ #ifndef KT17_HH #define KT17_HH #include "libkt.h" // If we name it this way #include "Parameter.hh" #include "ParamData.hh" #include "DataTypeMath.hh" #include "Operation.hh" #include using namespace std; namespace AMDA { namespace Parameters { template class KT17 : public Operation { public: KT17(Process &pProcess, ParamDataSpec> ¶mInput, string coordRef, double rSun, double distIndex) : Operation(pProcess), _paramInput(paramInput), _coordRef(coordRef), _rSun(rSun), _distIndex(distIndex), _paramOutput(new TOutputParamData()) { _paramDataOutput = _paramOutput; } virtual ~KT17() { } void write(ParamDataIndexInfo &pParamDataIndexInfo) { for (unsigned int _index = pParamDataIndexInfo._startIndex; _index < pParamDataIndexInfo._startIndex + pParamDataIndexInfo._nbDataToProcess; ++_index) { vector in = _paramInput.getDataList()[_index]; if (in[0] == 0) in[0] = 1e-31; double crtTime = _paramInput.getTime(_index); vector outputBxyz; outputBxyz.resize(3); DataType outputBm; /* Creation of the output vectors */ GetModelField(in,outputBxyz); outputBm = sqrt(outputBxyz[0] * outputBxyz[0] + outputBxyz[1] * outputBxyz[1] + outputBxyz[2] * outputBxyz[2]); _paramOutput->pushTime(crtTime); pushResult(outputBxyz, outputBm); } } int GetModelField(vector &input, vector &output){ double Bx, By, Bz; double x,y,z; double* params=new double[2]; double dz = 0.196; // Coeffs for the model if (!std::isnan(_rSun) && !std::isnan(_distIndex)){ params[0] = _rSun; params[1] = _distIndex; } else{ params[0] = 0.427; params[1] = 50.0; } x = double(input[0]); y = double(input[1]); if(_coordRef == "MSO") z = double(input[2])-dz; else if (_coordRef == "MSM") z = double(input[2]); // Call to the lib to compute ModelField(1,&x,&y,&z,1,2,¶ms,&Bx, &By,&Bz); output[0] = Bx; output[1] = By; output[2] = Bz; free(params); return true; } protected: virtual void pushResult(vector field_cart, DataType magnitude_) = 0; ParamDataSpec> &_paramInput; std::string _coordRef; double _rSun; double _distIndex; TOutputParamData *_paramOutput; }; template class KT17Cart : public KT17>> { public: /** * @brief Constructor. * @details Create the ParamData type of the input ParamData. */ KT17Cart(Process &pProcess, ParamDataSpec> ¶mInput, string coordRef, double rSun, double distIndex) : KT17>>(pProcess, paramInput, coordRef, rSun, distIndex){} virtual ~KT17Cart(){} protected: virtual void pushResult(vector _fieldCart, DataType /*magnitude_*/){ KT17>>::_paramOutput->getDataList().push_back(_fieldCart); } }; template class KT17Mag : public KT17> { public: /** * @brief Constructor. * @details Create the ParamData type of the input ParamData. */ KT17Mag(Process &pProcess, ParamDataSpec> ¶mInput, string coordRef, double rSun, double distIndex) : KT17>(pProcess, paramInput, coordRef, rSun, distIndex){} virtual ~KT17Mag(){} protected: virtual void pushResult(vector /*_fieldCart*/, DataType magnitude_){ KT17>::_paramOutput->getDataList().push_back(magnitude_); } }; } } #endif /* KT17.hh */