#pragma once

struct Node
{
	int size;
	int *code;
	double *x, *y, *z;
	int **cells; //1st element represents size
	int **chass; //1st element size
	int **skin; //1st element size
};

struct Face
{
	int size_chass, size_skin, size_all;
	int *nodes_all, *face_codes;
	int *nodes_chass;
	int *nodes_skin; 
	double *cx_chass, *cy_chass, *cz_chass;
	double *oa_skin, *ob_skin;
	double *energy_chass, *surface_chass;
	double *energy_skin, *surface_skin;
};

struct Cell 
{
	int size;
	int *ids;
	int *code;
	double *energy;
	double *volume;
	double *jMat;
};

struct Mesh
{
	double energy;
	Node *nodes;
	Face *faces;
	Cell *cells;
};

struct Position 
{
	int size;
	double *px, *py, *pz;
	int *code;
};

struct DOF
{
	int size;
	double *x;
	int *map; //id; coord = {0,1,2 -> x,y,z};
};

struct AuxArch
{
	double *r, *r1, *x1, *x2;
	double *p1,*p2;
	double alpha, beta;
};

struct SParams
{
	int max_iterations;
	double gravity[3];
	double coef_chass;
	double log_parameter;
	double lambda, mu, lambdap, mup;
	double density;
	double derivative_precision, iderivative_precision;
	double energy_variation;
	double rot, rot_left, rot_right;
	double ax, az;
};
