Advertisement
Guest User

Untitled

a guest
May 27th, 2016
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. nDays=3650
  2. times = np.arange(0, nDays, 1)
  3. TSurf = 0.5*(TSurf_min+TSurf_max) + 0.5 * (TSurf_max-TSurf_min)* np.sin((times - 91.25)/365 * 2* np.pi)
  4. plt.plot(times, TSurf, '-k')
  5. uBt = []
  6. for i in range(nDays):
  7. uBt.append([[1, TSurf[i]], [3, TDepth]])
  8.  
  9. dof = mesh.nodeCount()
  10. u = np.zeros((len(times), dof))
  11. u[0, :]= u0
  12.  
  13. dt = times[1] - times[0]
  14. a = pg.solver.parseArgToArray(alpha,ndof=mesh.cellCount(),mesh=mesh)
  15. A = pg.solver.createStiffnessMatrix(mesh, a)
  16. M = pg.solver.createMassMatrix(mesh)
  17.  
  18. ut = pg.RVector(dof, 0.0)
  19. rhs = pg.RVector(dof, 0.0)
  20. b = pg.RVector(dof, 0.0)
  21.  
  22. theta = 0.5
  23.  
  24. boundUNeu = pg.solver.parseArgToBoundaries([[1, 0], [3, 0]], mesh)
  25.  
  26. for n in range(1, len(times)):
  27. b = (M + A * (dt*(theta - 1.0))) * u[n-1] + rhs * (dt*(1.0 - theta)) + rhs * dt * theta
  28.  
  29. S = M + A * dt * theta
  30.  
  31. boundUdir = pg.solver.parseArgToBoundaries([[1, TSurf[n]], [3, TDepth]], mesh)
  32. pg.solver.assembleDirichletBC(S, boundUdir, time=times[n], rhs=b)
  33. pg.solver.assembleNeumannBC(S, boundUNeu, time=times[n])
  34.  
  35. solve = pg.LinSolver(S)
  36. solve.solve(b, ut)
  37.  
  38. u[n, :] = ut
  39.  
  40. for t in range(3650-365,nDays,100):
  41. fig, ax = plt.subplots(figsize=(8,10))
  42. patches = pg.mplviewer.drawField(ax, mesh, data=u[t], colorBar=True, showLater=True, omitLines=True, nLevs=64)
  43. pg.mplviewer.createColorbar(patches, orientation = 'vertical', label='Temperature [°C] at day %s\n Surf. Temp. %2.2f °C' %(t, TSurf[t]))
  44. pg.mplviewer.setCbarLevels(cbar, cMin=TSurf_min, cMax=TSurf_max, nLevs=16)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement