JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab

Modelica model of the heat-exchanger intended to be used in a virtual lab completely described in Modelica. The VirtualLabBuilder Modelica library has to be used.

Information


 

Modelica model of the industrial boiler to be used in a virtual lab implemented in combination with Sysquake



Package Content

NameDescription
Interactive Modelica description of the virtual-lab
viewDoublePipeHeatExchanger Modelica description of the virtual-lab view
JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.drawSquare drawSquare Function that compute the vertices of a square given its center position and side length
JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.sectionGas sectionGas Function to compute the vertices of the gas CV section
JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.sectionLiquid sectionLiquid Function to compute the vertices of the liquid CV section
JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.sectionPipe1 sectionPipe1 Function to compute the vertices of the inner pipe section
JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.sectionPipe2 sectionPipe2 Function to compute the vertices of the outer pipe section
JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.tempLiquid tempLiquid Function to compute the liquid color for a certain temperature
JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.tempGas tempGas Function to compute the gas color for a certain temperature


JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.Interactive

Modelica description of the virtual-lab

Modelica definition

model Interactive "Modelica description of the virtual-lab" 
  
   VirtualLabBuilder.VLabModels.VirtualLab interactive(redeclare model ViewI = 
        viewDoublePipeHeatExchanger, redeclare model ModelI = 
        PhysicalModel.DoublePipeHeatExchanger,
    Tcom=1,
    fileName="heatExchanger.java");
  Real xsize;
  
equation 
  xsize = interactive.Model.lenPipe/9;
  interactive.View.liquid.x[1,:] = drawSquare(-xsize*17/4, xsize/2);
  interactive.View.liquid.x[2,:] = drawSquare(-xsize*7/2, xsize);
  interactive.View.liquid.x[3,:] = drawSquare(-xsize*5/2, xsize);
  interactive.View.liquid.x[4,:] = drawSquare(-xsize*3/2, xsize);
  interactive.View.liquid.x[5,:] = drawSquare(-xsize/2, xsize);
  interactive.View.liquid.x[6,:] = drawSquare(xsize/2, xsize);
  interactive.View.liquid.x[7,:] = drawSquare(3*xsize/2, xsize);
  interactive.View.liquid.x[8,:] = drawSquare(5*xsize/2, xsize);
  interactive.View.liquid.x[9,:] = drawSquare(7*xsize/2, xsize);
  interactive.View.liquid.x[10,:] = drawSquare((7.0/2.0+1.0/2.0+1.0/4.0)*xsize,xsize/2.0);
  
  for i in 1:10 loop
     interactive.View.liquid.y[i,:] = sectionLiquid(interactive.Model.pipeDiameter2, interactive.Model.pipeDiameter3);
  end for;
  
  interactive.View.gas.x[1,:] = drawSquare(-xsize*17/4, xsize/2);
  interactive.View.gas.x[2,:] = drawSquare(-xsize*7/2, xsize);
  interactive.View.gas.x[3,:] = drawSquare(-xsize*5/2, xsize);
  interactive.View.gas.x[4,:] = drawSquare(-xsize*3/2, xsize);
  interactive.View.gas.x[5,:] = drawSquare(-xsize/2, xsize);
  interactive.View.gas.x[6,:] = drawSquare(xsize/2, xsize);
  interactive.View.gas.x[7,:] = drawSquare(3*xsize/2, xsize);
  interactive.View.gas.x[8,:] = drawSquare(5*xsize/2, xsize);
  interactive.View.gas.x[9,:] = drawSquare(7*xsize/2, xsize);
  interactive.View.gas.x[10,:] = drawSquare((7.0/2.0+1.0/2.0+1.0/4.0)*xsize,xsize/2.0);
  
  for i in 1:10 loop
     interactive.View.gas.y[i,:] = sectionGas(interactive.Model.pipeDiameter1);
  end for;
  
  interactive.View.pipe1D.x = drawSquare(0, interactive.Model.lenPipe);
  
  interactive.View.pipe1D.y = sectionPipe1(interactive.Model.pipeDiameter1, interactive.Model.pipeDiameter2);
  
  interactive.View.pipe1U.x = drawSquare(0, interactive.Model.lenPipe);
  
  interactive.View.pipe1U.y = sectionPipe2(interactive.Model.pipeDiameter1, interactive.Model.pipeDiameter2, interactive.Model.pipeDiameter3);
  
  for i in 1:10 loop
     interactive.View.liquid.fillColor[i,:] = tempLiquid(interactive.Model.tempLiq[i]);
  end for;
  
  for i in 1:10 loop
     interactive.View.gas.fillColor[i,:] = tempGas(interactive.Model.tempGas[i]);
  end for;
  
