Changeset 5965 for branches/2014/dev_r4650_UKMO14.5_SST_BIAS_CORRECTION/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
- Timestamp:
- 2015-12-01T16:35:30+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO14.5_SST_BIAS_CORRECTION/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
r4292 r5965 14 14 USE oce ! ocean dynamics and tracers 15 15 USE dom_oce ! ocean space and time domain 16 USE sbc_oce ! Surface boundary condition: ocean fields17 16 USE sbc_oce ! surface boundary condition: ocean fields 18 17 USE sbcapr ! surface boundary condition: atmospheric pressure 19 USE prtctl ! Print control (prt_ctl routine)20 USE iom18 USE eosbn2 ! equation of state and related derivatives 19 ! 21 20 USE in_out_manager ! I/O manager 21 USE prtctl ! Print control 22 USE iom ! IOM library 22 23 23 24 IMPLICIT NONE … … 54 55 INTEGER, INTENT(in) :: kt ! ocean time step 55 56 ! 57 INTEGER :: ji, jj ! loop index 56 58 REAL(wp) :: zcoef, zf_sbc ! local scalar 59 REAL(wp), DIMENSION(jpi,jpj,jpts) :: zts 57 60 !!--------------------------------------------------------------------- 58 ! ! ---------------------------------------- ! 61 62 ! !* surface T-, U-, V- ocean level variables (T, S, depth, velocity) 63 DO jj = 1, jpj 64 DO ji = 1, jpi 65 zts(ji,jj,jp_tem) = tsn(ji,jj,mikt(ji,jj),jp_tem) 66 zts(ji,jj,jp_sal) = tsn(ji,jj,mikt(ji,jj),jp_sal) 67 END DO 68 END DO 69 ! 59 70 IF( nn_fsbc == 1 ) THEN ! Instantaneous surface fields ! 60 71 ! ! ---------------------------------------- ! 61 72 ssu_m(:,:) = ub(:,:,1) 62 73 ssv_m(:,:) = vb(:,:,1) 63 sst_m(:,:) = tsn(:,:,1,jp_tem) 64 sss_m(:,:) = tsn(:,:,1,jp_sal) 74 IF( ln_useCT ) THEN ; sst_m(:,:) = eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 75 ELSE ; sst_m(:,:) = zts(:,:,jp_tem) 76 ENDIF 77 sss_m(:,:) = zts(:,:,jp_sal) 65 78 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 66 79 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) … … 68 81 ENDIF 69 82 ! 70 IF( lk_vvl ) fse3t_m(:,:) = fse3t_n(:,:,1) 83 IF( lk_vvl ) e3t_m(:,:) = fse3t_n(:,:,1) 84 ! 85 frq_m(:,:) = fraqsr_1lev(:,:) 71 86 ! 72 87 ELSE … … 79 94 ssu_m(:,:) = zcoef * ub(:,:,1) 80 95 ssv_m(:,:) = zcoef * vb(:,:,1) 81 sst_m(:,:) = zcoef * tsn(:,:,1,jp_tem) 82 sss_m(:,:) = zcoef * tsn(:,:,1,jp_sal) 83 ! ! removed inverse barometer ssh when Patm forcing is used 96 IF( ln_useCT ) THEN ; sst_m(:,:) = zcoef * eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 97 ELSE ; sst_m(:,:) = zcoef * zts(:,:,jp_tem) 98 ENDIF 99 sss_m(:,:) = zcoef * zts(:,:,jp_sal) 100 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 84 101 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 85 ELSE ; ssh_m(:,:) = zcoef * sshn(:,:) 86 ENDIF 87 IF( lk_vvl ) fse3t_m(:,:) = zcoef * fse3t_n(:,:,1) 102 ELSE ; ssh_m(:,:) = zcoef * sshn(:,:) 103 ENDIF 104 ! 105 IF( lk_vvl ) e3t_m(:,:) = zcoef * fse3t_n(:,:,1) 106 ! 107 frq_m(:,:) = zcoef * fraqsr_1lev(:,:) 88 108 ! ! ---------------------------------------- ! 89 109 ELSEIF( MOD( kt - 2 , nn_fsbc ) == 0 ) THEN ! Initialisation: New mean computation ! … … 94 114 sss_m(:,:) = 0.e0 95 115 ssh_m(:,:) = 0.e0 96 IF( lk_vvl ) fse3t_m(:,:) = 0.e0 116 IF( lk_vvl ) e3t_m(:,:) = 0.e0 117 frq_m(:,:) = 0.e0 97 118 ENDIF 98 119 ! ! ---------------------------------------- ! … … 101 122 ssu_m(:,:) = ssu_m(:,:) + ub(:,:,1) 102 123 ssv_m(:,:) = ssv_m(:,:) + vb(:,:,1) 103 sst_m(:,:) = sst_m(:,:) + tsn(:,:,1,jp_tem) 104 sss_m(:,:) = sss_m(:,:) + tsn(:,:,1,jp_sal) 124 IF( ln_useCT ) THEN ; sst_m(:,:) = sst_m(:,:) + eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 125 ELSE ; sst_m(:,:) = sst_m(:,:) + zts(:,:,jp_tem) 126 ENDIF 127 sss_m(:,:) = sss_m(:,:) + zts(:,:,jp_sal) 105 128 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 106 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * 129 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 107 130 ELSE ; ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 108 131 ENDIF 109 IF( lk_vvl ) fse3t_m(:,:) = fse3t_m(:,:) + fse3t_n(:,:,1) 132 ! 133 IF( lk_vvl ) e3t_m(:,:) = fse3t_m(:,:) + fse3t_n(:,:,1) 134 ! 135 frq_m(:,:) = frq_m(:,:) + fraqsr_1lev(:,:) 110 136 111 137 ! ! ---------------------------------------- ! … … 118 144 ssv_m(:,:) = ssv_m(:,:) * zcoef ! 119 145 ssh_m(:,:) = ssh_m(:,:) * zcoef ! mean SSH [m] 120 IF( lk_vvl ) fse3t_m(:,:) = fse3t_m(:,:) * zcoef ! mean vertical scale factor [m] 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 [-] 121 148 ! 122 149 ENDIF … … 135 162 CALL iom_rstput( kt, nitrst, numrow, 'sss_m' , sss_m ) 136 163 CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m ) 137 IF( lk_vvl ) THEN 138 CALL iom_rstput( kt, nitrst, numrow, 'fse3t_m' , fse3t_m(:,:) ) 139 END IF 140 ! 141 ENDIF 142 ! 164 IF( lk_vvl ) CALL iom_rstput( kt, nitrst, numrow, 'e3t_m' , e3t_m ) 165 CALL iom_rstput( kt, nitrst, numrow, 'frq_m' , frq_m ) 166 ! 167 ENDIF 168 ! 169 ENDIF 170 ! 171 IF( MOD( kt - 1 , nn_fsbc ) == 0 ) THEN ! Mean value at each nn_fsbc time-step ! 172 CALL iom_put( 'ssu_m', ssu_m ) 173 CALL iom_put( 'ssv_m', ssv_m ) 174 CALL iom_put( 'sst_m', sst_m ) 175 CALL iom_put( 'sss_m', sss_m ) 176 CALL iom_put( 'ssh_m', ssh_m ) 177 IF( lk_vvl ) CALL iom_put( 'e3t_m', e3t_m ) 178 CALL iom_put( 'frq_m', frq_m ) 143 179 ENDIF 144 180 ! … … 176 212 CALL iom_get( numror, jpdom_autoglo, 'sss_m' , sss_m ) ! " " salinity (T-point) 177 213 CALL iom_get( numror, jpdom_autoglo, 'ssh_m' , ssh_m ) ! " " height (T-point) 178 IF( lk_vvl ) CALL iom_get( numror, jpdom_autoglo, 'fse3t_m', fse3t_m(:,:) ) 214 IF( lk_vvl ) CALL iom_get( numror, jpdom_autoglo, 'e3t_m', e3t_m ) 215 ! fraction of solar net radiation absorbed in 1st T level 216 IF( iom_varid( numror, 'frq_m', ldstop = .FALSE. ) > 0 ) THEN 217 CALL iom_get( numror, jpdom_autoglo, 'frq_m' , frq_m ) 218 ELSE 219 frq_m(:,:) = 1._wp ! default definition 220 ENDIF 179 221 ! 180 222 IF( zf_sbc /= REAL( nn_fsbc, wp ) ) THEN ! nn_fsbc has changed between 2 runs … … 187 229 sss_m(:,:) = zcoef * sss_m(:,:) 188 230 ssh_m(:,:) = zcoef * ssh_m(:,:) 189 IF( lk_vvl ) fse3t_m(:,:) = zcoef * fse3t_m(:,:) 231 IF( lk_vvl ) e3t_m(:,:) = zcoef * fse3t_m(:,:) 232 frq_m(:,:) = zcoef * frq_m(:,:) 190 233 ELSE 191 234 IF(lwp) WRITE(numout,*) '~~~~~~~ mean fields read in the ocean restart file' … … 194 237 ENDIF 195 238 ! 239 IF( .NOT. l_ssm_mean ) THEN ! default initialisation. needed by lim_istate 240 ! 241 IF(lwp) WRITE(numout,*) ' default initialisation of ss?_m arrays' 242 ssu_m(:,:) = ub(:,:,1) 243 ssv_m(:,:) = vb(:,:,1) 244 IF( ln_useCT ) THEN ; sst_m(:,:) = eos_pt_from_ct( tsn(:,:,1,jp_tem), tsn(:,:,1,jp_sal) ) 245 ELSE ; sst_m(:,:) = tsn(:,:,1,jp_tem) 246 ENDIF 247 sss_m(:,:) = tsn(:,:,1,jp_sal) 248 ssh_m(:,:) = sshn(:,:) 249 IF( lk_vvl ) e3t_m(:,:) = fse3t_n(:,:,1) 250 frq_m(:,:) = 1._wp 251 ! 252 ENDIF 253 ! 196 254 END SUBROUTINE sbc_ssm_init 197 255
Note: See TracChangeset
for help on using the changeset viewer.