- Timestamp:
- 2020-05-14T21:46:00+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Property svn:externals
-
old new 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@HEAD sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/TOP/trcini.F90
r10817 r12928 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') … … 58 58 IF(lwp) WRITE(numout,*) '~~~~~~~~' 59 59 ! 60 CALL trc_ini_ctl ! control61 60 CALL trc_nam ! read passive tracers namelists 62 61 CALL top_alloc() ! allocate TOP arrays 62 63 63 ! 64 64 IF(.NOT.ln_trcdta ) ln_trc_ini(:) = .FALSE. … … 68 68 IF(lwp) WRITE(numout,*) 69 69 ! 70 CALL trc_ini_sms ! SMS71 CALL trc_ini_trp ! passive tracers transport72 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 73 73 ! 74 74 IF( lwm .AND. sn_cfctl%l_trcstat ) THEN … … 76 76 ENDIF 77 77 ! 78 CALL trc_ini_state ! passive tracers initialisation : from a restart or from clim 79 IF( nn_dttrc /= 1 ) & 80 CALL trc_sub_ini ! Initialize variables for substepping passive tracers 81 ! 82 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 83 81 ! 84 82 IF( ln_timing ) CALL timing_stop('trc_init') … … 87 85 88 86 89 SUBROUTINE trc_ini_ctl 90 !!---------------------------------------------------------------------- 91 !! *** ROUTINE trc_ini_ctl *** 92 !! ** Purpose : Control + ocean volume 93 !!---------------------------------------------------------------------- 94 INTEGER :: jk ! dummy loop indices 95 ! 96 ! Define logical parameter ton control dirunal cycle in TOP 97 l_trcdm2dc = ln_dm2dc .OR. ( ln_cpl .AND. ncpl_qsr_freq /= 1 ) 98 l_trcdm2dc = l_trcdm2dc .AND. .NOT. l_offline 99 IF( l_trcdm2dc .AND. lwp ) CALL ctl_warn( 'Coupling with passive tracers and used of diurnal cycle.', & 100 & 'Computation of a daily mean shortwave for some biogeochemical models ' ) 101 ! 102 END SUBROUTINE trc_ini_ctl 103 104 105 SUBROUTINE trc_ini_inv 87 SUBROUTINE trc_ini_inv( Kmm ) 106 88 !!---------------------------------------------------------------------- 107 89 !! *** ROUTINE trc_ini_stat *** 108 90 !! ** Purpose : passive tracers inventories at initialsation phase 109 91 !!---------------------------------------------------------------------- 110 INTEGER :: jk, jn ! dummy loop indices 92 INTEGER, INTENT(in) :: Kmm ! time level index 93 INTEGER :: jk, jn ! dummy loop indices 111 94 CHARACTER (len=25) :: charout 112 95 !!---------------------------------------------------------------------- … … 118 101 ! ! masked grid volume 119 102 DO jk = 1, jpk 120 cvol(:,:,jk) = e1e2t(:,:) * e3t _n(:,:,jk) * tmask(:,:,jk)103 cvol(:,:,jk) = e1e2t(:,:) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 121 104 END DO 122 105 ! ! total volume of the ocean … … 125 108 trai(:) = 0._wp ! initial content of all tracers 126 109 DO jn = 1, jptra 127 trai(jn) = trai(jn) + glob_sum( 'trcini', tr n(:,:,:,jn) * cvol(:,:,:) )110 trai(jn) = trai(jn) + glob_sum( 'trcini', tr(:,:,:,jn,Kmm) * cvol(:,:,:) ) 128 111 END DO 129 112 … … 140 123 ENDIF 141 124 IF(lwp) WRITE(numout,*) 142 IF( ln_ctl) THEN ! print mean trends (used for debugging)125 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 143 126 CALL prt_ctl_trc_init 144 127 WRITE(charout, FMT="('ini ')") 145 128 CALL prt_ctl_trc_info( charout ) 146 CALL prt_ctl_trc( tab4d=tr n, mask=tmask, clinfo=ctrcnm )129 CALL prt_ctl_trc( tab4d=tr(:,:,:,:,Kmm), mask=tmask, clinfo=ctrcnm ) 147 130 ENDIF 148 131 9000 FORMAT(' tracer nb : ',i2,' name :',a10,' initial content :',e18.10) … … 151 134 152 135 153 SUBROUTINE trc_ini_sms 136 SUBROUTINE trc_ini_sms( Kmm ) 154 137 !!---------------------------------------------------------------------- 155 138 !! *** ROUTINE trc_ini_sms *** … … 162 145 USE trcini_my_trc ! MY_TRC initialisation 163 146 ! 147 INTEGER, INTENT(in) :: Kmm ! time level indices 164 148 INTEGER :: jn 165 149 !!---------------------------------------------------------------------- … … 175 159 ln_trc_obc(jn) = sn_tracer(jn)%llobc 176 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 177 171 ! 178 IF( ln_pisces ) CALL trc_ini_pisces ! PISCES model179 IF( ln_my_trc ) CALL trc_ini_my_trc ! MY_TRC model180 IF( ll_cfc ) CALL trc_ini_cfc ! CFC's181 IF( ln_c14 ) CALL trc_ini_c14 ! C14 model182 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 183 177 ! 184 178 IF(lwp) THEN ! control print … … 191 185 END DO 192 186 ENDIF 187 IF( lwp .AND. ln_trcbc .AND. lltrcbc ) THEN 188 WRITE(numout,*) 189 WRITE(numout,*) ' Applying tracer boundary conditions ' 190 ENDIF 191 193 192 9001 FORMAT(3x,i3,1x,a10,3x,l2,3x,l2,3x,l2,3x,l2) 194 193 ! … … 221 220 222 221 223 SUBROUTINE trc_ini_state 222 SUBROUTINE trc_ini_state( Kbb, Kmm, Kaa ) 224 223 !!---------------------------------------------------------------------- 225 224 !! *** ROUTINE trc_ini_state *** … … 230 229 USE trcdta ! initialisation from files 231 230 ! 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_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 238 241 ! 239 242 ! 240 243 IF( ln_rsttr ) THEN ! restart from a file 241 244 ! 242 CALL trc_rst_read 245 CALL trc_rst_read( Kbb, Kmm ) 243 246 ! 244 247 ELSE ! Initialisation of tracer from a file that may also be used for damping … … 249 252 IF( ln_trc_ini(jn) ) THEN 250 253 jl = n_trc_index(jn) 251 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) ) 252 255 ! 253 256 ! deallocate data structure if data are not used for damping … … 263 266 ENDIF 264 267 ! 265 tr b(:,:,:,:) = trn(:,:,:,:)268 tr(:,:,:,:,Kbb) = tr(:,:,:,:,Kmm) 266 269 ! 267 270 ENDIF 268 271 ! 269 tr a(:,:,:,:) = 0._wp270 ! ! Partial top/bottom cell: GRADh(tr n)272 tr(:,:,:,:,Kaa) = 0._wp 273 ! ! Partial top/bottom cell: GRADh(tr(Kmm)) 271 274 END SUBROUTINE trc_ini_state 272 275
Note: See TracChangeset
for help on using the changeset viewer.