Introduction
Introduction Statistics Contact Development Disclaimer Help
tdouble_gyre.jl - Granular.jl - Julia package for granular dynamics simulation
git clone git://src.adamsgaard.dk/Granular.jl
Log
Files
Refs
README
LICENSE
---
tdouble_gyre.jl (3099B)
---
1 #!/usr/bin/env julia
2 import Granular
3 using Random
4
5 sim = Granular.createSimulation(id="double_gyre")
6
7 # Initialize ocean
8 L = [100e3, 50e3, 1e3]
9 Ly_constriction = 20e3
10 #n = [750, 500, 2] # high resolution
11 n = [30, 15, 2] # intermedite resolution
12 #n = [8, 5, 2] # coarse resolution
13 sim.ocean = Granular.createRegularOceanGrid(n, L, name="double_gyre")
14
15 epsilon = 0.25 # amplitude of periodic oscillations
16 t = 0.
17 a = epsilon*sin(2.0*pi*t)
18 b = 1.0 - 2.0*epsilon*sin(2.0*pi*t)
19 for i=1:size(sim.ocean.u, 1)
20 for j=1:size(sim.ocean.u, 2)
21
22 x = sim.ocean.xq[i, j]/(L[1]*0.5) # x in [0;2]
23 y = sim.ocean.yq[i, j]/L[2] # y in [0;1]
24
25 f = a*x^2.0 + b*x
26 df_dx = 2.0*a*x + b
27
28 sim.ocean.u[i, j, 1, 1] = -pi/10.0*sin(pi*f)*cos(pi*y) * 1e1
29 sim.ocean.v[i, j, 1, 1] = pi/10.0*cos(pi*f)*sin(pi*y)*df_dx * 1e1
30 end
31 end
32
33 # Initialize confining walls, which are ice floes that are fixed in space
34 r = minimum(L[1:2]./n[1:2])/2.0
35 h = 1.
36
37 ## N-S wall segments
38 for y in range(r, stop=L[2]-r, length=Int(round((L[2] - 2.0*r)/(r*2))))
39 Granular.addGrainCylindrical!(sim, [r, y], r, h, fixed=true,
40 verbose=false)
41 Granular.addGrainCylindrical!(sim, [L[1]-r, y], r, h, fixed=true,
42 verbose=false)
43 end
44
45 ## E-W wall segments
46 for x in range(3.0*r, stop=L[1]-3.0*r,
47 length=Int(round((L[1] - 6.0*r)/(r*2))))
48 Granular.addGrainCylindrical!(sim, [x, r], r, h, fixed=true,
49 verbose=false)
50 Granular.addGrainCylindrical!(sim, [x, L[2]-r], r, h, fixed=true,
51 verbose=false)
52 end
53
54 n_walls = length(sim.grains)
55 @info "added $(n_walls) fixed ice floes as walls"
56
57
58
59 # Initialize ice floes everywhere
60 floe_padding = 0.5*r
61 noise_amplitude = 0.8*floe_padding
62 Random.seed!(1)
63 for y in (4.0*r + noise_amplitude):(2.0*r + floe_padding):(L[2] - 4.0*r …
64 noise_amplitu…
65
66 for x in (4.0*r + noise_amplitude):(2.0*r + floe_padding):(L[1] - 4.…
67 noise_amp…
68 #if iy % 2 == 0
69 #x += 1.5*r
70 #end
71
72 x_ = x + noise_amplitude*(0.5 - rand())
73 y_ = y + noise_amplitude*(0.5 - rand())
74
75 Granular.addGrainCylindrical!(sim, [x_, y_], r, h, verbose=false)
76 end
77 end
78 n = length(sim.grains) - n_walls
79 @info "added $n ice floes"
80
81 # Remove old simulation files
82 Granular.removeSimulationFiles(sim)
83
84 k_n = 1e6 # N/m
85 gamma_t = 1e7 # N/(m/s)
86 mu_d = 0.7
87 rotating = false
88 for i=1:length(sim.grains)
89 sim.grains[i].contact_stiffness_normal = k_n
90 sim.grains[i].contact_stiffness_tangential = k_n
91 sim.grains[i].contact_viscosity_tangential = gamma_t
92 sim.grains[i].contact_dynamic_friction = mu_d
93 sim.grains[i].rotating = rotating
94 end
95
96 # Set temporal parameters
97 Granular.setTotalTime!(sim, 12.0*60.0*60.0)
98 Granular.setOutputFileInterval!(sim, 60.0)
99 Granular.setTimeStep!(sim)
100
101 Granular.run!(sim)
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.