Changeset 10292 for NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/ICE/icedyn_adv_umx.F90
- Timestamp:
- 2018-11-09T16:35:08+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/ICE/icedyn_adv_umx.F90
r10180 r10292 83 83 ALLOCATE( zpato(jpi,jpj,1) ) 84 84 ! 85 ! --- If ice drift field is too fast, use an appropriate time step for advection (CFL test for stability) --- ! 86 zcfl = MAXVAL( ABS( pu_ice(:,:) ) * rdt_ice * r1_e1u(:,:) ) 87 zcfl = MAX( zcfl, MAXVAL( ABS( pv_ice(:,:) ) * rdt_ice * r1_e2v(:,:) ) ) 88 IF( lk_mpp ) CALL mpp_max( zcfl ) 89 90 IF( zcfl > 0.5 ) THEN ; initad = 2 ; zusnit = 0.5_wp 91 ELSE ; initad = 1 ; zusnit = 1.0_wp 85 ! --- If ice drift field is too fast, use an appropriate time step for advection (CFL test for stability) --- ! 86 ! When needed, the advection split is applied at the next time-step in order to avoid blocking global comm. 87 ! ...this should not affect too much the stability... Was ok on the tests we did... 88 zcfl = MAXVAL( ABS( pu_ice(:,:) ) * rdt_ice * r1_e1u(:,:) ) 89 zcfl = MAX( zcfl, MAXVAL( ABS( pv_ice(:,:) ) * rdt_ice * r1_e2v(:,:) ) ) 90 IF( zcfl > 0.5 ) THEN ; l_split_advumx(1) = .TRUE. ! split advection time-step if CFL violated 91 ELSE ; l_split_advumx(1) = .FALSE. 92 ENDIF 93 94 ! non-blocking global communication send l_split_advumx(1) and receive l_split_advumx(2) 95 IF( lk_mpp ) CALL mpp_ilor( l_split_advumx, ldlast = kt == nitend - nn_fsbc + 1 ) 96 97 IF( l_split_advumx(2) ) THEN ; initad = 2 ; zusnit = 0.5_wp ! split defined at the previous time-step 98 ELSE ; initad = 1 ; zusnit = 1.0_wp 92 99 ENDIF 93 100 … … 120 127 DO jt = 1, initad 121 128 CALL adv_umx( k_order, kt, 1, zdt, zudy, zvdx, zcu_box, zcv_box, zpato(:,:,1) ) ! Open water area 129 CALL lbc_lnk( 'icedyn_adv_umx', zpato, 'T', 1. ) 122 130 CALL adv_umx( k_order, kt, jpl, zdt, zudy, zvdx, zcu_box, zcv_box, pa_i(:,:,:) ) ! Ice area 123 131 CALL adv_umx( k_order, kt, jpl, zdt, zudy, zvdx, zcu_box, zcv_box, pv_i(:,:,:) ) ! Ice volume … … 127 135 CALL adv_umx( k_order, kt, jpl, zdt, zudy, zvdx, zcu_box, zcv_box, pe_i(:,:,jk,:) ) ! Ice heat content 128 136 END DO 137 CALL lbc_lnk( 'icedyn_adv_umx', pe_i, 'T', 1. ) 138 129 139 CALL adv_umx( k_order, kt, jpl, zdt, zudy, zvdx, zcu_box, zcv_box, pv_s(:,:,:) ) ! Snow volume 130 140 DO jk = 1, nlay_s 131 141 CALL adv_umx( k_order, kt, jpl, zdt, zudy, zvdx, zcu_box, zcv_box, pe_s(:,:,jk,:) ) ! Snow heat content 132 142 END DO 143 CALL lbc_lnk( 'icedyn_adv_umx', pe_s, 'T', 1. ) 144 133 145 IF ( ln_pnd_H12 ) THEN 134 146 CALL adv_umx( k_order, kt, jpl, zdt, zudy, zvdx, zcu_box, zcv_box, pa_ip(:,:,:) ) ! Melt pond fraction 135 147 CALL adv_umx( k_order, kt, jpl, zdt, zudy, zvdx, zcu_box, zcv_box, pv_ip(:,:,:) ) ! Melt pond volume 148 CALL lbc_lnk_multi( 'icedyn_adv_umx', pa_i, 'T', 1., pv_i, 'T', 1., psv_i, 'T', 1., & 149 & poa_i, 'T', 1., pv_s, 'T', 1., pa_ip, 'T', 1., & 150 & pv_ip, 'T', 1. ) 151 ELSE 152 CALL lbc_lnk_multi( 'icedyn_adv_umx', pa_i, 'T', 1., pv_i, 'T', 1., psv_i, 'T', 1., & 153 & poa_i, 'T', 1., pv_s, 'T', 1. ) 136 154 ENDIF 137 155 END DO … … 249 267 END DO 250 268 END DO 251 CALL lbc_lnk( 'icedyn_adv_umx', ptc, 'T', 1. )252 269 ! 253 270 END SUBROUTINE adv_umx
Note: See TracChangeset
for help on using the changeset viewer.