when I compile my code in Modelica, I get following error:
Command Compile failed with following error: User error: ERROR: java exception in com.modelon.oct.modelica.api.InternalAPIException with message: Compilation of generated C code failed
I add the code below.
model SimModelcode
Real heatcapacity[n_Kapazitaten];
Real thermalconductance[n_Kapazitaten+1];
Real l_link;
//Real l_oben;
//Real l_Volume[n_Kapazitaten] ;
Real V_alu ;
Real cpm_alu ;
Real m_alu;
Real cpm_links[n_Kapazitaten];
Real y[101,101] ;
Real z;
Real mittellange;
//Real cpm_rechts[n_Kapazitaten] ;
//Real cpm_oben[n_Kapazitaten] ;
//Real cpm_unten[n_Kapazitaten] ;
Real h_aussen[n_Unterteilung];
//Real l_aussen[n_Unterteilung] ;
//Real Flache_oben[n_Unterteilung] ;
Real Flache_link[n_Unterteilung] ;
Real G_links[n_Kapazitaten+1] ;
//Real G_oben[n_Kapazitaten+1] ;
//Real G_rechts[n_Kapazitaten+1] ;
//Real G_unten[n_Kapazitaten+1] ;
Real h_Volume[n_Kapazitaten] ;
Real V_link[n_Kapazitaten] ;
//Real V_oben[n_Kapazitaten] ;
Real m_link[n_Kapazitaten] ;
//Real m_oben[n_Kapazitaten] ;
Real G[n_Kapazitaten+1];
parameter Integer n_Kapazitaten=100 ; //Anzahl der Kapazitäten
parameter Integer n_Unterteilung=2*(n_Kapazitaten+1) ;//Anzahl der Unterteilung
parameter Real l_box=0.3;//die Länge der obigen Kante vom dem Außenrechteck
parameter Real l_Alu=0.05;//die Länge der obigen Kante vom Alublock
parameter Real h_box=0.2;//die Höhe der linken Kante von dem Außenrechteck
parameter Real h_Alu=0.02;//die Höhe der linken Kante von Alublock
parameter Real dicke=0.01;
parameter Integer lambda_Kunststoff=10;
parameter Integer cp_Alu=200;
parameter Integer cp_Kunststoff=10;
parameter Integer rho_Kunststoff=1185;
parameter Integer rho_Alu=2719;
Real cpm[n_Kapazitaten];
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow PrescribedHeatFlow(Q_flow = 10) annotation(
Placement(visible = true, transformation(origin = {-14, -24}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
Modelica.Thermal.HeatTransfer.Sources.FixedTemperature PrescribedTemperature1(T = 300) annotation(
Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
Modelica.Thermal.HeatTransfer.Sources.FixedTemperature PrescribedTemperature2(T = 300) annotation(
Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
Modelica.Thermal.HeatTransfer.Sources.FixedTemperature PrescribedTemperature3(T = 300) annotation(
Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
Modelica.Thermal.HeatTransfer.Sources.FixedTemperature PrescribedTemperature4(T = 300) annotation(
Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
Modelica.Thermal.HeatTransfer.Components.HeatCapacitor Alu(C = 0.5438) annotation(
Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
Modelica.Thermal.HeatTransfer.Components.HeatCapacitor Capacitors[n_Kapazitaten](C =heatcapacity) annotation(
Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
Modelica.Thermal.HeatTransfer.Components.ThermalConductor Conductors[n_Kapazitaten+1](G=thermalconductance) annotation(
Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
equation
l_link=((l_box-l_Alu)/2) /(n_Kapazitaten+1);// Abstand zwischen zwei Kapazitäten in linkem Block und rechtem Block
//l_oben=((h_box-h_Alu)/2)/(n_Kapazitaten+1);//Abstand zwischen zwei Kapazitäten in obigem Block und unterem Block
V_alu=l_Alu*h_Alu*dicke;
m_alu=V_alu*rho_Alu;
cpm_alu=m_alu*cp_Alu;
for i in 1:n_Unterteilung loop
h_aussen[i]=h_Alu+(i/n_Unterteilung)*(h_box-h_Alu);//Berechnung der Höhe in den linken Trapezflächen
Flache_link[i]=h_aussen[i]*dicke;//Berechnung der Flache in den linken Trapezflächen
//l_aussen[i]=l_Alu+(i/n_Unterteilung)*(l_box-l_Alu);//Berechnung der Länge in den obigen Trapezflächen
//Flache_oben[i]=l_aussen[i]*dicke;//Berechnung der Höhe in den obigen Trapezflächen
end for;
G_links[1:n_Kapazitaten+1]= lambda_Kunststoff*(Flache_link[1:2:n_Unterteilung-1]/l_link);
//G_oben[1:n_Kapazitaten+1]= lambda_Kunststoff*(Flache_oben[1:2:n_Unterteilung-1]/l_oben);
//G_rechts[1:n_Kapazitaten+1]= lambda_Kunststoff*(Flache_link[1:2:n_Unterteilung-1]/l_link);
//G_unten[1:n_Kapazitaten+1]= lambda_Kunststoff*(Flache_oben[1:2:n_Unterteilung-1]/l_oben);
//G =cat(1,G_links,G_oben,G_rechts,G_unten);
G=G_links;
for i in 1:n_Kapazitaten loop
h_Volume[i]=h_Alu+(i/n_Kapazitaten)*(h_box-h_Alu);
//l_Volume[i]=l_Alu+(i/n_Kapazitaten)*(l_box-l_Alu);
V_link[i]=(dicke*(h_Volume[i])*((i/n_Kapazitaten)*(l_box-l_Alu)/2)); //Volumen in linkem und rechtem Block pro Kapazitat
//V_oben[i]=(dicke*(l_Volume[i])*((i/n_Kapazitaten)*(h_box-h_Alu)/2));//Volumen in obigem und unterem Block pro Kapazitat
m_link[i]=rho_Kunststoff*V_link[i];
//m_oben[i]=rho_Kunststoff*V_oben[i];
end for;
cpm_links[1:n_Kapazitaten]=cp_Kunststoff*m_link[1:n_Kapazitaten];
//cpm_oben[1:n_Kapazitaten]=cp_Kunststoff*m_oben[1:n_Kapazitaten];
//cpm_rechts[1:n_Kapazitaten]=cp_Kunststoff*m_link[1:n_Kapazitaten];
//cpm_unten[1:n_Kapazitaten]=cp_Kunststoff*m_oben[1:n_Kapazitaten];
cpm = cpm_links;
for j in 1:101 loop
for i in 1:46 loop
y[i,j]=sqrt(0.09-(i-1)*(((0.09+(j-1)*0.02/100)/45)+((j-1)*0.02/100)))^2+(0.125^2);
end for;
for i in 47:101 loop
y[i,j]=sqrt((i-46)*((0.110-((j-1)*0.02/100))/55)-((j-1)*0.02/100))^2+(0.125^2);
end for;
end for;
z=sum(y);
mittellange=z/10000;
///for i=1:4*n_Kapazitaten
//Capacitors_links=Capacitors[n_Kapazitaten];
//Capacitors_oben=Capacitors[n_Kapazitaten:2*n_Kapazitaten];
//Capacitors_rechts=Capacitors[2*n_Kapazitaten:3*n_Kapazitaten];
//Capacitors_unten=Capacitors[3*n_Kapazitaten:4*n_Kapazitaten]
//end for;
for i in 1:n_Kapazitaten+1 loop
thermalconductance[i]=G[i];
end for;
for i in 1:n_Kapazitaten loop
heatcapacity[i]=cpm[i];
end for;
connect(PrescribedHeatFlow.port, Alu.port);
connect(Conductors[1].port_a,Alu.port );
//connect(Conductors[n_Kapazitaten+2].port_a,Alu.port );
//connect(Conductors[2*(n_Kapazitaten+1)+1].port_a,Alu.port );
//connect(Conductors[3*(n_Kapazitaten+1)+1].port_a,Alu.port );
for i in 1:n_Kapazitaten loop
connect(Conductors[i].port_b,Capacitors[i].port);
connect(Capacitors[i].port,Conductors[i+1].port_a);
end for;
connect(Conductors[n_Kapazitaten+1].port_b,PrescribedTemperature1.port);
//for i in n_Kapazitaten+1:2*n_Kapazitaten loop
//connect(Conductors[i+1].port_b,Capacitors[i].port);
//connect(Capacitors[i].port,Conductors[i+2].port_a);
//end for;
//connect(Conductors[2*n_Kapazitaten+2].port_b,PrescribedTemperature2.port);
//for i in 2*n_Kapazitaten+1:3*n_Kapazitaten loop
//connect(Conductors[i+2].port_b,Capacitors[i].port);
//connect(Capacitors[i].port,Conductors[i+3].port_a);
//end for;
//connect(Conductors[3*n_Kapazitaten+3].port_b,PrescribedTemperature3.port);
//for i in 3*n_Kapazitaten+1:4*n_Kapazitaten loop
//connect(Conductors[i+3].port_b,Capacitors[i].port);
//connect(Capacitors[i].port,Conductors[i+4].port_a);
//end for;
//connect(Conductors[4*n_Kapazitaten+4].port_b,PrescribedTemperature4.port);
end SimModelcode;
Do you know the reason of this error? I appreciate your helps. Thanks in advance!
There are a few variables used as array dimensions that need to be declared as parameter: parameter Real heatcapacity[n_Kapazitaten]; parameter Real thermalconductance[n_Kapazitaten+1];
And then there are some calls that look like sqrt(...)^2
where ...
is negative. If the intent is to make them positive, just call abs(...)
.
Which is the problem for JModelica, I do not know.