### 18.11.8. USER_STATEPT Example 2

Another application of the user state point function could be to calculate the isentropic expansion efficiency of a device. The following example code shows the usage of the `USER_STATEPT` function to accomplish this task. Input arguments for this routine are the mass flow averaged values of total enthalpy () and entropy () at a reference plane 1 as well as the mass flow averaged values of total enthalpy () and total pressure () at a second reference plane, such as an outlet. The isentropic expansion efficiency is defined as:

| (18–6)

With the isentropic enthalpy, , being the enthalpy .

To calculate the isentropic efficiency, the following input data is provided to `USER_STATEPT`:

- Number of independent input properties: `2`

- Input property names: `Static Entropy`, `Pressure`

- Input property values: `S1`, `P2`

- Output property name: `Air Ideal Gas.Static Enthalpy`

Note: Even though `P2` holds the value of total pressure, the input property name must be called `Pressure`.

The CCL that is required to plot the efficiency in the CFX-Solver Manager is as follows:

    LIBRARY:
      USER ROUTINE DEFINITIONS:
        USER ROUTINE: User Routine 1
          Calling Name = my_eff
          Library Name = efficiency
          Library Path = ..
          Option = User CEL Function
        END
      END
      CEL:
        FUNCTION: Function 1
          Argument Units = [J/kg],[J/kg],[J/kg/K],[Pa]
          Option = User Function
          Result Units = []
          User Routine Name = User Routine 1
        END
        EXPRESSIONS:
          H1 = massFlowAve(Total Enthalpy in Stn Frame)@Inflow
          H2 = massFlowAve(Total Enthalpy in Stn Frame)@Outflow
          S1 = massFlowAve(Static Entropy)@Inflow
          P2 = massFlowAve(Total Pressure in Stn Frame)@Outflow
    #
          Eff = Function 1(H1,H2,S1,P2)
        END
      END
    END
    FLOW: Flow Analysis 1
      OUTPUT CONTROL:
        MONITOR OBJECTS:
          MONITOR BALANCES:
            Option = Full
          END
          MONITOR FORCES:
            Option = Full
          END
          MONITOR PARTICLES:
            Option = Full
          END
          MONITOR RESIDUALS:
            Option = Full
          END
          MONITOR TOTALS:
             Option = Full
          END
          MONITOR POINT: Eff1
            Option = Expression
            Expression Value = Eff
          END
        END
        RESULTS:
          File Compression Level = Default
          Option = Standard
        END
      END
    END

The Fortran source code for the expansion efficiency calculation is given below:

    #include "cfx5ext.h"
    dllexport(my_eff)
          SUBROUTINE MY_EFF (
         &  NLOC,NRET,NARG,RET,ARGS,CRESLT, CZ,DZ,IZ,LZ,RZ)
    CC
    CD User routine: Compute isentropic efficiency
    CC
    CC --------------------
    CC        Input
    CC --------------------
    CC
    CC  NLOC   - size of current locale
    CC  NRET   - number of components in result
    CC  NARG   - number of arguments in call
    CC  ARGS() - (NLOC,NARG) argument values
    CC
    CC --------------------
    CC      Modified
    CC --------------------
    CC
    CC  Stacks possibly.
    CC
    CC --------------------
    CC        Output
    CC --------------------
    CC
    CC  RET()  - (NLOC,NRET) return values
    CC  CRESLT - 'GOOD' for success
    CC
    CC --------------------
    CC       Details
    CC --------------------
    CC
    CC  Template routine for user state point code
    CC
    CC======================================================================
    C
    C ------------------------------
    C        Argument list
    C ------------------------------
    C
          INTEGER   NLOC,NARG,NRET
          CHARACTER CRESLT*(*)
          REAL      ARGS(NLOC,NARG), RET(NLOC,NRET)
    C
          INTEGER IZ(*)
          CHARACTER CZ(*)*(1)
          DOUBLE PRECISION DZ(*)
          LOGICAL LZ(*)
          REAL RZ(*)
    C
    C ------------------------------
    C        External routines
    C ------------------------------
    C
    C ------------------------------
    C        Local Parameters
    C ------------------------------
    C
    C ------------------------------
    C        Local Variables
    C ------------------------------
    C
          INTEGER        NPROPIND
          CHARACTER*(80) CPROPCALC, CPROPIND(2)
    C
          REAL           RPROPIND(2), H1, H2, HIS, S1, SN, P2, DHIS, DHLOC,
         &               ETA_E
    C
    C ------------------------------
    C        Stack pointers
    C ------------------------------
    C
    C=======================================================================
    C
    C ---------------------------
    C    Executable Statements
    C ---------------------------
    C
    C---- Initialize RET(1:NLOC*NRET) to zero.
    C
          CALL SET_A_0(RET,NLOC*NRET)
    C
    C-----------------------------------------------------------------------
    C     Averaged values of inlet total enthalpy, inlet entropy, outlet
    C     total enthalpy and outlet total pressure are passed into his
    C     routine.
    C     Mass flow averaging is used.
    C-----------------------------------------------------------------------
    C
          H1 = ARGS(NLOC,1)
          H2 = ARGS(NLOC,2)
          S1 = ARGS(NLOC,3)
          P2 = ARGS(NLOC,4)
    C
    C-----------------------------------------------------------------------
    C     Compute isentropic efficiency
    C-----------------------------------------------------------------------
    C
    C---- Number of input properties
    C
          NPROPIND    = 2
    C
    C---- Input properties are entropy and pressure
    C
          CPROPIND(1) = 'Static Entropy'
          CPROPIND(2) = 'Pressure'
    C
    C---- Input values are s1 and p2
    C
          RPROPIND(1) = S1
          RPROPIND(2) = P2
    C
    C---- Compute isentropic enthalpy, h = h(s1,p2)
    C
          CPROPCALC = 'Air Ideal Gas.Static Enthalpy'
          CALL USER_STATEPT(HIS,CPROPCALC,CPROPIND,RPROPIND,
         &                  NPROPIND,'SKIP',CRESLT, CZ,DZ,IZ,LZ,RZ)
    C
    C---- Expansion efficiency
    C
          DHIS = HIS - H1
          DHLOC = H2 - H1
    C
          IF (DHIS.LT.0.0 .AND.DHLOC.LT.0.0 .AND.DHIS.LT.DHLOC) THEN
            ETA_E = (H2 - H1)/(HIS - H1 + SN)
          ELSE
            ETA_E = 1.0
          ENDIF
    C
    C-----------------------------------------------------------------------
    C
    C---- Copy output property value to RET(1:NLOC,1).
    C     --> NLOC = 1
    C
          RET(1,1) = ETA_E
    C
    C---- Set success flag.
    C
          CRESLT = 'GOOD'
    C
    C-----------------------------------------------------------------------
          END

Release 18.2 - © ANSYS, Inc. All rights reserved.