/*
    Copyright 2012 Lumerical Solutions, Inc. All rights reserved.
*/
#ifndef _PARAMAGNETIC_H
#define _PARAMAGNETIC_H

#include "imaterialplugin.h"

class ParamagneticMaterialPlugin : public IMagneticMaterialPlugin
{
public:
    ParamagneticMaterialPlugin(){};
    virtual ~ParamagneticMaterialPlugin(){};

    const char* name() const {return "Paramagnetic";};
    const char* uniqueId() const {return "{EFDE348B-3FC0-4d06-B5F1-07FC4C09FBBB}";};
    const char** parameterNames() const {return names;};
    float calculateEx( float U, float V, float Ex, float* storage);
    float calculateEy( float U, float V, float Ey, float* storage);
    float calculateEz( float U, float V, float Ez, float* storage);
    float calculateHx( float U, float V, float Hx, float* storage);
    float calculateHy( float U, float V, float Hy, float* storage);
    float calculateHz( float U, float V, float Hz, float* storage);
    void initialize(const double** parameters, double dt);
    void initializeStorageEx(float* storage){};
    void initializeStorageEy(float* storage){};
    void initializeStorageEz(float* storage){};
    void initializeStorageHx(float* storage){};
    void initializeStorageHy(float* storage){};
    void initializeStorageHz(float* storage){};
    size_t storageSizeE() const {return 0;};
    size_t storageSizeH() const {return 0;};

private:
    float calculateE(int axis, float U, float V, float E, float* storage);
    float calculateH(int axis, float U, float V, float E, float* storage);

    float ur[3];
    float er[3];

    static const char* names[3];
};

#endif


