Changeset 428 for codes/icosagcm/trunk/src/exner.f90
- Timestamp:
- 06/14/16 21:54:26 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/exner.f90
r295 r428 11 11 USE icosa 12 12 IMPLICIT NONE 13 TYPE(t_field), POINTER :: f_ps(:) 14 TYPE(t_field), POINTER :: f_p(:) 15 TYPE(t_field), POINTER :: f_pks(:) 16 TYPE(t_field), POINTER :: f_pk(:) 13 TYPE(t_field), POINTER :: f_ps(:) ! IN 14 TYPE(t_field), POINTER :: f_p(:) ! IN 15 TYPE(t_field), POINTER :: f_pks(:) ! OUT 16 TYPE(t_field), POINTER :: f_pk(:) ! OUT 17 17 18 18 REAL(rstd), POINTER :: ps(:) … … 49 49 INTEGER,INTENT(IN) :: offset 50 50 INTEGER :: i,j,ij,l 51 REAL(rstd) :: alpha(iim*jjm,llm),beta(iim*jjm,llm)52 REAL(rstd) :: delta53 51 54 IF(caldyn_exner == lmdz) THEN ! LMD-Z style calculation of Exner pressure55 !! Compute Alpha and Beta52 ! surface : pks 53 IF (is_omp_level_master) THEN 56 54 57 IF (is_omp_level_master) THEN 58 ! for llm layer 59 DO j=jj_begin-offset,jj_end+offset 60 DO i=ii_begin-offset,ii_end+offset 61 ij=(j-1)*iim+i 62 alpha(ij,llm) = 0. 63 beta (ij,llm) = 1./ (1+ 2*kappa) 64 ENDDO 65 ENDDO 55 DO j=jj_begin-offset,jj_end+offset 56 DO i=ii_begin-offset,ii_end+offset 57 ij=(j-1)*iim+i 58 pks(ij) = cpp * ( ps(ij)/preff ) ** kappa 59 ENDDO 60 ENDDO 66 61 67 ! for other layer 68 DO l = llm-1 , 2 , -1 69 DO j=jj_begin-offset,jj_end+offset 70 DO i=ii_begin-offset,ii_end+offset 71 ij=(j-1)*iim+i 72 delta = p(ij,l)* (1+2*kappa) + p(ij,l+1)* ( beta(ij,l+1)- (1+2*kappa) ) 73 alpha(ij,l) = - p(ij,l+1) / delta * alpha(ij,l+1) 74 beta (ij,l) = p(ij,l ) / delta 75 ENDDO 76 ENDDO 77 ENDDO 78 79 !! Compute pk 80 81 ! for first layer 82 DO j=jj_begin-offset,jj_end+offset 83 DO i=ii_begin-offset,ii_end+offset 84 ij=(j-1)*iim+i 85 pks(ij) = cpp * ( ps(ij)/preff ) ** kappa 86 pk(ij,1) = ( p(ij,1)*pks(ij) - 0.5*alpha(ij,2)*p(ij,2) ) / & 87 ( p(ij,1)* (1.+kappa) + 0.5*( beta(ij,2)-(1.+2*kappa) )* p(ij,2) ) 88 ENDDO 89 ENDDO 90 91 ! for other layers 92 93 DO l = 2, llm 94 DO j=jj_begin-offset,jj_end+offset 95 DO i=ii_begin-offset,ii_end+offset 96 ij=(j-1)*iim+i 97 pk(ij,l) = alpha(ij,l) + beta(ij,l) * pk(ij,l-1) 98 ENDDO 99 ENDDO 100 ENDDO 101 102 ENDIF 103 104 ELSE ! Simple calculation of Exner pressure based on centered average 105 ! surface : pks 106 IF (is_omp_level_master) THEN 107 108 DO j=jj_begin-offset,jj_end+offset 109 DO i=ii_begin-offset,ii_end+offset 110 ij=(j-1)*iim+i 111 pks(ij) = cpp * ( ps(ij)/preff ) ** kappa 112 ENDDO 113 ENDDO 114 115 ENDIF 116 117 ! 3D : pk 118 DO l = 1, llm 119 DO j=jj_begin-offset,jj_end+offset 120 DO i=ii_begin-offset,ii_end+offset 121 ij=(j-1)*iim+i 122 pk(ij,l) = cpp * ((.5/preff)*(p(ij,l)+p(ij,l+1))) ** kappa 62 ENDIF 63 64 ! 3D : pk 65 DO l = 1, llm 66 DO j=jj_begin-offset,jj_end+offset 67 DO i=ii_begin-offset,ii_end+offset 68 ij=(j-1)*iim+i 69 pk(ij,l) = cpp * ((.5/preff)*(p(ij,l)+p(ij,l+1))) ** kappa 123 70 ENDDO 124 71 ENDDO 125 72 ENDDO 126 127 END IF 128 73 129 74 END SUBROUTINE compute_exner 130 75
Note: See TracChangeset
for help on using the changeset viewer.