#include <stdio.h>
#include <math.h>
#include "p_1_1.h"

void TMultiply(matrix A, matrix C);
void Subtract(matrix A, matrix B);
void Cholesky(matrix A, matrix L);

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

		DOL_read((void*)PORT_IN_1_0, p->local->b, N*N*sizeof(double), p);
		TMultiply(p->local->b, p->local->c);
		Subtract(p->local->a, p->local->c);

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

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