------------------------------------------ ------------------------------------------ ----- A System Matrix Implementation ----- ----- using Sparse Matrix Methods, ----- ----- and Energy Flow Processing ----- ----- ----- ----- By John Ringland ----- ----- 2004/11/21 ----- ------------------------------------------ ------------------------------------------ -- this file uses sparse matrix energy flow methods -- to implement an ergodic pure metric sysWrapped SMN framework -- using System Transforms. -- And uses the above methods to implement a simple NAND system. include ergodicSysMSMN.e --------------------------------- --------------------------------- ----- Test Model of a ----- ----- Single NAND system ----- --------------------------------- --------------------------------- sequence st, sm, sv, model, cUpdate object is function NAND(sequence in) -- in is a pair of cData bools; either zero or one return not (in[1]*in[2]) end function integer NAND_id NAND_id = routine_id("NAND") -- input selector is = 1 st = {NAND_id} -- constructing the Metric System Matrix element by element sm = sparse_SM(3,3) sm = set_SM(sm, {1,2}, is) sm = set_SM(sm, {1,3}, is) -- constructing the State Vector sv = {0,1,1} -- flagging the initial inputs for processing cUpdate = {2,3} -- combining all of the above into a single system model model = {st,sm,sv,cUpdate} puts(1,"\n\nSingle NAND System\n\n") puts(1,"initial model a = NOT (b AND c)\n") ? model sequence result puts(1,"first iteration\n") result = step_Model(model, 1) puts(1,"State Vector: ") ? result[model_][SV_] puts(1,"cUpdate: ") ? result[model_][CU_] puts(1,"cUpdate is empty so no more iterations needed\n\n") puts(1,"all iterations at once\n") result = step_Model(model, 100) puts(1,"State Vector: ") ? result[model_][SV_] puts(1,"cUpdate: ") ? result[model_][CU_] puts(1,"\nthen change c=0\n\n") result[model_][SV_][3] = 0 result[model_][CU_] = {3} puts(1,"State Vector: ") ? result[model_][SV_] puts(1,"cUpdate: ") ? result[model_][CU_] puts(1,"\nfirst iteration\n") result = step_Model(result[model_], 1) puts(1,"State Vector: ") ? result[model_][SV_] puts(1,"cUpdate: ") ? result[model_][CU_] puts(1,"\nsecond iteration\n") result = step_Model(result[model_], 1) puts(1,"State Vector: ") ? result[model_][SV_] puts(1,"cUpdate: ") ? result[model_][CU_] puts(1,"this second iteration doesn't change the state vector, it only clears the cUpdate list\n\n")