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

import logging
import opendrift
import matplotlib.pyplot as plt
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/sea/norkyst800m/1h/aggregate_be')
# reader_norkyst = reader_netCDF_CF_generic.Reader(OpenDriftSimulation.test_data_folder(None) +  '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.1633651 , 0.16355882, 0.16375167, ..., 0.17696063, 0.1766046 ,
        0.17625024],
       [0.16313111, 0.16332427, 0.16351656, ..., 0.17746604, 0.17711109,
        0.17675783],
       [0.16289799, 0.16309059, 0.16328232, ..., 0.17796975, 0.1776159 ,
        0.17726373],
       ...,
       [0.0789234 , 0.07965694, 0.08039881, ..., 0.00550011, 0.00452911,
        0.00356228],
       [0.07837786, 0.07911681, 0.07986408, ..., 0.00599816, 0.00502987,
        0.00406574],
       [0.07782399, 0.07856835, 0.07932103, ..., 0.00649205, 0.00552645,
        0.00456503]]), array([[ 0.06904834,  0.06931148,  0.06957522, ...,  0.04836492,
         0.04824609,  0.04813173],
       [ 0.06907165,  0.06933519,  0.06959934, ...,  0.04842287,
         0.04830694,  0.04819547],
       [ 0.06909435,  0.06935828,  0.06962283, ...,  0.04847634,
         0.04836331,  0.04825474],
       ...,
       [ 0.05143837,  0.05131202,  0.05120598, ..., -0.00179699,
        -0.00156413, -0.0012969 ],
       [ 0.05094407,  0.05083091,  0.05073804, ..., -0.00216584,
        -0.00191067, -0.00162113],
       [ 0.05042949,  0.0503295 ,  0.05024982, ..., -0.00256906,
        -0.00229159, -0.00197974]]))

Plot the initial conditions

s.grid.plot()
plt.savefig('before.png')
plt.show()
example eulerdrift norkyst

Integrate

