/*
    Copyright 2012 Lumerical Solutions, Inc. All rights reserved.
*/
#ifndef _CHI3RAMANKERR_H
#define _CHI3RAMANKERR_H

#include "imaterialplugin.h"

class Chi3RamanKerrMaterialPlugin : public IMaterialPlugin
{
public:
    Chi3RamanKerrMaterialPlugin(){};
    virtual ~Chi3RamanKerrMaterialPlugin(){};

    const char* name() const {return "Chi3 Raman Kerr";};
    const char* uniqueId() const {return "{8E8486F7-5E44-4cbe-9E6C-40686ABCB7F2}";};
    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 2;};

private:
    float calculate(int axis, float U, float V, float E, float* storage);

    float a1[3];
    float a2[3];
    float a3[3];
    float chi1[3];
    float chi3[3];

    static const char* names[6];
};

#endif


