run_adv_and_diffusion_OSNAP_EG(fieldset, num_of_particles, seed=0, dt=12, out_dt=24, adv_time=2, run_dir=1, prefix="", kernels=(AdvectionRK4, ),fcode = '', fvar = ['a','b']): # default is forward plus = forward / - = backward if run_dir == 1: rstr = 'forward' else: rstr = 'backward' # falls partikel aus der Domaine laufen def DeleteParticle(particle, fieldset, time): particle.delete() # legt anfangszustand von Zufallsgenerator fest np.random.seed(seed) # lon_argo / lat_argo ranges # release mask anlegen - land 0 ozean 1 - darin zufällig startpunkte wählen # OSNAP East Greenland lo = np.random.uniform(-41.95, -37.798262, num_of_particles) la = -0.09913834*lo + 55.82196759 pset = ParticleSet(fieldset=fieldset, pclass=JITParticle, lon=lo, lat=la, depth=np.array([0 for n in range(num_of_particles)])) output_file = ParticleFile( name=(prefix + "_OSNAP_EG_" + rstr), particleset=pset, outputdt=timedelta(hours=out_dt)) #kernels = pset.Kernel(AdvectionRK4) + Roach_Diff kernel = pset.Kernel(kernels[0]) for k in kernels[1:]: ke = Kernel(fieldset=fieldset, ptype=JITParticle.getPType(), funcname=k.__name__, pyfunc=k, funccode=fcode, funcvars=fvar) kernel += ke # läuft 5 tage mit 5 min time delta und output zeiten alle 12 stunden pset.execute(kernel, runtime=timedelta(days=365*adv_time), dt=timedelta(hours=dt*run_dir), output_file=output_file, recovery={ ErrorCode.ErrorOutOfBounds: DeleteParticle}) output_file.dataset.close() %%file _Diff_hom_200.py def _Diff_hom_200(particle, fieldset, time): # Kernel for Roach effective Diffusion with 25th persent of diffusivity alpha=1 # Diffusivities are defined above Ky = 200 * fieldset.Ky[time, particle.depth, particle.lat, particle.lon] Kx = 200 * fieldset.Kx[time, particle.depth, particle.lat, particle.lon] particle.lat += random.normalvariate(0, 1) * alpha * math.sqrt(2*Ky*math.fabs(particle.dt)) particle.lon += random.normalvariate(0, 1)* alpha * math.sqrt(2*Kx*math.fabs(particle.dt)) from _Diff_hom_200 import _Diff_hom_200 _funccode_Diff_hom_200 = inspect.getsource(_Diff_hom_200.__code__) _funcvars_Diff_hom_200 = list(_Diff_hom_200.__code__.co_varnames) seeds = db.from_sequence(range(120), npartitions=30) ff = path runs = seeds.map(lambda s: run_adv_and_diffusion_OSNAP_EG( fieldset=fieldset_mean, num_of_particles = int(100), seed=s, dt=12, out_dt=24, adv_time=4, run_dir=run_dir, prefix= f"{ff}" + "/{:03d}_Diff_hom_200_Adv".format(s), kernels=(AdvectionRK4, _Diff_hom_200),fcode =_funccode_Diff_hom_200, fvar =_funcvars_Diff_hom_200) )