mirror of
https://git.gfz-potsdam.de/naaice/iphreeqc.git
synced 2025-12-16 08:38:23 +01:00
Merge commit '8e3d93040af90c9c0c57e0ee8ad0dee0625746d6'
This commit is contained in:
commit
8534959170
@ -1,4 +1,170 @@
|
|||||||
Version @PHREEQC_VER@: @PHREEQC_DATE@
|
Version @PHREEQC_VER@: @PHREEQC_DATE@
|
||||||
|
-----------------
|
||||||
|
February 28, 2023
|
||||||
|
-----------------
|
||||||
|
PhreeqcRM: Revised names for PhreeqcRM test case source and output
|
||||||
|
files (Tests subdirectory of distribution). Added tests SimpleAdvect_cpp
|
||||||
|
and SimpleAdvect_f90, which produce the same results as Advect_cpp
|
||||||
|
and Advect_f90, but with a minimal set of PhreeqcRM method calls.
|
||||||
|
|
||||||
|
-----------------
|
||||||
|
February 26, 2023
|
||||||
|
-----------------
|
||||||
|
PhreeqcRM: Added method InitializeYAML to initialize a PhreeqcRM
|
||||||
|
instance.
|
||||||
|
|
||||||
|
It is possible to use a YAML file to initialize the PhreeqcRM instance.
|
||||||
|
If a GUI is used to define model input, a YAML file could be used to
|
||||||
|
transfer the data from the GUI to a PhreeqcRM instance. The YAML file
|
||||||
|
contains names of PhreeqcRM methods and associated data, for example:
|
||||||
|
|
||||||
|
RunFile:
|
||||||
|
workers: true
|
||||||
|
initial_phreeqc: true
|
||||||
|
utility: true
|
||||||
|
chemistry_name: advect.pqi
|
||||||
|
|
||||||
|
InitializeYAML can be used to process the directives defined in
|
||||||
|
the YAML file. The method InitializeYAML is equivalent to BMI_Initialize.
|
||||||
|
|
||||||
|
A C++ class named YAMLPhreeqcRM is included in the Tests subdirectory
|
||||||
|
of the PhreeqcRM distribution, which provides the capability to generate
|
||||||
|
a PhreeqcRM YAML file. The file WriteYAMLFile.cpp generates a YAML file
|
||||||
|
and advection_bmi_cpp.cpp reads and processes the file to initialize
|
||||||
|
a PhreeqcRM instance.
|
||||||
|
|
||||||
|
-----------------
|
||||||
|
February 26, 2023
|
||||||
|
-----------------
|
||||||
|
PhreeqcRM: Added a rudimentary BMI (Basic Model Interface) for C++.
|
||||||
|
The interface adds minimal capabilities to the other methods of
|
||||||
|
PhreeqcRM. The only new capabilities are (1) the capability to
|
||||||
|
retrieve units for the variables for BMI_GetValues and BMI_SetValues,
|
||||||
|
and (2) the capability to use YAML (YAML ain't Markup Language)
|
||||||
|
to initialize a PhreeqcRM instance with the method BMI_Initialize
|
||||||
|
(which is equivalent to the method InitializeYAML). The YAML
|
||||||
|
capability would be especially useful if a GUI (Graphical User Interface)
|
||||||
|
is used to set up model initial conditions. The GUI could write a YAML file
|
||||||
|
that contains directives for PhreeqcRM methods that need to be run and
|
||||||
|
the corresonding data needed to initialize a PhreeqcRM instance--for example,
|
||||||
|
setting units; running a PHREEQC input file to define initial and
|
||||||
|
boundary conditions; distribution of initial conditions to the model cells;
|
||||||
|
setting initial porosity, saturation, temperature, and pressure.
|
||||||
|
When a PhreeqcRM instance is created by the simulator, it can process
|
||||||
|
the YAML file with BMI_Initialize to execute the specified PhreeqcRM methods
|
||||||
|
to apply the data specified in the YAML file.
|
||||||
|
|
||||||
|
The following is represents complete sequential, noniterative transport calculation:
|
||||||
|
|
||||||
|
PhreeqcRM phreeqc_rm(nxyz, nthreads);
|
||||||
|
phreeqc_rm.BMI_Initialize("myfile.yaml");
|
||||||
|
int ncomps;
|
||||||
|
phreeqc_rm.BMI_GetValue("ComponentCount", &ncomps);
|
||||||
|
int ngrid;
|
||||||
|
phreeqc_rm.BMI_GetValue("GridCellCount", ngrid);
|
||||||
|
std::vector c(ngrid*ncomps, 0.0);
|
||||||
|
phreeqc_rm.BMI_GetValue("Concentrations", c.data());
|
||||||
|
phreeqc_rm.BMI_SetValue("TimeStep", 86400);
|
||||||
|
for(double time = 0; time < 864000; time+=86400)
|
||||||
|
{
|
||||||
|
// Take a transport time step here and update the vector c.
|
||||||
|
your_transport(c);
|
||||||
|
phreeqc_rm.BMI_SetValue("Time", time);
|
||||||
|
phreeqc_rm.BMI_SetValue("Concentrations", c.data());
|
||||||
|
phreeqc_rm.BMI_Update();
|
||||||
|
phreeqc_rm.BMI_GetValue("Concentrations", c.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
The complete set of BMI methods is as follows:
|
||||||
|
|
||||||
|
std::string BMI_GetComponentName()
|
||||||
|
Returns "PhreeqcRM".
|
||||||
|
|
||||||
|
double BMI_GetCurrentTime()
|
||||||
|
Returns current time that has been set by the user.
|
||||||
|
|
||||||
|
double BMI_GetEndTime()
|
||||||
|
Returns current time plus the time step.
|
||||||
|
|
||||||
|
int BMI_GetInputItemCount()
|
||||||
|
Returns the number of variables that it is possible to set
|
||||||
|
with BMI_SetValue.
|
||||||
|
|
||||||
|
std::vector<std::string> BMI_GetInputVarNames()
|
||||||
|
Returns a list of the names of variables that can be set
|
||||||
|
with BMI_SetValue.
|
||||||
|
|
||||||
|
int BMI_GetOutputItemCount()
|
||||||
|
Returns the number of variables that it is possible to retrieve
|
||||||
|
with BMI_GetValue.
|
||||||
|
|
||||||
|
std::vector<std::string> BMI_GetOutputVarNames()
|
||||||
|
Returns a list of the names of variables that can be retrieved
|
||||||
|
with BMI_GetValue.
|
||||||
|
|
||||||
|
double BMI_GetTimeStep()
|
||||||
|
Returns the current time step that has been set by the user.
|
||||||
|
|
||||||
|
std::string BMI_GetTimeUnits()
|
||||||
|
Returns "seconds".
|
||||||
|
|
||||||
|
void BMI_GetValue(std::string name, void* dest)
|
||||||
|
Returns a value or vector of values for the variable identified by name.
|
||||||
|
|
||||||
|
int BMI_GetVarItemsize(std::string name)
|
||||||
|
Returns the number of bytes needed for one element of the variable
|
||||||
|
identified by name.
|
||||||
|
|
||||||
|
int BMI_GetVarNbytes(std::string name)
|
||||||
|
Returns the total number of bytes neded to store the value or vector
|
||||||
|
of values identified by name.
|
||||||
|
|
||||||
|
std::string BMI_GetVarType(std::string name)
|
||||||
|
Returns the type of the variable identified by name: "int", "double", or
|
||||||
|
"string".
|
||||||
|
|
||||||
|
std::string BMI_GetVarUnits(std::string name)
|
||||||
|
Returns the units associated with the variable identified by name.
|
||||||
|
|
||||||
|
void BMI_Initialize(std::string config_file)
|
||||||
|
Same as InitializeYAML discussed above.
|
||||||
|
|
||||||
|
void BMI_SetValue(std::string name, void* src)
|
||||||
|
Sets the value or vector of values for the variable identified by name.
|
||||||
|
|
||||||
|
void BMI_Update(void)
|
||||||
|
Calculates chemical reactions for a time step. It is equivalent to
|
||||||
|
the method RunCells. Equilibrium will be calculated between the solution
|
||||||
|
and all equilibrium reactants (EQUILIBRIUM_PHASES, EXCHANGE, etc), and
|
||||||
|
KINETICS will be integrated for the time step.
|
||||||
|
|
||||||
|
-----------------
|
||||||
|
February 26, 2023
|
||||||
|
-----------------
|
||||||
|
PHREEQC: Fixed bug with Basic functions PR_P and PR_PHI. Values
|
||||||
|
were incorrect after the first step when INCREMENTAL_REACTIONS
|
||||||
|
was set to true.
|
||||||
|
|
||||||
|
-----------------
|
||||||
|
February 25, 2023
|
||||||
|
-----------------
|
||||||
|
ALL PROGRAMS: Added the latest version of the database Thermoddem to
|
||||||
|
the distributions of PHREEQC programs. The database was downloaded
|
||||||
|
from https://thermoddem.brgm.fr/.
|
||||||
|
|
||||||
|
-----------------
|
||||||
|
March 23, 2022
|
||||||
|
-----------------
|
||||||
|
PHREEQC: "MacInnes" was misspelled in one of the warning messages.
|
||||||
|
|
||||||
|
-----------------
|
||||||
|
December 18, 2021
|
||||||
|
-----------------
|
||||||
|
PHREEQC: Fixed transport bug where the end cell should not have
|
||||||
|
been processed in part of the calculation.
|
||||||
|
|
||||||
|
Version 3.7.3: December 2, 2021
|
||||||
|
|
||||||
-----------------
|
-----------------
|
||||||
November 27, 2021
|
November 27, 2021
|
||||||
-----------------
|
-----------------
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user