FCSys.Assemblies.Cells

Single-cell PEMFC models

Information

Extends from Modelica.Icons.Package (Icon for standard packages).

Package Content

NameDescription
FCSys.Assemblies.Cells.Examples Examples Examples
FCSys.Assemblies.Cells.Cell Cell Single-cell PEMFC
FCSys.Assemblies.Cells.SimpleCell SimpleCell Simplified model of a single-cell PEMFC

FCSys.Assemblies.Cells.Cell FCSys.Assemblies.Cells.Cell

Single-cell PEMFC FCSys.Assemblies.Cells.Cell

Information

    

This is a model of a single-cell proton exchange membrane fuel cell (PEMFC). An overview of a PEMFC is given in the top-level documentation of FCSys.

Extends from FCSys.Icons.Cell (Icon for a cell).

Parameters

TypeNameDefaultDescription
Geometry
LengthL_y[:]{8}*U.cmLengths of segments in the y direction [L]
LengthL_z[:]{6.25}*U.cmLengths of segments in the z direction [L]
Layers
AnFPanFPredeclare Regions.AnFPs.AnFP…Anode flow plate
AnGDLanGDLredeclare Regions.AnGDLs.AnG…Anode gas diffusion layer
AnCLanCLredeclare Regions.AnCLs.AnCL…Anode catalyst layer
PEMPEMredeclare Regions.PEMs.PEM P…Proton exchange membrane
CaCLcaCLredeclare Regions.CaCLs.CaCL…Cathode catalyst layer
CaGDLcaGDLredeclare Regions.CaGDLs.CaG…Cathode gas diffusion layer
CaFPcaFPredeclare Regions.CaFPs.CaFP…Cathode flow plate
Assumptions
BooleaninclLiqtrueInclude liquid H2O
BooleaninclN2trueInclude N2

Connectors

TypeNameDescription
BoundaryBusan[n_y, n_z]Interface with the anode end plate
BoundaryBusca[n_y, n_z]Interface with the cathode end plate
BoundaryBusanNegative[anFP.n_x, n_z]Negative anode fluid port
BoundaryBuscaNegative[caFP.n_x, n_z]Negative cathode fluid port
BoundaryBusanPositive[anFP.n_x, n_z]Positive anode fluid port
BoundaryBuscaPositive[caFP.n_x, n_z]Positive cathode fluid port

Modelica definition

model Cell "Single-cell PEMFC"
  extends FCSys.Icons.Cell;

  // Geometric parameters
  parameter Q.Length L_y[:]={8}*U.cm "Lengths of segments in the y direction";
  parameter Q.Length L_z[:]={6.25}*U.cm 
    "Lengths of segments in the z direction";
  final parameter Integer n_y=size(L_y, 1) 
    "Number of subregions in the y direction";
  final parameter Integer n_z=size(L_z, 1) 
    "Number of subregions in the z direction";

  // Assumptions
  parameter Boolean inclLiq=true "Include liquid H2O";
  parameter Boolean inclN2=true "Include N2";

  Connectors.BoundaryBus an[n_y, n_z] "Interface with the anode end plate";
  Connectors.BoundaryBus ca[n_y, n_z] "Interface with the cathode end plate";
  Connectors.BoundaryBus anNegative[anFP.n_x, n_z] "Negative anode fluid port";
  Connectors.BoundaryBus caNegative[caFP.n_x, n_z] 
    "Negative cathode fluid port";
  Connectors.BoundaryBus anPositive[anFP.n_x, n_z] "Positive anode fluid port";
  Connectors.BoundaryBus caPositive[caFP.n_x, n_z] 
    "Positive cathode fluid port";

  replaceable Regions.AnFPs.AnFP anFP(
    final L_y=L_y,
    final L_z=L_z,
    subregions(liquid(each inclH2O=inclLiq))) "Anode flow plate";
  replaceable Regions.AnGDLs.AnGDL anGDL(
    final L_y=L_y,
    final L_z=L_z,
    subregions(liquid(each inclH2O=inclLiq))) "Anode gas diffusion layer";
  replaceable Regions.AnCLs.AnCL anCL(
    final L_y=L_y,
    final L_z=L_z,
    subregions(liquid(each inclH2O=inclLiq))) "Anode catalyst layer";
  replaceable Regions.PEMs.PEM PEM(final L_y=L_y, final L_z=L_z) 
    "Proton exchange membrane";
  replaceable Regions.CaCLs.CaCL caCL(
    final L_y=L_y,
    final L_z=L_z,
    subregions(gas(each inclN2=inclN2), liquid(each inclH2O=inclLiq))) 
    "Cathode catalyst layer";
  replaceable Regions.CaGDLs.CaGDL caGDL(
    final L_y=L_y,
    final L_z=L_z,
    subregions(gas(each inclN2=inclN2), liquid(each inclH2O=inclLiq))) 
    "Cathode gas diffusion layer";
  replaceable Regions.CaFPs.CaFP caFP(
    final L_y=L_y,
    final L_z=L_z,
    subregions(gas(each inclN2=inclN2), liquid(each inclH2O=inclLiq))) 
    "Cathode flow plate";

