Time Stepping and Leapfrog Scheme for 2D Linear Advection Equation

Slide Note
Embed
Share

Implementation of a time stepping loop for a simple 2D linear advection equation using the leapfrog scheme. The task involves establishing a 2D model framework, demonstrating phase and dispersion errors, defining boundary conditions, and initializing GrADS if applicable. The model domain is square and doubly periodic, with a cone-shaped object advected at a constant speed. Specific equations and Fortran code details are provided for the second-order leapfrog scheme over real points.


Uploaded on Sep 14, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Model Task #4: Time stepping and the leapfrog scheme ATM 562 Fall 2021 Fovell (see course notes, Chapter 12) Version of 10/13/21 1

  2. Outline The 2D model framework was established in MT3 MT4 accomplishes two things: Implements a time stepping loop for one simple, 2D linear advection equation, with doubly periodic boundary conditions Illustrates phase and dispersion errors inherent in the leapfrog (LF) scheme The MT3 initial conditions on , are not used for this task (but don t remove them) those will be used in MT5 A similar initial condition is implemented for a variable I ll call v . This variable is defined at the scalar point (grid center) For MT5, the contents of the MT4 time stepping loop will be replaced with our four nonlinear model prognostic equations 2

  3. BCs = boundary conditions Openers and declarations Base state (+BCs & definitions) MT1 Initial conditions (+BCs) MT3 + MT4 Initialize GrADS if applicable Time stepping loop & periodic plotting/ writing to GrADS Time stepping loop & periodic plotting/ writing to GrADS MT4 [one simple 2D linear equation and its exact solution] [Our four 2D nonlinear model equations] MT5 Close up shop 3

  4. Synopsis MT4 model domain will be square and doubly periodic Initial condition will be a cone-shaped object Cone will be advected at constant speed You do not need to touch your MT3 code, except to change the domain configuration (nx, nz) and grid spacing (dx, dz). 4

  5. Equation and code Advection equation Code (Fortran) for 2nd order LF over the real points vp(i,k)=vm(i,k)-cx*d2t*rd2x*(v(i+1, k )-v(i-1, k )) & -cz*d2t*rd2z*(v( i ,k+1)-v( i ,k-1)) Specifics: nx = nz = 51 cx = cz = 1 m/s dx = dz = 100 m dt= 50 sec rd2x = 1./(2.*dx) and rd2z = 1./(2.*dz) d2t = dt + dt (after 1st time step). d2t = dt to start timend = 4900 sec 5

  6. Initial condition Initial condition: very similar to MT3 for , but for v with radx= radz= 1000 m, delt= 10, and placed at the domain center is trigonometric pi For Fortran, imid= (nx+1)/2, kmid = (nz+1)/2. For 0-based index languages, imid= (nx-1)/2, kmid= (nz-1)/2 Don t forget to set vm(i,k) = v(i,k) to start Leave your MT3 , initialization code alone, we ll use it in MT5 6

  7. Boundary conditions Doubly periodic, with a frame of fake points, so for Fortran the real points are 2,nx-1 and 2,nz-1 Boundary conditions for fake points do k=2,nz-1 v( 1,k)=v(nx-1,k) v(nx,k)=v( 2,k) enddo do i=1,nx v(i, 1)=v(i,nz-1) v(i,nz)=v(i, 2) enddo ! Over real points in vertical ! Over ALL points in horizontal At the end of this sequence, ALL grid points have been updated 7

  8. Programming concept From MT3 and earlier, you have set up your 1D and 2D arrays, base state, and an initial condition for and . Keep all this. For MT4, create an additional initial condition for v, vm. Start with d2t = dt. (Note nx, nz, dx, dz also change from MT3, and will change again for MT5.) Implement time stepping loop: Predict vp using v, vm for all real points Take care of boundary conditions on vp Calculate exact solution (see later) Set for new time step: vm = v; v = vp; vp = 0, and d2t = dt + dt Time to plot? Time to end run? If not, go to top of time stepping loop. 8

  9. t = 0 sec Zero contours can be a little wonky, and dependent on precision 9 Black contours: LF solution. Shading and red contours: true solution

  10. t = 1500 sec Note short wavelength components are moving in the wrong direction! 10 Black contours: LF solution. Shading and red contours: true solution

  11. t = 3000 sec 11 Black contours: LF solution. Shading and red contours: true solution

  12. t = 4500 sec Maybe a bit of amplitude error Some phase error (lag) More dispersion error 12 Black contours: LF solution. Shading and red contours: true solution

  13. Animation (frames every 100 sec) 13

  14. Tracking the exact solution Saved in qv array in this example 14

  15. Problem geometry xi = a grid point in the domain xloc = distance to cone centroid (xmid) xlocmirror = distance to cone s mirror image (xmidmirror) Take minimum of xloc, xlocmirror 15

  16. c ---------------------------------------------------------------------- c exact solution c ---------------------------------------------------------------------- xmid=dx*(nx+1)/2+cx*n*dt zmid=dz*(nz+1)/2+cz*n*dt ! Departure of cone centroid ! from initial position if(xmid.ge.nx*dx) xmid=xmid-(nx-2)*dx ! Passing the periodic if(zmid.ge.nz*dz) zmid=zmid-(nz-2)*dz ! boundary if(xmid.gt.dx*(nx+1)/2) then xmidmirror=xmid-(nx-2)*dx else xmidmirror=xmid+(nx-2)*dx endif if(zmid.gt.dz*(nz+1)/2) then zmidmirror=zmid-(nz-2)*dz else zmidmirror=zmid+(nz-2)*dz endif ! The cone s mirror location ! on other side of periodic ! boundary qv=0. ! start with a clean slate 16

  17. c ---------------------------------------------------------------------- c exact solution (continued) c ---------------------------------------------------------------------- do i=2,nx-1 do k=2,nz-1 xi=float(i)*dx zk=float(k)*dz xloc=((xi-xmid)/radx)**2 zloc=((zk-zmid)/radz)**2 ! Current location ! Location relative to ! domain midpoint xlocmirror=((xmidmirror-xi)/radx)**2 ! Mirror beyond the zlocmirror=((zmidmirror-zk)/radz)**2 ! periodic boundary xloc=amin1(xloc,xlocmirror) zloc=amin1(zloc,zlocmirror) rad=sqrt(xloc+zloc) ! Make sure location is ! in the domain if(rad.lt.1.) qv(i,k)=.5*delt*(cos(trigpi*rad)+1.) ! Exact soln. enddo enddo 17

  18. Example GrADS script for making animations 18

  19. * example GrADS plot script for model task 4 * this version can save individual frames as png images * ATM562 * http://www.atmos.albany.edu/facstaff/rfovell/ATM562/plot_cone_movie.gs * version of 10/9/2018 'set display color white' 'clear' 'run rgbset.gs' * display parameters 'set mproj off' 'set vpage 0. 8.5 0. 8.5' 'set parea 1 7.5 1 7.5' * save individual plots as png images? say 'Create png images? (1=yes ; 0=no)' pull ans * find final time in grads file frame = 1 'q file' rec=sublin(result,5) _endtime=subwrd(rec,12) say " endtime is " _endtime * looping flag runscript = 1 * start at time 1 dis_t = 1 19

  20. * ======================================================================= * MOVIE LOOP * ======================================================================= while(runscript) 'set t ' dis_t 'clear' 'set grads off' 'set ccolor 15' 'set cint 2.0' 'set black 0 0' 'set cthick 7' 'set gxout shaded' 'set clevs 0 2 4 6 8 10' 'set ccols 0 0 61 63 65 67 69' 'd qv' 'run cbarn.gs' 'set clab off' 'set gxout contour' 'set ccolor 2' 'set clevs 2 4 6 8 10' 'd qv' 'set clab on' 'set cthick 5' 'set ccolor 1' 'set cthick 6' 'set cint 2.0' 'd v 20

  21. * ======================================================================= * FINISH * ======================================================================= if(ans) if( frame < 10 ) gxprint movie00'frame'.png' else if ( frame < 100 ) gxprint movie0'frame'.png' else gxprint movie'frame'.png' endif endif frame=frame+1 endif * this next line makes you hit return key to advance pull dummy if ( dis_t=_endtime ) runscript=0 endif dis_t = dis_t + 1 endwhile Results in sequence of individual PNG files named movie*.png, which can be combined into a GIF animation 21

  22. GIF animations Gifsicle http://www.lcdf.org/gifsicle/ Command-line tool, multiple platforms Graphic Converter (Mac) https://www.lemkesoft.de/en/image-editing- slideshow-browser-batch-conversion-metadata- and-more-on-your-mac/ [and app store] Online converters exist Many, many others 22

  23. MT4 Summary Turn in your model code and a plot showing your LF solution at 4900 sec Chapter 5 will reveal that the stability condition for the 2D leapfrog is a lot more restrictive: c =0.5. Our experiment is using c = 0.5 exactly. Prove you cannot use a larger t than 50 sec. Which wavelengths are blowing up fastest? What happens if you code the upstream or an RK3 scheme instead? 23

Related