#ifndef __TEMPERATURE_BLOCK_H_
#define __TEMPERATURE_BLOCK_H_
#include "temperature.h"
#define NL 4
#define IFACE 1
#define HSP 2
#define HSINK 3
typedef struct block_model_t_st
{
flp_t *flp;
thermal_config_t config;
double **b;
double **lu;
int *p;
double *a;
double *inva;
double **c;
package_RC_t pack;
double *gx, *gy;
double *gx_int, *gy_int;
double *gx_sp, *gy_sp;
double *gx_hs, *gy_hs;
double *g_amb;
double *t_vector;
double **len, **g;
int **border;
int n_nodes;
int n_units;
int base_n_units;
int r_ready;
int c_ready;
}block_model_t;
block_model_t *alloc_block_model(thermal_config_t *config, flp_t *placeholder);
void delete_block_model(block_model_t *model);
void populate_R_model_block(block_model_t *model, flp_t *flp);
void populate_C_model_block(block_model_t *model, flp_t *flp);
void steady_state_temp_block(block_model_t *model, double *power, double *temp);
void compute_temp_block(block_model_t *model, double *power, double *temp, double time_elapsed);
double *hotspot_vector_block(block_model_t *model);
void trim_hotspot_vector_block(block_model_t *model, double *dst, double *src,
int at, int size);
void resize_thermal_model_block(block_model_t *model, int n_units);
void set_temp_block (block_model_t *model, double *temp, double val);
void dump_temp_block (block_model_t *model, double *temp, char *file);
void copy_temp_block (block_model_t *model, double *dst, double *src);
void read_temp_block (block_model_t *model, double *temp, char *file, int clip);
void dump_power_block(block_model_t *model, double *power, char *file);
void read_power_block (block_model_t *model, double *power, char *file);
double find_max_temp_block(block_model_t *model, double *temp);
double find_avg_temp_block(block_model_t *model, double *temp);
double calc_sink_temp_block(block_model_t *model, double *temp, thermal_config_t *config);
void debug_print_block(block_model_t *model);
#endif