Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BMI - getters and setters for logical and string types #996

Closed
pya opened this issue Jul 24, 2022 · 8 comments
Closed

BMI - getters and setters for logical and string types #996

pya opened this issue Jul 24, 2022 · 8 comments

Comments

@pya
Copy link

pya commented Jul 24, 2022

Is your feature request related to a problem? Please describe.

Currently, the BMI interface in mf6bmi.f90 implements getters and setters for int, float, and double. The types logical and string are not supported, yet. It would be very good to be able to access and modify values for these two data types.

Describe the solution you'd like

These functions should be exposed via BMI:

  • get_value_double_logical
  • get_value_double_ptr_logical
  • set_value_double_logical
  • get_value_double_string
  • get_value_double_ptr_string
  • set_value_double_string

The shape and rank should be handled analogous to int and double data types, as logical and string can also be in arrays.

Describe alternatives you've considered

There is no good alternative.

Additional context

I tested this with xmipy version 1.1 on the example Tidal.

The method mf6.get_input_var_names (where mf6 is an instance of XmiWrapper for the example Tidal) returns 677 names.
Using mf6.get_value_ptr with all these names throws either an xmipy.errors.InputError or an xmipy.errors.XMIError for some names.

Sorting out the errors by type:

values = {}
input_errs = {}
xmi_errors = {}
for name in mf6.get_input_var_names():
    try:
        values[name] = mf6.get_value_ptr(name)
    except InputError as err:
        input_errs[name] = err
    except XMIError as err:
        xmi_errors[name] = err

Gives 37 problems:

>>> len(input_errs)
11
>>> len(xmi_errors)
26

The InputErrors are all due to not recognized logical values:

>>> {mf6.get_var_type(name) for name in input_errs}
{'LOGICAL'}

The XMIErrors are all (the INTEGER must be another problem) due to not recognized string values:

>>> {mf6.get_var_type(name) for name in xmi_errors}
{'INTEGER (1)',
 'STRING LEN=16 (0)',
 'STRING LEN=16 (1)',
 'STRING LEN=16 (3)',
 'STRING LEN=33',
 'STRING LEN=40 (0)',
 'STRING LEN=40 (20)',
 'STRING LEN=40 (30)',
 'STRING LEN=40 (5)',
 'STRING LEN=40 (84)',
 'STRING LEN=500'}

One might argue that changing the values of logical and string is not important. Counterarguments are:

  • Reading these values can be very valuable.
  • When reading functions exit, writing functions should also be there for completeness.
  • Switching a logical value can be very useful.
  • Even changing string values may be of use.
  • All data types should be handled in the same way.
@langevin-usgs
Copy link
Contributor

Nice feature request, @pya. This is related to #856. Supporting a single string and a logical value should be possible through BMI, but there are some issues with supporting an array of strings. We are working on it.

@pya
Copy link
Author

pya commented Jul 24, 2022

I see your problem. Would "practicality beats purity" work here? How about:

  1. Make string scalars available in the same ways as other scalars.
  2. Expose arrays of strings as arrays of characters with LEN=1. This means the rank would be one higher than it actually is. For example, instead of a one-dimensional array of strings, a two-dimensional array of characters of with LEN=1 would be exposed.

Clients such as xmipy can take care of turning the arrays of characters back to an arrays of strings with a lower rank. So, the user would see the "right thing" and xmipy does the appropriate translations in both directions. Would this work? Does the increased-by-one rank be a problem in other contexts? Does this violate the BMI specification?

This approach is pretty ugly. But putting on enough makeup could hide this ugliness, or not?

@pya
Copy link
Author

pya commented Aug 1, 2022

@langevin-usgs Does my suggestion address the (right) problem? If so, would this be a viable approach?

@langevin-usgs
Copy link
Contributor

