#include <stdio.h>
#include <math.h>
#include "p_0_0.h"
#include "matrix.c"

void Cholesky(matrix A, matrix L);
void Invert(matrix x, matrix L);
void Transpose(matrix A, matrix B);

void p_0_0_init(DOLProcess *p)
{
	p->local->index = 0;
	p->local->len = LENGTH;
}
int p_0_0_fire(DOLProcess *p)
{	if (p->local->index < p->local->len)
	{
		DOL_read((void*)PORT_IN_GEN, p->local->a, N*N*sizeof(double), p);

		Cholesky(p->local->a, p->local->L);
		Invert(p->local->x, p->local->L);
		Transpose(p->local->x, p->local->Inv);

		DOL_write((void*)PORT_OUT_CON, p->local->L, N*N*sizeof(double), p);
		DOL_write((void*)PORT_OUT_1_0, p->local->Inv, N*N*sizeof(double), p);
		p->local->index++;
	}

	if (p->local->index >= p->local->len)
	{
		DOL_detach(p);
		return -1;
	}
	return 0;
}
