Changeset 12377 for NEMO/trunk/src/TOP/trcini.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/TOP/trcini.F90
r12136 r12377 21 21 USE daymod ! calendar manager 22 22 USE prtctl_trc ! Print control passive tracers (prt_ctl_trc_init routine) 23 USE trcsub ! variables to substep passive tracers24 23 USE trcrst 25 24 USE lib_mpp ! distribued memory computing library 26 25 USE trcice ! tracers in sea ice 27 USE trcbc , only : trc_bc_ini! generalized Boundary Conditions26 USE trcbc ! generalized Boundary Conditions 28 27 29 28 IMPLICIT NONE … … 39 38 CONTAINS 40 39 41 SUBROUTINE trc_init 40 SUBROUTINE trc_init( Kbb, Kmm, Kaa ) 42 41 !!--------------------------------------------------------------------- 43 42 !! *** ROUTINE trc_init *** … … 51 50 !! or read data or analytical formulation 52 51 !!--------------------------------------------------------------------- 52 INTEGER, INTENT(in) :: Kbb, Kmm, Kaa ! time level indices 53 53 ! 54 54 IF( ln_timing ) CALL timing_start('trc_init') … … 60 60 CALL trc_nam ! read passive tracers namelists 61 61 CALL top_alloc() ! allocate TOP arrays 62 62 63 ! 63 64 IF(.NOT.ln_trcdta ) ln_trc_ini(:) = .FALSE. … … 67 68 IF(lwp) WRITE(numout,*) 68 69 ! 69 CALL trc_ini_sms ! SMS70 CALL trc_ini_trp ! passive tracers transport71 CALL trc_ice_ini ! Tracers in sea ice70 CALL trc_ini_sms( Kmm ) ! SMS 71 CALL trc_ini_trp ! passive tracers transport 72 CALL trc_ice_ini ! Tracers in sea ice 72 73 ! 73 74 IF( lwm .AND. sn_cfctl%l_trcstat ) THEN … … 75 76 ENDIF 76 77 ! 77 CALL trc_ini_state ! passive tracers initialisation : from a restart or from clim 78 IF( nn_dttrc /= 1 ) & 79 CALL trc_sub_ini ! Initialize variables for substepping passive tracers 80 ! 81 CALL trc_ini_inv ! Inventories 78 CALL trc_ini_state( Kbb, Kmm, Kaa ) ! passive tracers initialisation : from a restart or from clim 79 ! 80 CALL trc_ini_inv( Kmm ) ! Inventories 82 81 ! 83 82 IF( ln_timing ) CALL timing_stop('trc_init') … … 86 85 87 86 88 SUBROUTINE trc_ini_inv 87 SUBROUTINE trc_ini_inv( Kmm ) 89 88 !!---------------------------------------------------------------------- 90 89 !! *** ROUTINE trc_ini_stat *** 91 90 !! ** Purpose : passive tracers inventories at initialsation phase 92 91 !!---------------------------------------------------------------------- 93 INTEGER :: jk, jn ! dummy loop indices 92 INTEGER, INTENT(in) :: Kmm ! time level index 93 INTEGER :: jk, jn ! dummy loop indices 94 94 CHARACTER (len=25) :: charout 95 95 !!---------------------------------------------------------------------- … … 101 101 ! ! masked grid volume 102 102 DO jk = 1, jpk 103 cvol(:,:,jk) = e1e2t(:,:) * e3t _n(:,:,jk) * tmask(:,:,jk)103 cvol(:,:,jk) = e1e2t(:,:) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 104 104 END DO 105 105 ! ! total volume of the ocean … … 108 108 trai(:) = 0._wp ! initial content of all tracers 109 109 DO jn = 1, jptra 110 trai(jn) = trai(jn) + glob_sum( 'trcini', tr n(:,:,:,jn) * cvol(:,:,:) )110 trai(jn) = trai(jn) + glob_sum( 'trcini', tr(:,:,:,jn,Kmm) * cvol(:,:,:) ) 111 111 END DO 112 112 … … 123 123 ENDIF 124 124 IF(lwp) WRITE(numout,*) 125 IF( ln_ctl) THEN ! print mean trends (used for debugging)125 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 126 126 CALL prt_ctl_trc_init 127 127 WRITE(charout, FMT="('ini ')") 128 128 CALL prt_ctl_trc_info( charout ) 129 CALL prt_ctl_trc( tab4d=tr n, mask=tmask, clinfo=ctrcnm )129 CALL prt_ctl_trc( tab4d=tr(:,:,:,:,Kmm), mask=tmask, clinfo=ctrcnm ) 130 130 ENDIF 131 131 9000 FORMAT(' tracer nb : ',i2,' name :',a10,' initial content :',e18.10) … … 134 134 135 135 136 SUBROUTINE trc_ini_sms 136 SUBROUTINE trc_ini_sms( Kmm ) 137 137 !!---------------------------------------------------------------------- 138 138 !! *** ROUTINE trc_ini_sms *** … … 145 145 USE trcini_my_trc ! MY_TRC initialisation 146 146 ! 147 INTEGER, INTENT(in) :: Kmm ! time level indices 147 148 INTEGER :: jn 148 149 !!---------------------------------------------------------------------- … … 158 159 ln_trc_obc(jn) = sn_tracer(jn)%llobc 159 160 END DO 161 ! 162 IF( .NOT.ln_trcbc ) THEN 163 DO jn = 1, jp_bgc 164 ln_trc_sbc(jn) = .FALSE. 165 ln_trc_cbc(jn) = .FALSE. 166 ln_trc_obc(jn) = .FALSE. 167 END DO 168 ENDIF 169 170 lltrcbc = ( COUNT(ln_trc_sbc) + COUNT(ln_trc_obc) + COUNT(ln_trc_cbc) ) > 0 160 171 ! 161 IF( ln_pisces ) CALL trc_ini_pisces ! PISCES model162 IF( ln_my_trc ) CALL trc_ini_my_trc ! MY_TRC model163 IF( ll_cfc ) CALL trc_ini_cfc ! CFC's164 IF( ln_c14 ) CALL trc_ini_c14 ! C14 model165 IF( ln_age ) CALL trc_ini_age ! AGE172 IF( ln_pisces ) CALL trc_ini_pisces( Kmm ) ! PISCES model 173 IF( ln_my_trc ) CALL trc_ini_my_trc( Kmm ) ! MY_TRC model 174 IF( ll_cfc ) CALL trc_ini_cfc ( Kmm ) ! CFC's 175 IF( ln_c14 ) CALL trc_ini_c14 ( Kmm ) ! C14 model 176 IF( ln_age ) CALL trc_ini_age ( Kmm ) ! AGE 166 177 ! 167 178 IF(lwp) THEN ! control print … … 174 185 END DO 175 186 ENDIF 187 IF( lwp .AND. ln_trcbc .AND. lltrcbc ) THEN 188 WRITE(numout,*) 189 WRITE(numout,*) ' Applying tracer boundary conditions ' 190 ENDIF 191 176 192 9001 FORMAT(3x,i3,1x,a10,3x,l2,3x,l2,3x,l2,3x,l2) 177 193 ! … … 204 220 205 221 206 SUBROUTINE trc_ini_state 222 SUBROUTINE trc_ini_state( Kbb, Kmm, Kaa ) 207 223 !!---------------------------------------------------------------------- 208 224 !! *** ROUTINE trc_ini_state *** … … 213 229 USE trcdta ! initialisation from files 214 230 ! 215 INTEGER :: jn, jl ! dummy loop indices 216 !!---------------------------------------------------------------------- 217 ! 218 IF( ln_trcdta ) CALL trc_dta_ini( jptra ) ! set initial tracers values 219 ! 220 IF( ln_my_trc ) CALL trc_bc_ini ( jptra ) ! set tracers Boundary Conditions 231 INTEGER, INTENT(in) :: Kbb, Kmm, Kaa ! time level index 232 INTEGER :: jn, jl ! dummy loop indices 233 !!---------------------------------------------------------------------- 234 ! 235 IF( ln_trcdta ) CALL trc_dta_ini( jptra ) ! set initial tracers values 236 ! 237 IF( ln_trcbc .AND. lltrcbc ) THEN 238 CALL trc_bc_ini ( jptra, Kmm ) ! set tracers Boundary Conditions 239 CALL trc_bc ( nit000, Kmm, tr, Kaa ) ! tracers: surface and lateral Boundary Conditions 240 ENDIF 221 241 ! 222 242 ! 223 243 IF( ln_rsttr ) THEN ! restart from a file 224 244 ! 225 CALL trc_rst_read 245 CALL trc_rst_read( Kbb, Kmm ) 226 246 ! 227 247 ELSE ! Initialisation of tracer from a file that may also be used for damping … … 232 252 IF( ln_trc_ini(jn) ) THEN 233 253 jl = n_trc_index(jn) 234 CALL trc_dta( nit000, sf_trcdta(jl), rf_trfac(jl), trn(:,:,:,jn) )254 CALL trc_dta( nit000, Kmm, sf_trcdta(jl), rf_trfac(jl), tr(:,:,:,jn,Kmm) ) 235 255 ! 236 256 ! deallocate data structure if data are not used for damping … … 246 266 ENDIF 247 267 ! 248 tr b(:,:,:,:) = trn(:,:,:,:)268 tr(:,:,:,:,Kbb) = tr(:,:,:,:,Kmm) 249 269 ! 250 270 ENDIF 251 271 ! 252 tr a(:,:,:,:) = 0._wp253 ! ! Partial top/bottom cell: GRADh(tr n)272 tr(:,:,:,:,Kaa) = 0._wp 273 ! ! Partial top/bottom cell: GRADh(tr(Kmm)) 254 274 END SUBROUTINE trc_ini_state 255 275
Note: See TracChangeset
for help on using the changeset viewer.