Euler simulation / Finite difference of blob with the Norkyst nordic ocean model

import logging
import opendrift
import matplotlib.pyplot as plt
from opendrift import test_data_folder as tdf
from opendrift.readers import reader_netCDF_CF_generic
from opendrift.models.basemodel import OpenDriftSimulation
from opendrift.models import eulerdrift


reader_norkyst = reader_netCDF_CF_generic.Reader('https://thredds.met.no/thredds/dodsC/fou-hi/norkystv3_800m_m00_be')
# reader_norkyst = reader_netCDF_CF_generic.Reader(tdf +  '16Nov2015_NorKyst_z_surface/norkyst800_subset_16Nov2015.nc')
lon0, lat0 = reader_norkyst.xy2lonlat(reader_norkyst.xmin, reader_norkyst.ymin)

s = eulerdrift.ExplSimulation.new(5.21, 60.19, 10., shape = (400, 400))
s.t0 = reader_norkyst.start_time
s.readers.append(eulerdrift.OpendriftReader(reader_norkyst))

print(s.U(0.0))

loc, lac = s.grid.center()
s.source_gaussian_blob(loc, lac, 1., 100, 50.)
(array([[ 0.02371971,  0.02379623,  0.02387001, ...,  0.00632167,
         0.00620393,  0.00608836],
       [ 0.02336137,  0.02343611,  0.0235081 , ...,  0.00614862,
         0.00603229,  0.00591812],
       [ 0.02300578,  0.02307874,  0.02314895, ...,  0.0059734 ,
         0.00585847,  0.00574572],
       ...,
       [-0.02523084, -0.02545059, -0.02567463, ..., -0.03269375,
        -0.0321314 , -0.03156623],
       [-0.02506342, -0.02528595, -0.02551277, ..., -0.03252814,
        -0.03196396, -0.03139696],
       [-0.02489172, -0.02511703, -0.02534662, ..., -0.03236535,
        -0.03179934, -0.0312305 ]], shape=(400, 400)), array([[ 0.02393014,  0.0242179 ,  0.02450594, ..., -0.00617881,
        -0.00625043, -0.00631862],
       [ 0.0239054 ,  0.02419334,  0.02448158, ..., -0.00619378,
        -0.00626317, -0.00632913],
       [ 0.02388037,  0.0241685 ,  0.02445692, ..., -0.00621218,
        -0.00627934, -0.00634308],
       ...,
       [-0.00299747, -0.00352994, -0.00405857, ...,  0.01718819,
         0.01673505,  0.01627916],
       [-0.00280787, -0.00333785, -0.00386399, ...,  0.01705488,
         0.01659995,  0.01614228],
       [-0.00262211, -0.0031496 , -0.00367325, ...,  0.01692432,
         0.01646761,  0.01600815]], shape=(400, 400)))

Plot the initial conditions

s.grid.plot()
plt.show()
example eulerdrift norkyst

Integrate