equation 
  // Internal connections (between layers)
  connect(anFP.xPositive, anGDL.xNegative);
  connect(anGDL.xPositive, anCL.xNegative);
  connect(anCL.xPositive, PEM.xNegative);
  connect(PEM.xPositive, caCL.xNegative);
  connect(caCL.xPositive, caGDL.xNegative);
  connect(caGDL.xPositive, caFP.xNegative);

  // External connections
  connect(an, anFP.xNegative);
  connect(anFP.yNegative, anNegative);
  connect(anFP.yPositive, anPositive);
  connect(caFP.xPositive, ca);
  connect(caFP.yNegative, caNegative);
  connect(caFP.yPositive, caPositive);
  // Note:  This model must be marked as structurally incomplete to pass the
  // check in Dymola 2014.
end Cell;

FCSys.Assemblies.Cells.SimpleCell FCSys.Assemblies.Cells.SimpleCell

Simplified model of a single-cell PEMFC FCSys.Assemblies.Cells.SimpleCell

Information

This is a model of a single-cell proton exchange membrane fuel cell (PEMFC). The catalyst layers and gas diffusion layers are integrated on each side to reduce the complexity of the model. All the phases are assumed to have the same temperature in each layer. An overview of a PEMFC is given in the top-level documentation of FCSys.

Extends from FCSys.Icons.Cell (Icon for a cell).

Parameters

TypeNameDefaultDescription
Geometry
LengthL_y[:]{8}*U.cmLengths of segments in the y direction [L]
LengthL_z[:]{6.25}*U.cmLengths of segments in the z direction [L]
Layers
AnFPanFPredeclare Regions.AnFPs.AnFP…Anode flow plate
AnCGDLanCGDL Anode catalyst and gas diffusion layer
PEMPEMredeclare Regions.PEMs.PEM P…Proton exchange membrane
CaCGDLcaCGDL Cathode catalyst and gas diffusion layer
CaFPcaFPredeclare Regions.CaFPs.CaFP…Cathode flow plate
Assumptions
BooleaninclLiqfalseInclude liquid H2O
BooleaninclN2trueInclude N2

Connectors

TypeNameDescription
BoundaryBusan[n_y, n_z]Interface with the anode end plate
BoundaryBusca[n_y, n_z]Interface with the cathode end plate
BoundaryBusanNegative[anFP.n_x, n_z]Negative anode fluid port
BoundaryBuscaNegative[caFP.n_x, n_z]Negative cathode fluid port
BoundaryBusanPositive[anFP.n_x, n_z]Positive anode fluid port
BoundaryBuscaPositive[caFP.n_x, n_z]Positive cathode fluid port

