- Timestamp:
- 2020-10-01T13:33:30+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/SWE/domvvl.F90
r13295 r13553 276 276 IF( cn_cfg == "orca" .OR. cn_cfg == "ORCA" ) THEN 277 277 IF( nn_cfg == 3 ) THEN ! ORCA2: Suppress ztilde in the Foxe Basin for ORCA2 278 ii0 = 103 ; ii1 = 111279 ij0 = 128 ; ij1 = 135 ;278 ii0 = 103 + nn_hls - 1 ; ii1 = 111 + nn_hls - 1 279 ij0 = 128 + nn_hls ; ij1 = 135 + nn_hls 280 280 frq_rst_e3t( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.0_wp 281 281 frq_rst_hdv( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0_wp / rn_Dt … … 415 415 LOGICAL :: ll_do_bclinic ! local logical 416 416 REAL(wp), DIMENSION(jpi,jpj) :: zht, z_scale, zwu, zwv, zhdiv 417 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3t 417 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ze3t 418 LOGICAL , DIMENSION(:,:,:), ALLOCATABLE :: llmsk 418 419 !!---------------------------------------------------------------------- 419 420 ! … … 528 529 ! Maximum deformation control 529 530 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 531 ALLOCATE( ze3t(jpi,jpj,jpk), llmsk(jpi,jpj,jpk) ) 530 532 ze3t(:,:,jpk) = 0._wp 531 533 DO jk = 1, jpkm1 532 534 ze3t(:,:,jk) = tilde_e3t_a(:,:,jk) / e3t_0(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) 533 535 END DO 534 z_tmax = MAXVAL( ze3t(:,:,:) ) 535 CALL mpp_max( 'domvvl', z_tmax ) ! max over the global domain 536 z_tmin = MINVAL( ze3t(:,:,:) ) 537 CALL mpp_min( 'domvvl', z_tmin ) ! min over the global domain 536 ! 537 llmsk( 1:Nis1,:,:) = .FALSE. ! exclude halos from the checked region 538 llmsk(Nie1: jpi,:,:) = .FALSE. 539 llmsk(:, 1:Njs1,:) = .FALSE. 540 llmsk(:,Nje1: jpj,:) = .FALSE. 541 ! 542 llmsk(Nis0:Nie0,Njs0:Nje0,:) = tmask(Nis0:Nie0,Njs0:Nje0,:) == 1._wp ! define only the inner domain 543 z_tmax = MAXVAL( ze3t(:,:,:), mask = llmsk ) ; CALL mpp_max( 'domvvl', z_tmax ) ! max over the global domain 544 z_tmin = MINVAL( ze3t(:,:,:), mask = llmsk ) ; CALL mpp_min( 'domvvl', z_tmin ) ! min over the global domain 538 545 ! - ML - test: for the moment, stop simulation for too large e3_t variations 539 546 IF( ( z_tmax > rn_zdef_max ) .OR. ( z_tmin < - rn_zdef_max ) ) THEN 540 IF( lk_mpp ) THEN 541 CALL mpp_maxloc( 'domvvl', ze3t, tmask, z_tmax, ijk_max ) 542 CALL mpp_minloc( 'domvvl', ze3t, tmask, z_tmin, ijk_min ) 543 ELSE 544 ijk_max = MAXLOC( ze3t(:,:,:) ) 545 ijk_max(1) = ijk_max(1) + nimpp - 1 546 ijk_max(2) = ijk_max(2) + njmpp - 1 547 ijk_min = MINLOC( ze3t(:,:,:) ) 548 ijk_min(1) = ijk_min(1) + nimpp - 1 549 ijk_min(2) = ijk_min(2) + njmpp - 1 550 ENDIF 547 CALL mpp_maxloc( 'domvvl', ze3t, llmsk, z_tmax, ijk_max ) 548 CALL mpp_minloc( 'domvvl', ze3t, llmsk, z_tmin, ijk_min ) 551 549 IF (lwp) THEN 552 550 WRITE(numout, *) 'MAX( tilde_e3t_a(:,:,:) / e3t_0(:,:,:) ) =', z_tmax … … 557 555 ENDIF 558 556 ENDIF 557 DEALLOCATE( ze3t, llmsk ) 559 558 ! - ML - end test 560 559 ! - ML - Imposing these limits will cause a baroclinicity error which is corrected for below … … 697 696 LOGICAL :: ll_do_bclinic ! local logical 698 697 REAL(wp), DIMENSION(jpi,jpj) :: zht, z_scale, zwu, zwv, zhdiv 699 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3t700 698 !!---------------------------------------------------------------------- 701 699 ! … … 1107 1105 IF( ln_rstart ) THEN !* Read the restart file 1108 1106 CALL rst_read_open ! open the restart file if necessary 1109 CALL iom_get( numror, jpdom_auto glo, 'sshn' , ssh(:,:,Kmm), ldxios = lrxios )1107 CALL iom_get( numror, jpdom_auto, 'sshn' , ssh(:,:,Kmm), ldxios = lrxios ) 1110 1108 ! 1111 1109 id1 = iom_varid( numror, 'e3t_b', ldstop = .FALSE. ) … … 1120 1118 ! 1121 1119 IF( MIN( id1, id2 ) > 0 ) THEN ! all required arrays exist 1122 CALL iom_get( numror, jpdom_auto glo, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lrxios )1123 CALL iom_get( numror, jpdom_auto glo, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lrxios )1120 CALL iom_get( numror, jpdom_auto, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lrxios ) 1121 CALL iom_get( numror, jpdom_auto, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lrxios ) 1124 1122 ! needed to restart if land processor not computed 1125 1123 IF(lwp) write(numout,*) 'dom_vvl_rst : e3t(:,:,:,Kbb) and e3t(:,:,:,Kmm) found in restart files' … … 1135 1133 IF(lwp) write(numout,*) 'e3t_n set equal to e3t_b.' 1136 1134 IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 1137 CALL iom_get( numror, jpdom_auto glo, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lrxios )1135 CALL iom_get( numror, jpdom_auto, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lrxios ) 1138 1136 e3t(:,:,:,Kmm) = e3t(:,:,:,Kbb) 1139 1137 l_1st_euler = .true. … … 1142 1140 IF(lwp) write(numout,*) 'e3t_b set equal to e3t_n.' 1143 1141 IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 1144 CALL iom_get( numror, jpdom_auto glo, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lrxios )1142 CALL iom_get( numror, jpdom_auto, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lrxios ) 1145 1143 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 1146 1144 l_1st_euler = .true. … … 1167 1165 ! ! ----------------------- ! 1168 1166 IF( MIN( id3, id4 ) > 0 ) THEN ! all required arrays exist 1169 CALL iom_get( numror, jpdom_auto glo, 'tilde_e3t_b', tilde_e3t_b(:,:,:), ldxios = lrxios )1170 CALL iom_get( numror, jpdom_auto glo, 'tilde_e3t_n', tilde_e3t_n(:,:,:), ldxios = lrxios )1167 CALL iom_get( numror, jpdom_auto, 'tilde_e3t_b', tilde_e3t_b(:,:,:), ldxios = lrxios ) 1168 CALL iom_get( numror, jpdom_auto, 'tilde_e3t_n', tilde_e3t_n(:,:,:), ldxios = lrxios ) 1171 1169 ELSE ! one at least array is missing 1172 1170 tilde_e3t_b(:,:,:) = 0.0_wp … … 1177 1175 ! ! ------------ ! 1178 1176 IF( id5 > 0 ) THEN ! required array exists 1179 CALL iom_get( numror, jpdom_auto glo, 'hdiv_lf', hdiv_lf(:,:,:), ldxios = lrxios )1177 CALL iom_get( numror, jpdom_auto, 'hdiv_lf', hdiv_lf(:,:,:), ldxios = lrxios ) 1180 1178 ELSE ! array is missing 1181 1179 hdiv_lf(:,:,:) = 0.0_wp
Note: See TracChangeset
for help on using the changeset viewer.