## FCSys.Assemblies.Cells

Single-cell PEMFC models

### Information

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

### Package Content

Name | Description
--- | ---
Examples | Examples
Cell | Single-cell PEMFC
SimpleCell | Simplified model of a single-cell PEMFC

## FCSys.Assemblies.Cells.Cell

Single-cell PEMFC

### 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

Type | Name | Default | Description
--- | --- | --- | ---
Geometry
Length | L_y[:] | {8}*U.cm | Lengths of segments in the y direction [L]
Length | L_z[:] | {6.25}*U.cm | Lengths of segments in the z direction [L]
Layers
AnFP | anFP | redeclare Regions.AnFPs.AnFP… | Anode flow plate
AnGDL | anGDL | redeclare Regions.AnGDLs.AnG… | Anode gas diffusion layer
AnCL | anCL | redeclare Regions.AnCLs.AnCL… | Anode catalyst layer
PEM | PEM | redeclare Regions.PEMs.PEM P… | Proton exchange membrane
CaCL | caCL | redeclare Regions.CaCLs.CaCL… | Cathode catalyst layer
CaGDL | caGDL | redeclare Regions.CaGDLs.CaG… | Cathode gas diffusion layer
CaFP | caFP | redeclare Regions.CaFPs.CaFP… | Cathode flow plate
Assumptions
Boolean | inclLiq | true | Include liquid H2O
Boolean | inclN2 | true | Include N2

### Connectors

Type | Name | Description
--- | --- | ---
BoundaryBus | an[n_y, n_z] | Interface with the anode end plate
BoundaryBus | ca[n_y, n_z] | Interface with the cathode end plate
BoundaryBus | anNegative[anFP.n_x, n_z] | Negative anode fluid port
BoundaryBus | caNegative[caFP.n_x, n_z] | Negative cathode fluid port
BoundaryBus | anPositive[anFP.n_x, n_z] | Positive anode fluid port
BoundaryBus | caPositive[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

Simplified model of a single-cell PEMFC

### 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

Type | Name | Default | Description
--- | --- | --- | ---
Geometry
Length | L_y[:] | {8}*U.cm | Lengths of segments in the y direction [L]
Length | L_z[:] | {6.25}*U.cm | Lengths of segments in the z direction [L]
Layers
AnFP | anFP | redeclare Regions.AnFPs.AnFP… | Anode flow plate
AnCGDL | anCGDL |  | Anode catalyst and gas diffusion layer
PEM | PEM | redeclare Regions.PEMs.PEM P… | Proton exchange membrane
CaCGDL | caCGDL |  | Cathode catalyst and gas diffusion layer
CaFP | caFP | redeclare Regions.CaFPs.CaFP… | Cathode flow plate
Assumptions
Boolean | inclLiq | false | Include liquid H2O
Boolean | inclN2 | true | Include N2

### Connectors

Type | Name | Description
--- | --- | ---
BoundaryBus | an[n_y, n_z] | Interface with the anode end plate
BoundaryBus | ca[n_y, n_z] | Interface with the cathode end plate
BoundaryBus | anNegative[anFP.n_x, n_z] | Negative anode fluid port
BoundaryBus | caNegative[caFP.n_x, n_z] | Negative cathode fluid port
BoundaryBus | anPositive[anFP.n_x, n_z] | Positive anode fluid port
BoundaryBus | caPositive[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)))
        "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(gas(each inclN2=inclN2), liquid(each inclH2O=inclLiq)))
        "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;