Changeset 12448 for branches/UKMO/AMM15_v3_6_STABLE_package_collate_spectral_optics/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
- Timestamp:
- 2020-02-24T17:39:27+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/AMM15_v3_6_STABLE_package_collate_spectral_optics/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
r8058 r12448 26 26 27 27 PUBLIC sbc_ssm ! routine called by step.F90 28 PUBLIC sbc_ssm_cpl ! routine called by sbccpl.F90 28 29 PUBLIC sbc_ssm_init ! routine called by sbcmod.F90 29 30 … … 77 78 sss_m(:,:) = zts(:,:,jp_sal) 78 79 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 79 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 80 ELSE ; ssh_m(:,:) = sshn(:,:) 80 IF( .NOT. cpl_mslp ) THEN 81 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 82 ELSE ; ssh_m(:,:) = sshn(:,:) 83 ENDIF 81 84 ENDIF 82 85 ! … … 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.e0 114 119 sss_m(:,:) = 0.e0 115 ssh_m(:,:) = 0.e0120 IF( .NOT. cpl_mslp ) ssh_m(:,:) = 0.e0 116 121 IF( lk_vvl ) e3t_m(:,:) = 0.e0 117 122 frq_m(:,:) = 0.e0 … … 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 IF( lk_vvl ) e3t_m(:,:) = fse3t_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 [-] … … 161 168 CALL iom_rstput( kt, nitrst, numrow, 'sst_m' , sst_m ) 162 169 CALL iom_rstput( kt, nitrst, numrow, 'sss_m' , sss_m ) 163 CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m )170 IF( .NOT. cpl_mslp ) CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m ) 164 171 IF( lk_vvl ) CALL iom_rstput( kt, nitrst, numrow, 'e3t_m' , e3t_m ) 165 172 CALL iom_rstput( kt, nitrst, numrow, 'frq_m' , frq_m ) … … 174 181 CALL iom_put( 'sst_m', sst_m ) 175 182 CALL iom_put( 'sss_m', sss_m ) 176 CALL iom_put( 'ssh_m', ssh_m )183 IF( .NOT. cpl_mslp ) CALL iom_put( 'ssh_m', ssh_m ) 177 184 IF( lk_vvl ) CALL iom_put( 'e3t_m', e3t_m ) 178 185 CALL iom_put( 'frq_m', frq_m ) … … 180 187 ! 181 188 END SUBROUTINE sbc_ssm 189 190 SUBROUTINE sbc_ssm_cpl( kt ) 191 !!--------------------------------------------------------------------- 192 !! *** ROUTINE sbc_ssm_cpl *** 193 !! 194 !! ** Purpose : provide ocean surface variable to sea-surface boundary 195 !! condition computation when pressure is read from coupling 196 !! 197 !! ** Method : The inverse barometer ssh (i.e. ssh associated with Patm) 198 !! is added to ssh_m when ln_apr_dyn = T. Required for sea-ice dynamics. 199 !!--------------------------------------------------------------------- 200 INTEGER, INTENT(in) :: kt ! ocean time step 201 ! 202 REAL(wp) :: zcoef ! local scalar 203 !!--------------------------------------------------------------------- 204 ! 205 IF( nn_fsbc == 1 ) THEN ! Instantaneous surface fields ! 206 ! ! ---------------------------------------- ! 207 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 208 ELSE ; ssh_m(:,:) = sshn(:,:) 209 ENDIF 210 ELSE 211 ! ! ----------------------------------------------- ! 212 IF( kt == nit000 .AND. .NOT. l_ssm_mean ) THEN ! Initialisation: 1st time-step, no input means ! 213 ! ! ----------------------------------------------- ! 214 IF(lwp) WRITE(numout,*) 215 IF(lwp) WRITE(numout,*) '~~~~~~~ mean ssh field initialised to instantaneous values' 216 zcoef = REAL( nn_fsbc - 1, wp ) 217 zcoef = REAL( nn_fsbc - 1, wp ) 218 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 219 ELSE ; ssh_m(:,:) = zcoef * sshn(:,:) 220 ENDIF 221 ! ! ---------------------------------------- ! 222 ELSEIF( MOD( kt - 2 , nn_fsbc ) == 0 ) THEN ! Initialisation: New mean computation ! 223 ! ! ---------------------------------------- ! 224 ssh_m(:,:) = 0.e0 225 ENDIF 226 227 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 228 ELSE ; ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 229 ENDIF 230 ! ! ---------------------------------------- ! 231 IF( MOD( kt - 1 , nn_fsbc ) == 0 ) THEN ! Mean value at each nn_fsbc time-step ! 232 ! ! ---------------------------------------- ! 233 zcoef = 1. / REAL( nn_fsbc, wp ) 234 ssh_m(:,:) = ssh_m(:,:) * zcoef ! mean SSH [m] 235 ENDIF 236 ! ! ---------------------------------------- ! 237 IF( lrst_oce ) THEN ! Write in the ocean restart file ! 238 ! ! ---------------------------------------- ! 239 IF(lwp) WRITE(numout,*) 240 IF(lwp) WRITE(numout,*) 'sbc_ssm_cpl : ssh mean field written in ocean restart file ', & 241 & 'at it= ', kt,' date= ', ndastp 242 IF(lwp) WRITE(numout,*) '~~~~~~~' 243 CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m ) 244 ENDIF 245 ENDIF 246 ! 247 IF( MOD( kt - 1 , nn_fsbc ) == 0 ) THEN ! Mean value at each nn_fsbc time-step ! 248 CALL iom_put( 'ssh_m', ssh_m ) 249 ENDIF 250 ! 251 END SUBROUTINE sbc_ssm_cpl 182 252 183 253 SUBROUTINE sbc_ssm_init
Note: See TracChangeset
for help on using the changeset viewer.