Changeset 3294 for trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90
- Timestamp:
- 2012-01-28T17:44:18+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90
r2715 r3294 13 13 !! trcsms_pisces : Time loop of passive tracers sms 14 14 !!---------------------------------------------------------------------- 15 USE oce_trc ! 16 USE trc 17 USE sms_pisces 18 19 USE p4zint ! 20 USE p4zche ! 21 USE p4zbio ! 22 USE p4zsink ! 23 USE p4zopt ! 24 USE p4zlim ! 25 USE p4zprod ! 26 USE p4zmort ! 27 USE p4zmicro ! 28 USE p4zmeso ! 29 USE p4zrem ! 30 USE p4zsed ! 31 USE p4zlys ! 32 USE p4zflx ! 33 34 USE prtctl_trc 35 36 USE trdmod_oce 37 USE trdmod_trc 38 39 USE sedmodel 15 USE oce_trc ! shared variables between ocean and passive tracers 16 USE trc ! passive tracers common variables 17 USE sms_pisces ! PISCES Source Minus Sink variables 18 USE p4zbio ! Biological model 19 USE p4zche ! Chemical model 20 USE p4zlys ! Calcite saturation 21 USE p4zflx ! Gas exchange 22 USE p4zsed ! Sedimentation 23 USE p4zint ! time interpolation 24 USE trdmod_oce ! Ocean trends variables 25 USE trdmod_trc ! TOP trends variables 26 USE sedmodel ! Sediment model 27 USE prtctl_trc ! print control for debugging 40 28 41 29 IMPLICIT NONE … … 43 31 44 32 PUBLIC trc_sms_pisces ! called in trcsms.F90 33 34 LOGICAL :: ln_check_mass = .false. !: Flag to check mass conservation 35 36 INTEGER :: numno3 !: logical unit for NO3 budget 37 INTEGER :: numalk !: logical unit for talk budget 38 INTEGER :: numsil !: logical unit for Si budget 45 39 46 40 !!---------------------------------------------------------------------- … … 63 57 !! - ... 64 58 !!--------------------------------------------------------------------- 65 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released66 USE wrk_nemo, ONLY: ztrpis => wrk_3d_1 ! used for pisces sms trends67 59 ! 68 60 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 71 63 CHARACTER (len=25) :: charout 72 64 !!--------------------------------------------------------------------- 73 74 IF( kt == nit000 ) CALL trc_sms_pisces_init ! Initialization (first time-step only) 75 76 IF( wrk_in_use(3,1) ) THEN 77 CALL ctl_stop('trc_sms_pisces : requested workspace array unavailable.') ; RETURN 78 ENDIF 65 ! 66 IF( nn_timing == 1 ) CALL timing_start('trc_sms_pisces') 67 ! 68 IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 ) CALL trc_sms_pisces_dmp( kt ) ! Relaxation of some tracers 69 CALL trc_sms_pisces_mass_conserv( kt ) ! Mass conservation checking 79 70 80 71 IF( ndayflxtr /= nday_year ) THEN ! New days … … 86 77 IF(lwp) write(numout,*) '~~~~~~' 87 78 88 CALL p4z_che ! computation of chemical constants89 CALL p4z_int ! computation of various rates for biogeochemistry79 CALL p4z_che ! computation of chemical constants 80 CALL p4z_int ! computation of various rates for biogeochemistry 90 81 ! 91 82 ENDIF … … 109 100 END DO 110 101 111 112 102 IF( l_trdtrc ) THEN 113 103 DO jn = jp_pcs0, jp_pcs1 114 ztrpis(:,:,:) = tra(:,:,:,jn) 115 CALL trd_mod_trc( ztrpis, jn, jptra_trd_sms, kt ) ! save trends 104 CALL trd_mod_trc( tra(:,:,:,jn), jn, jptra_trd_sms, kt ) ! save trends 116 105 END DO 117 DEALLOCATE( ztrpis )118 106 END IF 119 107 … … 127 115 ! 128 116 ENDIF 129 130 IF( wrk_not_released(3,1) ) CALL ctl_stop('trc_sms_pisces : failed to release workspace array.')131 117 ! 118 IF( nn_timing == 1 ) CALL timing_stop('trc_sms_pisces') 119 ! 132 120 END SUBROUTINE trc_sms_pisces 133 121 134 SUBROUTINE trc_sms_pisces_ init122 SUBROUTINE trc_sms_pisces_dmp( kt ) 135 123 !!---------------------------------------------------------------------- 136 !! *** ROUTINE trc_sms_pisces_init *** 137 !! 138 !! ** Purpose : Initialization of PH variable 139 !! 124 !! *** trc_sms_pisces_dmp *** 125 !! 126 !! ** purpose : Relaxation of some tracers 140 127 !!---------------------------------------------------------------------- 141 INTEGER :: ji, jj, jk 142 REAL(wp) :: zcaralk, zbicarb, zco3 143 REAL(wp) :: ztmas, ztmas1 144 145 IF( .NOT. ln_rsttr ) THEN 146 ! Initialization of chemical variables of the carbon cycle 147 ! -------------------------------------------------------- 148 DO jk = 1, jpk 149 DO jj = 1, jpj 150 DO ji = 1, jpi 151 ztmas = tmask(ji,jj,jk) 152 ztmas1 = 1. - tmask(ji,jj,jk) 153 zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) 154 zco3 = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 155 zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk ) 156 hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 157 END DO 158 END DO 159 END DO 160 ! 161 END IF 162 163 ! Time step duration for biology 164 xstep = rfact2 / rday 165 166 CALL p4z_sink_init ! vertical flux of particulate organic matter 167 CALL p4z_opt_init ! Optic: PAR in the water column 168 CALL p4z_lim_init ! co-limitations by the various nutrients 169 CALL p4z_prod_init ! phytoplankton growth rate over the global ocean. 170 CALL p4z_rem_init ! remineralisation 171 CALL p4z_mort_init ! phytoplankton mortality 172 CALL p4z_micro_init ! microzooplankton 173 CALL p4z_meso_init ! mesozooplankton 174 CALL p4z_sed_init ! sedimentation 175 CALL p4z_lys_init ! calcite saturation 176 CALL p4z_flx_init ! gas exchange 177 178 ndayflxtr = 0 179 180 END SUBROUTINE trc_sms_pisces_init 128 ! 129 INTEGER, INTENT( in ) :: kt ! time step 130 ! 131 REAL(wp) :: alkmean = 2426. ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 132 REAL(wp) :: po4mean = 2.165 ! mean value of phosphates 133 REAL(wp) :: no3mean = 30.90 ! mean value of nitrate 134 REAL(wp) :: silmean = 91.51 ! mean value of silicate 135 ! 136 REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum 137 !!--------------------------------------------------------------------- 138 139 140 IF(lwp) WRITE(numout,*) 141 IF(lwp) WRITE(numout,*) ' trc_sms_pisces_dmp : Relaxation of nutrients at time-step kt = ', kt 142 IF(lwp) WRITE(numout,*) 143 144 IF( cp_cfg == "orca" .AND. .NOT. lk_c1d ) THEN ! ORCA condiguration (not 1D) ! 145 ! ! --------------------------- ! 146 ! set total alkalinity, phosphate, nitrate & silicate 147 zarea = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6 148 149 zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) ) * zarea 150 zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) ) * zarea / 122. 151 zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) ) * zarea / 7.6 152 zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 153 154 IF(lwp) WRITE(numout,*) ' TALK mean : ', zalksum 155 trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksum 156 157 IF(lwp) WRITE(numout,*) ' PO4 mean : ', zpo4sum 158 trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sum 159 160 IF(lwp) WRITE(numout,*) ' NO3 mean : ', zno3sum 161 trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sum 162 163 IF(lwp) WRITE(numout,*) ' SiO3 mean : ', zsilsum 164 trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsum ) 165 ! 166 ENDIF 167 168 END SUBROUTINE trc_sms_pisces_dmp 169 170 SUBROUTINE trc_sms_pisces_mass_conserv ( kt ) 171 !!---------------------------------------------------------------------- 172 !! *** ROUTINE trc_sms_pisces_mass_conserv *** 173 !! 174 !! ** Purpose : Mass conservation check 175 !! 176 !!--------------------------------------------------------------------- 177 ! 178 INTEGER, INTENT( in ) :: kt ! ocean time-step index 179 !! 180 REAL(wp) :: zalkbudget, zno3budget, zsilbudget 181 ! 182 NAMELIST/nampismass/ ln_check_mass 183 !!--------------------------------------------------------------------- 184 185 IF( kt == nittrc000 ) THEN 186 REWIND( numnatp ) 187 READ ( numnatp, nampismass ) 188 IF(lwp) THEN ! control print 189 WRITE(numout,*) ' ' 190 WRITE(numout,*) ' Namelist parameter for mass conservation checking' 191 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 192 WRITE(numout,*) ' Flag to check mass conservation of NO3/Si/TALK ln_check_mass = ', ln_check_mass 193 ENDIF 194 195 IF( ln_check_mass .AND. lwp) THEN ! Open budget file of NO3, ALK, Si 196 CALL ctl_opn( numno3, 'no3.budget' , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 197 CALL ctl_opn( numsil, 'sil.budget' , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 198 CALL ctl_opn( numalk, 'talk.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 199 ENDIF 200 ENDIF 201 202 IF( ln_check_mass ) THEN ! Compute the budget of NO3, ALK, Si 203 zno3budget = glob_sum( ( trn(:,:,:,jpno3) + trn(:,:,:,jpnh4) & 204 & + trn(:,:,:,jpphy) + trn(:,:,:,jpdia) & 205 & + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) & 206 & + trn(:,:,:,jppoc) + trn(:,:,:,jpgoc) & 207 & + trn(:,:,:,jpdoc) ) * cvol(:,:,:) ) 208 ! 209 zsilbudget = glob_sum( ( trn(:,:,:,jpsil) + trn(:,:,:,jpdsi) & 210 & + trn(:,:,:,jpbsi) ) * cvol(:,:,:) ) 211 ! 212 zalkbudget = glob_sum( ( trn(:,:,:,jpno3) * rno3 & 213 & + trn(:,:,:,jptal) & 214 & + trn(:,:,:,jpcal) * 2. ) * cvol(:,:,:) ) 215 216 IF( lwp ) THEN 217 WRITE(numno3,9500) kt, zno3budget / areatot 218 WRITE(numsil,9500) kt, zsilbudget / areatot 219 WRITE(numalk,9500) kt, zalkbudget / areatot 220 ENDIF 221 ENDIF 222 9500 FORMAT(i10,e18.10) 223 ! 224 END SUBROUTINE trc_sms_pisces_mass_conserv 181 225 182 226 #else
Note: See TracChangeset
for help on using the changeset viewer.