diff --git a/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.json b/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.json index 3c1f6fc1..0a242277 100644 --- a/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.json +++ b/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.json @@ -491,268 +491,263 @@ "perioddata": { "type": "list", "item": { - "name": "perioddata", - "type": "record", - "fields": { - "laksetting": { - "type": "union", - "description": "line of information that is parsed into a keyword and values. Keyword values that can be used to start the LAKSETTING string include both keywords for lake settings and keywords for outlet settings. Keywords for lake settings include: STATUS, STAGE, RAINFALL, EVAPORATION, RUNOFF, INFLOW, WITHDRAWAL, and AUXILIARY. Keywords for outlet settings include RATE, INVERT, WIDTH, SLOPE, and ROUGH.", - "arms": { + "name": "laksetting", + "type": "union", + "description": "line of information that is parsed into a keyword and values. Keyword values that can be used to start the LAKSETTING string include both keywords for lake settings and keywords for outlet settings. Keywords for lake settings include: STATUS, STAGE, RAINFALL, EVAPORATION, RUNOFF, INFLOW, WITHDRAWAL, and AUXILIARY. Keywords for outlet settings include RATE, INVERT, WIDTH, SLOPE, and ROUGH.", + "arms": { + "status": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" + }, "status": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "status": { - "type": "string", - "longname": "lake status", - "description": "keyword option to define lake status. STATUS can be ACTIVE, INACTIVE, or CONSTANT. By default, STATUS is ACTIVE." - } - } + "type": "string", + "longname": "lake status", + "description": "keyword option to define lake status. STATUS can be ACTIVE, INACTIVE, or CONSTANT. By default, STATUS is ACTIVE." + } + } + }, + "stage": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "stage": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "stage": { - "type": "string", - "longname": "lake stage", - "description": "real or character value that defines the stage for the lake. The specified STAGE is only applied if the lake is a constant stage lake. 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.", - "time_series": true - } - } + "type": "string", + "longname": "lake stage", + "description": "real or character value that defines the stage for the lake. The specified STAGE is only applied if the lake is a constant stage lake. 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.", + "time_series": true + } + } + }, + "rainfall": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "rainfall": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "rainfall": { - "type": "string", - "longname": "rainfall rate", - "description": "real or character value that defines the rainfall rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", - "time_series": true - } - } + "type": "string", + "longname": "rainfall rate", + "description": "real or character value that defines the rainfall rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", + "time_series": true + } + } + }, + "evaporation": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "evaporation": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "evaporation": { - "type": "string", - "longname": "evaporation rate", - "description": "real or character value that defines the maximum evaporation rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", - "time_series": true - } - } + "type": "string", + "longname": "evaporation rate", + "description": "real or character value that defines the maximum evaporation rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", + "time_series": true + } + } + }, + "runoff": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "runoff": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "runoff": { - "type": "string", - "longname": "runoff rate", - "description": "real or character value that defines the runoff rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", - "time_series": true - } - } + "type": "string", + "longname": "runoff rate", + "description": "real or character value that defines the runoff rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", + "time_series": true + } + } + }, + "inflow": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "inflow": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "inflow": { - "type": "string", - "longname": "inflow rate", - "description": "real or character value that defines the volumetric inflow rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. By default, inflow rates are zero for each lake.", - "time_series": true - } - } + "type": "string", + "longname": "inflow rate", + "description": "real or character value that defines the volumetric inflow rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. By default, inflow rates are zero for each lake.", + "time_series": true + } + } + }, + "withdrawal": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "withdrawal": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "withdrawal": { - "type": "string", - "longname": "maximum withdrawal rate", - "description": "real or character value that defines the maximum withdrawal rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", - "time_series": true - } - } + "type": "string", + "longname": "maximum withdrawal rate", + "description": "real or character value that defines the maximum withdrawal rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", + "time_series": true + } + } + }, + "rate": { + "type": "record", + "fields": { + "outletno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "outlets.outletno" }, "rate": { - "type": "record", - "fields": { - "outletno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "outlets.outletno" - }, - "rate": { - "type": "string", - "longname": "extraction rate", - "description": "real or character value that defines the extraction rate for the lake outflow. A positive value indicates inflow and a negative value indicates outflow from the lake. RATE only applies to outlets associated with active lakes (STATUS is ACTIVE). A specified RATE is only applied if COUTTYPE for the OUTLETNO is SPECIFIED. 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. By default, the RATE for each SPECIFIED lake outlet is zero.", - "time_series": true - } - } + "type": "string", + "longname": "extraction rate", + "description": "real or character value that defines the extraction rate for the lake outflow. A positive value indicates inflow and a negative value indicates outflow from the lake. RATE only applies to outlets associated with active lakes (STATUS is ACTIVE). A specified RATE is only applied if COUTTYPE for the OUTLETNO is SPECIFIED. 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. By default, the RATE for each SPECIFIED lake outlet is zero.", + "time_series": true + } + } + }, + "invert": { + "type": "record", + "fields": { + "outletno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "outlets.outletno" }, "invert": { - "type": "record", - "fields": { - "outletno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "outlets.outletno" - }, - "invert": { - "type": "string", - "longname": "invert elevation", - "description": "real or character value that defines the invert elevation for the lake outlet. A specified INVERT value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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.", - "time_series": true - } - } + "type": "string", + "longname": "invert elevation", + "description": "real or character value that defines the invert elevation for the lake outlet. A specified INVERT value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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.", + "time_series": true + } + } + }, + "width": { + "type": "record", + "fields": { + "outletno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "outlets.outletno" }, "width": { - "type": "record", - "fields": { - "outletno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "outlets.outletno" - }, - "width": { - "type": "string", - "longname": "outlet width", - "description": "real or character value that defines the width of the lake outlet. A specified WIDTH value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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.", - "time_series": true - } - } + "type": "string", + "longname": "outlet width", + "description": "real or character value that defines the width of the lake outlet. A specified WIDTH value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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.", + "time_series": true + } + } + }, + "slope": { + "type": "record", + "fields": { + "outletno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "outlets.outletno" }, "slope": { - "type": "record", - "fields": { - "outletno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "outlets.outletno" - }, - "slope": { - "type": "string", - "longname": "bed slope", - "description": "real or character value that defines the bed slope for the lake outlet. A specified SLOPE value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is MANNING. 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.", - "time_series": true - } - } + "type": "string", + "longname": "bed slope", + "description": "real or character value that defines the bed slope for the lake outlet. A specified SLOPE value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is MANNING. 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.", + "time_series": true + } + } + }, + "rough": { + "type": "record", + "fields": { + "outletno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "outlets.outletno" }, "rough": { - "type": "record", - "fields": { - "outletno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "outlets.outletno" - }, - "rough": { - "type": "string", - "longname": "roughness coefficient", - "description": "real value that defines the roughness coefficient for the lake outlet. Any value can be specified if COUTTYPE is not MANNING. 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.", - "time_series": true - } - } + "type": "string", + "longname": "roughness coefficient", + "description": "real value that defines the roughness coefficient for the lake outlet. Any value can be specified if COUTTYPE is not MANNING. 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.", + "time_series": true + } + } + }, + "auxiliaryrecord": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" + }, + "auxiliary": { + "type": "keyword", + "description": "keyword for specifying auxiliary variable." }, - "auxiliaryrecord": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "auxiliary": { - "type": "keyword", - "description": "keyword for specifying auxiliary variable." - }, - "auxname": { - "type": "string", - "description": "name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME does not match one of the auxiliary variable names defined in the OPTIONS block the data are ignored.", - "tagged": false - }, - "auxval": { - "type": "double", - "longname": "auxiliary variable value", - "description": "value for the auxiliary variable. 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.", - "tagged": false, - "time_series": true - } - } + "auxname": { + "type": "string", + "description": "name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME does not match one of the auxiliary variable names defined in the OPTIONS block the data are ignored.", + "tagged": false + }, + "auxval": { + "type": "double", + "longname": "auxiliary variable value", + "description": "value for the auxiliary variable. 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.", + "tagged": false, + "time_series": true } } } diff --git a/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.toml b/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.toml index bd12753f..058eb5d5 100644 --- a/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.toml +++ b/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.toml @@ -441,17 +441,14 @@ time_series = true type = "list" [blocks.period.fields.perioddata.item] -name = "perioddata" -type = "record" - -[blocks.period.fields.perioddata.item.fields.laksetting] +name = "laksetting" type = "union" description = "line of information that is parsed into a keyword and values. Keyword values that can be used to start the LAKSETTING string include both keywords for lake settings and keywords for outlet settings. Keywords for lake settings include: STATUS, STAGE, RAINFALL, EVAPORATION, RUNOFF, INFLOW, WITHDRAWAL, and AUXILIARY. Keywords for outlet settings include RATE, INVERT, WIDTH, SLOPE, and ROUGH." -[blocks.period.fields.perioddata.item.fields.laksetting.arms.status] +[blocks.period.fields.perioddata.item.arms.status] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.status.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.status.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -459,15 +456,15 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.status.fields.status] +[blocks.period.fields.perioddata.item.arms.status.fields.status] type = "string" longname = "lake status" description = "keyword option to define lake status. STATUS can be ACTIVE, INACTIVE, or CONSTANT. By default, STATUS is ACTIVE." -[blocks.period.fields.perioddata.item.fields.laksetting.arms.stage] +[blocks.period.fields.perioddata.item.arms.stage] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.stage.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.stage.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -475,16 +472,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.stage.fields.stage] +[blocks.period.fields.perioddata.item.arms.stage.fields.stage] type = "string" longname = "lake stage" description = "real or character value that defines the stage for the lake. The specified STAGE is only applied if the lake is a constant stage lake. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rainfall] +[blocks.period.fields.perioddata.item.arms.rainfall] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rainfall.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.rainfall.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -492,16 +489,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rainfall.fields.rainfall] +[blocks.period.fields.perioddata.item.arms.rainfall.fields.rainfall] type = "string" longname = "rainfall rate" description = "real or character value that defines the rainfall rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.evaporation] +[blocks.period.fields.perioddata.item.arms.evaporation] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.evaporation.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.evaporation.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -509,16 +506,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.evaporation.fields.evaporation] +[blocks.period.fields.perioddata.item.arms.evaporation.fields.evaporation] type = "string" longname = "evaporation rate" description = "real or character value that defines the maximum evaporation rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.runoff] +[blocks.period.fields.perioddata.item.arms.runoff] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.runoff.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.runoff.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -526,16 +523,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.runoff.fields.runoff] +[blocks.period.fields.perioddata.item.arms.runoff.fields.runoff] type = "string" longname = "runoff rate" description = "real or character value that defines the runoff rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.inflow] +[blocks.period.fields.perioddata.item.arms.inflow] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.inflow.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.inflow.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -543,16 +540,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.inflow.fields.inflow] +[blocks.period.fields.perioddata.item.arms.inflow.fields.inflow] type = "string" longname = "inflow rate" description = "real or character value that defines the volumetric inflow rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. By default, inflow rates are zero for each lake." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.withdrawal] +[blocks.period.fields.perioddata.item.arms.withdrawal] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.withdrawal.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.withdrawal.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -560,16 +557,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.withdrawal.fields.withdrawal] +[blocks.period.fields.perioddata.item.arms.withdrawal.fields.withdrawal] type = "string" longname = "maximum withdrawal rate" description = "real or character value that defines the maximum withdrawal rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rate] +[blocks.period.fields.perioddata.item.arms.rate] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rate.fields.outletno] +[blocks.period.fields.perioddata.item.arms.rate.fields.outletno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -577,16 +574,16 @@ tagged = false index = true fk = "outlets.outletno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rate.fields.rate] +[blocks.period.fields.perioddata.item.arms.rate.fields.rate] type = "string" longname = "extraction rate" description = "real or character value that defines the extraction rate for the lake outflow. A positive value indicates inflow and a negative value indicates outflow from the lake. RATE only applies to outlets associated with active lakes (STATUS is ACTIVE). A specified RATE is only applied if COUTTYPE for the OUTLETNO is SPECIFIED. 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. By default, the RATE for each SPECIFIED lake outlet is zero." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.invert] +[blocks.period.fields.perioddata.item.arms.invert] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.invert.fields.outletno] +[blocks.period.fields.perioddata.item.arms.invert.fields.outletno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -594,16 +591,16 @@ tagged = false index = true fk = "outlets.outletno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.invert.fields.invert] +[blocks.period.fields.perioddata.item.arms.invert.fields.invert] type = "string" longname = "invert elevation" description = "real or character value that defines the invert elevation for the lake outlet. A specified INVERT value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.width] +[blocks.period.fields.perioddata.item.arms.width] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.width.fields.outletno] +[blocks.period.fields.perioddata.item.arms.width.fields.outletno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -611,16 +608,16 @@ tagged = false index = true fk = "outlets.outletno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.width.fields.width] +[blocks.period.fields.perioddata.item.arms.width.fields.width] type = "string" longname = "outlet width" description = "real or character value that defines the width of the lake outlet. A specified WIDTH value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.slope] +[blocks.period.fields.perioddata.item.arms.slope] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.slope.fields.outletno] +[blocks.period.fields.perioddata.item.arms.slope.fields.outletno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -628,16 +625,16 @@ tagged = false index = true fk = "outlets.outletno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.slope.fields.slope] +[blocks.period.fields.perioddata.item.arms.slope.fields.slope] type = "string" longname = "bed slope" description = "real or character value that defines the bed slope for the lake outlet. A specified SLOPE value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is MANNING. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rough] +[blocks.period.fields.perioddata.item.arms.rough] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rough.fields.outletno] +[blocks.period.fields.perioddata.item.arms.rough.fields.outletno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -645,16 +642,16 @@ tagged = false index = true fk = "outlets.outletno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rough.fields.rough] +[blocks.period.fields.perioddata.item.arms.rough.fields.rough] type = "string" longname = "roughness coefficient" description = "real value that defines the roughness coefficient for the lake outlet. Any value can be specified if COUTTYPE is not MANNING. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.auxiliaryrecord] +[blocks.period.fields.perioddata.item.arms.auxiliaryrecord] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.auxiliaryrecord.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.auxiliaryrecord.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -662,16 +659,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.auxiliaryrecord.fields.auxiliary] +[blocks.period.fields.perioddata.item.arms.auxiliaryrecord.fields.auxiliary] type = "keyword" description = "keyword for specifying auxiliary variable." -[blocks.period.fields.perioddata.item.fields.laksetting.arms.auxiliaryrecord.fields.auxname] +[blocks.period.fields.perioddata.item.arms.auxiliaryrecord.fields.auxname] type = "string" description = "name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME does not match one of the auxiliary variable names defined in the OPTIONS block the data are ignored." tagged = false -[blocks.period.fields.perioddata.item.fields.laksetting.arms.auxiliaryrecord.fields.auxval] +[blocks.period.fields.perioddata.item.arms.auxiliaryrecord.fields.auxval] type = "double" longname = "auxiliary variable value" description = "value for the auxiliary variable. 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." diff --git a/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.yaml b/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.yaml index 5490df3a..235ffe91 100644 --- a/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.yaml +++ b/autotest/dfns/__snapshots__/v2.0.0.dev2/gwf-lak.yaml @@ -516,311 +516,302 @@ blocks: perioddata: type: list item: - name: perioddata - type: record - fields: - laksetting: - type: union - description: 'line of information that is parsed into a keyword and values. Keyword values - that can be used to start the LAKSETTING string include both keywords for lake settings - and keywords for outlet settings. Keywords for lake settings include: STATUS, STAGE, - RAINFALL, EVAPORATION, RUNOFF, INFLOW, WITHDRAWAL, and AUXILIARY. Keywords for outlet - settings include RATE, INVERT, WIDTH, SLOPE, and ROUGH.' - arms: + name: laksetting + type: union + description: 'line of information that is parsed into a keyword and values. Keyword values + that can be used to start the LAKSETTING string include both keywords for lake settings and + keywords for outlet settings. Keywords for lake settings include: STATUS, STAGE, RAINFALL, + EVAPORATION, RUNOFF, INFLOW, WITHDRAWAL, and AUXILIARY. Keywords for outlet settings include + RATE, INVERT, WIDTH, SLOPE, and ROUGH.' + arms: + status: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno status: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - status: - type: string - longname: lake status - description: keyword option to define lake status. STATUS can be ACTIVE, INACTIVE, - or CONSTANT. By default, STATUS is ACTIVE. + type: string + longname: lake status + description: keyword option to define lake status. STATUS can be ACTIVE, INACTIVE, + or CONSTANT. By default, STATUS is ACTIVE. + stage: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno stage: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - stage: - type: string - longname: lake stage - description: real or character value that defines the stage for the lake. The specified - STAGE is only applied if the lake is a constant stage lake. 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. - time_series: true + type: string + longname: lake stage + description: real or character value that defines the stage for the lake. The specified + STAGE is only applied if the lake is a constant stage lake. 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. + time_series: true + rainfall: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno rainfall: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - rainfall: - type: string - longname: rainfall rate - description: real or character value that defines the rainfall rate $(LT^{-1})$ - for the lake. Value must be greater than or equal to zero. 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. - time_series: true + type: string + longname: rainfall rate + description: real or character value that defines the rainfall rate $(LT^{-1})$ for + the lake. Value must be greater than or equal to zero. 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. + time_series: true + evaporation: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno evaporation: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - evaporation: - type: string - longname: evaporation rate - description: real or character value that defines the maximum evaporation rate $(LT^{-1})$ - for the lake. Value must be greater than or equal to zero. 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. - time_series: true + type: string + longname: evaporation rate + description: real or character value that defines the maximum evaporation rate $(LT^{-1})$ + for the lake. Value must be greater than or equal to zero. 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. + time_series: true + runoff: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno runoff: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - runoff: - type: string - longname: runoff rate - description: real or character value that defines the runoff rate $(L^3 T^{-1})$ - for the lake. Value must be greater than or equal to zero. 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. - time_series: true + type: string + longname: runoff rate + description: real or character value that defines the runoff rate $(L^3 T^{-1})$ for + the lake. Value must be greater than or equal to zero. 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. + time_series: true + inflow: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno inflow: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - inflow: - type: string - longname: inflow rate - description: real or character value that defines the volumetric inflow rate $(L^3 - T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. By default, inflow rates are zero for each lake. - time_series: true + type: string + longname: inflow rate + description: real or character value that defines the volumetric inflow rate $(L^3 T^{-1})$ + for the lake. Value must be greater than or equal to zero. 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. By + default, inflow rates are zero for each lake. + time_series: true + withdrawal: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno withdrawal: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - withdrawal: - type: string - longname: maximum withdrawal rate - description: real or character value that defines the maximum withdrawal rate $(L^3 - T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. - time_series: true + type: string + longname: maximum withdrawal rate + description: real or character value that defines the maximum withdrawal rate $(L^3 + T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. + time_series: true + rate: + type: record + fields: + outletno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: outlets.outletno rate: - type: record - fields: - outletno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: outlets.outletno - rate: - type: string - longname: extraction rate - description: real or character value that defines the extraction rate for the lake - outflow. A positive value indicates inflow and a negative value indicates outflow - from the lake. RATE only applies to outlets associated with active lakes (STATUS - is ACTIVE). A specified RATE is only applied if COUTTYPE for the OUTLETNO is SPECIFIED. - 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. By default, the RATE for each SPECIFIED lake - outlet is zero. - time_series: true + type: string + longname: extraction rate + description: real or character value that defines the extraction rate for the lake outflow. + A positive value indicates inflow and a negative value indicates outflow from the + lake. RATE only applies to outlets associated with active lakes (STATUS is ACTIVE). + A specified RATE is only applied if COUTTYPE for the OUTLETNO is SPECIFIED. 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. By default, the RATE for each SPECIFIED lake outlet is zero. + time_series: true + invert: + type: record + fields: + outletno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: outlets.outletno invert: - type: record - fields: - outletno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: outlets.outletno - invert: - type: string - longname: invert elevation - description: real or character value that defines the invert elevation for the lake - outlet. A specified INVERT value is only used for active lakes if COUTTYPE for - lake outlet OUTLETNO is not SPECIFIED. 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. - time_series: true + type: string + longname: invert elevation + description: real or character value that defines the invert elevation for the lake + outlet. A specified INVERT value is only used for active lakes if COUTTYPE for lake + outlet OUTLETNO is not SPECIFIED. 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. + time_series: true + width: + type: record + fields: + outletno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: outlets.outletno width: - type: record - fields: - outletno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: outlets.outletno - width: - type: string - longname: outlet width - description: real or character value that defines the width of the lake outlet. - A specified WIDTH value is only used for active lakes if COUTTYPE for lake outlet - OUTLETNO is not SPECIFIED. 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. - time_series: true + type: string + longname: outlet width + description: real or character value that defines the width of the lake outlet. A specified + WIDTH value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is + not SPECIFIED. 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. + time_series: true + slope: + type: record + fields: + outletno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: outlets.outletno slope: - type: record - fields: - outletno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: outlets.outletno - slope: - type: string - longname: bed slope - description: real or character value that defines the bed slope for the lake outlet. - A specified SLOPE value is only used for active lakes if COUTTYPE for lake outlet - OUTLETNO is MANNING. 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. - time_series: true + type: string + longname: bed slope + description: real or character value that defines the bed slope for the lake outlet. + A specified SLOPE value is only used for active lakes if COUTTYPE for lake outlet + OUTLETNO is MANNING. 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. + time_series: true + rough: + type: record + fields: + outletno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: outlets.outletno rough: - type: record - fields: - outletno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: outlets.outletno - rough: - type: string - longname: roughness coefficient - description: real value that defines the roughness coefficient for the lake outlet. - Any value can be specified if COUTTYPE is not MANNING. 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. - time_series: true - auxiliaryrecord: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - auxiliary: - type: keyword - description: keyword for specifying auxiliary variable. - auxname: - type: string - description: name for the auxiliary variable to be assigned AUXVAL. AUXNAME must - match one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME - does not match one of the auxiliary variable names defined in the OPTIONS block - the data are ignored. - tagged: false - auxval: - type: double - longname: auxiliary variable value - description: value for the auxiliary variable. 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. - tagged: false - time_series: true + type: string + longname: roughness coefficient + description: real value that defines the roughness coefficient for the lake outlet. + Any value can be specified if COUTTYPE is not MANNING. 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. + time_series: true + auxiliaryrecord: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno + auxiliary: + type: keyword + description: keyword for specifying auxiliary variable. + auxname: + type: string + description: name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match + one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME does + not match one of the auxiliary variable names defined in the OPTIONS block the data + are ignored. + tagged: false + auxval: + type: double + longname: auxiliary variable value + description: value for the auxiliary variable. 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. + tagged: false + time_series: true header: fill_forward: true field: diff --git a/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.json b/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.json index f1aa0920..92e2427c 100644 --- a/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.json +++ b/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.json @@ -491,268 +491,263 @@ "perioddata": { "type": "list", "item": { - "name": "perioddata", - "type": "record", - "fields": { - "laksetting": { - "type": "union", - "description": "line of information that is parsed into a keyword and values. Keyword values that can be used to start the LAKSETTING string include both keywords for lake settings and keywords for outlet settings. Keywords for lake settings include: STATUS, STAGE, RAINFALL, EVAPORATION, RUNOFF, INFLOW, WITHDRAWAL, and AUXILIARY. Keywords for outlet settings include RATE, INVERT, WIDTH, SLOPE, and ROUGH.", - "arms": { + "name": "laksetting", + "type": "union", + "description": "line of information that is parsed into a keyword and values. Keyword values that can be used to start the LAKSETTING string include both keywords for lake settings and keywords for outlet settings. Keywords for lake settings include: STATUS, STAGE, RAINFALL, EVAPORATION, RUNOFF, INFLOW, WITHDRAWAL, and AUXILIARY. Keywords for outlet settings include RATE, INVERT, WIDTH, SLOPE, and ROUGH.", + "arms": { + "status": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" + }, "status": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "status": { - "type": "string", - "longname": "lake status", - "description": "keyword option to define lake status. STATUS can be ACTIVE, INACTIVE, or CONSTANT. By default, STATUS is ACTIVE." - } - } + "type": "string", + "longname": "lake status", + "description": "keyword option to define lake status. STATUS can be ACTIVE, INACTIVE, or CONSTANT. By default, STATUS is ACTIVE." + } + } + }, + "stage": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "stage": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "stage": { - "type": "string", - "longname": "lake stage", - "description": "real or character value that defines the stage for the lake. The specified STAGE is only applied if the lake is a constant stage lake. 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.", - "time_series": true - } - } + "type": "string", + "longname": "lake stage", + "description": "real or character value that defines the stage for the lake. The specified STAGE is only applied if the lake is a constant stage lake. 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.", + "time_series": true + } + } + }, + "rainfall": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "rainfall": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "rainfall": { - "type": "string", - "longname": "rainfall rate", - "description": "real or character value that defines the rainfall rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", - "time_series": true - } - } + "type": "string", + "longname": "rainfall rate", + "description": "real or character value that defines the rainfall rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", + "time_series": true + } + } + }, + "evaporation": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "evaporation": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "evaporation": { - "type": "string", - "longname": "evaporation rate", - "description": "real or character value that defines the maximum evaporation rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", - "time_series": true - } - } + "type": "string", + "longname": "evaporation rate", + "description": "real or character value that defines the maximum evaporation rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", + "time_series": true + } + } + }, + "runoff": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "runoff": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "runoff": { - "type": "string", - "longname": "runoff rate", - "description": "real or character value that defines the runoff rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", - "time_series": true - } - } + "type": "string", + "longname": "runoff rate", + "description": "real or character value that defines the runoff rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", + "time_series": true + } + } + }, + "inflow": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "inflow": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "inflow": { - "type": "string", - "longname": "inflow rate", - "description": "real or character value that defines the volumetric inflow rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. By default, inflow rates are zero for each lake.", - "time_series": true - } - } + "type": "string", + "longname": "inflow rate", + "description": "real or character value that defines the volumetric inflow rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. By default, inflow rates are zero for each lake.", + "time_series": true + } + } + }, + "withdrawal": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" }, "withdrawal": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "withdrawal": { - "type": "string", - "longname": "maximum withdrawal rate", - "description": "real or character value that defines the maximum withdrawal rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", - "time_series": true - } - } + "type": "string", + "longname": "maximum withdrawal rate", + "description": "real or character value that defines the maximum withdrawal rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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.", + "time_series": true + } + } + }, + "rate": { + "type": "record", + "fields": { + "outletno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "outlets.outletno" }, "rate": { - "type": "record", - "fields": { - "outletno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "outlets.outletno" - }, - "rate": { - "type": "string", - "longname": "extraction rate", - "description": "real or character value that defines the extraction rate for the lake outflow. A positive value indicates inflow and a negative value indicates outflow from the lake. RATE only applies to outlets associated with active lakes (STATUS is ACTIVE). A specified RATE is only applied if COUTTYPE for the OUTLETNO is SPECIFIED. 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. By default, the RATE for each SPECIFIED lake outlet is zero.", - "time_series": true - } - } + "type": "string", + "longname": "extraction rate", + "description": "real or character value that defines the extraction rate for the lake outflow. A positive value indicates inflow and a negative value indicates outflow from the lake. RATE only applies to outlets associated with active lakes (STATUS is ACTIVE). A specified RATE is only applied if COUTTYPE for the OUTLETNO is SPECIFIED. 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. By default, the RATE for each SPECIFIED lake outlet is zero.", + "time_series": true + } + } + }, + "invert": { + "type": "record", + "fields": { + "outletno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "outlets.outletno" }, "invert": { - "type": "record", - "fields": { - "outletno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "outlets.outletno" - }, - "invert": { - "type": "string", - "longname": "invert elevation", - "description": "real or character value that defines the invert elevation for the lake outlet. A specified INVERT value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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.", - "time_series": true - } - } + "type": "string", + "longname": "invert elevation", + "description": "real or character value that defines the invert elevation for the lake outlet. A specified INVERT value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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.", + "time_series": true + } + } + }, + "width": { + "type": "record", + "fields": { + "outletno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "outlets.outletno" }, "width": { - "type": "record", - "fields": { - "outletno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "outlets.outletno" - }, - "width": { - "type": "string", - "longname": "outlet width", - "description": "real or character value that defines the width of the lake outlet. A specified WIDTH value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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.", - "time_series": true - } - } + "type": "string", + "longname": "outlet width", + "description": "real or character value that defines the width of the lake outlet. A specified WIDTH value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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.", + "time_series": true + } + } + }, + "slope": { + "type": "record", + "fields": { + "outletno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "outlets.outletno" }, "slope": { - "type": "record", - "fields": { - "outletno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "outlets.outletno" - }, - "slope": { - "type": "string", - "longname": "bed slope", - "description": "real or character value that defines the bed slope for the lake outlet. A specified SLOPE value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is MANNING. 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.", - "time_series": true - } - } + "type": "string", + "longname": "bed slope", + "description": "real or character value that defines the bed slope for the lake outlet. A specified SLOPE value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is MANNING. 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.", + "time_series": true + } + } + }, + "rough": { + "type": "record", + "fields": { + "outletno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "outlets.outletno" }, "rough": { - "type": "record", - "fields": { - "outletno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "outlets.outletno" - }, - "rough": { - "type": "string", - "longname": "roughness coefficient", - "description": "real value that defines the roughness coefficient for the lake outlet. Any value can be specified if COUTTYPE is not MANNING. 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.", - "time_series": true - } - } + "type": "string", + "longname": "roughness coefficient", + "description": "real value that defines the roughness coefficient for the lake outlet. Any value can be specified if COUTTYPE is not MANNING. 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.", + "time_series": true + } + } + }, + "auxiliaryrecord": { + "type": "record", + "fields": { + "lakeno": { + "type": "integer", + "longname": "lake or outlet number for this entry", + "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", + "tagged": false, + "index": true, + "fk": "packagedata.ifno" + }, + "auxiliary": { + "type": "keyword", + "description": "keyword for specifying auxiliary variable." }, - "auxiliaryrecord": { - "type": "record", - "fields": { - "lakeno": { - "type": "integer", - "longname": "lake or outlet number for this entry", - "description": "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number.", - "tagged": false, - "index": true, - "fk": "packagedata.ifno" - }, - "auxiliary": { - "type": "keyword", - "description": "keyword for specifying auxiliary variable." - }, - "auxname": { - "type": "string", - "description": "name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME does not match one of the auxiliary variable names defined in the OPTIONS block the data are ignored.", - "tagged": false - }, - "auxval": { - "type": "double", - "longname": "auxiliary variable value", - "description": "value for the auxiliary variable. 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.", - "tagged": false, - "time_series": true - } - } + "auxname": { + "type": "string", + "description": "name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME does not match one of the auxiliary variable names defined in the OPTIONS block the data are ignored.", + "tagged": false + }, + "auxval": { + "type": "double", + "longname": "auxiliary variable value", + "description": "value for the auxiliary variable. 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.", + "tagged": false, + "time_series": true } } } diff --git a/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.toml b/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.toml index a6065d3a..724daad7 100644 --- a/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.toml +++ b/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.toml @@ -441,17 +441,14 @@ time_series = true type = "list" [blocks.period.fields.perioddata.item] -name = "perioddata" -type = "record" - -[blocks.period.fields.perioddata.item.fields.laksetting] +name = "laksetting" type = "union" description = "line of information that is parsed into a keyword and values. Keyword values that can be used to start the LAKSETTING string include both keywords for lake settings and keywords for outlet settings. Keywords for lake settings include: STATUS, STAGE, RAINFALL, EVAPORATION, RUNOFF, INFLOW, WITHDRAWAL, and AUXILIARY. Keywords for outlet settings include RATE, INVERT, WIDTH, SLOPE, and ROUGH." -[blocks.period.fields.perioddata.item.fields.laksetting.arms.status] +[blocks.period.fields.perioddata.item.arms.status] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.status.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.status.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -459,15 +456,15 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.status.fields.status] +[blocks.period.fields.perioddata.item.arms.status.fields.status] type = "string" longname = "lake status" description = "keyword option to define lake status. STATUS can be ACTIVE, INACTIVE, or CONSTANT. By default, STATUS is ACTIVE." -[blocks.period.fields.perioddata.item.fields.laksetting.arms.stage] +[blocks.period.fields.perioddata.item.arms.stage] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.stage.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.stage.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -475,16 +472,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.stage.fields.stage] +[blocks.period.fields.perioddata.item.arms.stage.fields.stage] type = "string" longname = "lake stage" description = "real or character value that defines the stage for the lake. The specified STAGE is only applied if the lake is a constant stage lake. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rainfall] +[blocks.period.fields.perioddata.item.arms.rainfall] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rainfall.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.rainfall.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -492,16 +489,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rainfall.fields.rainfall] +[blocks.period.fields.perioddata.item.arms.rainfall.fields.rainfall] type = "string" longname = "rainfall rate" description = "real or character value that defines the rainfall rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.evaporation] +[blocks.period.fields.perioddata.item.arms.evaporation] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.evaporation.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.evaporation.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -509,16 +506,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.evaporation.fields.evaporation] +[blocks.period.fields.perioddata.item.arms.evaporation.fields.evaporation] type = "string" longname = "evaporation rate" description = "real or character value that defines the maximum evaporation rate $(LT^{-1})$ for the lake. Value must be greater than or equal to zero. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.runoff] +[blocks.period.fields.perioddata.item.arms.runoff] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.runoff.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.runoff.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -526,16 +523,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.runoff.fields.runoff] +[blocks.period.fields.perioddata.item.arms.runoff.fields.runoff] type = "string" longname = "runoff rate" description = "real or character value that defines the runoff rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.inflow] +[blocks.period.fields.perioddata.item.arms.inflow] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.inflow.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.inflow.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -543,16 +540,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.inflow.fields.inflow] +[blocks.period.fields.perioddata.item.arms.inflow.fields.inflow] type = "string" longname = "inflow rate" description = "real or character value that defines the volumetric inflow rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. By default, inflow rates are zero for each lake." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.withdrawal] +[blocks.period.fields.perioddata.item.arms.withdrawal] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.withdrawal.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.withdrawal.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -560,16 +557,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.withdrawal.fields.withdrawal] +[blocks.period.fields.perioddata.item.arms.withdrawal.fields.withdrawal] type = "string" longname = "maximum withdrawal rate" description = "real or character value that defines the maximum withdrawal rate $(L^3 T^{-1})$ for the lake. Value must be greater than or equal to zero. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rate] +[blocks.period.fields.perioddata.item.arms.rate] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rate.fields.outletno] +[blocks.period.fields.perioddata.item.arms.rate.fields.outletno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -577,16 +574,16 @@ tagged = false index = true fk = "outlets.outletno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rate.fields.rate] +[blocks.period.fields.perioddata.item.arms.rate.fields.rate] type = "string" longname = "extraction rate" description = "real or character value that defines the extraction rate for the lake outflow. A positive value indicates inflow and a negative value indicates outflow from the lake. RATE only applies to outlets associated with active lakes (STATUS is ACTIVE). A specified RATE is only applied if COUTTYPE for the OUTLETNO is SPECIFIED. 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. By default, the RATE for each SPECIFIED lake outlet is zero." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.invert] +[blocks.period.fields.perioddata.item.arms.invert] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.invert.fields.outletno] +[blocks.period.fields.perioddata.item.arms.invert.fields.outletno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -594,16 +591,16 @@ tagged = false index = true fk = "outlets.outletno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.invert.fields.invert] +[blocks.period.fields.perioddata.item.arms.invert.fields.invert] type = "string" longname = "invert elevation" description = "real or character value that defines the invert elevation for the lake outlet. A specified INVERT value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.width] +[blocks.period.fields.perioddata.item.arms.width] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.width.fields.outletno] +[blocks.period.fields.perioddata.item.arms.width.fields.outletno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -611,16 +608,16 @@ tagged = false index = true fk = "outlets.outletno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.width.fields.width] +[blocks.period.fields.perioddata.item.arms.width.fields.width] type = "string" longname = "outlet width" description = "real or character value that defines the width of the lake outlet. A specified WIDTH value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is not SPECIFIED. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.slope] +[blocks.period.fields.perioddata.item.arms.slope] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.slope.fields.outletno] +[blocks.period.fields.perioddata.item.arms.slope.fields.outletno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -628,16 +625,16 @@ tagged = false index = true fk = "outlets.outletno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.slope.fields.slope] +[blocks.period.fields.perioddata.item.arms.slope.fields.slope] type = "string" longname = "bed slope" description = "real or character value that defines the bed slope for the lake outlet. A specified SLOPE value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is MANNING. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rough] +[blocks.period.fields.perioddata.item.arms.rough] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rough.fields.outletno] +[blocks.period.fields.perioddata.item.arms.rough.fields.outletno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -645,16 +642,16 @@ tagged = false index = true fk = "outlets.outletno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.rough.fields.rough] +[blocks.period.fields.perioddata.item.arms.rough.fields.rough] type = "string" longname = "roughness coefficient" description = "real value that defines the roughness coefficient for the lake outlet. Any value can be specified if COUTTYPE is not MANNING. 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." time_series = true -[blocks.period.fields.perioddata.item.fields.laksetting.arms.auxiliaryrecord] +[blocks.period.fields.perioddata.item.arms.auxiliaryrecord] type = "record" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.auxiliaryrecord.fields.lakeno] +[blocks.period.fields.perioddata.item.arms.auxiliaryrecord.fields.lakeno] type = "integer" longname = "lake or outlet number for this entry" description = "integer value that defines the lake or outlet number associated with the specified PERIOD data on the line. NUMBER must be greater than zero and less than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet number." @@ -662,16 +659,16 @@ tagged = false index = true fk = "packagedata.ifno" -[blocks.period.fields.perioddata.item.fields.laksetting.arms.auxiliaryrecord.fields.auxiliary] +[blocks.period.fields.perioddata.item.arms.auxiliaryrecord.fields.auxiliary] type = "keyword" description = "keyword for specifying auxiliary variable." -[blocks.period.fields.perioddata.item.fields.laksetting.arms.auxiliaryrecord.fields.auxname] +[blocks.period.fields.perioddata.item.arms.auxiliaryrecord.fields.auxname] type = "string" description = "name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME does not match one of the auxiliary variable names defined in the OPTIONS block the data are ignored." tagged = false -[blocks.period.fields.perioddata.item.fields.laksetting.arms.auxiliaryrecord.fields.auxval] +[blocks.period.fields.perioddata.item.arms.auxiliaryrecord.fields.auxval] type = "double" longname = "auxiliary variable value" description = "value for the auxiliary variable. 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." diff --git a/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.yaml b/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.yaml index 86f1523c..54942d16 100644 --- a/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.yaml +++ b/autotest/dfns/__snapshots__/v2.0.0.dev3/gwf-lak.yaml @@ -516,311 +516,302 @@ blocks: perioddata: type: list item: - name: perioddata - type: record - fields: - laksetting: - type: union - description: 'line of information that is parsed into a keyword and values. Keyword values - that can be used to start the LAKSETTING string include both keywords for lake settings - and keywords for outlet settings. Keywords for lake settings include: STATUS, STAGE, - RAINFALL, EVAPORATION, RUNOFF, INFLOW, WITHDRAWAL, and AUXILIARY. Keywords for outlet - settings include RATE, INVERT, WIDTH, SLOPE, and ROUGH.' - arms: + name: laksetting + type: union + description: 'line of information that is parsed into a keyword and values. Keyword values + that can be used to start the LAKSETTING string include both keywords for lake settings and + keywords for outlet settings. Keywords for lake settings include: STATUS, STAGE, RAINFALL, + EVAPORATION, RUNOFF, INFLOW, WITHDRAWAL, and AUXILIARY. Keywords for outlet settings include + RATE, INVERT, WIDTH, SLOPE, and ROUGH.' + arms: + status: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno status: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - status: - type: string - longname: lake status - description: keyword option to define lake status. STATUS can be ACTIVE, INACTIVE, - or CONSTANT. By default, STATUS is ACTIVE. + type: string + longname: lake status + description: keyword option to define lake status. STATUS can be ACTIVE, INACTIVE, + or CONSTANT. By default, STATUS is ACTIVE. + stage: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno stage: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - stage: - type: string - longname: lake stage - description: real or character value that defines the stage for the lake. The specified - STAGE is only applied if the lake is a constant stage lake. 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. - time_series: true + type: string + longname: lake stage + description: real or character value that defines the stage for the lake. The specified + STAGE is only applied if the lake is a constant stage lake. 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. + time_series: true + rainfall: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno rainfall: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - rainfall: - type: string - longname: rainfall rate - description: real or character value that defines the rainfall rate $(LT^{-1})$ - for the lake. Value must be greater than or equal to zero. 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. - time_series: true + type: string + longname: rainfall rate + description: real or character value that defines the rainfall rate $(LT^{-1})$ for + the lake. Value must be greater than or equal to zero. 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. + time_series: true + evaporation: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno evaporation: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - evaporation: - type: string - longname: evaporation rate - description: real or character value that defines the maximum evaporation rate $(LT^{-1})$ - for the lake. Value must be greater than or equal to zero. 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. - time_series: true + type: string + longname: evaporation rate + description: real or character value that defines the maximum evaporation rate $(LT^{-1})$ + for the lake. Value must be greater than or equal to zero. 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. + time_series: true + runoff: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno runoff: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - runoff: - type: string - longname: runoff rate - description: real or character value that defines the runoff rate $(L^3 T^{-1})$ - for the lake. Value must be greater than or equal to zero. 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. - time_series: true + type: string + longname: runoff rate + description: real or character value that defines the runoff rate $(L^3 T^{-1})$ for + the lake. Value must be greater than or equal to zero. 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. + time_series: true + inflow: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno inflow: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - inflow: - type: string - longname: inflow rate - description: real or character value that defines the volumetric inflow rate $(L^3 - T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. By default, inflow rates are zero for each lake. - time_series: true + type: string + longname: inflow rate + description: real or character value that defines the volumetric inflow rate $(L^3 T^{-1})$ + for the lake. Value must be greater than or equal to zero. 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. By + default, inflow rates are zero for each lake. + time_series: true + withdrawal: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno withdrawal: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - withdrawal: - type: string - longname: maximum withdrawal rate - description: real or character value that defines the maximum withdrawal rate $(L^3 - T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. - time_series: true + type: string + longname: maximum withdrawal rate + description: real or character value that defines the maximum withdrawal rate $(L^3 + T^{-1})$ for the lake. Value must be greater than or equal to zero. 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. + time_series: true + rate: + type: record + fields: + outletno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: outlets.outletno rate: - type: record - fields: - outletno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: outlets.outletno - rate: - type: string - longname: extraction rate - description: real or character value that defines the extraction rate for the lake - outflow. A positive value indicates inflow and a negative value indicates outflow - from the lake. RATE only applies to outlets associated with active lakes (STATUS - is ACTIVE). A specified RATE is only applied if COUTTYPE for the OUTLETNO is SPECIFIED. - 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. By default, the RATE for each SPECIFIED lake - outlet is zero. - time_series: true + type: string + longname: extraction rate + description: real or character value that defines the extraction rate for the lake outflow. + A positive value indicates inflow and a negative value indicates outflow from the + lake. RATE only applies to outlets associated with active lakes (STATUS is ACTIVE). + A specified RATE is only applied if COUTTYPE for the OUTLETNO is SPECIFIED. 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. By default, the RATE for each SPECIFIED lake outlet is zero. + time_series: true + invert: + type: record + fields: + outletno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: outlets.outletno invert: - type: record - fields: - outletno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: outlets.outletno - invert: - type: string - longname: invert elevation - description: real or character value that defines the invert elevation for the lake - outlet. A specified INVERT value is only used for active lakes if COUTTYPE for - lake outlet OUTLETNO is not SPECIFIED. 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. - time_series: true + type: string + longname: invert elevation + description: real or character value that defines the invert elevation for the lake + outlet. A specified INVERT value is only used for active lakes if COUTTYPE for lake + outlet OUTLETNO is not SPECIFIED. 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. + time_series: true + width: + type: record + fields: + outletno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: outlets.outletno width: - type: record - fields: - outletno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: outlets.outletno - width: - type: string - longname: outlet width - description: real or character value that defines the width of the lake outlet. - A specified WIDTH value is only used for active lakes if COUTTYPE for lake outlet - OUTLETNO is not SPECIFIED. 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. - time_series: true + type: string + longname: outlet width + description: real or character value that defines the width of the lake outlet. A specified + WIDTH value is only used for active lakes if COUTTYPE for lake outlet OUTLETNO is + not SPECIFIED. 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. + time_series: true + slope: + type: record + fields: + outletno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: outlets.outletno slope: - type: record - fields: - outletno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: outlets.outletno - slope: - type: string - longname: bed slope - description: real or character value that defines the bed slope for the lake outlet. - A specified SLOPE value is only used for active lakes if COUTTYPE for lake outlet - OUTLETNO is MANNING. 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. - time_series: true + type: string + longname: bed slope + description: real or character value that defines the bed slope for the lake outlet. + A specified SLOPE value is only used for active lakes if COUTTYPE for lake outlet + OUTLETNO is MANNING. 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. + time_series: true + rough: + type: record + fields: + outletno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: outlets.outletno rough: - type: record - fields: - outletno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: outlets.outletno - rough: - type: string - longname: roughness coefficient - description: real value that defines the roughness coefficient for the lake outlet. - Any value can be specified if COUTTYPE is not MANNING. 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. - time_series: true - auxiliaryrecord: - type: record - fields: - lakeno: - type: integer - longname: lake or outlet number for this entry - description: integer value that defines the lake or outlet number associated with - the specified PERIOD data on the line. NUMBER must be greater than zero and less - than or equal to NLAKES for a lake number and less than or equal to NOUTLETS for - an outlet number. - tagged: false - index: true - fk: packagedata.ifno - auxiliary: - type: keyword - description: keyword for specifying auxiliary variable. - auxname: - type: string - description: name for the auxiliary variable to be assigned AUXVAL. AUXNAME must - match one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME - does not match one of the auxiliary variable names defined in the OPTIONS block - the data are ignored. - tagged: false - auxval: - type: double - longname: auxiliary variable value - description: value for the auxiliary variable. 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. - tagged: false - time_series: true + type: string + longname: roughness coefficient + description: real value that defines the roughness coefficient for the lake outlet. + Any value can be specified if COUTTYPE is not MANNING. 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. + time_series: true + auxiliaryrecord: + type: record + fields: + lakeno: + type: integer + longname: lake or outlet number for this entry + description: integer value that defines the lake or outlet number associated with the + specified PERIOD data on the line. NUMBER must be greater than zero and less than + or equal to NLAKES for a lake number and less than or equal to NOUTLETS for an outlet + number. + tagged: false + index: true + fk: packagedata.ifno + auxiliary: + type: keyword + description: keyword for specifying auxiliary variable. + auxname: + type: string + description: name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match + one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME does + not match one of the auxiliary variable names defined in the OPTIONS block the data + are ignored. + tagged: false + auxval: + type: double + longname: auxiliary variable value + description: value for the auxiliary variable. 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. + tagged: false + time_series: true header: fill_forward: true field: diff --git a/autotest/dfns/test_migrate.py b/autotest/dfns/test_migrate.py index 27032eae..26d63495 100644 --- a/autotest/dfns/test_migrate.py +++ b/autotest/dfns/test_migrate.py @@ -319,6 +319,20 @@ def test_migrate_lak_connectiondata_shape(dfn_dir, tmp_path, v1_shape): assert component.dims["nlakeconn"].value == "sum(packagedata.nlakeconn)" +@pytest.mark.parametrize( + ("name", "setting"), [("gwf-lak", "laksetting"), ("prt-prp", "releasesetting")] +) +def test_migrate_period_union_element(dfn_dir, name, setting): + """A period list of only a union is a list of the union: PRP's, and LAK's + once its lake or outlet number moves into the arms.""" + component = _migrate_dev3(dfn_dir, name) + item = component.blocks["period"].fields["perioddata"].item + assert isinstance(item, v2.Union) and item.name == setting + if name == "gwf-lak": + assert item.arms["stage"].fields["lakeno"].fk == "packagedata.ifno" + assert item.arms["rate"].fields["outletno"].fk == "outlets.outletno" + + def test_migrate_auxiliary_stays_self_sizing(dfn_dir): component = _migrate_dev3(dfn_dir, "gwf-chd") assert component.blocks["options"].fields["auxiliary"].shape == [] diff --git a/docs/md/sfr-lak-structure.md b/docs/md/sfr-lak-structure.md index 422d82ec..e66ea4f5 100644 --- a/docs/md/sfr-lak-structure.md +++ b/docs/md/sfr-lak-structure.md @@ -87,7 +87,9 @@ explicitly in `_fix_lak_relations` (`migrate_to_v2_0_0_dev2.py`): copy, pushed inside each `laksetting` union arm with a name and `fk` appropriate to that arm's category: `lakeno` / `fk: packagedata.ifno` for the 8 lake-setting arms, `outletno` / `fk: outlets.outletno` for the 5 -outlet-setting arms. (`outlets.outletno` is also newly marked `pk`, since +outlet-setting arms. That leaves `laksetting` the only field of the period +list's element, so the element becomes the union itself, as PRP's +`releasesetting` is. (`outlets.outletno` is also newly marked `pk`, since nothing else previously pointed at it — needed for the new `outletno` fk to resolve.) diff --git a/modflow_devtools/dfns/migrate_to_v2_0_0_dev2.py b/modflow_devtools/dfns/migrate_to_v2_0_0_dev2.py index d8ad0de1..22b7deb6 100644 --- a/modflow_devtools/dfns/migrate_to_v2_0_0_dev2.py +++ b/modflow_devtools/dfns/migrate_to_v2_0_0_dev2.py @@ -1328,7 +1328,8 @@ def _fix_lak_relations(name: str, blocks: dict[str, v2.Block]) -> dict[str, v2.B fields nested inside the corresponding `laksetting` union arms, each carrying a correct, non-conditional `fk` (a single `fk` on the shared `number` field can't be correct for both arm categories at once, since - the target block depends on which arm is present). + the target block depends on which arm is present). The period list's + element is then `laksetting` itself. - Marks `outlets.outletno` as `pk` (the new `outletno` fk needs one). - Marks `outlets.lakein`/`outlets.lakeout` as `fk: packagedata.ifno` — unambiguous, but named differently from `ifno` so the general @@ -1381,12 +1382,12 @@ def _retarget( new_arms[arm_name] = arm new_setting = setting_field.model_copy(update={"arms": new_arms}) - new_item = item.model_copy( - update={ - "fields": {fn: f for fn, f in item.fields.items() if fn != "number"} - | {"laksetting": new_setting} - } - ) + fields = {fn: f for fn, f in item.fields.items() if fn != "number"} | { + "laksetting": new_setting + } + # With `number` in its arms, a record of only the union is the union: the + # list's element is the union itself, as PRP's `releasesetting` is. + new_item = new_setting if len(fields) == 1 else item.model_copy(update={"fields": fields}) new_perioddata = perioddata.model_copy(update={"item": new_item}) new_period = period.model_copy( update={"fields": {**period.fields, "perioddata": new_perioddata}}