package lisi version 0.1 { enum SparseStruct { CSR, COO, MSR, VBR, FEM, } enum MatrixID { MATRIX, PRECONDITIONER, } /** * since matrixfree port will be provided * by the application side, we assume that * linear system partition information and * startrow already are known. * already known. */ interface MatrixFree extends gov.cca.Port{ int matMult(in MatrixID ID, in rarray X(Length), inout rarray Y(Length), in int Length); } interface SparseSolver extends gov.cca.Port{ int initialize(in long comm); int setBlockSize(in int bs); /** * Assume that block row partitioning */ int setStartRow(in int startrow); int setLocalRows(in int rows); int setLocalNNZ(in int nnz); int setGlobalCols(in int cols); int setOffset(in int offset); int setupMatrix[few_args](in rarray Values(NNZ), in rarray Rows(NNZ), in rarray Columns(NNZ), in int NNZ); int setupMatrix[media_args](in rarray Values(NNZ), in rarray Rows(RowsLength), in rarray Columns(NNZ), in SparseStruct DataStruct, in int RowsLength, in int NNZ); int setupRHS(in rarray RightHandSide(NumLocalRow), in int NumLocalRow); int solve(inout rarray Solution(NumLocalRow), inout rarray Status(StatusLength), in int NumLocalRow, in int StatusLength); int set(in string key, in string value); int setInt(in string key, in int value); int setBool(in string key, in bool value); int setDouble(in string key, in double value); string get_all(); } }