def cyccalc(self, fileprefix="", fileformat="", **kwargs):
    """Calculates results from a cyclic harmonic mode-superposition analysis

    APDL Command: CYCCALC
    using the specifications defined by CYCSPEC.

    Parameters
    ----------
    fileprefix
        Each result table (corresponding to each CYCSPEC specification) is
        written to a file beginning with FilePrefix. If blank (default),
        the result tables are written to the output file.

    fileformat
        If FilePrefix is specified, then use FileFormat to specify the
        format of the file to be written:

        FORM - Formatted file (default)

        CSV - Comma-separated value file

    Notes
    -----
    CYCCALC loops through the specification given by CYCSPEC and computes
    the requested outputs. The outputs are given in a table format, with
    the rows corresponding to each frequency solution from the harmonic
    analysis, and the columns corresponding to each sector. The table
    entries are the maximum value of the specified quantity at the
    specified location in the sector. In addition, columns containing the
    maximum value at the frequency, the sector in which it occurs, and the
    node in the sector at which it occurs are output.

    If FilePrefix is specified, a file is created for each output table
    with the name FilePrefix_node_type.ext, where node is the node number
    or component name, type is the item/component requested, and the file
    extension .ext is either .txt or .csv, depending on FileFormat.

    A SET command must precede the CYCCALC command.

    The CYCCALC results are based on the currently active RSYS, SHELL,
    LAYER, and AVPRIN settings.
    """
    command = f"CYCCALC,{fileprefix},{fileformat}"
    return self.run(command, **kwargs)