s.integrate(dt = 20., max_steps=300)
dx too big, dx = 10.0 > h = 2.2249830295328272
dx too big, dx = 10.0 > h = 2.224971132809529
dx too big, dx = 10.0 > h = 2.22495819142652
dx too big, dx = 10.0 > h = 2.2249442054384874
dx too big, dx = 10.0 > h = 2.2249291749045357
dx too big, dx = 10.0 > h = 2.2249130998881768
dx too big, dx = 10.0 > h = 2.224895980457338
dx too big, dx = 10.0 > h = 2.2248778166843532
dx too big, dx = 10.0 > h = 2.224858608645968
dx too big, dx = 10.0 > h = 2.2248383564233367
dx too big, dx = 10.0 > h = 2.2248170601020174
dx too big, dx = 10.0 > h = 2.2247947197719813
dx too big, dx = 10.0 > h = 2.224771335527599
dx too big, dx = 10.0 > h = 2.2247469074676496
dx too big, dx = 10.0 > h = 2.224721435695313
dx too big, dx = 10.0 > h = 2.2246949203181736
dx too big, dx = 10.0 > h = 2.2246673614482133
dx too big, dx = 10.0 > h = 2.224638759201818
dx too big, dx = 10.0 > h = 2.2246091136997657
dx too big, dx = 10.0 > h = 2.2245784250672376
dx too big, dx = 10.0 > h = 2.2245466934338056
dx too big, dx = 10.0 > h = 2.224513918933436
dx too big, dx = 10.0 > h = 2.2244801017044904
dx too big, dx = 10.0 > h = 2.2244452418897156
dx too big, dx = 10.0 > h = 2.2244093396362534
dx too big, dx = 10.0 > h = 2.224372395095627
dx too big, dx = 10.0 > h = 2.2243344084237493
dx too big, dx = 10.0 > h = 2.224295379780914
dx too big, dx = 10.0 > h = 2.224255309331798
dx too big, dx = 10.0 > h = 2.2242141972454568
dx too big, dx = 10.0 > h = 2.2241720436953245
dx too big, dx = 10.0 > h = 2.2241288488592112
dx too big, dx = 10.0 > h = 2.2240846129192984
dx too big, dx = 10.0 > h = 2.2240393360621433
dx too big, dx = 10.0 > h = 2.2239930184786676
dx too big, dx = 10.0 > h = 2.2239456603641643
dx too big, dx = 10.0 > h = 2.2238972619182875
dx too big, dx = 10.0 > h = 2.2238478233450567
dx too big, dx = 10.0 > h = 2.2237973448528505
dx too big, dx = 10.0 > h = 2.2237458266544046
dx too big, dx = 10.0 > h = 2.2236932689668105
dx too big, dx = 10.0 > h = 2.2236396720115117
dx too big, dx = 10.0 > h = 2.2235850360143026
dx too big, dx = 10.0 > h = 2.2235293612053244
dx too big, dx = 10.0 > h = 2.2234726478190634
dx too big, dx = 10.0 > h = 2.2234148960943467
dx too big, dx = 10.0 > h = 2.223356106274342
dx too big, dx = 10.0 > h = 2.2232962786065538
dx too big, dx = 10.0 > h = 2.223235413342818
dx too big, dx = 10.0 > h = 2.2231735107393034
dx too big, dx = 10.0 > h = 2.223110571056503
dx too big, dx = 10.0 > h = 2.223046594559239
dx too big, dx = 10.0 > h = 2.222981581516649
dx too big, dx = 10.0 > h = 2.222915532202195
dx too big, dx = 10.0 > h = 2.2228484468936514
dx too big, dx = 10.0 > h = 2.222780325873103
dx too big, dx = 10.0 > h = 2.2227111694269444
dx too big, dx = 10.0 > h = 2.2226409778458764
dx too big, dx = 10.0 > h = 2.2225697514249005
dx too big, dx = 10.0 > h = 2.2224974904633163
dx too big, dx = 10.0 > h = 2.2224241952647206
dx too big, dx = 10.0 > h = 2.222349866136998
dx too big, dx = 10.0 > h = 2.222274503392324
dx too big, dx = 10.0 > h = 2.2221981073471557
dx too big, dx = 10.0 > h = 2.222120678322234
dx too big, dx = 10.0 > h = 2.222042216642573
dx too big, dx = 10.0 > h = 2.2219627226374614
dx too big, dx = 10.0 > h = 2.221882196640459
dx too big, dx = 10.0 > h = 2.221800638989386
dx too big, dx = 10.0 > h = 2.221718050026329
dx too big, dx = 10.0 > h = 2.22163443009763
dx too big, dx = 10.0 > h = 2.221549779553883
dx too big, dx = 10.0 > h = 2.2214640987499346
dx too big, dx = 10.0 > h = 2.2213773880448726
dx too big, dx = 10.0 > h = 2.2212896478020285
dx too big, dx = 10.0 > h = 2.2212008783889714
dx too big, dx = 10.0 > h = 2.2211110801774994
dx too big, dx = 10.0 > h = 2.2210202535436423
dx too big, dx = 10.0 > h = 2.2209283988676525
dx too big, dx = 10.0 > h = 2.220835516534001
dx too big, dx = 10.0 > h = 2.2207416069313766
dx too big, dx = 10.0 > h = 2.220646670452675
dx too big, dx = 10.0 > h = 2.220550707495001
dx too big, dx = 10.0 > h = 2.2204537184596593
dx too big, dx = 10.0 > h = 2.2203557037521513
dx too big, dx = 10.0 > h = 2.220256663782172
dx too big, dx = 10.0 > h = 2.220156598963602
dx too big, dx = 10.0 > h = 2.220055509714505
dx too big, dx = 10.0 > h = 2.2199533964571234
dx too big, dx = 10.0 > h = 2.2198502596178704
dx too big, dx = 10.0 > h = 2.2197460996273306
dx too big, dx = 10.0 > h = 2.2196409169202487
dx too big, dx = 10.0 > h = 2.219534711935528
dx too big, dx = 10.0 > h = 2.2194274851162263
dx too big, dx = 10.0 > h = 2.219319236909547
dx too big, dx = 10.0 > h = 2.219209967766838
dx too big, dx = 10.0 > h = 2.219099678143583
dx too big, dx = 10.0 > h = 2.2189883684994007
dx too big, dx = 10.0 > h = 2.2188760392980345
dx too big, dx = 10.0 > h = 2.2187626910073504
dx too big, dx = 10.0 > h = 2.218648324099329
dx too big, dx = 10.0 > h = 2.218532939050065
dx too big, dx = 10.0 > h = 2.218416536339757
dx too big, dx = 10.0 > h = 2.218299116452702
dx too big, dx = 10.0 > h = 2.2181806798772943
dx too big, dx = 10.0 > h = 2.218061227106013
dx too big, dx = 10.0 > h = 2.217940758635425
dx too big, dx = 10.0 > h = 2.217819274966172
dx too big, dx = 10.0 > h = 2.217696776602967
dx too big, dx = 10.0 > h = 2.2175732640545904
dx too big, dx = 10.0 > h = 2.2174487378338816
dx too big, dx = 10.0 > h = 2.217323198457735
dx too big, dx = 10.0 > h = 2.2171966464470927
dx too big, dx = 10.0 > h = 2.2170690823269394
dx too big, dx = 10.0 > h = 2.2169405066262984
dx too big, dx = 10.0 > h = 2.216810919878219
dx too big, dx = 10.0 > h = 2.2166803226197787
dx too big, dx = 10.0 > h = 2.2165487153920704
dx too big, dx = 10.0 > h = 2.2164160987402006
dx too big, dx = 10.0 > h = 2.2162824732132824
dx too big, dx = 10.0 > h = 2.216147839364427
dx too big, dx = 10.0 > h = 2.2160121977507385
dx too big, dx = 10.0 > h = 2.215875548933308
dx too big, dx = 10.0 > h = 2.21573789347721
dx too big, dx = 10.0 > h = 2.21559923195149
dx too big, dx = 10.0 > h = 2.2154595649291617
dx too big, dx = 10.0 > h = 2.2153188929872005
dx too big, dx = 10.0 > h = 2.215177216706537
dx too big, dx = 10.0 > h = 2.2150345366720483
dx too big, dx = 10.0 > h = 2.214890853472554
dx too big, dx = 10.0 > h = 2.214746167700809
dx too big, dx = 10.0 > h = 2.214600479953495
dx too big, dx = 10.0 > h = 2.2144537908312154
dx too big, dx = 10.0 > h = 2.214306100938488
dx too big, dx = 10.0 > h = 2.2141574108837387
dx too big, dx = 10.0 > h = 2.214007721279294
dx too big, dx = 10.0 > h = 2.2138570327413754
dx too big, dx = 10.0 > h = 2.2137053458900877
dx too big, dx = 10.0 > h = 2.213552661349419
dx too big, dx = 10.0 > h = 2.2133989797472307
dx too big, dx = 10.0 > h = 2.2132443017152474
dx too big, dx = 10.0 > h = 2.2130886278890545
dx too big, dx = 10.0 > h = 2.2129319589080882
dx too big, dx = 10.0 > h = 2.212774295415629
dx too big, dx = 10.0 > h = 2.2126156380587942
dx too big, dx = 10.0 > h = 2.2124559874885326
dx too big, dx = 10.0 > h = 2.2122953443596134
dx too big, dx = 10.0 > h = 2.212133709330623
dx too big, dx = 10.0 > h = 2.211971083063954
dx too big, dx = 10.0 > h = 2.2118074662258
dx too big, dx = 10.0 > h = 2.2116428594861492
dx too big, dx = 10.0 > h = 2.2114772635187725
dx too big, dx = 10.0 > h = 2.211310679001221
dx too big, dx = 10.0 > h = 2.2111431066148146
dx too big, dx = 10.0 > h = 2.210974547044636
dx too big, dx = 10.0 > h = 2.210805000979526
dx too big, dx = 10.0 > h = 2.2106344691120676
dx too big, dx = 10.0 > h = 2.2104629521385886
dx too big, dx = 10.0 > h = 2.210290450759146
dx too big, dx = 10.0 > h = 2.2101169656775204
dx too big, dx = 10.0 > h = 2.2099424976012103
dx too big, dx = 10.0 > h = 2.2097670472414226
dx too big, dx = 10.0 > h = 2.2095906153130636
dx too big, dx = 10.0 > h = 2.2094132025347326
dx too big, dx = 10.0 > h = 2.2092348096287147
dx too big, dx = 10.0 > h = 2.2090554373209703
dx too big, dx = 10.0 > h = 2.208875086341129
dx too big, dx = 10.0 > h = 2.20869375742248
dx too big, dx = 10.0 > h = 2.208511451301966
dx too big, dx = 10.0 > h = 2.2083281687201737
dx too big, dx = 10.0 > h = 2.2081439104213247
dx too big, dx = 10.0 > h = 2.2079586771532695
dx too big, dx = 10.0 > h = 2.207772469667479
dx too big, dx = 10.0 > h = 2.2075852887190335
dx too big, dx = 10.0 > h = 2.2073971350666164
dx too big, dx = 10.0 > h = 2.2072080094725073
dx too big, dx = 10.0 > h = 2.20701791270257
dx too big, dx = 10.0 > h = 2.206826845526248
dx too big, dx = 10.0 > h = 2.206634808716552
dx too big, dx = 10.0 > h = 2.206441803050056
dx too big, dx = 10.0 > h = 2.2062478293068843
dx too big, dx = 10.0 > h = 2.2065571432610533
dx too big, dx = 10.0 > h = 2.206865716289979
dx too big, dx = 10.0 > h = 2.2071735473881664
dx too big, dx = 10.0 > h = 2.207480635551774
dx too big, dx = 10.0 > h = 2.2077869797786236
dx too big, dx = 10.0 > h = 2.2080925790682056
dx too big, dx = 10.0 > h = 2.2083974324216897
dx too big, dx = 10.0 > h = 2.2087015388419324
dx too big, dx = 10.0 > h = 2.209004897333487
dx too big, dx = 10.0 > h = 2.2093075069026082
dx too big, dx = 10.0 > h = 2.209609366557266
dx too big, dx = 10.0 > h = 2.209910475307148
dx too big, dx = 10.0 > h = 2.2102108321636735
dx too big, dx = 10.0 > h = 2.210510436139998
dx too big, dx = 10.0 > h = 2.2108092862510236
dx too big, dx = 10.0 > h = 2.211107381513405
dx too big, dx = 10.0 > h = 2.211404720945561
dx too big, dx = 10.0 > h = 2.211701303567681
dx too big, dx = 10.0 > h = 2.2119971284017335
dx too big, dx = 10.0 > h = 2.2122921944714755
dx too big, dx = 10.0 > h = 2.2125865008024577
dx too big, dx = 10.0 > h = 2.212880046422039
dx too big, dx = 10.0 > h = 2.213172830359386
dx too big, dx = 10.0 > h = 2.213464851645492
dx too big, dx = 10.0 > h = 2.213756109313176
dx too big, dx = 10.0 > h = 2.2140466023970946
dx too big, dx = 10.0 > h = 2.2143363299337526
dx too big, dx = 10.0 > h = 2.2146252909615067
dx too big, dx = 10.0 > h = 2.2149134845205776
dx too big, dx = 10.0 > h = 2.215200909653057
dx too big, dx = 10.0 > h = 2.2154875654029165
dx too big, dx = 10.0 > h = 2.2157734508160116
dx too big, dx = 10.0 > h = 2.216058564940098
dx too big, dx = 10.0 > h = 2.216342906824832
dx too big, dx = 10.0 > h = 2.2166264755217857
dx too big, dx = 10.0 > h = 2.216909270084449
dx too big, dx = 10.0 > h = 2.2171912895682406
dx too big, dx = 10.0 > h = 2.217472533030517
dx too big, dx = 10.0 > h = 2.217752999530581
dx too big, dx = 10.0 > h = 2.2180326881296866
dx too big, dx = 10.0 > h = 2.2183115978910513
dx too big, dx = 10.0 > h = 2.2185897278798614
dx too big, dx = 10.0 > h = 2.218867077163282
dx too big, dx = 10.0 > h = 2.219143644810464
dx too big, dx = 10.0 > h = 2.219419429892554
dx too big, dx = 10.0 > h = 2.219694431482699
dx too big, dx = 10.0 > h = 2.2199686486560584
dx too big, dx = 10.0 > h = 2.2202420804898098
dx too big, dx = 10.0 > h = 2.220514726063159
dx too big, dx = 10.0 > h = 2.220786584457346
dx too big, dx = 10.0 > h = 2.2210576547556546
dx too big, dx = 10.0 > h = 2.2213279360434193
dx too big, dx = 10.0 > h = 2.221597427408036
dx too big, dx = 10.0 > h = 2.2218661279389664
dx too big, dx = 10.0 > h = 2.222134036727749
dx too big, dx = 10.0 > h = 2.222401152868005
dx too big, dx = 10.0 > h = 2.222667475455449
dx too big, dx = 10.0 > h = 2.2229330035878956
dx too big, dx = 10.0 > h = 2.223197736365266
dx too big, dx = 10.0 > h = 2.2234616728895986
dx too big, dx = 10.0 > h = 2.223724812265056
dx too big, dx = 10.0 > h = 2.2239871535979305
dx too big, dx = 10.0 > h = 2.224248695996659
dx too big, dx = 10.0 > h = 2.224509438571823
dx too big, dx = 10.0 > h = 2.224769380436161
dx too big, dx = 10.0 > h = 2.225028520704575
dx too big, dx = 10.0 > h = 2.2252868584941403
dx too big, dx = 10.0 > h = 2.2255443929241117
dx too big, dx = 10.0 > h = 2.225801123115932
dx too big, dx = 10.0 > h = 2.2260570481932382
dx too big, dx = 10.0 > h = 2.2263121672818738
dx too big, dx = 10.0 > h = 2.2265664795098923
dx too big, dx = 10.0 > h = 2.226819984007567
dx too big, dx = 10.0 > h = 2.2262343964239784
dx too big, dx = 10.0 > h = 2.225229110708101
dx too big, dx = 10.0 > h = 2.2242247317426944
dx too big, dx = 10.0 > h = 2.2232212583025017
dx too big, dx = 10.0 > h = 2.222218689164473
dx too big, dx = 10.0 > h = 2.221217023107757
dx too big, dx = 10.0 > h = 2.2202162589136973
dx too big, dx = 10.0 > h = 2.2192163953658275
dx too big, dx = 10.0 > h = 2.2182174312498666
dx too big, dx = 10.0 > h = 2.2172193653537136
dx too big, dx = 10.0 > h = 2.2162221964674416
dx too big, dx = 10.0 > h = 2.2152259233832954
dx too big, dx = 10.0 > h = 2.2142305448956843
dx too big, dx = 10.0 > h = 2.213236059801179
dx too big, dx = 10.0 > h = 2.2122424668985055
dx too big, dx = 10.0 > h = 2.21124976498854
dx too big, dx = 10.0 > h = 2.2102579528743065
dx too big, dx = 10.0 > h = 2.209267029360971
dx too big, dx = 10.0 > h = 2.208276993255833
dx too big, dx = 10.0 > h = 2.207287843368325
dx too big, dx = 10.0 > h = 2.2062995785100084
dx too big, dx = 10.0 > h = 2.2053121974945644
dx too big, dx = 10.0 > h = 2.204325699137794
dx too big, dx = 10.0 > h = 2.2033400822576095
dx too big, dx = 10.0 > h = 2.202355345674032
dx too big, dx = 10.0 > h = 2.2013714882091855
dx too big, dx = 10.0 > h = 2.200388508687293
dx too big, dx = 10.0 > h = 2.1994064059346723
dx too big, dx = 10.0 > h = 2.19842517877973
dx too big, dx = 10.0 > h = 2.197444826052958
dx too big, dx = 10.0 > h = 2.1964653465869266
dx too big, dx = 10.0 > h = 2.195486739216285
dx too big, dx = 10.0 > h = 2.1945090027777505
dx too big, dx = 10.0 > h = 2.193532136110107
dx too big, dx = 10.0 > h = 2.1925561380542016
dx too big, dx = 10.0 > h = 2.1915810074529385
dx too big, dx = 10.0 > h = 2.1906067431512724
dx too big, dx = 10.0 > h = 2.1896333439962077
dx too big, dx = 10.0 > h = 2.1886608088367936
dx too big, dx = 10.0 > h = 2.1876891365241167
dx too big, dx = 10.0 > h = 2.1867183259112966
dx too big, dx = 10.0 > h = 2.185748375853487
dx too big, dx = 10.0 > h = 2.184779285207864
dx too big, dx = 10.0 > h = 2.183811052833625
dx too big, dx = 10.0 > h = 2.1828436775919857
dx too big, dx = 10.0 > h = 2.1818771583461727

Plot the result

s.grid.plot()
plt.show()
example eulerdrift norkyst

Total running time of the script: (2 minutes 20.488 seconds)

Gallery generated by Sphinx-Gallery