Opened 11 years ago

Last modified 6 years ago

#2387 assigned defect

Operator overloading fails for matrices

Reported by: Per Östlund Owned by: Per Östlund
Priority: high Milestone: 2.0.0
Component: New Instantiation Version: trunk
Keywords: Cc:

Description

There seems to be some issues when trying to use overloaded operators with matrices. For example this model:

operator record Complex
  Real re;
  Real im;

  encapsulated operator 'constructor'
    function fromReal
      import Complex;
      input Real re;
      input Real im = 0;
      output Complex result(re = re, im = im);
    end fromReal;
  end 'constructor';

  encapsulated operator '*'
    function multiply
      import Complex;
      input Complex c1;
      input Complex c2;
      output Complex c3;
    algorithm
      c3 := Complex(c1.re*c2.re - c1.im*c2.im, c1.re*c2.im + c1.im*c2.re);
    end multiply;

    function scalarProduct
      import Complex;
      input Complex c1[:];
      input Complex c2[size(c1, 1)];
      output Complex c3;
    algorithm
      c3 := Complex(0);
      for i in 1:size(c1, 1) loop
        c3 := c3 + c1[i] * c2[i];
      end for;
    end scalarProduct;
  end '*';

  encapsulated operator function '+'
    import Complex;
    input Complex c1;
    input Complex c2;
    output Complex c3;
  algorithm
    c3 := Complex(c1.re + c2.re, c1.im + c2.im);
  end '+';
end Complex;

model ComplexTest
  Complex c1 = Complex(1.0, 0.0);
  Complex c2[3, 3] = {{c1, c1, c1}, {c1, c1, c1}, {c1, c1, c1}};
  Complex c3[3, 1] = {{c1}, {c1}, {c1}};
  Complex c4[3, 1] = c2 * c3;
end ComplexTest;

In the binding of c4 we have c2 * c3, which is currently evaluated to a Complex[3] array instead of Complex[3, 1] as it should. This is because we don't check the restrictions on the function arguments for scalarProduct, and mistakenly use it even though the dimensions don't match.

If the scalarProduct function is removed the compiler still fails with:

Could not vectorize function because dimensions 3 and 1mismatch.

Change History (15)

comment:1 by Per Östlund, 11 years ago

Owner: changed from somebody to Mahder Alemseged Gebremedhin
Status: newassigned

comment:2 by Mahder Alemseged Gebremedhin, 11 years ago

Status: assignedaccepted

comment:3 by Martin Sjölund, 11 years ago

Milestone: 1.9.01.9.1

Postponed until 1.9.1

comment:4 by Martin Sjölund, 10 years ago

Milestone: 1.9.11.9.2

This ticket was not closed for 1.9.1, which has now been released. It was batch modified for milestone 1.9.2 (but maybe an empty milestone was more appropriate; feel free to change it).

comment:5 by Martin Sjölund, 10 years ago

Milestone: 1.9.21.9.3

Milestone changed to 1.9.3 since 1.9.2 was released.

comment:6 by Martin Sjölund, 9 years ago

Milestone: 1.9.31.9.4

Moved to new milestone 1.9.4

comment:7 by Martin Sjölund, 9 years ago

Milestone: 1.9.41.9.5

Milestone pushed to 1.9.5

comment:8 by Martin Sjölund, 9 years ago

Milestone: 1.9.51.10.0

Milestone renamed

comment:9 by Martin Sjölund, 8 years ago

Milestone: 1.10.01.11.0

Ticket retargeted after milestone closed

comment:10 by Martin Sjölund, 8 years ago

Milestone: 1.11.01.12.0

Milestone moved to 1.12.0 due to 1.11.0 already being released.

comment:11 by Francesco Casella, 7 years ago

Milestone: 1.12.0Future

The milestone of this ticket has been reassigned to "Future".

If you think the issue is still valid and relevant for you, please select milestone 1.13.0 for back-end, code generation and run-time issues, or 2.0.0 for front-end issues.

If you are aware that the problem is no longer present, please select the milestone corresponding to the version of OMC you used to check that, and set the status to "worksforme".

In both cases, a short informative comment would be welcome.

comment:12 by Francesco Casella, 7 years ago

Milestone: Future2.0.0

@mahge930 please check that this works with the new front-end

comment:13 by Francesco Casella, 6 years ago

Owner: changed from Mahder Alemseged Gebremedhin to Per Östlund
Status: acceptedassigned

@mahge930 no longer working on this

comment:14 by Francesco Casella, 6 years ago

Component: FrontendNew Instantiation

comment:15 by Francesco Casella, 6 years ago

Issue still present as reported initially, when instantiating ComplexTest the NF reports:

[1] 10:04:53 Translation Error
[ComplexTest: 5:3-5:29]: Cannot resolve type of expression c2 * c3. The operands have types Complex[3, 3], Complex[3, 1] in component <NO_COMPONENT>.
Version 0, edited 6 years ago by Francesco Casella (next)
Note: See TracTickets for help on using tickets.