- Timestamp:
- 2019-08-05T19:14:52+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isftbl.F90
r11395 r11403 1 1 MODULE 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 14 24 15 25 CONTAINS 16 26 17 27 SUBROUTINE isf_tbl( pvarin, pvarout, cd_ptin, ktop, kbot, phtbl, pfrac ) 18 !!-------------------------------------------------------------------- --19 !! *** SUBROUTINE sbc_isf_tbl ***28 !!-------------------------------------------------------------------- 29 !! *** SUBROUTINE isf_tbl *** 20 30 !! 21 31 !! ** Purpose : compute mean T/S/U/V in the boundary layer at T- point 22 32 !! 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 31 42 !!-------------------------------------------------------------------- 32 43 INTEGER :: ji, jj ! loop index … … 34 45 REAL(wp), DIMENSION(jpi,jpj) :: zhtbl ! thickness of the tbl 35 46 REAL(wp), DIMENSION(jpi,jpj) :: zfrac ! thickness of the tbl 36 !!-------------------------------------------------------------------- --47 !!-------------------------------------------------------------------- 37 48 ! 38 49 SELECT CASE ( cd_ptin ) … … 86 97 87 98 SUBROUTINE isf_tbl_avg( ktop, kbot, phtbl, pfrac, pe3, pvarin, pvarout ) 88 !!-------------------------------------------------------------------- -99 !!-------------------------------------------------------------------- 89 100 !! *** ROUTINE isf_tbl_lvl *** 90 101 !! 91 102 !! ** Purpose : compute mean property in the boundary layer 92 103 !! 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 !!-------------------------------------------------------------------- 102 116 INTEGER :: ji,jj,jk ! loop indices 103 117 INTEGER :: ikt, ikb ! top and bottom levels 104 !!-------------------------------------------------------------------- -118 !!-------------------------------------------------------------------- 105 119 ! 106 120 ! compute tbl top.bottom level and thickness … … 123 137 124 138 SUBROUTINE isf_tbl_lvl( phw, pe3, ktop, kbot, phtbl, pfrac ) 125 !!-------------------------------------------------------------------- -139 !!-------------------------------------------------------------------- 126 140 !! *** ROUTINE isf_tbl_lvl *** 127 141 !! … … 129 143 !! - thickness of the top boundary layer 130 144 !! 131 !!-------------------------------------------------------------------- --132 !!-------------------------- OUT ------------------------------------- 133 INTEGER, DIMENSION(jpi,jpj) , INTENT(inout) :: kbot! bottom level of the top boundary layer134 REAL(wp), DIMENSION(jpi,jpj) , INTENT(inout) :: phtbl! top boundary layer thickness135 REAL(wp), DIMENSION(jpi,jpj) , INTENT(inout) :: pfrac! top boundary layer thickness136 !!-------------------------- IN ------------------------------------- 137 INTEGER, DIMENSION(jpi,jpj) , INTENT(in ) :: ktop! top level of the top boundary layer138 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: phw! water column thickness139 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pe3! vertical scale factor145 !!-------------------------------------------------------------------- 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 140 154 !!--------------------------------------------------------------------- 141 155 INTEGER :: ji,jj,jk … … 178 192 ! 179 193 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 !!-------------------------------------------------------------------- 187 207 INTEGER :: ji, jj 188 208 INTEGER :: ikt, ikb 189 !!-------------------------------------------------------------------- -209 !!-------------------------------------------------------------------- 190 210 ! 191 211 ! phtbl need to be bounded by water column thickness before 192 212 ! test: if phtbl = water column thickness, should return mbathy 193 213 ! test: if phtbl = 0 should return ktop 214 ! 194 215 ! get ktbl 195 216 DO jj = 1,jpj … … 208 229 ! 209 230 SUBROUTINE isftbl_ktop(pdep, ktop) 210 !!-------------------------------------------------------------------- -231 !!-------------------------------------------------------------------- 211 232 !! *** ROUTINE isf_tbl_lvl *** 212 233 !! 213 234 !! ** Purpose : compute top level of the isf top boundary layer in case of an ice shelf parametrisation 214 235 !! 215 !!-------------------------------------------------------------------- --216 !!-------------------------- OUT ------------------------------------- 217 INTEGER, DIMENSION(jpi,jpj), INTENT( inout) :: ktop! top level affected by the ice shelf parametrisation218 !!-------------------------- IN ------------------------------------- 219 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pdep! top depth of the parametrisation influence220 !!-------------------------------------------------------------------- -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 !!-------------------------------------------------------------------- 221 242 INTEGER :: ji,jj 222 243 INTEGER :: ikt 223 !!--------------------------------------------------------------------- 244 !!-------------------------------------------------------------------- 245 ! 224 246 ! compute top level (need to be recomputed each time (z*, z~) 225 247 ! be sure pdep is already correctly bounded 226 248 ! test: this routine run on isfdraft should return mikt 227 249 ! test: this routine run with pdep = 0 should return 1 250 ! 228 251 DO ji = 1, jpi 229 252 DO jj = 1, jpj … … 234 257 END DO 235 258 ! 236 END SUBROUTINE 259 END SUBROUTINE isftbl_ktop 237 260 238 261 END MODULE isftbl
Note: See TracChangeset
for help on using the changeset viewer.