Skip to content

Commit

Permalink
Merge pull request #1205 from knutfrode/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
knutfrode authored Dec 18, 2023
2 parents c6cb259 + 2bca199 commit 34fd858
Show file tree
Hide file tree
Showing 6 changed files with 277 additions and 50 deletions.
5 changes: 5 additions & 0 deletions opendrift/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ def get_configspec(self, prefix='', level=[1, 2, 3]):
return configspec

def set_config(self, key, value):
if isinstance(value, dict): # Recursive call with items in dictionary
for subkey,subvalue in value.items():
self.set_config(f'{key}:{subkey}', subvalue)
logger.info(f'set_config(\'{key}:{subkey}\', {subvalue})')
return
if not key in self._config:
self.list_config()
raise ValueError('No config setting named %s' % key)
Expand Down
198 changes: 198 additions & 0 deletions opendrift/models/openoil/adios/get_max_water_fraction_for_oils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
def get_water_fractions():
import difflib
import json
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from opendrift.models.openoil import OpenOil

oot = OpenOil(location='Norway').oiltypes
print(oot)

o = pd.read_excel('oljedatabase_alle-25.10.2023.xlsx')
oljer = o['Oljetype'].unique().astype(list)
oljer = oljer[0:-1]
print(oljer)

if False:
for ot in oot: # Loop to generate suggestions for mapping
matches = difflib.get_close_matches(ot.title(), oljer, 1, cutoff=.5)
if len(matches) > 0:
matches = matches[0]
else:
matches = ''
print(f'\'{ot}\': \'{matches}\',')

