Ignore:
Timestamp:
06/14/16 21:54:26 (8 years ago)
Author:
dubos
Message:

theta-related cleanup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/exner.f90

    r295 r428  
    1111  USE icosa 
    1212  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 
    1717   
    1818    REAL(rstd), POINTER :: ps(:) 
     
    4949    INTEGER,INTENT(IN) :: offset 
    5050    INTEGER :: i,j,ij,l 
    51     REAL(rstd) :: alpha(iim*jjm,llm),beta(iim*jjm,llm) 
    52     REAL(rstd) :: delta  
    5351     
    54     IF(caldyn_exner == lmdz) THEN          ! LMD-Z style calculation of Exner pressure 
    55        !! Compute Alpha and Beta 
     52    ! surface : pks 
     53    IF (is_omp_level_master) THEN 
    5654        
    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 
    6661        
    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 
    12370             ENDDO 
    12471          ENDDO 
    12572       ENDDO 
    126  
    127     END IF 
    128      
     73        
    12974  END SUBROUTINE compute_exner 
    13075   
Note: See TracChangeset for help on using the changeset viewer.