- Timestamp:
- 2015-11-20T09:39:06+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/trcini.F90
r5038 r5901 18 18 USE oce_trc ! shared variables between ocean and passive tracers 19 19 USE trc ! passive tracers common variables 20 USE trcrst ! passive tracers restart21 20 USE trcnam ! Namelist read 22 USE trcini_cfc ! CFC initialisation23 USE trcini_pisces ! PISCES initialisation24 USE trcini_c14b ! C14 bomb initialisation25 USE trcini_my_trc ! MY_TRC initialisation26 USE trcdta ! initialisation from files27 21 USE daymod ! calendar manager 28 USE zpshde ! partial step: hor. derivative (zps_hde routine)29 22 USE prtctl_trc ! Print control passive tracers (prt_ctl_trc_init routine) 30 23 USE trcsub ! variables to substep passive tracers 24 USE trcrst 31 25 USE lib_mpp ! distribued memory computing library 32 26 USE sbc_oce 27 USE trcice ! tracers in sea ice 33 28 34 29 IMPLICIT NONE … … 58 53 !! or read data or analytical formulation 59 54 !!--------------------------------------------------------------------- 60 INTEGER :: jk, jn, jl ! dummy loop indices61 CHARACTER (len=25) :: charout62 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrcdta ! 4D workspace63 !!---------------------------------------------------------------------64 55 ! 65 56 IF( nn_timing == 1 ) CALL timing_start('trc_init') … … 69 60 IF(lwp) WRITE(numout,*) '~~~~~~~' 70 61 71 CALL top_alloc() ! allocate TOP arrays 72 73 #if defined key_offline 74 ltrcdm2dc = .FALSE. 75 #endif 76 77 IF( ltrcdm2dc )CALL ctl_warn( ' Diurnal cycle on physics but not in PISCES or LOBSTER ' ) 78 79 IF( nn_cla == 1 ) & 80 & CALL ctl_stop( ' Cross Land Advection not yet implemented with passive tracer ; nn_cla must be 0' ) 81 82 CALL trc_nam ! read passive tracers namelists 62 ! 63 CALL top_alloc() ! allocate TOP arrays 64 ! 65 CALL trc_ini_ctl ! control 66 ! 67 CALL trc_nam ! read passive tracers namelists 83 68 ! 84 69 IF(lwp) WRITE(numout,*) … … 87 72 ! 88 73 IF(lwp) WRITE(numout,*) 89 ! masked grid volume 74 ! 75 CALL trc_ini_sms ! SMS 76 ! 77 CALL trc_ini_trp ! passive tracers transport 78 ! 79 CALL trc_ice_ini ! Tracers in sea ice 80 ! 81 IF( lwp ) & 82 & CALL ctl_opn( numstr, 'tracer.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp , narea ) 83 ! 84 CALL trc_ini_state ! passive tracers initialisation : from a restart or from clim 85 ! 86 IF( nn_dttrc /= 1 ) CALL trc_sub_ini ! Initialize variables for substepping passive tracers 87 ! 88 CALL trc_ini_inv ! Inventories 89 ! 90 IF( nn_timing == 1 ) CALL timing_stop('trc_init') 91 ! 92 END SUBROUTINE trc_init 93 94 95 SUBROUTINE trc_ini_ctl 96 !!---------------------------------------------------------------------- 97 !! *** ROUTINE trc_ini_ctl *** 98 !! ** Purpose : Control + ocean volume 99 !!---------------------------------------------------------------------- 100 INTEGER :: jk ! dummy loop indices 101 ! 102 ! Define logical parameter ton control dirunal cycle in TOP 103 l_trcdm2dc = ln_dm2dc .OR. ( ln_cpl .AND. ncpl_qsr_freq /= 1 ) 104 l_trcdm2dc = l_trcdm2dc .AND. .NOT. lk_offline 105 IF( l_trcdm2dc .AND. lwp ) CALL ctl_warn( 'Coupling with passive tracers and used of diurnal cycle.', & 106 & 'Computation of a daily mean shortwave for some biogeochemical models ' ) 107 ! 108 END SUBROUTINE trc_ini_ctl 109 110 111 SUBROUTINE trc_ini_inv 112 !!---------------------------------------------------------------------- 113 !! *** ROUTINE trc_ini_stat *** 114 !! ** Purpose : passive tracers inventories at initialsation phase 115 !!---------------------------------------------------------------------- 116 INTEGER :: jk, jn ! dummy loop indices 117 CHARACTER (len=25) :: charout 118 !!---------------------------------------------------------------------- 90 119 ! ! masked grid volume 91 120 DO jk = 1, jpk … … 95 124 ! ! total volume of the ocean 96 125 areatot = glob_sum( cvol(:,:,:) ) 97 126 ! 127 trai(:) = 0._wp ! initial content of all tracers 128 DO jn = 1, jptra 129 trai(jn) = trai(jn) + glob_sum( trn(:,:,:,jn) * cvol(:,:,:) ) 130 END DO 131 132 IF(lwp) THEN ! control print 133 WRITE(numout,*) 134 WRITE(numout,*) 135 WRITE(numout,*) ' *** Total number of passive tracer jptra = ', jptra 136 WRITE(numout,*) ' *** Total volume of ocean = ', areatot 137 WRITE(numout,*) ' *** Total inital content of all tracers ' 138 WRITE(numout,*) 139 DO jn = 1, jptra 140 WRITE(numout,9000) jn, TRIM( ctrcnm(jn) ), trai(jn) 141 ENDDO 142 WRITE(numout,*) 143 ENDIF 144 IF(lwp) WRITE(numout,*) 145 IF(ln_ctl) THEN ! print mean trends (used for debugging) 146 CALL prt_ctl_trc_init 147 WRITE(charout, FMT="('ini ')") 148 CALL prt_ctl_trc_info( charout ) 149 CALL prt_ctl_trc( tab4d=trn, mask=tmask, clinfo=ctrcnm ) 150 ENDIF 151 9000 FORMAT(' tracer nb : ',i2,' name :',a10,' initial content :',e18.10) 152 ! 153 END SUBROUTINE trc_ini_inv 154 155 156 SUBROUTINE trc_ini_sms 157 !!---------------------------------------------------------------------- 158 !! *** ROUTINE trc_ini_sms *** 159 !! ** Purpose : SMS initialisation 160 !!---------------------------------------------------------------------- 161 USE trcini_cfc ! CFC initialisation 162 USE trcini_pisces ! PISCES initialisation 163 USE trcini_c14b ! C14 bomb initialisation 164 USE trcini_my_trc ! MY_TRC initialisation 165 !!---------------------------------------------------------------------- 98 166 IF( lk_pisces ) CALL trc_ini_pisces ! PISCES bio-model 99 167 IF( lk_cfc ) CALL trc_ini_cfc ! CFC tracers 100 168 IF( lk_c14b ) CALL trc_ini_c14b ! C14 bomb tracer 101 169 IF( lk_my_trc ) CALL trc_ini_my_trc ! MY_TRC tracers 102 103 IF( lwp ) THEN 104 ! 105 CALL ctl_opn( numstr, 'tracer.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp , narea ) 106 ! 107 ENDIF 108 170 ! 171 END SUBROUTINE trc_ini_sms 172 173 SUBROUTINE trc_ini_trp 174 !!---------------------------------------------------------------------- 175 !! *** ROUTINE trc_ini_trp *** 176 !! 177 !! ** Purpose : Allocate all the dynamic arrays of the OPA modules 178 !!---------------------------------------------------------------------- 179 USE trcdmp , ONLY: trc_dmp_ini 180 USE trcadv , ONLY: trc_adv_ini 181 USE trcldf , ONLY: trc_ldf_ini 182 USE trczdf , ONLY: trc_zdf_ini 183 USE trcrad , ONLY: trc_rad_ini 184 ! 185 INTEGER :: ierr 186 !!---------------------------------------------------------------------- 187 ! 188 IF( ln_trcdmp ) CALL trc_dmp_ini ! damping 189 CALL trc_adv_ini ! advection 190 CALL trc_ldf_ini ! lateral diffusion 191 CALL trc_zdf_ini ! vertical diffusion 192 CALL trc_rad_ini ! positivity of passive tracers 193 ! 194 END SUBROUTINE trc_ini_trp 195 196 197 SUBROUTINE trc_ini_state 198 !!---------------------------------------------------------------------- 199 !! *** ROUTINE trc_ini_state *** 200 !! ** Purpose : Initialisation of passive tracer concentration 201 !!---------------------------------------------------------------------- 202 USE zpshde ! partial step: hor. derivative (zps_hde routine) 203 USE trcrst ! passive tracers restart 204 USE trcdta ! initialisation from files 205 ! 206 INTEGER :: jk, jn, jl ! dummy loop indices 207 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrcdta ! 4D workspace 208 !!---------------------------------------------------------------------- 209 ! 109 210 IF( ln_trcdta ) CALL trc_dta_init(jptra) 110 111 211 112 212 IF( ln_rsttr ) THEN … … 143 243 144 244 tra(:,:,:,:) = 0._wp 145 IF( ln_zps .AND. .NOT. lk_c1d ) & ! Partial steps: before horizontal gradient of passive 146 & CALL zps_hde( nit000, jptra, trn, pgtu=gtru, pgtv=gtrv, sgtu=gtrui, sgtv=gtrvi ) ! tracers at the bottom ocean level 147 148 ! 149 IF( nn_dttrc /= 1 ) CALL trc_sub_ini ! Initialize variables for substepping passive tracers 150 ! 151 152 trai(:) = 0._wp ! initial content of all tracers 153 DO jn = 1, jptra 154 trai(jn) = trai(jn) + glob_sum( trn(:,:,:,jn) * cvol(:,:,:) ) 155 END DO 156 157 IF(lwp) THEN ! control print 158 WRITE(numout,*) 159 WRITE(numout,*) 160 WRITE(numout,*) ' *** Total number of passive tracer jptra = ', jptra 161 WRITE(numout,*) ' *** Total volume of ocean = ', areatot 162 WRITE(numout,*) ' *** Total inital content of all tracers ' 163 WRITE(numout,*) 164 DO jn = 1, jptra 165 WRITE(numout,9000) jn, TRIM( ctrcnm(jn) ), trai(jn) 166 ENDDO 167 WRITE(numout,*) 168 ENDIF 169 IF(lwp) WRITE(numout,*) 170 IF(ln_ctl) THEN ! print mean trends (used for debugging) 171 CALL prt_ctl_trc_init 172 WRITE(charout, FMT="('ini ')") 173 CALL prt_ctl_trc_info( charout ) 174 CALL prt_ctl_trc( tab4d=trn, mask=tmask, clinfo=ctrcnm ) 175 ENDIF 176 9000 FORMAT(' tracer nb : ',i2,' name :',a10,' initial content :',e18.10) 177 ! 178 IF( nn_timing == 1 ) CALL timing_stop('trc_init') 179 ! 180 END SUBROUTINE trc_init 245 ! ! Partial top/bottom cell: GRADh(trn) 246 END SUBROUTINE trc_ini_state 181 247 182 248
Note: See TracChangeset
for help on using the changeset viewer.