Note
Go to the end to download the full example code.
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([[-1.95447047e-01, -1.95448249e-01, -1.95448583e-01, ...,
-4.53318882e-02, -4.51644768e-02, -4.49995319e-02],
[-1.94710313e-01, -1.94710968e-01, -1.94710737e-01, ...,
-4.45433912e-02, -4.43775818e-02, -4.42142390e-02],
[-1.93974471e-01, -1.93974555e-01, -1.93973752e-01, ...,
-4.37524237e-02, -4.35882147e-02, -4.34264788e-02],
...,
[ 2.46089731e-04, 6.83979108e-04, 1.12372364e-03, ...,
-2.05292778e-02, -2.04752359e-02, -2.04110893e-02],
[ 1.13142125e-04, 5.52235755e-04, 9.93191172e-04, ...,
-2.05163450e-02, -2.04557455e-02, -2.03850421e-02],
[-2.16602855e-05, 4.18637633e-04, 8.60811048e-04, ...,
-2.05135155e-02, -2.04463593e-02, -2.03691001e-02]],
shape=(400, 400)), array([[ 0.26752731, 0.26841351, 0.26929874, ..., 0.07380956,
0.07277117, 0.07173331],
[ 0.26755185, 0.26843743, 0.26932202, ..., 0.07348091,
0.07244287, 0.07140535],
[ 0.26757737, 0.26846232, 0.26934627, ..., 0.07315173,
0.07211403, 0.07107686],
...,
[ 0.15240616, 0.1529898 , 0.15360465, ..., -0.01075797,
-0.01125228, -0.01172412],
[ 0.15074592, 0.15134983, 0.15198495, ..., -0.01091112,
-0.01139084, -0.01184811],
[ 0.14905447, 0.14967865, 0.15033405, ..., -0.01108672,
-0.01155187, -0.01199456]], shape=(400, 400)))
Plot the initial conditions
s.grid.plot()
plt.show()

