|
@@ -92,7 +92,7 @@ Void function strongconnect(v : String, values : Element):
|
|
|
|
|
|
dict_overwrite(values["indices"], v, values["index"])
|
|
|
dict_overwrite(values["lowlink"], v, values["index"])
|
|
|
- dict_overwrite(values, "index", cast_s2i(cast_v2s(values["index"])) + 1)
|
|
|
+ dict_overwrite(values, "index", cast_integer(values["index"]) + 1)
|
|
|
|
|
|
list_append(values["S"], v)
|
|
|
dict_overwrite(values["onStack"], v, True)
|
|
@@ -207,10 +207,10 @@ Boolean function solve_scc(model : Element, scc : Element):
|
|
|
else:
|
|
|
// A constant, which we can assume is already computed and thus usable
|
|
|
if (blocktype == "AdditionBlock"):
|
|
|
- constant = constant + v2f(read_attribute(model, selected, "signal"))
|
|
|
+ constant = constant + cast_float(read_attribute(model, selected, "signal"))
|
|
|
dict_overwrite(m[i], read_nr_out(scc), constant)
|
|
|
elif (blocktype == "MultiplyBlock"):
|
|
|
- constant = constant * v2f(read_attribute(model, selected, "signal"))
|
|
|
+ constant = constant * cast_float(read_attribute(model, selected, "signal"))
|
|
|
// Not written to constant part, as multiplies a variable
|
|
|
|
|
|
// Any other block is impossible:
|
|
@@ -238,7 +238,7 @@ Boolean function solve_scc(model : Element, scc : Element):
|
|
|
block = scc[i]
|
|
|
unset_attribute(model, block, "signal")
|
|
|
instantiate_attribute(model, block, "signal", m[i][read_nr_out(scc)])
|
|
|
- log((("Solved " + block) + " to ") + cast_v2s(m[i][read_nr_out(scc)]))
|
|
|
+ log((("Solved " + block) + " to ") + cast_string(m[i][read_nr_out(scc)]))
|
|
|
i = i + 1
|
|
|
|
|
|
return True!
|
|
@@ -270,7 +270,7 @@ Void function step_simulation(model : Element, schedule : Element):
|
|
|
delta_t = 0.1
|
|
|
|
|
|
memory_blocks = create_node()
|
|
|
- output("SIM_TIME " + cast_v2s(read_attribute(model, time, "current_time")))
|
|
|
+ output("SIM_TIME " + cast_string(read_attribute(model, time, "current_time")))
|
|
|
i = 0
|
|
|
while (i < read_nr_out(schedule)):
|
|
|
scc = list_read(schedule, i)
|
|
@@ -293,25 +293,25 @@ Void function step_simulation(model : Element, schedule : Element):
|
|
|
incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = signal + cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ signal = signal + cast_float(read_attribute(model, selected, "signal"))
|
|
|
elif (blocktype == "MultiplyBlock"):
|
|
|
signal = 1.0
|
|
|
incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = signal * cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ signal = signal * cast_float(read_attribute(model, selected, "signal"))
|
|
|
elif (blocktype == "NegatorBlock"):
|
|
|
incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
signal = 0.0
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = float_neg(cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))))
|
|
|
+ signal = float_neg(cast_float(read_attribute(model, selected, "signal")))
|
|
|
elif (blocktype == "InverseBlock"):
|
|
|
signal = 0.0
|
|
|
incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = float_division(1.0, cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))))
|
|
|
+ signal = float_division(1.0, cast_float(read_attribute(model, selected, "signal")))
|
|
|
elif (blocktype == "DelayBlock"):
|
|
|
signal = 0.0
|
|
|
if (element_eq(read_attribute(model, block, "last_in"), read_root())):
|
|
@@ -319,7 +319,7 @@ Void function step_simulation(model : Element, schedule : Element):
|
|
|
incoming = allIncomingAssociationInstances(model, block, "InitialCondition")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ signal = cast_float(read_attribute(model, selected, "signal"))
|
|
|
else:
|
|
|
signal = read_attribute(model, block, "last_in")
|
|
|
unset_attribute(model, block, "last_in")
|
|
@@ -330,9 +330,9 @@ Void function step_simulation(model : Element, schedule : Element):
|
|
|
incoming = allIncomingAssociationInstances(model, block, "InitialCondition")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ signal = cast_float(read_attribute(model, selected, "signal"))
|
|
|
else:
|
|
|
- signal = cast_s2f(cast_v2s(read_attribute(model, block, "last_in"))) + (delta_t * cast_s2f(cast_v2s(read_attribute(model, block, "last_out"))))
|
|
|
+ signal = cast_float(read_attribute(model, block, "last_in")) + (delta_t * cast_float(read_attribute(model, block, "last_out")))
|
|
|
unset_attribute(model, block, "last_in")
|
|
|
unset_attribute(model, block, "last_out")
|
|
|
instantiate_attribute(model, block, "last_out", signal)
|
|
@@ -343,20 +343,20 @@ Void function step_simulation(model : Element, schedule : Element):
|
|
|
incoming = allIncomingAssociationInstances(model, block, "InitialCondition")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ signal = cast_float(read_attribute(model, selected, "signal"))
|
|
|
else:
|
|
|
incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = (cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))) - cast_s2f(cast_v2s(read_attribute(model, block, "last_in")))) / delta_t
|
|
|
+ signal = (cast_float(read_attribute(model, selected, "signal")) - cast_float(read_attribute(model, block, "last_in"))) / delta_t
|
|
|
unset_attribute(model, block, "last_in")
|
|
|
set_add(memory_blocks, block)
|
|
|
elif (blocktype == "ProbeBlock"):
|
|
|
incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
- output((("SIM_PROBE " + cast_v2s(read_attribute(model, block, "name"))) + " ") + cast_v2s(signal))
|
|
|
+ signal = cast_float(read_attribute(model, selected, "signal"))
|
|
|
+ output((("SIM_PROBE " + cast_string(read_attribute(model, block, "name"))) + " ") + cast_string(signal))
|
|
|
|
|
|
unset_attribute(model, block, "signal")
|
|
|
instantiate_attribute(model, block, "signal", signal)
|
|
@@ -368,19 +368,16 @@ Void function step_simulation(model : Element, schedule : Element):
|
|
|
incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- instantiate_attribute(model, block, "last_in", cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))))
|
|
|
+ instantiate_attribute(model, block, "last_in", cast_float(read_attribute(model, selected, "signal")))
|
|
|
|
|
|
// Increase simulation time
|
|
|
Float new_time
|
|
|
- new_time = cast_s2f(cast_v2s(read_attribute(model, time, "current_time"))) + delta_t
|
|
|
+ new_time = cast_float(read_attribute(model, time, "current_time")) + delta_t
|
|
|
unset_attribute(model, time, "current_time")
|
|
|
instantiate_attribute(model, time, "current_time", new_time)
|
|
|
|
|
|
return !
|
|
|
|
|
|
-Float function v2f(i : Element):
|
|
|
- return cast_s2f(cast_v2s(i))!
|
|
|
-
|
|
|
Void function eliminateGaussJordan(m : Element):
|
|
|
Integer i
|
|
|
Integer j
|
|
@@ -395,7 +392,7 @@ Void function eliminateGaussJordan(m : Element):
|
|
|
|
|
|
while (i < read_nr_out(m)):
|
|
|
// Make sure pivot m[i][j] != 0, swapping if necessary
|
|
|
- while (v2f(m[i][j]) == 0.0):
|
|
|
+ while (cast_float(m[i][j]) == 0.0):
|
|
|
// Is zero, so find row which is not zero
|
|
|
f = i + 1
|
|
|
searching = True
|
|
@@ -405,13 +402,13 @@ Void function eliminateGaussJordan(m : Element):
|
|
|
searching = False
|
|
|
j = j + 1
|
|
|
else:
|
|
|
- if (v2f(m[f][j]) == 0.0):
|
|
|
+ if (cast_float(m[f][j]) == 0.0):
|
|
|
// Also zero, so continue
|
|
|
f = f + 1
|
|
|
else:
|
|
|
// Found non-zero, so swap row
|
|
|
- t = v2f(m[f])
|
|
|
- dict_overwrite(m, f, v2f(m[i]))
|
|
|
+ t = cast_float(m[f])
|
|
|
+ dict_overwrite(m, f, cast_float(m[i]))
|
|
|
dict_overwrite(m, i, t)
|
|
|
searching = False
|
|
|
// If we have increased j, we will just start the loop again (possibly), as m[i][j] might be zero again
|
|
@@ -419,9 +416,9 @@ Void function eliminateGaussJordan(m : Element):
|
|
|
// Pivot in m[i][j] guaranteed to not be 0
|
|
|
// Now divide complete row by value of m[i][j] to make it equal 1
|
|
|
f = j
|
|
|
- divisor = v2f(m[i][j])
|
|
|
+ divisor = cast_float(m[i][j])
|
|
|
while (f < read_nr_out(m[i])):
|
|
|
- dict_overwrite(m[i], f, float_division(v2f(m[i][f]), divisor))
|
|
|
+ dict_overwrite(m[i], f, float_division(cast_float(m[i][f]), divisor))
|
|
|
f = f + 1
|
|
|
|
|
|
// Eliminate all rows in the j-th column, except the i-th row
|
|
@@ -429,9 +426,9 @@ Void function eliminateGaussJordan(m : Element):
|
|
|
while (f < read_nr_out(m)):
|
|
|
if (bool_not(f == i)):
|
|
|
g = j
|
|
|
- divisor = v2f(m[f][j])
|
|
|
+ divisor = cast_float(m[f][j])
|
|
|
while (g < read_nr_out(m[f])):
|
|
|
- dict_overwrite(m[f], g, v2f(m[f][g]) - (divisor * v2f(m[i][g])))
|
|
|
+ dict_overwrite(m[f], g, cast_float(m[f][g]) - (divisor * cast_float(m[i][g])))
|
|
|
g = g + 1
|
|
|
f = f + 1
|
|
|
|
|
@@ -451,8 +448,7 @@ String function matrix2string(m : Element):
|
|
|
while (i < read_nr_out(m)):
|
|
|
j = 0
|
|
|
while (j < read_nr_out(m[i])):
|
|
|
- result = result + cast_v2s(m[i][j])
|
|
|
- result = result + ", "
|
|
|
+ result = result + cast_string(m[i][j]) + ", "
|
|
|
j = j + 1
|
|
|
i = i + 1
|
|
|
result = result + "\n"
|