Ignore:
Timestamp:
10/24/17 01:32:57 (7 years ago)
Author:
dubos
Message:

trunk : backported r600-603 from devel

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/kernels/energy_fluxes.k90

    r599 r604  
    1111      END DO 
    1212   END DO 
     13   ! NB : at this point pressure is stored in array pk 
     14   ! pk then serves as buffer to store temperature 
    1315   SELECT CASE(caldyn_thermo) 
    1416   CASE(thermo_theta) 
     
    1719            p_ik = pk(ij,l) 
    1820            theta_ik = theta_rhodz(ij,l,1)/rhodz(ij,l) 
     21            theta(ij,l) = theta_ik 
    1922            temp_ik = theta_ik*(p_ik/preff)**kappa 
    2023            gv = (g*Rd)*temp_ik/p_ik 
     
    2932            theta_ik = theta_rhodz(ij,l,1)/rhodz(ij,l) 
    3033            temp_ik = Treff*exp((theta_ik + Rd*log(p_ik/preff))/cpp) 
     34            theta(ij,l) = Treff*exp(theta_ik/cpp) 
    3135            gv = (g*Rd)*temp_ik/p_ik ! specific volume v = Rd*T/p 
    3236            pk(ij,l) = temp_ik 
     
    3741   !$OMP BARRIER 
    3842   ! Now accumulate energies and energy fluxes 
    39    ! enthalpy 
    4043   ! NB : at this point temperature is stored in array pk 
    4144   ! pk then serves as buffer to store energy 
     45   ! enthalpy 
    4246   DO l = ll_begin, ll_end 
    4347      !DIR$ SIMD 
     
    7377      END DO 
    7478   END DO 
     79   ! theta 
     80   DO l = ll_begin, ll_end 
     81      !DIR$ SIMD 
     82      DO ij=ij_begin_ext, ij_end_ext 
     83         energy = theta(ij,l) 
     84         thetat(ij,l) = thetat(ij,l) + frac*rhodz(ij,l)*energy 
     85         pk(ij,l) = energy 
     86      END DO 
     87   END DO 
     88   DO l = ll_begin, ll_end 
     89      !DIR$ SIMD 
     90      DO ij=ij_begin_ext, ij_end_ext 
     91         thetat_flux(ij+u_right,l) = thetat_flux(ij+u_right,l) + .5*massflux(ij+u_right,l)*(pk(ij,l)+pk(ij+t_right,l)) 
     92         thetat_flux(ij+u_lup,l) = thetat_flux(ij+u_lup,l) + .5*massflux(ij+u_lup,l)*(pk(ij,l)+pk(ij+t_lup,l)) 
     93         thetat_flux(ij+u_ldown,l) = thetat_flux(ij+u_ldown,l) + .5*massflux(ij+u_ldown,l)*(pk(ij,l)+pk(ij+t_ldown,l)) 
     94      END DO 
     95   END DO 
    7596   ! kinetic energy 
    7697   DO l = ll_begin, ll_end 
     
    7899      DO ij=ij_begin_ext, ij_end_ext 
    79100         energy=0.d0 
    80          energy = energy + le(ij+u_rup)*de(ij+u_rup)*u(ij+u_rup,l)**2 
    81          energy = energy + le(ij+u_lup)*de(ij+u_lup)*u(ij+u_lup,l)**2 
    82          energy = energy + le(ij+u_left)*de(ij+u_left)*u(ij+u_left,l)**2 
    83          energy = energy + le(ij+u_ldown)*de(ij+u_ldown)*u(ij+u_ldown,l)**2 
    84          energy = energy + le(ij+u_rdown)*de(ij+u_rdown)*u(ij+u_rdown,l)**2 
    85          energy = energy + le(ij+u_right)*de(ij+u_right)*u(ij+u_right,l)**2 
     101         energy = energy + le(ij+u_rup)*de(ij+u_rup)*ue(ij+u_rup,l)**2 
     102         energy = energy + le(ij+u_lup)*de(ij+u_lup)*ue(ij+u_lup,l)**2 
     103         energy = energy + le(ij+u_left)*de(ij+u_left)*ue(ij+u_left,l)**2 
     104         energy = energy + le(ij+u_ldown)*de(ij+u_ldown)*ue(ij+u_ldown,l)**2 
     105         energy = energy + le(ij+u_rdown)*de(ij+u_rdown)*ue(ij+u_rdown,l)**2 
     106         energy = energy + le(ij+u_right)*de(ij+u_right)*ue(ij+u_right,l)**2 
    86107         energy = energy * (.25/Ai(ij)) 
    87108         ekin(ij,l) = ekin(ij,l) + frac*rhodz(ij,l)*energy 
     
    97118      END DO 
    98119   END DO 
     120   ! ulon 
     121   DO l = ll_begin, ll_end 
     122      !DIR$ SIMD 
     123      DO ij=ij_begin_ext, ij_end_ext 
     124         cx=centroid(ij,1) 
     125         cy=centroid(ij,2) 
     126         cz=centroid(ij,3) 
     127         ux=0. ; uy=0. ; uz=0. 
     128         ue_le = ne_rup*ue(ij+u_rup,l)*le(ij+u_rup) 
     129         ux = ux + ue_le*(.5*(xyz_v(ij+z_rup,1)+xyz_v(ij+z_up,1))-cx) 
     130         uy = uy + ue_le*(.5*(xyz_v(ij+z_rup,2)+xyz_v(ij+z_up,2))-cy) 
     131         uz = uz + ue_le*(.5*(xyz_v(ij+z_rup,3)+xyz_v(ij+z_up,3))-cz) 
     132         ue_le = ne_lup*ue(ij+u_lup,l)*le(ij+u_lup) 
     133         ux = ux + ue_le*(.5*(xyz_v(ij+z_lup,1)+xyz_v(ij+z_up,1))-cx) 
     134         uy = uy + ue_le*(.5*(xyz_v(ij+z_lup,2)+xyz_v(ij+z_up,2))-cy) 
     135         uz = uz + ue_le*(.5*(xyz_v(ij+z_lup,3)+xyz_v(ij+z_up,3))-cz) 
     136         ue_le = ne_left*ue(ij+u_left,l)*le(ij+u_left) 
     137         ux = ux + ue_le*(.5*(xyz_v(ij+z_lup,1)+xyz_v(ij+z_ldown,1))-cx) 
     138         uy = uy + ue_le*(.5*(xyz_v(ij+z_lup,2)+xyz_v(ij+z_ldown,2))-cy) 
     139         uz = uz + ue_le*(.5*(xyz_v(ij+z_lup,3)+xyz_v(ij+z_ldown,3))-cz) 
     140         ue_le = ne_ldown*ue(ij+u_ldown,l)*le(ij+u_ldown) 
     141         ux = ux + ue_le*(.5*(xyz_v(ij+z_ldown,1)+xyz_v(ij+z_down,1))-cx) 
     142         uy = uy + ue_le*(.5*(xyz_v(ij+z_ldown,2)+xyz_v(ij+z_down,2))-cy) 
     143         uz = uz + ue_le*(.5*(xyz_v(ij+z_ldown,3)+xyz_v(ij+z_down,3))-cz) 
     144         ue_le = ne_rdown*ue(ij+u_rdown,l)*le(ij+u_rdown) 
     145         ux = ux + ue_le*(.5*(xyz_v(ij+z_rdown,1)+xyz_v(ij+z_down,1))-cx) 
     146         uy = uy + ue_le*(.5*(xyz_v(ij+z_rdown,2)+xyz_v(ij+z_down,2))-cy) 
     147         uz = uz + ue_le*(.5*(xyz_v(ij+z_rdown,3)+xyz_v(ij+z_down,3))-cz) 
     148         ue_le = ne_right*ue(ij+u_right,l)*le(ij+u_right) 
     149         ux = ux + ue_le*(.5*(xyz_v(ij+z_rup,1)+xyz_v(ij+z_rdown,1))-cx) 
     150         uy = uy + ue_le*(.5*(xyz_v(ij+z_rup,2)+xyz_v(ij+z_rdown,2))-cy) 
     151         uz = uz + ue_le*(.5*(xyz_v(ij+z_rup,3)+xyz_v(ij+z_rdown,3))-cz) 
     152         ulon_i = ux*elon_i(ij,1) + uy*elon_i(ij,2) + uz*elon_i(ij,3) 
     153         energy = ulon_i*(1./Ai(ij)) 
     154         ulon(ij,l) = ulon(ij,l) + frac*rhodz(ij,l)*energy 
     155         pk(ij,l) = energy 
     156      END DO 
     157   END DO 
     158   DO l = ll_begin, ll_end 
     159      !DIR$ SIMD 
     160      DO ij=ij_begin_ext, ij_end_ext 
     161         ulon_flux(ij+u_right,l) = ulon_flux(ij+u_right,l) + .5*massflux(ij+u_right,l)*(pk(ij,l)+pk(ij+t_right,l)) 
     162         ulon_flux(ij+u_lup,l) = ulon_flux(ij+u_lup,l) + .5*massflux(ij+u_lup,l)*(pk(ij,l)+pk(ij+t_lup,l)) 
     163         ulon_flux(ij+u_ldown,l) = ulon_flux(ij+u_ldown,l) + .5*massflux(ij+u_ldown,l)*(pk(ij,l)+pk(ij+t_ldown,l)) 
     164      END DO 
     165   END DO 
    99166   !---------------------------- energy_fluxes ---------------------------------- 
    100167   !-------------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.