Opened 5 years ago

Last modified 3 years ago

#5906 accepted defect

compilation error for curved bend

Reported by: sachinjadhav2004@… Owned by: Mahder Alemseged Gebremedhin
Priority: high Milestone:
Component: Code Generation Version: v1.14.1
Keywords: compilation curved bend Cc: Mahder Alemseged Gebremedhin, Andreas Heuermann

Description (last modified by Francesco Casella)

I have build a model containing two boundary condition and two static pipes with one curved bend in between. The model is built without any error (as the number of variables = number of the equations). But during compiling model throws error given below for cured bend in the model.

  • I have attached error in the file and the model is given below.

I appreciate your help regarding solving my problem.

model LBendtest1
replaceable package Medium = Modelica.Media.Water.StandardWater;

  inner Modelica.Fluid.System system(energyDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial)  annotation(
    Placement(visible = true, transformation(origin = {-76, 82}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Fluid.Pipes.StaticPipe pipe(redeclare package Medium = Medium, diameter = 0.02, length = 50, p_a_start = 100000, p_b_start = 100000)  annotation(
    Placement(visible = true, transformation(origin = {-42, -16}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Fluid.Pipes.StaticPipe pipe1(redeclare package Medium = Medium, diameter = 0.02, length = 50, p_a_start = 100000, p_b_start = 100000)  annotation(
    Placement(visible = true, transformation(origin = {42, 42}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Fluid.Sources.MassFlowSource_T boundary(redeclare package Medium = Medium, T = 293.15, m_flow = 0.1, nPorts = 1)  annotation(
    Placement(visible = true, transformation(origin = {-88, -16}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Fluid.Sources.Boundary_pT boundary1(redeclare package Medium = Medium, T = 293.15, nPorts = 1, p = 100000)  annotation(
    Placement(visible = true, transformation(origin = {86, 42}, extent = {{-10, -10}, {10, 10}}, rotation = 180)));

 Modelica.Fluid.Fittings.Bends.CurvedBend curvedBend1(redeclare package Medium = Medium, geometry = Modelica.Fluid.Fittings.BaseClasses.Bends.CurvedBend.Geometry(d_hyd = 0.02, R_0 = 0.6)) annotation(
    Placement(visible = true, transformation(origin = {-2, 18}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
  connect(boundary.ports[1], pipe.port_a) annotation(
    Line(points = {{-78, -16}, {-52, -16}, {-52, -16}, {-52, -16}}, color = {0, 127, 255}));
 connect(pipe1.port_b, boundary1.ports[1]) annotation(
    Line(points = {{52, 42}, {76, 42}}, color = {0, 127, 255}));
 connect(pipe.port_b, curvedBend1.port_a) annotation(
    Line(points = {{-32, -16}, {-32, 18}, {-12, 18}}, color = {0, 127, 255}));
 connect(curvedBend1.port_b, pipe1.port_a) annotation(
    Line(points = {{8, 18}, {17, 18}, {17, 42}, {32, 42}}, color = {0, 127, 255}));
  annotation(
    uses(Modelica(version = "3.2.2")));
end LBendtest1;

Attachments (1)

compilation error.txt (10.5 KB ) - added by sachin jadhav <sachinjadhav2004@…> 5 years ago.
compilation error

Download all attachments as: .zip

Change History (8)

by sachin jadhav <sachinjadhav2004@…>, 5 years ago

Attachment: compilation error.txt added

compilation error

comment:1 by Adeel Asghar, 5 years ago

Cc: Mahder Alemseged Gebremedhin Andreas Heuermann added
Component: OMEditCode Generation
Milestone: NeedsInput1.16.0
Owner: set to Lennart Ochel
Status: newassigned

@lochel can you take a look at it? I am not sure who should take care of this.

comment:2 by Francesco Casella, 5 years ago

Description: modified (diff)

comment:3 by Francesco Casella, 5 years ago

Owner: changed from Lennart Ochel to Mahder Alemseged Gebremedhin

I guess @mahde930 could give some suggestions

comment:4 by Mahder Alemseged Gebremedhin, 5 years ago

Status: assignedaccepted

This is a known issue. I was not sure what to do about it so I left it unsolved. You can see the same exact problem in ModelicaTest libraries here:

https://libraries.openmodelica.org/branches/newInst/ModelicaTest_3.2.3/ModelicaTest_3.2.3.html

https://libraries.openmodelica.org/branches/newInst/ModelicaTest_3.2.3/files/ModelicaTest_3.2.3_ModelicaTest.Fluid.Dissipation.TestCases.PressureLoss.Bend.err

https://libraries.openmodelica.org/branches/newInst/ModelicaTest_3.2.3/files/ModelicaTest_3.2.3_ModelicaTest.Fluid.Dissipation.TestCases.PressureLoss.SeveralTestCases.err


Here is the issue:

You have the record

Modelica.Fluid.Dissipation.PressureLoss.Bend.dp_curvedOverall_IN_con
defined as

record dp_curvedOverall_IN_con
  "Input record for function dp_curvedOverall_DP and dp_curvedOverall_MFLOW"
  //bend variables
  extends Modelica.Fluid.Dissipation.Utilities.Records.PressureLoss.Bend;
end dp_curvedOverall_IN_con;

where Modelica.Fluid.Dissipation.Utilities.Records.PressureLoss.Bend is

record Bend "Input for bend"
  extends EdgedBend;
  SI.Radius R_0=0.5*d_hyd;
end Bend;

where EdgedBend is

record EdgedBend "Input for bend"
  extends Modelica.Icons.Record;

  SI.Diameter d_hyd(min=Modelica.Constants.eps) = 0.1;
  SI.Angle delta=90*PI/180;
  SI.Length K=0;
end EdgedBend;

So essentially you have the record

Modelica.Fluid.Dissipation.PressureLoss.Bend.dp_curvedOverall_IN_con defined as

record dp_curvedOverall_IN_con
  SI.Diameter d_hyd(min=Modelica.Constants.eps) = 0.1;
  SI.Angle delta=90*PI/180;
  SI.Length K=0;
  SI.Radius R_0=0.5*d_hyd ;
end Bend;

And there is another record

Modelica.Fluid.Fittings.BaseClasses.Bends.CurvedBend.Geometry
defined as:

record Geometry "Geometric data for a curved bend"
  extends Modelica.Icons.Record;

  SI.Diameter d_hyd;
  SI.Radius R_0;
  SI.Angle delta=1.5707963267949;
  Modelica.Fluid.Types.Roughness K=2.5e-5;
end Geometry;

The function Modelica.Fluid.Dissipation.PressureLoss.Bend.dp_curvedOverall_MFLOW expects dp_curvedOverall_IN_con as input but it is given Geometry instead.

The two records are similar but the order of elements is not the same. I think the front-end allows it because they are plug-compatible. However the problem is there is no ordering done on record elements. So by the time we reach codegen we have two incompatible types.

I think this is an issue that can ideally be fixed by MSL by providing a conversion function or by the front end enforcing ordering rules on records. But the later option comes with a number of things to consider if we want to sort record elements. Another option is to generate casting functions for such uses by the front-end. We can probably also work with a CAST() expression for this case.

This is why I left it unresolved for the time being.

comment:5 by Francesco Casella, 4 years ago

Milestone: 1.16.01.17.0

Retargeted to 1.17.0 after 1.16.0 release

comment:6 by Francesco Casella, 4 years ago

Milestone: 1.17.01.18.0

Retargeted to 1.18.0 because of 1.17.0 timed release.

comment:7 by Francesco Casella, 3 years ago

Milestone: 1.18.0

Ticket retargeted after milestone closed

Note: See TracTickets for help on using tickets.