//Sliders:
  
  interactive.View.gasPressure.var = interactive.Model.gasPressure;
  interactive.View.molarFractCO2.var = interactive.Model.molarFractCO2;
  interactive.View.lenPipe.var = interactive.Model.lenPipe;
  interactive.View.pipe1.var = interactive.Model.pipeDiameter1;
  interactive.View.pipe2.var = interactive.Model.pipeDiameter2;
  interactive.View.pipe3.var = interactive.Model.pipeDiameter3;
  interactive.View.InTempLiq.var = interactive.Model.sourceL1Cntrl.tempFlowSP;
  interactive.View.InTempGas.var = interactive.Model.sourceG1Cntrl.tempFlowSP;
  interactive.View.InFlowLiq.var = interactive.Model.sourceL1Cntrl.totalMassFlowSP;
  interactive.View.InFlowGas.var = interactive.Model.sourceG1Cntrl.totalMolFlowSP;
  
  for i in 1:10 loop
    interactive.View.trailh.point[i,:]= {time,interactive.Model.tempLiq[i]};
  end for;
  
  for i in 1:10 loop
    interactive.View.trailg.point[i,:]= {time,interactive.Model.tempGas[i]};
  end for;
  
  for i in 1:9 loop
    interactive.View.trailw.point[i,:]= {time,interactive.Model.tempWall[i]};
  end for;
  
  interactive.View.trailtempG1.point = {time, interactive.Model.tempGasFlowSourceG1};
  interactive.View.trailtempL1.point = {time, interactive.Model.tempLiqFlowSourceL1};
  interactive.View.trailFlowLiq.point = {time, interactive.Model.massFlowLiq[1]};
  interactive.View.trailFlowGas.point = {time, interactive.Model.sourceG2.totalMolFSP};
  
  when (interactive.View.lenPipe.event or interactive.View.pipe1.event or interactive.View.pipe2.event or interactive.View.pipe3.event) then
    reinit(interactive.Model.volCntrlGas1.vessel.vesselVolume,
           0.5 * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
    reinit(interactive.Model.volCntrlGas2.vessel.vesselVolume,
           interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
    reinit(interactive.Model.volCntrlGas3.vessel.vesselVolume,
           interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
    reinit(interactive.Model.volCntrlGas4.vessel.vesselVolume,
           interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
    reinit(interactive.Model.volCntrlGas5.vessel.vesselVolume,
           interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
    reinit(interactive.Model.volCntrlGas6.vessel.vesselVolume,
           interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
    reinit(interactive.Model.volCntrlGas7.vessel.vesselVolume,
           interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
    reinit(interactive.Model.volCntrlGas8.vessel.vesselVolume,
           interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
    reinit(interactive.Model.volCntrlGas9.vessel.vesselVolume,
           interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
    reinit(interactive.Model.volCntrlGas10.vessel.vesselVolume,
           0.5 * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
    
    // El cambio en la geometria del intercambiador modifica la cantidad de agua en
    // los volúmenes de control, de modo que siempre se encuentren llenos de agua
    
    reinit(interactive.Model.volCntrlLiq1.liquid.massL[1],
           0.5 * interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2)  * interactive.Model.lenPipe / (interactive.Model.numNodes - 1) * interactive.Model.densityL[1]);
    reinit(interactive.Model.volCntrlLiq2.liquid.massL[1],
           interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2)  * interactive.Model.lenPipe / (interactive.Model.numNodes - 1) * interactive.Model.densityL[1]);
    reinit(interactive.Model.volCntrlLiq3.liquid.massL[1],
           interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2)  * interactive.Model.lenPipe / (interactive.Model.numNodes - 1) * interactive.Model.densityL[1]);
    reinit(interactive.Model.volCntrlLiq4.liquid.massL[1],
           interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2)  * interactive.Model.lenPipe / (interactive.Model.numNodes - 1) * interactive.Model.densityL[1]);
    reinit(interactive.Model.volCntrlLiq5.liquid.massL[1],
           interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2)  * interactive.Model.lenPipe / (interactive.Model.numNodes - 1) * interactive.Model.densityL[1]);
    reinit(interactive.Model.volCntrlLiq6.liquid.massL[1],
           interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2)  * interactive.Model.lenPipe / (interactive.Model.numNodes - 1) * interactive.Model.densityL[1]);
    reinit(interactive.Model.volCntrlLiq7.liquid.massL[1],
           interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2)  * interactive.Model.lenPipe / (interactive.Model.numNodes - 1) * interactive.Model.densityL[1]);
    reinit(interactive.Model.volCntrlLiq8.liquid.massL[1],
           interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2)  * interactive.Model.lenPipe / (interactive.Model.numNodes - 1) * interactive.Model.densityL[1]);
    reinit(interactive.Model.volCntrlLiq9.liquid.massL[1],
           interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2)  * interactive.Model.lenPipe / (interactive.Model.numNodes - 1) * interactive.Model.densityL[1]);
    reinit(interactive.Model.volCntrlLiq10.liquid.massL[1],
           0.5 * interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2)  * interactive.Model.lenPipe / (interactive.Model.numNodes - 1) * interactive.Model.densityL[1]);
    
   // El cambio en la geometria del intercambiador modifica la masa de los elementos de pared
    
   reinit(interactive.Model.pipeWall1.mass,
          interactive.Model.densityIntPipeWall * interactive.Model.lenPipe * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.pipeWall2.mass,
          interactive.Model.densityIntPipeWall * interactive.Model.lenPipe * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.pipeWall3.mass,
          interactive.Model.densityIntPipeWall * interactive.Model.lenPipe * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.pipeWall4.mass,
          interactive.Model.densityIntPipeWall * interactive.Model.lenPipe * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.pipeWall5.mass,
          interactive.Model.densityIntPipeWall * interactive.Model.lenPipe * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.pipeWall6.mass,
          interactive.Model.densityIntPipeWall * interactive.Model.lenPipe * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.pipeWall7.mass,
          interactive.Model.densityIntPipeWall * interactive.Model.lenPipe * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.pipeWall8.mass,
          interactive.Model.densityIntPipeWall * interactive.Model.lenPipe * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.pipeWall9.mass,
          interactive.Model.densityIntPipeWall * interactive.Model.lenPipe * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  / (interactive.Model.numNodes - 1));
    
   // El cambio en la geometria del intercambiador modifica la conduccion de calor en la pared
    
   reinit(interactive.Model.condHeat12.Rth,
          interactive.Model.lenPipe / (interactive.Model. thermalCondWall * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  * (interactive.Model.numNodes - 1)));
   reinit(interactive.Model.condHeat23.Rth,
          interactive.Model.lenPipe / ( interactive.Model.thermalCondWall * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  * ( interactive.Model.numNodes - 1)));
   reinit(interactive.Model.condHeat34.Rth,
          interactive.Model.lenPipe / ( interactive.Model.thermalCondWall * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  * ( interactive.Model.numNodes - 1)));
   reinit(interactive.Model.condHeat45.Rth,
          interactive.Model.lenPipe / ( interactive.Model.thermalCondWall * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  * ( interactive.Model.numNodes - 1)));
   reinit(interactive.Model.condHeat56.Rth,
          interactive.Model.lenPipe / ( interactive.Model.thermalCondWall * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  * ( interactive.Model.numNodes - 1)));
   reinit(interactive.Model.condHeat67.Rth,
          interactive.Model.lenPipe / ( interactive.Model.thermalCondWall * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  * ( interactive.Model.numNodes - 1)));
   reinit(interactive.Model.condHeat78.Rth,
          interactive.Model.lenPipe / ( interactive.Model.thermalCondWall * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  * ( interactive.Model.numNodes - 1)));
   reinit(interactive.Model.condHeat89.Rth,
          interactive.Model.lenPipe / ( interactive.Model.thermalCondWall * interactive.Model.pi * ( (interactive.Model.pipeDiameter2/2)^ 2 - (interactive.Model.pipeDiameter1/2)^ 2)  * ( interactive.Model.numNodes - 1)));
    
  // El cambio en la geometria del intercambiador modifica la conveccion de calor liquido - pared 
    
   reinit(interactive.Model.convHeatFL1.pipeDiameter, interactive.Model.pipeDiameter2);
   reinit(interactive.Model.convHeatFL2.pipeDiameter, interactive.Model.pipeDiameter2);
   reinit(interactive.Model.convHeatFL3.pipeDiameter, interactive.Model.pipeDiameter2);
   reinit(interactive.Model.convHeatFL4.pipeDiameter, interactive.Model.pipeDiameter2);
   reinit(interactive.Model.convHeatFL5.pipeDiameter, interactive.Model.pipeDiameter2);
   reinit(interactive.Model.convHeatFL6.pipeDiameter, interactive.Model.pipeDiameter2);
   reinit(interactive.Model.convHeatFL7.pipeDiameter, interactive.Model.pipeDiameter2);
   reinit(interactive.Model.convHeatFL8.pipeDiameter, interactive.Model.pipeDiameter2);
   reinit(interactive.Model.convHeatFL9.pipeDiameter, interactive.Model.pipeDiameter2);
    
   reinit(interactive.Model.convHeatFL1.pipeSection, interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2));
   reinit(interactive.Model.convHeatFL2.pipeSection, interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2));
   reinit(interactive.Model.convHeatFL3.pipeSection, interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2));
   reinit(interactive.Model.convHeatFL4.pipeSection, interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2));
   reinit(interactive.Model.convHeatFL5.pipeSection, interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2));
   reinit(interactive.Model.convHeatFL6.pipeSection, interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2));
   reinit(interactive.Model.convHeatFL7.pipeSection, interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2));
   reinit(interactive.Model.convHeatFL8.pipeSection, interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2));
   reinit(interactive.Model.convHeatFL9.pipeSection, interactive.Model.pi * ( (interactive.Model.pipeDiameter3/2)^ 2 - (interactive.Model.pipeDiameter2/2)^ 2));
    
   reinit(interactive.Model.convHeatFL1.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.convHeatFL2.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.convHeatFL3.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.convHeatFL4.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.convHeatFL5.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.convHeatFL6.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.convHeatFL7.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.convHeatFL8.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
   reinit(interactive.Model.convHeatFL9.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter2 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
    
  // El cambio en la geometria del intercambiador modifica la conveccion de calor gas - pared 
    
  reinit(interactive.Model.convHeatFG1.pipeDiameter, interactive.Model.pipeDiameter1);
  reinit(interactive.Model.convHeatFG2.pipeDiameter, interactive.Model.pipeDiameter1);
  reinit(interactive.Model.convHeatFG3.pipeDiameter, interactive.Model.pipeDiameter1);
  reinit(interactive.Model.convHeatFG4.pipeDiameter, interactive.Model.pipeDiameter1);
  reinit(interactive.Model.convHeatFG5.pipeDiameter, interactive.Model.pipeDiameter1);
  reinit(interactive.Model.convHeatFG6.pipeDiameter, interactive.Model.pipeDiameter1);
  reinit(interactive.Model.convHeatFG7.pipeDiameter, interactive.Model.pipeDiameter1);
  reinit(interactive.Model.convHeatFG8.pipeDiameter, interactive.Model.pipeDiameter1);
  reinit(interactive.Model.convHeatFG9.pipeDiameter, interactive.Model.pipeDiameter1);
    
  reinit(interactive.Model.convHeatFG1.pipeSection, interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2);
  reinit(interactive.Model.convHeatFG2.pipeSection, interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2);
  reinit(interactive.Model.convHeatFG3.pipeSection, interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2);
  reinit(interactive.Model.convHeatFG4.pipeSection, interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2);
  reinit(interactive.Model.convHeatFG5.pipeSection, interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2);
  reinit(interactive.Model.convHeatFG6.pipeSection, interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2);
  reinit(interactive.Model.convHeatFG7.pipeSection, interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2);
  reinit(interactive.Model.convHeatFG8.pipeSection, interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2);
  reinit(interactive.Model.convHeatFG9.pipeSection, interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2);
    
  reinit(interactive.Model.convHeatFG1.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter1 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
  reinit(interactive.Model.convHeatFG2.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter1 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
  reinit(interactive.Model.convHeatFG3.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter1 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
  reinit(interactive.Model.convHeatFG4.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter1 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
  reinit(interactive.Model.convHeatFG5.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter1 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
  reinit(interactive.Model.convHeatFG6.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter1 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
  reinit(interactive.Model.convHeatFG7.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter1 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
  reinit(interactive.Model.convHeatFG8.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter1 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
  reinit(interactive.Model.convHeatFG9.pipeSurfaceArea, interactive.Model.pi * interactive.Model.pipeDiameter1 * interactive.Model.lenPipe / (interactive.Model.numNodes - 1));
  end when;
  
  when interactive.View.molarFractCO2.event then
   reinit(interactive.Model.sourceG2Cntrl.molFracCO2SP, interactive.View.molarFractCO2.var);
 end when;
  
  when interactive.View.InTempLiq.event then
    reinit(interactive.Model.sourceL2Cntrl.tempFlowSP,interactive.View.InTempLiq.var);
  end when;
  
  when interactive.View.InFlowGas.event then
    reinit(interactive.Model.pumpGCntrl.totalMolFlowSP, interactive.View.InFlowGas.var);
    reinit(interactive.Model.sourceG2Cntrl.totalMolFlowSP, interactive.View.InFlowGas.var);
  end when;
  
  when interactive.View.InTempGas.event then
    reinit(interactive.Model.sourceG2Cntrl.tempFlowSP, interactive.View.InTempGas.var);
 end when;
  
  when interactive.View.InFlowLiq.event then
    reinit(interactive.Model.pumpLCntrl.totalMassFlowSP, interactive.View.InFlowLiq.var);
    reinit(interactive.Model.sourceL2Cntrl.totalMassFlowSP, interactive.View.InFlowLiq.var);
  end when;
  
   // Numero de moles de CO2 y SO2 en los volumenes de control, 
  
 when interactive.View.molarFractCO2.event or interactive.View.gasPressure.event then
   reinit(interactive.Model.volCntrlGas1.semiPerfGas.molG[1],
          0.5*interactive.View.molarFractCO2.var       *interactive.View.gasPressure.var         * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas1.semiPerfGas.tempG));
   reinit(interactive.Model.volCntrlGas1.semiPerfGas.molG[2],
          0.5*(1-interactive.View.molarFractCO2.var)         *interactive.View.gasPressure.var        * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas1.semiPerfGas.tempG));
    
   reinit(interactive.Model.volCntrlGas2.semiPerfGas.molG[1],interactive.View.molarFractCO2.var
                            *interactive.View.gasPressure.var        * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas2.semiPerfGas.tempG));
   reinit(interactive.Model.volCntrlGas2.semiPerfGas.molG[2],
          (1-interactive.View.molarFractCO2.var)         *interactive.View.gasPressure.var        * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas2.semiPerfGas.tempG));
    
   reinit(interactive.Model.volCntrlGas3.semiPerfGas.molG[1],interactive.View.molarFractCO2.var
                            *interactive.View.gasPressure.var        * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas3.semiPerfGas.tempG));
   reinit(interactive.Model.volCntrlGas3.semiPerfGas.molG[2],
          (1-interactive.View.molarFractCO2.var)         *interactive.View.gasPressure.var        * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas3.semiPerfGas.tempG));
    
   reinit(interactive.Model.volCntrlGas4.semiPerfGas.molG[1],interactive.View.molarFractCO2.var
                            *interactive.View.gasPressure.var         * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas4.semiPerfGas.tempG));
   reinit(interactive.Model.volCntrlGas4.semiPerfGas.molG[2],
          (1-interactive.View.molarFractCO2.var)         *interactive.View.gasPressure.var         * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas4.semiPerfGas.tempG));
    
   reinit(interactive.Model.volCntrlGas5.semiPerfGas.molG[1],interactive.View.molarFractCO2.var
                            *interactive.View.gasPressure.var         * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas5.semiPerfGas.tempG));
   reinit(interactive.Model.volCntrlGas5.semiPerfGas.molG[2],
          (1-interactive.View.molarFractCO2.var)         *interactive.View.gasPressure.var         * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) *interactive.Model.perfGasConst *interactive.Model.volCntrlGas5.semiPerfGas.tempG));
    
   reinit(interactive.Model.volCntrlGas6.semiPerfGas.molG[1],interactive.View.molarFractCO2.var
                            *interactive.View.gasPressure.var         * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas6.semiPerfGas.tempG));
   reinit(interactive.Model.volCntrlGas6.semiPerfGas.molG[2],
          (1-interactive.View.molarFractCO2.var)         *interactive.View.gasPressure.var         * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas6.semiPerfGas.tempG));
    
   reinit(interactive.Model.volCntrlGas7.semiPerfGas.molG[1],interactive.View.molarFractCO2.var
                            *interactive.View.gasPressure.var        * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas7.semiPerfGas.tempG));
   reinit(interactive.Model.volCntrlGas7.semiPerfGas.molG[2],
          (1-interactive.View.molarFractCO2.var)         *interactive.View.gasPressure.var       * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas7.semiPerfGas.tempG));
    
   reinit(interactive.Model.volCntrlGas8.semiPerfGas.molG[1],interactive.View.molarFractCO2.var
                            *interactive.View.gasPressure.var         * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas8.semiPerfGas.tempG));
   reinit(interactive.Model.volCntrlGas8.semiPerfGas.molG[2],
          (1-interactive.View.molarFractCO2.var)         *interactive.View.gasPressure.var      * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas8.semiPerfGas.tempG));
    
   reinit(interactive.Model.volCntrlGas9.semiPerfGas.molG[1],interactive.View.molarFractCO2.var
                            *interactive.View.gasPressure.var       * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas9.semiPerfGas.tempG));
   reinit(interactive.Model.volCntrlGas9.semiPerfGas.molG[2],
          (1-interactive.View.molarFractCO2.var)         *interactive.View.gasPressure.var        * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas9.semiPerfGas.tempG));
    
   reinit(interactive.Model.volCntrlGas10.semiPerfGas.molG[1],
          0.5*interactive.View.molarFractCO2.var        *interactive.View.gasPressure.var         * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas10.semiPerfGas.tempG));
   reinit(interactive.Model.volCntrlGas10.semiPerfGas.molG[2],
          0.5*(1-interactive.View.molarFractCO2.var)         *interactive.View.gasPressure.var       * interactive.Model.pi * (interactive.Model.pipeDiameter1/2)^ 2 * interactive.Model.lenPipe / ( (interactive.Model.numNodes - 1) * interactive.Model.perfGasConst *interactive.Model.volCntrlGas10.semiPerfGas.tempG));
    