Modelica definition

model SimpleCell "Simplified model of a single-cell PEMFC"
  import Modelica.Constants.inf;
  extends FCSys.Icons.Cell;

  // Geometric parameters
  parameter Q.Length L_y[:]={8}*U.cm "Lengths of segments in the y direction";
  parameter Q.Length L_z[:]={6.25}*U.cm 
    "Lengths of segments in the z direction";
  final parameter Integer n_y=size(L_y, 1) 
    "Number of subregions in the y direction";
  final parameter Integer n_z=size(L_z, 1) 
    "Number of subregions in the z direction";

  // Assumptions
  parameter Boolean inclLiq=false "Include liquid H2O";
  parameter Boolean inclN2=true "Include N2";

  Connectors.BoundaryBus an[n_y, n_z] "Interface with the anode end plate";
  Connectors.BoundaryBus ca[n_y, n_z] "Interface with the cathode end plate";
  Connectors.BoundaryBus anNegative[anFP.n_x, n_z] "Negative anode fluid port";
  Connectors.BoundaryBus caNegative[caFP.n_x, n_z] 
    "Negative cathode fluid port";
  Connectors.BoundaryBus anPositive[anFP.n_x, n_z] "Positive anode fluid port";
  Connectors.BoundaryBus caPositive[caFP.n_x, n_z] 
    "Positive cathode fluid port";

  replaceable Regions.AnFPs.AnFP anFP(
    final L_y=L_y,
    final L_z=L_z,
    subregions(
      common(each k_Q=0),
      gas(common(each k_Q=inf), H2(each initEnergy=Init.none, T(each 
              stateSelect=StateSelect.default))),
      liquid(each inclH2O=inclLiq,H2O(each initEnergy=Init.none,T(each 
              stateSelect=StateSelect.default))))) "Anode flow plate";

  FCSys.Regions.AnCLs.AnCGDL anCGDL(
    final L_y=L_y,
    final L_z=L_z,
    subregions(liquid(each inclH2O=inclLiq,H2O(each initEnergy=Init.none, T(
              each stateSelect=StateSelect.default))))) 
    "Anode catalyst and gas diffusion layer";

  replaceable Regions.PEMs.PEM PEM(final L_y=L_y, final L_z=L_z) 
    "Proton exchange membrane";
  FCSys.Regions.CaCLs.CaCGDL caCGDL(
    final L_y=L_y,
    final L_z=L_z,
    subregions(liquid(each inclH2O=inclLiq,H2O(each initEnergy=Init.none, T(
              each stateSelect=StateSelect.default))))) 
    "Cathode catalyst and gas diffusion layer";

  replaceable Regions.CaFPs.CaFP caFP(
    final L_y=L_y,
    final L_z=L_z,
    subregions(
      common(each k_Q=0),
      gas(
        common(each k_Q=inf),
        each inclN2=inclN2,
        H2O(each initEnergy=Init.none,T(each stateSelect=StateSelect.default))),

      liquid(each inclH2O=inclLiq,H2O(each initEnergy=Init.none, T(each 
              stateSelect=StateSelect.default))))) "Cathode flow plate";

protected 
  outer Conditions.Environment environment "Environmental conditions";

equation 
  // Internal connections (between layers)
  connect(anFP.xPositive, anCGDL.xNegative);
  connect(anCGDL.xPositive, PEM.xNegative);
  connect(PEM.xPositive, caCGDL.xNegative);
  connect(caCGDL.xPositive, caFP.xNegative);

  // External connections
  connect(an, anFP.xNegative);
  connect(anFP.yNegative, anNegative);
  connect(anFP.yPositive, anPositive);

  connect(caFP.xPositive, ca);
  connect(caFP.yNegative, caNegative);
  connect(caFP.yPositive, caPositive);

  // Note:  This model must be marked as structurally incomplete to pass the
  // check in Dymola 2014.
end SimpleCell;