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.08134763, -0.08113705, -0.08092578, ...,  0.03810893,
         0.03810005,  0.03809374],
       [-0.08054827, -0.08033724, -0.08012554, ...,  0.03838033,
         0.03837312,  0.03836848],
       [-0.07974958, -0.07953812, -0.07932598, ...,  0.03864916,
         0.03864362,  0.03864065],
       ...,
       [-0.00187576, -0.00198296, -0.00209103, ...,  0.00528333,
         0.00555287,  0.00582383],
       [-0.00207978, -0.00218755, -0.00229617, ...,  0.00528313,
         0.00555359,  0.00582549],
       [-0.00228295, -0.00239127, -0.00250045, ...,  0.0052815 ,
         0.00555289,  0.00582571]], shape=(400, 400)), array([[ 0.05280245,  0.0528553 ,  0.05290613, ..., -0.03233791,
        -0.03232172, -0.03230422],
       [ 0.05237743,  0.05242898,  0.05247851, ..., -0.03238485,
        -0.03236781, -0.03234947],
       [ 0.05195443,  0.05200467,  0.05205289, ..., -0.03243309,
        -0.03241521, -0.03239602],
       ...,
       [-0.00382865, -0.00410749, -0.00438551, ...,  0.00344232,
         0.00350023,  0.00356006],
       [-0.00401225, -0.00429056, -0.00456805, ...,  0.00331241,
         0.00337157,  0.00343265],
       [-0.00419668, -0.00447445, -0.0047514 , ...,  0.00318058,
         0.00324098,  0.00330331]], 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.0622353756097893
dx too big, dx = 10.0 > h = 2.0606656297473096
dx too big, dx = 10.0 > h = 2.059094610879959
dx too big, dx = 10.0 > h = 2.057522338644057
dx too big, dx = 10.0 > h = 2.0559488325978004
dx too big, dx = 10.0 > h = 2.0543741122210615
dx too big, dx = 10.0 > h = 2.0527981969151985
dx too big, dx = 10.0 > h = 2.0512211060028656
dx too big, dx = 10.0 > h = 2.0496428587278337
dx too big, dx = 10.0 > h = 2.0480634742548176
dx too big, dx = 10.0 > h = 2.046482971669305
dx too big, dx = 10.0 > h = 2.044901369977397
dx too big, dx = 10.0 > h = 2.04331868810565
dx too big, dx = 10.0 > h = 2.041734944900926
dx too big, dx = 10.0 > h = 2.040150159130248
dx too big, dx = 10.0 > h = 2.038564349480662
dx too big, dx = 10.0 > h = 2.0369775345591017
dx too big, dx = 10.0 > h = 2.0353897328922677
dx too big, dx = 10.0 > h = 2.033800962926497
dx too big, dx = 10.0 > h = 2.032211243027656
dx too big, dx = 10.0 > h = 2.030620591481025
dx too big, dx = 10.0 > h = 2.029029026491194
dx too big, dx = 10.0 > h = 2.027436566181968
dx too big, dx = 10.0 > h = 2.0258432285962664
dx too big, dx = 10.0 > h = 2.024249031696042
dx too big, dx = 10.0 > h = 2.022653993362192
dx too big, dx = 10.0 > h = 2.0210581313944855
dx too big, dx = 10.0 > h = 2.0194614635114894
dx too big, dx = 10.0 > h = 2.0178640073504974
dx too big, dx = 10.0 > h = 2.0162657804674766
dx too big, dx = 10.0 > h = 2.0146668003370025
dx too big, dx = 10.0 > h = 2.0130670843522127
dx too big, dx = 10.0 > h = 2.011466649824758
dx too big, dx = 10.0 > h = 2.0098655139847597
dx too big, dx = 10.0 > h = 2.0082636939807768
dx too big, dx = 10.0 > h = 2.00666120687977
dx too big, dx = 10.0 > h = 2.0050580696670774
dx too big, dx = 10.0 > h = 2.0034542992463917
dx too big, dx = 10.0 > h = 2.001849912439741
dx too big, dx = 10.0 > h = 2.0002449259874777
dx too big, dx = 10.0 > h = 1.998639356548273
dx too big, dx = 10.0 > h = 1.9970332206991057
dx too big, dx = 10.0 > h = 1.995426534935272
dx too big, dx = 10.0 > h = 1.9938193156703856
dx too big, dx = 10.0 > h = 1.9922115792363895
dx too big, dx = 10.0 > h = 1.9906033418835707
dx too big, dx = 10.0 > h = 1.9889946197805775
dx too big, dx = 10.0 > h = 1.9873854290144433
dx too big, dx = 10.0 > h = 1.9857757855906157
dx too big, dx = 10.0 > h = 1.9841657054329858
dx too big, dx = 10.0 > h = 1.9825552043839245
dx too big, dx = 10.0 > h = 1.9809442982043228
dx too big, dx = 10.0 > h = 1.979333002573635
dx too big, dx = 10.0 > h = 1.9777213330899293
dx too big, dx = 10.0 > h = 1.9761093052699354
dx too big, dx = 10.0 > h = 1.9744969345491046
dx too big, dx = 10.0 > h = 1.972884236281667
dx too big, dx = 10.0 > h = 1.9712712257406955
dx too big, dx = 10.0 > h = 1.9696579181181764
dx too big, dx = 10.0 > h = 1.968044328525075
dx too big, dx = 10.0 > h = 1.9664304719914159
dx too big, dx = 10.0 > h = 1.9648163634663591
dx too big, dx = 10.0 > h = 1.9632020178182816
dx too big, dx = 10.0 > h = 1.961587449834866
dx too big, dx = 10.0 > h = 1.9599726742231873
dx too big, dx = 10.0 > h = 1.9583577056098054
dx too big, dx = 10.0 > h = 1.9567425585408655
dx too big, dx = 10.0 > h = 1.955127247482193
dx too big, dx = 10.0 > h = 1.9535117868193999
dx too big, dx = 10.0 > h = 1.9518961908579886
dx too big, dx = 10.0 > h = 1.950280473823464
dx too big, dx = 10.0 > h = 1.9486646498614455
dx too big, dx = 10.0 > h = 1.9470487330377828
dx too big, dx = 10.0 > h = 1.9454327373386744
dx too big, dx = 10.0 > h = 1.9438166766707918
dx too big, dx = 10.0 > h = 1.942200564861404
dx too big, dx = 10.0 > h = 1.940584415658506
dx too big, dx = 10.0 > h = 1.9389682427309496
dx too big, dx = 10.0 > h = 1.9373520596685778
dx too big, dx = 10.0 > h = 1.935735879982364
dx too big, dx = 10.0 > h = 1.934119717104549
dx too big, dx = 10.0 > h = 1.9325035843887868
dx too big, dx = 10.0 > h = 1.9308874951102866
dx too big, dx = 10.0 > h = 1.9292714624659653
dx too big, dx = 10.0 > h = 1.9276554995745958
dx too big, dx = 10.0 > h = 1.9260396194769627
dx too big, dx = 10.0 > h = 1.9244238351360154
dx too big, dx = 10.0 > h = 1.9228081594370308
dx too big, dx = 10.0 > h = 1.9211926051877715
dx too big, dx = 10.0 > h = 1.9195771851186512
dx too big, dx = 10.0 > h = 1.9179619118829032
dx too big, dx = 10.0 > h = 1.9163467980567432
dx too big, dx = 10.0 > h = 1.9147318561395466
dx too big, dx = 10.0 > h = 1.9131170985540182
dx too big, dx = 10.0 > h = 1.91150253764637
dx too big, dx = 10.0 > h = 1.9098881856864975
dx too big, dx = 10.0 > h = 1.9082740548681605
dx too big, dx = 10.0 > h = 1.9066601573091664
dx too big, dx = 10.0 > h = 1.905046505051553
dx too big, dx = 10.0 > h = 1.9034331100617785
dx too big, dx = 10.0 > h = 1.9018199842309043
dx too big, dx = 10.0 > h = 1.900207139374791
dx too big, dx = 10.0 > h = 1.8985945872342915
dx too big, dx = 10.0 > h = 1.8969823394754395
dx too big, dx = 10.0 > h = 1.8953704076896534
dx too big, dx = 10.0 > h = 1.8937588033939305
dx too big, dx = 10.0 > h = 1.8921475380310475
dx too big, dx = 10.0 > h = 1.8905366229697667
dx too big, dx = 10.0 > h = 1.8889260695050345
dx too big, dx = 10.0 > h = 1.8873158888581893
dx too big, dx = 10.0 > h = 1.8857060921771722
dx too big, dx = 10.0 > h = 1.8840966905367291
dx too big, dx = 10.0 > h = 1.8824876949386304
dx too big, dx = 10.0 > h = 1.880879116311875
dx too big, dx = 10.0 > h = 1.8792709655129092
dx too big, dx = 10.0 > h = 1.8776632533258408
dx too big, dx = 10.0 > h = 1.8760559904626573
dx too big, dx = 10.0 > h = 1.8744491875634426
dx too big, dx = 10.0 > h = 1.8728428551965983
dx too big, dx = 10.0 > h = 1.8712370038590642
dx too big, dx = 10.0 > h = 1.8696316439765421
dx too big, dx = 10.0 > h = 1.8680267859037214
dx too big, dx = 10.0 > h = 1.8664224399245006
dx too big, dx = 10.0 > h = 1.8648186162522167
dx too big, dx = 10.0 > h = 1.863215325029874
dx too big, dx = 10.0 > h = 1.8616125763303724
dx too big, dx = 10.0 > h = 1.8600103801567376
dx too big, dx = 10.0 > h = 1.8584087464423527
dx too big, dx = 10.0 > h = 1.8568076850511936
dx too big, dx = 10.0 > h = 1.8552072057780595
dx too big, dx = 10.0 > h = 1.85360731834881
dx too big, dx = 10.0 > h = 1.8520080324206016
dx too big, dx = 10.0 > h = 1.8504093575821232
dx too big, dx = 10.0 > h = 1.8488113033538367
dx too big, dx = 10.0 > h = 1.8472138791882136
dx too big, dx = 10.0 > h = 1.8456170944699781
dx too big, dx = 10.0 > h = 1.844020958516345
dx too big, dx = 10.0 > h = 1.842425480577264
dx too big, dx = 10.0 > h = 1.840830669835662
dx too big, dx = 10.0 > h = 1.8392365354076876
dx too big, dx = 10.0 > h = 1.8376430863429538
dx too big, dx = 10.0 > h = 1.836050331624784
dx too big, dx = 10.0 > h = 1.83445828017046
dx too big, dx = 10.0 > h = 1.8328669408314666
dx too big, dx = 10.0 > h = 1.83127632239374
dx too big, dx = 10.0 > h = 1.8296864335779162
dx too big, dx = 10.0 > h = 1.82809728303958
dx too big, dx = 10.0 > h = 1.8265088793695152
dx too big, dx = 10.0 > h = 1.8249212310939529
dx too big, dx = 10.0 > h = 1.8233343466748255
dx too big, dx = 10.0 > h = 1.8217482345100144
dx too big, dx = 10.0 > h = 1.8201629029336048
dx too big, dx = 10.0 > h = 1.8185783602161378
dx too big, dx = 10.0 > h = 1.8169946145648626
dx too big, dx = 10.0 > h = 1.8154116741239903
dx too big, dx = 10.0 > h = 1.8138295469749477
dx too big, dx = 10.0 > h = 1.8122482411366319
dx too big, dx = 10.0 > h = 1.8106677645656672
dx too big, dx = 10.0 > h = 1.8090881251566566
dx too big, dx = 10.0 > h = 1.8075093307424392
dx too big, dx = 10.0 > h = 1.8059313890943467
dx too big, dx = 10.0 > h = 1.8043543079224595
dx too big, dx = 10.0 > h = 1.8027780948758636
dx too big, dx = 10.0 > h = 1.8012027575429053
dx too big, dx = 10.0 > h = 1.7996283034514524
dx too big, dx = 10.0 > h = 1.7980547400691478
dx too big, dx = 10.0 > h = 1.7964820748036694
dx too big, dx = 10.0 > h = 1.7949103150029884
dx too big, dx = 10.0 > h = 1.7933394679556247
dx too big, dx = 10.0 > h = 1.791769540890909
dx too big, dx = 10.0 > h = 1.7902005409792376
dx too big, dx = 10.0 > h = 1.788632475332334
dx too big, dx = 10.0 > h = 1.7870653510035062
dx too big, dx = 10.0 > h = 1.785499174987905
dx too big, dx = 10.0 > h = 1.783933954222784
dx too big, dx = 10.0 > h = 1.7823696955877586
dx too big, dx = 10.0 > h = 1.7808064059050643
dx too big, dx = 10.0 > h = 1.7792440919398163
dx too big, dx = 10.0 > h = 1.7776827604002692
dx too big, dx = 10.0 > h = 1.7761224179380741
dx too big, dx = 10.0 > h = 1.7745630711485407
dx too big, dx = 10.0 > h = 1.7725079505306678
dx too big, dx = 10.0 > h = 1.7704571615994367
dx too big, dx = 10.0 > h = 1.7684106922674765
dx too big, dx = 10.0 > h = 1.7663685304838688
dx too big, dx = 10.0 > h = 1.7643306642340715
dx too big, dx = 10.0 > h = 1.7622970815398435
dx too big, dx = 10.0 > h = 1.7602677704591678
dx too big, dx = 10.0 > h = 1.758242719086175
dx too big, dx = 10.0 > h = 1.7562219155510674
dx too big, dx = 10.0 > h = 1.7542053480200388
dx too big, dx = 10.0 > h = 1.7521930046951995
dx too big, dx = 10.0 > h = 1.7501848738144947
dx too big, dx = 10.0 > h = 1.74818094365163
dx too big, dx = 10.0 > h = 1.7461812025159873
dx too big, dx = 10.0 > h = 1.7441856387525494
dx too big, dx = 10.0 > h = 1.7421942407418172
dx too big, dx = 10.0 > h = 1.7402069968997307
dx too big, dx = 10.0 > h = 1.7382238956775895
dx too big, dx = 10.0 > h = 1.7362449255619694
dx too big, dx = 10.0 > h = 1.7342700750746427
dx too big, dx = 10.0 > h = 1.7322993327724967
dx too big, dx = 10.0 > h = 1.730332687247451
dx too big, dx = 10.0 > h = 1.728370127126376
dx too big, dx = 10.0 > h = 1.7264116410710098
dx too big, dx = 10.0 > h = 1.7244572177778763
dx too big, dx = 10.0 > h = 1.7225068459782011
dx too big, dx = 10.0 > h = 1.7205605144378293
dx too big, dx = 10.0 > h = 1.718618211957141
dx too big, dx = 10.0 > h = 1.7166799273709679
dx too big, dx = 10.0 > h = 1.7147456495485096
dx too big, dx = 10.0 > h = 1.712815367393249
dx too big, dx = 10.0 > h = 1.710889069842867
dx too big, dx = 10.0 > h = 1.7089667458691595
dx too big, dx = 10.0 > h = 1.7070483844779514
dx too big, dx = 10.0 > h = 1.7051339747090108
dx too big, dx = 10.0 > h = 1.703223505635966
dx too big, dx = 10.0 > h = 1.7013169663662175
dx too big, dx = 10.0 > h = 1.6994143460408535
dx too big, dx = 10.0 > h = 1.697515633834564
dx too big, dx = 10.0 > h = 1.6956208189555542
dx too big, dx = 10.0 > h = 1.6937298906454599
dx too big, dx = 10.0 > h = 1.6918428381792594
dx too big, dx = 10.0 > h = 1.6899596508651866
dx too big, dx = 10.0 > h = 1.6880803180446478
dx too big, dx = 10.0 > h = 1.686204829092131
dx too big, dx = 10.0 > h = 1.6843331734151208
dx too big, dx = 10.0 > h = 1.6824653404540126
dx too big, dx = 10.0 > h = 1.680601319682022
dx too big, dx = 10.0 > h = 1.6787411006051023
dx too big, dx = 10.0 > h = 1.6768846727618527
dx too big, dx = 10.0 > h = 1.6750320257234337
dx too big, dx = 10.0 > h = 1.6731831490934783
dx too big, dx = 10.0 > h = 1.6713380325080058
dx too big, dx = 10.0 > h = 1.6694966656353325
dx too big, dx = 10.0 > h = 1.6676590381759848
dx too big, dx = 10.0 > h = 1.665825139862612
dx too big, dx = 10.0 > h = 1.6639949604598976
dx too big, dx = 10.0 > h = 1.6621684897644702
dx too big, dx = 10.0 > h = 1.6603457176048189
dx too big, dx = 10.0 > h = 1.6585266338412024
dx too big, dx = 10.0 > h = 1.6567112283655618
dx too big, dx = 10.0 > h = 1.6548994911014323
dx too big, dx = 10.0 > h = 1.653091412003857
dx too big, dx = 10.0 > h = 1.6512869810592943
dx too big, dx = 10.0 > h = 1.649486188285535
dx too big, dx = 10.0 > h = 1.6476890237316106
dx too big, dx = 10.0 > h = 1.6458954774777061
dx too big, dx = 10.0 > h = 1.6441055396350726
dx too big, dx = 10.0 > h = 1.6423192003459381
dx too big, dx = 10.0 > h = 1.640536449783419
dx too big, dx = 10.0 > h = 1.6387572781514328
dx too big, dx = 10.0 > h = 1.63698167568461
dx too big, dx = 10.0 > h = 1.635209632648205
dx too big, dx = 10.0 > h = 1.6334411393380088
dx too big, dx = 10.0 > h = 1.6316761860802602
dx too big, dx = 10.0 > h = 1.6299147632315583
dx too big, dx = 10.0 > h = 1.6281568611787736
dx too big, dx = 10.0 > h = 1.6264024703389606
dx too big, dx = 10.0 > h = 1.6246515811592708
dx too big, dx = 10.0 > h = 1.6229041841168617
dx too big, dx = 10.0 > h = 1.6211602697188119
dx too big, dx = 10.0 > h = 1.6194198285020323
dx too big, dx = 10.0 > h = 1.6176828510331773
dx too big, dx = 10.0 > h = 1.615949327908558
dx too big, dx = 10.0 > h = 1.6142192497540544
dx too big, dx = 10.0 > h = 1.6124926072250274
dx too big, dx = 10.0 > h = 1.6107693910062313
dx too big, dx = 10.0 > h = 1.6090495918117274
dx too big, dx = 10.0 > h = 1.607333200384794
dx too big, dx = 10.0 > h = 1.6056202074978416
dx too big, dx = 10.0 > h = 1.6039106039523243
dx too big, dx = 10.0 > h = 1.6022043805786526
dx too big, dx = 10.0 > h = 1.600501528236107
dx too big, dx = 10.0 > h = 1.5988020378127499
dx too big, dx = 10.0 > h = 1.5971059002253396
dx too big, dx = 10.0 > h = 1.5954131064192427
dx too big, dx = 10.0 > h = 1.5937236473683478
dx too big, dx = 10.0 > h = 1.592037514074979
dx too big, dx = 10.0 > h = 1.5903546975698082
dx too big, dx = 10.0 > h = 1.5886751889117705
dx too big, dx = 10.0 > h = 1.5869989791879753
dx too big, dx = 10.0 > h = 1.5853260595136234
dx too big, dx = 10.0 > h = 1.5836564210319166
dx too big, dx = 10.0 > h = 1.5819900549139767
dx too big, dx = 10.0 > h = 1.5803269523587538
dx too big, dx = 10.0 > h = 1.5786671045929466
dx too big, dx = 10.0 > h = 1.5770105028709114
dx too big, dx = 10.0 > h = 1.5753571384745795
dx too big, dx = 10.0 > h = 1.5737070027133713
dx too big, dx = 10.0 > h = 1.5720600869241106
dx too big, dx = 10.0 > h = 1.5704163824709392
dx too big, dx = 10.0 > h = 1.5687758807452332
dx too big, dx = 10.0 > h = 1.5671385731655156
dx too big, dx = 10.0 > h = 1.5655044511773744
dx too big, dx = 10.0 > h = 1.5638735062533748
dx too big, dx = 10.0 > h = 1.5622457298929773
dx too big, dx = 10.0 > h = 1.5606211136224537
dx too big, dx = 10.0 > h = 1.558999648994799
dx too big, dx = 10.0 > h = 1.5573813275896513

Plot the result

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

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

Gallery generated by Sphinx-Gallery