Hey Mike, we will plan to take a look at this over the next couple weeks or hopefully sooner. Many of us have been out lately, but things should start picking back up. We were hoping the gfortran bug described in #987 would have been fixed by now as it is relevant to this request, but it looks like it's still open. Supporting string scalars shouldn't be a problem, and I think we can handle string arrays using some sort of trick, like you suggest, but having the gfortran fix would make the string arrays much easier to support.

@pya
Copy link
Author

pya commented Aug 1, 2022

A compiler bug is a real showstopper. :( Let's hope it gets fixed soon. Let me know when you have a version that supports string and logical. Then I can help and write some xmipy-based tests.

@mjr-deltares
Copy link
Contributor

mjr-deltares commented Aug 18, 2022

Hi @pya, as @langevin-usgs said, we are currently looking into this issue. Our current view is that we are not likely to support pointer access to strings and arrays of strings through the API. So, the function get_value_ptr_string will not likely be implemented. However, we would then still have get_value_string to copy a string or an array of strings from MODFLOW into pre-allocated memory.

Are there scenarios you foresee that would require to have pointer-access to strings in MODFLOW, or is the proposed solution sufficient to your needs as well?

langevin-usgs added a commit to langevin-usgs/modflow6 that referenced this issue Aug 18, 2022
* new type for storing jagged array of character strings in memory manager
* draft PR needs more work
* Related to MODFLOW-USGS#987, MODFLOW-USGS#996, and MODFLOW-USGS#856
langevin-usgs added a commit to langevin-usgs/modflow6 that referenced this issue Aug 22, 2022
* new type for storing jagged array of character strings in memory manager
* draft PR needs more work
* Related to MODFLOW-USGS#987, MODFLOW-USGS#996, and MODFLOW-USGS#856
langevin-usgs added a commit that referenced this issue Aug 25, 2022
* new CharacterStringType can be used for storing jagged array; however, MemoryManager implementation stores only non-jagged character arrays
* Related to #987, #996, and #856
* implemented new character string array for boundname (called boundname_cst)
* implemented new character string array for auxname (called auxname_cst)
* auxname_cst and boundname_cst will be available through API, but only as a copy
* a follow up pull request by @mjr-deltares will support string access through the MODFLOW API
* additional PRs are needed to add strings to the memory manager
* additional PRs are needed to check for other auxname and boundname uses (for example, csub) and implement memory manager copies of them for API access
@langevin-usgs
Copy link
Contributor

Hey @pya, we have added support for accessing strings through the API (both on the MODFLOW side and the xmipy side). You can only obtain a copy of strings; there is no way to set them. We also haven't done anything yet with logicals. If there is a use case that requires the ability to access logicals, then we can possibly implement something. Let us know if and how the capability to set strings and work with logicals is critical for your applications and we can consider further development.

@pya
Copy link
Author

pya commented Sep 2, 2022

Great. I will have a look at it. Regarding the use cases for setting of string values and working with logicals, I don't have use cases right now. But experience shows that there always will be "creative" users who will find legitimate uses for such features. I think in the long run supporting the full BMI interface, i.e. read and write access to all types of variables, should be the goal. @langevin-usgs What do you think about this?

I have an upcoming project in which we we will implement new uses of the API. I anticipate that we will find interesting uses cases that need these features.

langevin-usgs added a commit that referenced this issue Dec 1, 2022
* ci(release): reinitialize develop for next release

* docs(releasenotes): reinitialize release notes for next release (#922)

* feat(maw-mfrcsv): add option to write MAW flow reduction to csv (#925)

add option to write MAW extraction and injection flow reductions to csv.

Co-authored-by: kzeiler <kkzeiler@gsi-net.com>

* fix(openfile): report file that could not be opened (#932)

Start adding doxygen comments and reformatting older code.

Closes #931

* fix(flopy interface change): updated dfn files and test cases to work with flopy's new interface (#933)

* feat(dfn): Move information from flopy.dfn into the header of the package dfns.

* fix(test cases): test cases changed to work with new flopy interface

* testing

* remove test

* fix(GwfGwtExchange): update indexing variable when MVR is active (#934)

Fixed indexing error for flow/transport model when MVR is active and aux variables are used for concentrations.

Two new autotests patterned after the test_gwt_ssm01FMI autotest drop RIV, add SFR, and add MVR and MVT to transfer water and solute from a WEL to SFR. This condition resulted in an error message that not should have been printed to the screen. However, the error condition only happened when the flow and transport simulations were run simultaneously (the 2nd of the two new autotests). The first autotest runs the models separately and has been added for completeness (tests the same configuration that runs GWF & GWT simultaneously). Both autotests use auxiliary variables and mover in the WEL package, the condition condition that previously triggered an error msg that shouldn't have been triggered (see below).

* ci(compiler): specify FC env var in CI (#921)

* Not strictly needed, but why shouldn't we be explicit about it.
* Failure is know sporadic failure on macOS

* fix(xt3d): array access error for highly refined nested gwf or gwt model (#939)

* The xt3d procedure for storing and adding matrix coefficients for extended xt3d connections did not work for lgr configurations in which a highly refined child model was nested inside a coarser parent model.  The logic was improved so that matrix terms added by exchanges were properly handled by the internal calculations used by xt3d.   Prior to this fix, the xt3d logic assumed that any matrix terms added to the local model space of the solution were because of xt3d.  This can no longer be assumed for lgr configurations.

* refactor(GwfMvr): store mover variables in memory manager (#940)

* create new GwfMvrPeriodData object for reading and storing mover stress period data
* store mover stress period data as vectors in the memory manager
* revise the low-level mover object to point into the input data
* update makefile
* doxygenate

* fix(evt): check to ensure pxdp is specified correctly (#941)

* implementation assumes user specifies pxdp in order from low to high and that values are between zero and 1.0.
* Addresses #938 and #930
* fix duplication of final error message upon termination
* update release notes

* Improve vscode meson integration (#945)

- Removes compile call. This is already done by install. Now it doesn't give a confusing message anymore.

- Print the commands it runs

* refactor(gwt): Create generalized transport base class for gwe (#942)

* refactor(gwt): set hooks to prepare for for gwe

* Update header comments

* Add new generalized transport module to meson.build

* amendment needed in another makefile as well.

* Add issue templates

* fix(api): fix memory path case for IMSLINEAR (#952)

* refactor(CSUB): refactor CSUB to make tridiagonal solve generic subroutine (#954)

* style: apply fprettify formatting (#956)

* ci(disu): add disu transport test (#958)

* style(exchanges): apply fprettify formatting (#957)

* working toward consistent code formatting

* (fix) small mf6core style issues (#949)

* style(connections): apply fprettify formatting (#960)

* working toward consistent code formatting

* style(geometry): apply fprettify formatting (#961)

* working toward consistent code formatting

* feat(api): add get_version routine to modflow api (xmi) (#936)

* add get_version routine to modflow api (xmi)
* update xmi get_version

* docs(developer): require Python3.8 per xmipy dependency (#964)

* style: convert python scripts to use f-strings (#965)

Downgrade GitHub Actions windows VM to use server-2019.
Black formatting and isort on python scripts.

* docs: Fix vscode instructions (#962)

* docs: Fix vscode instructions

Fixes #959

* docs: Improve instructions

* Update .vscode/README.md

Co-authored-by: langevin-usgs <langevin@usgs.gov>

Co-authored-by: langevin-usgs <langevin@usgs.gov>

* style(gwf): apply fprettify formatting (#963)

* working toward consistent code formatting

* feat(memory): fully implement storing of strings and 1d string arrays (#966)

* style(gwt): apply fprettify formatting (#969)

* working toward consistent code formatting

* ci: update scripts to use meson to build instead of pymake (#967)

* ci: test build_nightly script (#970)

* ci: update build_nightly script (#971)

* fix(ci): workaround for windows-2022 gfortran executable run failures (#968)

* fix(util): remove rogue file (#972)

* ci: update Intel OneAPI version (#973)

* style(model): apply fprettify formatting (#974)

* working toward consistent code formatting
* add enable-decl and strip-comments to fprettify configuration

* test(gwf_disv_uzf): New autotest checks uzet and gwet results (#947)

* ci: fix Intel OneAPI build on Windows (#978)

The issue is caused by the latest meson release. Exclude meson version 0.63.0.
Update meson.build with additional compiler switches to make consistent with
pymake builds.

* style(exchange, solution): apply fprettify formatting (#975)

* working toward consistent code formatting

* fix(util-sparse): fix stack overflow exception in overloaded sparse init (#979)

* style(sim, timing, util): apply fprettify formatting (#980)

* working toward consistent code formatting
* does not include InputOutput.f90 which requires more significant restructuring

* ci(actions): add ci action to check fortran source formatting (#982)

* fix(compilerversion): fix format statement (#983)

* style(srcbmi): apply fprettify formatting (#984)

* working toward consistent code formatting

* docs(formatting): add fortran source formatting to documentation (#981)

* docs(formatting): add fortran source formatting to documentation
* reorganize vscode README and include fprettify integration
* update DEVELOPER and CONTRIBUTING docs to describe tools and standard

* docs(formatting): add fortran source formatting to documentation
* reorganize vscode README and include fprettify integration
* update DEVELOPER and CONTRIBUTING docs to describe tools and standard

* docs(formatting): add fortran source formatting to documentation
* reorganize vscode README and include fprettify integration
* update DEVELOPER and CONTRIBUTING docs to describe tools and standard

* docs(formatting): add fortran source formatting to documentation

* reorganize vscode README and include fprettify integration
* update DEVELOPER and CONTRIBUTING docs to describe tools and standard

* Add conda `environment.yml` (#977)

This commit adds an `environment.yml` which should make it easier to keep docs and CI in sync.
It also changes the behavior of the vscode tasks.
It expects an environment called `modflow6` created with the following command.
```
conda env create --force -f environment.yml
```

You might also want to change your `"fortran.fortls.path"` setting to the `fortls` in your `modflow6` environment.

Ideally, you would use this environment for your daily development work as well and adapt it if our dependencies change.

* style(zonebudget): apply fprettify formatting (#985)

* working toward consistent code formatting

* ci: update ubuntu VM to latest for previous gfortran versions (#986)

Make workflow for gfortran versions (5 & 6) that are not available 
on ubuntu-latest VM. Cleanup workflows to use mamba instead of 
pip where possible. Update rtd to use myst_parser instead of 
reconnmark to convert markdown tables to html.

* ci(actions):  cache mamba conda downloads and environment (#988)

* fix(npf: k33/k11 error (GitHub issue #989) (#990)

Close #989

* docs(DEVELOPER.md): Visual Studio for ifort (#991)

* Update DEVELOPER.md

I removed the Visual Studio installation on my Windows laptop (because I'm using VSCode), and then I found out ifort wouldn't compile anymore. I reinstalled Visual Studio, but still got a confusing error: "visual studio 2017 or 2019 is not found in c:\program files (x86)\microsoft visual studio\<2017 or 2019>\<edition>, please set vs2017installdir or vs2019installdir".

This is resolved by installing the C++ Desktop Development components. Apparently, the ifort compilers rely on some of the C++ parts.
I'm quite confident some parts aren't required (E.g. Test Adapter for Boost.Test), but I haven't done the research to find which parts are required and not. At the least, just checking the "Desktop Development with C++" checkbox does the trick.

* Update DEVELOPER.md

* fix(timeseries): ensure METHOD/METHODS specified in ATTRIBUTES block (#993)

* fix(gwfgwt): ensure GWF and GWT are in different IMS (#994)

* close #946
* GWF must be in a separate IMS that is solved before GWT
* fprettify

* ci: downgrade rtd python version to 3.8

* ci(rtd): remove pinned markdown version (#997)

* docs(gwf-buy.dfn): variable description refers to block that does not exist (#1004)

* fix(disv): check for zero cell area (#1010)

Close #1009

* fix(gwtgwt): allow exchange to work without XT3D active for dispersion (#1008)

* ci: update path for rtd requirements

* ci(z03): prevent regression on gwtgwt example since keyword changed (#1011)

* fix(gwt): LKT fix for outlet flows (#1015)

* When the LAK Package was used with a combination of outlets that routed water to another lake and outlets that did not, then the budget information stored for the LAK Package had uninitialized records for LAK to LAK flows.  These uninitialized records were used by the LKT Package and possibly other programs.  The LAK to LAK budget information was modified to include only valid records.
* Close #1006
* Close #1007

* fix(ci): remove gfortran end of life 5 and 6 (#1017)

* remove workflow
* fix z03 test to not run comparison model if make_comparison == False

* feat(string): implement CharacterStringType (#1013)

* new CharacterStringType can be used for storing jagged array; however, MemoryManager implementation stores only non-jagged character arrays
* Related to #987, #996, and #856
* implemented new character string array for boundname (called boundname_cst)
* implemented new character string array for auxname (called auxname_cst)
* auxname_cst and boundname_cst will be available through API, but only as a copy
* a follow up pull request by @mjr-deltares will support string access through the MODFLOW API
* additional PRs are needed to add strings to the memory manager
* additional PRs are needed to check for other auxname and boundname uses (for example, csub) and implement memory manager copies of them for API access

* feat(API string support): support string access through API (#1023)

* doc(gwt-uztobs.tex): fix typo in uzt obs type (#1026)

fixes #1025

* fix(gwt obs): refactor GWT obs for LKT, SFT, MWT, and UZT (#1024)

* Close #1019
* Close #1021 
* Add GWT OBS tests to test_gwt_prudic2004t2.py and to MWT and UZT tests
* Update release notes
* Update erroneous observation text in mf6io

* fix(npf): sat thickness fix for vertically staggered confined cells (#1027)

* Close #1022

* Introducing the concept of distributed data without functional changes (#1029)

* First working version (GWF) of syncing distributed model data

* Distributed data in progress (contains floating point exception)

* fixed gwfflowja mapping for gwtgwt

* add space

* minor tweak for readability

* bug fix: removed pointer attribute from input arg

* add porosity to dist. variables

* add new files to vs

* change to list of dist vars

* WIP: last test failing: *mult_exg

* fix test (interface corner cases)

* "fprettify the world"

* cleaning up

* move fmi variables to interface model

* a bit more cleanup

* add primary exchange to interfacemap, getting rid of the lookup operation in setFlowToExchanges

* update makefile

* fprettify some more

* we cannot use findloc (yet)

* removed unused variable

* fix(stringlist): allocate string before assignment (#1030)

* refactor(npf): always allocate and store k22 and k33 (#1031)

* refactor(npf): always allocate and store k22 and k33

* Prior to this PR k22 and k33 would point to k11 if they weren't specified by the user in order to save memory
* With this PR, k22 and k33 are always allocated and stored, even if they aren't specified by the user
* This simplifies the code and makes API access to k22 and k33 more straightforward, at the memory cost of two grid-sized arrays in some cases
* Closes #1000

* add two new tests from Eric Morway's previous pull request (#1012)

* docs: Add vsdbg to vscode docs (#1032)

Turns out you need to run vsdbg to debug with ifort compiled binaries on Windows.

* fix(budgetcsv): fix intermittent failure with budgetcsv option (#1035)

* Close #1033

* patch(apt): add variables to memory manager (#1036)

* arrays used for indexing locations in the numerical solution array are now stored in memory manager
* revise the way iasym is set for the GWT model

* feat(context): increase mempath to allow for context (#1037)

The memory path has been increased in size by LENCONTEXT plus a memory path separator to allow for an optional context to be supplied.

* fix(exg): cellid not correct in error message (#1040)

* If cellid in exchange is in IDOMAIN<1 cell, then the cellid written to the error message was wrong
* Close #1038

* docs(mf6io): fix discrepancy in EVT example (#1041)

* data in the period block contains pxpd1 and pxpd2, implying nseg=3, but nseg not specified which suggests a default value of 1
* cleanup variable names

* fix(lak): withdrawal and budget errors (#1045)

* Close #1043
* When a WITHDRAWAL value was specified for lakes, only the withdrawal value for the last lake would be reported in budget files, lake budget tables, and in lake withdrawal observations.  This error would also be propagated to the GWT Lake Transport (LKT) Package, if active.  This error would only show up for models with more than one lake and if the lake withdrawal term was included.
* When lakes were assigned with the STATUS CONSTANT setting to prescribe the lake stage, the CONSTANT term used in the lake budget table was tabulated using an incorrect sign for aquifer leakage.  This error would result in inaccurate budget tables.  The program modified to use the correct leakage values for calculating the CONSTANT term.
* The BUDGETCSV option was activated to work for the GWT advanced packages; although the keyword option was read, the file remained empty.
* A new test was added for LAK and LKT
* The bedleak entry in gwf-lak.dfn support was specified as DOUBLE PRECISION even though NONE could be specified.  This meant that lake packages could not be loaded by flopy if bedleak was specified as NONE.
* The description for the SS_CONFINED_ONLY option in the GWF Storage Package was improved.
* The release notes were updated to reflect these changes.

* ci: use fortran compiler cache/install actions (#1042)

* fix(evt): model crashes with option SURF_RATE_SPECIFIED and nseg=1 (#1047)

* fix model crash with option SURF_RATE_SPECIFIED and nseg=1
* add a brief description in the release notes

* docs(releasenotes): hotfix to escape underscore in release notes (#1049)

* release notes was updated in #1047 and broke nightly build
* minor change to npf

* feat(NumericalPackage): store the package type in the memory manager (#1055)

* store package_type as a string variable stored in the memory manager
* duplicates this%filtyp
* More extensive refactoring can be done to store name_model and package_name in memory manager

* refactor(dis): remove unused DIS code and change NPF array initialization (#1056)

* remove dis_init_mem routines as they were not being used
* change size of unspecified NPF arrays to be zero instead of 1, which will help support a forthcoming interface model pull request
* update some tex files that had not been updated based on changes to the dfn files

* rfct(npf/dsp): move read grid data from ar to df (#1057)

* moved npf array allocation and grid data reading up to npf_df
* this is preparatory work for the synchronization in interface model (towards parallelization)

* rfct(dis): add xc, yc to DIS as cell center coordinates (#1060)

* prep. refactoring for the interface model:
- introduced cell center coordinate arrays for all DIS, getting rid of get_cellxy subroutine
- transform_xy is now stateless

* rfct(ifmod): introducing concept of distributed data (#1059)

* move allocate_arrays up to _df for dsp and npf

* - add BEFORE_AR stage to synchronization
- adding some npf vars (K11, K22, K33, ICELLTYPE)
- introduced delayed retrieval of memory items in sync,
others (and for dsp too) are awaiting input data model

* first test with dist data access: tests green

* Further reduction of using (numerical) model pointers in the interface model framework

* moved npf array allocation and grid data reading up to npf_df

* undoing this temporarily

* fix: remnant causing double allocation

* save progress: full npf synchronization is working now

* npf data in interface is now fully synchronized

* move allocate arrays and reading grid data up to define for dsp

* interface model dsp synchronization implemented too

* update makefile

* update msvs

* fprettify

* fixing merge error

* load ia and ja instead of pointer

* prep. refactoring for the interface model:
- introduced cell center coordinate arrays for all DIS, getting rid of get_cellxy subroutine
- transform_xy is now stateless

* replacing more pointers with load from memory

* fixing typo in disv

* fix: DISU does not always have cellxy data

* fprettify

* Regional lookup table converted to using DistributedModelType too

* Fully removed model pointer from global cell data structure

* fix(maw): patch-up relatively minor typo (#1063)

* fix(getblock): add error message if block not found (#1065)

* uget_block did not terminate with an error when looking for a required block and found end of file instead
* update release notes
* Close #148

* ci: add meson test for installation success (#1062)

* feature(input-data-model): add idm core with initial package use (#1064)

* introduce dfn derived fortran input definition format
* add script to generate input definitions
* add generic input loader for mf6 file types
* add mem_set_value interface
* update dis, disv, disu, npf, dsp to source input from input data path
* pass invalid npf,dsp inunit number from interface model
* add doxygen comments for IDM routines
* fprettify

Co-authored-by: mjreno <mreno@IGSAAA071L00066.gs.doi.net>
Co-authored-by: Langevin, Christian D <langevin@usgs.gov>

* refactor(arrayreader): working on object-based array reader (#1067)

* refactor(input-data-model): rework found construct for readability and maintainability (#1072)

Co-authored-by: mjreno <mreno@IGSAAA071L00066.gs.doi.net>

* refactor(io): miscellaneous io cleanup (#1073)

* fix(buy): add missing else; switch messaging to lowercase (#1077)

* ci: refactor/update miscellaneous (#1076)

* switch from modflowpy/install-gfortran-action to awvwgk/setup-fortran for gfortran setup
* rename test_z03_largetests.py to test_z03_largetestmodels.py (allows cleaner CI config)
* bump latest gfortran tests, nightly build tests and large/example model tests to GCC/gfortran 12
* colocate push-triggered CI jobs in ci.yml
* update CI badges in readme
* mark get_exes tests as flaky to retry download on failure (and add flaky to environment.yml)
* add ci-diagnose* to branches triggering CI

* feat(vsc): New viscosity package for GWF model type (#1071)

Addition of new viscosity package for the GWT Model

* fix(uzf): uzf not routing properly (#1082)

* uzf did not route water to water table unless there was an underlying uzf cell
* Close #1075
* add test for uzf fix
* update release notes for next release

* doc(suptechinfo): Update MF6 enhancements table in Ch. 1 (#1083)

* fix(zbud): fix zonebudget for spaces in path (#1085)

* fix(zbud): fix zonebudget for spaces in path

* update release notes

* typo

* fix(autotest): resolve inconsistent length units in Prudic model (#1058)

* close #1053

* fix(mf5to6msvs): update Visual Studio file for mf5to6 (#1086)

* docs(release): preparation for 6.4.0 release (#1089)

* fix(vsc): issue error if VSC used in GWF-GWF model (#1090)

* update release notes
* issue error if more than one VSC6/BUY6 package active
* convert to lower case error messages

* create 6.4.0 release

* fprettify and use 11/30/22 release date

Co-authored-by: kzeiler <80273038+kzeiler@users.noreply.github.com>
Co-authored-by: kzeiler <kkzeiler@gsi-net.com>
Co-authored-by: jdhughes-usgs <jdhughes@usgs.gov>
Co-authored-by: spaulins-usgs <spaulinski@usgs.gov>
Co-authored-by: Eric Morway <emorway@usgs.gov>
Co-authored-by: Hofer-Julian <30049909+Hofer-Julian@users.noreply.github.com>
Co-authored-by: mjreno <renomik@gmail.com>
Co-authored-by: mjreno <mjreno@ncsu.edu>
Co-authored-by: mjr-deltares <45555666+mjr-deltares@users.noreply.github.com>
Co-authored-by: w-bonelli <wbonelli@uga.edu>
Co-authored-by: damianmerrick <damian.merrick@hydroalgorithmics.com>
Co-authored-by: Huite <huitebootsma@gmail.com>
Co-authored-by: w-bonelli <wesbonelli@gmail.com>
Co-authored-by: mjreno <mreno@IGSAAA071L00066.gs.doi.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants