Changeset 11308
- Timestamp:
- 2019-07-19T15:04:36+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/ENHANCE-02_ISF_domcfg
- Files:
-
- 1 added
- 6 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/ENHANCE-02_ISF_domcfg/namelist_cfg
r10727 r11308 1 1 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 !! NEMO/O PA Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_ref2 !! NEMO/OCE : NEMO/OPA Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_ref 3 3 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 4 ! 4 !! NEMO/OCE : 1 - Domain & run manager (namrun, namcfg, namdom, namzgr, namzgr_isf, namzgr_sco ) 5 !! 8 - diagnostics (namnc4) 6 !! 10 - miscellaneous (nammpp, namctl) 7 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 5 8 !----------------------------------------------------------------------- 6 9 &namrun ! parameters of the run 7 10 !----------------------------------------------------------------------- 8 nn_no = 0 ! job number (no more used...)9 cn_exp = "domaincfg" ! experience name10 nn_it000 = 1 ! first time step11 nn_itend = 75 ! last time step (std 5475)12 11 / 13 12 !----------------------------------------------------------------------- 14 13 &namcfg ! parameters of the configuration 15 14 !----------------------------------------------------------------------- 16 !17 ln_e3_dep = .true. ! =T : e3=dk[depth] in discret sens.18 ! ! ===>>> will become the only possibility in v4.019 ! ! =F : e3 analytical derivative of depth function20 ! ! only there for backward compatibility test with v3.621 ! !22 cp_cfg = "orca" ! name of the configuration23 jp_cfg = 2 ! resolution of the configuration24 jpidta = 182 ! 1st lateral dimension ( >= jpi )25 jpjdta = 149 ! 2nd " " ( >= jpj )26 jpkdta = 31 ! number of levels ( >= jpk )27 jpiglo = 182 ! 1st dimension of global domain --> i =jpidta28 jpjglo = 149 ! 2nd - - --> j =jpjdta29 jpizoom = 1 ! left bottom (i,j) indices of the zoom30 jpjzoom = 1 ! in data domain indices31 jperio = 4 ! lateral cond. type (between 0 and 6)32 15 / 33 !-----------------------------------------------------------------------34 &namzgr ! vertical coordinate35 !-----------------------------------------------------------------------36 ln_zps = .true. ! z-coordinate - partial steps37 ln_linssh = .true. ! linear free surface38 /39 &namzgr_sco40 /41 &namlbc42 /43 &namagrif44 /45 &nambdy46 /47 &nam_vvl48 /49 50 16 !----------------------------------------------------------------------- 51 17 &namdom ! space and time domain (bathymetry, mesh, timestep) 52 18 !----------------------------------------------------------------------- 53 jphgr_msh = 0 ! type of horizontal mesh54 ppglam0 = 999999.0 ! longitude of first raw and column T-point (jphgr_msh = 1)55 ppgphi0 = 999999.0 ! latitude of first raw and column T-point (jphgr_msh = 1)56 ppe1_deg = 999999.0 ! zonal grid-spacing (degrees)57 ppe2_deg = 999999.0 ! meridional grid-spacing (degrees)58 ppe1_m = 999999.0 ! zonal grid-spacing (degrees)59 ppe2_m = 999999.0 ! meridional grid-spacing (degrees)60 ppsur = -4762.96143546300 ! ORCA r4, r2 and r05 coefficients61 ppa0 = 255.58049070440 ! (default coefficients)62 ppa1 = 245.58132232490 !63 ppkth = 21.43336197938 !64 ppacr = 3.0 !65 ppdzmin = 999999. ! Minimum vertical spacing66 pphmax = 999999. ! Maximum depth67 ldbletanh = .FALSE. ! Use/do not use double tanf function for vertical coordinates68 ppa2 = 999999. ! Double tanh function parameters69 ppkth2 = 999999. !70 ppacr2 = 999999. !71 19 / 72 20 !----------------------------------------------------------------------- 73 &nam mpp ! Massively Parallel Processing ("key_mpp_mpi)21 &namzgr ! vertical coordinate (default: NO selection) 74 22 !----------------------------------------------------------------------- 75 23 / 76 24 !----------------------------------------------------------------------- 77 &nam ctl ! Control prints & Benchmark25 &namzgr_isf ! isf cavity geometry definition 78 26 !----------------------------------------------------------------------- 79 27 / 28 !----------------------------------------------------------------------- 29 &namzgr_sco ! s-coordinate or hybrid z-s-coordinate (default F) 30 !----------------------------------------------------------------------- 31 / 32 !----------------------------------------------------------------------- 33 &namlbc ! lateral momentum boundary condition (default: NO selection) 34 !----------------------------------------------------------------------- 35 / 36 !----------------------------------------------------------------------- 37 &namagrif ! AGRIF zoom ("key_agrif") 38 !----------------------------------------------------------------------- 39 / 40 !----------------------------------------------------------------------- 41 &nambdy ! unstructured open boundaries (default: OFF) 42 !----------------------------------------------------------------------- 43 / 44 !----------------------------------------------------------------------- 45 &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") 46 !----------------------------------------------------------------------- 47 / 48 !----------------------------------------------------------------------- 49 &nammpp ! Massively Parallel Processing ("key_mpp_mpi") 50 !----------------------------------------------------------------------- 51 / 52 !----------------------------------------------------------------------- 53 &namctl ! Control prints (default: OFF) 54 !----------------------------------------------------------------------- 55 / -
NEMO/branches/2019/ENHANCE-02_ISF_domcfg/namelist_ref
r11201 r11308 44 44 nn_msh = 0 ! create (=1) a mesh file or not (=0) 45 45 rn_hmin = -3. ! min depth of the ocean (>0) or min number of ocean level (<0) 46 rn_isfhmin = 1.00 ! treshold (m) to discriminate grounding ice to floating ice47 46 rn_e3zps_min= 20. ! partial step thickness is set larger than the minimum of 48 47 rn_e3zps_rat= 0.1 ! rn_e3zps_min and rn_e3zps_rat*e3t, with 0<rn_e3zps_rat<1 … … 87 86 cp_cfz = "no zoom" ! name of the zoom of configuration 88 87 jp_cfg = 0 ! resolution of the configuration 89 jpidta = 10 ! 1st lateral dimension ( >= jpi )90 jpjdta = 12 ! 2nd " " ( >= jpj )91 88 jpkdta = 31 ! number of levels ( >= jpk ) 92 89 jpiglo = 10 ! 1st dimension of global domain --> i =jpidta … … 100 97 ln_use_jattr = .false. ! use (T) the file attribute: open_ocean_jstart, if present 101 98 ! in netcdf input files, as the start j-row for reading 102 ln_domclo = . true.! computation of closed sea masks (see namclo)99 ln_domclo = .false. ! computation of closed sea masks (see namclo) 103 100 / 104 101 !----------------------------------------------------------------------- … … 108 105 ln_zps = .false. ! z-coordinate - partial steps 109 106 ln_sco = .false. ! s- or hybrid z-s-coordinate 110 ln_isfcav = .false. ! ice shelf cavity 107 ln_isfcav = .false. ! ice shelf cavity (T: see namzgr_isf) 111 108 ln_linssh = .false. ! linear free surface 112 109 / 113 110 !----------------------------------------------------------------------- 114 &namzgr_sco ! s-coordinate or hybrid z-s-coordinate (default F) 111 &namzgr_isf ! isf cavity geometry definition (default: OFF) 112 !----------------------------------------------------------------------- 113 rn_isfdep_min = 10. ! minimum isf draft tickness (if lower, isf draft set to this value) 114 rn_glhw_min = 1.e-3 ! minimum water column thickness to define the grounding line 115 rn_isfhw_min = 10 ! minimum water column thickness in the cavity once the grounding line defined. 116 ln_isfchannel = .false. ! remove channel (based on 2d mask build from isfdraft-bathy) 117 ln_isfconnect = .false. ! force connection under the ice shelf (based on 2d mask build from isfdraft-bathy) 118 nn_kisfmax = 999 ! limiter in level on the previous condition. (if change larger than this number, get back to value before we enforce the connection) 119 rn_zisfmax = 7000. ! limiter in m on the previous condition. (if change larger than this number, get back to value before we enforce the connection) 120 ln_isfcheminey = .false. ! close cheminey 121 ln_isfsubgl = .false. ! remove subglacial lake created by the remapping process 122 rn_isfsubgllon = 0.0 ! longitude of the seed to determine the open ocean 123 rn_isfsubgllat = 0.0 ! latitude of the seed to determine the open ocean 124 / 125 !----------------------------------------------------------------------- 126 &namzgr_sco ! s-coordinate or hybrid z-s-coordinate (default: OFF) 115 127 !----------------------------------------------------------------------- 116 128 ln_s_sh94 = .false. ! Song & Haidvogel 1994 hybrid S-sigma (T)| … … 137 149 / 138 150 !----------------------------------------------------------------------- 139 &namclo ! (closed sea : need ln_domclo = .true. in namcfg) 151 &namclo ! (closed sea : need ln_domclo = .true. in namcfg) (default: OFF) 140 152 !----------------------------------------------------------------------- 141 153 rn_lon_opnsea = -2.0 ! longitude seed of open ocean … … 231 243 &namctl ! Control prints (default: OFF) 232 244 !----------------------------------------------------------------------- 233 ln_ctl = . FALSE. ! Toggle all report printing on/off (T/F); Ignored if sn_cfctl%l_config is T245 ln_ctl = .TRUE. ! Toggle all report printing on/off (T/F); Ignored if sn_cfctl%l_config is T 234 246 sn_cfctl%l_config = .TRUE. ! IF .true. then control which reports are written with the following 235 247 sn_cfctl%l_runstat = .FALSE. ! switches and which areas produce reports with the proc integer settings. -
NEMO/branches/2019/ENHANCE-02_ISF_domcfg/src/dom_oce.F90
r11201 r11308 36 36 REAL(wp), PUBLIC :: rn_e3zps_rat !: minimum thickness ration for partial steps 37 37 INTEGER , PUBLIC :: nn_msh !: = 1 create a mesh-mask file 38 39 INTEGER , PUBLIC :: ntopo !: = 0/1 ,compute/read the bathymetry file 40 INTEGER, PUBLIC :: nperio !: type of lateral boundary condition 41 REAL(wp), PUBLIC :: e3zps_min !: miminum thickness for partial steps (meters) 42 REAL(wp), PUBLIC :: e3zps_rat !: minimum thickness ration for partial steps 38 43 39 44 INTEGER, PUBLIC :: nn_interp -
NEMO/branches/2019/ENHANCE-02_ISF_domcfg/src/domain.F90
r11201 r11308 105 105 & ln_cfmeta, ln_iscpl 106 106 NAMELIST/namdom/ nn_bathy, cn_topo, cn_bath, cn_lon, cn_lat, nn_interp, & 107 & rn_bathy , rn_e3zps_min, rn_e3zps_rat, nn_msh, rn_hmin, rn_isfhmin,&108 & rn_atfp , rn_rdt , ln_crs , jphgr_msh , &107 & rn_bathy , rn_e3zps_min, rn_e3zps_rat, nn_msh, rn_hmin, & 108 & rn_atfp , rn_rdt , ln_crs , jphgr_msh , & 109 109 & ppglam0, ppgphi0, ppe1_deg, ppe2_deg, ppe1_m, ppe2_m, & 110 110 & ppsur, ppa0, ppa1, ppkth, ppacr, ppdzmin, pphmax, ldbletanh, & … … 204 204 WRITE(numout,*) ' min depth of the ocean (>0) or rn_hmin = ', rn_hmin 205 205 WRITE(numout,*) ' min number of ocean level (<0) ' 206 WRITE(numout,*) ' treshold to open the isf cavity rn_isfhmin = ', rn_isfhmin, ' (m)'207 206 WRITE(numout,*) ' minimum thickness of partial rn_e3zps_min = ', rn_e3zps_min, ' (m)' 208 207 WRITE(numout,*) ' step level rn_e3zps_rat = ', rn_e3zps_rat … … 415 414 END DO 416 415 END DO 417 CALL iom_rstput( 0, 0, inum, 'bathy_metry' , z2d , ktype = jp_r4 ) 416 CALL iom_rstput( 0, 0, inum, 'bathy_metry_e3' , z2d , ktype = jp_r4 ) 417 DO jj = 1,jpj 418 DO ji = 1,jpi 419 z2d (ji,jj) = SUM ( e3t_0(ji,jj, 1:mikt(ji,jj)-1 ) ) * ssmask(ji,jj) 420 END DO 421 END DO 422 CALL iom_rstput( 0, 0, inum, 'isf_draft_e3' , z2d , ktype = jp_r4 ) 423 CALL iom_rstput( 0, 0, inum, 'isf_draft' , risfdep , ktype = jp_r4 ) 424 CALL iom_rstput( 0, 0, inum, 'bathy_metry' , bathy , ktype = jp_r4 ) 425 CALL iom_rstput( 0, 0, inum, 'hw',bathy-risfdep, ktype = jp_r4 ) 426 CALL iom_rstput( 0, 0, inum, 'mhw',mbkt*ssmask-mikt*ssmask, ktype = jp_i4 ) 418 427 ! 419 428 ! !== closed sea ==! -
NEMO/branches/2019/ENHANCE-02_ISF_domcfg/src/dommsk.F90
r11201 r11308 24 24 !!---------------------------------------------------------------------- 25 25 USE dom_oce ! ocean space and time domain 26 USE domisf ! domain: ice shelf 26 27 USE domwri ! domain: write the meshmask file 27 28 USE bdy_oce ! open boundary … … 142 143 END DO 143 144 END DO 144 END DO 145 145 END DO 146 147 IF ( ln_isfsubgl ) CALL zgr_isf_subgl 148 146 149 !SF add here lbc_lnk: bug not still understood : cause now domain configuration is read ! 147 150 !!gm I don't understand why... -
NEMO/branches/2019/ENHANCE-02_ISF_domcfg/src/domzgr.F90
r11201 r11308 17 17 !! 3.4 ! 2012-08 (J. Siddorn) added Siddorn and Furner stretching function 18 18 !! 3.4 ! 2012-12 (R. Bourdalle-Badie and G. Reffray) modify C1D case 19 !! 3.6 ! 2014-11 (P. Mathiot and C. Harris) add ice shelf capability e19 !! 3.6 ! 2014-11 (P. Mathiot and C. Harris) add ice shelf capability 20 20 !! 3.? ! 2015-11 (H. Liu) Modifications for Wetting/Drying 21 21 !!---------------------------------------------------------------------- … … 43 43 USE lib_fortran 44 44 USE dombat 45 USE domisf 45 46 46 47 IMPLICIT NONE … … 48 49 49 50 PUBLIC dom_zgr ! called by dom_init.F90 50 51 ! 51 52 ! !!* Namelist namzgr_sco * 52 53 LOGICAL :: ln_s_sh94 ! use hybrid s-sig Song and Haidvogel 1994 stretching function fssig1 (ln_sco=T) … … 57 58 REAL(wp) :: rn_rmax ! maximum cut-off r-value allowed (0<rn_rmax<1) 58 59 REAL(wp) :: rn_hc ! Critical depth for transition from sigma to stretched coordinates 59 INTEGER , PUBLIC :: ntopo !: = 0/1 ,compute/read the bathymetry file60 REAL(wp), PUBLIC :: e3zps_min !: miminum thickness for partial steps (meters)61 REAL(wp), PUBLIC :: e3zps_rat !: minimum thickness ration for partial steps62 INTEGER, PUBLIC :: nperio !: type of lateral boundary condition63 60 64 61 ! Song and Haidvogel 1994 stretching parameters … … 148 145 IF( ioptio /= 1 ) CALL ctl_stop( ' none or several vertical coordinate options used' ) 149 146 ! 147 IF ( ln_isfcav ) CALL zgr_isf_nam 150 148 ioptio = 0 151 149 IF ( ln_zco .AND. ln_isfcav ) ioptio = ioptio + 1 … … 160 158 IF( ln_zps ) CALL zgr_zps ! Partial step z-coordinate 161 159 IF( ln_sco ) CALL zgr_sco ! s-coordinate or hybrid z-s coordinate 160 CALL zgr_bat_ctl ! check bathymetry (mbathy) and suppress isolated ocean points 162 161 ! 163 162 ! final adjustment of mbathy & check 164 163 ! ----------------------------------- 165 CALL zgr_bat_ctl ! check bathymetry (mbathy) and suppress isolated ocean points166 164 CALL zgr_bot_level ! deepest ocean level for t-, u- and v-points 167 165 CALL zgr_top_level ! shallowest ocean level for T-, U-, V- points … … 313 311 IF ( ln_isfcav .OR. ln_e3_dep ) THEN ! e3. = dk[gdep] 314 312 ! 315 !==>>> need to be like this to compute the pressure gradient with ISF.316 ! If not, level beneath the ISF are not aligned (sum(e3t) /= depth)317 ! define e3t_0 and e3w_0 as the differences between gdept and gdepw respectively318 !319 313 DO jk = 1, jpkm1 320 314 e3t_1d(jk) = gdepw_1d(jk+1)-gdepw_1d(jk) … … 578 572 CALL iom_get ( inum, jpdom_data, 'isf_draft', risfdep ) 579 573 CALL iom_close( inum ) 580 WHERE( bathy(:,:) <= 0._wp ) risfdep(:,:) = 0._wp581 582 ! set grounded point to 0583 ! (a treshold could be set here if needed, or set it offline based on the grounded fraction)584 WHERE ( bathy(:,:) <= risfdep(:,:) + rn_isfhmin )585 misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp586 mbathy (:,:) = 0 ; bathy (:,:) = 0._wp587 END WHERE588 574 END IF 589 575 ! … … 624 610 ELSE ; ik = MINLOC( gdepw_1d, mask = gdepw_1d > rn_hmin, dim = 1 ) ! from a depth 625 611 ENDIF 626 zhmin = gdepw_1d(ik+1) 612 zhmin = gdepw_1d(ik+1) ! minimum depth = ik+1 w-levels 627 613 WHERE( bathy(:,:) <= 0._wp ) ; bathy(:,:) = 0._wp ! min=0 over the lands 628 614 ELSE WHERE ; bathy(:,:) = MAX( zhmin , bathy(:,:) ) ! min=zhmin over the oceans … … 931 917 IF(lwp) WRITE(numout,*) ' mbathy is recomputed : bathy_level file is NOT used' 932 918 919 ! compute position of the ice shelf grounding line 920 ! set bathy and isfdraft to 0 where grounded 921 IF ( ln_isfcav ) CALL zgr_isf_zspace 922 933 923 ! bathymetry in level (from bathy_meter) 934 924 ! =================== … … 948 938 END DO 949 939 940 ! Check compatibility between bathy and iceshelf draft 941 ! insure at least 2 wet level on the vertical under an ice shelf 942 ! compute misfdep and adjust isf draft if needed 943 IF ( ln_isfcav ) CALL zgr_isf_kspace 944 950 945 ! Scale factors and depth at T- and W-points 951 946 DO jk = 1, jpk ! intitialization to the reference z-coordinate … … 956 951 END DO 957 952 958 ! Bathy, iceshelf draft, scale factor and depth at T- and W- points in case of isf959 IF ( ln_isfcav ) CALL zgr_isf960 961 953 ! Scale factors and depth at T- and W-points 962 IF ( .NOT. ln_isfcav ) THEN963 DO jj = 1, jpj964 DO ji = 1, jpi965 ik = mbathy(ji,jj)966 IF( ik > 0 ) THEN ! ocean point only967 ! max ocean level case968 IF( ik == jpkm1 ) THEN969 zdepwp = bathy(ji,jj)970 ze3tp = bathy(ji,jj) - gdepw_1d(ik)971 ze3wp = 0.5_wp * e3w_1d(ik) * ( 1._wp + ( ze3tp/e3t_1d(ik) ) )972 e3t_0(ji,jj,ik ) = ze3tp973 e3t_0(ji,jj,ik+1) = ze3tp974 e3w_0(ji,jj,ik ) = ze3wp975 e3w_0(ji,jj,ik+1) = ze3tp976 gdepw_0(ji,jj,ik+1) = zdepwp977 gdept_0(ji,jj,ik ) = gdept_1d(ik-1) + ze3wp978 gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + ze3tp979 !980 ELSE ! standard case981 IF( bathy(ji,jj) <= gdepw_1d(ik+1) ) THEN ; gdepw_0(ji,jj,ik+1) = bathy(ji,jj)982 ELSE ; gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1)983 ENDIF984 !gm Bug? check the gdepw_1d985 ! ... on ik986 gdept_0(ji,jj,ik) = gdepw_1d(ik) + ( gdepw_0(ji,jj,ik+1) - gdepw_1d(ik) ) &987 & * ((gdept_1d( ik ) - gdepw_1d(ik) ) &988 & / ( gdepw_1d( ik+1) - gdepw_1d(ik) ))989 e3t_0 (ji,jj,ik) = e3t_1d (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) ) &990 & / ( gdepw_1d( ik+1) - gdepw_1d(ik) )991 e3w_0(ji,jj,ik) = 0.5_wp * ( gdepw_0(ji,jj,ik+1) + gdepw_1d(ik+1) - 2._wp * gdepw_1d(ik) ) &992 & * ( e3w_1d(ik) / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) )993 ! ... on ik+1994 e3w_0 (ji,jj,ik+1) = e3t_0 (ji,jj,ik)995 e3t_0 (ji,jj,ik+1) = e3t_0 (ji,jj,ik)996 gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik)997 ENDIF998 ENDIF999 END DO1000 END DO1001 !1002 it = 01003 DO jj = 1, jpj1004 DO ji = 1, jpi1005 ik = mbathy(ji,jj)1006 IF( ik > 0 ) THEN ! ocean point only1007 e3tp (ji,jj) = e3t_0(ji,jj,ik)1008 e3wp (ji,jj) = e3w_0(ji,jj,ik)1009 ! test1010 zdiff= gdepw_0(ji,jj,ik+1) - gdept_0(ji,jj,ik )1011 IF( zdiff <= 0._wp .AND. lwp ) THEN1012 it = it + 11013 WRITE(numout,*) ' it = ', it, ' ik = ', ik, ' (i,j) = ', ji, jj1014 WRITE(numout,*) ' bathy = ', bathy(ji,jj)1015 WRITE(numout,*) ' gdept_0 = ', gdept_0(ji,jj,ik), ' gdepw_0 = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff1016 WRITE(numout,*) ' e3tp = ', e3t_0 (ji,jj,ik), ' e3wp = ', e3w_0 (ji,jj,ik )1017 ENDIF1018 ENDIF1019 END DO1020 END DO1021 END IF1022 !1023 ! Scale factors and depth at U-, V-, UW and VW-points1024 DO jk = 1, jpk ! initialisation to z-scale factors1025 e3u_0 (:,:,jk) = e3t_1d(jk)1026 e3v_0 (:,:,jk) = e3t_1d(jk)1027 e3uw_0(:,:,jk) = e3w_1d(jk)1028 e3vw_0(:,:,jk) = e3w_1d(jk)1029 END DO1030 1031 DO jk = 1,jpk ! Computed as the minimum of neighbooring scale factors1032 DO jj = 1, jpjm11033 DO ji = 1, jpim1 ! vector opt.1034 e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) )1035 e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) )1036 e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) )1037 e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) )1038 END DO1039 END DO1040 END DO1041 IF ( ln_isfcav ) THEN1042 ! (ISF) define e3uw (adapted for 2 cells in the water column)1043 DO jj = 2, jpjm11044 DO ji = 2, jpim1 ! vector opt.1045 ikb = MAX(mbathy (ji,jj),mbathy (ji+1,jj))1046 ikt = MAX(misfdep(ji,jj),misfdep(ji+1,jj))1047 IF (ikb == ikt+1) e3uw_0(ji,jj,ikb) = MIN( gdept_0(ji,jj,ikb ), gdept_0(ji+1,jj ,ikb ) ) &1048 & - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji+1,jj ,ikb-1) )1049 ikb = MAX(mbathy (ji,jj),mbathy (ji,jj+1))1050 ikt = MAX(misfdep(ji,jj),misfdep(ji,jj+1))1051 IF (ikb == ikt+1) e3vw_0(ji,jj,ikb) = MIN( gdept_0(ji,jj,ikb ), gdept_0(ji ,jj+1,ikb ) ) &1052 & - MAX( gdept_0(ji,jj,ikb-1), gdept_0(ji ,jj+1,ikb-1) )1053 END DO1054 END DO1055 END IF1056 1057 CALL lbc_lnk('domzgr', e3u_0 , 'U', 1._wp ) ; CALL lbc_lnk('domzgr', e3uw_0, 'U', 1._wp ) ! lateral boundary conditions1058 CALL lbc_lnk('domzgr', e3v_0 , 'V', 1._wp ) ; CALL lbc_lnk('domzgr', e3vw_0, 'V', 1._wp )1059 !1060 1061 DO jk = 1, jpk ! set to z-scale factor if zero (i.e. along closed boundaries)1062 WHERE( e3u_0 (:,:,jk) == 0._wp ) e3u_0 (:,:,jk) = e3t_1d(jk)1063 WHERE( e3v_0 (:,:,jk) == 0._wp ) e3v_0 (:,:,jk) = e3t_1d(jk)1064 WHERE( e3uw_0(:,:,jk) == 0._wp ) e3uw_0(:,:,jk) = e3w_1d(jk)1065 WHERE( e3vw_0(:,:,jk) == 0._wp ) e3vw_0(:,:,jk) = e3w_1d(jk)1066 END DO1067 1068 ! Scale factor at F-point1069 DO jk = 1, jpk ! initialisation to z-scale factors1070 e3f_0(:,:,jk) = e3t_1d(jk)1071 END DO1072 DO jk = 1, jpk ! Computed as the minimum of neighbooring V-scale factors1073 DO jj = 1, jpjm11074 DO ji = 1, jpim1 ! vector opt.1075 e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) )1076 END DO1077 END DO1078 END DO1079 CALL lbc_lnk('domzgr', e3f_0, 'F', 1._wp ) ! Lateral boundary conditions1080 !1081 DO jk = 1, jpk ! set to z-scale factor if zero (i.e. along closed boundaries)1082 WHERE( e3f_0(:,:,jk) == 0._wp ) e3f_0(:,:,jk) = e3t_1d(jk)1083 END DO1084 !!gm bug ? : must be a do loop with mj0,mj11085 !1086 e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:) ! we duplicate factor scales for jj = 1 and jj = 21087 e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:)1088 e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:)1089 e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:)1090 e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:)1091 1092 ! Control of the sign1093 IF( MINVAL( e3t_0 (:,:,:) ) <= 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r e3t_0 <= 0' )1094 IF( MINVAL( e3w_0 (:,:,:) ) <= 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r e3w_0 <= 0' )1095 IF( MINVAL( gdept_0(:,:,:) ) < 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r gdept_0 < 0' )1096 IF( MINVAL( gdepw_0(:,:,:) ) < 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r gdepw_0 < 0' )1097 1098 ! Compute gde3w_0 (vertical sum of e3w)1099 IF ( ln_isfcav ) THEN ! if cavity1100 WHERE( misfdep == 0 ) misfdep = 11101 DO jj = 1,jpj1102 DO ji = 1,jpi1103 gde3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1)1104 DO jk = 2, misfdep(ji,jj)1105 gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)1106 END DO1107 IF( misfdep(ji,jj) >= 2 ) gde3w_0(ji,jj,misfdep(ji,jj)) = risfdep(ji,jj) + 0.5_wp * e3w_0(ji,jj,misfdep(ji,jj))1108 DO jk = misfdep(ji,jj) + 1, jpk1109 gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk)1110 END DO1111 END DO1112 END DO1113 ELSE ! no cavity1114 gde3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1)1115 DO jk = 2, jpk1116 gde3w_0(:,:,jk) = gde3w_0(:,:,jk-1) + e3w_0(:,:,jk)1117 END DO1118 END IF1119 !1120 DEALLOCATE( zprt )1121 !1122 END SUBROUTINE zgr_zps1123 1124 1125 SUBROUTINE zgr_isf1126 !!----------------------------------------------------------------------1127 !! *** ROUTINE zgr_isf ***1128 !!1129 !! ** Purpose : check the bathymetry in levels1130 !!1131 !! ** Method : THe water column have to contained at least 2 cells1132 !! Bathymetry and isfdraft are modified (dig/close) to respect1133 !! this criterion.1134 !!1135 !! ** Action : - test compatibility between isfdraft and bathy1136 !! - bathy and isfdraft are modified1137 !!----------------------------------------------------------------------1138 INTEGER :: ji, jj, jl, jk ! dummy loop indices1139 INTEGER :: ik, it ! temporary integers1140 INTEGER :: icompt, ibtest ! (ISF)1141 INTEGER :: ibtestim1, ibtestip1 ! (ISF)1142 INTEGER :: ibtestjm1, ibtestjp1 ! (ISF)1143 REAL(wp) :: zdepth ! Ajusted ocean depth to avoid too small e3t1144 REAL(wp) :: zmax ! Maximum and minimum depth1145 REAL(wp) :: zbathydiff ! isf temporary scalar1146 REAL(wp) :: zrisfdepdiff ! isf temporary scalar1147 REAL(wp) :: ze3tp , ze3wp ! Last ocean level thickness at T- and W-points1148 REAL(wp) :: zdepwp ! Ajusted ocean depth to avoid too small e3t1149 REAL(wp) :: zdiff ! temporary scalar1150 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zrisfdep, zbathy, zmask ! 2D workspace (ISH)1151 INTEGER , ALLOCATABLE, DIMENSION(:,:) :: zmbathy, zmisfdep ! 2D workspace (ISH)1152 !!---------------------------------------------------------------------1153 !1154 ALLOCATE( zbathy(jpi,jpj), zmask(jpi,jpj), zrisfdep(jpi,jpj) )1155 ALLOCATE( zmisfdep(jpi,jpj), zmbathy(jpi,jpj) )1156 !1157 ! (ISF) compute misfdep1158 WHERE( risfdep(:,:) == 0._wp .AND. bathy(:,:) /= 0 ) ; misfdep(:,:) = 1 ! open water : set misfdep to 11159 ELSEWHERE ; misfdep(:,:) = 2 ! iceshelf : initialize misfdep to second level1160 END WHERE1161 1162 ! Compute misfdep for ocean points (i.e. first wet level)1163 ! find the first ocean level such that the first level thickness1164 ! is larger than the bot_level of e3zps_min and e3zps_rat * e3t_0 (where1165 ! e3t_0 is the reference level thickness1166 DO jk = 2, jpkm11167 zdepth = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )1168 WHERE( 0._wp < risfdep(:,:) .AND. risfdep(:,:) >= zdepth ) misfdep(:,:) = jk+11169 END DO1170 WHERE ( 0._wp < risfdep(:,:) .AND. risfdep(:,:) <= e3t_1d(1) )1171 risfdep(:,:) = 0. ; misfdep(:,:) = 11172 END WHERE1173 1174 ! remove very shallow ice shelf (less than ~ 10m if 75L)1175 WHERE (risfdep(:,:) <= 10._wp .AND. misfdep(:,:) > 1)1176 misfdep = 0; risfdep = 0.0_wp;1177 mbathy = 0; bathy = 0.0_wp;1178 END WHERE1179 WHERE (bathy(:,:) <= 30.0_wp .AND. gphit < -60._wp)1180 misfdep = 0; risfdep = 0.0_wp;1181 mbathy = 0; bathy = 0.0_wp;1182 END WHERE1183 1184 ! basic check for the compatibility of bathy and risfdep. I think it should be offline because it is not perfect and cannot solved all the situation1185 icompt = 01186 ! run the bathy check 10 times to be sure all the modif in the bathy or iceshelf draft are compatible together1187 DO jl = 1, 101188 ! check at each iteration if isf is grounded or not (1cm treshold have to be update after first coupling experiments)1189 WHERE (bathy(:,:) <= risfdep(:,:) + rn_isfhmin)1190 misfdep(:,:) = 0 ; risfdep(:,:) = 0._wp1191 mbathy (:,:) = 0 ; bathy (:,:) = 0._wp1192 END WHERE1193 WHERE (mbathy(:,:) <= 0)1194 misfdep(:,:) = 0; risfdep(:,:) = 0._wp1195 mbathy (:,:) = 0; bathy (:,:) = 0._wp1196 END WHERE1197 IF( lk_mpp ) THEN1198 zbathy(:,:) = FLOAT( misfdep(:,:) )1199 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1200 misfdep(:,:) = INT( zbathy(:,:) )1201 1202 CALL lbc_lnk( 'domzgr',risfdep,'T', 1. )1203 CALL lbc_lnk( 'domzgr',bathy, 'T', 1. )1204 1205 zbathy(:,:) = FLOAT( mbathy(:,:) )1206 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1207 mbathy(:,:) = INT( zbathy(:,:) )1208 ENDIF1209 IF( nperio == 1 .OR. nperio == 4 .OR. nperio == 6 ) THEN1210 misfdep( 1 ,:) = misfdep(jpim1,:) ! local domain is cyclic east-west1211 misfdep(jpi,:) = misfdep( 2 ,:)1212 mbathy( 1 ,:) = mbathy(jpim1,:) ! local domain is cyclic east-west1213 mbathy(jpi,:) = mbathy( 2 ,:)1214 ENDIF1215 1216 ! split last cell if possible (only where water column is 2 cell or less)1217 ! if coupled to ice sheet, we do not modify the bathymetry (can be discuss).1218 IF ( .NOT. ln_iscpl) THEN1219 DO jk = jpkm1, 1, -11220 zmax = gdepw_1d(jk) + MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )1221 WHERE( gdepw_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= zmax .AND. misfdep + 1 >= mbathy)1222 mbathy(:,:) = jk1223 bathy(:,:) = zmax1224 END WHERE1225 END DO1226 END IF1227 1228 ! split top cell if possible (only where water column is 2 cell or less)1229 DO jk = 2, jpkm11230 zmax = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat )1231 WHERE( gdepw_1d(jk+1) > risfdep(:,:) .AND. risfdep(:,:) >= zmax .AND. misfdep + 1 >= mbathy)1232 misfdep(:,:) = jk1233 risfdep(:,:) = zmax1234 END WHERE1235 END DO1236 1237 1238 ! Case where bathy and risfdep compatible but not the level variable mbathy/misfdep because of partial cell condition1239 DO jj = 1, jpj1240 DO ji = 1, jpi1241 ! find the minimum change option:1242 ! test bathy1243 IF (risfdep(ji,jj) > 1) THEN1244 IF ( .NOT. ln_iscpl ) THEN1245 zbathydiff =ABS(bathy(ji,jj) - (gdepw_1d(mbathy (ji,jj)+1) &1246 & + MIN( e3zps_min, e3t_1d(mbathy (ji,jj)+1)*e3zps_rat )))1247 zrisfdepdiff=ABS(risfdep(ji,jj) - (gdepw_1d(misfdep(ji,jj) ) &1248 & - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat )))1249 IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) < misfdep(ji,jj)) THEN1250 IF (zbathydiff <= zrisfdepdiff) THEN1251 bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj)+1)*e3zps_rat )1252 mbathy(ji,jj)= mbathy(ji,jj) + 11253 ELSE1254 risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat )1255 misfdep(ji,jj) = misfdep(ji,jj) - 11256 END IF1257 ENDIF1258 ELSE1259 IF (bathy(ji,jj) > risfdep(ji,jj) .AND. mbathy(ji,jj) < misfdep(ji,jj)) THEN1260 risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj)-1)*e3zps_rat )1261 misfdep(ji,jj) = misfdep(ji,jj) - 11262 END IF1263 END IF1264 END IF1265 END DO1266 END DO1267 1268 ! At least 2 levels for water thickness at T, U, and V point.1269 DO jj = 1, jpj1270 DO ji = 1, jpi1271 ! find the minimum change option:1272 ! test bathy1273 IF( misfdep(ji,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN1274 IF ( .NOT. ln_iscpl ) THEN1275 zbathydiff =ABS(bathy(ji,jj) - ( gdepw_1d(mbathy (ji,jj)+1) &1276 & + MIN( e3zps_min,e3t_1d(mbathy (ji,jj)+1)*e3zps_rat )))1277 zrisfdepdiff=ABS(risfdep(ji,jj) - ( gdepw_1d(misfdep(ji,jj) ) &1278 & - MIN( e3zps_min,e3t_1d(misfdep(ji,jj)-1)*e3zps_rat )))1279 IF (zbathydiff <= zrisfdepdiff) THEN1280 mbathy(ji,jj) = mbathy(ji,jj) + 11281 bathy(ji,jj) = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat )1282 ELSE1283 misfdep(ji,jj)= misfdep(ji,jj) - 11284 risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat )1285 END IF1286 ELSE1287 misfdep(ji,jj)= misfdep(ji,jj) - 11288 risfdep(ji,jj)= gdepw_1d(misfdep(ji,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj))*e3zps_rat )1289 END IF1290 ENDIF1291 END DO1292 END DO1293 1294 ! point V mbathy(ji,jj) == misfdep(ji,jj+1)1295 DO jj = 1, jpjm11296 DO ji = 1, jpim11297 IF( misfdep(ji,jj+1) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN1298 IF ( .NOT. ln_iscpl ) THEN1299 zbathydiff =ABS(bathy(ji,jj ) - ( gdepw_1d(mbathy (ji,jj)+1) &1300 & + MIN( e3zps_min, e3t_1d(mbathy (ji,jj )+1)*e3zps_rat )))1301 zrisfdepdiff=ABS(risfdep(ji,jj+1) - ( gdepw_1d(misfdep(ji,jj+1)) &1302 & - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1)-1)*e3zps_rat )))1303 IF (zbathydiff <= zrisfdepdiff) THEN1304 mbathy(ji,jj) = mbathy(ji,jj) + 11305 bathy(ji,jj) = gdepw_1d(mbathy (ji,jj )) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj )+1)*e3zps_rat )1306 ELSE1307 misfdep(ji,jj+1) = misfdep(ji,jj+1) - 11308 risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat )1309 END IF1310 ELSE1311 misfdep(ji,jj+1) = misfdep(ji,jj+1) - 11312 risfdep (ji,jj+1) = gdepw_1d(misfdep(ji,jj+1)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj+1))*e3zps_rat )1313 END IF1314 ENDIF1315 END DO1316 END DO1317 1318 IF( lk_mpp ) THEN1319 zbathy(:,:) = FLOAT( misfdep(:,:) )1320 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1321 misfdep(:,:) = INT( zbathy(:,:) )1322 1323 CALL lbc_lnk( 'domzgr',risfdep,'T', 1. )1324 CALL lbc_lnk( 'domzgr',bathy, 'T', 1. )1325 1326 zbathy(:,:) = FLOAT( mbathy(:,:) )1327 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1328 mbathy(:,:) = INT( zbathy(:,:) )1329 ENDIF1330 ! point V misdep(ji,jj) == mbathy(ji,jj+1)1331 DO jj = 1, jpjm11332 DO ji = 1, jpim11333 IF( misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) > 1) THEN1334 IF ( .NOT. ln_iscpl ) THEN1335 zbathydiff =ABS( bathy(ji,jj+1) - ( gdepw_1d(mbathy (ji,jj+1)+1) &1336 & + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat )))1337 zrisfdepdiff=ABS(risfdep(ji,jj ) - ( gdepw_1d(misfdep(ji,jj ) ) &1338 & - MIN( e3zps_min, e3t_1d(misfdep(ji,jj )-1)*e3zps_rat )))1339 IF (zbathydiff <= zrisfdepdiff) THEN1340 mbathy (ji,jj+1) = mbathy(ji,jj+1) + 11341 bathy (ji,jj+1) = gdepw_1d(mbathy (ji,jj+1) ) + MIN( e3zps_min, e3t_1d(mbathy (ji,jj+1)+1)*e3zps_rat )1342 ELSE1343 misfdep(ji,jj) = misfdep(ji,jj) - 11344 risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj ) )*e3zps_rat )1345 END IF1346 ELSE1347 misfdep(ji,jj) = misfdep(ji,jj) - 11348 risfdep(ji,jj) = gdepw_1d(misfdep(ji,jj )+1) - MIN( e3zps_min, e3t_1d(misfdep(ji,jj ) )*e3zps_rat )1349 END IF1350 ENDIF1351 END DO1352 END DO1353 1354 1355 IF( lk_mpp ) THEN1356 zbathy(:,:) = FLOAT( misfdep(:,:) )1357 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1358 misfdep(:,:) = INT( zbathy(:,:) )1359 1360 CALL lbc_lnk( 'domzgr',risfdep,'T', 1. )1361 CALL lbc_lnk( 'domzgr',bathy, 'T', 1. )1362 1363 zbathy(:,:) = FLOAT( mbathy(:,:) )1364 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1365 mbathy(:,:) = INT( zbathy(:,:) )1366 ENDIF1367 1368 ! point U mbathy(ji,jj) == misfdep(ji,jj+1)1369 DO jj = 1, jpjm11370 DO ji = 1, jpim11371 IF( misfdep(ji+1,jj) == mbathy(ji,jj) .AND. mbathy(ji,jj) > 1) THEN1372 IF ( .NOT. ln_iscpl ) THEN1373 zbathydiff =ABS( bathy(ji ,jj) - ( gdepw_1d(mbathy (ji,jj)+1) &1374 & + MIN( e3zps_min, e3t_1d(mbathy (ji ,jj)+1)*e3zps_rat )))1375 zrisfdepdiff=ABS(risfdep(ji+1,jj) - ( gdepw_1d(misfdep(ji+1,jj)) &1376 & - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj)-1)*e3zps_rat )))1377 IF (zbathydiff <= zrisfdepdiff) THEN1378 mbathy(ji,jj) = mbathy(ji,jj) + 11379 bathy(ji,jj) = gdepw_1d(mbathy (ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj) +1)*e3zps_rat )1380 ELSE1381 misfdep(ji+1,jj)= misfdep(ji+1,jj) - 11382 risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat )1383 END IF1384 ELSE1385 misfdep(ji+1,jj)= misfdep(ji+1,jj) - 11386 risfdep(ji+1,jj) = gdepw_1d(misfdep(ji+1,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji+1,jj))*e3zps_rat )1387 ENDIF1388 ENDIF1389 ENDDO1390 ENDDO1391 1392 IF( lk_mpp ) THEN1393 zbathy(:,:) = FLOAT( misfdep(:,:) )1394 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1395 misfdep(:,:) = INT( zbathy(:,:) )1396 1397 CALL lbc_lnk( 'domzgr',risfdep,'T', 1. )1398 CALL lbc_lnk( 'domzgr',bathy, 'T', 1. )1399 1400 zbathy(:,:) = FLOAT( mbathy(:,:) )1401 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1402 mbathy(:,:) = INT( zbathy(:,:) )1403 ENDIF1404 1405 ! point U misfdep(ji,jj) == bathy(ji,jj+1)1406 DO jj = 1, jpjm11407 DO ji = 1, jpim11408 IF( misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) > 1) THEN1409 IF ( .NOT. ln_iscpl ) THEN1410 zbathydiff =ABS( bathy(ji+1,jj) - ( gdepw_1d(mbathy (ji+1,jj)+1) &1411 & + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj)+1)*e3zps_rat )))1412 zrisfdepdiff=ABS(risfdep(ji ,jj) - ( gdepw_1d(misfdep(ji ,jj) ) &1413 & - MIN( e3zps_min, e3t_1d(misfdep(ji ,jj)-1)*e3zps_rat )))1414 IF (zbathydiff <= zrisfdepdiff) THEN1415 mbathy(ji+1,jj) = mbathy (ji+1,jj) + 11416 bathy (ji+1,jj) = gdepw_1d(mbathy (ji+1,jj) ) + MIN( e3zps_min, e3t_1d(mbathy (ji+1,jj) +1)*e3zps_rat )1417 ELSE1418 misfdep(ji,jj) = misfdep(ji ,jj) - 11419 risfdep(ji,jj) = gdepw_1d(misfdep(ji ,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji ,jj) )*e3zps_rat )1420 END IF1421 ELSE1422 misfdep(ji,jj) = misfdep(ji ,jj) - 11423 risfdep(ji,jj) = gdepw_1d(misfdep(ji ,jj)+1) - MIN( e3zps_min, e3t_1d(misfdep(ji ,jj) )*e3zps_rat )1424 ENDIF1425 ENDIF1426 ENDDO1427 ENDDO1428 1429 IF( lk_mpp ) THEN1430 zbathy(:,:) = FLOAT( misfdep(:,:) )1431 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1432 misfdep(:,:) = INT( zbathy(:,:) )1433 1434 CALL lbc_lnk( 'domzgr',risfdep,'T', 1. )1435 CALL lbc_lnk( 'domzgr',bathy, 'T', 1. )1436 1437 zbathy(:,:) = FLOAT( mbathy(:,:) )1438 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1439 mbathy(:,:) = INT( zbathy(:,:) )1440 ENDIF1441 END DO1442 ! end dig bathy/ice shelf to be compatible1443 ! now fill single point in "coastline" of ice shelf, bathy, hole, and test again one cell tickness1444 DO jl = 1,201445 1446 ! remove single point "bay" on isf coast line in the ice shelf draft'1447 DO jk = 2, jpk1448 WHERE (misfdep==0) misfdep=jpk1449 zmask=0._wp1450 WHERE (misfdep <= jk) zmask=11451 DO jj = 2, jpjm11452 DO ji = 2, jpim11453 IF (misfdep(ji,jj) == jk) THEN1454 ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1)1455 IF (ibtest <= 1) THEN1456 risfdep(ji,jj)=gdepw_1d(jk+1) ; misfdep(ji,jj)=jk+11457 IF (misfdep(ji,jj) > mbathy(ji,jj)) misfdep(ji,jj) = jpk1458 END IF1459 END IF1460 END DO1461 END DO1462 END DO1463 WHERE (misfdep==jpk)1464 misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp1465 END WHERE1466 IF( lk_mpp ) THEN1467 zbathy(:,:) = FLOAT( misfdep(:,:) )1468 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1469 misfdep(:,:) = INT( zbathy(:,:) )1470 1471 CALL lbc_lnk( 'domzgr',risfdep,'T', 1. )1472 CALL lbc_lnk('domzgr', bathy, 'T', 1. )1473 1474 zbathy(:,:) = FLOAT( mbathy(:,:) )1475 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1476 mbathy(:,:) = INT( zbathy(:,:) )1477 ENDIF1478 1479 ! remove single point "bay" on bathy coast line beneath an ice shelf'1480 DO jk = jpk,1,-11481 zmask=0._wp1482 WHERE (mbathy >= jk ) zmask=11483 DO jj = 2, jpjm11484 DO ji = 2, jpim11485 IF (mbathy(ji,jj) == jk .AND. misfdep(ji,jj) >= 2) THEN1486 ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1)1487 IF (ibtest <= 1) THEN1488 bathy(ji,jj)=gdepw_1d(jk) ; mbathy(ji,jj)=jk-11489 IF (misfdep(ji,jj) > mbathy(ji,jj)) mbathy(ji,jj) = 01490 END IF1491 END IF1492 END DO1493 END DO1494 END DO1495 WHERE (mbathy==0)1496 misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp1497 END WHERE1498 IF( lk_mpp ) THEN1499 zbathy(:,:) = FLOAT( misfdep(:,:) )1500 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1501 misfdep(:,:) = INT( zbathy(:,:) )1502 1503 CALL lbc_lnk( 'domzgr',risfdep,'T', 1. )1504 CALL lbc_lnk( 'domzgr',bathy, 'T', 1. )1505 1506 zbathy(:,:) = FLOAT( mbathy(:,:) )1507 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1508 mbathy(:,:) = INT( zbathy(:,:) )1509 ENDIF1510 1511 ! fill hole in ice shelf1512 zmisfdep = misfdep1513 zrisfdep = risfdep1514 WHERE (zmisfdep <= 1._wp) zmisfdep=jpk1515 DO jj = 2, jpjm11516 DO ji = 2, jpim11517 ibtestim1 = zmisfdep(ji-1,jj ) ; ibtestip1 = zmisfdep(ji+1,jj )1518 ibtestjm1 = zmisfdep(ji ,jj-1) ; ibtestjp1 = zmisfdep(ji ,jj+1)1519 IF( zmisfdep(ji,jj) >= mbathy(ji-1,jj ) ) ibtestim1 = jpk1520 IF( zmisfdep(ji,jj) >= mbathy(ji+1,jj ) ) ibtestip1 = jpk1521 IF( zmisfdep(ji,jj) >= mbathy(ji ,jj-1) ) ibtestjm1 = jpk1522 IF( zmisfdep(ji,jj) >= mbathy(ji ,jj+1) ) ibtestjp1 = jpk1523 ibtest=MIN(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1)1524 IF( ibtest == jpk .AND. misfdep(ji,jj) >= 2) THEN1525 mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp1526 END IF1527 IF( zmisfdep(ji,jj) < ibtest .AND. misfdep(ji,jj) >= 2) THEN1528 misfdep(ji,jj) = ibtest1529 risfdep(ji,jj) = gdepw_1d(ibtest)1530 ENDIF1531 ENDDO1532 ENDDO1533 1534 IF( lk_mpp ) THEN1535 zbathy(:,:) = FLOAT( misfdep(:,:) )1536 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1537 misfdep(:,:) = INT( zbathy(:,:) )1538 1539 CALL lbc_lnk( 'domzgr',risfdep, 'T', 1. )1540 CALL lbc_lnk( 'domzgr',bathy, 'T', 1. )1541 1542 zbathy(:,:) = FLOAT( mbathy(:,:) )1543 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1544 mbathy(:,:) = INT( zbathy(:,:) )1545 ENDIF1546 !1547 !! fill hole in bathymetry1548 zmbathy (:,:)=mbathy (:,:)1549 DO jj = 2, jpjm11550 DO ji = 2, jpim11551 ibtestim1 = zmbathy(ji-1,jj ) ; ibtestip1 = zmbathy(ji+1,jj )1552 ibtestjm1 = zmbathy(ji ,jj-1) ; ibtestjp1 = zmbathy(ji ,jj+1)1553 IF( zmbathy(ji,jj) < misfdep(ji-1,jj ) ) ibtestim1 = 01554 IF( zmbathy(ji,jj) < misfdep(ji+1,jj ) ) ibtestip1 = 01555 IF( zmbathy(ji,jj) < misfdep(ji ,jj-1) ) ibtestjm1 = 01556 IF( zmbathy(ji,jj) < misfdep(ji ,jj+1) ) ibtestjp1 = 01557 ibtest=MAX(ibtestim1, ibtestip1, ibtestjm1, ibtestjp1)1558 IF( ibtest == 0 .AND. misfdep(ji,jj) >= 2) THEN1559 mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0.0_wp ; misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0.0_wp ;1560 END IF1561 IF( ibtest < zmbathy(ji,jj) .AND. misfdep(ji,jj) >= 2) THEN1562 mbathy(ji,jj) = ibtest1563 bathy(ji,jj) = gdepw_1d(ibtest+1)1564 ENDIF1565 END DO1566 END DO1567 IF( lk_mpp ) THEN1568 zbathy(:,:) = FLOAT( misfdep(:,:) )1569 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1570 misfdep(:,:) = INT( zbathy(:,:) )1571 1572 CALL lbc_lnk( 'domzgr',risfdep, 'T', 1. )1573 CALL lbc_lnk( 'domzgr',bathy, 'T', 1. )1574 1575 zbathy(:,:) = FLOAT( mbathy(:,:) )1576 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1577 mbathy(:,:) = INT( zbathy(:,:) )1578 ENDIF1579 ! if not compatible after all check (ie U point water column less than 2 cells), mask U1580 DO jj = 1, jpjm11581 DO ji = 1, jpim11582 IF (mbathy(ji,jj) == misfdep(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN1583 mbathy(ji,jj) = mbathy(ji,jj) - 1 ; bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)+1) ;1584 END IF1585 END DO1586 END DO1587 IF( lk_mpp ) THEN1588 zbathy(:,:) = FLOAT( misfdep(:,:) )1589 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1590 misfdep(:,:) = INT( zbathy(:,:) )1591 1592 CALL lbc_lnk('domzgr', risfdep, 'T', 1. )1593 CALL lbc_lnk('domzgr', bathy, 'T', 1. )1594 1595 zbathy(:,:) = FLOAT( mbathy(:,:) )1596 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1597 mbathy(:,:) = INT( zbathy(:,:) )1598 ENDIF1599 ! if not compatible after all check (ie U point water column less than 2 cells), mask U1600 DO jj = 1, jpjm11601 DO ji = 1, jpim11602 IF (misfdep(ji,jj) == mbathy(ji+1,jj) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji+1,jj) >= 1) THEN1603 mbathy(ji+1,jj) = mbathy(ji+1,jj) - 1; bathy(ji+1,jj) = gdepw_1d(mbathy(ji+1,jj)+1) ;1604 END IF1605 END DO1606 END DO1607 IF( lk_mpp ) THEN1608 zbathy(:,:) = FLOAT( misfdep(:,:) )1609 CALL lbc_lnk('domzgr', zbathy, 'T', 1. )1610 misfdep(:,:) = INT( zbathy(:,:) )1611 1612 CALL lbc_lnk('domzgr', risfdep,'T', 1. )1613 CALL lbc_lnk( 'domzgr',bathy, 'T', 1. )1614 1615 zbathy(:,:) = FLOAT( mbathy(:,:) )1616 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1617 mbathy(:,:) = INT( zbathy(:,:) )1618 ENDIF1619 ! if not compatible after all check (ie V point water column less than 2 cells), mask V1620 DO jj = 1, jpjm11621 DO ji = 1, jpi1622 IF (mbathy(ji,jj) == misfdep(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN1623 mbathy(ji,jj) = mbathy(ji,jj) - 1 ; bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)+1) ;1624 END IF1625 END DO1626 END DO1627 IF( lk_mpp ) THEN1628 zbathy(:,:) = FLOAT( misfdep(:,:) )1629 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1630 misfdep(:,:) = INT( zbathy(:,:) )1631 1632 CALL lbc_lnk( 'domzgr',risfdep,'T', 1. )1633 CALL lbc_lnk('domzgr', bathy, 'T', 1. )1634 1635 zbathy(:,:) = FLOAT( mbathy(:,:) )1636 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1637 mbathy(:,:) = INT( zbathy(:,:) )1638 ENDIF1639 ! if not compatible after all check (ie V point water column less than 2 cells), mask V1640 DO jj = 1, jpjm11641 DO ji = 1, jpi1642 IF (misfdep(ji,jj) == mbathy(ji,jj+1) .AND. mbathy(ji,jj) >= 1 .AND. mbathy(ji,jj+1) >= 1) THEN1643 mbathy(ji,jj+1) = mbathy(ji,jj+1) - 1 ; bathy(ji,jj+1) = gdepw_1d(mbathy(ji,jj+1)+1) ;1644 END IF1645 END DO1646 END DO1647 IF( lk_mpp ) THEN1648 zbathy(:,:) = FLOAT( misfdep(:,:) )1649 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1650 misfdep(:,:) = INT( zbathy(:,:) )1651 1652 CALL lbc_lnk( 'domzgr',risfdep,'T', 1. )1653 CALL lbc_lnk( 'domzgr',bathy, 'T', 1. )1654 1655 zbathy(:,:) = FLOAT( mbathy(:,:) )1656 CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )1657 mbathy(:,:) = INT( zbathy(:,:) )1658 ENDIF1659 ! if not compatible after all check, mask T1660 DO jj = 1, jpj1661 DO ji = 1, jpi1662 IF (mbathy(ji,jj) <= misfdep(ji,jj)) THEN1663 misfdep(ji,jj) = 0 ; risfdep(ji,jj) = 0._wp ; mbathy(ji,jj) = 0 ; bathy(ji,jj) = 0._wp ;1664 END IF1665 END DO1666 END DO1667 1668 WHERE (mbathy(:,:) == 1)1669 mbathy = 0; bathy = 0.0_wp ; misfdep = 0 ; risfdep = 0.0_wp1670 END WHERE1671 END DO1672 ! end check compatibility ice shelf/bathy1673 ! remove very shallow ice shelf (less than ~ 10m if 75L)1674 WHERE (risfdep(:,:) <= 10._wp)1675 misfdep = 1; risfdep = 0.0_wp;1676 END WHERE1677 1678 IF( icompt == 0 ) THEN1679 IF(lwp) WRITE(numout,*)' no points with ice shelf too close to bathymetry'1680 ELSE1681 IF(lwp) WRITE(numout,*)' ',icompt,' ocean grid points with ice shelf thickness reduced to avoid bathymetry'1682 ENDIF1683 1684 ! compute scale factor and depth at T- and W- points1685 954 DO jj = 1, jpj 1686 955 DO ji = 1, jpi … … 1704 973 ELSE ; gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1) 1705 974 ENDIF 1706 ! gdepw_0(ji,jj,ik+1) = gdepw_1d(ik+1)1707 975 !gm Bug? check the gdepw_1d 1708 976 ! ... on ik … … 1710 978 & * ((gdept_1d( ik ) - gdepw_1d(ik) ) & 1711 979 & / ( gdepw_1d( ik+1) - gdepw_1d(ik) )) 1712 e3t_0 (ji,jj,ik ) = gdepw_0(ji,jj,ik+1) - gdepw_1d(ik ) 1713 e3w_0 (ji,jj,ik ) = gdept_0(ji,jj,ik ) - gdept_1d(ik-1) 980 e3t_0 (ji,jj,ik) = e3t_1d (ik) * ( gdepw_0 (ji,jj,ik+1) - gdepw_1d(ik) ) & 981 & / ( gdepw_1d( ik+1) - gdepw_1d(ik) ) 982 e3w_0(ji,jj,ik) = 0.5_wp * ( gdepw_0(ji,jj,ik+1) + gdepw_1d(ik+1) - 2._wp * gdepw_1d(ik) ) & 983 & * ( e3w_1d(ik) / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) ) 1714 984 ! ... on ik+1 1715 985 e3w_0 (ji,jj,ik+1) = e3t_0 (ji,jj,ik) 1716 986 e3t_0 (ji,jj,ik+1) = e3t_0 (ji,jj,ik) 987 gdept_0(ji,jj,ik+1) = gdept_0(ji,jj,ik) + e3t_0(ji,jj,ik) 1717 988 ENDIF 1718 989 ENDIF … … 1740 1011 END DO 1741 1012 ! 1742 ! (ISF) Definition of e3t, u, v, w for ISF case 1743 DO jj = 1, jpj 1744 DO ji = 1, jpi 1745 ik = misfdep(ji,jj) 1746 IF( ik > 1 ) THEN ! ice shelf point only 1747 IF( risfdep(ji,jj) < gdepw_1d(ik) ) risfdep(ji,jj)= gdepw_1d(ik) 1748 gdepw_0(ji,jj,ik) = risfdep(ji,jj) 1749 !gm Bug? check the gdepw_0 1750 ! ... on ik 1751 gdept_0(ji,jj,ik) = gdepw_1d(ik+1) - ( gdepw_1d(ik+1) - gdepw_0(ji,jj,ik) ) & 1752 & * ( gdepw_1d(ik+1) - gdept_1d(ik) ) & 1753 & / ( gdepw_1d(ik+1) - gdepw_1d(ik) ) 1754 e3t_0 (ji,jj,ik ) = gdepw_1d(ik+1) - gdepw_0(ji,jj,ik) 1755 e3w_0 (ji,jj,ik+1) = gdept_1d(ik+1) - gdept_0(ji,jj,ik) 1756 1757 IF( ik + 1 == mbathy(ji,jj) ) THEN ! ice shelf point only (2 cell water column) 1758 e3w_0 (ji,jj,ik+1) = gdept_0(ji,jj,ik+1) - gdept_0(ji,jj,ik) 1759 ENDIF 1760 ! ... on ik / ik-1 1761 e3w_0 (ji,jj,ik ) = e3t_0 (ji,jj,ik) !2._wp * (gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik)) 1762 gdept_0(ji,jj,ik-1) = gdept_0(ji,jj,ik) - e3w_0(ji,jj,ik) 1763 e3t_0 (ji,jj,ik-1) = gdepw_0(ji,jj,ik) - gdepw_1d(ik-1) 1764 e3w_0 (ji,jj,ik-1) = gdept_0(ji,jj,ik-1) - gdept_1d(ik-2) 1765 gdepw_0(ji,jj,ik-1) = gdepw_0(ji,jj,ik) - e3t_0(ji,jj,ik-1) 1766 ENDIF 1767 END DO 1768 END DO 1769 1770 it = 0 1771 DO jj = 1, jpj 1772 DO ji = 1, jpi 1773 ik = misfdep(ji,jj) 1774 IF( ik > 1 ) THEN ! ice shelf point only 1775 e3tp (ji,jj) = e3t_0(ji,jj,ik ) 1776 e3wp (ji,jj) = e3w_0(ji,jj,ik+1 ) 1777 ! test 1778 zdiff= gdept_0(ji,jj,ik) - gdepw_0(ji,jj,ik ) 1779 IF( zdiff <= 0. .AND. lwp ) THEN 1780 it = it + 1 1781 WRITE(numout,*) ' it = ', it, ' ik = ', ik, ' (i,j) = ', ji, jj 1782 WRITE(numout,*) ' risfdep = ', risfdep(ji,jj) 1783 WRITE(numout,*) ' gdept = ', gdept_0(ji,jj,ik), ' gdepw = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff 1784 WRITE(numout,*) ' e3tp = ', e3tp(ji,jj), ' e3wp = ', e3wp(ji,jj) 1785 ENDIF 1786 ENDIF 1787 END DO 1788 END DO 1789 1790 DEALLOCATE( zbathy, zmask, zrisfdep ) 1791 DEALLOCATE( zmisfdep, zmbathy ) 1792 ! 1793 END SUBROUTINE zgr_isf 1794 1013 ! compute top scale factor if ice shelf 1014 IF (ln_isfcav) CALL zps_isf 1015 ! 1016 ! Scale factors and depth at U-, V-, UW and VW-points 1017 DO jk = 1, jpk ! initialisation to z-scale factors 1018 e3u_0 (:,:,jk) = e3t_1d(jk) 1019 e3v_0 (:,:,jk) = e3t_1d(jk) 1020 e3uw_0(:,:,jk) = e3w_1d(jk) 1021 e3vw_0(:,:,jk) = e3w_1d(jk) 1022 END DO 1023 1024 DO jk = 1,jpk ! Computed as the minimum of neighbooring scale factors 1025 DO jj = 1, jpjm1 1026 DO ji = 1, jpim1 ! vector opt. 1027 e3u_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji+1,jj,jk) ) 1028 e3v_0 (ji,jj,jk) = MIN( e3t_0(ji,jj,jk), e3t_0(ji,jj+1,jk) ) 1029 e3uw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji+1,jj,jk) ) 1030 e3vw_0(ji,jj,jk) = MIN( e3w_0(ji,jj,jk), e3w_0(ji,jj+1,jk) ) 1031 END DO 1032 END DO 1033 END DO 1034 1035 ! update e3uw in case only 2 cells in the water column 1036 IF ( ln_isfcav ) CALL zps_isf_e3uv_w 1037 ! 1038 CALL lbc_lnk('domzgr', e3u_0 , 'U', 1._wp ) ; CALL lbc_lnk('domzgr', e3uw_0, 'U', 1._wp ) ! lateral boundary conditions 1039 CALL lbc_lnk('domzgr', e3v_0 , 'V', 1._wp ) ; CALL lbc_lnk('domzgr', e3vw_0, 'V', 1._wp ) 1040 ! 1041 DO jk = 1, jpk ! set to z-scale factor if zero (i.e. along closed boundaries) 1042 WHERE( e3u_0 (:,:,jk) == 0._wp ) e3u_0 (:,:,jk) = e3t_1d(jk) 1043 WHERE( e3v_0 (:,:,jk) == 0._wp ) e3v_0 (:,:,jk) = e3t_1d(jk) 1044 WHERE( e3uw_0(:,:,jk) == 0._wp ) e3uw_0(:,:,jk) = e3w_1d(jk) 1045 WHERE( e3vw_0(:,:,jk) == 0._wp ) e3vw_0(:,:,jk) = e3w_1d(jk) 1046 END DO 1047 1048 ! Scale factor at F-point 1049 DO jk = 1, jpk ! initialisation to z-scale factors 1050 e3f_0(:,:,jk) = e3t_1d(jk) 1051 END DO 1052 DO jk = 1, jpk ! Computed as the minimum of neighbooring V-scale factors 1053 DO jj = 1, jpjm1 1054 DO ji = 1, jpim1 ! vector opt. 1055 e3f_0(ji,jj,jk) = MIN( e3v_0(ji,jj,jk), e3v_0(ji+1,jj,jk) ) 1056 END DO 1057 END DO 1058 END DO 1059 CALL lbc_lnk('domzgr', e3f_0, 'F', 1._wp ) ! Lateral boundary conditions 1060 ! 1061 DO jk = 1, jpk ! set to z-scale factor if zero (i.e. along closed boundaries) 1062 WHERE( e3f_0(:,:,jk) == 0._wp ) e3f_0(:,:,jk) = e3t_1d(jk) 1063 END DO 1064 !!gm bug ? : must be a do loop with mj0,mj1 1065 ! 1066 e3t_0(:,mj0(1),:) = e3t_0(:,mj0(2),:) ! we duplicate factor scales for jj = 1 and jj = 2 1067 e3w_0(:,mj0(1),:) = e3w_0(:,mj0(2),:) 1068 e3u_0(:,mj0(1),:) = e3u_0(:,mj0(2),:) 1069 e3v_0(:,mj0(1),:) = e3v_0(:,mj0(2),:) 1070 e3f_0(:,mj0(1),:) = e3f_0(:,mj0(2),:) 1071 1072 ! Control of the sign 1073 IF( MINVAL( e3t_0 (:,:,:) ) <= 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r e3t_0 <= 0' ) 1074 IF( MINVAL( e3w_0 (:,:,:) ) <= 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r e3w_0 <= 0' ) 1075 IF( MINVAL( gdept_0(:,:,:) ) < 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r gdept_0 < 0' ) 1076 IF( MINVAL( gdepw_0(:,:,:) ) < 0._wp ) CALL ctl_stop( ' zgr_zps : e r r o r gdepw_0 < 0' ) 1077 1078 ! Compute gde3w_0 (vertical sum of e3w) 1079 IF ( ln_isfcav ) THEN ! if cavity ! to check if it can be simplify 1080 WHERE( misfdep == 0 ) misfdep = 1 1081 DO jj = 1,jpj 1082 DO ji = 1,jpi 1083 gde3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1) 1084 DO jk = 2, misfdep(ji,jj) 1085 gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk) 1086 END DO 1087 IF( misfdep(ji,jj) >= 2 ) gde3w_0(ji,jj,misfdep(ji,jj)) = risfdep(ji,jj) + 0.5_wp * e3w_0(ji,jj,misfdep(ji,jj)) 1088 DO jk = misfdep(ji,jj) + 1, jpk 1089 gde3w_0(ji,jj,jk) = gde3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk) 1090 END DO 1091 END DO 1092 END DO 1093 ELSE ! no cavity 1094 gde3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 1095 DO jk = 2, jpk 1096 gde3w_0(:,:,jk) = gde3w_0(:,:,jk-1) + e3w_0(:,:,jk) 1097 END DO 1098 END IF 1099 ! 1100 DEALLOCATE( zprt ) 1101 ! 1102 END SUBROUTINE zgr_zps 1795 1103 1796 1104 SUBROUTINE zgr_sco
Note: See TracChangeset
for help on using the changeset viewer.