Integrate
s.integrate(dt = 20., max_steps=300)
dx too big, dx = 10.0 > h = 0.5253715646905013
dx too big, dx = 10.0 > h = 0.5253232080323348
dx too big, dx = 10.0 > h = 0.5252748491912042
dx too big, dx = 10.0 > h = 0.5252264881738334
dx too big, dx = 10.0 > h = 0.5251781249869425
dx too big, dx = 10.0 > h = 0.525129759637248
dx too big, dx = 10.0 > h = 0.5250813921314629
dx too big, dx = 10.0 > h = 0.5250330224762956
dx too big, dx = 10.0 > h = 0.5249846506784517
dx too big, dx = 10.0 > h = 0.5249362767446326
dx too big, dx = 10.0 > h = 0.524887900681536
dx too big, dx = 10.0 > h = 0.5248395224958554
dx too big, dx = 10.0 > h = 0.5247911421942817
dx too big, dx = 10.0 > h = 0.5247427597835008
dx too big, dx = 10.0 > h = 0.5246943752701957
dx too big, dx = 10.0 > h = 0.5246459886610451
dx too big, dx = 10.0 > h = 0.5245975999627243
dx too big, dx = 10.0 > h = 0.5245492091819044
dx too big, dx = 10.0 > h = 0.5245008163252536
dx too big, dx = 10.0 > h = 0.5244524213994354
dx too big, dx = 10.0 > h = 0.5244040244111101
dx too big, dx = 10.0 > h = 0.5243556253669339
dx too big, dx = 10.0 > h = 0.5243072242735599
dx too big, dx = 10.0 > h = 0.5242588211376367
dx too big, dx = 10.0 > h = 0.5242104159658094
dx too big, dx = 10.0 > h = 0.5241620087647194
dx too big, dx = 10.0 > h = 0.5241135995410043
dx too big, dx = 10.0 > h = 0.5240651883012982
dx too big, dx = 10.0 > h = 0.5240167750522311
dx too big, dx = 10.0 > h = 0.5239683598004291
dx too big, dx = 10.0 > h = 0.5239199425525154
dx too big, dx = 10.0 > h = 0.5238715233151083
dx too big, dx = 10.0 > h = 0.5238231020948231
dx too big, dx = 10.0 > h = 0.5237746788982713
dx too big, dx = 10.0 > h = 0.5237262537320603
dx too big, dx = 10.0 > h = 0.523677826602794
dx too big, dx = 10.0 > h = 0.5236293975170727
dx too big, dx = 10.0 > h = 0.5235809664814924
dx too big, dx = 10.0 > h = 0.5235325335026458
dx too big, dx = 10.0 > h = 0.5234840985871221
dx too big, dx = 10.0 > h = 0.5234356617415059
dx too big, dx = 10.0 > h = 0.5233872229723785
dx too big, dx = 10.0 > h = 0.5233387822863179
dx too big, dx = 10.0 > h = 0.5232903396898976
dx too big, dx = 10.0 > h = 0.5232418951896877
dx too big, dx = 10.0 > h = 0.5231934487922546
dx too big, dx = 10.0 > h = 0.5231450005041608
dx too big, dx = 10.0 > h = 0.523096550331965
dx too big, dx = 10.0 > h = 0.5230480982822225
dx too big, dx = 10.0 > h = 0.5229996443614844
dx too big, dx = 10.0 > h = 0.5229511885762984
dx too big, dx = 10.0 > h = 0.5229027309332079
dx too big, dx = 10.0 > h = 0.5228542714387536
dx too big, dx = 10.0 > h = 0.5228058100994714
dx too big, dx = 10.0 > h = 0.5227573469218936
dx too big, dx = 10.0 > h = 0.5227088819125493
dx too big, dx = 10.0 > h = 0.5226604150779635
dx too big, dx = 10.0 > h = 0.5226119464246574
dx too big, dx = 10.0 > h = 0.5225634759591485
dx too big, dx = 10.0 > h = 0.5225150036879506
dx too big, dx = 10.0 > h = 0.5224665296175739
dx too big, dx = 10.0 > h = 0.5224180537545243
dx too big, dx = 10.0 > h = 0.5223695761053045
dx too big, dx = 10.0 > h = 0.5223210966764135
dx too big, dx = 10.0 > h = 0.5222726154743459
dx too big, dx = 10.0 > h = 0.5222241325055932
dx too big, dx = 10.0 > h = 0.5221756477766427
dx too big, dx = 10.0 > h = 0.5221271612939782
dx too big, dx = 10.0 > h = 0.5220786730640801
dx too big, dx = 10.0 > h = 0.522030183093424
dx too big, dx = 10.0 > h = 0.5219816913884827
dx too big, dx = 10.0 > h = 0.521933197955725
dx too big, dx = 10.0 > h = 0.5218847028016159
dx too big, dx = 10.0 > h = 0.5218362059326168
dx too big, dx = 10.0 > h = 0.5217877073551848
dx too big, dx = 10.0 > h = 0.5217392070757737
dx too big, dx = 10.0 > h = 0.5216907051008336
dx too big, dx = 10.0 > h = 0.521642201436811
dx too big, dx = 10.0 > h = 0.5215936960901478
dx too big, dx = 10.0 > h = 0.5215451890672833
dx too big, dx = 10.0 > h = 0.5214966803746521
dx too big, dx = 10.0 > h = 0.5214481700186857
dx too big, dx = 10.0 > h = 0.5213996580058113
dx too big, dx = 10.0 > h = 0.5213511443424531
dx too big, dx = 10.0 > h = 0.5213026290350304
dx too big, dx = 10.0 > h = 0.5212541120899602
dx too big, dx = 10.0 > h = 0.5212055935136545
dx too big, dx = 10.0 > h = 0.5211570733125219
dx too big, dx = 10.0 > h = 0.521108551492968
dx too big, dx = 10.0 > h = 0.5210600280613935
dx too big, dx = 10.0 > h = 0.5210115030241961
dx too big, dx = 10.0 > h = 0.5209629763877694
dx too big, dx = 10.0 > h = 0.5209144481585037
dx too big, dx = 10.0 > h = 0.520865918342785
dx too big, dx = 10.0 > h = 0.5208173869469958
dx too big, dx = 10.0 > h = 0.5207688539775148
dx too big, dx = 10.0 > h = 0.5207203194407172
dx too big, dx = 10.0 > h = 0.520671783342974
dx too big, dx = 10.0 > h = 0.5206232456906531
dx too big, dx = 10.0 > h = 0.5205747064901178
dx too big, dx = 10.0 > h = 0.5205261657477285
dx too big, dx = 10.0 > h = 0.5204776234698412
dx too big, dx = 10.0 > h = 0.5204290796628085
dx too big, dx = 10.0 > h = 0.5203805343329791
dx too big, dx = 10.0 > h = 0.5203319874866983
dx too big, dx = 10.0 > h = 0.5202834391303068
dx too big, dx = 10.0 > h = 0.5202348892701429
dx too big, dx = 10.0 > h = 0.5201863379125399
dx too big, dx = 10.0 > h = 0.5201377850638279
dx too big, dx = 10.0 > h = 0.5200892307303332
dx too big, dx = 10.0 > h = 0.5200406749183785
dx too big, dx = 10.0 > h = 0.5199921176342822
dx too big, dx = 10.0 > h = 0.51994355888436
dx too big, dx = 10.0 > h = 0.5198949986749227
dx too big, dx = 10.0 > h = 0.5198464370122781
dx too big, dx = 10.0 > h = 0.5197978739027299
dx too big, dx = 10.0 > h = 0.5197493093525782
dx too big, dx = 10.0 > h = 0.5197007433681194
dx too big, dx = 10.0 > h = 0.5196521759556463
dx too big, dx = 10.0 > h = 0.5196036071214475
dx too big, dx = 10.0 > h = 0.519555036871808
dx too big, dx = 10.0 > h = 0.5195064652130094
dx too big, dx = 10.0 > h = 0.5194578921513292
dx too big, dx = 10.0 > h = 0.5194093176930414
dx too big, dx = 10.0 > h = 0.5193607418444162
dx too big, dx = 10.0 > h = 0.5193121646117198
dx too big, dx = 10.0 > h = 0.5192635860012148
dx too big, dx = 10.0 > h = 0.5192150060191605
dx too big, dx = 10.0 > h = 0.5191664246718116
dx too big, dx = 10.0 > h = 0.5191178419654199
dx too big, dx = 10.0 > h = 0.5190692579062329
dx too big, dx = 10.0 > h = 0.5190206725004948
dx too big, dx = 10.0 > h = 0.5189720857544454
dx too big, dx = 10.0 > h = 0.5189234976743217
dx too big, dx = 10.0 > h = 0.518874908266356
dx too big, dx = 10.0 > h = 0.5188263175367774
dx too big, dx = 10.0 > h = 0.5187777254918114
dx too big, dx = 10.0 > h = 0.5187291321376792
dx too big, dx = 10.0 > h = 0.5186805374805988
dx too big, dx = 10.0 > h = 0.5186319415267842
dx too big, dx = 10.0 > h = 0.5185833442824455
dx too big, dx = 10.0 > h = 0.5185347457537897
dx too big, dx = 10.0 > h = 0.5184861459470191
dx too big, dx = 10.0 > h = 0.5184375448683333
dx too big, dx = 10.0 > h = 0.5183889425239274
dx too big, dx = 10.0 > h = 0.5183403389199931
dx too big, dx = 10.0 > h = 0.5182917340627182
dx too big, dx = 10.0 > h = 0.5182431279582869
dx too big, dx = 10.0 > h = 0.5181945206128795
dx too big, dx = 10.0 > h = 0.518145912032673
dx too big, dx = 10.0 > h = 0.5180973022238401
dx too big, dx = 10.0 > h = 0.5180486911925501
dx too big, dx = 10.0 > h = 0.5180000789449682
dx too big, dx = 10.0 > h = 0.5179514654872567
dx too big, dx = 10.0 > h = 0.5179028508255733
dx too big, dx = 10.0 > h = 0.517854234966072
dx too big, dx = 10.0 > h = 0.5178056179149038
dx too big, dx = 10.0 > h = 0.5177569996782153
dx too big, dx = 10.0 > h = 0.5177083802621496
dx too big, dx = 10.0 > h = 0.5176597596728462
dx too big, dx = 10.0 > h = 0.5176111379164406
dx too big, dx = 10.0 > h = 0.5175625149990645
dx too big, dx = 10.0 > h = 0.5175138909268464
dx too big, dx = 10.0 > h = 0.5174652657059104
dx too big, dx = 10.0 > h = 0.5174166393423775
dx too big, dx = 10.0 > h = 0.5173680118423645
dx too big, dx = 10.0 > h = 0.5173193832119847
dx too big, dx = 10.0 > h = 0.5172707534573473
dx too big, dx = 10.0 > h = 0.5172221225845587
dx too big, dx = 10.0 > h = 0.5171734905997204
dx too big, dx = 10.0 > h = 0.517124857508931
dx too big, dx = 10.0 > h = 0.5170762233182848
dx too big, dx = 10.0 > h = 0.5170275880338732
dx too big, dx = 10.0 > h = 0.5169789516617829
dx too big, dx = 10.0 > h = 0.5169303142080974
dx too big, dx = 10.0 > h = 0.5168816756788965
dx too big, dx = 10.0 > h = 0.5168330360802561
dx too big, dx = 10.0 > h = 0.5167843954182483
dx too big, dx = 10.0 > h = 0.5167357536989419
dx too big, dx = 10.0 > h = 0.5166871109284015
dx too big, dx = 10.0 > h = 0.516638467112688
dx too big, dx = 10.0 > h = 0.5168308290144571
dx too big, dx = 10.0 > h = 0.517023334181392
dx too big, dx = 10.0 > h = 0.5172159827735637
dx too big, dx = 10.0 > h = 0.5174087749512818
dx too big, dx = 10.0 > h = 0.5176017108750944
dx too big, dx = 10.0 > h = 0.5177947907057894
dx too big, dx = 10.0 > h = 0.5179880146043945
dx too big, dx = 10.0 > h = 0.5181813827321773
dx too big, dx = 10.0 > h = 0.5183748952506468
dx too big, dx = 10.0 > h = 0.5185685523215525
dx too big, dx = 10.0 > h = 0.5187623541068859
dx too big, dx = 10.0 > h = 0.5189563007688804
dx too big, dx = 10.0 > h = 0.5191503924700122
dx too big, dx = 10.0 > h = 0.5193446293730002
dx too big, dx = 10.0 > h = 0.5195390116408067
dx too big, dx = 10.0 > h = 0.5197335394366385
dx too big, dx = 10.0 > h = 0.5199282129239458
dx too big, dx = 10.0 > h = 0.5201230322664242
dx too big, dx = 10.0 > h = 0.5203179976280146
dx too big, dx = 10.0 > h = 0.5205131091729034
dx too big, dx = 10.0 > h = 0.5207083670655233
dx too big, dx = 10.0 > h = 0.5209037714705536
dx too big, dx = 10.0 > h = 0.5210993225529207
dx too big, dx = 10.0 > h = 0.5212950204777986
dx too big, dx = 10.0 > h = 0.5214908654106094
dx too big, dx = 10.0 > h = 0.5216868575170238
dx too big, dx = 10.0 > h = 0.5218828502042622
dx too big, dx = 10.0 > h = 0.5220780335156276
dx too big, dx = 10.0 > h = 0.5222733628264976
dx too big, dx = 10.0 > h = 0.5224688383006892
dx too big, dx = 10.0 > h = 0.5226644601022651
dx too big, dx = 10.0 > h = 0.5228602283955331
dx too big, dx = 10.0 > h = 0.5230561433450476
dx too big, dx = 10.0 > h = 0.5232520373659736
dx too big, dx = 10.0 > h = 0.5234471323559455
dx too big, dx = 10.0 > h = 0.5236423728114566
dx too big, dx = 10.0 > h = 0.5238377588951795
dx too big, dx = 10.0 > h = 0.5240332907700286
dx too big, dx = 10.0 > h = 0.5242289685991619
dx too big, dx = 10.0 > h = 0.5244247925459806
dx too big, dx = 10.0 > h = 0.5246204970064924
dx too big, dx = 10.0 > h = 0.524815489377897
dx too big, dx = 10.0 > h = 0.5250106266591275
dx too big, dx = 10.0 > h = 0.5252059090116741
dx too big, dx = 10.0 > h = 0.5254013365972671
dx too big, dx = 10.0 > h = 0.5255969095778769
dx too big, dx = 10.0 > h = 0.5257926281157146
dx too big, dx = 10.0 > h = 0.5259881053414249
dx too big, dx = 10.0 > h = 0.5261829803557816
dx too big, dx = 10.0 > h = 0.5263779997019673
dx too big, dx = 10.0 > h = 0.5265731635402525
dx too big, dx = 10.0 > h = 0.5267684720311452
dx too big, dx = 10.0 > h = 0.5269639253353905
dx too big, dx = 10.0 > h = 0.527159523613972
dx too big, dx = 10.0 > h = 0.5273546799913409
dx too big, dx = 10.0 > h = 0.5275494225333386
dx too big, dx = 10.0 > h = 0.5277443088064878
dx too big, dx = 10.0 > h = 0.5279393389698018
dx too big, dx = 10.0 > h = 0.5281345131825276
dx too big, dx = 10.0 > h = 0.5283298316041475
dx too big, dx = 10.0 > h = 0.5285252943943786
dx too big, dx = 10.0 > h = 0.528720048778046
dx too big, dx = 10.0 > h = 0.5289146438269177
dx too big, dx = 10.0 > h = 0.5291093819838706
dx too big, dx = 10.0 > h = 0.5293042634066232
dx too big, dx = 10.0 > h = 0.5294992882531252
dx too big, dx = 10.0 > h = 0.5296944566815576
dx too big, dx = 10.0 > h = 0.52988976790397
dx too big, dx = 10.0 > h = 0.5300840575330653
dx too big, dx = 10.0 > h = 0.5302784894678889
dx too big, dx = 10.0 > h = 0.5304730638645971
dx too big, dx = 10.0 > h = 0.5306677808795753
dx too big, dx = 10.0 > h = 0.5308626406694372
dx too big, dx = 10.0 > h = 0.5310576433910256
dx too big, dx = 10.0 > h = 0.5312523933417928
dx too big, dx = 10.0 > h = 0.5314465050348495
dx too big, dx = 10.0 > h = 0.5316407583660562
dx too big, dx = 10.0 > h = 0.5318351534902025
dx too big, dx = 10.0 > h = 0.5320296905623032
dx too big, dx = 10.0 > h = 0.5322243697375991
dx too big, dx = 10.0 > h = 0.5324191911715571
dx too big, dx = 10.0 > h = 0.5326133152915178
dx too big, dx = 10.0 > h = 0.5328072330519514
dx too big, dx = 10.0 > h = 0.5330012917596195
dx too big, dx = 10.0 > h = 0.5331954915679067
dx too big, dx = 10.0 > h = 0.5333898326304203
dx too big, dx = 10.0 > h = 0.5335843151009898
dx too big, dx = 10.0 > h = 0.53377877606919
dx too big, dx = 10.0 > h = 0.5339723432435377
dx too big, dx = 10.0 > h = 0.5341660504985105
dx too big, dx = 10.0 > h = 0.5343598979858313
dx too big, dx = 10.0 > h = 0.5345538858574421
dx too big, dx = 10.0 > h = 0.5347480142655034
dx too big, dx = 10.0 > h = 0.5349422833623957
dx too big, dx = 10.0 > h = 0.5351359670760227
dx too big, dx = 10.0 > h = 0.5353293078171069
dx too big, dx = 10.0 > h = 0.5355227879014879
dx too big, dx = 10.0 > h = 0.535716407479411
dx too big, dx = 10.0 > h = 0.5359101667013366
dx too big, dx = 10.0 > h = 0.5361040657179416
dx too big, dx = 10.0 > h = 0.5362979480299472
dx too big, dx = 10.0 > h = 0.5364909070209026
dx too big, dx = 10.0 > h = 0.5366840044452618
dx too big, dx = 10.0 > h = 0.5368772404515425
dx too big, dx = 10.0 > h = 0.5370706151884747
dx too big, dx = 10.0 > h = 0.5372641288049997
dx too big, dx = 10.0 > h = 0.537457781450272
dx too big, dx = 10.0 > h = 0.5376507165739307
dx too big, dx = 10.0 > h = 0.5378434157129223
dx too big, dx = 10.0 > h = 0.5380362525010624
dx too big, dx = 10.0 > h = 0.5382292270853188
dx too big, dx = 10.0 > h = 0.5384223396128676
dx too big, dx = 10.0 > h = 0.5386155902310934
dx too big, dx = 10.0 > h = 0.5388086058065417
dx too big, dx = 10.0 > h = 0.5390008911519326
dx too big, dx = 10.0 > h = 0.5391933131928834
dx too big, dx = 10.0 > h = 0.5393858720745692
dx too big, dx = 10.0 > h = 0.5395785679423705
dx too big, dx = 10.0 > h = 0.5397714009418729
Plot the result
s.grid.plot()
plt.show()

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