Changeset 295 for codes/icosagcm/trunk/src/omega.f90
- Timestamp:
- 10/31/14 14:52:01 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/omega.f90
r186 r295 23 23 END SUBROUTINE W_omega 24 24 25 26 25 27 SUBROUTINE compute_omega(ps,u, w) 26 28 USE disvert_mod, ONLY : ap,bp 29 USE omp_para 30 IMPLICIT NONE 27 31 REAL(rstd),INTENT(IN) :: u(iim*3*jjm,llm), ps(iim*jjm) 28 32 REAL(rstd),INTENT(OUT):: w(iim*jjm,llm) … … 30 34 REAL(rstd):: p(iim*jjm,llm+1), rhodz(iim*jjm,llm), Fe(iim*3*jjm,llm) 31 35 REAL(rstd):: ugradps 32 DO l = 1, llm+1 33 DO j=jj_begin-1,jj_end+1 34 DO i=ii_begin-1,ii_end+1 35 ij=(j-1)*iim+i 36 p(ij,l) = ap(l) + bp(l) * ps(ij) 37 ENDDO 38 ENDDO 39 ENDDO 36 37 INTEGER :: i,j,l,ij 38 39 !$OMP BARRIER 40 IF (is_omp_level_master) THEN 41 DO l = 1, llm+1 42 DO j=jj_begin-1,jj_end+1 43 DO i=ii_begin-1,ii_end+1 44 ij=(j-1)*iim+i 45 p(ij,l) = ap(l) + bp(l) * ps(ij) 46 ENDDO 47 ENDDO 48 ENDDO 40 49 41 50 !!! Compute mass 42 DO l = 1, llm43 DO j=jj_begin-1,jj_end+144 DO i=ii_begin-1,ii_end+145 ij=(j-1)*iim+i46 rhodz(ij,l) = ( p(ij,l) - p(ij,l+1) ) / g47 ENDDO48 ENDDO49 ENDDO51 DO l = 1, llm 52 DO j=jj_begin-1,jj_end+1 53 DO i=ii_begin-1,ii_end+1 54 ij=(j-1)*iim+i 55 rhodz(ij,l) = ( p(ij,l) - p(ij,l+1) ) / g 56 ENDDO 57 ENDDO 58 ENDDO 50 59 51 60 !!! Compute mass flux 52 DO l = 1, llm53 DO j=jj_begin-1,jj_end+154 DO i=ii_begin-1,ii_end+155 ij=(j-1)*iim+i56 Fe(ij+u_right,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_right,l))*u(ij+u_right,l)*le(ij+u_right)57 Fe(ij+u_lup,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_lup,l))*u(ij+u_lup,l)*le(ij+u_lup)58 Fe(ij+u_ldown,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_ldown,l))*u(ij+u_ldown,l)*le(ij+u_ldown)59 ENDDO60 ENDDO61 ENDDO61 DO l = 1, llm 62 DO j=jj_begin-1,jj_end+1 63 DO i=ii_begin-1,ii_end+1 64 ij=(j-1)*iim+i 65 Fe(ij+u_right,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_right,l))*u(ij+u_right,l)*le(ij+u_right) 66 Fe(ij+u_lup,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_lup,l))*u(ij+u_lup,l)*le(ij+u_lup) 67 Fe(ij+u_ldown,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_ldown,l))*u(ij+u_ldown,l)*le(ij+u_ldown) 68 ENDDO 69 ENDDO 70 ENDDO 62 71 63 72 !!! mass flux convergence computation 64 73 65 74 ! horizontal convergence 66 DO l = 1, llm67 DO j=jj_begin,jj_end68 DO i=ii_begin,ii_end69 ij=(j-1)*iim+i70 ! convm = +div(mass flux), sign convention as in Ringler et al. 2012, eq. 2171 convm(ij,l)= 1./Ai(ij)*(ne(ij,right)*Fe(ij+u_right,l) + &72 ne(ij,rup)*Fe(ij+u_rup,l) + &73 ne(ij,lup)*Fe(ij+u_lup,l) + &74 ne(ij,left)*Fe(ij+u_left,l) + &75 ne(ij,ldown)*Fe(ij+u_ldown,l) + &76 ne(ij,rdown)*Fe(ij+u_rdown,l))77 ENDDO78 ENDDO79 ENDDO75 DO l = 1, llm 76 DO j=jj_begin,jj_end 77 DO i=ii_begin,ii_end 78 ij=(j-1)*iim+i 79 ! convm = +div(mass flux), sign convention as in Ringler et al. 2012, eq. 21 80 convm(ij,l)= 1./Ai(ij)*(ne(ij,right)*Fe(ij+u_right,l) + & 81 ne(ij,rup)*Fe(ij+u_rup,l) + & 82 ne(ij,lup)*Fe(ij+u_lup,l) + & 83 ne(ij,left)*Fe(ij+u_left,l) + & 84 ne(ij,ldown)*Fe(ij+u_ldown,l) + & 85 ne(ij,rdown)*Fe(ij+u_rdown,l)) 86 ENDDO 87 ENDDO 88 ENDDO 80 89 81 ! vertical integration from up to down82 DO l = llm-1, 1, -183 DO j=jj_begin,jj_end84 DO i=ii_begin,ii_end85 ij=(j-1)*iim+i86 convm(ij,l) = convm(ij,l) + convm(ij,l+1)87 ENDDO88 ENDDO89 ENDDO90 convm(:,llm+1)=0.90 ! vertical integration from up to down 91 DO l = llm-1, 1, -1 92 DO j=jj_begin,jj_end 93 DO i=ii_begin,ii_end 94 ij=(j-1)*iim+i 95 convm(ij,l) = convm(ij,l) + convm(ij,l+1) 96 ENDDO 97 ENDDO 98 ENDDO 99 convm(:,llm+1)=0. 91 100 92 101 !!! Compute dps … … 125 134 ! -grad ps : ( ne(ij,ldown)*ps(ij,l) + ne(ij+t_ldown,rup)*ps(ij+t_ldown,l) ) ) / de(ij+u_ldown) 126 135 127 DO l = 1,llm 128 DO j=jj_begin,jj_end 129 DO i=ii_begin,ii_end 130 toto = 1 136 DO l = 1,llm 137 DO j=jj_begin,jj_end 138 DO i=ii_begin,ii_end 131 139 ij=(j-1)*iim+i 132 140 ugradps = & … … 140 148 w( ij, l) = ugradps - .5*(convm( ij,l+1)+convm(ij,l)) 141 149 ENDDO 142 ENDDO 143 ENDDO 150 ENDDO 151 ENDDO 152 ENDIF 153 !$OMP BARRIER 144 154 145 155 END SUBROUTINE compute_omega
Note: See TracChangeset
for help on using the changeset viewer.