end when;
when interactive.View.InFlowLiq.event then
   LogVariable(time);
end when;
end Interactive;

JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.viewDoublePipeHeatExchanger

Modelica description of the virtual-lab view

JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.viewDoublePipeHeatExchanger

Modelica definition

model viewDoublePipeHeatExchanger 
  "Modelica description of the virtual-lab view" 
  import VirtualLabBuilder;
                   extends VirtualLabBuilder.VLabModels.PartialView( fileName = "heatExch.java", Tcom = 1);
  
  VirtualLabBuilder.ViewElements.Containers.MainFrame MF(Width=535, Height=
        700);
  VirtualLabBuilder.ViewElements.Containers.DrawingPanel DP(
    XMin=-2,
    XMax=2,
    YMin=-0.05,
    YMax=0.05);
  VirtualLabBuilder.ViewElements.Containers.Panel panelN(
    position="NORTH",
    nColumns=2,
    LayoutPolicy="GridLayout",
    nRows=3);
  VirtualLabBuilder.ViewElements.Containers.Panel panelS(
    nRows=3,
    nColumns=2,
    LayoutPolicy="GridLayout");
  VirtualLabBuilder.ViewElements.Drawables.PolygonSet liquid(
    fillColorp={0,0,255,255},
    intFillColor=1,
    N=10,
    nPoints=4,
    intVertexesX={1,1,1,1},
    intVertexesY={1,1,1,1});
  
  VirtualLabBuilder.ViewElements.Drawables.Polygon pipe1D(nPoints=4, fillColorp={192,192,192,255},
    intVertexesX={1,1,1,1},
    intVertexesY={1,1,1,1},
    lineColorp={0,0,0,255},
    filled="true",
    closed="true");
  VirtualLabBuilder.ViewElements.Drawables.Polygon pipe1U(nPoints=4, fillColorp={192,192,192,255},
    intVertexesX={1,1,1,1},
    intVertexesY={1,1,1,1},
    lineColorp={0,0,0,255},
    filled="true",
    closed="true");
  VirtualLabBuilder.ViewElements.InteractiveControls.Slider InTempLiq(
    stringFormat="Input  Temperature Liq (K)= 0",
    tickNumber=9,
    minimum=283,
    maximum=313);
  VirtualLabBuilder.ViewElements.InteractiveControls.Slider InTempGas(
    stringFormat="Input Temperature Gas (K)= 0",
    tickNumber=9,
    minimum=273 + 60,
    maximum=273 + 140);
  VirtualLabBuilder.ViewElements.InteractiveControls.Slider InFlowLiq(
                           maximum=0.5,
    stringFormat="Input Flow Liq (Kg/s)= 0.0",
    tickNumber=9);
  VirtualLabBuilder.ViewElements.InteractiveControls.Slider InFlowGas(
                          maximum=0.4, stringFormat=
        "Input Flow Gas (mol/s)= 0.0",
    tickNumber=9);
  VirtualLabBuilder.ViewElements.InteractiveControls.Slider gasPressure(
    tickFormat="0",
    minimum=1e5,
    maximum=10e5,
    stringFormat="Gas pressure (Pa) = 00000",
    tickNumber=3);
  VirtualLabBuilder.ViewElements.InteractiveControls.Slider molarFractCO2(stringFormat=
        "Molar Fraction CO2 = 0.00", tickNumber=9);
  VirtualLabBuilder.ViewElements.InteractiveControls.Slider lenPipe(
    minimum=0.5,
    tickFormat="0.0",
    maximum=2,
    stringFormat="Pipe Length (m)= 0.0",
    tickNumber=9);
  VirtualLabBuilder.ViewElements.InteractiveControls.Slider pipe1(
    minimum=0.01,
    maximum=0.02,
    stringFormat="Inner diameter pipe1 (m)= 0.00",
    tickNumber=9);
  VirtualLabBuilder.ViewElements.InteractiveControls.Slider pipe2(
    minimum=0.021,
    maximum=0.036,
    stringFormat="Outer diameter pipe1 (m)= 0.00",
    tickNumber=9);
  VirtualLabBuilder.ViewElements.InteractiveControls.Slider pipe3(
    minimum=0.036,
    maximum=0.05,
    stringFormat="Outer diameter pipe2 (m) = 0.00",
    tickNumber=9);
  
  VirtualLabBuilder.ViewElements.BasicElements.CheckBox checkBox(label="Show plots");
  VirtualLabBuilder.ViewElements.Containers.Dialog dialog(
    varName="var",
    LayoutPolicy="GridLayout",
    nRows=3,
    nColumns=3,
    xPosition=535,
    Height=700,
    Width=535);
  VirtualLabBuilder.ViewElements.Containers.PlottingPanel PP1(
    title="Liquid temperature",
    titleX="time (s)",
    titleY="K",
    autoScaleY="false",
    minY=273,
    maxY=273.15 + 60);
  VirtualLabBuilder.ViewElements.Containers.PlottingPanel PP2(
    title="Gas temperature",
    titleX="time (s)",
    titleY="K",
    maxY=273.15 + 140,
    autoScaleY="false",
    minY=273);
  VirtualLabBuilder.ViewElements.Containers.PlottingPanel PP3(
    title="Wall temperature",
    titleX="time (s)",
    titleY="K",
    maxY=273.15 + 140,
    autoScaleY="false",
    minY=273);
  VirtualLabBuilder.ViewElements.Containers.PlottingPanel PP4(
    titleX="time (s)",
    title="Pump temperature",
    titleY="K",
    maxY=273.15 + 140,
    autoScaleY="false",
    minY=273);
  VirtualLabBuilder.ViewElements.Containers.PlottingPanel PP5(
    title="Liquid flow",
    titleX="time (s)",
    titleY="Kg/s",
    autoScaleY="false");
  VirtualLabBuilder.ViewElements.Containers.PlottingPanel PP6(
    titleX="time (s)",
    titleY="mol/s",
    maxY=0.5,
    title="Gas flow",
    autoScaleY="false");
  VirtualLabBuilder.ViewElements.Drawables.Trail trailtempG1(
    maximumPoints=1000,
    lineColor={255,0,0,255},
    nSkip=0);
  VirtualLabBuilder.ViewElements.Drawables.Trail trailtempL1(
    maximumPoints=1000,
    lineColor={0,0,255,255},
    nSkip=0);
  VirtualLabBuilder.ViewElements.Drawables.Trail trailFlowLiq(
    maximumPoints=1000,
    lineColor={0,0,255,255},
    nSkip=0);
  VirtualLabBuilder.ViewElements.Drawables.Trail trailFlowGas(
    maximumPoints=1000,
    lineColor={255,0,0,255},
    nSkip=0);
  VirtualLabBuilder.ViewElements.Drawables.TrailSet trailh(
    N_trails=10,
    lineColor={0,0,255,255},
    maximumPoints=1000,
    nSkip=0);
  VirtualLabBuilder.ViewElements.Drawables.TrailSet trailg(
    N_trails=10,
    lineColor={255,0,0,255},
    maximumPoints=1000,
    nSkip=0);
  VirtualLabBuilder.ViewElements.Drawables.TrailSet trailw(
    lineColor={192,192,192,255},
    N_trails=9,
    maximumPoints=1000,
    nSkip=0);
  
  VirtualLabBuilder.ViewElements.Drawables.PolygonSet gas(
    intFillColor=1,
    N=10,
    nPoints=4,
    intVertexesX={1,1,1,1},
    intVertexesY={1,1,1,1},
    fillColorp={255,0,0,255});