mapping = {
'AASGARD A 2003': 'Åsgard 2003',
'AASTA HANSTEEN BLEND 2020': 'Aasta Hansteen Blend 2020',
'ALTA 2016': 'Alta 2016',
'ALVE 2010': 'Alve 2014 *(2017)',
'ALVE 2014': 'Alve 2014 *(2017)',
'ALVHEIM KNELER 2009': 'Kneler (Alvheim) 2009',
'ATLA KONDENSAT 2013': 'Atla kondensat 2013',
'AVALDSNES 2012': 'Avaldsnes (Johan Sverdrup) 2012',
'BALDER 2002': 'Balder Blend 2010',
'BALDER BLEND 2010': 'Balder Blend 2010',
'BOYLA CRUDE 2016': 'Bøyla 2016',
'BRAGE 2013': 'Brage 2013',
'BRASSE 2018': 'Brasse 2018',
'BREAM 2011': 'Bream 2011',
'BREIDABLIKK 2023': 'Breidablikk',
'BRYNHILD CRUDE 2015': 'Brynhild 2015',
'CAURUS 2011': 'Caurus 2011',
'DRAUGEN 2008': 'Draugen 2008',
'DRIVIS 2017': 'Drivis 2017',
'DUGONG 2022': 'Dugong 2022',
'DUVA 2021': 'Duva 2021',
'DVALIN 2020': 'Dvalin kondensat 2020',
'EKOFISK 2002': 'Ekofisk blend 2002',
'EKOFISK BLEND 2002': 'Ekofisk blend 2002',
'EKOFISK BLEND 2015': 'Ekofisk J 2002',
'EKOFISK J 2015': 'Ekofisk J 2015',
'ELDFISK 2002': 'Eldfisk B 2015',
'ELDFISK B 2015': 'Eldfisk B 2015',
'ELDFISK BLEND 2015': 'Eldfisk B 2015',
'ELDFISK KOMPLEKS 2015': 'Eldfisk Kompleks 2015',
'ELLI 1999': 'Elli 1999',
'ELLI SOUTH 1999': 'Elli South 1999',
'EMBLA 2002': 'Embla 2002',
'FENJA (PIL) 2015': 'Fenja (Pil) 2015',
'FOGELBERG CONDENSATE 2021': 'Fogelberg Kondensat 2021',
'FORSETI 2002': 'Forseti 2002',
'FOSSEKALL 2013': 'Fossekall 2013',
'FRAM 2013': 'Fram 2013',
'FROSK 2020': 'Frosk 2020',
'FROY 1996': 'Frøy 1996',
'GARANTIANA 2013': 'Garantiana 2013',
'GAUPE 2011': 'Gaupe 2011',
'GINA KROG CRUDE 2018': 'Gina Krog 2018',
'GJOA 2011': 'Gjøa 2011',
'GLITNE 2002': 'Glitne 2002',
'GOLIAT BLEND 50/50 2008': 'Goliat Blend 2008',
'GOLIAT BLEND 70/30 2008': 'Goliat Blend 2008',
'GOLIAT KOBBE 2008': 'Goliat Kobbe 2008 *(2010)',
'GOLIAT REALGRUNNEN 2001': 'Goliat Realgrunnen 2003',
'GOLIAT REALGRUNNEN 2008': 'Goliat Realgrunnen 2003',
'GRANE 1997': 'Grane 1997',
'GROSBEAK 2012': 'Grosbeak 2012',
'GUDRUN 2012': 'Gudrun 2012',
'GUDRUN 2019': 'Gudrun 2019',
'GULLFAKS A BLEND 2010': 'Gullfaks A 2010',
'GULLFAKS C BLEND 2010': 'Gullfaks C 2010',
'GULLFAKS SOR 1996': 'Gullfaks Sør 1996',
'GYDA 2002': 'Gyda 2002',
'HAVIS 2013': 'Havis 2013',
'HEIDRUN AaRE 2004': 'Heidrun Åre 2004',
'HEIDRUN EXPORT BLEND 2004': 'Heidrun Åre 2004',
'HEIDRUN TILJE 2004': 'Heidrun Åre 2004',
'HULDRA KONDENSAT 1998': 'Huldra 1998',
'IRIS CONDENSATE 2020': 'Iris 2020',
'IVAR AASEN 2012': 'Draupne (Ivar Aasen) 2012',
'JORDBAER 2011': 'Jordbær 2011',
'KRISTIN 2006': 'Kristin 2006',
'KVITEBJORN 2009': 'Kvitebjørn 2009',
'KVITEBJORN 2019': 'Kvitebjørn 2019',
'LAVRANS 1997': 'Lavrans 1997',
'LILLE PRINSEN 2022': 'Lille Prinsen 2022',
'LILLEFRIGG KONDENSAT 1996': 'Lillefrigg 1996',
'LINERLE 2005': 'Linerle 2005',
'LUNO 2011': 'Luno (Edvard Grieg) 2011',
'LUNO II 2014': 'Solveig (Luno II) 2014',
'MARIA 2013': 'Maria 2013',
'MARTIN LINGE CONDENSATE 2016': 'Martin Linge kondensat 2016',
'MARTIN LINGE CRUDE 2016': 'Martin Linge olje 2016',
'MARULK 2014': 'Marulk 2014',
'MORVIN 2008': 'Morvin 2008',
'NJORD 1997': 'Njord 1997* (2023)',
'NJORD 2002': 'Njord 2003',
'NJORD 2003': 'Njord 2003',
'NORNE 2010': 'Norne 2018',
'NORNE BLEND 2010': 'Norne Blend 2010',
'NORNE CRUDE 2017': 'Norne 2018',
'ODA 2019': 'Oda 2019',
'ORMEN LANGE KONDENSAT 2008': 'Ormen Lange 2008',
'OSEBERG A 2013': 'Oseberg A 2013',
'OSEBERG BLEND 2007': 'Oseberg Blend 2007',
'OSEBERG C 1995': 'Oseberg C 1999',
'OSEBERG C 2013': 'Oseberg A 2013',
'OSEBERG OST 1998': 'Oseberg C 1999',
'OSEBERG OST 2013': 'Oseberg Øst 2013',
'OSEBERG SOR 2000': 'Oseberg Sør 2001',
'OSEBERG SOR 2013': 'Oseberg Sør 2013',
'OSELVAR 2012': 'Oselvar 2012',
'RINGHORNE 2002': 'Ringhorne 2002',
'SF NORD BRENT 2021': 'SF Nord Brent 2021',
'SKARFJELL 2014': 'Skarfjell 2014',
'SKARV 2004': 'Skarv olje 2004',
'SKARV KONDENSAT 2014': 'Skarv kondensat 2014',
'SKOGUL 2020': 'Skogul 2020',
'SKRUGARD 2012': 'Skrugard 2012',
'SLEIPNER KONDENSAT 2002': 'leipner 2002',
'SLEIPNER VEST 1998': 'Sleipner Vest 1998',
'SMORBUKK 2003': 'Smørbukk Sør 2003',
'SMORBUKK KONDENSAT 2003': 'Smørbukk kondensat 2003',
'SMORBUKK SOR 2003': 'Smørbukk Sør 2003',
'SNOHVIT KONDENSAT 2001': 'Snøhvit 2001',
'SNORRE B 2004': 'Snorre B 2004',
'SNORRE TLP 2004': 'Snorre TLP 2004',
'STAER 2010': 'Stær 2010',
'STATFJORD A 2001': 'Statfjord A 2001',
'STATFJORD B 2001': 'Statfjord A 2001',
'STATFJORD C 2001': 'Statfjord C 2001 *(2021)',
'SVALE 2010': 'Svale 2010',
'SVALIN 2014': 'Svalin 2014',
'SYGNA BRENT 2021': 'Sygna Brent 2021',
'TAMBAR 2002': 'Tambar 2002',
'TAU 1999': 'Tau 1999',
'TOR 2002': 'Tambar 2002',
'TOR II 2022': 'TOR ll 2022',
'TORDIS 2002': 'Iris 2020',
'TRESTAKK 2008': 'Trestakk 2008',
'TROLL, STATOIL': 'Troll 1999',
'TRYM KONDENSAT 2011': 'Trym 2011',
'TYRIHANS NORD 2004': 'Tyrihans Nord 2004',
'TYRIHANS SOR 2004': 'Tyrihans Sør 2004',
'ULA 1999': 'Ula 1999',
'UTGARD CONDENSATE 2021': 'Utgard kondensat 2021',
'VALE 2001': 'Vale 2001',
'VALE 2014': 'Vale 2014',
'VALHALL 2002': 'Valhall 2002',
'VALHALL 2021': 'Valhall 2021',
'VARG 2000': 'Varg 2000',
'VEGA CONDENSATE 2015': 'Vega 2016',
'VESLEFRIKK 2012': 'Veslefrikk 2012',
'VILJE 2009': 'Vilje 2009',
'VISUND 2009': 'Visund 2009',
'VISUND CRUDE OIL 2020': 'Visund Crude Oil 2020',
'VISUND SOR CONDENSATE 2020': 'Visund Sør Kondensat 2020',
'VOLUND 2010': 'Volund 2010',
'VOLVE 2006': 'Volve 2006',
'WISTING 2015': 'Wisting 2015',
'WISTING CENTRAL 2017': 'Wisting Central 2017',
'YME 2023': 'Yme 2023'
}


#o = o.loc[o['Oljetype'] == 'Yme 2023']
print(o)
print(o.columns)
print(o.groupby(['Oljetype', 'Temperatur (°C)'])['Vanninnhold'].max().to_string())

oilmax = { # Some known limits not in NOFO excel file
'MARINE GAS OIL 500 ppm S 2017':
{'temperatures': [15], 'max_water_fraction': [.1]},
'OFELIA 2023':
{'temperatures': [5, 15], 'max_water_fraction': [.4, .7]},
}

for ot in mapping:
d = o.loc[o['Oljetype'] == mapping[ot]].groupby(['Temperatur (°C)'])['Vanninnhold'].max()
oilmax[ot] = {'temperatures': list(d.keys().values),
'max_water_fraction': list(d.values)}
print(oilmax)
with open('max_water_fraction.json', 'w') as json_file:
json.dump(oilmax , json_file)

if __name__ == '__main__':
get_water_fractions()
Loading

0 comments on commit 34fd858

Please sign in to comment.