Changeset 3b96b9d9 in OpenModelica
- Timestamp:
- 2021-11-24T14:12:51+01:00 (2 years ago)
- Parents:
- 7c3ddb9c
- git-author:
- Per Östlund <perost86@…> (11/24/21 12:52:33)
- git-committer:
- Per Östlund <perost86@…> (11/24/21 14:12:51)
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
OMCompiler/Compiler/NFFrontEnd/NFFlatten.mo
r9f0cb452 r3b96b9d9 137 137 end FlattenSettings; 138 138 139 constant ComponentRef EMPTY_PREFIX = ComponentRef.EMPTY(); 140 139 141 function flatten 140 142 input InstNode classInst; … … 165 167 deleted_vars := UnorderedSet.new(ComponentRef.hash, ComponentRef.isEqual); 166 168 167 (vars, sections) := flattenClass(InstNode.getClass(classInst), ComponentRef.EMPTY(),169 (vars, sections) := flattenClass(InstNode.getClass(classInst), EMPTY_PREFIX, 168 170 Visibility.PUBLIC, NONE(), {}, sections, deleted_vars, settings); 169 171 vars := listReverseInPlace(vars); … … 737 739 algorithm 738 740 for eqn in listReverse(sects.equations) loop 739 sections := Sections.prependEquation(vectorizeEquation(eqn, dimensions, prefix ), sections);741 sections := Sections.prependEquation(vectorizeEquation(eqn, dimensions, prefix, settings), sections); 740 742 end for; 741 743 for eqn in listReverse(sects.initialEquations) loop 742 sections := Sections.prependEquation(vectorizeEquation(eqn, dimensions, prefix ), sections, true);744 sections := Sections.prependEquation(vectorizeEquation(eqn, dimensions, prefix, settings), sections, true); 743 745 end for; 744 746 for alg in listReverse(sects.algorithms) loop … … 753 755 754 756 function vectorizeEquation 755 input Equation eqn;757 input output Equation eqn; 756 758 input list<Dimension> dimensions; 757 759 input ComponentRef prefix; 758 output Equation veqn; 759 algorithm 760 veqn := match eqn 760 input FlattenSettings settings; 761 algorithm 762 // Flatten with an empty prefix to get rid of any split indices. 763 {eqn} := flattenEquation(eqn, EMPTY_PREFIX, {}, settings); 764 765 eqn := match eqn 761 766 local 762 767 InstNode iter; … … 776 781 (iters, ranges, subs) := makeIterators(prefix, dimensions); 777 782 subs := listReverseInPlace(subs); 778 veqn := Equation.mapExp(eqn, function addIterator(prefix = prefix, subscripts = subs));783 eqn := Equation.mapExp(eqn, function addIterator(prefix = prefix, subscripts = subs)); 779 784 src := Equation.source(eqn); 780 785 781 786 iter :: iters := iters; 782 787 range :: ranges := ranges; 783 veqn := Equation.FOR(iter, SOME(range), {veqn}, src);788 eqn := Equation.FOR(iter, SOME(range), {eqn}, src); 784 789 785 790 while not listEmpty(iters) loop 786 791 iter :: iters := iters; 787 792 range :: ranges := ranges; 788 veqn := Equation.FOR(iter, SOME(range), {veqn}, src);793 eqn := Equation.FOR(iter, SOME(range), {eqn}, src); 789 794 end while; 790 795 then 791 veqn;796 eqn; 792 797 793 798 end match; … … 795 800 796 801 function vectorizeAlgorithm 797 input Algorithm alg;802 input output Algorithm alg; 798 803 input list<Dimension> dimensions; 799 804 input ComponentRef prefix; 800 output Algorithm valg; 801 algorithm 802 valg := match alg 805 algorithm 806 // Flatten with an empty prefix to get rid of any split indices. 807 alg.statements := flattenStatements(alg.statements, EMPTY_PREFIX); 808 809 alg := match alg 803 810 local 804 811 InstNode iter; … … 1201 1208 algorithm 1202 1209 if settings.arrayConnect then 1210 eq.body := flattenEquations(eq.body, EMPTY_PREFIX, settings); 1203 1211 eql := eq :: equations; 1204 1212 elseif not settings.scalarize then … … 1423 1431 algorithm 1424 1432 Equation.FOR(iter, range, body, src) := forLoop; 1433 body := flattenEquations(body, EMPTY_PREFIX, settings); 1425 1434 (connects, non_connects) := splitForLoop2(body); 1426 1435 -
testsuite/flattening/modelica/scodeinst/ArrayConnect3.mo
ra197fa55 r3b96b9d9 57 57 // Real[1000, 100] cells.l.e; 58 58 // equation 59 // for $i1 in 2:1000 loop 60 // for $i2 in 1:99 loop 61 // cells[$i1,$i2].u.e = cells[$i1 - 1,$i2].d.e; 62 // end for; 63 // end for; 64 // for $i1 in 1:999 loop 65 // for $i2 in 1:99 loop 66 // cells[$i1,$i2].d.f + cells[$i1 + 1,$i2].u.f = 0.0; 67 // end for; 68 // end for; 59 69 // for $i1 in 1:999 loop 60 70 // for $i2 in 2:100 loop … … 67 77 // end for; 68 78 // end for; 69 // for $i1 in 2:1000 loop70 // for $i2 in 1:99 loop71 // cells[$i1,$i2].u.e = cells[$i1 - 1,$i2].d.e;72 // end for;73 // end for;74 // for $i1 in 1:999 loop75 // for $i2 in 1:99 loop76 // cells[$i1,$i2].d.f + cells[$i1 + 1,$i2].u.f = 0.0;77 // end for;78 // end for;79 79 // for $i1 in 1:1000 loop 80 80 // cells[$i1,1].l.e = cells[$i1,100].r.e; … … 84 84 // end for; 85 85 // for $i2 in 1:100 loop 86 // cells[1000,$i2].d.e = S.n.e; 87 // end for; 88 // sum(cells[1000,:].d.f) + S.n.f = 0.0; 89 // for $i2 in 1:100 loop 86 90 // cells[1,$i2].u.e = S.p.e; 87 91 // end for; 88 92 // sum(cells[1,:].u.f) + S.p.f = 0.0; 89 // for $i2 in 1:100 loop90 // cells[1000,$i2].d.e = S.n.e;91 // end for;92 // sum(cells[1000,:].d.f) + S.n.f = 0.0;93 93 // for $i1 in 1:999 loop 94 94 // cells[$i1,100].d.f = 0.0; -
testsuite/flattening/modelica/scodeinst/PrintRecordTypes1.mo
rd8aa7d6 r3b96b9d9 46 46 // equation 47 47 // for i in 1:100 loop 48 // b[i].c[10] = R2(R1(1.0, 0.0), R1(/*Real*/(i), 1.0)); 48 49 // b[i].c[1].rb = R1(/*Real*/(i), 0.0); 49 // b[i].c[10] = R2(R1(1.0, 0.0), R1(/*Real*/(i), 1.0));50 50 // end for; 51 51 // end PrintRecordTypes1;
Note: See TracChangeset
for help on using the changeset viewer.