equation 
  connect(MF.pLLeft, root.cLLeft);
  connect(MF.cLLeft, dialog.pLLeft);
  connect(MF.cLRight, DP.pLLeft);
  connect(DP.cLLeft, panelS.pLLeft);
  connect(panelS.cLLeft, panelN.pLLeft);
  connect(panelS.cLRight, gasPressure.pLLeft);
  connect(gasPressure.cLLeft, molarFractCO2.pLLeft);
  connect(lenPipe.cLLeft, pipe1.pLLeft);
  connect(pipe1.cLLeft, pipe2.pLLeft);
  connect(pipe2.cLLeft, pipe3.pLLeft);
  connect(panelN.cLRight, InTempLiq.pLLeft);
  connect(InTempLiq.cLLeft, InTempGas.pLLeft);
  connect(InFlowLiq.cLLeft, InFlowGas.pLLeft);
  connect(PP1.cLLeft, PP2.pLLeft);
  connect(PP2.cLLeft, PP3.pLLeft);
  connect(PP4.cRight, trailtempG1.pLeft);
  connect(PP5.cRight, trailFlowLiq.pLeft);
  connect(PP6.cRight, trailFlowGas.pLeft);
  connect(PP3.cLLeft, PP4.pLLeft);
  connect(PP4.cLLeft, PP5.pLLeft);
  connect(PP5.cLLeft, PP6.pLLeft);
  connect(dialog.cLRight, PP1.pLLeft);
  connect(molarFractCO2.cLLeft, lenPipe.pLLeft);
  connect(InTempGas.cLLeft, InFlowLiq.pLLeft);
  connect(InFlowGas.cLLeft, checkBox.pLLeft);
  connect(DP.cRight, pipe1U.pLeft);
  connect(PP1.cRight, trailh.parent);
  connect(PP2.cRight, trailg.parent);
  connect(PP3.cRight, trailw.parent);
  connect(trailtempG1.cLeft, trailtempL1.pLeft);
  connect(pipe1U.cLeft, liquid.parent);
  connect(liquid.child, pipe1D.pLeft);
  connect(pipe1D.cLeft, gas.parent);
