Usage
Folder structure
A recommended folder structure in Equinor is (assuming the revision folder is 21.2.0 in this example):
21.2.0/fmuconfig/input
/bin
/output
The input
has a file global_master_config.yml
a possibly a few include files,
and these are edited by users.
The bin
has shell scripts that process the input to a set of YAML and/or IPL
which is stored at output
. The files in output shall never be edited by hand.
Run from script
The fmu.config
module is accessed through a script, and assuming the file structure
above, is to be run like this:
# go to fmuconfig/bin
fmuconfig ../input/global_master_config.yml <options...>
Here is an example of a shell script that runs fmuconfig from the bin
folder:
#!/bin/bash
MASTER="../../fmuconfig/input/global_master_config.yml" # all updates here
OUTFOLDER="../../fmuconfig/output" # location of result files
ROOTNAME="global_variables" # root name of result files
# clean up (be careful with syntax)
rm -f ${OUTFOLDER}/ROOTNAME*
# run command for creating YAML version (+ ert tmpl version; yml.tmpl)
fmuconfig $MASTER --rootname $ROOTNAME --mode yml --destination $OUTFOLDER \
--template $OUTFOLDER
# optional!
# run command for creating IPL version if needed (+ ert tmpl version; ipl.tmpl)
fmuconfig $MASTER --rootname $ROOTNAME --mode ipl --destination $OUTFOLDER \
--template $OUTFOLDER --tool rms
Run from python inside or outside RMS
In RMS there are two options to run global variables:
Run shell script above using system command (recommended)
Run from RMS python
For shell script for RMS, use a system command job as this:
cd ../../fmuconfig/bin; run_external sh global_variables_update.sh
The config can also be run from a python script inside RMS. In that case you need to initiate the Class instance and run a few methods. Here is an example:
"""Run global config in RMS python."""
from pathlib import Path
import fmu.config
MASTER = "../../fmuconfig/input/global_master_config.yml"
OUTPUT = "../../fmuconfig/output"
ROOT = "global_variables"
def cleanup():
for file in Path(OUTPUT).glob(ROOT + "*"):
file.unlink()
print(f"Removed old {file}")
def main():
cfg = fmu.config.ConfigParserFMU()
cfg.parse(MASTER)
# make IPL, optional!
cfg.to_ipl(rootname=ROOT, destination=OUTPUT, template=OUTPUT, tool="rms")
# YAML
cfg.to_yaml(rootname=ROOT, destination=OUTPUT, template=OUTPUT)
print("\n\nGlobal IPL and YML are updated")
if __name__ == "__main__":
cleanup()
main()