ParallelDEVS.metamodel 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841
  1. {
  2. "types": {
  3. "State": [
  4. {
  5. "name": "name",
  6. "type": "string",
  7. "default": ""
  8. },
  9. {
  10. "name": "initial",
  11. "type": "bool",
  12. "default": false
  13. },
  14. {
  15. "name": "time_advance",
  16. "type": "code",
  17. "default": ""
  18. },
  19. {
  20. "name": "output",
  21. "type": "code",
  22. "default": ""
  23. },
  24. {
  25. "name": "position",
  26. "type": "list<int>",
  27. "default": [
  28. 0,
  29. 0
  30. ]
  31. }
  32. ],
  33. "BaseDEVS": [
  34. {
  35. "name": "name",
  36. "type": "string",
  37. "default": ""
  38. },
  39. {
  40. "name": "attributes",
  41. "type": "list<$ATTRIBUTE>",
  42. "default": []
  43. },
  44. {
  45. "name": "parameters",
  46. "type": "list<$ARG>",
  47. "default": []
  48. },
  49. {
  50. "name": "__init__",
  51. "type": "code",
  52. "default": ""
  53. },
  54. {
  55. "name": "position",
  56. "type": "list<int>",
  57. "default": [
  58. 0,
  59. 0
  60. ]
  61. },
  62. {
  63. "name": "scale",
  64. "type": "list<int>",
  65. "default": [
  66. 0,
  67. 0
  68. ]
  69. }
  70. ],
  71. "CoupledDEVS": [
  72. {
  73. "name": "name",
  74. "type": "string",
  75. "default": ""
  76. },
  77. {
  78. "name": "attributes",
  79. "type": "list<$ATTRIBUTE>",
  80. "default": []
  81. },
  82. {
  83. "name": "parameters",
  84. "type": "list<$ARG>",
  85. "default": []
  86. },
  87. {
  88. "name": "__init__",
  89. "type": "code",
  90. "default": ""
  91. },
  92. {
  93. "name": "position",
  94. "type": "list<int>",
  95. "default": [
  96. 0,
  97. 0
  98. ]
  99. },
  100. {
  101. "name": "scale",
  102. "type": "list<int>",
  103. "default": [
  104. 0,
  105. 0
  106. ]
  107. }
  108. ],
  109. "Event": [
  110. {
  111. "name": "name",
  112. "type": "string",
  113. "default": ""
  114. },
  115. {
  116. "name": "attributes",
  117. "type": "list<$ATTRIBUTE>",
  118. "default": []
  119. },
  120. {
  121. "name": "parameters",
  122. "type": "list<$ARG>",
  123. "default": []
  124. },
  125. {
  126. "name": "__init__",
  127. "type": "code",
  128. "default": ""
  129. }
  130. ],
  131. "Port": [
  132. {
  133. "name": "name",
  134. "type": "string",
  135. "default": ""
  136. },
  137. {
  138. "name": "position",
  139. "type": "list<int>",
  140. "default": [
  141. 0,
  142. 0
  143. ]
  144. }
  145. ],
  146. "InputPort": [
  147. {
  148. "name": "name",
  149. "type": "string",
  150. "default": ""
  151. },
  152. {
  153. "name": "position",
  154. "type": "list<int>",
  155. "default": [
  156. 0,
  157. 0
  158. ]
  159. }
  160. ],
  161. "OutputPort": [
  162. {
  163. "name": "name",
  164. "type": "string",
  165. "default": ""
  166. },
  167. {
  168. "name": "position",
  169. "type": "list<int>",
  170. "default": [
  171. 0,
  172. 0
  173. ]
  174. }
  175. ],
  176. "Simulation": [
  177. {
  178. "name": "end_condition",
  179. "type": "code",
  180. "default": ""
  181. }
  182. ],
  183. "InternalTransition": [
  184. {
  185. "name": "condition",
  186. "type": "code",
  187. "default": ""
  188. },
  189. {
  190. "name": "action",
  191. "type": "code",
  192. "default": ""
  193. }
  194. ],
  195. "ExternalTransition": [
  196. {
  197. "name": "condition",
  198. "type": "code",
  199. "default": ""
  200. },
  201. {
  202. "name": "action",
  203. "type": "code",
  204. "default": ""
  205. }
  206. ],
  207. "ports": [],
  208. "AtomicDEVS": [
  209. {
  210. "name": "name",
  211. "type": "string",
  212. "default": ""
  213. },
  214. {
  215. "name": "attributes",
  216. "type": "list<$ATTRIBUTE>",
  217. "default": []
  218. },
  219. {
  220. "name": "parameters",
  221. "type": "list<$ARG>",
  222. "default": []
  223. },
  224. {
  225. "name": "__init__",
  226. "type": "code",
  227. "default": ""
  228. },
  229. {
  230. "name": "position",
  231. "type": "list<int>",
  232. "default": [
  233. 0,
  234. 0
  235. ]
  236. },
  237. {
  238. "name": "scale",
  239. "type": "list<int>",
  240. "default": [
  241. 0,
  242. 0
  243. ]
  244. }
  245. ],
  246. "states": [],
  247. "channel": [
  248. {
  249. "name": "transfer_function",
  250. "type": "code",
  251. "default": ""
  252. }
  253. ],
  254. "StateDefinition": [
  255. {
  256. "name": "name",
  257. "type": "string",
  258. "default": ""
  259. },
  260. {
  261. "name": "attributes",
  262. "type": "list<$ATTRIBUTE>",
  263. "default": []
  264. },
  265. {
  266. "name": "parameters",
  267. "type": "list<$ARG>",
  268. "default": []
  269. },
  270. {
  271. "name": "initial_binding",
  272. "type": "list<map<[name,val],[string,string]>>",
  273. "default": []
  274. },
  275. {
  276. "name": "__init__",
  277. "type": "code",
  278. "default": ""
  279. }
  280. ],
  281. "statedef": [],
  282. "ConfluentTransition": [
  283. {
  284. "name": "condition",
  285. "type": "code",
  286. "default": ""
  287. },
  288. {
  289. "name": "action",
  290. "type": "code",
  291. "default": ""
  292. }
  293. ],
  294. "DevsInstance": [
  295. {
  296. "name": "name",
  297. "type": "string",
  298. "default": ""
  299. },
  300. {
  301. "name": "devs_type",
  302. "type": "string",
  303. "default": ""
  304. },
  305. {
  306. "name": "parameter_binding",
  307. "type": "list<map<[name,val],[string,string]>>",
  308. "default": []
  309. },
  310. {
  311. "name": "position",
  312. "type": "list<int>",
  313. "default": [
  314. 0,
  315. 0
  316. ]
  317. },
  318. {
  319. "name": "scale",
  320. "type": "list<int>",
  321. "default": [
  322. 0,
  323. 0
  324. ]
  325. }
  326. ],
  327. "submodels": []
  328. },
  329. "constraints": [
  330. {
  331. "name": "noAbstractInstances",
  332. "event": "pre-create",
  333. "code": "false",
  334. "targetType": "BaseDEVS"
  335. },
  336. {
  337. "name": "noAbstractInstances",
  338. "event": "pre-create",
  339. "code": "false",
  340. "targetType": "Port"
  341. }
  342. ],
  343. "actions": [
  344. {
  345. "name": "snapToTarget",
  346. "event": "post-connect",
  347. "code": "/*newline*/var neighborLinks = getNeighbors('*'),/*newline*/ neighborLink = undefined,/*newline*/ to_change = true;/*newline*/if (neighborLinks.length > 0) {/*newline*/ for (var i in neighborLinks) {/*newline*/ if (getAttr('$type', neighborLinks[i]).match(/ports/)) {/*newline*/ neighborLink = neighborLinks[i];/*newline*/ } else if (getAttr('$type', neighborLinks[i]).match(/channel/)) {/*newline*/ to_change = false;/*newline*/ }/*newline*/ }/*newline*/}/*newline*/if ( neighborLink ) {/*newline*/ var neighbor = getNeighbors('<', '*', neighborLink)[0],/*newline*/ npos = getAttr('position', neighbor),/*newline*/ nscale = getAttr('scale', neighbor),/*newline*/ mypos = getAttr('position'),/*newline*/ newpos = mypos;/*newline*/ if (!to_change) {/*newline*/ newpos = mypos;/*newline*/ } else if (mypos[1] > npos[1] + (250 * nscale[1])) {/*newline*/ newpos[1] = npos[1] + (250 * nscale[1]);/*newline*/ if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]) - 50;/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0] + 50;/*newline*/ }/*newline*/ } else if (mypos[1] < npos[1]) {/*newline*/ newpos[1] = npos[1];/*newline*/ if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]) - 50;/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0] + 50;/*newline*/ }/*newline*/ } else if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]);/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0];/*newline*/ }/*newline*/ if (to_change) {/*newline*/ newpos = [newpos[0] - nscale[0] * (2 + nscale[0]), newpos[1] + nscale[1] * (19 + nscale[1])];/*newline*/ }/*newline*/ setAttr('position', newpos);/*newline*/}",
  348. "targetType": "Port"
  349. },
  350. {
  351. "name": "snapToTarget",
  352. "event": "post-connect",
  353. "code": "/*newline*/var neighborLinks = getNeighbors('*'),/*newline*/ neighborLink = undefined,/*newline*/ to_change = true;/*newline*/if (neighborLinks.length > 0) {/*newline*/ for (var i in neighborLinks) {/*newline*/ if (getAttr('$type', neighborLinks[i]).match(/ports/)) {/*newline*/ neighborLink = neighborLinks[i];/*newline*/ } else if (getAttr('$type', neighborLinks[i]).match(/channel/)) {/*newline*/ to_change = false;/*newline*/ }/*newline*/ }/*newline*/}/*newline*/if ( neighborLink ) {/*newline*/ var neighbor = getNeighbors('<', '*', neighborLink)[0],/*newline*/ npos = getAttr('position', neighbor),/*newline*/ nscale = getAttr('scale', neighbor),/*newline*/ mypos = getAttr('position'),/*newline*/ newpos = mypos;/*newline*/ if (!to_change) {/*newline*/ newpos = mypos;/*newline*/ } else if (mypos[1] > npos[1] + (250 * nscale[1])) {/*newline*/ newpos[1] = npos[1] + (250 * nscale[1]);/*newline*/ if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]) - 50;/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0] + 50;/*newline*/ }/*newline*/ } else if (mypos[1] < npos[1]) {/*newline*/ newpos[1] = npos[1];/*newline*/ if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]) - 50;/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0] + 50;/*newline*/ }/*newline*/ } else if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]);/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0];/*newline*/ }/*newline*/ if (to_change) {/*newline*/ newpos = [newpos[0] - nscale[0] * (2 + nscale[0]), newpos[1] + nscale[1] * (19 + nscale[1])];/*newline*/ }/*newline*/ setAttr('position', newpos);/*newline*/}",
  354. "targetType": "InputPort"
  355. },
  356. {
  357. "name": "snapToTarget",
  358. "event": "post-connect",
  359. "code": "/*newline*/var neighborLinks = getNeighbors('*'),/*newline*/ neighborLink = undefined,/*newline*/ to_change = true;/*newline*/if (neighborLinks.length > 0) {/*newline*/ for (var i in neighborLinks) {/*newline*/ if (getAttr('$type', neighborLinks[i]).match(/ports/)) {/*newline*/ neighborLink = neighborLinks[i];/*newline*/ } else if (getAttr('$type', neighborLinks[i]).match(/channel/)) {/*newline*/ to_change = false;/*newline*/ }/*newline*/ }/*newline*/}/*newline*/if ( neighborLink ) {/*newline*/ var neighbor = getNeighbors('<', '*', neighborLink)[0],/*newline*/ npos = getAttr('position', neighbor),/*newline*/ nscale = getAttr('scale', neighbor),/*newline*/ mypos = getAttr('position'),/*newline*/ newpos = mypos;/*newline*/ if (!to_change) {/*newline*/ newpos = mypos;/*newline*/ } else if (mypos[1] > npos[1] + (250 * nscale[1])) {/*newline*/ newpos[1] = npos[1] + (250 * nscale[1]);/*newline*/ if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]) - 50;/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0] + 50;/*newline*/ }/*newline*/ } else if (mypos[1] < npos[1]) {/*newline*/ newpos[1] = npos[1];/*newline*/ if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]) - 50;/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0] + 50;/*newline*/ }/*newline*/ } else if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]);/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0];/*newline*/ }/*newline*/ if (to_change) {/*newline*/ newpos = [newpos[0] - nscale[0] * (2 + nscale[0]), newpos[1] + nscale[1] * (19 + nscale[1])];/*newline*/ }/*newline*/ setAttr('position', newpos);/*newline*/}",
  360. "targetType": "OutputPort"
  361. },
  362. {
  363. "name": "snapToTarget",
  364. "event": "post-connect",
  365. "code": "/*newline*/var neighborLinks = getNeighbors('*'),/*newline*/ neighborLink = undefined,/*newline*/ to_change = true;/*newline*/if (neighborLinks.length > 0) {/*newline*/ for (var i in neighborLinks) {/*newline*/ if (getAttr('$type', neighborLinks[i]).match(/ports/)) {/*newline*/ neighborLink = neighborLinks[i];/*newline*/ } else if (getAttr('$type', neighborLinks[i]).match(/channel/)) {/*newline*/ to_change = false;/*newline*/ }/*newline*/ }/*newline*/}/*newline*/if ( neighborLink ) {/*newline*/ var neighbor = getNeighbors('<', '*', neighborLink)[0],/*newline*/ npos = getAttr('position', neighbor),/*newline*/ nscale = getAttr('scale', neighbor),/*newline*/ mypos = getAttr('position'),/*newline*/ newpos = mypos;/*newline*/ if (!to_change) {/*newline*/ newpos = mypos;/*newline*/ } else if (mypos[1] > npos[1] + (250 * nscale[1])) {/*newline*/ newpos[1] = npos[1] + (250 * nscale[1]);/*newline*/ if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]) - 50;/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0] + 50;/*newline*/ }/*newline*/ } else if (mypos[1] < npos[1]) {/*newline*/ newpos[1] = npos[1];/*newline*/ if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]) - 50;/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0] + 50;/*newline*/ }/*newline*/ } else if (mypos[0] > npos[0] + (250 * nscale[0])) {/*newline*/ newpos[0] = npos[0] + (250 * nscale[0]);/*newline*/ } else if (mypos[0] < npos[0]) {/*newline*/ newpos[0] = npos[0];/*newline*/ }/*newline*/ if (to_change) {/*newline*/ newpos = [newpos[0] - nscale[0] * (2 + nscale[0]), newpos[1] + nscale[1] * (19 + nscale[1])];/*newline*/ }/*newline*/ setAttr('position', newpos);/*newline*/}",
  366. "targetType": "DevsInstance"
  367. }
  368. ],
  369. "cardinalities": {
  370. "State": [
  371. {
  372. "dir": "in",
  373. "type": "states",
  374. "min": "1",
  375. "max": "1"
  376. },
  377. {
  378. "dir": "out",
  379. "type": "InternalTransition",
  380. "min": "0",
  381. "max": "Infinity"
  382. },
  383. {
  384. "dir": "in",
  385. "type": "InternalTransition",
  386. "min": "0",
  387. "max": "Infinity"
  388. },
  389. {
  390. "dir": "out",
  391. "type": "ExternalTransition",
  392. "min": "0",
  393. "max": "Infinity"
  394. },
  395. {
  396. "dir": "in",
  397. "type": "ExternalTransition",
  398. "min": "0",
  399. "max": "Infinity"
  400. },
  401. {
  402. "dir": "out",
  403. "type": "ConfluentTransition",
  404. "min": "0",
  405. "max": "Infinity"
  406. },
  407. {
  408. "dir": "in",
  409. "type": "ConfluentTransition",
  410. "min": "0",
  411. "max": "Infinity"
  412. }
  413. ],
  414. "BaseDEVS": [
  415. {
  416. "dir": "out",
  417. "type": "ports",
  418. "min": "0",
  419. "max": "Infinity"
  420. }
  421. ],
  422. "CoupledDEVS": [
  423. {
  424. "dir": "out",
  425. "type": "submodels",
  426. "min": "0",
  427. "max": "Infinity"
  428. },
  429. {
  430. "dir": "out",
  431. "type": "ports",
  432. "min": "0",
  433. "max": "Infinity"
  434. }
  435. ],
  436. "Event": [],
  437. "Port": [
  438. {
  439. "dir": "in",
  440. "type": "ports",
  441. "min": "1",
  442. "max": "1"
  443. },
  444. {
  445. "dir": "in",
  446. "type": "channel",
  447. "min": "0",
  448. "max": "*"
  449. },
  450. {
  451. "dir": "out",
  452. "type": "channel",
  453. "min": "0",
  454. "max": "*"
  455. }
  456. ],
  457. "InputPort": [
  458. {
  459. "dir": "in",
  460. "type": "ports",
  461. "min": "1",
  462. "max": "1"
  463. },
  464. {
  465. "dir": "in",
  466. "type": "channel",
  467. "min": "0",
  468. "max": "*"
  469. },
  470. {
  471. "dir": "out",
  472. "type": "channel",
  473. "min": "0",
  474. "max": "*"
  475. }
  476. ],
  477. "OutputPort": [
  478. {
  479. "dir": "in",
  480. "type": "ports",
  481. "min": "1",
  482. "max": "1"
  483. },
  484. {
  485. "dir": "in",
  486. "type": "channel",
  487. "min": "0",
  488. "max": "*"
  489. },
  490. {
  491. "dir": "out",
  492. "type": "channel",
  493. "min": "0",
  494. "max": "*"
  495. }
  496. ],
  497. "Simulation": [],
  498. "InternalTransition": [
  499. {
  500. "dir": "in",
  501. "type": "State",
  502. "min": "0",
  503. "max": "1"
  504. },
  505. {
  506. "dir": "out",
  507. "type": "State",
  508. "min": "0",
  509. "max": "1"
  510. }
  511. ],
  512. "ExternalTransition": [
  513. {
  514. "dir": "in",
  515. "type": "State",
  516. "min": "0",
  517. "max": "1"
  518. },
  519. {
  520. "dir": "out",
  521. "type": "State",
  522. "min": "0",
  523. "max": "1"
  524. }
  525. ],
  526. "ports": [
  527. {
  528. "dir": "in",
  529. "type": "BaseDEVS",
  530. "min": "0",
  531. "max": "1"
  532. },
  533. {
  534. "dir": "out",
  535. "type": "Port",
  536. "min": "0",
  537. "max": "1"
  538. },
  539. {
  540. "dir": "in",
  541. "type": "DevsInstance",
  542. "min": "0",
  543. "max": "1"
  544. },
  545. {
  546. "dir": "in",
  547. "type": "CoupledDEVS",
  548. "min": "0",
  549. "max": "1"
  550. },
  551. {
  552. "dir": "out",
  553. "type": "InputPort",
  554. "min": "0",
  555. "max": "1"
  556. },
  557. {
  558. "dir": "out",
  559. "type": "OutputPort",
  560. "min": "0",
  561. "max": "1"
  562. },
  563. {
  564. "dir": "in",
  565. "type": "AtomicDEVS",
  566. "min": "0",
  567. "max": "1"
  568. }
  569. ],
  570. "AtomicDEVS": [
  571. {
  572. "dir": "out",
  573. "type": "statedef",
  574. "min": "1",
  575. "max": "1"
  576. },
  577. {
  578. "dir": "out",
  579. "type": "states",
  580. "min": "0",
  581. "max": "Infinity"
  582. },
  583. {
  584. "dir": "out",
  585. "type": "ports",
  586. "min": "0",
  587. "max": "Infinity"
  588. }
  589. ],
  590. "states": [
  591. {
  592. "dir": "in",
  593. "type": "AtomicDEVS",
  594. "min": "0",
  595. "max": "1"
  596. },
  597. {
  598. "dir": "out",
  599. "type": "State",
  600. "min": "0",
  601. "max": "1"
  602. }
  603. ],
  604. "channel": [
  605. {
  606. "dir": "in",
  607. "type": "Port",
  608. "min": "0",
  609. "max": "1"
  610. },
  611. {
  612. "dir": "out",
  613. "type": "Port",
  614. "min": "0",
  615. "max": "1"
  616. },
  617. {
  618. "dir": "in",
  619. "type": "InputPort",
  620. "min": "0",
  621. "max": "1"
  622. },
  623. {
  624. "dir": "out",
  625. "type": "InputPort",
  626. "min": "0",
  627. "max": "1"
  628. },
  629. {
  630. "dir": "in",
  631. "type": "OutputPort",
  632. "min": "0",
  633. "max": "1"
  634. },
  635. {
  636. "dir": "out",
  637. "type": "OutputPort",
  638. "min": "0",
  639. "max": "1"
  640. }
  641. ],
  642. "StateDefinition": [
  643. {
  644. "dir": "in",
  645. "type": "statedef",
  646. "min": "0",
  647. "max": "Infinity"
  648. }
  649. ],
  650. "statedef": [
  651. {
  652. "dir": "in",
  653. "type": "AtomicDEVS",
  654. "min": "0",
  655. "max": "1"
  656. },
  657. {
  658. "dir": "out",
  659. "type": "StateDefinition",
  660. "min": "0",
  661. "max": "1"
  662. }
  663. ],
  664. "ConfluentTransition": [
  665. {
  666. "dir": "in",
  667. "type": "State",
  668. "min": "0",
  669. "max": "1"
  670. },
  671. {
  672. "dir": "out",
  673. "type": "State",
  674. "min": "0",
  675. "max": "1"
  676. }
  677. ],
  678. "DevsInstance": [
  679. {
  680. "dir": "in",
  681. "type": "submodels",
  682. "min": "1",
  683. "max": "1"
  684. },
  685. {
  686. "dir": "out",
  687. "type": "ports",
  688. "min": "0",
  689. "max": "Infinity"
  690. }
  691. ],
  692. "submodels": [
  693. {
  694. "dir": "in",
  695. "type": "CoupledDEVS",
  696. "min": "0",
  697. "max": "1"
  698. },
  699. {
  700. "dir": "out",
  701. "type": "DevsInstance",
  702. "min": "0",
  703. "max": "1"
  704. }
  705. ]
  706. },
  707. "legalConnections": {
  708. "State": {
  709. "State": [
  710. "InternalTransition",
  711. "ExternalTransition",
  712. "ConfluentTransition"
  713. ]
  714. },
  715. "BaseDEVS": {
  716. "Port": [
  717. "ports"
  718. ],
  719. "InputPort": [
  720. "ports"
  721. ],
  722. "OutputPort": [
  723. "ports"
  724. ]
  725. },
  726. "CoupledDEVS": {
  727. "DevsInstance": [
  728. "submodels"
  729. ],
  730. "Port": [
  731. "ports"
  732. ],
  733. "InputPort": [
  734. "ports"
  735. ],
  736. "OutputPort": [
  737. "ports"
  738. ]
  739. },
  740. "Port": {
  741. "Port": [
  742. "channel"
  743. ],
  744. "InputPort": [
  745. "channel"
  746. ],
  747. "OutputPort": [
  748. "channel"
  749. ]
  750. },
  751. "InputPort": {
  752. "Port": [
  753. "channel"
  754. ],
  755. "InputPort": [
  756. "channel"
  757. ],
  758. "OutputPort": [
  759. "channel"
  760. ]
  761. },
  762. "OutputPort": {
  763. "Port": [
  764. "channel"
  765. ],
  766. "InputPort": [
  767. "channel"
  768. ],
  769. "OutputPort": [
  770. "channel"
  771. ]
  772. },
  773. "AtomicDEVS": {
  774. "StateDefinition": [
  775. "statedef"
  776. ],
  777. "State": [
  778. "states"
  779. ],
  780. "Port": [
  781. "ports"
  782. ],
  783. "InputPort": [
  784. "ports"
  785. ],
  786. "OutputPort": [
  787. "ports"
  788. ]
  789. },
  790. "DevsInstance": {
  791. "Port": [
  792. "ports"
  793. ],
  794. "InputPort": [
  795. "ports"
  796. ],
  797. "OutputPort": [
  798. "ports"
  799. ]
  800. }
  801. },
  802. "connectorTypes": {
  803. "InternalTransition": "visual",
  804. "ExternalTransition": "visual",
  805. "ports": "visual",
  806. "states": "containment",
  807. "channel": "visual",
  808. "statedef": "visual",
  809. "ConfluentTransition": "visual",
  810. "submodels": "containment"
  811. },
  812. "types2parentTypes": {
  813. "State": [],
  814. "BaseDEVS": [],
  815. "CoupledDEVS": [
  816. "BaseDEVS"
  817. ],
  818. "Event": [],
  819. "Port": [],
  820. "InputPort": [
  821. "Port"
  822. ],
  823. "OutputPort": [
  824. "Port"
  825. ],
  826. "Simulation": [],
  827. "InternalTransition": [],
  828. "ExternalTransition": [],
  829. "ports": [],
  830. "AtomicDEVS": [
  831. "BaseDEVS"
  832. ],
  833. "states": [],
  834. "channel": [],
  835. "StateDefinition": [],
  836. "statedef": [],
  837. "ConfluentTransition": [],
  838. "DevsInstance": [],
  839. "submodels": []
  840. }
  841. }