- Timestamp:
- 2014-07-23T18:27:21+02:00 (10 years ago)
- Location:
- branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/CONFIG/ISOMIP/cpp_ISOMIP.fcm
r4666 r4726 1 bld::tool::fppkeys key_dynspg_flt key_zdfcst key_iomput key_mpp_mpi 1 bld::tool::fppkeys key_dynspg_flt key_zdfcst key_iomput key_mpp_mpi key_mpp_rep key_ldfslp -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90
r4666 r4726 1152 1152 END DO 1153 1153 1154 tmask_i (:,:) = lmask(:,:) * tmask_i(:,:)1154 tmask_i (:,:) = ssmask(:,:) * tmask_i(:,:) 1155 1155 1156 1156 ENDIF ! ln_mask_file=.TRUE. 1157 1157 1158 bdytmask(:,:) = lmask(:,:)1158 bdytmask(:,:) = ssmask(:,:) 1159 1159 IF( .not. ln_mask_file ) THEN 1160 1160 ! If .not. ln_mask_file then we need to derive mask on U and V grid -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/DIA/diaptr.F90
r4666 r4726 505 505 btmsk(:,:,5) = MAX ( btmsk(:,:,3), btmsk(:,:,4) ) ! Indo-Pacific basin 506 506 WHERE( gphit(:,:) < -30._wp) ; btm30(:,:) = 0._wp ! mask out Southern Ocean 507 ELSE WHERE ; btm30(:,:) = lmask(:,:)507 ELSE WHERE ; btm30(:,:) = ssmask(:,:) 508 508 END WHERE 509 509 ENDIF -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/DOM/dom_oce.F90
r4666 r4726 255 255 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: bmask !: land/ocean mask of barotropic stream function 256 256 257 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: mi cedep !: top first ocean level (ISF)257 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: misfdep !: top first ocean level (ISF) 258 258 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: mikt, miku, mikv, mikf !: first wet T-, U-, V-, F- ocean level (ISF) 259 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: icedep, iceh !: Iceshelf draft, iceshef freeboard(ISF)260 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: lmask !: surface domain T-point mask259 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: risfdep !: Iceshelf draft (ISF) 260 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ssmask !: surface domain T-point mask 261 261 262 262 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: tmask, umask, vmask, fmask !: land/ocean mask at T-, U-, V- and F-pts … … 391 391 392 392 ! (ISF) Allocation of basic array 393 ALLOCATE( mi cedep(jpi,jpj) , icedep(jpi,jpj), iceh(jpi,jpj),&393 ALLOCATE( misfdep(jpi,jpj) , risfdep(jpi,jpj), & 394 394 & mikt(jpi,jpj), miku(jpi,jpj), mikv(jpi,jpj) , & 395 & mikf(jpi,jpj), lmask(jpi,jpj), STAT=ierr(10) )395 & mikf(jpi,jpj), ssmask(jpi,jpj), STAT=ierr(10) ) 396 396 397 397 ALLOCATE( tmask(jpi,jpj,jpk) , umask(jpi,jpj,jpk), & -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90
r4666 r4726 186 186 187 187 ! (ISF) define barotropic mask and mask the ice shelf point 188 lmask(:,:)=tmask(:,:,1) ! at this stage ice shelf is not masked188 ssmask(:,:)=tmask(:,:,1) ! at this stage ice shelf is not masked 189 189 190 190 DO jk = 1, jpk 191 191 DO jj = 1, jpj 192 192 DO ji = 1, jpi 193 IF( REAL( mi cedep(ji,jj) - jk, wp ) - 0.1_wp >= 0._wp ) THEN193 IF( REAL( misfdep(ji,jj) - jk, wp ) - 0.1_wp >= 0._wp ) THEN 194 194 tmask(ji,jj,jk) = 0._wp 195 195 END IF … … 220 220 ! Interior domain mask (used for global sum) 221 221 ! -------------------- 222 tmask_i(:,:) = lmask(:,:) ! (ISH) tmask_i = 1 even on the ice shelf222 tmask_i(:,:) = ssmask(:,:) ! (ISH) tmask_i = 1 even on the ice shelf 223 223 iif = jpreci ! ??? 224 224 iil = nlci - jpreci + 1 … … 266 266 DO jj = 1, jpjm1 267 267 DO ji = 1, fs_jpim1 ! vector loop 268 umask_i(ji,jj) = lmask(ji,jj) * lmask(ji+1,jj ) * MIN(1._wp,SUM(umask(ji,jj,:)))269 vmask_i(ji,jj) = lmask(ji,jj) * lmask(ji ,jj+1) * MIN(1._wp,SUM(vmask(ji,jj,:)))268 umask_i(ji,jj) = ssmask(ji,jj) * ssmask(ji+1,jj ) * MIN(1._wp,SUM(umask(ji,jj,:))) 269 vmask_i(ji,jj) = ssmask(ji,jj) * ssmask(ji ,jj+1) * MIN(1._wp,SUM(vmask(ji,jj,:))) 270 270 END DO 271 271 DO ji = 1, jpim1 ! NO vector opt. 272 fmask_i(ji,jj) = lmask(ji,jj ) * lmask(ji+1,jj ) &273 & * lmask(ji,jj+1) * lmask(ji+1,jj+1) * MIN(1._wp,SUM(fmask(ji,jj,:)))272 fmask_i(ji,jj) = ssmask(ji,jj ) * ssmask(ji+1,jj ) & 273 & * ssmask(ji,jj+1) * ssmask(ji+1,jj+1) * MIN(1._wp,SUM(fmask(ji,jj,:))) 274 274 END DO 275 275 END DO … … 284 284 ! 4. ocean/land mask for the elliptic equation 285 285 ! -------------------------------------------- 286 bmask(:,:) = lmask(:,:) ! elliptic equation is written at t-point286 bmask(:,:) = ssmask(:,:) ! elliptic equation is written at t-point 287 287 ! 288 288 ! ! Boundary conditions -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r4724 r4726 312 312 ! ! --------------------------------------------- ! 313 313 314 z_scale(:,:) = ( ssha(:,:) - sshb(:,:) ) * lmask(:,:) / ( ht_0(:,:) + sshn(:,:) + 1. - lmask(:,:) )314 z_scale(:,:) = ( ssha(:,:) - sshb(:,:) ) * ssmask(:,:) / ( ht_0(:,:) + sshn(:,:) + 1. - ssmask(:,:) ) 315 315 DO jk = 1, jpkm1 316 316 ! formally this is the same as fse3t_a = e3t_0*(1+ssha/ht_0) … … 472 472 zht(:,:) = zht(:,:) + tilde_e3t_a(:,:,jk) * tmask(:,:,jk) 473 473 END DO 474 z_scale(:,:) = - zht(:,:) / ( ht_0(:,:) + sshn(:,:) + 1. - lmask)474 z_scale(:,:) = - zht(:,:) / ( ht_0(:,:) + sshn(:,:) + 1. - ssmask(:,:) ) 475 475 DO jk = 1, jpkm1 476 476 dtilde_e3t_a(:,:,jk) = dtilde_e3t_a(:,:,jk) + fse3t_n(:,:,jk) * z_scale(:,:) * tmask(:,:,jk) -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/DOM/domwri.F90
r4666 r4726 188 188 189 189 ! note that mbkt is set to 1 over land ==> use surface tmask 190 zprt(:,:) = lmask(:,:) * REAL( mbkt(:,:) , wp )190 zprt(:,:) = ssmask(:,:) * REAL( mbkt(:,:) , wp ) 191 191 CALL iom_rstput( 0, 0, inum4, 'mbathy', zprt, ktype = jp_i2 ) ! ! nb of ocean T-points 192 zprt(:,:) = lmask(:,:) * REAL( mikt(:,:) , wp )192 zprt(:,:) = ssmask(:,:) * REAL( mikt(:,:) , wp ) 193 193 CALL iom_rstput( 0, 0, inum4, 'misf', zprt, ktype = jp_i2 ) ! ! nb of ocean T-points 194 zprt(:,:) = lmask(:,:) * REAL( icedep(:,:) , wp )194 zprt(:,:) = ssmask(:,:) * REAL( risfdep(:,:) , wp ) 195 195 CALL iom_rstput( 0, 0, inum4, 'isfdraft', zprt, ktype = jp_r4 ) ! ! nb of ocean T-points 196 196 … … 227 227 DO jj = 1,jpj 228 228 DO ji = 1,jpi 229 e3tp(ji,jj) = e3t_0(ji,jj,mbkt(ji,jj)) * lmask(ji,jj)230 e3wp(ji,jj) = e3w_0(ji,jj,mbkt(ji,jj)) * lmask(ji,jj)229 e3tp(ji,jj) = e3t_0(ji,jj,mbkt(ji,jj)) * ssmask(ji,jj) 230 e3wp(ji,jj) = e3w_0(ji,jj,mbkt(ji,jj)) * ssmask(ji,jj) 231 231 END DO 232 232 END DO … … 252 252 DO jj = 1,jpj 253 253 DO ji = 1,jpi 254 zprt(ji,jj) = gdept_0(ji,jj,mbkt(ji,jj) ) * lmask(ji,jj)255 zprw(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1) * lmask(ji,jj)254 zprt(ji,jj) = gdept_0(ji,jj,mbkt(ji,jj) ) * ssmask(ji,jj) 255 zprw(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1) * ssmask(ji,jj) 256 256 END DO 257 257 END DO -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90
r4724 r4726 470 470 IF( cp_cfg == "isomip" ) THEN 471 471 ! 472 icedep(:,:)=200.e0473 mi cedep(:,:)=1472 risfdep(:,:)=200.e0 473 misfdep(:,:)=1 474 474 ij0 = 1 ; ij1 = 40 475 475 DO jj = mj0(ij0), mj1(ij1) 476 icedep(:,jj)=700.0_wp-(gphit(:,jj)+80.0_wp)*125.0_wp476 risfdep(:,jj)=700.0_wp-(gphit(:,jj)+80.0_wp)*125.0_wp 477 477 END DO 478 WHERE( bathy(:,:) <= 0._wp ) icedep(:,:) = 0._wp478 WHERE( bathy(:,:) <= 0._wp ) risfdep(:,:) = 0._wp 479 479 ! 480 480 ELSEIF ( cp_cfg == "isomip2" ) THEN 481 481 ! 482 icedep(:,:)=0.e0483 mi cedep(:,:)=1482 risfdep(:,:)=0.e0 483 misfdep(:,:)=1 484 484 ij0 = 1 ; ij1 = 40 485 485 DO jj = mj0(ij0), mj1(ij1) 486 icedep(:,jj)=700.0_wp-(gphit(:,jj)+80.0_wp)*125.0_wp487 END DO 488 WHERE( bathy(:,:) <= 0._wp ) icedep(:,:) = 0._wp486 risfdep(:,jj)=700.0_wp-(gphit(:,jj)+80.0_wp)*125.0_wp 487 END DO 488 WHERE( bathy(:,:) <= 0._wp ) risfdep(:,:) = 0._wp 489 489 END IF 490 490 ! … … 531 531 CALL iom_close( inum ) 532 532 ! 533 icedep(:,:)=0._wp534 mi cedep(:,:)=1533 risfdep(:,:)=0._wp 534 misfdep(:,:)=1 535 535 IF ( nn_isf == 1 .OR. nn_isf == 4 ) THEN 536 536 CALL iom_open ( 'isf_draft_meter.nc', inum ) 537 CALL iom_get ( inum, jpdom_data, 'isf_draft', icedep )537 CALL iom_get ( inum, jpdom_data, 'isf_draft', risfdep ) 538 538 CALL iom_close( inum ) 539 WHERE( bathy(:,:) <= 0._wp ) icedep(:,:) = 0._wp539 WHERE( bathy(:,:) <= 0._wp ) risfdep(:,:) = 0._wp 540 540 END IF 541 541 ! … … 836 836 !! ** Purpose : defines the vertical index of ocean top (mik. arrays) 837 837 !! 838 !! ** Method : computes from mi cedep with a minimum value of 1838 !! ** Method : computes from misfdep with a minimum value of 1 839 839 !! 840 840 !! ** Action : mikt, miku, mikv : vertical indices of the shallowest … … 855 855 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~' 856 856 ! 857 mikt(:,:) = MAX( mi cedep(:,:) , 1 ) ! top k-index of T-level (=1)857 mikt(:,:) = MAX( misfdep(:,:) , 1 ) ! top k-index of T-level (=1) 858 858 ! ! top k-index of W-level (=mikt) 859 859 DO jj = 1, jpjm1 ! top k-index of U- (U-) level … … 963 963 REAL(wp) :: zdiff ! temporary scalar 964 964 REAL(wp) :: zrefdep ! temporary scalar 965 REAL(wp) :: eps=0.99 ! small offset to avoid large pool in case bathy slightly greater than icedep965 REAL(wp) :: eps=0.99 ! small offset to avoid large pool in case bathy slightly greater than risfdep 966 966 REAL(wp), POINTER, DIMENSION(:,:) :: zbathy, zmask ! 3D workspace (ISH) 967 INTEGER , POINTER, DIMENSION(:,:) :: zmbathy, zmi cedep ! 3D workspace (ISH)967 INTEGER , POINTER, DIMENSION(:,:) :: zmbathy, zmisfdep ! 3D workspace (ISH) 968 968 REAL(wp), POINTER, DIMENSION(:,:,:) :: zprt 969 969 !!--------------------------------------------------------------------- … … 973 973 CALL wrk_alloc( jpi, jpj, jpk, zprt ) 974 974 CALL wrk_alloc( jpi, jpj, zbathy, zmask) 975 CALL wrk_alloc( jpi, jpj, zmbathy, zmi cedep)975 CALL wrk_alloc( jpi, jpj, zmbathy, zmisfdep) 976 976 ! 977 977 IF(lwp) WRITE(numout,*) … … 1005 1005 WHERE( 0._wp < bathy(:,:) .AND. bathy(:,:) <= zdepth ) mbathy(:,:) = jk-1 1006 1006 END DO 1007 ! (ISF) compute mi cedep1008 WHERE( icedep(:,:) == 0._wp ) ; micedep(:,:) = 1 ! no ice shelf : set micedep to 11009 ELSEWHERE ; mi cedep(:,:) = 2 ! iceshelf : initialize micedep to second level1007 ! (ISF) compute misfdep 1008 WHERE( risfdep(:,:) == 0._wp ) ; misfdep(:,:) = 1 ! no ice shelf : set misfdep to 1 1009 ELSEWHERE ; misfdep(:,:) = 2 ! iceshelf : initialize misfdep to second level 1010 1010 END WHERE 1011 1011 1012 ! Compute mi cedep for ocean points (i.e. first wet level)1012 ! Compute misfdep for ocean points (i.e. first wet level) 1013 1013 ! find the first ocean level such that the first level thickness 1014 1014 ! is larger than the bot_level of e3zps_min and e3zps_rat * e3t_0 (where … … 1016 1016 DO jk = 2, jpkm1 1017 1017 zdepth = gdepw_1d(jk+1) - MIN( e3zps_min, e3t_1d(jk)*e3zps_rat ) 1018 WHERE( 0._wp < icedep(:,:) .AND. icedep(:,:) >= zdepth ) micedep(:,:) = jk+11018 WHERE( 0._wp < risfdep(:,:) .AND. risfdep(:,:) >= zdepth ) misfdep(:,:) = jk+1 1019 1019 END DO 1020 WHERE ( icedep <= e3t_1d(1) .AND. icedep .GT. 0._wp)1021 icedep = 0.1022 mi cedep= 11020 WHERE (risfdep <= e3t_1d(1) .AND. risfdep .GT. 0._wp) 1021 risfdep = 0. 1022 misfdep= 1 1023 1023 END WHERE 1024 1025 ! basic check for the compatibility of bathy and icedep. I think it should be offline because it is not perfect and cannot solved all the situation1024 1025 ! 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 situation 1026 1026 icompt = 0 1027 1027 ! run the bathy check 10 times to be sure all the modif in the bathy or iceshelf draft are compatible together 1028 1028 DO jl = 1, 10 1029 IF( lk_mpp ) THEN1030 zbathy(:,:) = FLOAT( micedep(:,:) )1031 CALL lbc_lnk( zbathy, 'T', 1. )1032 micedep(:,:) = INT( zbathy(:,:) )1033 CALL lbc_lnk( icedep, 'T', 1. )1034 CALL lbc_lnk( bathy, 'T', 1. )1035 zbathy(:,:) = FLOAT( mbathy(:,:) )1036 CALL lbc_lnk( zbathy, 'T', 1. )1037 mbathy(:,:) = INT( zbathy(:,:) )1038 ENDIF1029 IF( lk_mpp ) THEN 1030 zbathy(:,:) = FLOAT( misfdep(:,:) ) 1031 CALL lbc_lnk( zbathy, 'T', 1. ) 1032 misfdep(:,:) = INT( zbathy(:,:) ) 1033 CALL lbc_lnk( risfdep, 'T', 1. ) 1034 CALL lbc_lnk( bathy, 'T', 1. ) 1035 zbathy(:,:) = FLOAT( mbathy(:,:) ) 1036 CALL lbc_lnk( zbathy, 'T', 1. ) 1037 mbathy(:,:) = INT( zbathy(:,:) ) 1038 ENDIF 1039 1039 IF( nperio == 1 .OR. nperio == 4 .OR. nperio == 6 ) THEN 1040 mi cedep( 1 ,:) = micedep(jpim1,:) ! local domain is cyclic east-west1041 mi cedep(jpi,:) = micedep( 2 ,:)1040 misfdep( 1 ,:) = misfdep(jpim1,:) ! local domain is cyclic east-west 1041 misfdep(jpi,:) = misfdep( 2 ,:) 1042 1042 ENDIF 1043 1043 … … 1048 1048 1049 1049 WHERE (mbathy == 0) 1050 icedep = 0._wp1051 mi cedep= 01050 risfdep = 0._wp 1051 misfdep= 0 1052 1052 bathy = 0._wp 1053 1053 ENDWHERE 1054 1054 1055 WHERE (bathy(:,:) < icedep(:,:)+eps)1056 mi cedep(:,:) = 01057 icedep(:,:) = 0._wp1055 WHERE (bathy(:,:) < risfdep(:,:)+eps) 1056 misfdep(:,:) = 0 1057 risfdep(:,:) = 0._wp 1058 1058 mbathy(:,:) = 0 1059 1059 bathy(:,:) = 0._wp 1060 1060 END WHERE 1061 ! Case where bathy and icedep compatible but not the level variable mbathy/micedep because of partial cell condition1061 ! Case where bathy and risfdep compatible but not the level variable mbathy/misfdep because of partial cell condition 1062 1062 DO jj = 1, jpj 1063 1063 DO ji = 1, jpi 1064 IF (bathy(ji,jj) .GT. icedep(ji,jj) .AND. mbathy(ji,jj) .LT. micedep(ji,jj)) THEN1064 IF (bathy(ji,jj) .GT. risfdep(ji,jj) .AND. mbathy(ji,jj) .LT. misfdep(ji,jj)) THEN 1065 1065 bathy(ji,jj) = gdepw_1d(mbathy(ji,jj)+1) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj)+1)*e3zps_rat ) 1066 1066 mbathy(ji,jj)= mbathy(ji,jj) + 1 … … 1070 1070 1071 1071 1072 1073 zmicedep(:,:)=micedep(:,:)1074 zmbathy (:,:)=mbathy (:,:)1075 1072 ! At least 2 levels for water thickness at T, U, and V point. 1073 zmisfdep(:,:)=misfdep(:,:) 1074 zmbathy (:,:)=mbathy (:,:) 1075 1076 1076 DO jj = 2, jpjm1 1077 1077 DO ji = 2, jpim1 1078 1078 ! T point 1079 IF( zmi cedep(ji,jj) == zmbathy(ji,jj) .AND. zmbathy(ji,jj) .GT. 1) THEN1079 IF( zmisfdep(ji,jj) == zmbathy(ji,jj) .AND. zmbathy(ji,jj) .GT. 1) THEN 1080 1080 mbathy(ji,jj) = zmbathy(ji,jj) + 1 1081 1081 bathy(ji,jj)=gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj))*e3zps_rat ) 1082 1082 ENDIF 1083 1083 ! V point 1084 IF( zmi cedep(ji,jj+1) == zmbathy(ji,jj) .AND. zmbathy(ji,jj) .GT. 1) THEN1084 IF( zmisfdep(ji,jj+1) == zmbathy(ji,jj) .AND. zmbathy(ji,jj) .GT. 1) THEN 1085 1085 mbathy(ji,jj) = zmbathy(ji,jj) + 1 1086 1086 bathy(ji,jj)=gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj))*e3zps_rat ) 1087 1087 ENDIF 1088 1088 ! V point -1 1089 IF( zmi cedep(ji,jj-1) == zmbathy(ji,jj) .AND. zmbathy(ji,jj) .GT. 1) THEN1089 IF( zmisfdep(ji,jj-1) == zmbathy(ji,jj) .AND. zmbathy(ji,jj) .GT. 1) THEN 1090 1090 mbathy(ji,jj) = zmbathy(ji,jj) + 1 1091 1091 bathy(ji,jj)=gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj))*e3zps_rat ) 1092 1092 ENDIF 1093 1093 ! U point 1094 IF( zmi cedep(ji+1,jj) == zmbathy(ji,jj) .AND. zmbathy(ji,jj) .GT. 1) THEN1094 IF( zmisfdep(ji+1,jj) == zmbathy(ji,jj) .AND. zmbathy(ji,jj) .GT. 1) THEN 1095 1095 mbathy(ji,jj) = zmbathy(ji,jj) + 1 1096 1096 bathy(ji,jj)=gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj))*e3zps_rat ) 1097 1097 ENDIF 1098 1098 ! U point -1 1099 IF( zmi cedep(ji-1,jj) == zmbathy(ji,jj) .AND. zmbathy(ji,jj) .GT. 1) THEN1099 IF( zmisfdep(ji-1,jj) == zmbathy(ji,jj) .AND. zmbathy(ji,jj) .GT. 1) THEN 1100 1100 mbathy(ji,jj) = zmbathy(ji,jj) + 1 1101 1101 bathy(ji,jj)=gdepw_1d(mbathy(ji,jj)) + MIN( e3zps_min, e3t_1d(mbathy(ji,jj))*e3zps_rat ) 1102 1102 ENDIF 1103 END DO1104 END DO1105 1106 zbathy(:,:) = FLOAT( micedep(:,:) )1107 1108 micedep(:,:) = INT( zbathy(:,:) )1109 CALL lbc_lnk( icedep, 'T', 1. )1110 CALL lbc_lnk( bathy, 'T', 1. )1111 zbathy(:,:) = FLOAT( mbathy(:,:) )1112 CALL lbc_lnk( zbathy, 'T', 1. )1113 mbathy(:,:) = INT( zbathy(:,:) )1114 1115 1116 1103 END DO 1104 END DO 1105 IF( lk_mpp ) THEN 1106 zbathy(:,:) = FLOAT( misfdep(:,:) ) 1107 CALL lbc_lnk( zbathy, 'T', 1. ) 1108 misfdep(:,:) = INT( zbathy(:,:) ) 1109 CALL lbc_lnk( risfdep, 'T', 1. ) 1110 CALL lbc_lnk( bathy, 'T', 1. ) 1111 zbathy(:,:) = FLOAT( mbathy(:,:) ) 1112 CALL lbc_lnk( zbathy, 'T', 1. ) 1113 mbathy(:,:) = INT( zbathy(:,:) ) 1114 ENDIF 1115 1116 ! if single ocean point put as land 1117 1117 zmask=1 1118 1118 WHERE (mbathy .EQ. 0) zmask=0 … … 1123 1123 bathy(ji,jj)=0._wp 1124 1124 mbathy(ji,jj)=0 1125 icedep(ji,jj)=0._wp1126 mi cedep(ji,jj)=01125 risfdep(ji,jj)=0._wp 1126 misfdep(ji,jj)=0 1127 1127 END IF 1128 1128 END DO 1129 1129 END DO 1130 IF( lk_mpp ) THEN1131 zbathy(:,:) = FLOAT( micedep(:,:) )1132 CALL lbc_lnk( zbathy, 'T', 1. )1133 micedep(:,:) = INT( zbathy(:,:) )1134 CALL lbc_lnk( icedep, 'T', 1. )1135 CALL lbc_lnk( bathy, 'T', 1. )1136 zbathy(:,:) = FLOAT( mbathy(:,:) )1137 CALL lbc_lnk( zbathy, 'T', 1. )1138 mbathy(:,:) = INT( zbathy(:,:) )1139 ENDIF1140 1141 ! if single point on isf coast line1142 DO jk = 1, jpk1143 WHERE (micedep==0) micedep=jpk1144 zmask=01145 WHERE (micedep .LE. jk) zmask=11146 DO jj = 2, jpjm11147 DO ji = 2, jpim11148 IF (micedep(ji,jj) .EQ. jk) THEN1149 ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1)1150 IF (ibtest .LE. 1) THEN1151 icedep(ji,jj)=gdepw_1d(jk+1) ; micedep(ji,jj)=jk+11152 IF (micedep(ji,jj) .GT. mbathy(ji,jj)) micedep(ji,jj) = jpk1153 ! bathy(ji,jj)=0. ; mbathy(ji,jj)=01154 !END IF1155 END IF1156 END IF1157 END DO1158 END DO1159 WHERE (micedep==jpk)1160 micedep=0 ; icedep=0._wp ; mbathy=0 ; bathy=0._wp1161 END WHERE1162 1163 IF( lk_mpp ) THEN1164 zbathy(:,:) = FLOAT( micedep(:,:) )1165 CALL lbc_lnk( zbathy, 'T', 1. )1166 micedep(:,:) = INT( zbathy(:,:) )1167 CALL lbc_lnk( icedep, 'T', 1. )1168 CALL lbc_lnk( bathy, 'T', 1. )1169 zbathy(:,:) = FLOAT( mbathy(:,:) )1170 CALL lbc_lnk( zbathy, 'T', 1. )1171 mbathy(:,:) = INT( zbathy(:,:) )1172 ENDIF1173 END DO1174 1175 ! fill hole in ice shelf1176 WHERE (micedep==0) micedep=jpk1177 zmicedep(:,:)=micedep(:,:)1178 zmbathy (:,:)=mbathy (:,:)1179 DO jj = 2, jpjm11180 DO ji = 2, jpim11181 ibtest=MIN(zmicedep(ji-1,jj), zmicedep(ji+1,jj), zmicedep(ji,jj-1), zmicedep(ji,jj+1))1182 IF( ibtest > zmicedep(ji,jj)) THEN1183 micedep(ji,jj) = ibtest1184 icedep(ji,jj) = gdepw_1d(ibtest)1185 ENDIF1186 ENDDO1187 ENDDO1188 WHERE (micedep==jpk)1189 micedep=0 ; icedep=0. ; mbathy=0 ; bathy=01190 END WHERE1191 1130 IF( lk_mpp ) THEN 1192 zbathy(:,:) = FLOAT( mi cedep(:,:) )1131 zbathy(:,:) = FLOAT( misfdep(:,:) ) 1193 1132 CALL lbc_lnk( zbathy, 'T', 1. ) 1194 mi cedep(:,:) = INT( zbathy(:,:) )1195 CALL lbc_lnk( icedep, 'T', 1. )1133 misfdep(:,:) = INT( zbathy(:,:) ) 1134 CALL lbc_lnk( risfdep, 'T', 1. ) 1196 1135 CALL lbc_lnk( bathy, 'T', 1. ) 1197 1136 zbathy(:,:) = FLOAT( mbathy(:,:) ) 1198 1137 CALL lbc_lnk( zbathy, 'T', 1. ) 1199 1138 mbathy(:,:) = INT( zbathy(:,:) ) 1200 ENDIF 1139 END IF 1140 1141 ! if single point on isf coast line 1142 DO jk = 1, jpk 1143 WHERE (misfdep==0) misfdep=jpk 1144 zmask=0 1145 WHERE (misfdep .LE. jk) zmask=1 1146 DO jj = 2, jpjm1 1147 DO ji = 2, jpim1 1148 IF (misfdep(ji,jj) .EQ. jk) THEN 1149 ibtest = zmask(ji-1,jj) + zmask(ji+1,jj) + zmask(ji,jj-1) + zmask(ji,jj+1) 1150 IF (ibtest .LE. 1) THEN 1151 risfdep(ji,jj)=gdepw_1d(jk+1) ; misfdep(ji,jj)=jk+1 1152 IF (misfdep(ji,jj) .GT. mbathy(ji,jj)) misfdep(ji,jj) = jpk 1153 END IF 1154 END IF 1155 END DO 1156 END DO 1157 WHERE (misfdep==jpk) 1158 misfdep=0 ; risfdep=0._wp ; mbathy=0 ; bathy=0._wp 1159 END WHERE 1160 1161 IF( lk_mpp ) THEN 1162 zbathy(:,:) = FLOAT( misfdep(:,:) ) 1163 CALL lbc_lnk( zbathy, 'T', 1. ) 1164 misfdep(:,:) = INT( zbathy(:,:) ) 1165 CALL lbc_lnk( risfdep, 'T', 1. ) 1166 CALL lbc_lnk( bathy, 'T', 1. ) 1167 zbathy(:,:) = FLOAT( mbathy(:,:) ) 1168 CALL lbc_lnk( zbathy, 'T', 1. ) 1169 mbathy(:,:) = INT( zbathy(:,:) ) 1170 ENDIF 1171 END DO 1172 1173 ! fill hole in ice shelf 1174 WHERE (misfdep==0) misfdep=jpk 1175 zmisfdep(:,:)=misfdep(:,:) 1176 zmbathy (:,:)=mbathy (:,:) 1177 DO jj = 2, jpjm1 1178 DO ji = 2, jpim1 1179 ibtest=MIN(zmisfdep(ji-1,jj), zmisfdep(ji+1,jj), zmisfdep(ji,jj-1), zmisfdep(ji,jj+1)) 1180 IF( ibtest > zmisfdep(ji,jj)) THEN 1181 misfdep(ji,jj) = ibtest 1182 risfdep(ji,jj) = gdepw_1d(ibtest) 1183 ENDIF 1184 ENDDO 1185 ENDDO 1186 WHERE (misfdep==jpk) 1187 misfdep=0 ; risfdep=0. ; mbathy=0 ; bathy=0 1188 END WHERE 1189 IF( lk_mpp ) THEN 1190 zbathy(:,:) = FLOAT( misfdep(:,:) ) 1191 CALL lbc_lnk( zbathy, 'T', 1. ) 1192 misfdep(:,:) = INT( zbathy(:,:) ) 1193 CALL lbc_lnk( risfdep, 'T', 1. ) 1194 CALL lbc_lnk( bathy, 'T', 1. ) 1195 zbathy(:,:) = FLOAT( mbathy(:,:) ) 1196 CALL lbc_lnk( zbathy, 'T', 1. ) 1197 mbathy(:,:) = INT( zbathy(:,:) ) 1198 ENDIF 1201 1199 1202 1200 ! fill hole in bathymetry 1203 zmicedep(:,:)=micedep(:,:)1204 zmbathy (:,:)=mbathy (:,:)1201 zmisfdep(:,:)=misfdep(:,:) 1202 zmbathy (:,:)=mbathy (:,:) 1205 1203 DO jj = 2, jpjm1 1206 1204 DO ji = 2, jpim1 … … 1214 1212 END DO 1215 1213 IF( lk_mpp ) THEN 1216 zbathy(:,:) = FLOAT( mi cedep(:,:) )1214 zbathy(:,:) = FLOAT( misfdep(:,:) ) 1217 1215 CALL lbc_lnk( zbathy, 'T', 1. ) 1218 mi cedep(:,:) = INT( zbathy(:,:) )1219 CALL lbc_lnk( icedep, 'T', 1. )1216 misfdep(:,:) = INT( zbathy(:,:) ) 1217 CALL lbc_lnk( risfdep, 'T', 1. ) 1220 1218 CALL lbc_lnk( bathy, 'T', 1. ) 1221 1219 zbathy(:,:) = FLOAT( mbathy(:,:) ) 1222 1220 CALL lbc_lnk( zbathy, 'T', 1. ) 1223 1221 mbathy(:,:) = INT( zbathy(:,:) ) 1224 ENDIF1222 ENDIF 1225 1223 ! remove 1 cell pool of water stuck between ice shelf and bathymetry (need a 3D flood filling tools to do this properly) 1226 DO jk = 1, jpk 1227 WHERE (micedep==0) micedep=jpk 1228 zmicedep(:,:)=micedep(:,:) 1229 zmbathy (:,:)=mbathy (:,:) 1230 DO jj = 2, jpjm1 1231 DO ji = 2, jpim1 1232 IF( jk .GE. zmicedep(ji,jj) .AND. jk .LE. zmbathy(ji,jj) ) THEN 1233 IF( (jk > zmbathy(ji,jj+1) .OR. jk < zmicedep(ji,jj+1)) .AND. & 1234 & (jk > zmbathy(ji,jj-1) .OR. jk < zmicedep(ji,jj-1)) .AND. & 1235 & (jk > zmbathy(ji+1,jj) .OR. jk < zmicedep(ji+1,jj)) .AND. & 1236 & (jk > zmbathy(ji-1,jj) .OR. jk < zmicedep(ji-1,jj)) ) THEN 1237 mbathy(ji,jj) = 0 ; micedep(ji,jj) = jpk ; icedep(ji,jj) = 0._wp ; bathy(ji,jj) = 0._wp 1238 ENDIF 1239 ENDIF 1224 DO jk = 1, jpk 1225 WHERE (misfdep==0) misfdep=jpk 1226 zmisfdep(:,:)=misfdep(:,:) 1227 zmbathy (:,:)=mbathy (:,:) 1228 DO jj = 2, jpjm1 1229 DO ji = 2, jpim1 1230 IF ( jk .GE. zmisfdep(ji,jj) .AND. jk .LE. zmbathy(ji,jj) ) THEN 1231 IF ( (jk > zmbathy(ji,jj+1) .OR. jk < zmisfdep(ji,jj+1)) .AND. & 1232 & (jk > zmbathy(ji,jj-1) .OR. jk < zmisfdep(ji,jj-1)) .AND. & 1233 & (jk > zmbathy(ji+1,jj) .OR. jk < zmisfdep(ji+1,jj)) .AND. & 1234 & (jk > zmbathy(ji-1,jj) .OR. jk < zmisfdep(ji-1,jj)) ) THEN 1235 mbathy(ji,jj) = 0 ; misfdep(ji,jj) = jpk ; risfdep(ji,jj) = 0._wp ; bathy(ji,jj) = 0._wp 1236 ENDIF 1237 ENDIF 1238 ENDDO 1240 1239 ENDDO 1241 ENDDO 1242 WHERE (micedep==jpk) micedep=0 1243 IF( lk_mpp ) THEN 1244 zbathy(:,:) = FLOAT( micedep(:,:) ) 1245 CALL lbc_lnk( zbathy, 'T', 1. ) 1246 micedep(:,:) = INT( zbathy(:,:) ) 1247 CALL lbc_lnk( icedep, 'T', 1. ) 1248 CALL lbc_lnk( bathy, 'T', 1. ) 1249 zbathy(:,:) = FLOAT( mbathy(:,:) ) 1250 CALL lbc_lnk( zbathy, 'T', 1. ) 1251 mbathy(:,:) = INT( zbathy(:,:) ) 1252 ENDIF 1253 ENDDO 1240 WHERE (misfdep==jpk) misfdep=0 1241 IF( lk_mpp ) THEN 1242 zbathy(:,:) = FLOAT( misfdep(:,:) ) 1243 CALL lbc_lnk( zbathy, 'T', 1. ) 1244 misfdep(:,:) = INT( zbathy(:,:) ) 1245 CALL lbc_lnk( risfdep, 'T', 1. ) 1246 CALL lbc_lnk( bathy, 'T', 1. ) 1247 zbathy(:,:) = FLOAT( mbathy(:,:) ) 1248 CALL lbc_lnk( zbathy, 'T', 1. ) 1249 mbathy(:,:) = INT( zbathy(:,:) ) 1250 ENDIF 1251 END DO 1254 1252 END DO 1255 1253 1256 WHERE (mbathy(:,:) < mi cedep(:,:))1257 mi cedep(:,:) = 01258 icedep(:,:) = 0._wp1254 WHERE (mbathy(:,:) < misfdep(:,:)) 1255 misfdep(:,:) = 0 1256 risfdep(:,:) = 0._wp 1259 1257 mbathy(:,:) = 0 1260 1258 bathy(:,:) = 0._wp … … 1338 1336 DO jj = 1, jpj 1339 1337 DO ji = 1, jpi 1340 ik = mi cedep(ji,jj)1338 ik = misfdep(ji,jj) 1341 1339 IF( ik > 1 ) THEN ! ice shelf point only 1342 IF( icedep(ji,jj) < gdepw_1d(ik) ) icedep(ji,jj)= gdepw_1d(ik)1343 gdepw_0(ji,jj,ik) = icedep(ji,jj)1340 IF( risfdep(ji,jj) < gdepw_1d(ik) ) risfdep(ji,jj)= gdepw_1d(ik) 1341 gdepw_0(ji,jj,ik) = risfdep(ji,jj) 1344 1342 !gm Bug? check the gdepw_0 1345 1343 ! ... on ik … … 1358 1356 ! The next line isn't required and doesn't affect results - included for consistency with bathymetry code 1359 1357 gdept_0(ji,jj,ik-1) = gdept_1d(ik-1) 1360 1361 1362 1358 ENDIF 1359 END DO 1360 END DO 1363 1361 ! 1364 1362 it = 0 1365 1363 DO jj = 1, jpj 1366 1364 DO ji = 1, jpi 1367 ik = mi cedep(ji,jj)1365 ik = misfdep(ji,jj) 1368 1366 IF( ik > 1 ) THEN ! ice shelf point only 1369 1367 e3tp (ji,jj) = e3t_0(ji,jj,ik ) … … 1374 1372 it = it + 1 1375 1373 WRITE(numout,*) ' it = ', it, ' ik = ', ik, ' (i,j) = ', ji, jj 1376 WRITE(numout,*) ' icedep = ', icedep(ji,jj)1374 WRITE(numout,*) ' risfdep = ', risfdep(ji,jj) 1377 1375 WRITE(numout,*) ' gdept = ', gdept_0(ji,jj,ik), ' gdepw = ', gdepw_0(ji,jj,ik+1), ' zdiff = ', zdiff 1378 1376 WRITE(numout,*) ' e3tp = ', e3tp(ji,jj), ' e3wp = ', e3wp(ji,jj) … … 1452 1450 1453 1451 ! Compute gdep3w_0 (vertical sum of e3w) 1454 WHERE (mi cedep == 0) micedep = 11452 WHERE (misfdep == 0) misfdep = 1 1455 1453 DO jj = 1,jpj 1456 1454 DO ji = 1,jpi 1457 1455 gdep3w_0(ji,jj,1) = 0.5_wp * e3w_0(ji,jj,1) 1458 DO jk = 2, mi cedep(ji,jj)1456 DO jk = 2, misfdep(ji,jj) 1459 1457 gdep3w_0(ji,jj,jk) = gdep3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk) 1460 1458 END DO 1461 IF (mi cedep(ji,jj) .GE. 2) gdep3w_0(ji,jj,micedep(ji,jj)) = icedep(ji,jj) + 0.5_wp * e3w_0(ji,jj,micedep(ji,jj))1462 DO jk = mi cedep(ji,jj) + 1, jpk1459 IF (misfdep(ji,jj) .GE. 2) gdep3w_0(ji,jj,misfdep(ji,jj)) = risfdep(ji,jj) + 0.5_wp * e3w_0(ji,jj,misfdep(ji,jj)) 1460 DO jk = misfdep(ji,jj) + 1, jpk 1463 1461 gdep3w_0(ji,jj,jk) = gdep3w_0(ji,jj,jk-1) + e3w_0(ji,jj,jk) 1464 1462 END DO … … 1495 1493 CALL wrk_dealloc( jpi, jpj, jpk, zprt ) 1496 1494 CALL wrk_dealloc( jpi, jpj, zmask, zbathy ) 1497 CALL wrk_dealloc( jpi, jpj, zmi cedep, zmbathy )1495 CALL wrk_dealloc( jpi, jpj, zmisfdep, zmbathy ) 1498 1496 ! 1499 1497 IF( nn_timing == 1 ) CALL timing_stop('zgr_zps') -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90
r4724 r4726 410 410 411 411 ! compute rhd at the ice/oce interface (ice shelf side) 412 CALL eos(ztstop, icedep,zrhdtop_isf)412 CALL eos(ztstop,risfdep,zrhdtop_isf) 413 413 414 414 ! compute rhd at the ice/oce interface (ocean side) … … 420 420 END DO 421 421 END DO 422 CALL eos(ztstop, icedep,zrhdtop_oce)422 CALL eos(ztstop,risfdep,zrhdtop_oce) 423 423 ! 424 424 ! Surface value + ice shelf gradient -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
r4724 r4726 111 111 ! 112 112 z1_rau0 = 0.5_wp * r1_rau0 113 ssha(:,:) = ( sshb(:,:) - z2dt * ( z1_rau0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * lmask(:,:)113 ssha(:,:) = ( sshb(:,:) - z2dt * ( z1_rau0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * ssmask(:,:) 114 114 115 115 #if ! defined key_dynspg_ts … … 291 291 ELSE !** Leap-Frog time-stepping: Asselin filter + swap 292 292 sshb(:,:) = sshn(:,:) + atfp * ( sshb(:,:) - 2 * sshn(:,:) + ssha(:,:) ) ! before <-- now filtered 293 IF( lk_vvl ) sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( emp_b(:,:) - emp(:,:) ) * lmask(:,:)293 IF( lk_vvl ) sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( emp_b(:,:) - emp(:,:) ) * ssmask(:,:) 294 294 sshn(:,:) = ssha(:,:) ! now <-- after 295 295 ENDIF -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/LDF/ldfeiv.F90
r4666 r4726 165 165 zross(ji,jj) = MAX( MIN( .4 * zn(ji,jj) / zfw, 40.e3 ), 2.e3 ) 166 166 ! Compute aeiw by multiplying Ro^2 and T^-1 167 aeiw(ji,jj) = zross(ji,jj) * zross(ji,jj) * SQRT( zah(ji,jj) / zhw(ji,jj) ) * lmask(ji,jj)167 aeiw(ji,jj) = zross(ji,jj) * zross(ji,jj) * SQRT( zah(ji,jj) / zhw(ji,jj) ) * ssmask(ji,jj) 168 168 END DO 169 169 END DO -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90
r4666 r4726 51 51 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:) :: rhisf_tbl, rhisf_tbl_0 !:depth of ice shelf base ???? 52 52 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:) :: r1_hisf_tbl !:1/depth of ice shelf base ???? 53 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:) :: ralpha !:proportion of bottom cell influenced by boundary layer 53 54 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:) :: risfLeff !:effective length (Leff) BG03 nn_isf==2 ? 54 55 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:) :: ttbl, stbl, utbl, vtbl !:top boundary layer variable at T point … … 85 86 INTEGER :: ikt, ikb ! top and bottom level of the isf boundary layer 86 87 REAL(wp) :: rmin 88 REAL(wp) :: zhk 87 89 CHARACTER(len=256) :: cfisf, cvarzisf, cvarhisf ! name for isf file 88 90 CHARACTER(LEN=256) :: cnameis ! name of iceshelf file … … 188 190 189 191 rhisf_tbl_0(:,:) = rhisf_tbl(:,:) 190 191 END IF192 193 IF( MOD( kt-1, nn_fsbc) == 0 ) THEN194 192 195 193 ! compute bottom level of isf tbl and thickness of tbl below the ice shelf 196 ! need to be move out of this test for vvl case197 194 DO jj = 1,jpj 198 195 DO ji = 1,jpi … … 200 197 ikb = misfkt(ji,jj) 201 198 ! thickness of boundary layer at least the top level thickness 202 rhisf_tbl(ji,jj) = MAX(rhisf_tbl_0(ji,jj), fse3t (ji,jj,ikt))199 rhisf_tbl(ji,jj) = MAX(rhisf_tbl_0(ji,jj), fse3t_n(ji,jj,ikt)) 203 200 204 201 ! determine the deepest level influenced by the boundary layer 205 202 ! test on tmask useless ????? 206 203 DO jk = ikt, mbkt(ji,jj) 207 IF ( (SUM(fse3t (ji,jj,ikt:jk-1)) .LT. rhisf_tbl(ji,jj)) .AND. (tmask(ji,jj,jk) == 1) ) ikb = jk204 IF ( (SUM(fse3t_n(ji,jj,ikt:jk-1)) .LT. rhisf_tbl(ji,jj)) .AND. (tmask(ji,jj,jk) == 1) ) ikb = jk 208 205 END DO 209 rhisf_tbl(ji,jj) = MIN(rhisf_tbl(ji,jj), SUM(fse3t (ji,jj,ikt:ikb))) ! limit the tbl to water thickness.206 rhisf_tbl(ji,jj) = MIN(rhisf_tbl(ji,jj), SUM(fse3t_n(ji,jj,ikt:ikb))) ! limit the tbl to water thickness. 210 207 misfkb(ji,jj) = ikb ! last wet level of the tbl 211 208 r1_hisf_tbl(ji,jj) = 1._wp / rhisf_tbl(ji,jj) 209 210 zhk = SUM( fse3t(ji, jj, ikt:ikb - 1)) * r1_hisf_tbl(ji,jj) ! proportion of tbl cover by cell from ikt to ikb - 1 211 ralpha(ji,jj) = rhisf_tbl(ji,jj) * (1._wp - zhk ) / fse3t(ji,jj,ikb) ! proportion of bottom cell influenced by boundary layer 212 212 END DO 213 213 END DO 214 215 ! initialisation 216 risf_tsc_b(:,:,:)=risf_tsc(:,:,:) ; fwfisf_b(:,:) = fwfisf(:,:) 214 215 END IF 216 217 ! ! ---------------------------------------- ! 218 IF( kt /= nit000 ) THEN ! Swap of forcing fields ! 219 ! ! ---------------------------------------- ! 220 fwfisf_b (:,: ) = fwfisf (:,: ) ! Swap the ocean forcing fields except at nit000 221 risf_tsc_b(:,:,:) = risf_tsc(:,:,:) ! where before fields are set at the end of the routine 222 ! 223 ENDIF 224 225 IF( MOD( kt-1, nn_fsbc) == 0 ) THEN 226 227 217 228 ! compute salf and heat flux 218 229 IF (nn_isf == 1) THEN … … 282 293 CALL iom_put('qisf' , qisf) 283 294 CALL iom_put('fwfisf', fwfisf * stbl(:,:) / soce ) 284 ! CALL iom_put('misfkt', misfkt*1._wp)285 ! CALL iom_put('misfkb', misfkb*1._wp)286 ! CALL iom_put('rhisf', rhisf_tbl)287 295 END IF 288 296 … … 298 306 & fwfisf_b(jpi,jpj), misfkt(jpi,jpj), rhisf_tbl(jpi,jpj), r1_hisf_tbl(jpi,jpj), & 299 307 & rzisf_tbl(jpi,jpj), misfkb(jpi,jpj), ttbl(jpi,jpj), stbl(jpi,jpj), utbl(jpi,jpj), & 300 & vtbl(jpi, jpj), risfLeff(jpi,jpj), rhisf_tbl_0(jpi,jpj), STAT= sbc_isf_alloc )308 & vtbl(jpi, jpj), risfLeff(jpi,jpj), rhisf_tbl_0(jpi,jpj), ralpha(jpi,jpj), STAT= sbc_isf_alloc ) 301 309 ! 302 310 IF( lk_mpp ) CALL mpp_sum ( sbc_isf_alloc ) … … 491 499 zeps1=rcp*rau0*zgammat 492 500 zeps2=lfusisf*rau0*zgammas 493 zeps3=rhoisf*rcpi*kappa/ icedep(ji,jj)494 zeps4=zlamb2+zlamb3* icedep(ji,jj)501 zeps3=rhoisf*rcpi*kappa/risfdep(ji,jj) 502 zeps4=zlamb2+zlamb3*risfdep(ji,jj) 495 503 zeps6=zeps4-zti(ji,jj) 496 504 zeps7=zeps4-tsurf … … 742 750 DO jj = 2,jpj 743 751 DO ji = 2,jpi 744 IF ( lmask(ji,jj) == 1) THEN752 IF (ssmask(ji,jj) == 1) THEN 745 753 ikt = mkt(ji,jj) 746 754 ikb = mkb(ji,jj) … … 748 756 ! level fully include in the ice shelf boundary layer 749 757 DO jk = ikt, ikb - 1 750 ze3 = fse3t (ji,jj,jk)758 ze3 = fse3t_n(ji,jj,jk) 751 759 IF (cptin == 'T' ) varout(ji,jj) = varout(ji,jj) + varin(ji,jj,jk) * r1_hisf_tbl(ji,jj) * ze3 752 760 IF (cptin == 'U' ) varout(ji,jj) = varout(ji,jj) + 0.5_wp * (varin(ji,jj,jk) + varin(ji-1,jj,jk)) & … … 757 765 758 766 ! level partially include in ice shelf boundary layer 759 zhk = SUM( fse3t (ji, jj, ikt:ikb - 1)) * r1_hisf_tbl(ji,jj)767 zhk = SUM( fse3t_n(ji, jj, ikt:ikb - 1)) * r1_hisf_tbl(ji,jj) 760 768 IF (cptin == 'T') varout(ji,jj) = varout(ji,jj) + varin(ji,jj,ikb) * (1._wp - zhk) 761 769 IF (cptin == 'U') varout(ji,jj) = varout(ji,jj) + 0.5_wp * (varin(ji,jj,ikb) + varin(ji-1,jj,ikb)) * (1._wp - zhk) … … 791 799 INTEGER(wp) :: ikt, ikb 792 800 INTEGER(wp) :: nk_isf 793 REAL(wp) :: zalpha,zhk, z1_hisf_tbl, zhisf_tbl794 REAL(wp) :: zfact ! local scalar801 REAL(wp) :: zhk, z1_hisf_tbl, zhisf_tbl 802 REAL(wp) :: zfact ! local scalar 795 803 !!---------------------------------------------------------------------- 796 804 ! … … 813 821 misfkb(ji,jj) = ikb ! last wet level of the tbl 814 822 r1_hisf_tbl(ji,jj) = 1._wp / rhisf_tbl(ji,jj) 823 824 zhk = SUM( fse3t(ji, jj, ikt:ikb - 1)) * r1_hisf_tbl(ji,jj) ! proportion of tbl cover by cell from ikt to ikb - 1 825 ralpha(ji,jj) = rhisf_tbl(ji,jj) * (1._wp - zhk ) / fse3t(ji,jj,ikb) ! proportion of bottom cell influenced by boundary layer 815 826 END DO 816 827 END DO … … 819 830 DO jj = 1,jpj 820 831 DO ji = 1,jpi 821 IF (lmask(ji,jj) == 1) THEN822 832 ikt = misfkt(ji,jj) 823 833 ikb = misfkb(ji,jj) 824 834 ! level fully include in the ice shelf boundary layer 825 835 DO jk = ikt, ikb - 1 826 phdivn(ji,jj,jk) = phdivn(ji,jj,jk) + ( fwfisf(ji,jj) + fwfisf_b(ji,jj) ) * r1_hisf_tbl(ji,jj) * r1_rau0 * zfact836 phdivn(ji,jj,jk) = phdivn(ji,jj,jk) + ( fwfisf(ji,jj) + fwfisf_b(ji,jj) ) * r1_hisf_tbl(ji,jj) * r1_rau0 * zfact 827 837 END DO 828 838 ! level partially include in ice shelf boundary layer 829 zhk = SUM( fse3t(ji, jj, ikt:ikb - 1)) * r1_hisf_tbl(ji,jj) ! proportion of tbl cover by cell from ikt to ikb - 1 830 zalpha = rhisf_tbl(ji,jj) * (1._wp - zhk ) / fse3t(ji,jj,ikb) ! proportion of bottom cell influenced by boundary layer 831 phdivn(ji,jj,ikb) = phdivn(ji,jj,ikb) + ( fwfisf(ji,jj) + fwfisf_b(ji,jj) ) * zalpha * r1_rau0 * zfact * r1_hisf_tbl(ji,jj) 839 phdivn(ji,jj,ikb) = phdivn(ji,jj,ikb) + ( fwfisf(ji,jj) + fwfisf_b(ji,jj) ) * r1_hisf_tbl(ji,jj) * r1_rau0 * zfact * ralpha(ji,jj) 832 840 !== ice shelf melting mass distributed over several levels ==! 833 END IF834 841 END DO 835 842 END DO -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90
r4666 r4726 405 405 DO jj = 1, jpj 406 406 DO ji = 1, jpi ! vector opt. 407 zmask = lmask(ji,jj) ! land/sea bottom mask = surf. mask407 zmask = ssmask(ji,jj) ! land/sea bottom mask = surf. mask 408 408 zt = pts (ji,jj,jp_tem) ! interpolated T 409 409 zs = pts (ji,jj,jp_sal) ! interpolated S … … 447 447 DO jj = 1, jpj 448 448 DO ji = 1, jpi ! vector opt. 449 prd(ji,jj) = ( 0.0285_wp - rn_alpha * pts(ji,jj,jp_tem) ) * lmask(ji,jj)449 prd(ji,jj) = ( 0.0285_wp - rn_alpha * pts(ji,jj,jp_tem) ) * ssmask(ji,jj) 450 450 END DO 451 451 END DO … … 454 454 DO jj = 1, jpj 455 455 DO ji = 1, jpi ! vector opt. 456 prd(ji,jj) = ( rn_beta * pts(ji,jj,jp_sal) - rn_alpha * pts(ji,jj,jp_tem) ) * lmask(ji,jj)456 prd(ji,jj) = ( rn_beta * pts(ji,jj,jp_sal) - rn_alpha * pts(ji,jj,jp_tem) ) * ssmask(ji,jj) 457 457 END DO 458 458 END DO -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90
r4666 r4726 420 420 #endif 421 421 ik = mbkt(ji,jj) ! bottom T-level index 422 ztb (ji,jj) = tsb(ji,jj,ik,jp_tem) * lmask(ji,jj) ! bottom before T and S423 zsb (ji,jj) = tsb(ji,jj,ik,jp_sal) * lmask(ji,jj)422 ztb (ji,jj) = tsb(ji,jj,ik,jp_tem) * ssmask(ji,jj) ! bottom before T and S 423 zsb (ji,jj) = tsb(ji,jj,ik,jp_sal) * ssmask(ji,jj) 424 424 zdep(ji,jj) = gdept_0(ji,jj,ik) ! bottom T-level reference depth 425 425 ! -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90
r4724 r4726 230 230 DO jk = ikt, ikb - 1 231 231 ! compute tfreez for the temperature correction (we add water at freezing temperature) 232 zpress = grav*rau0*fsdept(ji,jj,jk)*1.e-04232 ! zpress = grav*rau0*fsdept(ji,jj,jk)*1.e-04 233 233 zt_frz = -1.9 !tfreez1D( tsn(ji,jj,jk,jp_sal), zpress ) 234 234 ! compute trend … … 242 242 243 243 ! level partially include in ice shelf boundary layer 244 zhk = SUM( fse3t(ji, jj, ikt:ikb - 1)) * r1_hisf_tbl(ji,jj) ! proportion of tbl cover by cell from ikt to ikb - 1245 zalpha = rhisf_tbl(ji,jj) * ( 1._wp - zhk ) / fse3t(ji,jj,ikb) ! proportion of bottom cell influenced by boundary layer246 244 ! compute tfreez for the temperature correction (we add water at freezing temperature) 247 zpress = grav*rau0*fsdept(ji,jj,ikb)*1.e-04245 ! zpress = grav*rau0*fsdept(ji,jj,ikb)*1.e-04 248 246 zt_frz = -1.9 !tfreez1D( tsn(ji,jj,ikb,jp_sal), zpress ) 249 247 ! compute trend … … 251 249 & + zfact * (risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) & 252 250 & - rdivisf * (fwfisf(ji,jj) + fwfisf_b(ji,jj)) * zt_frz * r1_rau0) & 253 & * r1_hisf_tbl(ji,jj) * zalpha251 & * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) 254 252 tsa(ji,jj,ikb,jp_sal) = tsa(ji,jj,ikb,jp_sal) & 255 & + zfact * (risf_tsc_b(ji,jj,jp_sal) + risf_tsc(ji,jj,jp_sal)) * r1_hisf_tbl(ji,jj) * zalpha253 & + zfact * (risf_tsc_b(ji,jj,jp_sal) + risf_tsc(ji,jj,jp_sal)) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) 256 254 END DO 257 255 END DO -
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90
r4666 r4726 425 425 ! only the energy available for mixing is taken into account, 426 426 ! (mixing efficiency tidal dissipation efficiency) 427 en_tmx(:,:) = - rn_tfe * rn_me * ( zem2(:,:) * 1.25 + zek1(:,:) ) * lmask(:,:)427 en_tmx(:,:) = - rn_tfe * rn_me * ( zem2(:,:) * 1.25 + zek1(:,:) ) * ssmask(:,:) 428 428 429 429 ! Vertical structure (az_tmx)
Note: See TracChangeset
for help on using the changeset viewer.