- Timestamp:
- 2016-07-19T10:38:35+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
r5407 r6808 6 6 !! History : 9.0 ! 2006-07 (G. Madec) Original code 7 7 !! 3.3 ! 2010-10 (C. Bricaud, G. Madec) add the Patm forcing for sea-ice 8 !!---------------------------------------------------------------------- 9 10 !!---------------------------------------------------------------------- 11 !! sbc_ssm : calculate sea surface mean currents, temperature, 12 !! and salinity over nn_fsbc time-step 13 !!---------------------------------------------------------------------- 14 USE oce ! ocean dynamics and tracers 15 USE dom_oce ! ocean space and time domain 16 USE sbc_oce ! surface boundary condition: ocean fields 17 USE sbcapr ! surface boundary condition: atmospheric pressure 18 USE eosbn2 ! equation of state and related derivatives 8 !! 3.7 ! 2015-11 (G. Madec) non linear free surface by default: e3t_m always computed 9 !!---------------------------------------------------------------------- 10 11 !!---------------------------------------------------------------------- 12 !! sbc_ssm : calculate sea surface mean currents, temperature, 13 !! and salinity over nn_fsbc time-step 14 !!---------------------------------------------------------------------- 15 USE oce ! ocean dynamics and tracers 16 USE dom_oce ! ocean space and time domain 17 USE sbc_oce ! surface boundary condition: ocean fields 18 USE sbcapr ! surface boundary condition: atmospheric pressure 19 USE eosbn2 ! equation of state and related derivatives 19 20 ! 20 USE in_out_manager 21 USE prtctl 22 USE iom 21 USE in_out_manager ! I/O manager 22 USE prtctl ! Print control 23 USE iom ! IOM library 23 24 24 25 IMPLICIT NONE 25 26 PRIVATE 26 27 27 PUBLIC sbc_ssm ! routine called by step.F90 28 PUBLIC sbc_ssm_init ! routine called by sbcmod.F90 29 30 LOGICAL, SAVE :: l_ssm_mean = .FALSE. ! keep track of whether means have been read 31 ! from restart file 28 PUBLIC sbc_ssm ! routine called by step.F90 29 PUBLIC sbc_ssm_init ! routine called by sbcmod.F90 30 31 LOGICAL, SAVE :: l_ssm_mean = .FALSE. ! keep track of whether means have been read from restart file 32 32 33 !! * Substitutions34 # include "domzgr_substitute.h90"35 33 !!---------------------------------------------------------------------- 36 34 !! NEMO/OPA 3.3 , NEMO Consortium (2010) … … 59 57 REAL(wp), DIMENSION(jpi,jpj,jpts) :: zts 60 58 !!--------------------------------------------------------------------- 61 59 ! 62 60 ! !* surface T-, U-, V- ocean level variables (T, S, depth, velocity) 63 61 DO jj = 1, jpj … … 81 79 ENDIF 82 80 ! 83 IF( lk_vvl ) e3t_m(:,:) = fse3t_n(:,:,1)81 e3t_m(:,:) = e3t_n(:,:,1) 84 82 ! 85 83 frq_m(:,:) = fraqsr_1lev(:,:) … … 103 101 ENDIF 104 102 ! 105 IF( lk_vvl ) e3t_m(:,:) = zcoef * fse3t_n(:,:,1)103 e3t_m(:,:) = zcoef * e3t_n(:,:,1) 106 104 ! 107 105 frq_m(:,:) = zcoef * fraqsr_1lev(:,:) … … 109 107 ELSEIF( MOD( kt - 2 , nn_fsbc ) == 0 ) THEN ! Initialisation: New mean computation ! 110 108 ! ! ---------------------------------------- ! 111 ssu_m(:,:) = 0. e0! reset to zero ocean mean sbc fields112 ssv_m(:,:) = 0. e0113 sst_m(:,:) = 0. e0114 sss_m(:,:) = 0. e0115 ssh_m(:,:) = 0. e0116 IF( lk_vvl ) e3t_m(:,:) = 0.e0117 frq_m(:,:) = 0. e0109 ssu_m(:,:) = 0._wp ! reset to zero ocean mean sbc fields 110 ssv_m(:,:) = 0._wp 111 sst_m(:,:) = 0._wp 112 sss_m(:,:) = 0._wp 113 ssh_m(:,:) = 0._wp 114 e3t_m(:,:) = 0._wp 115 frq_m(:,:) = 0._wp 118 116 ENDIF 119 117 ! ! ---------------------------------------- ! … … 131 129 ENDIF 132 130 ! 133 IF( lk_vvl ) e3t_m(:,:) = fse3t_m(:,:) + fse3t_n(:,:,1)134 ! 135 frq_m(:,:) = 131 e3t_m(:,:) = e3t_m(:,:) + e3t_n(:,:,1) 132 ! 133 frq_m(:,:) = frq_m(:,:) + fraqsr_1lev(:,:) 136 134 137 135 ! ! ---------------------------------------- ! … … 139 137 ! ! ---------------------------------------- ! 140 138 zcoef = 1. / REAL( nn_fsbc, wp ) 141 sst_m(:,:) = sst_m(:,:) * zcoef 142 sss_m(:,:) = sss_m(:,:) * zcoef 143 ssu_m(:,:) = ssu_m(:,:) * zcoef 144 ssv_m(:,:) = ssv_m(:,:) * zcoef 145 ssh_m(:,:) = ssh_m(:,:) * zcoef 146 IF( lk_vvl ) e3t_m(:,:) = fse3t_m(:,:) * zcoef! mean vertical scale factor [m]147 frq_m(:,:) = frq_m(:,:) * zcoef ! mean fraction of solar net radiation absorbed in the 1st T level [-]139 sst_m(:,:) = sst_m(:,:) * zcoef ! mean SST [Celcius] 140 sss_m(:,:) = sss_m(:,:) * zcoef ! mean SSS [psu] 141 ssu_m(:,:) = ssu_m(:,:) * zcoef ! mean suface current [m/s] 142 ssv_m(:,:) = ssv_m(:,:) * zcoef ! 143 ssh_m(:,:) = ssh_m(:,:) * zcoef ! mean SSH [m] 144 e3t_m(:,:) = e3t_m(:,:) * zcoef ! mean vertical scale factor [m] 145 frq_m(:,:) = frq_m(:,:) * zcoef ! mean fraction of solar net radiation absorbed in the 1st T level [-] 148 146 ! 149 147 ENDIF … … 162 160 CALL iom_rstput( kt, nitrst, numrow, 'sss_m' , sss_m ) 163 161 CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m ) 164 IF( lk_vvl )CALL iom_rstput( kt, nitrst, numrow, 'e3t_m' , e3t_m )162 CALL iom_rstput( kt, nitrst, numrow, 'e3t_m' , e3t_m ) 165 163 CALL iom_rstput( kt, nitrst, numrow, 'frq_m' , frq_m ) 166 164 ! … … 175 173 CALL iom_put( 'sss_m', sss_m ) 176 174 CALL iom_put( 'ssh_m', ssh_m ) 177 IF( lk_vvl )CALL iom_put( 'e3t_m', e3t_m )175 CALL iom_put( 'e3t_m', e3t_m ) 178 176 CALL iom_put( 'frq_m', frq_m ) 179 177 ENDIF 180 178 ! 181 179 END SUBROUTINE sbc_ssm 180 182 181 183 182 SUBROUTINE sbc_ssm_init … … 189 188 !! ** Action : - read parameters 190 189 !!---------------------------------------------------------------------- 191 REAL(wp) :: zcoef, zf_sbc 190 REAL(wp) :: zcoef, zf_sbc ! local scalar 192 191 !!---------------------------------------------------------------------- 193 192 ! 194 193 IF( nn_fsbc == 1 ) THEN 195 194 ! … … 206 205 IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 207 206 l_ssm_mean = .TRUE. 208 CALL iom_get( numror , 'nn_fsbc', zf_sbc ) ! sbc frequency of previous run209 CALL iom_get( numror, jpdom_autoglo, 'ssu_m' , ssu_m ) ! sea surface mean velocity (T-point)210 CALL iom_get( numror, jpdom_autoglo, 'ssv_m' , ssv_m ) ! " " velocity (V-point)211 CALL iom_get( numror, jpdom_autoglo, 'sst_m' , sst_m ) ! " " temperature (T-point)212 CALL iom_get( numror, jpdom_autoglo, 'sss_m' , sss_m ) ! " " salinity (T-point)213 CALL iom_get( numror, jpdom_autoglo, 'ssh_m' , ssh_m ) ! " " height (T-point)214 IF( lk_vvl ) CALL iom_get( numror, jpdom_autoglo, 'e3t_m', e3t_m)207 CALL iom_get( numror , 'nn_fsbc', zf_sbc ) ! sbc frequency of previous run 208 CALL iom_get( numror, jpdom_autoglo, 'ssu_m' , ssu_m ) ! sea surface mean velocity (U-point) 209 CALL iom_get( numror, jpdom_autoglo, 'ssv_m' , ssv_m ) ! " " velocity (V-point) 210 CALL iom_get( numror, jpdom_autoglo, 'sst_m' , sst_m ) ! " " temperature (T-point) 211 CALL iom_get( numror, jpdom_autoglo, 'sss_m' , sss_m ) ! " " salinity (T-point) 212 CALL iom_get( numror, jpdom_autoglo, 'ssh_m' , ssh_m ) ! " " height (T-point) 213 CALL iom_get( numror, jpdom_autoglo, 'e3t_m' , e3t_m ) ! 1st level thickness (T-point) 215 214 ! fraction of solar net radiation absorbed in 1st T level 216 215 IF( iom_varid( numror, 'frq_m', ldstop = .FALSE. ) > 0 ) THEN … … 229 228 sss_m(:,:) = zcoef * sss_m(:,:) 230 229 ssh_m(:,:) = zcoef * ssh_m(:,:) 231 IF( lk_vvl ) e3t_m(:,:) = zcoef * fse3t_m(:,:)230 e3t_m(:,:) = zcoef * e3t_m(:,:) 232 231 frq_m(:,:) = zcoef * frq_m(:,:) 233 232 ELSE … … 245 244 ELSE ; sst_m(:,:) = tsn(:,:,1,jp_tem) 246 245 ENDIF 247 sss_m(:,:) = tsn (:,:,1,jp_sal)248 ssh_m(:,:) = sshn (:,:)249 IF( lk_vvl ) e3t_m(:,:) = fse3t_n(:,:,1)246 sss_m(:,:) = tsn (:,:,1,jp_sal) 247 ssh_m(:,:) = sshn (:,:) 248 e3t_m(:,:) = e3t_n(:,:,1) 250 249 frq_m(:,:) = 1._wp 251 250 !
Note: See TracChangeset
for help on using the changeset viewer.