- Timestamp:
- 2020-02-25T18:24:46+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/r12083_cpl-pressure/src/OCE/SBC/sbcssm.F90
r11715 r12461 28 28 29 29 PUBLIC sbc_ssm ! routine called by step.F90 30 PUBLIC sbc_ssm_cpl ! routine called by sbccpl.F90 30 31 PUBLIC sbc_ssm_init ! routine called by sbcmod.F90 31 32 … … 76 77 sss_m(:,:) = zts(:,:,jp_sal) 77 78 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 78 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 79 ELSE ; ssh_m(:,:) = sshn(:,:) 79 IF( .NOT. cpl_mslp ) THEN 80 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 81 ELSE ; ssh_m(:,:) = sshn(:,:) 82 ENDIF 80 83 ENDIF 81 84 ! … … 99 102 sss_m(:,:) = zcoef * zts(:,:,jp_sal) 100 103 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 101 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 102 ELSE ; ssh_m(:,:) = zcoef * sshn(:,:) 104 IF( .NOT. cpl_mslp ) THEN 105 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 106 ELSE ; ssh_m(:,:) = zcoef * sshn(:,:) 107 ENDIF 103 108 ENDIF 104 109 ! … … 113 118 sst_m(:,:) = 0._wp 114 119 sss_m(:,:) = 0._wp 115 ssh_m(:,:) = 0._wp120 IF( .NOT. cpl_mslp ) ssh_m(:,:) = 0._wp 116 121 e3t_m(:,:) = 0._wp 117 122 frq_m(:,:) = 0._wp … … 127 132 sss_m(:,:) = sss_m(:,:) + zts(:,:,jp_sal) 128 133 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 129 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 130 ELSE ; ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 134 IF( .NOT. cpl_mslp ) THEN 135 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 136 ELSE ; ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 137 ENDIF 131 138 ENDIF 132 139 ! … … 143 150 ssu_m(:,:) = ssu_m(:,:) * zcoef ! mean suface current [m/s] 144 151 ssv_m(:,:) = ssv_m(:,:) * zcoef ! 145 ssh_m(:,:) = ssh_m(:,:) * zcoef ! mean SSH [m]152 IF( .NOT. cpl_mslp ) ssh_m(:,:) = ssh_m(:,:) * zcoef ! mean SSH [m] 146 153 e3t_m(:,:) = e3t_m(:,:) * zcoef ! mean vertical scale factor [m] 147 154 frq_m(:,:) = frq_m(:,:) * zcoef ! mean fraction of solar net radiation absorbed in the 1st T level [-] … … 162 169 CALL iom_rstput( kt, nitrst, numrow, 'sst_m' , sst_m, ldxios = lwxios ) 163 170 CALL iom_rstput( kt, nitrst, numrow, 'sss_m' , sss_m, ldxios = lwxios ) 164 CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m, ldxios = lwxios )171 IF( .NOT. cpl_mslp ) CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m, ldxios = lwxios ) 165 172 CALL iom_rstput( kt, nitrst, numrow, 'e3t_m' , e3t_m, ldxios = lwxios ) 166 173 CALL iom_rstput( kt, nitrst, numrow, 'frq_m' , frq_m, ldxios = lwxios ) … … 182 189 ! 183 190 END SUBROUTINE sbc_ssm 191 192 SUBROUTINE sbc_ssm_cpl( kt ) 193 !!--------------------------------------------------------------------- 194 !! *** ROUTINE sbc_ssm_cpl *** 195 !! 196 !! ** Purpose : provide ocean surface variable to sea-surface boundary 197 !! condition computation when pressure is read from coupling 198 !! 199 !! ** Method : The inverse barometer ssh (i.e. ssh associated with Patm) 200 !! is added to ssh_m when ln_apr_dyn = T. Required for sea-ice dynamics. 201 !!--------------------------------------------------------------------- 202 INTEGER, INTENT(in) :: kt ! ocean time step 203 ! 204 REAL(wp) :: zcoef ! local scalar 205 !!--------------------------------------------------------------------- 206 ! 207 IF( nn_fsbc == 1 ) THEN ! Instantaneous surface fields ! 208 ! ! ---------------------------------------- ! 209 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 210 ELSE ; ssh_m(:,:) = sshn(:,:) 211 ENDIF 212 ELSE 213 ! ! ----------------------------------------------- ! 214 IF( kt == nit000 .AND. .NOT. l_ssm_mean ) THEN ! Initialisation: 1st time-step, no input means ! 215 ! ! ----------------------------------------------- ! 216 IF(lwp) WRITE(numout,*) 217 IF(lwp) WRITE(numout,*) '~~~~~~~ mean ssh field initialised to instantaneous values' 218 zcoef = REAL( nn_fsbc - 1, wp ) 219 zcoef = REAL( nn_fsbc - 1, wp ) 220 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 221 ELSE ; ssh_m(:,:) = zcoef * sshn(:,:) 222 ENDIF 223 ! ! ---------------------------------------- ! 224 ELSEIF( MOD( kt - 2 , nn_fsbc ) == 0 ) THEN ! Initialisation: New mean computation ! 225 ! ! ---------------------------------------- ! 226 ssh_m(:,:) = 0.e0 227 ENDIF 228 229 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 230 ELSE ; ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 231 ENDIF 232 ! ! ---------------------------------------- ! 233 IF( MOD( kt - 1 , nn_fsbc ) == 0 ) THEN ! Mean value at each nn_fsbc time-step ! 234 ! ! ---------------------------------------- ! 235 zcoef = 1. / REAL( nn_fsbc, wp ) 236 ssh_m(:,:) = ssh_m(:,:) * zcoef ! mean SSH [m] 237 ENDIF 238 ! ! ---------------------------------------- ! 239 IF( lrst_oce ) THEN ! Write in the ocean restart file ! 240 ! ! ---------------------------------------- ! 241 IF(lwp) WRITE(numout,*) 242 IF(lwp) WRITE(numout,*) 'sbc_ssm_cpl : ssh mean field written in ocean restart file ', & 243 & 'at it= ', kt,' date= ', ndastp 244 IF(lwp) WRITE(numout,*) '~~~~~~~' 245 CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m ) 246 ENDIF 247 ENDIF 248 ! 249 IF( MOD( kt - 1 , nn_fsbc ) == 0 ) THEN ! Mean value at each nn_fsbc time-step ! 250 CALL iom_put( 'ssh_m', ssh_m ) 251 ENDIF 252 ! 253 END SUBROUTINE sbc_ssm_cpl 184 254 185 255
Note: See TracChangeset
for help on using the changeset viewer.