- Timestamp:
- 2012-11-19T16:24:13+01:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
r3294 r3607 27 27 PUBLIC sbc_ssm ! routine called by step.F90 28 28 29 LOGICAL, SAVE :: l_ssm_mean = .FALSE. ! keep track of whether means have been read 30 ! from restart file 31 29 32 !! * Substitutions 30 33 # include "domzgr_substitute.h90" … … 54 57 !!--------------------------------------------------------------------- 55 58 ! ! ---------------------------------------- ! 56 IF( nn_fsbc == 1 ) THEN ! 59 IF( nn_fsbc == 1 ) THEN ! Instantaneous surface fields ! 57 60 ! ! ---------------------------------------- ! 58 IF( kt == nit000 ) THEN59 IF(lwp) WRITE(numout,*)60 IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields, nn_fsbc=1 : instantaneous values'61 IF(lwp) WRITE(numout,*) '~~~~~~~ '62 ENDIF63 !64 61 ssu_m(:,:) = ub(:,:,1) 65 62 ssv_m(:,:) = vb(:,:,1) … … 73 70 ! 74 71 ELSE 75 ! ! ---------------------------------------- !76 IF( kt == nit000 ) THEN ! Initialisation: 1st time-step!77 ! ! ---------------------------------------- !72 ! ! ----------------------------------------------- ! 73 IF( kt == nit000 && .NOT. l_ssm_mean ) THEN ! Initialisation: 1st time-step, no input means ! 74 ! ! ----------------------------------------------- ! 78 75 IF(lwp) WRITE(numout,*) 79 IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields' 80 ! 81 IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 82 CALL iom_get( numror , 'nn_fsbc', zf_sbc ) ! sbc frequency of previous run 83 CALL iom_get( numror, jpdom_autoglo, 'ssu_m' , ssu_m ) ! sea surface mean velocity (T-point) 84 CALL iom_get( numror, jpdom_autoglo, 'ssv_m' , ssv_m ) ! " " velocity (V-point) 85 CALL iom_get( numror, jpdom_autoglo, 'sst_m' , sst_m ) ! " " temperature (T-point) 86 CALL iom_get( numror, jpdom_autoglo, 'sss_m' , sss_m ) ! " " salinity (T-point) 87 CALL iom_get( numror, jpdom_autoglo, 'ssh_m' , ssh_m ) ! " " height (T-point) 88 ! 89 IF( zf_sbc /= REAL( nn_fsbc, wp ) ) THEN ! nn_fsbc has changed between 2 runs 90 IF(lwp) WRITE(numout,*) '~~~~~~~ restart with a change in the frequency of mean ', & 91 & 'from ', zf_sbc, ' to ', nn_fsbc 92 zcoef = REAL( nn_fsbc - 1, wp ) / zf_sbc 93 ssu_m(:,:) = zcoef * ssu_m(:,:) 94 ssv_m(:,:) = zcoef * ssv_m(:,:) 95 sst_m(:,:) = zcoef * sst_m(:,:) 96 sss_m(:,:) = zcoef * sss_m(:,:) 97 ssh_m(:,:) = zcoef * ssh_m(:,:) 98 ELSE 99 IF(lwp) WRITE(numout,*) '~~~~~~~ mean fields read in the ocean restart file' 100 ENDIF 101 ELSE 102 IF(lwp) WRITE(numout,*) '~~~~~~~ mean fields initialised to instantaneous values' 103 zcoef = REAL( nn_fsbc - 1, wp ) 104 ssu_m(:,:) = zcoef * ub(:,:,1) 105 ssv_m(:,:) = zcoef * vb(:,:,1) 106 sst_m(:,:) = zcoef * tsn(:,:,1,jp_tem) 107 sss_m(:,:) = zcoef * tsn(:,:,1,jp_sal) 108 ! ! removed inverse barometer ssh when Patm forcing is used 109 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 110 ELSE ; ssh_m(:,:) = zcoef * sshn(:,:) 111 ENDIF 112 76 IF(lwp) WRITE(numout,*) '~~~~~~~ mean fields initialised to instantaneous values' 77 zcoef = REAL( nn_fsbc - 1, wp ) 78 ssu_m(:,:) = zcoef * ub(:,:,1) 79 ssv_m(:,:) = zcoef * vb(:,:,1) 80 sst_m(:,:) = zcoef * tsn(:,:,1,jp_tem) 81 sss_m(:,:) = zcoef * tsn(:,:,1,jp_sal) 82 ! ! removed inverse barometer ssh when Patm forcing is used 83 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 84 ELSE ; ssh_m(:,:) = zcoef * sshn(:,:) 113 85 ENDIF 114 86 ! ! ---------------------------------------- ! … … 165 137 END SUBROUTINE sbc_ssm 166 138 139 SUBROUTINE sbc_ssm_init 140 !!---------------------------------------------------------------------- 141 !! *** ROUTINE sbc_ssm_init *** 142 !! 143 !! ** Purpose : Initialisation of the sbc data 144 !! 145 !! ** Action : - read parameters 146 !!---------------------------------------------------------------------- 147 REAL(wp) :: zcoef ! local scalar 148 !!---------------------------------------------------------------------- 149 150 IF( nn_fsbc == 1 ) THEN 151 ! 152 IF(lwp) WRITE(numout,*) 153 IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields, nn_fsbc=1 : instantaneous values' 154 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 155 ! 156 ELSE 157 ! 158 IF(lwp) WRITE(numout,*) 159 IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields' 160 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 161 ! 162 IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 163 l_ssm_mean = .TRUE. 164 CALL iom_get( numror , 'nn_fsbc', zf_sbc ) ! sbc frequency of previous run 165 CALL iom_get( numror, jpdom_autoglo, 'ssu_m' , ssu_m ) ! sea surface mean velocity (T-point) 166 CALL iom_get( numror, jpdom_autoglo, 'ssv_m' , ssv_m ) ! " " velocity (V-point) 167 CALL iom_get( numror, jpdom_autoglo, 'sst_m' , sst_m ) ! " " temperature (T-point) 168 CALL iom_get( numror, jpdom_autoglo, 'sss_m' , sss_m ) ! " " salinity (T-point) 169 CALL iom_get( numror, jpdom_autoglo, 'ssh_m' , ssh_m ) ! " " height (T-point) 170 ! 171 IF( zf_sbc /= REAL( nn_fsbc, wp ) ) THEN ! nn_fsbc has changed between 2 runs 172 IF(lwp) WRITE(numout,*) '~~~~~~~ restart with a change in the frequency of mean ', & 173 & 'from ', zf_sbc, ' to ', nn_fsbc 174 zcoef = REAL( nn_fsbc - 1, wp ) / zf_sbc 175 ssu_m(:,:) = zcoef * ssu_m(:,:) 176 ssv_m(:,:) = zcoef * ssv_m(:,:) 177 sst_m(:,:) = zcoef * sst_m(:,:) 178 sss_m(:,:) = zcoef * sss_m(:,:) 179 ssh_m(:,:) = zcoef * ssh_m(:,:) 180 ELSE 181 IF(lwp) WRITE(numout,*) '~~~~~~~ mean fields read in the ocean restart file' 182 ENDIF 183 ENDIF 184 ENDIF 185 ! 186 END SUBROUTINE sbc_ssm_init 187 167 188 !!====================================================================== 168 189 END MODULE sbcssm
Note: See TracChangeset
for help on using the changeset viewer.