Ignore:
Timestamp:
01/27/17 16:54:36 (7 years ago)
Author:
dubos
Message:

Updated devel to r526

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/caldyn_kernels.f90

    r428 r529  
    3232  SUBROUTINE compute_pvort(ps,u,theta_rhodz, rhodz,theta,qu,qv) 
    3333    USE icosa 
    34     USE disvert_mod, ONLY : mass_dak, mass_dbk, caldyn_eta, eta_mass 
     34    USE disvert_mod, ONLY : mass_dak, mass_dbk, caldyn_eta, eta_mass, ptop 
    3535    USE trace 
    3636    USE omp_para 
     
    4848    CALL trace_start("compute_pvort")   
    4949 
    50     IF(caldyn_eta==eta_mass) THEN 
    51        CALL wait_message(req_ps)  ! COM00 
    52     ELSE 
    53        CALL wait_message(req_mass) ! COM00 
    54     END IF 
    55     CALL wait_message(req_theta_rhodz) ! COM01 
     50!    IF(caldyn_eta==eta_mass) THEN 
     51!       CALL wait_message(req_ps)  ! COM00 
     52!    ELSE 
     53!       CALL wait_message(req_mass) ! COM00 
     54!    END IF 
     55!    CALL wait_message(req_theta_rhodz) ! COM01 
    5656 
    5757    IF(caldyn_eta==eta_mass) THEN ! Compute mass & theta 
    5858       DO l = ll_begin,ll_end 
    59           CALL test_message(req_u)  
     59!          CALL test_message(req_u)  
    6060          !DIR$ SIMD 
    6161          DO ij=ij_begin_ext,ij_end_ext 
    62              m = ( mass_dak(l)+ps(ij)*mass_dbk(l) )/g 
    63              rhodz(ij,l) = m 
     62             m = mass_dak(l)+(ps(ij)*g+ptop)*mass_dbk(l) ! ps is actually Ms 
     63             rhodz(ij,l) = m/g 
    6464             theta(ij,l) = theta_rhodz(ij,l)/rhodz(ij,l) 
    6565          ENDDO 
     
    6767    ELSE ! Compute only theta 
    6868       DO l = ll_begin,ll_end 
    69           CALL test_message(req_u)  
     69 !         CALL test_message(req_u)  
    7070          !DIR$ SIMD 
    7171          DO ij=ij_begin_ext,ij_end_ext 
     
    7575    END IF 
    7676 
    77     CALL wait_message(req_u) ! COM02 
     77 !   CALL wait_message(req_u) ! COM02 
    7878 
    7979!!! Compute shallow-water potential vorticity 
     
    8181       !DIR$ SIMD 
    8282       DO ij=ij_begin_ext,ij_end_ext 
    83           etav= 1./Av(ij+z_up)*(  ne_rup        * u(ij+u_rup,l)        * de(ij+u_rup)         & 
    84                + ne_left * u(ij+t_rup+u_left,l) * de(ij+t_rup+u_left)  & 
    85                - ne_lup        * u(ij+u_lup,l)        * de(ij+u_lup) )                                
    86  
    87           hv =  Riv2(ij,vup)          * rhodz(ij,l)            & 
    88                + Riv2(ij+t_rup,vldown) * rhodz(ij+t_rup,l)     & 
     83          etav= 1./Av(ij+z_up)*(  ne_rup  * u(ij+u_rup,l)    & 
     84               + ne_left * u(ij+t_rup+u_left,l)              & 
     85               - ne_lup  * u(ij+u_lup,l) )                                
     86          hv =   Riv2(ij,vup)          * rhodz(ij,l)         & 
     87               + Riv2(ij+t_rup,vldown) * rhodz(ij+t_rup,l)   & 
    8988               + Riv2(ij+t_lup,vrdown) * rhodz(ij+t_lup,l) 
    90  
    9189          qv(ij+z_up,l) = ( etav+fv(ij+z_up) )/hv 
    92  
    93           etav = 1./Av(ij+z_down)*(  ne_ldown         * u(ij+u_ldown,l)          * de(ij+u_ldown)          & 
    94                + ne_right * u(ij+t_ldown+u_right,l)  * de(ij+t_ldown+u_right)  & 
    95                - ne_rdown         * u(ij+u_rdown,l)          * de(ij+u_rdown) ) 
    96  
    97           hv =  Riv2(ij,vdown)        * rhodz(ij,l)          & 
     90           
     91          etav = 1./Av(ij+z_down)*(  ne_ldown * u(ij+u_ldown,l)  & 
     92               + ne_right * u(ij+t_ldown+u_right,l)              & 
     93               - ne_rdown * u(ij+u_rdown,l) ) 
     94          hv =   Riv2(ij,vdown)        * rhodz(ij,l)          & 
    9895               + Riv2(ij+t_ldown,vrup) * rhodz(ij+t_ldown,l)  & 
    9996               + Riv2(ij+t_rdown,vlup) * rhodz(ij+t_rdown,l) 
    100  
    10197          qv(ij+z_down,l) =( etav+fv(ij+z_down) )/hv 
    102  
    10398       ENDDO 
    10499 
     
    115110  END SUBROUTINE compute_pvort 
    116111 
    117   !************************* caldyn_horiz = caldyn_fast + caldyn_slow ********************** 
     112  !************** caldyn_horiz = caldyn_fast + caldyn_slow + caldyn_coriolis *************** 
    118113 
    119114  SUBROUTINE compute_caldyn_horiz(u,rhodz,qu,theta,pk,geopot, hflux,convm, dtheta_rhodz, du) 
     
    139134    REAL(rstd) :: Ftheta(3*iim*jjm,llm) ! theta flux 
    140135    REAL(rstd) :: berni(iim*jjm,llm)  ! Bernoulli function 
     136    REAL(rstd) :: uu_right, uu_lup, uu_ldown 
    141137 
    142138    INTEGER :: i,j,ij,l 
     
    149145    DO l = ll_begin, ll_end 
    150146!!!  Compute mass and theta fluxes 
    151        IF (caldyn_conserv==energy) CALL test_message(req_qu)  
     147!       IF (caldyn_conserv==energy) CALL test_message(req_qu)  
    152148       !DIR$ SIMD 
    153149       DO ij=ij_begin_ext,ij_end_ext          
    154           hflux(ij+u_right,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_right,l))*u(ij+u_right,l)*le(ij+u_right) 
    155           hflux(ij+u_lup,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_lup,l))*u(ij+u_lup,l)*le(ij+u_lup) 
    156           hflux(ij+u_ldown,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_ldown,l))*u(ij+u_ldown,l)*le(ij+u_ldown) 
    157  
     150          uu_right=0.5*(rhodz(ij,l)+rhodz(ij+t_right,l))*u(ij+u_right,l) 
     151          uu_lup=0.5*(rhodz(ij,l)+rhodz(ij+t_lup,l))*u(ij+u_lup,l) 
     152          uu_ldown=0.5*(rhodz(ij,l)+rhodz(ij+t_ldown,l))*u(ij+u_ldown,l) 
     153          uu_right= uu_right*le_de(ij+u_right) 
     154          uu_lup  = uu_lup  *le_de(ij+u_lup) 
     155          uu_ldown= uu_ldown*le_de(ij+u_ldown) 
     156          hflux(ij+u_right,l)=uu_right 
     157          hflux(ij+u_lup,l)  =uu_lup 
     158          hflux(ij+u_ldown,l)=uu_ldown 
     159!          hflux(ij+u_right,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_right,l))*u(ij+u_right,l)*le(ij+u_right) 
     160!          hflux(ij+u_lup,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_lup,l))*u(ij+u_lup,l)*le(ij+u_lup) 
     161!          hflux(ij+u_ldown,l)=0.5*(rhodz(ij,l)+rhodz(ij+t_ldown,l))*u(ij+u_ldown,l)*le(ij+u_ldown) 
    158162          Ftheta(ij+u_right,l)=0.5*(theta(ij,l)+theta(ij+t_right,l))*hflux(ij+u_right,l) 
    159163          Ftheta(ij+u_lup,l)=0.5*(theta(ij,l)+theta(ij+t_lup,l))*hflux(ij+u_lup,l) 
     
    189193    CASE(energy) ! energy-conserving TRiSK 
    190194 
    191        CALL wait_message(req_qu) ! COM03 
     195!       CALL wait_message(req_qu) ! COM03 
    192196 
    193197       DO l=ll_begin,ll_end 
     
    205209                  wee(ij+u_right,4,2)*hflux(ij+t_right+u_rup,l)*(qu(ij+u_right,l)+qu(ij+t_right+u_rup,l))+             & 
    206210                  wee(ij+u_right,5,2)*hflux(ij+t_right+u_lup,l)*(qu(ij+u_right,l)+qu(ij+t_right+u_lup,l)) 
    207              du(ij+u_right,l) = .5*uu/de(ij+u_right) 
     211             du(ij+u_right,l) = .5*uu 
    208212 
    209213             uu = wee(ij+u_lup,1,1)*hflux(ij+u_left,l)*(qu(ij+u_lup,l)+qu(ij+u_left,l)) +                        & 
     
    217221                  wee(ij+u_lup,4,2)*hflux(ij+t_lup+u_left,l)*(qu(ij+u_lup,l)+qu(ij+t_lup+u_left,l)) +            & 
    218222                  wee(ij+u_lup,5,2)*hflux(ij+t_lup+u_ldown,l)*(qu(ij+u_lup,l)+qu(ij+t_lup+u_ldown,l)) 
    219              du(ij+u_lup,l) = .5*uu/de(ij+u_lup) 
    220  
     223             du(ij+u_lup,l) = .5*uu 
    221224 
    222225             uu = wee(ij+u_ldown,1,1)*hflux(ij+u_rdown,l)*(qu(ij+u_ldown,l)+qu(ij+u_rdown,l)) +                      & 
     
    230233                  wee(ij+u_ldown,4,2)*hflux(ij+t_ldown+u_rdown,l)*(qu(ij+u_ldown,l)+qu(ij+t_ldown+u_rdown,l)) +      & 
    231234                  wee(ij+u_ldown,5,2)*hflux(ij+t_ldown+u_right,l)*(qu(ij+u_ldown,l)+qu(ij+t_ldown+u_right,l)) 
    232              du(ij+u_ldown,l) = .5*uu/de(ij+u_ldown) 
     235             du(ij+u_ldown,l) = .5*uu 
    233236 
    234237          ENDDO 
     
    251254                  wee(ij+u_right,4,2)*hflux(ij+t_right+u_rup,l)+                   & 
    252255                  wee(ij+u_right,5,2)*hflux(ij+t_right+u_lup,l) 
    253              du(ij+u_right,l) = qu(ij+u_right,l)*uu/de(ij+u_right) 
     256             du(ij+u_right,l) = qu(ij+u_right,l)*uu 
    254257 
    255258 
     
    264267                  wee(ij+u_lup,4,2)*hflux(ij+t_lup+u_left,l)+                  & 
    265268                  wee(ij+u_lup,5,2)*hflux(ij+t_lup+u_ldown,l) 
    266              du(ij+u_lup,l) = qu(ij+u_lup,l)*uu/de(ij+u_lup) 
     269             du(ij+u_lup,l) = qu(ij+u_lup,l)*uu 
    267270 
    268271             uu = wee(ij+u_ldown,1,1)*hflux(ij+u_rdown,l)+                      & 
     
    276279                  wee(ij+u_ldown,4,2)*hflux(ij+t_ldown+u_rdown,l)+              & 
    277280                  wee(ij+u_ldown,5,2)*hflux(ij+t_ldown+u_right,l) 
    278              du(ij+u_ldown,l) = qu(ij+u_ldown,l)*uu/de(ij+u_ldown) 
     281             du(ij+u_ldown,l) = qu(ij+u_ldown,l)*uu 
    279282 
    280283          ENDDO 
     
    290293          !DIR$ SIMD 
    291294          DO ij=ij_begin,ij_end          
    292  
    293              berni(ij,l) = pk(ij,l) + & 
    294                   1/(4*Ai(ij))*(le(ij+u_right)*de(ij+u_right)*u(ij+u_right,l)**2 +    & 
    295                   le(ij+u_rup)*de(ij+u_rup)*u(ij+u_rup,l)**2 +          & 
    296                   le(ij+u_lup)*de(ij+u_lup)*u(ij+u_lup,l)**2 +          & 
    297                   le(ij+u_left)*de(ij+u_left)*u(ij+u_left,l)**2 +       & 
    298                   le(ij+u_ldown)*de(ij+u_ldown)*u(ij+u_ldown,l)**2 +    & 
    299                   le(ij+u_rdown)*de(ij+u_rdown)*u(ij+u_rdown,l)**2 )   
     295             berni(ij,l) = pk(ij,l) + 1/(4*Ai(ij))*( & 
     296                  le_de(ij+u_right)*u(ij+u_right,l)**2 +    & 
     297                  le_de(ij+u_rup)*u(ij+u_rup,l)**2 +          & 
     298                  le_de(ij+u_lup)*u(ij+u_lup,l)**2 +          & 
     299                  le_de(ij+u_left)*u(ij+u_left,l)**2 +       & 
     300                  le_de(ij+u_ldown)*u(ij+u_ldown,l)**2 +    & 
     301                  le_de(ij+u_rdown)*u(ij+u_rdown,l)**2 )   
    300302             ! from now on pk contains the vertically-averaged geopotential 
    301303             pk(ij,l) = .5*(geopot(ij,l)+geopot(ij,l+1)) 
     
    308310          !DIR$ SIMD 
    309311          DO ij=ij_begin,ij_end          
    310  
    311312             berni(ij,l) = .5*(geopot(ij,l)+geopot(ij,l+1)) & 
    312                   + 1/(4*Ai(ij))*(le(ij+u_right)*de(ij+u_right)*u(ij+u_right,l)**2 +    & 
    313                   le(ij+u_rup)*de(ij+u_rup)*u(ij+u_rup,l)**2 +          & 
    314                   le(ij+u_lup)*de(ij+u_lup)*u(ij+u_lup,l)**2 +          & 
    315                   le(ij+u_left)*de(ij+u_left)*u(ij+u_left,l)**2 +       & 
    316                   le(ij+u_ldown)*de(ij+u_ldown)*u(ij+u_ldown,l)**2 +    & 
    317                   le(ij+u_rdown)*de(ij+u_rdown)*u(ij+u_rdown,l)**2 )   
     313                  + 1/(4*Ai(ij))*( & 
     314                  le_de(ij+u_right)*u(ij+u_right,l)**2 +    & 
     315                  le_de(ij+u_rup)*u(ij+u_rup,l)**2 +          & 
     316                  le_de(ij+u_lup)*u(ij+u_lup,l)**2 +          & 
     317                  le_de(ij+u_left)*u(ij+u_left,l)**2 +       & 
     318                  le_de(ij+u_ldown)*u(ij+u_ldown,l)**2 +    & 
     319                  le_de(ij+u_rdown)*u(ij+u_rdown,l)**2 )   
    318320          ENDDO 
    319321       ENDDO 
     
    326328       DO ij=ij_begin,ij_end          
    327329 
    328           du(ij+u_right,l) = du(ij+u_right,l) + 1/de(ij+u_right) * (             & 
     330          du(ij+u_right,l) = du(ij+u_right,l) + (             & 
    329331               0.5*(theta(ij,l)+theta(ij+t_right,l))                & 
    330332               *( ne_right*pk(ij,l)+ne_left*pk(ij+t_right,l))    & 
     
    332334 
    333335 
    334           du(ij+u_lup,l) = du(ij+u_lup,l) +  1/de(ij+u_lup) * (                  & 
     336          du(ij+u_lup,l) = du(ij+u_lup,l) +  (                  & 
    335337               0.5*(theta(ij,l)+theta(ij+t_lup,l))                  & 
    336338               *( ne_lup*pk(ij,l)+ne_rdown*pk(ij+t_lup,l))       & 
    337339               + ne_lup*berni(ij,l)+ne_rdown*berni(ij+t_lup,l) ) 
    338340 
    339           du(ij+u_ldown,l) = du(ij+u_ldown,l) + 1/de(ij+u_ldown) * (             & 
     341          du(ij+u_ldown,l) = du(ij+u_ldown,l) + (             & 
    340342               0.5*(theta(ij,l)+theta(ij+t_ldown,l))                & 
    341343               *( ne_ldown*pk(ij,l)+ne_rup*pk(ij+t_ldown,l))     & 
Note: See TracChangeset for help on using the changeset viewer.