/*
    Copyright 2012 Lumerical Solutions, Inc. All rights reserved.
*/
#ifndef _CHI3_H
#define _CHI3_H

#include "imaterialplugin.h"

class Chi3MaterialPlugin : public IMaterialPlugin
{
public:
    Chi3MaterialPlugin(){};
    virtual ~Chi3MaterialPlugin(){};

    const char* name() const {return "Chi3/Chi2";};
    const char* uniqueId() const {return "{AE3F2101-D665-4344-A0B8-490C92AF934A}";};
    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);
    void initialize(const double** parameters, double dt);
    void initializeStorageEx(float* storage){};
    void initializeStorageEy(float* storage){};
    void initializeStorageEz(float* storage){};
    size_t storageSizeE() const {return 0;};

private:
    float calculate(int axis, float U, float V, float E, float* storage);

    float chi1[3];
    float chi2[3];
    float chi3[3];

    static const char* names[4];
};

#endif