s.integrate(dt = 20., max_steps=300)
dx too big, dx = 10.0 > h = 0.8181585087083826
dx too big, dx = 10.0 > h = 0.8193516732551601
dx too big, dx = 10.0 > h = 0.8205483229945207
dx too big, dx = 10.0 > h = 0.8217484732189814
dx too big, dx = 10.0 > h = 0.8229521393106579
dx too big, dx = 10.0 > h = 0.8241593367419228
dx too big, dx = 10.0 > h = 0.8253700810760685
dx too big, dx = 10.0 > h = 0.8265843879679758
dx too big, dx = 10.0 > h = 0.8278022731647884
dx too big, dx = 10.0 > h = 0.8290237525065939
dx too big, dx = 10.0 > h = 0.8302488419271106
dx too big, dx = 10.0 > h = 0.8314775574543793
dx too big, dx = 10.0 > h = 0.8327099152114648
dx too big, dx = 10.0 > h = 0.8339459314171582
dx too big, dx = 10.0 > h = 0.8351856223866901
dx too big, dx = 10.0 > h = 0.8364290045324484
dx too big, dx = 10.0 > h = 0.8376760943647017
dx too big, dx = 10.0 > h = 0.838926908492331
dx too big, dx = 10.0 > h = 0.8401814636235666
dx too big, dx = 10.0 > h = 0.8413230863356345
dx too big, dx = 10.0 > h = 0.8418736423391904
dx too big, dx = 10.0 > h = 0.8424212903443435
dx too big, dx = 10.0 > h = 0.8429660104943686
dx too big, dx = 10.0 > h = 0.8435077829673118
dx too big, dx = 10.0 > h = 0.8440465879777025
dx too big, dx = 10.0 > h = 0.8445824057782707
dx too big, dx = 10.0 > h = 0.8451152166616732
dx too big, dx = 10.0 > h = 0.8456450009622266
dx too big, dx = 10.0 > h = 0.8461717390576482
dx too big, dx = 10.0 > h = 0.8466954113708027
dx too big, dx = 10.0 > h = 0.8472159983714557
dx too big, dx = 10.0 > h = 0.847733480578035
dx too big, dx = 10.0 > h = 0.8482478385593962
dx too big, dx = 10.0 > h = 0.8487590529365954
dx too big, dx = 10.0 > h = 0.8492671043846663
dx too big, dx = 10.0 > h = 0.8497719736344055
dx too big, dx = 10.0 > h = 0.8502736414741578
dx too big, dx = 10.0 > h = 0.8507720887516123
dx too big, dx = 10.0 > h = 0.8512672963755981
dx too big, dx = 10.0 > h = 0.8517592453178868
dx too big, dx = 10.0 > h = 0.852247916615
dx too big, dx = 10.0 > h = 0.8527332913700163
dx too big, dx = 10.0 > h = 0.8532153507543868
dx too big, dx = 10.0 > h = 0.8536940760097498
dx too big, dx = 10.0 > h = 0.8541694484497502
dx too big, dx = 10.0 > h = 0.8546414494618618
dx too big, dx = 10.0 > h = 0.85511006050921
dx too big, dx = 10.0 > h = 0.8555752631323981
dx too big, dx = 10.0 > h = 0.8560370389513349
dx too big, dx = 10.0 > h = 0.8564953696670624
dx too big, dx = 10.0 > h = 0.8569502370635865
dx too big, dx = 10.0 > h = 0.8574016230097066
dx too big, dx = 10.0 > h = 0.8578495094608463
dx too big, dx = 10.0 > h = 0.8582938784608842
dx too big, dx = 10.0 > h = 0.8587347121439848
dx too big, dx = 10.0 > h = 0.8591719927364272
dx too big, dx = 10.0 > h = 0.8596057025584347
dx too big, dx = 10.0 > h = 0.8600358240260023
dx too big, dx = 10.0 > h = 0.8604623396527223
dx too big, dx = 10.0 > h = 0.8608852320516086
dx too big, dx = 10.0 > h = 0.8613044839369186
dx too big, dx = 10.0 > h = 0.8617200781259714
dx too big, dx = 10.0 > h = 0.8621319975409648
dx too big, dx = 10.0 > h = 0.8625402252107874
dx too big, dx = 10.0 > h = 0.8629447442728295
dx too big, dx = 10.0 > h = 0.8633455379747855
dx too big, dx = 10.0 > h = 0.8637425896764566
dx too big, dx = 10.0 > h = 0.8641358828515464
dx too big, dx = 10.0 > h = 0.8645254010894524
dx too big, dx = 10.0 > h = 0.8649111280970507
dx too big, dx = 10.0 > h = 0.8652930477004769
dx too big, dx = 10.0 > h = 0.8656711438468991
dx too big, dx = 10.0 > h = 0.8660454006062859
dx too big, dx = 10.0 > h = 0.8664158021731662
dx too big, dx = 10.0 > h = 0.8667823328683832
dx too big, dx = 10.0 > h = 0.8671449771408399
dx too big, dx = 10.0 > h = 0.867503719569237
dx too big, dx = 10.0 > h = 0.8678585448638025
dx too big, dx = 10.0 > h = 0.8682094378680126
dx too big, dx = 10.0 > h = 0.8685563835603045
dx too big, dx = 10.0 > h = 0.8688993670557786
dx too big, dx = 10.0 > h = 0.8692383736078911
dx too big, dx = 10.0 > h = 0.8695733886101379
dx too big, dx = 10.0 > h = 0.8699043975977273
dx too big, dx = 10.0 > h = 0.870231386249241
dx too big, dx = 10.0 > h = 0.870554340388285
dx too big, dx = 10.0 > h = 0.8708732459851304
dx too big, dx = 10.0 > h = 0.8711880891583385
dx too big, dx = 10.0 > h = 0.871498856176378
dx too big, dx = 10.0 > h = 0.8718055334592272
dx too big, dx = 10.0 > h = 0.8721081075799634
dx too big, dx = 10.0 > h = 0.8724065652663402
dx too big, dx = 10.0 > h = 0.8727008934023502
dx too big, dx = 10.0 > h = 0.8729910790297746
dx too big, dx = 10.0 > h = 0.8732771093497174
dx too big, dx = 10.0 > h = 0.873558971724126
dx too big, dx = 10.0 > h = 0.8738366536772963
dx too big, dx = 10.0 > h = 0.8741101428973639
dx too big, dx = 10.0 > h = 0.8743794272377761
dx too big, dx = 10.0 > h = 0.8746444947187526
dx too big, dx = 10.0 > h = 0.8749053335287259
dx too big, dx = 10.0 > h = 0.8751619320257678
dx too big, dx = 10.0 > h = 0.8754142787389975
dx too big, dx = 10.0 > h = 0.8756623623699724
dx too big, dx = 10.0 > h = 0.8759061717940624
dx too big, dx = 10.0 > h = 0.8761456960618046
dx too big, dx = 10.0 > h = 0.8763809244002414
dx too big, dx = 10.0 > h = 0.8766118462142395
dx too big, dx = 10.0 > h = 0.8768384510877886
dx too big, dx = 10.0 > h = 0.8770607287852834
dx too big, dx = 10.0 > h = 0.8772786692527845
dx too big, dx = 10.0 > h = 0.8774754464737999
dx too big, dx = 10.0 > h = 0.8776489131450315
dx too big, dx = 10.0 > h = 0.877817928741196
dx too big, dx = 10.0 > h = 0.8779824854665197
dx too big, dx = 10.0 > h = 0.8781425757231757
dx too big, dx = 10.0 > h = 0.8782981921122479
dx too big, dx = 10.0 > h = 0.8784493274346733
dx too big, dx = 10.0 > h = 0.8785959746921593
dx too big, dx = 10.0 > h = 0.8787381270880773
dx too big, dx = 10.0 > h = 0.8788757780283305
dx too big, dx = 10.0 > h = 0.8790089211221986
dx too big, dx = 10.0 > h = 0.8791375501831566
dx too big, dx = 10.0 > h = 0.8792616592296681
dx too big, dx = 10.0 > h = 0.8793812424859541
dx too big, dx = 10.0 > h = 0.8794962943827355
dx too big, dx = 10.0 > h = 0.8796068095579502
dx too big, dx = 10.0 > h = 0.8793788036124518
dx too big, dx = 10.0 > h = 0.8791216311116132
dx too big, dx = 10.0 > h = 0.8788596850921242
dx too big, dx = 10.0 > h = 0.8785929786184499
dx too big, dx = 10.0 > h = 0.8783215249710175
dx too big, dx = 10.0 > h = 0.8780453376444193
dx too big, dx = 10.0 > h = 0.8777523312922765
dx too big, dx = 10.0 > h = 0.877443864396013
dx too big, dx = 10.0 > h = 0.8771307206657967
dx too big, dx = 10.0 > h = 0.8768129155798102
dx too big, dx = 10.0 > h = 0.8764904648162414
dx too big, dx = 10.0 > h = 0.8761633842512037
dx too big, dx = 10.0 > h = 0.8758316899566376
dx too big, dx = 10.0 > h = 0.8754953981981933
dx too big, dx = 10.0 > h = 0.8751545254330932
dx too big, dx = 10.0 > h = 0.8748090883079777
dx too big, dx = 10.0 > h = 0.8744591036567322
dx too big, dx = 10.0 > h = 0.8741045884982976
dx too big, dx = 10.0 > h = 0.8737455600344641
dx too big, dx = 10.0 > h = 0.8733820356476488
dx too big, dx = 10.0 > h = 0.8730140328986562
dx too big, dx = 10.0 > h = 0.8726415695244275
dx too big, dx = 10.0 > h = 0.8722646634357716
dx too big, dx = 10.0 > h = 0.8718833327150836
dx too big, dx = 10.0 > h = 0.8714975956140506
dx too big, dx = 10.0 > h = 0.8711074705513437
dx too big, dx = 10.0 > h = 0.8707129761102975
dx too big, dx = 10.0 > h = 0.8703141310365788
dx too big, dx = 10.0 > h = 0.8699109542358435
dx too big, dx = 10.0 > h = 0.8695034647713822
dx too big, dx = 10.0 > h = 0.8690916818617571
dx too big, dx = 10.0 > h = 0.8686756248784273
dx too big, dx = 10.0 > h = 0.8682553133433674
dx too big, dx = 10.0 > h = 0.8678307669266755
dx too big, dx = 10.0 > h = 0.8674020054441735
dx too big, dx = 10.0 > h = 0.866969048855001
dx too big, dx = 10.0 > h = 0.8665319172592022
dx too big, dx = 10.0 > h = 0.8660906308953037
dx too big, dx = 10.0 > h = 0.8656452101378903
dx too big, dx = 10.0 > h = 0.8651956754951727
dx too big, dx = 10.0 > h = 0.864742047606551
dx too big, dx = 10.0 > h = 0.8642843472401749
dx too big, dx = 10.0 > h = 0.863822595290498
dx too big, dx = 10.0 > h = 0.8633568127758304
dx too big, dx = 10.0 > h = 0.8628870208358886
dx too big, dx = 10.0 > h = 0.8624132407293418
dx too big, dx = 10.0 > h = 0.8619354938313574
dx too big, dx = 10.0 > h = 0.8614538016311445
dx too big, dx = 10.0 > h = 0.8609681857294981
dx too big, dx = 10.0 > h = 0.8604786678363407
dx too big, dx = 10.0 > h = 0.8599852697682657
dx too big, dx = 10.0 > h = 0.8594880134460813
dx too big, dx = 10.0 > h = 0.8589869208923548
dx too big, dx = 10.0 > h = 0.858482014228959
dx too big, dx = 10.0 > h = 0.8582192349064915
dx too big, dx = 10.0 > h = 0.8579524437542474
dx too big, dx = 10.0 > h = 0.8576816522915444
dx too big, dx = 10.0 > h = 0.8574068721907365
dx too big, dx = 10.0 > h = 0.8571281152758563
dx too big, dx = 10.0 > h = 0.8568453935212423
dx too big, dx = 10.0 > h = 0.8565587190501521
dx too big, dx = 10.0 > h = 0.8562681041333643
dx too big, dx = 10.0 > h = 0.855973561187766
dx too big, dx = 10.0 > h = 0.8556751027749254
dx too big, dx = 10.0 > h = 0.8553727415996568
dx too big, dx = 10.0 > h = 0.8550664905085689
dx too big, dx = 10.0 > h = 0.8547563624886036
dx too big, dx = 10.0 > h = 0.8544423706655618
dx too big, dx = 10.0 > h = 0.8541245283026206
dx too big, dx = 10.0 > h = 0.8538028487988367
dx too big, dx = 10.0 > h = 0.8534773456876387
dx too big, dx = 10.0 > h = 0.8531480326353145
dx too big, dx = 10.0 > h = 0.8528149234394811
dx too big, dx = 10.0 > h = 0.8524780320275517
dx too big, dx = 10.0 > h = 0.8521373724551881
dx too big, dx = 10.0 > h = 0.8517929589047476
dx too big, dx = 10.0 > h = 0.8514448056837202
dx too big, dx = 10.0 > h = 0.8510929272231559
dx too big, dx = 10.0 > h = 0.8507373380760868
dx too big, dx = 10.0 > h = 0.850378052915939
dx too big, dx = 10.0 > h = 0.8500150865349384
dx too big, dx = 10.0 > h = 0.8496484538425091
dx too big, dx = 10.0 > h = 0.8492781698636647
dx too big, dx = 10.0 > h = 0.8489042497373939
dx too big, dx = 10.0 > h = 0.8485267087150391
dx too big, dx = 10.0 > h = 0.848145562158669
dx too big, dx = 10.0 > h = 0.8477608255394483
dx too big, dx = 10.0 > h = 0.847372514435998
dx too big, dx = 10.0 > h = 0.846980644532754
dx too big, dx = 10.0 > h = 0.8465852316183206
dx too big, dx = 10.0 > h = 0.8461862915838178
dx too big, dx = 10.0 > h = 0.845783840421228
dx too big, dx = 10.0 > h = 0.8453778942217363
dx too big, dx = 10.0 > h = 0.844968469174069
dx too big, dx = 10.0 > h = 0.8445555815628275
dx too big, dx = 10.0 > h = 0.8441392477668219
dx too big, dx = 10.0 > h = 0.8437194842574001
dx too big, dx = 10.0 > h = 0.8432963075967758
dx too big, dx = 10.0 > h = 0.842869734436354
dx too big, dx = 10.0 > h = 0.8424397815150572
dx too big, dx = 10.0 > h = 0.8420064656576464
dx too big, dx = 10.0 > h = 0.8415698037730452
dx too big, dx = 10.0 > h = 0.8411298128526611
dx too big, dx = 10.0 > h = 0.840686509968707
dx too big, dx = 10.0 > h = 0.8402399122725225
dx too big, dx = 10.0 > h = 0.8397900369928961
dx too big, dx = 10.0 > h = 0.8393369014343878
dx too big, dx = 10.0 > h = 0.8388805229756511
dx too big, dx = 10.0 > h = 0.8384209190677585
dx too big, dx = 10.0 > h = 0.8379581072325267
dx too big, dx = 10.0 > h = 0.8374921050608437
dx too big, dx = 10.0 > h = 0.8370229302109985
dx too big, dx = 10.0 > h = 0.8365506004070122
dx too big, dx = 10.0 > h = 0.8360751334369726
dx too big, dx = 10.0 > h = 0.8355965471513706
dx too big, dx = 10.0 > h = 0.8351148594614389
dx too big, dx = 10.0 > h = 0.834630088337497
dx too big, dx = 10.0 > h = 0.834142251807296
dx too big, dx = 10.0 > h = 0.8336513679543699
dx too big, dx = 10.0 > h = 0.833157454916389
dx too big, dx = 10.0 > h = 0.8326605308835193
dx too big, dx = 10.0 > h = 0.8321606140967849
dx too big, dx = 10.0 > h = 0.8316577228464362
dx too big, dx = 10.0 > h = 0.8311518754703227
dx too big, dx = 10.0 > h = 0.8306430903522706
dx too big, dx = 10.0 > h = 0.8301313859204666
dx too big, dx = 10.0 > h = 0.8296167806458474
dx too big, dx = 10.0 > h = 0.8290992930404933
dx too big, dx = 10.0 > h = 0.8285789416560314
dx too big, dx = 10.0 > h = 0.8280557450820412
dx too big, dx = 10.0 > h = 0.8275297219444696
dx too big, dx = 10.0 > h = 0.8270008909040524
dx too big, dx = 10.0 > h = 0.82646927065474
dx too big, dx = 10.0 > h = 0.825934879922134
dx too big, dx = 10.0 > h = 0.8253977374619293
dx too big, dx = 10.0 > h = 0.824857862058363
dx too big, dx = 10.0 > h = 0.8243152725226733
dx too big, dx = 10.0 > h = 0.8237699876915641
dx too big, dx = 10.0 > h = 0.8232220264256789
dx too big, dx = 10.0 > h = 0.8226714076080834
dx too big, dx = 10.0 > h = 0.8221181501427546
dx too big, dx = 10.0 > h = 0.8215608151750389
dx too big, dx = 10.0 > h = 0.8209937625112986
dx too big, dx = 10.0 > h = 0.8204241512621651
dx too big, dx = 10.0 > h = 0.8198520006421072
dx too big, dx = 10.0 > h = 0.8192773298759145
dx too big, dx = 10.0 > h = 0.8187001581972383
dx too big, dx = 10.0 > h = 0.8181205048471428
dx too big, dx = 10.0 > h = 0.8175383890726697
dx too big, dx = 10.0 > h = 0.8169538301254086
dx too big, dx = 10.0 > h = 0.8163668472600817
dx too big, dx = 10.0 > h = 0.8157774597331385
dx too big, dx = 10.0 > h = 0.8151856868013596
dx too big, dx = 10.0 > h = 0.8145915477204735
dx too big, dx = 10.0 > h = 0.8139950617437828
dx too big, dx = 10.0 > h = 0.8133962481208042
dx too big, dx = 10.0 > h = 0.8127951260959168
dx too big, dx = 10.0 > h = 0.8121917149070221
dx too big, dx = 10.0 > h = 0.8115860337842199
dx too big, dx = 10.0 > h = 0.8109781019484892
dx too big, dx = 10.0 > h = 0.8103679386103859
dx too big, dx = 10.0 > h = 0.8097555629687506
dx too big, dx = 10.0 > h = 0.8091409942094276
dx too big, dx = 10.0 > h = 0.8085242515039973
dx too big, dx = 10.0 > h = 0.8079053540085197
dx too big, dx = 10.0 > h = 0.8072843208622905
dx too big, dx = 10.0 > h = 0.8066611711866098
dx too big, dx = 10.0 > h = 0.8060359240835621
dx too big, dx = 10.0 > h = 0.8054085986348093
dx too big, dx = 10.0 > h = 0.8047792139003973
dx too big, dx = 10.0 > h = 0.8041477889175724
dx too big, dx = 10.0 > h = 0.8035143426996132
dx too big, dx = 10.0 > h = 0.802878894234673

Plot the result

s.grid.plot()
plt.savefig('after.png')
plt.show()
example eulerdrift norkyst

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

Gallery generated by Sphinx-Gallery