end viewDoublePipeHeatExchanger;

JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.drawSquare

Function that compute the vertices of a square given its center position and side length

Inputs

TypeNameDefaultDescription
Realcentro  
Realxsize  

Outputs

TypeNameDescription
Realx[4] 

Modelica definition

function drawSquare 
  "Function that compute the vertices of a square given its center position and side length" 
  output Real x[4];
  input Real centro;
  input Real xsize;
algorithm 
 x[1] :=centro + xsize/2;
 x[2] :=x[1];
 x[3] :=centro - xsize/2;
 x[4] :=x[3];
end drawSquare;

JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.sectionGas

Function to compute the vertices of the gas CV section

Inputs

TypeNameDefaultDescription
RealpipeDiameter1  

Outputs

TypeNameDescription
Realy[4] 

Modelica definition

function sectionGas 
  "Function to compute the vertices of the gas CV section" 
  output Real y[4];
  input Real pipeDiameter1;
algorithm 
  y[1] :=-pipeDiameter1/2;
  y[2] :=pipeDiameter1/2;
  y[3] :=pipeDiameter1/2;
  y[4] :=-pipeDiameter1/2;
end sectionGas;

JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.sectionLiquid

Function to compute the vertices of the liquid CV section

Inputs

TypeNameDefaultDescription
RealpipeDiameter2  
RealpipeDiameter3  

