- Timestamp:
- 2014-07-23T18:27:21+02:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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')
Note: See TracChangeset
for help on using the changeset viewer.