Changeset 8888 for branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
- Timestamp:
- 2017-12-04T12:04:58+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r8842 r8888 77 77 78 78 !! Time filtered arrays at baroclinic time step: 79 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: un_adv , vn_adv !: Advection vel.at "now" barocl. step79 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: un_adv , vn_adv !: Advection fluxes at "now" barocl. step 80 80 81 81 !! * Substitutions … … 128 128 !! -Update the filtered free surface at step "n+1" : ssha 129 129 !! -Update filtered barotropic velocities at step "n+1" : ua_b, va_b 130 !! -Compute barotropic advective velocities at step "n": un_adv, vn_adv130 !! -Compute barotropic advective fluxes at step "n" : un_adv, vn_adv 131 131 !! These are used to advect tracers and are compliant with discrete 132 132 !! continuity equation taken at the baroclinic time steps. This … … 1030 1030 ! 1031 1031 ! Set advection velocity correction: 1032 zwx(:,:) = un_adv(:,:) 1033 zwy(:,:) = vn_adv(:,:) 1034 IF ( kt == nit000 .AND. neuler==0 ) un_bf(:,:) = 0._wp ; vn_bf(:,:) = 0._wp 1035 ! 1036 IF( ( kt == nit000 .AND. neuler==0 ) .OR. .NOT.ln_bt_fw ) THEN 1037 un_adv(:,:) = zwx(:,:) * r1_hu_n(:,:) 1038 vn_adv(:,:) = zwy(:,:) * r1_hv_n(:,:) 1039 ELSE 1040 un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zwx(:,:) - atfp * un_bf(:,:) ) * r1_hu_n(:,:) 1041 vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zwy(:,:) - atfp * vn_bf(:,:) ) * r1_hv_n(:,:) 1042 ! Update corrective fluxes for next time step: 1043 un_bf(:,:) = atfp * un_bf(:,:) + (zwx(:,:) - ub2_b(:,:)) 1044 vn_bf(:,:) = atfp * vn_bf(:,:) + (zwy(:,:) - vb2_b(:,:)) 1045 END IF 1046 1047 IF( ln_bt_fw ) THEN ! Save integrated transport for next computation 1032 IF (ln_bt_fw) THEN 1033 zwx(:,:) = un_adv(:,:) 1034 zwy(:,:) = vn_adv(:,:) 1035 IF( .NOT.( kt == nit000 .AND. neuler==0 ) ) THEN 1036 un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zwx(:,:) - atfp * un_bf(:,:) ) 1037 vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zwy(:,:) - atfp * vn_bf(:,:) ) 1038 ! 1039 ! Update corrective fluxes for next time step: 1040 un_bf(:,:) = atfp * un_bf(:,:) + (zwx(:,:) - ub2_b(:,:)) 1041 vn_bf(:,:) = atfp * vn_bf(:,:) + (zwy(:,:) - vb2_b(:,:)) 1042 ELSE 1043 un_bf(:,:) = 0._wp 1044 vn_bf(:,:) = 0._wp 1045 END IF 1046 ! Save integrated transport for next computation 1048 1047 ub2_b(:,:) = zwx(:,:) 1049 1048 vb2_b(:,:) = zwy(:,:) … … 1081 1080 DO jk = 1, jpkm1 1082 1081 ! Correct velocities: 1083 un(:,:,jk) = ( un(:,:,jk) + un_adv(:,:) - un_b(:,:) ) * umask(:,:,jk)1084 vn(:,:,jk) = ( vn(:,:,jk) + vn_adv(:,:) - vn_b(:,:) ) * vmask(:,:,jk)1082 un(:,:,jk) = ( un(:,:,jk) + un_adv(:,:)*r1_hu_n(:,:) - un_b(:,:) ) * umask(:,:,jk) 1083 vn(:,:,jk) = ( vn(:,:,jk) + vn_adv(:,:)*r1_hv_n(:,:) - vn_b(:,:) ) * vmask(:,:,jk) 1085 1084 ! 1086 1085 END DO 1087 1086 ! 1088 CALL iom_put( "ubar", un_adv(:,:) 1089 CALL iom_put( "vbar", vn_adv(:,:) 1087 CALL iom_put( "ubar", un_adv(:,:)*r1_hu_n(:,:) ) ! barotropic i-current 1088 CALL iom_put( "vbar", vn_adv(:,:)*r1_hv_n(:,:) ) ! barotropic i-current 1090 1089 ! 1091 1090 #if defined key_agrif … … 1320 1319 #endif 1321 1320 ! 1322 IF(lwp) WRITE(numout,*) ' Time filter choice, nn_bt_flt: ', nn_bt_flt 1323 SELECT CASE ( nn_bt_flt ) 1324 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' Dirac' 1325 CASE( 1 ) ; IF(lwp) WRITE(numout,*) ' Boxcar: width = nn_baro' 1326 CASE( 2 ) ; IF(lwp) WRITE(numout,*) ' Boxcar: width = 2*nn_baro' 1327 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for nn_bt_flt: should 0,1,2' ) 1328 END SELECT 1321 IF(ln_bt_av) THEN 1322 IF(lwp) WRITE(numout,*) ' Time filter choice, nn_bt_flt: ', nn_bt_flt 1323 SELECT CASE ( nn_bt_flt ) 1324 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' Dirac' 1325 CASE( 1 ) ; IF(lwp) WRITE(numout,*) ' Boxcar: width = nn_baro' 1326 CASE( 2 ) ; IF(lwp) WRITE(numout,*) ' Boxcar: width = 2*nn_baro' 1327 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for nn_bt_flt: should 0,1,2' ) 1328 END SELECT 1329 ENDIF 1329 1330 ! 1330 1331 IF(lwp) WRITE(numout,*) ' ' … … 1339 1340 ENDIF 1340 1341 1341 IF ( ln_bt_av.AND.(rn_bt_alpha > 0._wp) ) THEN 1342 CALL ctl_stop( 'dynspg_ts ERROR: if rn_bt_alpha > 0, remove temporal averaging' ) 1342 IF ( ln_bt_av.AND.(rn_bt_alpha /= 0._wp) ) THEN 1343 CALL ctl_warn( 'dynspg_ts: with temporal averaging, we assume rn_bt_alpha=0.') 1344 rn_bt_alpha=0._wp 1343 1345 ENDIF 1344 1346 !
Note: See TracChangeset
for help on using the changeset viewer.