FCSys.Regions.CaFPs

Cathode flow plates

Information

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

Package Content

NameDescription
FCSys.Regions.CaFPs.CaFP CaFP Cathode flow plate

FCSys.Regions.CaFPs.CaFP FCSys.Regions.CaFPs.CaFP

Cathode flow plate FCSys.Regions.CaFPs.CaFP

Information

This model represents the cathode flow plate of a PEMFC. The x axis extends from the anode to the cathode. Fluid is considered to travel in the y direction, with the associated length factor (ky) greater than one (by default) to represent a serpentine channel. The model is bidirectional, meaning that either yNegative or yPositive can be used as the inlet. By default, the cross-sectional area in the yz plane is 50 cm2.

The solid and the fluid phases are assumed to exist in the same subregions, even though a typical flow plate is impermeable to the fluid (except for the channel). In theory, it is possible to discretize the flow plate into smaller subregions for the bulk solid, lands, and valleys. However, this would significantly increase the mathematical size of the model. Currently, that level of detail is best left to computational fluid dynamics.

The x axis-component of the transport factor (kx) for the gas and the liquid should generally be less than one because the transport distance into/out of the GDL is less that half the thickness of the flow plate. It is equal to the product of two ratios:

  1. the depth of the channels to the thickness of the flow plate
  2. the product of the total area of the flow plate in the yz plane (land + valleys) and the fraction of the total volume available for the fluid (ε) to the area of the valleys in the yz plane
The default is ε/2.

See Species.'C+'.Graphite.Fixed regarding the default specific heat capacity. The default thermal resistivity of the carbon (θ = U.m*U.K/(95*U.W)) and the electrical conductivity (σ = U.S/(1.470e-3*U.cm)) are that of Entegris/Poco Graphite AXF-5Q [Entegris2012]. There is additional data in the text layer of the AnFP model.

For more information, please see the Region model.

Extends from Region (Base model for a 3D array of subregions).

Parameters

TypeNameDefaultDescription
replaceable model SubregionFCSys.Subregions.SubregionNo…Base subregion model
LengthD1.5*U.mmHydraulic diameter of the channel [L]
Geometry
LengthL_x[:]{8}*U.mmLengths along the x axis [L]
LengthL_y[:]{8}*U.cmLengths along the y axis [L]
LengthL_z[:]{6.25}*U.cmLengths across the z axis [L]
NumberAbsoluteepsilon0.0625Fraction of volume for the fluid [1]
Assumptions
Included transport axes
BooleaninclTransXtrueX
BooleaninclTransYtrueY
BooleaninclTransZfalseZ

Connectors

TypeNameDescription
replaceable model SubregionBase subregion model
BoundaryBusxNegative[n_y, n_z]Negative boundary along the x axis
BoundaryBusxPositive[n_y, n_z]Positive boundary along the x axis
BoundaryBusyNegative[n_x, n_z]Negative boundary along the y axis
BoundaryBusyPositive[n_x, n_z]Positive boundary along the y axis
BoundaryBuszNegative[n_x, n_y]Negative boundary along the z axis
BoundaryBuszPositive[n_x, n_y]Positive boundary along the z axis

Modelica definition

model CaFP "Cathode flow plate"
  import Modelica.Constants.inf;
  // extends FCSys.Icons.Names.Top4;

  extends Region(
    L_x={8}*U.mm,
    L_y={8}*U.cm,
    L_z={6.25}*U.cm,
    final inclTransX=true,
    final inclTransY=true,
    inclTransZ=false,
    redeclare replaceable model Subregion = FCSys.Subregions.SubregionNoIonomer
        (
        common(k_Phi={1e7,inf,1e7},k_Q=1e5),
        gasLiq(k_Phi={inf,1e6,inf},k_Q=inf),
        gas(
          common(k_Phi={inf,inf,inf}),
          k={epsilon/2,11,1/11},
          inclH2O=true,
          inclN2=true,
          inclO2=true,
          H2O(
            upstreamX=false,
            Nu_Phi={4,16*A[Axis.z]*epsilon/D^2,4},
            zeta=100*Characteristics.H2O.Gas.zeta(),
            T(stateSelect=StateSelect.always)),
          N2(
            upstreamX=false,
            Nu_Phi={4,16*A[Axis.z]*epsilon/D^2,4},
            zeta=100*Characteristics.N2.Gas.zeta(),
            initEnergy=Init.none,
            I(each stateSelect=StateSelect.always, each fixed=true)),
          O2(
            upstreamX=false,
            Nu_Phi={4,16*A[Axis.z]*epsilon/D^2,4},
            zeta=100*Characteristics.O2.Gas.zeta(),
            initEnergy=Init.none)),
        graphite(
          'inclC+'=true,
          'incle-'=true,
          'C+'(theta=U.m*U.K/(95*U.W),epsilon=1 - epsilon),
          'e-'(sigma=U.S/(1.470e-3*U.cm))),
        liquid(
          k={epsilon/2,11,1/11},
          inclH2O=true,
          H2O(
            upstreamX=false,
            Nu_Phi={4,16*A[Axis.z]*epsilon/D^2,4},
            epsilon_IC=1e-5)),
        volume(inclCapillary=false)));

  parameter Q.NumberAbsolute epsilon(nominal=1) = 0.0625 
    "Fraction of volume for the fluid";

  parameter Q.Length D=1.5*U.mm "Hydraulic diameter of the channel";

protected 
  Q.Velocity phi_states_H2O[:, :, :](
    each stateSelect=StateSelect.always,
    each start=0,
    each fixed=true) = subregions[:, 2:n_y, :].gas.H2O.phi[2] if n_y > 1 
    "Forced states for H2O";
  Q.Velocity phi_states_O2[:, :, :](
    each stateSelect=StateSelect.always,
    each start=0,
    each fixed=true) = subregions[:, 2:n_y, :].gas.O2.phi[2] if n_y > 1 
    "Forced states for O2";
  // Note:  These variables avoid dynamic state selection in Dymola 2014.

  outer Conditions.Environment environment "Environmental conditions";

  // See AnFPs.AnFP for data on additional materials.

end CaFP;