Changeset 138 for codes/icosagcm/trunk/src/caldyn_gcm.f90
- Timestamp:
- 02/16/13 17:03:57 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/caldyn_gcm.f90
r134 r138 297 297 REAL(rstd),INTENT(IN) :: qu(iim*3*jjm,llm) 298 298 299 REAL(rstd),INTENT(OUT) :: du(iim*3*jjm,llm), hflux(iim*3*jjm,llm) 299 REAL(rstd),INTENT(OUT) :: du(iim*3*jjm,llm), hflux(iim*3*jjm,llm) ! hflux in kg/s 300 300 REAL(rstd),INTENT(OUT) :: dtheta_rhodz(iim*jjm,llm) 301 301 REAL(rstd),INTENT(OUT) :: dps(iim*jjm) 302 REAL(rstd),INTENT(OUT) :: wflux(iim*jjm,llm+1) ! vertical mass flux 302 REAL(rstd),INTENT(OUT) :: wflux(iim*jjm,llm+1) ! vertical mass flux (kg/m2/s) 303 303 304 304 INTEGER :: i,j,ij,l … … 312 312 REAL(rstd),ALLOCATABLE,SAVE :: phi(:,:) ! geopotential 313 313 REAL(rstd),ALLOCATABLE,SAVE :: Ftheta(:,:) ! theta flux 314 REAL(rstd),ALLOCATABLE,SAVE :: convm(:,:) ! mass flux convergence314 REAL(rstd),ALLOCATABLE,SAVE :: divm(:,:) ! mass flux divergence 315 315 REAL(rstd),ALLOCATABLE,SAVE :: berni(:,:) ! Bernouilli function 316 316 … … 328 328 ALLOCATE(phi(iim*jjm,llm)) ! geopotential 329 329 ALLOCATE(Ftheta(3*iim*jjm,llm)) ! theta flux 330 ALLOCATE( convm(iim*jjm,llm)) ! mass flux convergence330 ALLOCATE(divm(iim*jjm,llm)) ! mass flux convergence 331 331 ALLOCATE(berni(iim*jjm,llm)) ! bernouilli term 332 332 … … 363 363 DO i=ii_begin,ii_end 364 364 ij=(j-1)*iim+i 365 ! convm = +div(mass flux), sign convention as in Ringler et al. 2012, eq. 21366 convm(ij,l)= 1./Ai(ij)*(ne(ij,right)*hflux(ij+u_right,l) + &365 ! divm = +div(mass flux), sign convention as in Ringler et al. 2012, eq. 21 366 divm(ij,l)= 1./Ai(ij)*(ne(ij,right)*hflux(ij+u_right,l) + & 367 367 ne(ij,rup)*hflux(ij+u_rup,l) + & 368 368 ne(ij,lup)*hflux(ij+u_lup,l) + & … … 383 383 ENDDO 384 384 385 !!! cumulate mass flux convergence from top to bottom385 !!! cumulate mass flux divergence from top to bottom 386 386 DO l = llm-1, 1, -1 387 387 !$OMP DO … … 389 389 DO i=ii_begin,ii_end 390 390 ij=(j-1)*iim+i 391 convm(ij,l) = convm(ij,l) + convm(ij,l+1)391 divm(ij,l) = divm(ij,l) + divm(ij,l+1) 392 392 ENDDO 393 393 ENDDO … … 402 402 ! w = int(z,ztop,div(flux)dz) + B(eta)dps/dt 403 403 ! => w>0 for upward transport 404 wflux( ij, l+1 ) = convm( ij, l+1 ) - bp(l+1) * convm( ij, 1 )404 wflux( ij, l+1 ) = divm( ij, l+1 ) - bp(l+1) * divm( ij, 1 ) 405 405 ENDDO 406 406 ENDDO 407 407 ENDDO 408 408 409 ! compute dps, vertical mass flux at the surface =0409 ! compute dps, set vertical mass flux at the surface to 0 410 410 !$OMP DO 411 411 DO j=jj_begin,jj_end … … 414 414 wflux(ij,1) = 0. 415 415 ! dps/dt = -int(div flux)dz 416 dps(ij)=- convm(ij,1) * g416 dps(ij)=-divm(ij,1) * g 417 417 ENDDO 418 418 ENDDO … … 644 644 DEALLOCATE(phi) ! geopotential 645 645 DEALLOCATE(Ftheta) ! theta flux 646 DEALLOCATE( convm) ! mass flux convergence646 DEALLOCATE(divm) ! mass flux divergence 647 647 DEALLOCATE(berni) ! bernouilli term 648 648 !!$OMP END MASTER
Note: See TracChangeset
for help on using the changeset viewer.