Outputs

TypeNameDescription
Realy[4] 

Modelica definition

function sectionLiquid 
  "Function to compute the vertices of the liquid CV section" 
  output Real y[4];
  input Real pipeDiameter2;
  input Real pipeDiameter3;
algorithm 
 y[1] :=-(pipeDiameter2/2 + (pipeDiameter3 - pipeDiameter2)/2);
 y[2] :=pipeDiameter2/2 + (pipeDiameter3 - pipeDiameter2)/2;
 y[3] :=pipeDiameter2/2 + (pipeDiameter3 - pipeDiameter2)/2;
 y[4] :=-(pipeDiameter2/2 + (pipeDiameter3 - pipeDiameter2)/2);
end sectionLiquid;

JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.sectionPipe1

Function to compute the vertices of the inner pipe section

Inputs

TypeNameDefaultDescription
RealpipeDiameter1  
RealpipeDiameter2  

Outputs

TypeNameDescription
Realy[4] 

Modelica definition

function sectionPipe1 
  "Function to compute the vertices of the inner pipe section" 
  output Real y[4];
  input Real pipeDiameter1;
  input Real pipeDiameter2;
algorithm 
 y[1] :=-(pipeDiameter1/2 + (pipeDiameter2 - pipeDiameter1)/2);
 y[2] :=pipeDiameter1/2 + (pipeDiameter2 - pipeDiameter1)/2;
 y[3] :=pipeDiameter1/2 + (pipeDiameter2 - pipeDiameter1)/2;
 y[4] :=-(pipeDiameter1/2 + (pipeDiameter2 - pipeDiameter1)/2);
