# autogenerated file, do not modify

from os import PathLike, curdir
from typing import Union

from flopy.mf6.data.mfdatautil import ArrayTemplateGenerator, ListTemplateGenerator
from flopy.mf6.mfpackage import MFChildPackages, MFPackage


class ModflowGwfcsub(MFPackage):
    """
    ModflowGwfcsub defines a CSUB package.

    Parameters
    ----------
    model
        Model that this package is a part of. Package is automatically
        added to model when it is initialized.
    loading_package : bool, default False
        Do not set this parameter. It is intended for debugging and internal
        processing purposes only.
    boundnames : keyword
        keyword to indicate that boundary names may be provided with the list of csub
        cells.
    print_input : keyword
        keyword to indicate that the list of csub information will be written to the
        listing file immediately after it is read.
    save_flows : keyword
        keyword to indicate that cell-by-cell flow terms will be written to the file
        specified with 'budget save file' in output control.
    gammaw : double precision
        unit weight of water. for freshwater, gammaw is 9806.65 newtons/cubic meters or
        62.48 lb/cubic foot in si and english units, respectively. by default, gammaw
        is 9806.65 newtons/cubic meters.
    beta : double precision
        compressibility of water. typical values of beta are 4.6512e-10 1/pa or
        2.2270e-8 lb/square foot in si and english units, respectively. by default,
        beta is 4.6512e-10 1/pa.
    head_based : keyword
        keyword to indicate the head-based formulation will be used to simulate coarse-
        grained aquifer materials and no-delay and delay interbeds. specifying
        head_based also specifies the initial_preconsolidation_head option.
    initial_preconsolidation_head : keyword
        keyword to indicate that preconsolidation heads will be specified for no-delay
        and delay interbeds in the packagedata block. if the
        specified_initial_interbed_state option is specified in the options block,
        user-specified preconsolidation heads in the packagedata block are absolute
        values. otherwise, user-specified preconsolidation heads in the packagedata
        block are relative to steady-state or initial heads.
    ndelaycells : integer
        number of nodes used to discretize delay interbeds. if not specified, then a
        default value of 19 is assigned.
    compression_indices : keyword
        keyword to indicate that the recompression (cr) and compression (cc) indices
        are specified instead of the elastic specific storage (sse) and inelastic
        specific storage (ssv) coefficients. if not specified, then elastic specific
        storage (sse) and inelastic specific storage (ssv) coefficients must be
        specified.
    update_material_properties : keyword
        keyword to indicate that the thickness and void ratio of coarse-grained and
        interbed sediments (delay and no-delay) will vary during the simulation. if not
        specified, the thickness and void ratio of coarse-grained and interbed
        sediments will not vary during the simulation.
    cell_fraction : keyword
        keyword to indicate that the thickness of interbeds will be specified in terms
        of the fraction of cell thickness. if not specified, interbed thicknness must
        be specified.
    specified_initial_interbed_state : keyword
        keyword to indicate that absolute preconsolidation stresses (heads) and delay
        bed heads will be specified for interbeds defined in the packagedata block. the
        specified_initial_interbed_state option is equivalent to specifying the
        specified_initial_preconsolitation_stress and specified_initial_delay_head. if
        specified_initial_interbed_state is not specified then preconsolidation stress
        (head) and delay bed head values specified in the packagedata block are
        relative to simulated values of the first stress period if steady-state or
        initial stresses and gwf heads if the first stress period is transient.
    specified_initial_preconsolidation_stress : keyword
        keyword to indicate that absolute preconsolidation stresses (heads) will be
        specified for interbeds defined in the packagedata block. if
        specified_initial_preconsolitation_stress and specified_initial_interbed_state
        are not specified then preconsolidation stress (head) values specified in the
        packagedata block are relative to simulated values if the first stress period
        is steady-state or initial stresses (heads) if the first stress period is
        transient.
    specified_initial_delay_head : keyword
        keyword to indicate that absolute initial delay bed head will be specified for
        interbeds defined in the packagedata block. if specified_initial_delay_head and
        specified_initial_interbed_state are not specified then delay bed head values
        specified in the packagedata block are relative to simulated values if the
        first stress period is steady-state or initial gwf heads if the first stress
        period is transient.
    effective_stress_lag : keyword
        keyword to indicate the effective stress from the previous time step will be
        used to calculate specific storage values. this option can 1) help with
        convergence in models with thin cells and water table elevations close to land
        surface; 2) is identical to the approach used in the subwt package for
        modflow-2005; and 3) is only used if the effective-stress formulation is being
        used. by default, current effective stress values are used to calculate
        specific storage values.
    strainib_filerecord : (interbedstrain_filename)
        * interbedstrain_filename : string
                name of the comma-separated-values output file to write final interbed strain
                information.

    straincg_filerecord : (coarsestrain_filename)
        * coarsestrain_filename : string
                name of the comma-separated-values output file to write final coarse-grained
                material strain information.

    compaction_filerecord : (compaction_filename)
        * compaction_filename : string
                name of the binary output file to write compaction information.

    compaction_elastic_filerecord : (elastic_compaction_filename)
        * elastic_compaction_filename : string
                name of the binary output file to write elastic interbed compaction
                information.

    compaction_inelastic_filerecord : (inelastic_compaction_filename)
        * inelastic_compaction_filename : string
                name of the binary output file to write inelastic interbed compaction
                information.

    compaction_interbed_filerecord : (interbed_compaction_filename)
        * interbed_compaction_filename : string
                name of the binary output file to write interbed compaction information.

    compaction_coarse_filerecord : (coarse_compaction_filename)
        * coarse_compaction_filename : string
                name of the binary output file to write elastic coarse-grained material
                compaction information.

    zdisplacement_filerecord : (zdisplacement_filename)
        * zdisplacement_filename : string
                name of the binary output file to write z-displacement information.

    package_convergence_filerecord : (package_convergence_filename)
        * package_convergence_filename : string
                name of the comma spaced values output file to write package convergence
                information.

    timeseries : record ts6 filein ts6_filename
        Contains data for the ts package. Data can be passed as a dictionary to the ts
        package with variable names as keys and package data as values. Data for the
        timeseries variable is also acceptable. See ts package documentation for more
        information.
    observations : record obs6 filein obs6_filename
        Contains data for the obs package. Data can be passed as a dictionary to the
        obs package with variable names as keys and package data as values. Data for
        the observations variable is also acceptable. See obs package documentation for
        more information.
    ninterbeds : integer
        is the number of csub interbed systems.  more than 1 csub interbed systems can
        be assigned to a gwf cell; however, only 1 gwf cell can be assigned to a single
        csub interbed system.
    maxsig0 : integer
        is the maximum number of cells that can have a specified stress offset.  more
        than 1 stress offset can be assigned to a gwf cell. by default, maxsig0 is 0.
    cg_ske_cr : [double precision]
        is the initial elastic coarse-grained material specific storage or
        recompression index. the recompression index is specified if
        compression_indices is specified in the options block.  specified or calculated
        elastic coarse-grained material specific storage values are not adjusted from
        initial values if head_based is specified in the options block.
    cg_theta : [double precision]
        is the initial porosity of coarse-grained materials.
    sgm : [double precision]
        is the specific gravity of moist or unsaturated sediments.  if not specified,
        then a default value of 1.7 is assigned.
    sgs : [double precision]
        is the specific gravity of saturated sediments. if not specified, then a
        default value of 2.0 is assigned.
    packagedata : [(icsubno, cellid, cdelay, pcs0, thick_frac, rnb, ssv_cc, sse_cr, theta, kv, h0, boundname)]
        * icsubno : integer
                integer value that defines the CSUB interbed number associated with the
                specified PACKAGEDATA data on the line. CSUBNO must be greater than zero and
                less than or equal to NINTERBEDS.  CSUB information must be specified for every
                CSUB cell or the program will terminate with an error.  The program will also
                terminate with an error if information for a CSUB interbed number is specified
                more than once.
        * cellid : [integer]
                is the cell identifier, and depends on the type of grid that is used for the
                simulation.  For a structured grid that uses the DIS input file, CELLID is the
                layer, row, and column.   For a grid that uses the DISV input file, CELLID is
                the layer and CELL2D number.  If the model uses the unstructured discretization
                (DISU) input file, CELLID is the node number for the cell.
        * cdelay : string
                character string that defines the subsidence delay type for the interbed.
                Possible subsidence package CDELAY strings include: NODELAY--character keyword
                to indicate that delay will not be simulated in the interbed.  DELAY--character
                keyword to indicate that delay will be simulated in the interbed.
        * pcs0 : double precision
                is the initial offset from the calculated initial effective stress or initial
                preconsolidation stress in the interbed, in units of height of a column of
                water. PCS0 is the initial preconsolidation stress if
                SPECIFIED_INITIAL_INTERBED_STATE or SPECIFIED_INITIAL_PRECONSOLIDATION_STRESS
                are specified in the OPTIONS block. If HEAD_BASED is specified in the OPTIONS
                block, PCS0 is the initial offset from the calculated initial head or initial
                preconsolidation head in the CSUB interbed and the initial preconsolidation
                stress is calculated from the calculated initial effective stress or calculated
                initial geostatic stress, respectively.
        * thick_frac : double precision
                is the interbed thickness or cell fraction of the interbed. Interbed thickness
                is specified as a fraction of the cell thickness if CELL_FRACTION is specified
                in the OPTIONS block.
        * rnb : double precision
                is the interbed material factor equivalent number of interbeds in the interbed
                system represented by the interbed. RNB must be greater than or equal to 1 if
                CDELAY is DELAY. Otherwise, RNB can be any value.
        * ssv_cc : double precision
                is the initial inelastic specific storage or compression index of the interbed.
                The compression index is specified if COMPRESSION_INDICES is specified in the
                OPTIONS block. Specified or calculated interbed inelastic specific storage
                values are not adjusted from initial values if HEAD_BASED is specified in the
                OPTIONS block.
        * sse_cr : double precision
                is the initial elastic coarse-grained material specific storage or
                recompression index of the interbed. The recompression index is specified if
                COMPRESSION_INDICES is specified in the OPTIONS block. Specified or calculated
                interbed elastic specific storage values are not adjusted from initial values
                if HEAD_BASED is specified in the OPTIONS block.
        * theta : double precision
                is the initial porosity of the interbed.
        * kv : double precision
                is the vertical hydraulic conductivity of the delay interbed. KV must be
                greater than 0 if CDELAY is DELAY. Otherwise, KV can be any value.
        * h0 : double precision
                is the initial offset from the head in cell cellid or the initial head in the
                delay interbed. H0 is the initial head in the delay bed if
                SPECIFIED_INITIAL_INTERBED_STATE or SPECIFIED_INITIAL_DELAY_HEAD are specified
                in the OPTIONS block. H0 can be any value if CDELAY is NODELAY.
        * boundname : string
                name of the CSUB cell.  BOUNDNAME is an ASCII character variable that can
                contain as many as 40 characters.  If BOUNDNAME contains spaces in it, then the
                entire name must be enclosed within single quotes.

    stress_period_data : [(cellid, sig0)]
        * cellid : [integer]
                is the cell identifier, and depends on the type of grid that is used for the
                simulation.  For a structured grid that uses the DIS input file, CELLID is the
                layer, row, and column.   For a grid that uses the DISV input file, CELLID is
                the layer and CELL2D number.  If the model uses the unstructured discretization
                (DISU) input file, CELLID is the node number for the cell.
        * sig0 : double precision
                is the stress offset for the cell. SIG0 is added to the calculated geostatic
                stress for the cell. SIG0 is specified only if MAXSIG0 is specified to be
                greater than 0 in the DIMENSIONS block. If the Options block includes a
                TIMESERIESFILE entry (see the 'Time-Variable Input' section), values can be
                obtained from a time series by entering the time-series name in place of a
                numeric value.


    filename : str or PathLike, optional
        Name or path of file where this package is stored.
    pname : str, optional
        Package name.
    **kwargs
        Extra keywords for :class:`flopy.mf6.mfpackage.MFPackage`.

    """

    strainib_filerecord = ListTemplateGenerator(
        ("gwf6", "csub", "options", "strainib_filerecord")
    )
    straincg_filerecord = ListTemplateGenerator(
        ("gwf6", "csub", "options", "straincg_filerecord")
    )
    compaction_filerecord = ListTemplateGenerator(
        ("gwf6", "csub", "options", "compaction_filerecord")
    )
    compaction_elastic_filerecord = ListTemplateGenerator(
        ("gwf6", "csub", "options", "compaction_elastic_filerecord")
    )
    compaction_inelastic_filerecord = ListTemplateGenerator(
        ("gwf6", "csub", "options", "compaction_inelastic_filerecord")
    )
    compaction_interbed_filerecord = ListTemplateGenerator(
        ("gwf6", "csub", "options", "compaction_interbed_filerecord")
    )
    compaction_coarse_filerecord = ListTemplateGenerator(
        ("gwf6", "csub", "options", "compaction_coarse_filerecord")
    )
    zdisplacement_filerecord = ListTemplateGenerator(
        ("gwf6", "csub", "options", "zdisplacement_filerecord")
    )
    package_convergence_filerecord = ListTemplateGenerator(
        ("gwf6", "csub", "options", "package_convergence_filerecord")
    )
    ts_filerecord = ListTemplateGenerator(("gwf6", "csub", "options", "ts_filerecord"))
    obs_filerecord = ListTemplateGenerator(
        ("gwf6", "csub", "options", "obs_filerecord")
    )
    cg_ske_cr = ArrayTemplateGenerator(("gwf6", "csub", "griddata", "cg_ske_cr"))
    cg_theta = ArrayTemplateGenerator(("gwf6", "csub", "griddata", "cg_theta"))
    sgm = ArrayTemplateGenerator(("gwf6", "csub", "griddata", "sgm"))
    sgs = ArrayTemplateGenerator(("gwf6", "csub", "griddata", "sgs"))
    packagedata = ListTemplateGenerator(("gwf6", "csub", "packagedata", "packagedata"))
    stress_period_data = ListTemplateGenerator(
        ("gwf6", "csub", "period", "stress_period_data")
    )
    package_abbr = "gwfcsub"
    _package_type = "csub"
    dfn_file_name = "gwf-csub.dfn"
    dfn = [
        ["header"],
        [
            "block options",
            "name boundnames",
            "type keyword",
            "shape",
            "reader urword",
            "optional true",
        ],
        [
            "block options",
            "name print_input",
            "type keyword",
            "reader urword",
            "optional true",
        ],
        [
            "block options",
            "name save_flows",
            "type keyword",
            "reader urword",
            "optional true",
        ],
        [
            "block options",
            "name gammaw",
            "type double precision",
            "reader urword",
            "optional true",
            "default 9806.65",
        ],
        [
            "block options",
            "name beta",
            "type double precision",
            "reader urword",
            "optional true",
            "default 4.6512e-10",
        ],
        [
            "block options",
            "name head_based",
            "type keyword",
            "reader urword",
            "optional true",
        ],
        [
            "block options",
            "name initial_preconsolidation_head",
            "type keyword",
            "reader urword",
            "optional true",
            "mf6internal precon_head",
        ],
        [
            "block options",
            "name ndelaycells",
            "type integer",
            "reader urword",
            "optional true",
        ],
        [
            "block options",
            "name compression_indices",
            "type keyword",
            "reader urword",
            "optional true",
            "mf6internal icompress",
        ],
        [
            "block options",
            "name update_material_properties",
            "type keyword",
            "reader urword",
            "optional true",
            "mf6internal matprop",
        ],
        [
            "block options",
            "name cell_fraction",
            "type keyword",
            "reader urword",
            "optional true",
        ],
        [
            "block options",
            "name specified_initial_interbed_state",
            "type keyword",
            "reader urword",
            "optional true",
            "mf6internal interbed_state",
        ],
        [
            "block options",
            "name specified_initial_preconsolidation_stress",
            "type keyword",
            "reader urword",
            "optional true",
            "mf6internal precon_stress",
        ],
        [
            "block options",
            "name specified_initial_delay_head",
            "type keyword",
            "reader urword",
            "optional true",
            "mf6internal delay_head",
        ],
        [
            "block options",
            "name effective_stress_lag",
            "type keyword",
            "reader urword",
            "optional true",
            "mf6internal stress_lag",
        ],
        [
            "block options",
            "name strainib_filerecord",
            "type record strain_csv_interbed fileout interbedstrain_filename",
            "shape",
            "reader urword",
            "tagged true",
            "optional true",
            "mf6internal strainibfr",
        ],
        [
            "block options",
            "name strain_csv_interbed",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
            "mf6internal csvinterbed",
        ],
        [
            "block options",
            "name fileout",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
        ],
        [
            "block options",
            "name interbedstrain_filename",
            "type string",
            "preserve_case true",
            "shape",
            "in_record true",
            "reader urword",
            "tagged false",
            "optional false",
            "mf6internal interbedstrainfn",
        ],
        [
            "block options",
            "name straincg_filerecord",
            "type record strain_csv_coarse fileout coarsestrain_filename",
            "shape",
            "reader urword",
            "tagged true",
            "optional true",
            "mf6internal straincgfr",
        ],
        [
            "block options",
            "name strain_csv_coarse",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
            "mf6internal csvcoarse",
        ],
        [
            "block options",
            "name coarsestrain_filename",
            "type string",
            "preserve_case true",
            "shape",
            "in_record true",
            "reader urword",
            "tagged false",
            "optional false",
            "mf6internal coarsestrainfn",
        ],
        [
            "block options",
            "name compaction_filerecord",
            "type record compaction fileout compaction_filename",
            "shape",
            "reader urword",
            "tagged true",
            "optional true",
            "mf6internal cmpfr",
        ],
        [
            "block options",
            "name compaction",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
        ],
        [
            "block options",
            "name compaction_filename",
            "type string",
            "preserve_case true",
            "shape",
            "in_record true",
            "reader urword",
            "tagged false",
            "optional false",
            "mf6internal cmpfn",
        ],
        [
            "block options",
            "name compaction_elastic_filerecord",
            "type record compaction_elastic fileout elastic_compaction_filename",
            "shape",
            "reader urword",
            "tagged true",
            "optional true",
            "mf6internal cmpelasticfr",
        ],
        [
            "block options",
            "name compaction_elastic",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
            "mf6internal cmpelastic",
        ],
        [
            "block options",
            "name elastic_compaction_filename",
            "type string",
            "preserve_case true",
            "shape",
            "in_record true",
            "reader urword",
            "tagged false",
            "optional false",
            "mf6internal elasticcmpfn",
        ],
        [
            "block options",
            "name compaction_inelastic_filerecord",
            "type record compaction_inelastic fileout inelastic_compaction_filename",
            "shape",
            "reader urword",
            "tagged true",
            "optional true",
            "mf6internal cmpinelasticfr",
        ],
        [
            "block options",
            "name compaction_inelastic",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
            "mf6internal cmpinelastic",
        ],
        [
            "block options",
            "name inelastic_compaction_filename",
            "type string",
            "preserve_case true",
            "shape",
            "in_record true",
            "reader urword",
            "tagged false",
            "optional false",
            "mf6internal inelasticcmpfn",
        ],
        [
            "block options",
            "name compaction_interbed_filerecord",
            "type record compaction_interbed fileout interbed_compaction_filename",
            "shape",
            "reader urword",
            "tagged true",
            "optional true",
            "mf6internal cmpinterbedfr",
        ],
        [
            "block options",
            "name compaction_interbed",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
            "mf6internal cmpinterbed",
        ],
        [
            "block options",
            "name interbed_compaction_filename",
            "type string",
            "preserve_case true",
            "shape",
            "in_record true",
            "reader urword",
            "tagged false",
            "optional false",
            "mf6internal interbedcmpfn",
        ],
        [
            "block options",
            "name compaction_coarse_filerecord",
            "type record compaction_coarse fileout coarse_compaction_filename",
            "shape",
            "reader urword",
            "tagged true",
            "optional true",
            "mf6internal cmpcoarsefr",
        ],
        [
            "block options",
            "name compaction_coarse",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
            "mf6internal cmpcoarse",
        ],
        [
            "block options",
            "name coarse_compaction_filename",
            "type string",
            "preserve_case true",
            "shape",
            "in_record true",
            "reader urword",
            "tagged false",
            "optional false",
            "mf6internal cmpcoarsefn",
        ],
        [
            "block options",
            "name zdisplacement_filerecord",
            "type record zdisplacement fileout zdisplacement_filename",
            "shape",
            "reader urword",
            "tagged true",
            "optional true",
            "mf6internal zdispfr",
        ],
        [
            "block options",
            "name zdisplacement",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
        ],
        [
            "block options",
            "name zdisplacement_filename",
            "type string",
            "preserve_case true",
            "shape",
            "in_record true",
            "reader urword",
            "tagged false",
            "optional false",
            "mf6internal zdispfn",
        ],
        [
            "block options",
            "name package_convergence_filerecord",
            "type record package_convergence fileout package_convergence_filename",
            "shape",
            "reader urword",
            "tagged true",
            "optional true",
            "mf6internal pkgconvergefr",
        ],
        [
            "block options",
            "name package_convergence",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
            "mf6internal pkgconverge",
        ],
        [
            "block options",
            "name package_convergence_filename",
            "type string",
            "preserve_case true",
            "shape",
            "in_record true",
            "reader urword",
            "tagged false",
            "optional false",
            "mf6internal pkgconvergefn",
        ],
        [
            "block options",
            "name ts_filerecord",
            "type record ts6 filein ts6_filename",
            "shape",
            "reader urword",
            "tagged true",
            "optional true",
            "construct_package ts",
            "construct_data timeseries",
            "parameter_name timeseries",
        ],
        [
            "block options",
            "name ts6",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
        ],
        [
            "block options",
            "name filein",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
        ],
        [
            "block options",
            "name ts6_filename",
            "type string",
            "preserve_case true",
            "in_record true",
            "reader urword",
            "optional false",
            "tagged false",
        ],
        [
            "block options",
            "name obs_filerecord",
            "type record obs6 filein obs6_filename",
            "shape",
            "reader urword",
            "tagged true",
            "optional true",
            "construct_package obs",
            "construct_data observations",
            "parameter_name continuous",
        ],
        [
            "block options",
            "name obs6",
            "type keyword",
            "shape",
            "in_record true",
            "reader urword",
            "tagged true",
            "optional false",
        ],
        [
            "block options",
            "name obs6_filename",
            "type string",
            "preserve_case true",
            "in_record true",
            "tagged false",
            "reader urword",
            "optional false",
        ],
        [
            "block dimensions",
            "name ninterbeds",
            "type integer",
            "reader urword",
            "optional false",
        ],
        [
            "block dimensions",
            "name maxsig0",
            "type integer",
            "reader urword",
            "optional true",
            "mf6internal maxbound",
        ],
        [
            "block griddata",
            "name cg_ske_cr",
            "type double precision",
            "shape (nodes)",
            "valid",
            "reader readarray",
            "layered true",
            "netcdf true",
            "default 1e-5",
        ],
        [
            "block griddata",
            "name cg_theta",
            "type double precision",
            "shape (nodes)",
            "valid",
            "reader readarray",
            "layered true",
            "netcdf true",
            "default 0.2",
        ],
        [
            "block griddata",
            "name sgm",
            "type double precision",
            "shape (nodes)",
            "valid",
            "reader readarray",
            "layered true",
            "netcdf true",
            "optional true",
        ],
        [
            "block griddata",
            "name sgs",
            "type double precision",
            "shape (nodes)",
            "valid",
            "reader readarray",
            "layered true",
            "netcdf true",
            "optional true",
        ],
        [
            "block packagedata",
            "name packagedata",
            "type recarray icsubno cellid cdelay pcs0 thick_frac rnb ssv_cc sse_cr theta kv h0 boundname",
            "shape (ninterbeds)",
            "reader urword",
            "optional true",
        ],
        [
            "block packagedata",
            "name icsubno",
            "type integer",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
            "numeric_index true",
        ],
        [
            "block packagedata",
            "name cellid",
            "type integer",
            "shape (ncelldim)",
            "tagged false",
            "in_record true",
            "reader urword",
            "mf6internal cellid_pkgdata",
        ],
        [
            "block packagedata",
            "name cdelay",
            "type string",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block packagedata",
            "name pcs0",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block packagedata",
            "name thick_frac",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block packagedata",
            "name rnb",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block packagedata",
            "name ssv_cc",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block packagedata",
            "name sse_cr",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block packagedata",
            "name theta",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
            "default 0.2",
        ],
        [
            "block packagedata",
            "name kv",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block packagedata",
            "name h0",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block packagedata",
            "name boundname",
            "type string",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
            "optional true",
        ],
        [
            "block period",
            "name iper",
            "type integer",
            "block_variable true",
            "in_record true",
            "tagged false",
            "shape",
            "valid",
            "reader urword",
            "optional false",
        ],
        [
            "block period",
            "name stress_period_data",
            "type recarray cellid sig0",
            "shape (maxsig0)",
            "reader urword",
            "mf6internal spd",
        ],
        [
            "block period",
            "name cellid",
            "type integer",
            "shape (ncelldim)",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block period",
            "name sig0",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
            "time_series true",
        ],
    ]

    def __init__(
        self,
        model,
        loading_package=False,
        boundnames=None,
        print_input=None,
        save_flows=None,
        gammaw=9806.65,
        beta=4.6512e-10,
        head_based=None,
        initial_preconsolidation_head=None,
        ndelaycells=None,
        compression_indices=None,
        update_material_properties=None,
        cell_fraction=None,
        specified_initial_interbed_state=None,
        specified_initial_preconsolidation_stress=None,
        specified_initial_delay_head=None,
        effective_stress_lag=None,
        strainib_filerecord=None,
        straincg_filerecord=None,
        compaction_filerecord=None,
        compaction_elastic_filerecord=None,
        compaction_inelastic_filerecord=None,
        compaction_interbed_filerecord=None,
        compaction_coarse_filerecord=None,
        zdisplacement_filerecord=None,
        package_convergence_filerecord=None,
        timeseries=None,
        observations=None,
        ninterbeds=None,
        maxsig0=None,
        cg_ske_cr=1e-05,
        cg_theta=0.2,
        sgm=None,
        sgs=None,
        packagedata=None,
        stress_period_data=None,
        filename=None,
        pname=None,
        **kwargs,
    ):
        """Initialize ModflowGwfcsub."""
        super().__init__(
            parent=model,
            package_type="csub",
            filename=filename,
            pname=pname,
            loading_package=loading_package,
            **kwargs,
        )

        self.boundnames = self.build_mfdata("boundnames", boundnames)
        self.print_input = self.build_mfdata("print_input", print_input)
        self.save_flows = self.build_mfdata("save_flows", save_flows)
        self.gammaw = self.build_mfdata("gammaw", gammaw)
        self.beta = self.build_mfdata("beta", beta)
        self.head_based = self.build_mfdata("head_based", head_based)
        self.initial_preconsolidation_head = self.build_mfdata(
            "initial_preconsolidation_head", initial_preconsolidation_head
        )
        self.ndelaycells = self.build_mfdata("ndelaycells", ndelaycells)
        self.compression_indices = self.build_mfdata(
            "compression_indices", compression_indices
        )
        self.update_material_properties = self.build_mfdata(
            "update_material_properties", update_material_properties
        )
        self.cell_fraction = self.build_mfdata("cell_fraction", cell_fraction)
        self.specified_initial_interbed_state = self.build_mfdata(
            "specified_initial_interbed_state", specified_initial_interbed_state
        )
        self.specified_initial_preconsolidation_stress = self.build_mfdata(
            "specified_initial_preconsolidation_stress",
            specified_initial_preconsolidation_stress,
        )
        self.specified_initial_delay_head = self.build_mfdata(
            "specified_initial_delay_head", specified_initial_delay_head
        )
        self.effective_stress_lag = self.build_mfdata(
            "effective_stress_lag", effective_stress_lag
        )
        self.strainib_filerecord = self.build_mfdata(
            "strainib_filerecord", strainib_filerecord
        )
        self.straincg_filerecord = self.build_mfdata(
            "straincg_filerecord", straincg_filerecord
        )
        self.compaction_filerecord = self.build_mfdata(
            "compaction_filerecord", compaction_filerecord
        )
        self.compaction_elastic_filerecord = self.build_mfdata(
            "compaction_elastic_filerecord", compaction_elastic_filerecord
        )
        self.compaction_inelastic_filerecord = self.build_mfdata(
            "compaction_inelastic_filerecord", compaction_inelastic_filerecord
        )
        self.compaction_interbed_filerecord = self.build_mfdata(
            "compaction_interbed_filerecord", compaction_interbed_filerecord
        )
        self.compaction_coarse_filerecord = self.build_mfdata(
            "compaction_coarse_filerecord", compaction_coarse_filerecord
        )
        self.zdisplacement_filerecord = self.build_mfdata(
            "zdisplacement_filerecord", zdisplacement_filerecord
        )
        self.package_convergence_filerecord = self.build_mfdata(
            "package_convergence_filerecord", package_convergence_filerecord
        )
        self._ts_filerecord = self.build_mfdata("ts_filerecord", None)
        self._ts_package = self.build_child_package(
            "ts", timeseries, "timeseries", self._ts_filerecord
        )
        self._obs_filerecord = self.build_mfdata("obs_filerecord", None)
        self._obs_package = self.build_child_package(
            "obs", observations, "continuous", self._obs_filerecord
        )
        self.ninterbeds = self.build_mfdata("ninterbeds", ninterbeds)
        self.maxsig0 = self.build_mfdata("maxsig0", maxsig0)
        self.cg_ske_cr = self.build_mfdata("cg_ske_cr", cg_ske_cr)
        self.cg_theta = self.build_mfdata("cg_theta", cg_theta)
        self.sgm = self.build_mfdata("sgm", sgm)
        self.sgs = self.build_mfdata("sgs", sgs)
        self.packagedata = self.build_mfdata("packagedata", packagedata)
        self.stress_period_data = self.build_mfdata(
            "stress_period_data", stress_period_data
        )

        self._init_complete = True
