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 11403 for NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isftbl.F90 – NEMO

Ignore:
Timestamp:
2019-08-05T19:14:52+02:00 (5 years ago)
Author:
mathiot
Message:

ENHANCE-02_ISF_nemo : add comments, renaming file (AGRIF), add isfload module (ticket #2142)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isftbl.F90

    r11395 r11403  
    11MODULE isftbl 
    2  
    3 USE in_out_manager 
    4 USE dom_oce 
    5 USE oce 
    6 USE isf 
    7 USE lbclnk 
    8  
    9 IMPLICIT NONE 
    10  
    11 PRIVATE 
    12  
    13 PUBLIC isf_tbl, isf_tbl_avg, isf_tbl_lvl, isftbl_ktop, isftbl_kbot 
     2   !!====================================================================== 
     3   !!                       ***  MODULE  isftbl  *** 
     4   !! isftbl module :  compute properties of top boundary layer 
     5   !!====================================================================== 
     6   !! History :  4.1  !  2019-09  (P. Mathiot) original code 
     7   !!---------------------------------------------------------------------- 
     8 
     9   !!---------------------------------------------------------------------- 
     10   !!   isftbl       : routine to compute :  
     11   !!                  - geometry of the ice shelf tbl (isf_tbl_lvl, isftbl_ktop, isftbl_kbot) 
     12   !!                    (top and bottom level, thickness and fraction of deepest level affected) 
     13   !!                  - tbl averaged properties (isf_tbl, isf_tbl_avg) 
     14   !!---------------------------------------------------------------------- 
     15 
     16   USE dom_oce ! vertical scale factor 
     17   USE lbclnk  ! lbc_lnk subroutine 
     18 
     19   IMPLICIT NONE 
     20 
     21   PRIVATE 
     22 
     23   PUBLIC isf_tbl, isf_tbl_avg, isf_tbl_lvl, isftbl_ktop, isftbl_kbot 
    1424 
    1525CONTAINS 
    1626 
    1727   SUBROUTINE isf_tbl( pvarin, pvarout, cd_ptin, ktop, kbot, phtbl, pfrac ) 
    18       !!---------------------------------------------------------------------- 
    19       !!                  ***  SUBROUTINE sbc_isf_tbl  *** 
     28      !!-------------------------------------------------------------------- 
     29      !!                  ***  SUBROUTINE isf_tbl  *** 
    2030      !! 
    2131      !! ** Purpose : compute mean T/S/U/V in the boundary layer at T- point 
    2232      !! 
    23       !!---------------------------------------------------------------------- 
    24       !!-------------------------- OUT ------------------------------------- 
    25       REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) :: pvarout ! 2d average of pvarin 
    26       !!-------------------------- IN  ------------------------------------- 
    27       CHARACTER(len=1),                       INTENT(in   ) :: cd_ptin ! point of variable in/out 
    28       INTEGER,  DIMENSION(jpi,jpj), OPTIONAL, INTENT(in   ) :: ktop , kbot 
    29       REAL(wp), DIMENSION(jpi,jpj), OPTIONAL, INTENT(in   ) :: phtbl, pfrac 
    30       REAL(wp), DIMENSION(jpi,jpj,jpk),       INTENT(in   ) :: pvarin  ! 3d variable to average over the tbl 
     33      !!-------------------------------------------------------------------- 
     34      !!-------------------------- OUT ------------------------------------- 
     35      REAL(wp), DIMENSION(jpi,jpj)          , INTENT(  out) :: pvarout ! 2d average of pvarin 
     36      !!-------------------------- IN  ------------------------------------- 
     37      CHARACTER(len=1)                      , INTENT(in   ) :: cd_ptin       ! point of variable in/out 
     38      REAL(wp), DIMENSION(jpi,jpj,jpk)      , INTENT(in   ) :: pvarin        ! 3d variable to average over the tbl 
     39      !!-------------------------- IN OPTIONAL ----------------------------- 
     40      INTEGER,  DIMENSION(jpi,jpj), OPTIONAL, INTENT(in   ) :: ktop , kbot   ! top and bottom level 
     41      REAL(wp), DIMENSION(jpi,jpj), OPTIONAL, INTENT(in   ) :: phtbl, pfrac  ! tbl thickness and fraction of bottom cell affected 
    3142      !!-------------------------------------------------------------------- 
    3243      INTEGER ::   ji, jj                   ! loop index 
     
    3445      REAL(wp), DIMENSION(jpi,jpj) :: zhtbl ! thickness of the tbl 
    3546      REAL(wp), DIMENSION(jpi,jpj) :: zfrac ! thickness of the tbl 
    36       !!---------------------------------------------------------------------- 
     47      !!-------------------------------------------------------------------- 
    3748      !  
    3849      SELECT CASE ( cd_ptin ) 
     
    8697 
    8798   SUBROUTINE isf_tbl_avg( ktop, kbot, phtbl, pfrac, pe3, pvarin, pvarout ) 
    88       !!--------------------------------------------------------------------- 
     99      !!-------------------------------------------------------------------- 
    89100      !!                  ***  ROUTINE isf_tbl_lvl  *** 
    90101      !! 
    91102      !! ** Purpose : compute mean property in the boundary layer 
    92103      !! 
    93       !!---------------------------------------------------------------------- 
    94       !!-------------------------- OUT ------------------------------------- 
    95       REAL(wp), DIMENSION(:,:)  , INTENT(  out) :: pvarout 
    96       !!-------------------------- IN  ------------------------------------- 
    97       INTEGER,  DIMENSION(jpi,jpj), INTENT(in) :: ktop, kbot   ! top and bottom level of the top boundary layer 
    98       REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: phtbl, pfrac !! fraction of bottom level of the tbl to be affected by the tbl 
    99       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pe3      ! vertical scale factor 
    100       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pvarin   ! tbl property to average between ktop, kbot over phtbl 
    101       !!--------------------------------------------------------------------- 
     104      !! ** Method  : Depth average is made between the top level ktop and the bottom level kbot 
     105      !!              over a thickness phtbl. The bottom level is partially counted (pfrac). 
     106      !! 
     107      !!-------------------------------------------------------------------- 
     108      !!-------------------------- OUT ------------------------------------- 
     109      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(  out) :: pvarout      ! tbl property averaged over phtbl between level ktop and kbot 
     110      !!-------------------------- IN  ------------------------------------- 
     111      INTEGER,  DIMENSION(jpi,jpj)    , INTENT(in   ) :: ktop, kbot   ! top and bottom level of the top boundary layer 
     112      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in   ) :: phtbl, pfrac ! fraction of bottom level to be affected by the tbl 
     113      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) :: pe3          ! vertical scale factor 
     114      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) :: pvarin       ! tbl property to average between ktop, kbot over phtbl 
     115      !!-------------------------------------------------------------------- 
    102116      INTEGER  :: ji,jj,jk                    ! loop indices 
    103117      INTEGER  :: ikt, ikb                    ! top and bottom levels 
    104       !!--------------------------------------------------------------------- 
     118      !!-------------------------------------------------------------------- 
    105119      ! 
    106120      ! compute tbl top.bottom level and thickness 
     
    123137 
    124138   SUBROUTINE isf_tbl_lvl( phw, pe3, ktop, kbot, phtbl, pfrac ) 
    125       !!--------------------------------------------------------------------- 
     139      !!-------------------------------------------------------------------- 
    126140      !!                  ***  ROUTINE isf_tbl_lvl  *** 
    127141      !! 
     
    129143      !!              - thickness of the top boundary layer 
    130144      !! 
    131       !!---------------------------------------------------------------------- 
    132       !!-------------------------- OUT ------------------------------------- 
    133       INTEGER,  DIMENSION(jpi,jpj), INTENT(inout) :: kbot         ! bottom level of the top boundary layer 
    134       REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: phtbl        ! top boundary layer thickness 
    135       REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pfrac        ! top boundary layer thickness 
    136       !!-------------------------- IN  ------------------------------------- 
    137       INTEGER,  DIMENSION(jpi,jpj)    , INTENT(in) :: ktop       ! top level of the top boundary layer 
    138       REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in) :: phw        ! water column thickness 
    139       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pe3         ! vertical scale factor 
     145      !!-------------------------------------------------------------------- 
     146      !!-------------------------- OUT ------------------------------------- 
     147      INTEGER,  DIMENSION(jpi,jpj)    , INTENT(  out) :: kbot   ! bottom level of the top boundary layer 
     148      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(  out) :: phtbl  ! top boundary layer thickness 
     149      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(  out) :: pfrac  ! top boundary layer thickness 
     150      !!-------------------------- IN  ------------------------------------- 
     151      INTEGER,  DIMENSION(jpi,jpj)    , INTENT(in   ) :: ktop   ! top level of the top boundary layer 
     152      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in   ) :: phw    ! water column thickness 
     153      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) :: pe3    ! vertical scale factor 
    140154      !!--------------------------------------------------------------------- 
    141155      INTEGER :: ji,jj,jk 
     
    178192   ! 
    179193   SUBROUTINE isftbl_kbot(ktop, phtbl, pe3, kbot) 
    180       !!-------------------------- OUT ------------------------------------- 
    181       INTEGER,  DIMENSION(jpi,jpj), INTENT(inout) :: kbot         ! bottom level of the top boundary layer 
    182       !!-------------------------- IN  ------------------------------------- 
    183       REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: phtbl           ! top boundary layer thickness 
    184       INTEGER,  DIMENSION(jpi,jpj), INTENT(in) :: ktop            ! top level of the top boundary layer 
    185       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pe3         ! vertical scale factor 
    186       !!--------------------------------------------------------------------- 
     194      !!-------------------------------------------------------------------- 
     195      !!                  ***  ROUTINE isf_tbl_lvl  *** 
     196      !! 
     197      !! ** Purpose : compute bottom level of the isf top boundary layer 
     198      !! 
     199      !!-------------------------------------------------------------------- 
     200      !!-------------------------- OUT ------------------------------------- 
     201      INTEGER,  DIMENSION(jpi,jpj)    , INTENT(  out) :: kbot   ! bottom level of the top boundary layer 
     202      !!-------------------------- IN  ------------------------------------- 
     203      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in   ) :: phtbl  ! top boundary layer thickness 
     204      INTEGER,  DIMENSION(jpi,jpj)    , INTENT(in   ) :: ktop   ! top level of the top boundary layer 
     205      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) :: pe3    ! vertical scale factor 
     206      !!-------------------------------------------------------------------- 
    187207      INTEGER :: ji, jj 
    188208      INTEGER :: ikt, ikb 
    189       !!--------------------------------------------------------------------- 
     209      !!-------------------------------------------------------------------- 
    190210      ! 
    191211      ! phtbl need to be bounded by water column thickness before 
    192212      ! test: if phtbl = water column thickness, should return mbathy 
    193213      ! test: if phtbl = 0 should return ktop 
     214      ! 
    194215      ! get ktbl 
    195216      DO jj = 1,jpj 
     
    208229      ! 
    209230   SUBROUTINE isftbl_ktop(pdep, ktop) 
    210       !!--------------------------------------------------------------------- 
     231      !!-------------------------------------------------------------------- 
    211232      !!                  ***  ROUTINE isf_tbl_lvl  *** 
    212233      !! 
    213234      !! ** Purpose : compute top level of the isf top boundary layer in case of an ice shelf parametrisation 
    214235      !! 
    215       !!---------------------------------------------------------------------- 
    216       !!-------------------------- OUT ------------------------------------- 
    217       INTEGER,  DIMENSION(jpi,jpj), INTENT(inout) :: ktop         ! top level affected by the ice shelf parametrisation 
    218       !!-------------------------- IN  ------------------------------------- 
    219       REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pdep            ! top depth of the parametrisation influence 
    220       !!--------------------------------------------------------------------- 
     236      !!-------------------------------------------------------------------- 
     237      !!-------------------------- OUT ------------------------------------- 
     238      INTEGER,  DIMENSION(jpi,jpj), INTENT(  out) :: ktop        ! top level affected by the ice shelf parametrisation 
     239      !!-------------------------- IN  ------------------------------------- 
     240      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pdep        ! top depth of the parametrisation influence 
     241      !!-------------------------------------------------------------------- 
    221242      INTEGER :: ji,jj 
    222243      INTEGER :: ikt 
    223       !!--------------------------------------------------------------------- 
     244      !!-------------------------------------------------------------------- 
     245      ! 
    224246      ! compute top level (need to be recomputed each time (z*, z~)  
    225247      ! be sure pdep is already correctly bounded 
    226248      ! test: this routine run on isfdraft should return mikt 
    227249      ! test: this routine run with pdep = 0 should return 1 
     250      ! 
    228251      DO ji = 1, jpi 
    229252         DO jj = 1, jpj 
     
    234257      END DO 
    235258      ! 
    236    END SUBROUTINE 
     259   END SUBROUTINE isftbl_ktop 
    237260 
    238261END MODULE isftbl 
Note: See TracChangeset for help on using the changeset viewer.