end sectionPipe1;

JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.sectionPipe2

Function to compute the vertices of the outer pipe section

Inputs

TypeNameDefaultDescription
RealpipeDiameter1  
RealpipeDiameter2  
RealpipeDiameter3  

Outputs

TypeNameDescription
Realy[4] 

Modelica definition

function sectionPipe2 
  "Function to compute the vertices of the outer pipe section" 
  output Real y[4];
  input Real pipeDiameter1;
  input Real pipeDiameter2;
  input Real pipeDiameter3;
algorithm 
 y[1] :=-(pipeDiameter3/2 + (pipeDiameter2 - pipeDiameter1)/2);
 y[2] :=pipeDiameter3/2 + (pipeDiameter2 - pipeDiameter1)/2;
 y[3] :=pipeDiameter3/2 + (pipeDiameter2 - pipeDiameter1)/2;
 y[4] :=-(pipeDiameter3/2 + (pipeDiameter2 - pipeDiameter1)/2);
end sectionPipe2;

JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.tempLiquid

Function to compute the liquid color for a certain temperature

Parameters

TypeNameDefaultDescription
Realp3 

Inputs

TypeNameDefaultDescription
Realtemp  

Outputs

TypeNameDescription
Realcolor[4] 

Modelica definition

function tempLiquid 
  "Function to compute the liquid color for a certain temperature" 
  output Real color[4];
  input Real temp;
  parameter Real p = 3;
