/*
    Copyright 2012 Lumerical Solutions, Inc. All rights reserved.
*/
#include "paramagnetic.h"
#include <cmath>

/*!
    \class ParamagneticMaterialPlugin

    \brief An example implementation of a magnetic material
*/

MATERIAL_PLUGIN(ParamagneticMaterialPlugin);

const char* ParamagneticMaterialPlugin::names[3] = {"Permittivity", "Permeability", 0};

void ParamagneticMaterialPlugin::initialize(const double** parameters, double dt)
{
    for(int i=0; i<3; i++){
        er[i] = float(parameters[0][i]) - 1.f;
        ur[i] = float(parameters[1][i]) - 1.f;
    }
}

float ParamagneticMaterialPlugin::calculateE(int axis, float U, float V, float E, float* storage)
{
    return V/(U+er[axis]);
}

float ParamagneticMaterialPlugin::calculateH(int axis, float U, float V, float E, float* storage)
{
    return V/(U+ur[axis]);
}

float ParamagneticMaterialPlugin::calculateEx( float U, float V, float Ex, float* storage )
{
    return calculateE(0, U, V, Ex, storage);
}

float ParamagneticMaterialPlugin::calculateEy( float U, float V, float Ey, float* storage )
{
    return calculateE(1, U, V, Ey, storage);
}

float ParamagneticMaterialPlugin::calculateEz( float U, float V, float Ez, float* storage )
{
    return calculateE(2, U, V, Ez, storage);
}

float ParamagneticMaterialPlugin::calculateHx( float U, float V, float Hx, float* storage )
{
    return calculateH(0, U, V, Hx, storage);
}

float ParamagneticMaterialPlugin::calculateHy( float U, float V, float Hy, float* storage )
{
    return calculateH(1, U, V, Hy, storage);
}

float ParamagneticMaterialPlugin::calculateHz( float U, float V, float Hz, float* storage )
{
    return calculateH(2, U, V, Hz, storage);
}

