;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FUNCTION SEC_ORD_LEAP_FROG_3D, ADV=ADV,del_x,del_y,del_z,del_t,times ss=SIZE(ADV.uu,/ DIMENSIONS) ;A_LF2=FLTARR(times, ss[0], ss[1], ss[2]) C_u = FLTARR(ss[0],ss[1], ss[2]) C_v = FLTARR(ss[0],ss[1], ss[2]) C_w = FLTARR(ss[0],ss[1], ss[2]) for i = 0, ss[0]-1 do begin for j = 0, ss[1]-1 do begin for k = 0, ss[2]-1 do begin C_u[i,j,k] = ADV.uu[i,j,k]*(del_t/del_x) C_v[i,j,k] = ADV.vv[i,j,k]*(del_t/del_y) C_w[i,j,k] = ADV.ww[i,j,k]*(del_t/del_z) endfor endfor endfor ;A_LF2(0,*,*)= B.A0(*,*) adv_ut = FLTARR(times,ss[0],ss[1], ss[2]) adv_vt = FLTARR(times,ss[0],ss[1], ss[2]) adv_wt = FLTARR(times,ss[0],ss[1], ss[2]) adv_tt = FLTARR(times,ss[0],ss[1], ss[2]) adv_ut(0,*,*,*)=REFORM(ADV.uu(*,*,*)) adv_vt(0,*,*,*)=REFORM(ADV.vv(*,*,*)) adv_wt(0,*,*,*)=REFORM(ADV.ww(*,*,*)) adv_tt(0,*,*,*)=REFORM(ADV.tt(*,*,*)) FOR t=0, times-2 DO BEGIN FOR i=1, ss[0]-2 DO BEGIN FOR j=1, ss[1]-2 DO BEGIN FOR k=1, ss[2]-2 DO BEGIN IF (t EQ 0) THEN BEGIN adv_ut(t+1,i,j,k)= adv_ut(t,i,j,k)+ (((C_u[i,j,k])*(adv_ut(t,i+1,j,k)-adv_ut(t,i-1,j,k))) - ((C_v[i,j,k])*(adv_ut(t,i,j+1,k)-adv_ut(t,i,j-1,k))) - ((C_w[i,j,k])*(adv_ut(t,i,j,k+1)-adv_ut(t,i,j,k-1)))) adv_vt(t+1,i,j,k)= adv_vt(t,i,j,k)+ (((C_v[i,j,k])*(adv_vt(t,i+1,j,k)-adv_vt(t,i-1,j,k))) - ((C_v[i,j,k])*(adv_vt(t,i,j+1,k)-adv_vt(t,i,j-1,k))) - ((C_w[i,j,k])*(adv_vt(t,i,j,k+1)-adv_vt(t,i,j,k-1)))) adv_wt(t+1,i,j,k)= adv_vt(t,i,j,k)+ (((C_w[i,j,k])*(adv_wt(t,i+1,j,k)-adv_wt(t,i-1,j,k))) - ((C_v[i,j,k])*(adv_wt(t,i,j+1,k)-adv_wt(t,i,j-1,k))) - ((C_w[i,j,k])*(adv_wt(t,i,j,k+1)-adv_wt(t,i,j,k-1)))) adv_tt(t+1,i,j,k)= adv_tt(t,i,j,k)+ (((C_u[i,j,k])*(adv_tt(t,i+1,j,k)-adv_tt(t,i-1,j,k))) - ((C_v[i,j,k])*(adv_tt(t,i,j+1,k)-adv_tt(t,i,j-1,k))) - ((C_w[i,j,k])*(adv_tt(t,i,j,k+1)-adv_tt(t,i,j,k-1)))) ENDIF adv_ut(t+1,i,j,k)= adv_ut(t,i,j,k)- (((C_u(i,j,k)*adv_ut(t,i+1,j,k)-adv_ut(t,i-1,j,k))) - ((C_v(i,j,k))*(adv_ut(t,i,j+1,k)-adv_ut(t,i,j-1,k))) -((C_w(i,j,k)*adv_ut(t,i,j,k+1)-adv_ut(t,i,j,k-1)))) adv_vt(t+1,i,j,k)= adv_vt(t,i,j,k)- (((C_v(i,j,k)*adv_ut(t,i+1,j,k)-adv_vt(t,i-1,j,k))) - ((C_v(i,j,k))*(adv_vt(t,i,j+1,k)-adv_vt(t,i,j-1,k))) -((C_w(i,j,k)*adv_vt(t,i,j,k+1)-adv_vt(t,i,j,k-1)))) adv_wt(t+1,i,j,k)= adv_wt(t,i,j,k)- (((C_w(i,j,k)*adv_ut(t,i+1,j,k)-adv_wt(t,i-1,j,k))) - ((C_v(i,j,k))*(adv_wt(t,i,j+1,k)-adv_wt(t,i,j-1,k))) -((C_w(i,j,k)*adv_wt(t,i,j,k+1)-adv_wt(t,i,j,k-1)))) adv_tt(t+1,i,j,k)= adv_tt(t,i,j,k)- (((C_u(i,j,k)*adv_ut(t,i+1,j,k)-adv_tt(t,i-1,j,k))) - ((C_v(i,j,k))*(adv_tt(t,i,j+1,k)-adv_tt(t,i,j-1,k))) -((C_w(i,j,k)*adv_tt(t,i,j,k+1)-adv_tt(t,i,j,k-1)))) ENDFOR ENDFOR ENDFOR ENDFOR advt={ut:adv_ut, vt:adv_vt, wt:adv_wt, tt:adv_tt} PRINT,'>>>>>>>>>> Sec order leap frog done' RETURN, advt END ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;