protected 
  Integer j;
  Boolean breakLoop;
algorithm 
   color[2] :=0;
   color[4] :=255;
   j:=0;
   breakLoop :=false;
  
   while j<9 and (breakLoop == false) loop
    
      if ( temp<(10+273.15+j*p)) then
         color[1]:=10*j;
         color[3] :=255 - 25*j;
         breakLoop :=true;
     end if;
   j :=j + 1;
  end while;
    if (temp>(273.15+40)) then
     color[1] :=100;
     color[3] :=25;
    end if;
end tempLiquid;

JARA2i.CaseStudies.doublePipeHeatExchanger.VirtualLab.tempGas

Function to compute the gas color for a certain temperature

Inputs

TypeNameDefaultDescription
Realtemp  

Outputs

TypeNameDescription
Realcolor[4] 

Modelica definition

function tempGas 
  "Function to compute the gas color for a certain temperature" 
  output Real color[4];
  input Real temp;
protected 
  parameter Real p = 7;
  Integer j;
  Boolean breakLoop;
algorithm 
   color[2] :=0;
   color[4] :=255;
   j:=0;
   breakLoop :=false;
   while j<9 and (breakLoop == false) loop
    
      if ( temp<(60+273.15+j*p)) then
         color[1]:=20*j+70;
         color[3] :=25;
         breakLoop :=true;
     end if;
   j :=j + 1;
  end while;
    if (temp>(273.15+120)) then
     color[1] :=255;
     color[3] :=0;
    end if;
  
end tempGas;

HTML-documentation generated by Dymola Tue Jul 24 19:08:18 2007.