New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 14944 – NEMO

Changeset 14944


Ignore:
Timestamp:
2021-06-03T17:16:52+02:00 (3 years ago)
Author:
sparonuz
Message:

Added interface for function dyn_drg_init

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DYN/dynspg_ts.F90

    r14649 r14944  
    8686   REAL(wp) ::   r1_2  = 0.5_wp           ! 
    8787 
     88 
     89   INTERFACE dyn_drg_init 
     90      MODULE PROCEDURE dyn_drg_init_wp, dyn_drg_init_mixed 
     91   END INTERFACE 
     92 
    8893   !! * Substitutions 
    8994#  include "do_loop_substitute.h90" 
     
    13421347      
    13431348 
    1344    SUBROUTINE dyn_drg_init( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, pu_RHSi, pv_RHSi, pCdU_u, pCdU_v ) 
     1349   SUBROUTINE dyn_drg_init_wp( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, pu_RHSi, pv_RHSi, pCdU_u, pCdU_v ) 
    13451350      !!---------------------------------------------------------------------- 
    13461351      !!                  ***  ROUTINE dyn_drg_init  *** 
     
    14461451      ENDIF 
    14471452      ! 
    1448    END SUBROUTINE dyn_drg_init 
     1453   END SUBROUTINE dyn_drg_init_wp 
     1454 
     1455   SUBROUTINE dyn_drg_init_mixed( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, pu_RHSi, pv_RHSi, pCdU_u, pCdU_v ) 
     1456      !!---------------------------------------------------------------------- 
     1457      !!                  ***  ROUTINE dyn_drg_init  *** 
     1458      !!                     
     1459      !! ** Purpose : - add the baroclinic top/bottom drag contribution to  
     1460      !!              the baroclinic part of the barotropic RHS 
     1461      !!              - compute the barotropic drag coefficients 
     1462      !! 
     1463      !! ** Method  :   computation done over the INNER domain only  
     1464      !!---------------------------------------------------------------------- 
     1465      INTEGER                             , INTENT(in   ) ::  Kbb, Kmm           ! ocean time level indices 
     1466      REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(in   ) ::  puu, pvv           ! ocean velocities and RHS of momentum equation 
     1467      REAL(sp), DIMENSION(jpi,jpj,jpt)    , INTENT(in   ) ::  puu_b, pvv_b       ! barotropic velocities at main time levels 
     1468      REAL(sp), DIMENSION(jpi,jpj)        , INTENT(inout) ::  pu_RHSi, pv_RHSi   ! baroclinic part of the barotropic RHS 
     1469      REAL(sp), DIMENSION(jpi,jpj)        , INTENT(  out) ::  pCdU_u , pCdU_v    ! barotropic drag coefficients 
     1470      ! 
     1471      INTEGER  ::   ji, jj   ! dummy loop indices 
     1472      INTEGER  ::   ikbu, ikbv, iktu, iktv 
     1473      REAL(sp) ::   zztmp 
     1474      REAL(sp), DIMENSION(jpi,jpj) ::   zu_i, zv_i 
     1475      !!---------------------------------------------------------------------- 
     1476      ! 
     1477      !                    !==  Set the barotropic drag coef.  ==! 
     1478      ! 
     1479      IF( ln_isfcav.OR.ln_drgice_imp ) THEN          ! top+bottom friction (ocean cavities) 
     1480          
     1481         DO_2D( 0, 0, 0, 0 ) 
     1482            pCdU_u(ji,jj) = r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) + rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) 
     1483            pCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) + rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) 
     1484         END_2D 
     1485      ELSE                          ! bottom friction only 
     1486         DO_2D( 0, 0, 0, 0 ) 
     1487            pCdU_u(ji,jj) = r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) 
     1488            pCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) 
     1489         END_2D 
     1490      ENDIF 
     1491      ! 
     1492      !                    !==  BOTTOM stress contribution from baroclinic velocities  ==! 
     1493      ! 
     1494      IF( ln_bt_fw ) THEN                 ! FORWARD integration: use NOW bottom baroclinic velocities 
     1495          
     1496         DO_2D( 0, 0, 0, 0 ) 
     1497            ikbu = mbku(ji,jj)        
     1498            ikbv = mbkv(ji,jj)     
     1499            zu_i(ji,jj) = puu(ji,jj,ikbu,Kmm) - puu_b(ji,jj,Kmm) 
     1500            zv_i(ji,jj) = pvv(ji,jj,ikbv,Kmm) - pvv_b(ji,jj,Kmm) 
     1501         END_2D 
     1502      ELSE                                ! CENTRED integration: use BEFORE bottom baroclinic velocities 
     1503          
     1504         DO_2D( 0, 0, 0, 0 ) 
     1505            ikbu = mbku(ji,jj)        
     1506            ikbv = mbkv(ji,jj)     
     1507            zu_i(ji,jj) = puu(ji,jj,ikbu,Kbb) - puu_b(ji,jj,Kbb) 
     1508            zv_i(ji,jj) = pvv(ji,jj,ikbv,Kbb) - pvv_b(ji,jj,Kbb) 
     1509         END_2D 
     1510      ENDIF 
     1511      ! 
     1512      IF( ln_wd_il ) THEN      ! W/D : use the "clipped" bottom friction   !!gm   explain WHY, please ! 
     1513         zztmp = -1._wp / rDt_e 
     1514         DO_2D( 0, 0, 0, 0 ) 
     1515            pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + zu_i(ji,jj) *  wdrampu(ji,jj) * MAX(                                 &  
     1516                 &                              r1_hu(ji,jj,Kmm) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) , zztmp  ) 
     1517            pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + zv_i(ji,jj) *  wdrampv(ji,jj) * MAX(                                 &  
     1518                 &                              r1_hv(ji,jj,Kmm) * r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) , zztmp  ) 
     1519         END_2D 
     1520      ELSE                    ! use "unclipped" drag (even if explicit friction is used in 3D calculation) 
     1521          
     1522         DO_2D( 0, 0, 0, 0 ) 
     1523            pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + r1_hu(ji,jj,Kmm) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * zu_i(ji,jj) 
     1524            pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + r1_hv(ji,jj,Kmm) * r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * zv_i(ji,jj) 
     1525         END_2D 
     1526      END IF 
     1527      ! 
     1528      !                    !==  TOP stress contribution from baroclinic velocities  ==!   (no W/D case) 
     1529      ! 
     1530      IF( ln_isfcav.OR.ln_drgice_imp ) THEN 
     1531         ! 
     1532         IF( ln_bt_fw ) THEN                ! FORWARD integration: use NOW top baroclinic velocity 
     1533             
     1534            DO_2D( 0, 0, 0, 0 ) 
     1535               iktu = miku(ji,jj) 
     1536               iktv = mikv(ji,jj) 
     1537               zu_i(ji,jj) = puu(ji,jj,iktu,Kmm) - puu_b(ji,jj,Kmm) 
     1538               zv_i(ji,jj) = pvv(ji,jj,iktv,Kmm) - pvv_b(ji,jj,Kmm) 
     1539            END_2D 
     1540         ELSE                                ! CENTRED integration: use BEFORE top baroclinic velocity 
     1541             
     1542            DO_2D( 0, 0, 0, 0 ) 
     1543               iktu = miku(ji,jj) 
     1544               iktv = mikv(ji,jj) 
     1545               zu_i(ji,jj) = puu(ji,jj,iktu,Kbb) - puu_b(ji,jj,Kbb) 
     1546               zv_i(ji,jj) = pvv(ji,jj,iktv,Kbb) - pvv_b(ji,jj,Kbb) 
     1547            END_2D 
     1548         ENDIF 
     1549         ! 
     1550         !                    ! use "unclipped" top drag (even if explicit friction is used in 3D calculation) 
     1551          
     1552         DO_2D( 0, 0, 0, 0 ) 
     1553            pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + r1_hu(ji,jj,Kmm) * r1_2*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * zu_i(ji,jj) 
     1554            pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + r1_hv(ji,jj,Kmm) * r1_2*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * zv_i(ji,jj) 
     1555         END_2D 
     1556         ! 
     1557      ENDIF 
     1558      ! 
     1559   END SUBROUTINE dyn_drg_init_mixed 
    14491560 
    14501561   SUBROUTINE ts_bck_interp( jn, ll_init,       &   ! <== in 
Note: See TracChangeset for help on using the changeset viewer.